[SCM] saga branch, upstream, updated. d5f84157de9ed72f33b2f659afc76f6eb320ca09

Johan Van de Wauw johan.vandewauw at gmail.com
Fri Mar 25 22:21:44 UTC 2011


The following commit has been merged in the upstream branch:
commit a1d2f7aad5d20ad79b1060e0e8dae0314a0834d6
Author: Johan Van de Wauw <johan.vandewauw at gmail.com>
Date:   Fri Mar 25 22:24:06 2011 +0100

    Imported Upstream version 2.0.6

diff --git a/ChangeLog b/ChangeLog
index ac123e0..6a5230d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,10 +1,13420 @@
-_______________________________________________________________________________
-
-         SAGA 2.0 - System for Automated Geoscientific Analyses
-_______________________________________________________________________________
-
-Change Log
-_______________________________________________________________________________
-
-* May, 15th 2007: Release of SAGA 2.0
-
+2010-11-18 13:12  oconrad
+
+	* src/modules_projection/:
+	  pj_geotrans/pj_geotrans/lib/lib_src_geotrans2.2.6.zip,
+	  pj_proj4/pj_proj4/lib/lib_src_proj-4.6.1.zip: proj4 and geotrans
+	  lib sources removed (geotrans sources are now integrated and
+	  proj4 works well with the official distribution)
+
+2010-11-18 13:08  oconrad
+
+	* src/modules/grid/grid_spline/Gridding_Spline_MBA_Grid.cpp:
+	  interpolation target grid needs to be of floating pointt type
+	  (optional)
+
+2010-11-18 12:54  oconrad
+
+	* src/saga_core/saga_api/grid.cpp: bug fix: missing 'return( true
+	  )' on csg_grid::create(csg_grid *p, ...)
+
+2010-11-17 18:21  oconrad
+
+	*
+	  src/modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp:
+	  no data set for duration
+
+2010-11-17 17:43  oconrad
+
+	* src/saga_core/saga_gui/: wksp_data_layers.cpp,
+	  wksp_map_buttons.cpp: removed  tooltip flickering (windows7)
+
+2010-11-16 17:29  oconrad
+
+	* src/saga_core/saga_gui/wksp_base_control.cpp: first fix for msw
+	  vista/7 problems with wxTreeCtrl (multi-select deletion), but
+	  there might be more to be done...
+
+2010-11-16 17:27  oconrad
+
+	* src/saga_core/saga_api/: dataobject.cpp, dataobject.h,
+	  pointcloud.cpp, pointcloud.h: Set_NoData_Value(double) now only
+	  implemented in CSG_Data_Object, avoids swig/java conflicts
+
+2010-11-16 12:47  oconrad
+
+	* src/: saga_core/saga_api/api_core.h,
+	  modules_projection/pj_georeference/pj_georeference/lmdif0.c: BSD
+	  portability: <malloc.h> not included if __BSD__ is defined
+
+2010-11-16 12:26  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_lighting/:
+	  ta_lighting.dsp, ta_lighting.vcproj: sado_solarradiation removed
+
+2010-11-16 12:25  oconrad
+
+	* src/modules/table/table_calculus/table_calculus.dsp:
+	  cluster_analysis added
+
+2010-11-16 12:25  oconrad
+
+	* src/saga_core/saga_api/saga_api.h: doc_html.h, doc_pdf.h,
+	  doc_svg.h removed from swig includes
+
+2010-11-16 11:37  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_lighting/:
+	  MLB_Interface.cpp, Makefile.am, SADO_SolarRadiation.cpp,
+	  SADO_SolarRadiation.h, SolarRadiation.cpp, SolarRadiation.h,
+	  ta_lighting.vcxproj, ta_lighting.vcxproj.filters:
+	  sado_solarradiation removed. bug fixes in solarradiation
+
+2010-11-15 18:20  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_lighting/:
+	  SolarRadiation.cpp, SolarRadiation.h: completely overworked
+	  insolation module (sado_solarradiation is now obsolete)
+
+2010-11-15 18:19  oconrad
+
+	* src/saga_core/saga_api/grid_operation.cpp: removed unnecassary
+	  processing on addition/multiplication
+
+2010-11-09 23:12  johanvdw
+
+	* configure.in: Only check for python/swig on --enable-python
+
+2010-11-09 23:01  johanvdw
+
+	* src/modules/grid/grid_analysis/Grid_Pattern.cpp: Fix minor memory
+	  leak (Grid Pattern)
+
+2010-11-09 11:26  oconrad
+
+	* src/:
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.vcxproj,
+	  modules/grid/grid_analysis/grid_analysis.vcxproj,
+	  modules/grid/grid_calculus/grid_calculus.vcxproj,
+	  modules/grid/grid_calculus_bsl/grid_calculus_bsl.vcxproj,
+	  modules/grid/grid_discretisation/grid_discretisation.vcxproj,
+	  modules/grid/grid_filter/grid_filter.vcxproj,
+	  modules/grid/grid_gridding/grid_gridding.vcxproj,
+	  modules/grid/grid_spline/grid_spline.vcxproj,
+	  modules/grid/grid_tools/grid_tools.vcxproj,
+	  modules/grid/grid_visualisation/grid_visualisation.vcxproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcxproj,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcxproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcxproj,
+	  modules_geostatistics/geostatistics/geostatistics_regression/geostatistics_regression.vcxproj,
+	  modules_io/docs/docs_html/docs_html.vcxproj,
+	  modules_io/docs/docs_pdf/docs_pdf.vcxproj,
+	  modules_contrib/contrib_s_liersch/ihacres/ihacres.vcxproj,
+	  modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.vcxproj,
+	  modules_io/db/io_odbc/io_odbc.vcxproj,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.vcxproj,
+	  modules_io/gdal/io_gdal/io_gdal.vcxproj,
+	  modules_io/gps/io_gps/io_gps.vcxproj,
+	  modules_io/grid/io_grid/io_grid.vcxproj,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.vcxproj,
+	  modules_io/grid/io_grid_image/io_grid_image.vcxproj,
+	  modules_io/shapes/io_shapes/io_shapes.vcxproj,
+	  modules_io/shapes/io_shapes_dxf/io_shapes_dxf.vcxproj,
+	  modules_io/shapes/io_shapes_las/io_shapes_las.vcxproj,
+	  modules_io/table/io_table/io_table.vcxproj,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.vcxproj,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.vcxproj,
+	  modules_images/modules_opencv/opencv/opencv.vcxproj,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.vcxproj,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.vcxproj,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.vcxproj,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcxproj,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.vcxproj,
+	  modules_recreations/recreations/recreations_games/recreations_games.vcxproj,
+	  saga_core/saga_api/saga_api.vcxproj,
+	  saga_core/saga_cmd/saga_cmd.vcxproj,
+	  saga_core/saga_gdi/saga_gdi.vcxproj,
+	  saga_core/saga_gui/saga_gui.vcxproj,
+	  saga_core/saga_odbc/saga_odbc.vcxproj,
+	  modules/shapes/shapes_grid/shapes_grid.vcxproj,
+	  modules/shapes/shapes_lines/shapes_lines.vcxproj,
+	  modules/shapes/shapes_points/shapes_points.vcxproj,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcxproj,
+	  modules/shapes/shapes_tools/shapes_tools.vcxproj,
+	  modules/shapes/shapes_transect/shapes_transect.vcxproj,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.vcxproj,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.vcxproj,
+	  modules_simulation/fire/sim_fire_spreading/sim_fire_spreading.vcxproj,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcxproj,
+	  modules/table/table_calculus/table_calculus.vcxproj,
+	  modules/table/table_tools/table_tools.vcxproj,
+	  modules/tin/tin_tools/tin_tools.vcxproj,
+	  modules_images/modules_vigra/vigra/vigra.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcxproj:
+	  msvc10 x64 unicode build targets
+
+2010-11-09 11:24  oconrad
+
+	* src/: modules/grid/grid_spline/csa.c,
+	  modules/shapes/shapes_polygons/Polygon_Clipper.cpp,
+	  modules_io/docs/docs_pdf/Polygon_Clipper.cpp: C exit() removed
+
+2010-11-09 11:21  oconrad
+
+	* src/saga_core/saga_cmd/module_library.cpp: input data will now be
+	  saved automatically if modified by module
+
+2010-11-09 11:19  oconrad
+
+	* src/saga_core/saga_api/: shapes_io.cpp, table_dbase.cpp,
+	  table_dbase.h, table_io.cpp: no data support for dbase files
+	  (read/write)
+
+2010-11-09 11:19  oconrad
+
+	* src/saga_core/saga_api/: api_string.cpp, metadata.cpp: floating
+	  point precision fitted to value (currently up to 16 decimals)
+
+2010-11-08 12:34  reklov_w
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_hydrology/:
+	  LakeFlood.cpp, LakeFlood.h, LakeFloodInteractive.cpp: bug fix for
+	  memory leak in case of multiple seed cells in non-interactive
+	  version; enhancements: allow multiple seed cells, allow seeds to
+	  be local water depth or absolute water level, output water depth
+	  and surface, incremetal flooding with interactive version
+
+2010-11-08 10:20  johanvdw
+
+	* src/saga_core/saga_api/Makefile.am: Disable libharu in python
+	  (when not available)
+
+2010-11-08 10:19  johanvdw
+
+	* src/saga_core/saga_api/Makefile.am: Remove saga_api_wrap.cxx on
+	  make clean
+
+2010-11-08 09:45  oconrad
+
+	* src/saga_core/saga_gui/wksp.cpp: 'load tin' via file menu now
+	  enabled (loads any shapefile and converts it to tin)
+
+2010-11-06 23:34  reklov_w
+
+	* ChangeLog: updated to current cvs
+
+2010-11-06 16:50  reklov_w
+
+	* src/modules_io/docs/: docs_html/docs_html.vcproj,
+	  docs_pdf/docs_pdf.vcproj: EXPORTS preprocessor defines added for
+	  x64 targets
+
+2010-11-06 16:20  reklov_w
+
+	* src/modules/table/table_calculus/table_calculus.vcproj: cluster
+	  analysis for shapes/table attributes added
+
+2010-11-06 16:16  johanvdw
+
+	* configure.in, src/modules_io/docs/docs_pdf/Makefile.am: Only
+	  build module if libharu is found
+
+2010-11-06 12:59  johanvdw
+
+	* Makefile.am, configure.in, m4/ax_pkg_swig.m4,
+	  m4/ax_python_devel.m4, m4/ax_swig_enable_cxx.m4,
+	  m4/ax_swig_python.m4, src/saga_core/saga_api/Makefile.am: Update
+	  autotools to build python bindings
+
+2010-11-06 12:55  johanvdw
+
+	* src/saga_core/saga_api/saga_api.h: Enable swig unicode build
+
+2010-11-06 12:51  johanvdw
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_morphometry/:
+	  ProtectionIndex.cpp, RealArea.cpp: Fix some memory leaks
+
+2010-11-05 15:59  oconrad
+
+	* src/modules/grid/grid_calculus/: MLB_Interface.cpp,
+	  grid_difference.cpp, grid_difference.h: simple tools added for
+	  sum and product calculation
+
+2010-11-05 15:58  oconrad
+
+	* src/saga_core/saga_api/mat_tools.cpp: cluster analysis now also
+	  allowed to work on one single feature
+
+2010-11-05 15:56  oconrad
+
+	* src/modules/grid/grid_analysis/: Fuzzify.cpp, Fuzzify.h,
+	  FuzzyAND.cpp, FuzzyAND.h, FuzzyOR.cpp, FuzzyOR.h: improvements
+	  and bug fixes for fuzzy set analysis
+
+2010-11-05 15:55  oconrad
+
+	* src/modules/grid/: grid_calculus/Grid_Calculator.cpp,
+	  grid_calculus/Grid_Calculator.h, grid_filter/Filter.cpp,
+	  grid_filter/Filter.h, grid_filter/Filter_3x3.cpp,
+	  grid_filter/Filter_3x3.h, grid_filter/Filter_Gauss.cpp,
+	  grid_filter/Filter_LoG.cpp, grid_filter/Filter_Majority.cpp:
+	  improved output grid naming
+
+2010-11-05 15:53  oconrad
+
+	* src/: makefile.linux, saga.bat: old linux and mingw makefiles
+	  have been removed
+
+2010-11-05 15:51  oconrad
+
+	* src/modules/table/table_calculus/: MLB_Interface.cpp,
+	  Makefile.am, table_calculus.vcxproj,
+	  table_calculus.vcxproj.filters, table_cluster_analysis.cpp,
+	  table_cluster_analysis.h: cluster analysis for shapes/table
+	  attributes added
+
+2010-11-03 20:32  oconrad
+
+	* src/saga_core/saga_gui/: wksp_data_manager.cpp,
+	  wksp_data_manager.h, wksp_grid_manager.cpp, wksp_grid_manager.h,
+	  wksp_shapes_manager.cpp, wksp_shapes_manager.h: improved gdal/ogr
+	  import via gui (adds to recent files list)
+
+2010-11-03 20:31  oconrad
+
+	* src/: modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.h,
+	  saga_core/saga_api/mat_tools.cpp, saga_core/saga_api/mat_tools.h:
+	  csg_cluster_analysis: optimisation and used for grids
+
+2010-11-03 12:11  oconrad
+
+	* src/saga_core/saga_api/: api_core.h, mat_tools.cpp, mat_tools.h:
+	  cluster analysis class added
+
+2010-11-02 13:56  oconrad
+
+	* src/modules_geostatistics/geostatistics/geostatistics_grid/:
+	  geostatistics_grid.dsp, geostatistics_grid.vcproj: morain's i
+	  calculation added
+
+2010-11-02 13:55  oconrad
+
+	* src/modules_io/gdal/io_gdal/io_gdal.dsp: vc6 project missed
+	  io_gdal_EXPORTS define
+
+2010-11-02 13:54  oconrad
+
+	*
+	  src/modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.h:
+	  vc6 compiler error fixed
+
+2010-11-02 13:26  oconrad
+
+	* configure.in: getting prepared for 2.0.6 release
+
+2010-11-02 12:04  oconrad
+
+	* src/saga_core/: saga_api/pointcloud.cpp,
+	  saga_gui/wksp_pointcloud.cpp, saga_gui/wksp_pointcloud.h:
+	  pointcloud points selection and interactive deletion enabled
+
+2010-11-02 12:03  oconrad
+
+	* src/modules_io/shapes/io_shapes_las/Makefile.am: typing error
+	  caused missing las_export.h in make dist target
+
+2010-11-02 12:00  oconrad
+
+	* src/modules/grid/grid_gridding/kernel_density.cpp: rounding error
+
+2010-11-02 11:59  oconrad
+
+	* src/saga_core/saga_api/api_core.h: unicode bug fix in
+	  csg_ui_parameter class
+
+2010-11-02 11:58  oconrad
+
+	* src/modules_geostatistics/geostatistics/geostatistics_grid/:
+	  MLB_Interface.cpp, Makefile.am, geostatistics_grid.vcxproj,
+	  geostatistics_grid.vcxproj.filters, grid_autocorrelation.cpp,
+	  grid_autocorrelation.h: simple moran's i for grids
+
+2010-10-29 17:48  oconrad
+
+	* src/modules/grid/grid_gridding/: grid_gridding.dsp,
+	  grid_gridding.vcproj: kernel density estimation: module added
+
+2010-10-29 17:43  oconrad
+
+	* src/saga_core/saga_api/pointcloud.cpp: suppress progress bar
+	  flickering
+
+2010-10-29 17:43  oconrad
+
+	* src/modules/grid/grid_gridding/: MLB_Interface.cpp, Makefile.am,
+	  grid_gridding.vcxproj, grid_gridding.vcxproj.filters,
+	  kernel_density.cpp, kernel_density.h: kernel density estimation:
+	  module added
+
+2010-10-29 12:18  oconrad
+
+	* src/saga_core/saga_gui/: wksp_data_manager.cpp,
+	  wksp_data_manager.h, wksp_layer.cpp: numbering of data set
+	  objects (number of leading zeros now user defined)
+
+2010-10-29 12:17  oconrad
+
+	* src/:
+	  modules_projection/pj_proj4/pj_proj4/crs_transform_shapes.cpp,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/pointcloud.h, saga_core/saga_api/shape.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/table.cpp, saga_core/saga_api/table.h,
+	  saga_core/saga_gui/dlg_list_base.cpp,
+	  saga_core/saga_gui/dlg_list_shapes.cpp,
+	  saga_core/saga_gui/dlg_list_shapes.h: enhanced pointcloud/shapes
+	  conformity, test case proj4 for shapes
+
+2010-10-27 11:37  oconrad
+
+	* src/modules/shapes/shapes_lines/: shapes_lines.dsp,
+	  shapes_lines.vcproj: peucker-douglas algorithm for line
+	  simplification added
+
+2010-10-27 11:30  oconrad
+
+	* src/saga_core/saga_gui/wksp_layer.cpp: bug fix: possible crash
+	  when accessing tree item after closing associated data set
+
+2010-10-27 11:29  oconrad
+
+	* src/saga_core/saga_gui/wksp_shapes_polygon.cpp: bug fix: possible
+	  crash with field names containing % characters
+
+2010-10-27 11:27  oconrad
+
+	* src/modules/shapes/shapes_lines/: MLB_Interface.cpp, Makefile.am,
+	  line_simplification.cpp, line_simplification.h,
+	  shapes_lines.vcxproj, shapes_lines.vcxproj.filters:
+	  peucker-douglas algorithm for line simplification added
+
+2010-10-25 17:24  oconrad
+
+	* src/: modules_io/docs/docs_html/docs_html.dsp,
+	  modules_io/docs/docs_html/docs_html.vcproj,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  modules_io/docs/docs_pdf/docs_pdf.dsp,
+	  modules_io/docs/docs_pdf/docs_pdf.vcproj,
+	  saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_gui/saga_gui.dsp,
+	  saga_core/saga_gui/saga_gui.vcproj,
+	  saga_core/saga_gui/wksp_grid_manager.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  saga.dsw, saga.sln: docs_html, docs_pdf moved to separate
+	  libraries
+
+2010-10-22 17:20  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_hydrology/:
+	  Flow.cpp, Flow.h, Flow_Parallel.cpp, Flow_Parallel.h: Triangular
+	  Multiple Flow Direction added/updated
+
+2010-10-22 16:48  oconrad
+
+	* src/modules_io/docs/docs_pdf/: Profile_Cross_Sections.cpp,
+	  Shapes_Report.cpp, Shapes_Report.h, Shapes_Summary.cpp,
+	  Shapes_Summary.h: menu path and name
+
+2010-10-22 16:47  oconrad
+
+	* src/modules_io/docs/docs_html/Makefile.am: typing error fixed
+
+2010-10-22 16:46  oconrad
+
+	* src/modules_io/docs/docs_html/: CreateWebContent.h,
+	  MLB_Interface.cpp, Makefile.am, docs_html.vcxproj,
+	  docs_html.vcxproj.filters, svg_interactive_map.cpp,
+	  svg_interactive_map.h: svg map export added
+
+2010-10-22 14:05  oconrad
+
+	* src/saga.vc10.sln: shapes_tools project included (was forgotten)
+
+2010-10-22 14:03  oconrad
+
+	* src/saga.vc10.sln: pdf/svg/html doc support moved from api to new
+	  module library
+
+2010-10-22 13:59  oconrad
+
+	* src/modules_io/Makefile.am,
+	  src/modules_io/docs/docs_html/CreateWebContent.cpp,
+	  src/modules_io/docs/docs_html/CreateWebContent.h,
+	  src/modules_io/docs/docs_html/MLB_Interface.cpp,
+	  src/modules_io/docs/docs_html/MLB_Interface.h,
+	  src/modules_io/docs/docs_html/Makefile.am,
+	  src/modules_io/docs/docs_html/doc_html.cpp,
+	  src/modules_io/docs/docs_html/doc_html.h,
+	  src/modules_io/docs/docs_html/doc_svg.cpp,
+	  src/modules_io/docs/docs_html/doc_svg.h,
+	  src/modules_io/docs/docs_html/docs_html.dsp,
+	  src/modules_io/docs/docs_html/docs_html.lng.txt,
+	  src/modules_io/docs/docs_html/docs_html.vcproj,
+	  src/modules_io/docs/docs_html/docs_html.vcxproj,
+	  src/modules_io/docs/docs_html/docs_html.vcxproj.filters,
+	  src/saga_core/saga_api/saga_api.vcxproj,
+	  src/modules_io/docs/Makefile.am,
+	  src/modules_io/docs/docs_pdf/MLB_Interface.cpp,
+	  src/modules_io/docs/docs_pdf/MLB_Interface.h,
+	  src/modules_io/docs/docs_pdf/Makefile.am,
+	  src/modules_io/docs/docs_pdf/Polygon_Clipper.cpp,
+	  src/modules_io/docs/docs_pdf/Polygon_Clipper.h,
+	  src/modules_io/docs/docs_pdf/Profile_Cross_Sections.cpp,
+	  src/modules_io/docs/docs_pdf/Profile_Cross_Sections.h,
+	  src/modules_io/docs/docs_pdf/Shapes_Report.cpp,
+	  src/modules_io/docs/docs_pdf/Shapes_Report.h,
+	  src/modules_io/docs/docs_pdf/Shapes_Summary.cpp,
+	  src/modules_io/docs/docs_pdf/Shapes_Summary.h,
+	  src/modules_io/docs/docs_pdf/doc_pdf.cpp,
+	  src/modules_io/docs/docs_pdf/doc_pdf.h,
+	  src/modules_io/docs/docs_pdf/docs_pdf.dsp,
+	  src/modules_io/docs/docs_pdf/docs_pdf.lng.txt,
+	  src/modules_io/docs/docs_pdf/docs_pdf.vcproj,
+	  src/modules_io/docs/docs_pdf/docs_pdf.vcxproj,
+	  src/modules_io/docs/docs_pdf/docs_pdf.vcxproj.filters,
+	  configure.in: pdf/svg/html doc support moved from api to new
+	  module library
+
+2010-10-22 11:15  oconrad
+
+	* src/: modules/shapes/shapes_tools/CreateWebContent.cpp,
+	  modules/shapes/shapes_tools/CreateWebContent.h,
+	  modules/shapes/shapes_tools/MLB_Interface.cpp,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/shapes/shapes_tools/Shapes_Report.cpp,
+	  modules/shapes/shapes_tools/Shapes_Report.h,
+	  modules/shapes/shapes_tools/Summarize.cpp,
+	  modules/shapes/shapes_tools/Summarize.h,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.cpp,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.h,
+	  modules/shapes/shapes_tools/shapes_tools.vcxproj,
+	  modules/shapes/shapes_tools/shapes_tools.vcxproj.filters,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Geometry.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Polygon_Clipper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Polygon_Clipper.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcxproj.filters,
+	  saga_core/saga_api/Makefile.am, saga_core/saga_api/doc_html.cpp,
+	  saga_core/saga_api/doc_html.h, saga_core/saga_api/doc_pdf.cpp,
+	  saga_core/saga_api/doc_pdf.h, saga_core/saga_api/doc_svg.cpp,
+	  saga_core/saga_api/doc_svg.h, saga_core/saga_api/saga_api.h,
+	  saga_core/saga_api/saga_api.vcxproj,
+	  saga_core/saga_api/saga_api.vcxproj.filters,
+	  saga_core/saga_gui/Makefile.am, saga_core/saga_gui/dlg_about.cpp,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h, saga_core/saga_gui/saga.cpp,
+	  saga_core/saga_gui/saga_gui.vcxproj,
+	  saga_core/saga_gui/saga_gui.vcxproj.filters,
+	  saga_core/saga_gui/svg_interactive_map.cpp,
+	  saga_core/saga_gui/svg_interactive_map.h,
+	  saga_core/saga_gui/view_map.cpp, saga_core/saga_gui/view_map.h,
+	  saga_core/saga_gui/wksp_map.cpp, saga_core/saga_gui/wksp_map.h:
+	  pdf/svg/html doc support moved from api to new module library
+
+2010-10-22 11:08  oconrad
+
+	* src/: modules/grid/grid_analysis/makefile.mingw,
+	  modules/grid/grid_calculus/makefile.mingw,
+	  modules/grid/grid_calculus_bsl/makefile.mingw,
+	  modules/grid/grid_discretisation/makefile.mingw,
+	  modules/grid/grid_filter/makefile.mingw,
+	  modules/grid/grid_gridding/makefile.mingw,
+	  modules/grid/grid_spline/makefile.mingw,
+	  modules/grid/grid_tools/makefile.mingw,
+	  modules/grid/grid_visualisation/makefile.mingw,
+	  modules/pointcloud/pointcloud_tools/makefile.mingw,
+	  modules/pointcloud/pointcloud_viewer/makefile.mingw,
+	  modules/shapes/shapes_grid/makefile.mingw,
+	  modules/shapes/shapes_lines/makefile.mingw,
+	  modules/shapes/shapes_lines_ex/makefile.mingw,
+	  modules/shapes/shapes_points/makefile.mingw,
+	  modules/shapes/shapes_polygons/makefile.mingw,
+	  modules/shapes/shapes_tools/makefile.mingw,
+	  modules/shapes/shapes_transect/makefile.mingw,
+	  modules/table/table_calculus/makefile.mingw,
+	  modules/table/table_tools/makefile.mingw,
+	  modules/tin/tin_tools/makefile.mingw,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/makefile.mingw,
+	  modules_contrib/contrib_s_liersch/ihacres/makefile.mingw,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_regression/makefile.mingw,
+	  modules_images/modules_imagery/imagery_segmentation/makefile.mingw,
+	  modules_images/modules_opencv/opencv/makefile.mingw,
+	  modules_images/modules_vigra/vigra/makefile.mingw,
+	  modules_io/db/io_db_mysql/makefile.mingw,
+	  modules_io/db/io_odbc/makefile.mingw,
+	  modules_io/esri_e00/io_esri_e00/makefile.mingw,
+	  modules_io/gdal/io_gdal/makefile.mingw,
+	  modules_io/gps/io_gps/makefile.mingw,
+	  modules_io/grid/io_grid/makefile.mingw,
+	  modules_io/grid/io_grid_image/makefile.mingw,
+	  modules_io/shapes/io_shapes/makefile.mingw,
+	  modules_io/shapes/io_shapes_dxf/makefile.mingw,
+	  modules_io/shapes/io_shapes_las/makefile.mingw,
+	  modules_io/table/io_table/makefile.mingw,
+	  modules_io/table/io_table_odbc/makefile.mingw,
+	  modules_lectures/lectures/lectures_introduction/makefile.mingw,
+	  modules_projection/pj_georeference/pj_georeference/makefile.mingw,
+	  modules_projection/pj_geotrans/pj_geotrans/makefile.mingw,
+	  modules_projection/pj_proj4/pj_proj4/makefile.mingw,
+	  modules_recreations/recreations/recreations_fractals/makefile.mingw,
+	  modules_recreations/recreations/recreations_games/makefile.mingw,
+	  modules_simulation/cellular_automata/sim_cellular_automata/makefile.mingw,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/makefile.mingw,
+	  modules_simulation/fire/sim_fire_spreading/makefile.mingw,
+	  modules_simulation/hydrology/sim_hydrology/makefile.mingw,
+	  modules_template/template/template/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.mingw,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_cmd/makefile.mingw,
+	  saga_core/saga_gdi/makefile.mingw,
+	  saga_core/saga_gui/makefile.mingw,
+	  saga_core/saga_odbc/makefile.mingw: no need for maintaining old
+	  mingw makefiles
+
+2010-10-22 11:05  oconrad
+
+	* src/: modules/grid/grid_analysis/makefile.linux,
+	  modules/grid/grid_calculus/makefile.linux,
+	  modules/grid/grid_calculus_bsl/makefile.linux,
+	  modules/grid/grid_discretisation/makefile.linux,
+	  modules/grid/grid_filter/makefile.linux,
+	  modules/grid/grid_gridding/makefile.linux,
+	  modules/grid/grid_spline/makefile.linux,
+	  modules/grid/grid_tools/makefile.linux,
+	  modules/grid/grid_visualisation/makefile.linux,
+	  modules/grid/makefile.linux,
+	  modules/pointcloud/pointcloud_tools/makefile.linux,
+	  modules/pointcloud/pointcloud_viewer/makefile.linux,
+	  modules/pointcloud/makefile.linux, modules/shapes/makefile.linux,
+	  modules/shapes/shapes_grid/makefile.linux,
+	  modules/shapes/shapes_lines/makefile.linux,
+	  modules/shapes/shapes_lines_ex/makefile.linux,
+	  modules/shapes/shapes_points/makefile.linux,
+	  modules/shapes/shapes_polygons/makefile.linux,
+	  modules/shapes/shapes_tools/makefile.linux,
+	  modules/shapes/shapes_transect/makefile.linux,
+	  modules/table/table_calculus/makefile.linux,
+	  modules/makefile.linux, modules/table/makefile.linux,
+	  modules/table/table_tools/makefile.linux,
+	  modules/tin/makefile.linux, modules/tin/tin_tools/makefile.linux,
+	  modules_contrib/contrib_a_perego/makefile.linux,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/makefile.linux,
+	  modules_contrib/contrib_s_liersch/makefile.linux,
+	  modules_contrib/contrib_s_liersch/ihacres/makefile.linux,
+	  modules_contrib/contrib_t_wutzler/makefile.linux,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/makefile.linux,
+	  modules_contrib/makefile.linux,
+	  modules_geostatistics/makefile.linux,
+	  modules_geostatistics/geostatistics/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_regression/makefile.linux,
+	  modules_images/makefile.linux,
+	  modules_images/modules_imagery/makefile.linux,
+	  modules_images/modules_imagery/imagery_segmentation/makefile.linux,
+	  modules_images/modules_opencv/makefile.linux,
+	  modules_images/modules_opencv/opencv/makefile.linux,
+	  modules_images/modules_vigra/makefile.linux,
+	  modules_images/modules_vigra/vigra/makefile.linux,
+	  modules_io/db/makefile.linux,
+	  modules_io/db/io_db_mysql/makefile.linux,
+	  modules_io/db/io_odbc/makefile.linux,
+	  modules_io/esri_e00/makefile.linux,
+	  modules_io/esri_e00/io_esri_e00/makefile.linux,
+	  modules_io/gdal/makefile.linux,
+	  modules_io/gdal/io_gdal/makefile.linux,
+	  modules_io/gps/makefile.linux,
+	  modules_io/gps/io_gps/makefile.linux,
+	  modules_io/grid/makefile.linux,
+	  modules_io/grid/io_grid/makefile.linux,
+	  modules_io/grid/io_grid_image/makefile.linux,
+	  modules_io/shapes/io_shapes/makefile.linux,
+	  modules_io/shapes/io_shapes_dxf/makefile.linux,
+	  modules_io/makefile.linux, modules_io/shapes/makefile.linux,
+	  modules_io/shapes/io_shapes_las/makefile.linux,
+	  modules_io/table/makefile.linux,
+	  modules_io/table/io_table/makefile.linux,
+	  modules_io/table/io_table_odbc/makefile.linux,
+	  modules_lectures/makefile.linux,
+	  modules_lectures/lectures/makefile.linux,
+	  modules_lectures/lectures/lectures_introduction/makefile.linux,
+	  modules_projection/pj_georeference/makefile.linux,
+	  modules_projection/pj_georeference/pj_georeference/makefile.linux,
+	  modules_projection/pj_geotrans/makefile.linux,
+	  modules_projection/pj_geotrans/pj_geotrans/makefile.linux,
+	  modules_projection/pj_proj4/pj_proj4/makefile.linux,
+	  modules_projection/makefile.linux,
+	  modules_projection/pj_proj4/makefile.linux,
+	  modules_recreations/makefile.linux,
+	  modules_recreations/recreations/makefile.linux,
+	  modules_recreations/recreations/recreations_fractals/makefile.linux,
+	  modules_recreations/recreations/recreations_games/makefile.linux,
+	  modules_simulation/cellular_automata/makefile.linux,
+	  modules_simulation/cellular_automata/sim_cellular_automata/makefile.linux,
+	  modules_simulation/ecosystems/makefile.linux,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/makefile.linux,
+	  modules_simulation/fire/makefile.linux,
+	  modules_simulation/fire/sim_fire_spreading/makefile.linux,
+	  modules_simulation/hydrology/makefile.linux,
+	  modules_simulation/hydrology/sim_hydrology/makefile.linux,
+	  modules_simulation/makefile.linux,
+	  modules_template/template/template/makefile.linux,
+	  modules_terrain_analysis/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.linux,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_cmd/makefile.linux,
+	  saga_core/saga_gdi/makefile.linux, saga_core/makefile.linux,
+	  saga_core/saga_gui/makefile.linux,
+	  saga_core/saga_odbc/makefile.linux: no need for maintaining old
+	  gcc (linux) makefiles
+
+2010-10-20 10:20  oconrad
+
+	* src/saga_core/: saga_api/api_callback.cpp, saga_gui/callback.cpp,
+	  saga_gui/wksp_grid_manager.cpp, saga_gui/wksp_shapes_manager.cpp:
+	  linux gcc compatibility
+
+2010-10-20 10:19  oconrad
+
+	* src/saga.vc10.sln: vc10 solution added (loads *.vcxproj files)
+
+2010-10-19 17:53  oconrad
+
+	* src/saga_core/: saga_api/api_callback.cpp, saga_api/api_core.h,
+	  saga_cmd/callback.cpp, saga_gui/callback.cpp: safe 64bit pointers
+	  in callback function arguments
+
+2010-10-19 17:52  oconrad
+
+	* src/modules_projection/pj_proj4/pj_proj4/crs_transform_grid.cpp:
+	  target area (polygon) now optional (caused problems with infinite
+	  projections)
+
+2010-10-19 17:50  oconrad
+
+	* src/modules_template/template/template/: Template.lng.txt,
+	  Template.vc10.sln, Template.vcxproj: vc10 projects
+
+2010-10-19 10:05  johanvdw
+
+	* configure.in: Add makefiles for modules_imagery
+
+2010-10-19 09:55  johanvdw
+
+	* src/modules_io/shapes/io_shapes_las/Makefile.am: Complete check
+	  for liblas
+
+2010-10-18 16:45  oconrad
+
+	* src/modules_template/template/template/: MLB_Interface.cpp,
+	  Template.cpp, Template.vcxproj, Template.vcxproj.filters: updated
+	  msvc10 projects
+
+2010-10-18 16:30  oconrad
+
+	* src/saga_core/saga_api/metadata.cpp: saving of nodes without
+	  content now permitted
+
+2010-10-18 16:29  oconrad
+
+	* src/modules/pointcloud/pointcloud_tools/pointcloud_tools.vcxproj:
+	  vc10 project; debug settings corrected
+
+2010-10-18 15:29  oconrad
+
+	* src/: modules/grid/grid_analysis/grid_analysis.vcxproj,
+	  modules/grid/grid_analysis/grid_analysis.vcxproj.filters,
+	  modules/grid/grid_calculus/grid_calculus.vcxproj,
+	  modules/grid/grid_calculus/grid_calculus.vcxproj.filters,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.vcxproj,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.vcxproj.filters,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcxproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcxproj.filters,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcxproj,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcxproj.filters,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcxproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcxproj.filters,
+	  modules_geostatistics/geostatistics/geostatistics_regression/geostatistics_regression.vcxproj,
+	  modules_geostatistics/geostatistics/geostatistics_regression/geostatistics_regression.vcxproj.filters,
+	  modules/grid/grid_calculus_bsl/grid_calculus_bsl.vcxproj,
+	  modules/grid/grid_calculus_bsl/grid_calculus_bsl.vcxproj.filters,
+	  modules/grid/grid_discretisation/grid_discretisation.vcxproj,
+	  modules/grid/grid_discretisation/grid_discretisation.vcxproj.filters,
+	  modules/grid/grid_filter/grid_filter.vcxproj,
+	  modules/grid/grid_filter/grid_filter.vcxproj.filters,
+	  modules/grid/grid_gridding/grid_gridding.vcxproj,
+	  modules/grid/grid_gridding/grid_gridding.vcxproj.filters,
+	  modules/grid/grid_spline/grid_spline.vcxproj,
+	  modules/grid/grid_spline/grid_spline.vcxproj.filters,
+	  modules/grid/grid_tools/grid_tools.vcxproj,
+	  modules/grid/grid_tools/grid_tools.vcxproj.filters,
+	  modules/grid/grid_visualisation/grid_visualisation.vcxproj,
+	  modules/grid/grid_visualisation/grid_visualisation.vcxproj.filters,
+	  modules_contrib/contrib_s_liersch/ihacres/ihacres.vcxproj,
+	  modules_contrib/contrib_s_liersch/ihacres/ihacres.vcxproj.filters,
+	  modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.vcxproj,
+	  modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.vcxproj.filters,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.vcxproj,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.vcxproj.filters,
+	  modules_io/gdal/io_gdal/io_gdal.vcxproj,
+	  modules_io/gdal/io_gdal/io_gdal.vcxproj.filters,
+	  modules_io/db/io_odbc/io_odbc.vcxproj,
+	  modules_io/db/io_odbc/io_odbc.vcxproj.filters,
+	  modules_io/gps/io_gps/io_gps.vcxproj,
+	  modules_io/gps/io_gps/io_gps.vcxproj.filters,
+	  modules_io/grid/io_grid/io_grid.vcxproj,
+	  modules_io/grid/io_grid/io_grid.vcxproj.filters,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.vcxproj,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.vcxproj.filters,
+	  modules_io/grid/io_grid_image/io_grid_image.vcxproj,
+	  modules_io/grid/io_grid_image/io_grid_image.vcxproj.filters,
+	  modules_images/modules_opencv/opencv/opencv.vcxproj,
+	  modules_images/modules_opencv/opencv/opencv.vcxproj.filters,
+	  modules_io/shapes/io_shapes/io_shapes.vcxproj,
+	  modules_io/shapes/io_shapes/io_shapes.vcxproj.filters,
+	  modules_io/shapes/io_shapes_dxf/io_shapes_dxf.vcxproj,
+	  modules_io/shapes/io_shapes_dxf/io_shapes_dxf.vcxproj.filters,
+	  modules_io/shapes/io_shapes_las/io_shapes_las.vcxproj,
+	  modules_io/shapes/io_shapes_las/io_shapes_las.vcxproj.filters,
+	  modules_io/table/io_table/io_table.vcxproj,
+	  modules_io/table/io_table/io_table.vcxproj.filters,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.lng.txt,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.vcxproj,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.vcxproj.filters,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.vcxproj,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.vcxproj.filters,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.vcxproj,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.vcxproj.filters,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.vcxproj,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.vcxproj.filters,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.vcxproj,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.vcxproj.filters,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcxproj,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcxproj.filters,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.vcxproj,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.vcxproj.filters,
+	  modules_recreations/recreations/recreations_games/recreations_games.vcxproj,
+	  modules_recreations/recreations/recreations_games/recreations_games.vcxproj.filters,
+	  saga_core/saga_api/saga_api.vcxproj,
+	  saga_core/saga_api/saga_api.vcxproj.filters,
+	  saga_core/saga_cmd/saga_cmd.vcxproj,
+	  saga_core/saga_cmd/saga_cmd.vcxproj.filters,
+	  saga_core/saga_gdi/saga_gdi.vcxproj,
+	  saga_core/saga_gdi/saga_gdi.vcxproj.filters,
+	  saga_core/saga_gui/saga_gui.vcxproj,
+	  saga_core/saga_gui/saga_gui.vcxproj.filters,
+	  modules/shapes/shapes_grid/shapes_grid.vcxproj,
+	  modules/shapes/shapes_grid/shapes_grid.vcxproj.filters,
+	  modules/shapes/shapes_lines/shapes_lines.vcxproj,
+	  modules/shapes/shapes_lines/shapes_lines.vcxproj.filters,
+	  modules/shapes/shapes_points/shapes_points.vcxproj,
+	  modules/shapes/shapes_points/shapes_points.vcxproj.filters,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcxproj,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcxproj.filters,
+	  saga_core/saga_odbc/saga_odbc.vcxproj,
+	  saga_core/saga_odbc/saga_odbc.vcxproj.filters,
+	  modules/shapes/shapes_tools/shapes_tools.vcxproj,
+	  modules/shapes/shapes_tools/shapes_tools.vcxproj.filters,
+	  modules/shapes/shapes_transect/shapes_transect.lng.txt,
+	  modules/shapes/shapes_transect/shapes_transect.vcxproj,
+	  modules/shapes/shapes_transect/shapes_transect.vcxproj.filters,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.vcxproj,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.vcxproj.filters,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.vcxproj,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.vcxproj.filters,
+	  modules_simulation/fire/sim_fire_spreading/sim_fire_spreading.vcxproj,
+	  modules_simulation/fire/sim_fire_spreading/sim_fire_spreading.vcxproj.filters,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.vcxproj,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.vcxproj.filters,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.vcxproj.filters,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.vcxproj.filters,
+	  modules/table/table_calculus/table_calculus.vcxproj,
+	  modules/table/table_calculus/table_calculus.vcxproj.filters,
+	  modules/table/table_tools/table_tools.vcxproj,
+	  modules/table/table_tools/table_tools.vcxproj.filters,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcxproj.filters,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcxproj.filters,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcxproj.filters,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcxproj.filters,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcxproj,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcxproj.filters,
+	  modules/tin/tin_tools/tin_tools.vcxproj,
+	  modules/tin/tin_tools/tin_tools.vcxproj.filters,
+	  modules_images/modules_vigra/vigra/vigra.vcxproj,
+	  modules_images/modules_vigra/vigra/vigra.vcxproj.filters,
+	  modules_template/template/template/Template.vcxproj,
+	  modules_template/template/template/Template.vcxproj.filters:
+	  msvc10 solution & project files (including 64bit targets)
+
+2010-10-18 15:12  oconrad
+
+	* src/saga_core/saga_gui/dlg_about.cpp: platform info (x86/x64),
+	  windows only
+
+2010-10-18 15:11  oconrad
+
+	* src/modules_simulation/fire/sim_fire_spreading/:
+	  SimulateVariableWind.cpp, SimulateVariableWind.h: unicode
+	  compatibility
+
+2010-10-18 13:08  oconrad
+
+	* src/saga_core/saga_api/: api_core.h, grid.h, mat_tools.h: x64
+	  type conversion warnings removed (not all of them yet)
+
+2010-10-18 13:07  oconrad
+
+	*
+	  src/modules_simulation/fire/sim_fire_spreading/SimulateVariableWind.cpp:
+	  dependency to ta_morphology removed
+
+2010-10-18 13:04  oconrad
+
+	* src/modules_io/gdal/io_gdal/: gdal_driver.cpp, gdal_export.cpp,
+	  gdal_import.cpp: io_gdal: name/descrription bug fixed
+
+2010-10-18 13:03  oconrad
+
+	* src/modules_projection/pj_geotrans/pj_geotrans/: GEOTRANS_Base.h,
+	  geotrans/albers.c, geotrans/albers.h, geotrans/azeq.c,
+	  geotrans/azeq.h, geotrans/bng.c, geotrans/bng.h,
+	  geotrans/bonne.c, geotrans/bonne.h, geotrans/cassini.c,
+	  geotrans/cassini.h, geotrans/cyleqa.c, geotrans/cyleqa.h,
+	  geotrans/datum.c, geotrans/datum.h, geotrans/eckert4.c,
+	  geotrans/eckert4.h, geotrans/eckert6.c, geotrans/eckert6.h,
+	  geotrans/ellipse.c, geotrans/ellipse.h, geotrans/engine.c,
+	  geotrans/engine.h, geotrans/eqdcyl.c, geotrans/eqdcyl.h,
+	  geotrans/geocent.c, geotrans/geocent.h, geotrans/geoid.c,
+	  geotrans/geoid.h, geotrans/georef.c, geotrans/georef.h,
+	  geotrans/geotrans.h, geotrans/gnomonic.c, geotrans/gnomonic.h,
+	  geotrans/grinten.c, geotrans/grinten.h, geotrans/lambert.c,
+	  geotrans/lambert.h, geotrans/lambert_1.c, geotrans/lambert_1.h,
+	  geotrans/lambert_2.c, geotrans/lambert_2.h, geotrans/loccart.c,
+	  geotrans/loccart.h, geotrans/mercator.c, geotrans/mercator.h,
+	  geotrans/mgrs.c, geotrans/mgrs.h, geotrans/miller.c,
+	  geotrans/miller.h, geotrans/mollweid.c, geotrans/mollweid.h,
+	  geotrans/neys.c, geotrans/neys.h, geotrans/nzmg.c,
+	  geotrans/nzmg.h, geotrans/omerc.c, geotrans/omerc.h,
+	  geotrans/orthogr.c, geotrans/orthogr.h, geotrans/polarst.c,
+	  geotrans/polarst.h, geotrans/polycon.c, geotrans/polycon.h,
+	  geotrans/sinusoid.c, geotrans/sinusoid.h, geotrans/stereogr.c,
+	  geotrans/stereogr.h, geotrans/tranmerc.c, geotrans/tranmerc.h,
+	  geotrans/trcyleqa.c, geotrans/trcyleqa.h, geotrans/ups.c,
+	  geotrans/ups.h, geotrans/utm.c, geotrans/utm.h: geotrans: sources
+	  now built-in (not linked to external library)
+
+2010-10-15 16:14  johanvdw
+
+	* configure.in, src/Makefile.am, src/modules_images/Makefile.am,
+	  src/modules_images/modules_opencv/opencv/Makefile.am: Make sure
+	  image modules are added to disttarget
+
+2010-10-15 13:57  reklov_w
+
+	* src/saga_core/saga_cmd/module_library.cpp: change output format
+	  of datalists, now always four digits (filename_0000 instead of
+	  filename_00)
+
+2010-10-15 13:55  reklov_w
+
+	* src/modules/grid/grid_tools/Grid_Tiling.cpp: fix typo in module
+	  parameters
+
+2010-10-14 11:54  reklov_w
+
+	* src/modules_io/gdal/io_gdal/io_gdal.vcproj: preprocessor define
+	  "io_gdal_EXPORTS" added
+
+2010-10-13 19:49  oconrad
+
+	* src/: modules_projection/pj_proj4/pj_proj4/crs_base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_transform_grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_transform_grid.h,
+	  saga_core/saga_api/projections.cpp: projection enhancements
+
+2010-10-13 19:49  oconrad
+
+	* src/saga_core/saga_api/metadata.cpp: csg_metadata: potential
+	  crash
+
+2010-10-13 19:48  oconrad
+
+	* src/saga_core/saga_api/api_callback.cpp: api callback;
+	  progressbar flickering when progressbar should be suppressed
+
+2010-10-12 16:56  oconrad
+
+	* src/: modules_io/gdal/io_gdal/gdal_driver.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.cpp: gdal import
+
+2010-10-12 16:55  oconrad
+
+	* src/saga_core/saga_api/parameters.cpp: output parameter lists now
+	  automatically cleaned from invalid items
+
+2010-10-12 16:54  oconrad
+
+	* src/saga_core/saga_api/: dataobject.cpp, grid.cpp,
+	  grid_operation.cpp, metadata.cpp: improved metadata and
+	  projection inheritage
+
+2010-10-12 16:52  oconrad
+
+	* src/modules_projection/pj_proj4/pj_proj4/crs_base.cpp: gcc
+	  compiler error fixed
+
+2010-10-11 18:06  oconrad
+
+	* src/: modules_io/gdal/io_gdal/MLB_Interface.h,
+	  modules_io/gdal/io_gdal/gdal_driver.cpp,
+	  modules_io/gdal/io_gdal/gdal_driver.h,
+	  modules_io/gdal/io_gdal/gdal_export.cpp,
+	  modules_io/gdal/io_gdal/gdal_export.h,
+	  modules_io/gdal/io_gdal/gdal_export_geotiff.cpp,
+	  modules_io/gdal/io_gdal/gdal_export_geotiff.h,
+	  modules_io/gdal/io_gdal/gdal_import.cpp,
+	  modules_io/gdal/io_gdal/gdal_import.h,
+	  modules_io/gdal/io_gdal/ogr_driver.cpp,
+	  modules_io/gdal/io_gdal/ogr_driver.h,
+	  modules_io/gdal/io_gdal/ogr_export.cpp,
+	  modules_io/gdal/io_gdal/ogr_export.h,
+	  modules_io/gdal/io_gdal/ogr_import.cpp,
+	  modules_io/gdal/io_gdal/ogr_import.h,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.h,
+	  saga_core/saga_gui/wksp_shapes_manager.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.h: gdal/ogr dll interface
+	  - gdal support in gui
+
+2010-10-08 16:53  oconrad
+
+	* src/modules_io/gdal/io_gdal/: gdal_driver.cpp, gdal_driver.h,
+	  gdal_export.cpp, gdal_export_geotiff.cpp, gdal_import.cpp: gdal -
+	  improved wrapper for dll-export (coming next)
+
+2010-10-08 14:05  oconrad
+
+	* src/saga_core/saga_gui/: wksp_grid.cpp, wksp_grid.h,
+	  wksp_layer.cpp, wksp_layer.h, wksp_pointcloud.cpp,
+	  wksp_pointcloud.h, wksp_shapes.cpp, wksp_shapes.h, wksp_tin.cpp,
+	  wksp_tin.h: wksp_layer - get_name() function moved to base class
+
+2010-10-08 14:04  oconrad
+
+	* src/modules/shapes/shapes_lines/line_polygon_intersection.cpp:
+	  bug fix
+
+2010-10-08 14:04  oconrad
+
+	* src/modules_io/gdal/io_gdal/: gdal_driver.cpp, gdal_import.cpp:
+	  gdal - user break, metadata
+
+2010-10-08 14:03  oconrad
+
+	* src/modules_projection/pj_proj4/pj_proj4/: crs_base.cpp,
+	  crs_transform_grid.cpp: proj4 - grid to points, target from
+	  loaded rdata set
+
+2010-10-07 21:53  johanvdw
+
+	* configure.in, src/modules_images/Makefile.am,
+	  src/modules_images/modules_opencv/opencv/Makefile.am,
+	  src/modules_images/modules_vigra/vigra/Makefile.am: Add
+	  opencv/vigra modules to autotools
+
+2010-10-07 18:01  johanvdw
+
+	*
+	  src/modules_images/modules_imagery/imagery_segmentation/fast_region_growing.h:
+	  Various fixes to compile using gcc 4.4
+
+2010-10-07 15:57  johanvdw
+
+	* src/modules_io/shapes/Makefile.am: Build LAS module if detected -
+	  update Makefile as well
+
+2010-10-07 15:54  johanvdw
+
+	* configure.in: Build LAS import module if its library is detected
+
+2010-10-07 15:49  johanvdw
+
+	* src/saga_core/saga_api/: table_dbase.cpp, table_dbase.h: Use
+	  const char* instead of char* for return string
+
+2010-10-07 15:47  johanvdw
+
+	* src/saga_core/saga_gui/: res_images.cpp,
+	  res/xpm/crs_edit_point_add.xpm, res/xpm/crs_edit_point_move.xpm,
+	  res/xpm/crs_hand.xpm, res/xpm/crs_hand_grap.xpm,
+	  res/xpm/crs_info.xpm, res/xpm/crs_magnifier.xpm,
+	  res/xpm/crs_select.xpm, res/xpm/default.xpm,
+	  res/xpm/nb_active_attributes.xpm,
+	  res/xpm/nb_active_description.xpm,
+	  res/xpm/nb_active_htmlextrainfo.xpm,
+	  res/xpm/nb_active_legend.xpm, res/xpm/nb_active_parameters.xpm,
+	  res/xpm/nb_info_error.xpm, res/xpm/nb_info_execution.xpm,
+	  res/xpm/nb_info_messages.xpm, res/xpm/nb_wksp_data.xpm,
+	  res/xpm/nb_wksp_maps.xpm, res/xpm/nb_wksp_modules.xpm,
+	  res/xpm/nb_wksp_thumbnails.xpm, res/xpm/nb_wksp_treeview.xpm,
+	  res/xpm/saga_icon_16.xpm, res/xpm/saga_icon_32.xpm,
+	  res/xpm/saga_splash.xpm, res/xpm/tb_active.xpm,
+	  res/xpm/tb_delete.xpm, res/xpm/tb_diagram_parameters.xpm,
+	  res/xpm/tb_edit_shape_add.xpm,
+	  res/xpm/tb_edit_shape_add_part.xpm,
+	  res/xpm/tb_edit_shape_del.xpm,
+	  res/xpm/tb_edit_shape_del_part.xpm,
+	  res/xpm/tb_edit_shape_del_point.xpm,
+	  res/xpm/tb_edit_shape_select.xpm, res/xpm/tb_help.xpm,
+	  res/xpm/tb_histogram_as_table.xpm,
+	  res/xpm/tb_histogram_cumulative.xpm, res/xpm/tb_info.xpm,
+	  res/xpm/tb_layout_page_setup.xpm, res/xpm/tb_layout_print.xpm,
+	  res/xpm/tb_layout_print_preview.xpm,
+	  res/xpm/tb_layout_print_setup.xpm,
+	  res/xpm/tb_map3d_central_less.xpm,
+	  res/xpm/tb_map3d_central_more.xpm,
+	  res/xpm/tb_map3d_exaggerate_less.xpm,
+	  res/xpm/tb_map3d_exaggerate_more.xpm,
+	  res/xpm/tb_map3d_interpolated.xpm,
+	  res/xpm/tb_map3d_properties.xpm,
+	  res/xpm/tb_map3d_rotate_x_less.xpm,
+	  res/xpm/tb_map3d_rotate_x_more.xpm,
+	  res/xpm/tb_map3d_rotate_z_less.xpm,
+	  res/xpm/tb_map3d_rotate_z_more.xpm,
+	  res/xpm/tb_map3d_shift_x_less.xpm,
+	  res/xpm/tb_map3d_shift_x_more.xpm,
+	  res/xpm/tb_map3d_shift_y_less.xpm,
+	  res/xpm/tb_map3d_shift_y_more.xpm,
+	  res/xpm/tb_map3d_shift_z_less.xpm,
+	  res/xpm/tb_map3d_shift_z_more.xpm, res/xpm/tb_map3d_stereo.xpm,
+	  res/xpm/tb_map_3d_show.xpm, res/xpm/tb_map_layout_show.xpm,
+	  res/xpm/tb_map_legend_horizontal.xpm,
+	  res/xpm/tb_map_legend_vertical.xpm,
+	  res/xpm/tb_map_mode_distance.xpm, res/xpm/tb_map_mode_pan.xpm,
+	  res/xpm/tb_map_mode_select.xpm, res/xpm/tb_map_mode_zoom.xpm,
+	  res/xpm/tb_map_synchronize.xpm, res/xpm/tb_map_zoom_active.xpm,
+	  res/xpm/tb_map_zoom_full.xpm, res/xpm/tb_map_zoom_last.xpm,
+	  res/xpm/tb_map_zoom_next.xpm, res/xpm/tb_map_zoom_selection.xpm,
+	  res/xpm/tb_open.xpm, res/xpm/tb_open_grid.xpm,
+	  res/xpm/tb_open_module.xpm, res/xpm/tb_open_shapes.xpm,
+	  res/xpm/tb_open_table.xpm, res/xpm/tb_open_tin.xpm,
+	  res/xpm/tb_save.xpm, res/xpm/tb_scatterplot_parameters.xpm,
+	  res/xpm/tb_show.xpm, res/xpm/tb_table_col_add.xpm,
+	  res/xpm/tb_table_col_del.xpm, res/xpm/tb_table_row_add.xpm,
+	  res/xpm/tb_table_row_del.xpm, res/xpm/tb_table_row_del_all.xpm,
+	  res/xpm/tb_table_row_ins.xpm, res/xpm/tb_wksp.xpm,
+	  res/xpm/wksp_data_manager.xpm, res/xpm/wksp_grid.xpm,
+	  res/xpm/wksp_grid_manager.xpm, res/xpm/wksp_grid_system.xpm,
+	  res/xpm/wksp_map.xpm, res/xpm/wksp_map_manager.xpm,
+	  res/xpm/wksp_module.xpm, res/xpm/wksp_module_library.xpm,
+	  res/xpm/wksp_module_manager.xpm, res/xpm/wksp_noitems.xpm,
+	  res/xpm/wksp_shapes_line.xpm, res/xpm/wksp_shapes_manager.xpm,
+	  res/xpm/wksp_shapes_point.xpm, res/xpm/wksp_shapes_points.xpm,
+	  res/xpm/wksp_shapes_polygon.xpm, res/xpm/wksp_table.xpm,
+	  res/xpm/wksp_table_manager.xpm, res/xpm/wksp_tin.xpm,
+	  res/xpm/wksp_tin_manager.xpm, res/xpm/wnd_diagram.xpm,
+	  res/xpm/wnd_histogram.xpm, res/xpm/wnd_layout.xpm,
+	  res/xpm/wnd_map.xpm, res/xpm/wnd_map3d.xpm,
+	  res/xpm/wnd_scatterplot.xpm, res/xpm/wnd_table.xpm: Mark all
+	  images as const chars
+
+	  Fixes a very large number of compiler warnings in gcc. May be
+	  slightly more efficient.
+
+2010-09-20 18:22  oconrad
+
+	* src/: modules/grid/grid_tools/grid_tools.dsp,
+	  modules_projection/pj_proj4/pj_proj4/crs_base.cpp,
+	  saga_core/saga_api/geo_tools.h,
+	  saga_core/saga_api/projections.cpp,
+	  saga_core/saga_cmd/saga_cmd.cpp,
+	  saga_core/saga_gui/res/saga_dic.txt: projections: built-in
+	  proj4/wkt dictionary now included
+
+2010-09-20 18:20  oconrad
+
+	* src/modules_io/shapes/io_shapes/: Makefile.am, io_shapes.dsp,
+	  makefile.linux, makefile.mingw: svg export module (missing
+	  project bindings)
+
+2010-09-17 18:23  oconrad
+
+	* src/: modules/grid/grid_tools/Grid_Tiling.cpp,
+	  modules/grid/grid_tools/Grid_Tiling.h,
+	  modules/grid/grid_tools/MLB_Interface.cpp,
+	  modules/grid/grid_tools/Makefile.am,
+	  modules/grid/grid_tools/grid_tools.vcproj,
+	  modules/grid/grid_tools/makefile.linux,
+	  modules/grid/grid_tools/makefile.mingw,
+	  modules/shapes/shapes_lines/line_polygon_intersection.cpp,
+	  modules/shapes/shapes_lines/line_polygon_intersection.h,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Pattern_Analysis.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Pattern_Analysis.h,
+	  modules_io/shapes/io_shapes/MLB_Interface.cpp,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes/stl.cpp,
+	  modules_io/shapes/io_shapes/svg.cpp,
+	  modules_io/shapes/io_shapes/svg.h: no message
+
+2010-09-17 18:20  oconrad
+
+	* src/saga_core/saga_api/metadata.cpp: now also saves entries only
+	  with parameters (but no child, no content)
+
+2010-09-15 19:07  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.mingw,
+	  modules/shapes/shapes_lines/MLB_Interface.cpp,
+	  modules/shapes/shapes_lines/Makefile.am,
+	  modules/shapes/shapes_lines/makefile.linux,
+	  modules/shapes/shapes_lines/makefile.mingw,
+	  modules/shapes/shapes_lines/shapes_lines.dsp,
+	  modules/shapes/shapes_lines/shapes_lines.vcproj,
+	  saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_gui/wksp_map_dc.cpp: no message
+
+2010-09-14 17:55  oconrad
+
+	* src/: modules/grid/grid_filter/Filter_Majority.cpp,
+	  modules/grid/grid_filter/Filter_Majority.h,
+	  modules_io/grid/io_grid/bmp_export.cpp,
+	  modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  modules_io/grid/io_grid/srtm30.cpp,
+	  modules_io/grid/io_grid/usgs_srtm.cpp,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/api_memory.cpp,
+	  saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/mat_tools.cpp, saga_core/saga_api/mat_tools.h,
+	  saga_core/saga_api/projections.cpp,
+	  saga_core/saga_api/saga_api.dsp,
+	  modules/grid/grid_analysis/grid_analysis.dsp,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.dsp,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.dsp,
+	  modules_io/grid/io_grid_image/grid_export.cpp,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  saga_core/saga_cmd/saga_cmd.dsp, saga_core/saga_gdi/saga_gdi.dsp,
+	  saga_core/saga_gui/saga_gui.dsp,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_map_dc.cpp: no message
+
+2010-09-13 18:17  oconrad
+
+	* src/saga_core/saga_gui/: wksp_grid.cpp, wksp_map_dc.cpp,
+	  wksp_map_dc.h: grid to image: drawing bug
+
+2010-09-13 16:38  reklov_w
+
+	* src/modules_io/grid/io_grid/: esri_arcinfo.cpp, esri_arcinfo.h:
+	  new ASCII import options: output grid data type selection and
+	  optional user defined NoData value to write instead of that found
+	  in the file
+
+2010-09-13 15:49  reklov_w
+
+	* src/saga_core/saga_api/api_string.cpp: allow for larger numbers
+	  than max_int in SG_Get_Significant_Decimals()
+
+2010-09-11 19:02  reklov_w
+
+	* src/modules/grid/grid_analysis/: Cost_PolarToRect.cpp,
+	  Cost_RectToPolar.cpp: bug fix in rect_to_polar to recognize
+	  quadrant, new option on how to measure direction; noData support
+	  for polar_to_rect
+
+2010-09-11 03:00  reklov_w
+
+	* src/modules/grid/grid_analysis/: LeastCostPathProfile_Points.cpp,
+	  LeastCostPathProfile_Points.h: forgot to add the new files for
+	  the least cost path points module
+
+2010-09-11 02:07  reklov_w
+
+	* src/modules/grid/grid_analysis/: MLB_Interface.cpp, Makefile.am,
+	  grid_analysis.dsp, grid_analysis.vcproj, makefile.linux,
+	  makefile.mingw: new module for least cost path search from
+	  point(s) shapefile added
+
+2010-09-09 18:54  oconrad
+
+	* src/: modules_projection/pj_proj4/pj_proj4/crs_assign.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_transform_grid.cpp,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points.cpp,
+	  modules_io/gdal/io_gdal/gdal_import.cpp,
+	  saga_core/saga_api/geo_tools.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h, saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/projections.cpp, saga_core/saga_gui/saga.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp: no message
+
+2010-09-08 16:29  oconrad
+
+	* src/: modules_projection/pj_proj4/pj_proj4/crs_base.cpp,
+	  saga_core/saga_api/geo_tools.h,
+	  saga_core/saga_api/projections.cpp,
+	  saga_core/saga_cmd/saga_cmd.cpp,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/parameters_properties.cpp,
+	  saga_core/saga_gui/saga.cpp, saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_module_manager.cpp: no message
+
+2010-09-08 11:02  reklov_w
+
+	* src/saga_core/saga_gui/view_map_control.cpp: new interactive
+	  modules can use middle mouse button in map mode select
+
+2010-09-07 17:59  oconrad
+
+	* src/: saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_translator.cpp,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_api/projections.cpp,
+	  modules_projection/pj_proj4/pj_proj4/MLB_Interface.cpp,
+	  modules_projection/pj_proj4/pj_proj4/Makefile.am,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.h,
+	  modules_projection/pj_proj4/pj_proj4/crs_assign.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_assign.h,
+	  modules_projection/pj_proj4/pj_proj4/crs_base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_base.h,
+	  modules_projection/pj_proj4/pj_proj4/crs_transform.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_transform.h,
+	  modules_projection/pj_proj4/pj_proj4/crs_transform_grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_transform_grid.h,
+	  modules_projection/pj_proj4/pj_proj4/crs_transform_shapes.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_transform_shapes.h,
+	  modules_projection/pj_proj4/pj_proj4/makefile.linux,
+	  modules_projection/pj_proj4/pj_proj4/makefile.mingw,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.dsp,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcproj,
+	  modules/pointcloud/pointcloud_viewer/points_view_module.cpp,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.h,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.h,
+	  saga_core/saga_gui/saga_gui.dsp: projection issues: reached beta
+	  stage
+
+2010-09-03 17:46  oconrad
+
+	* src/: saga_core/saga_gui/active.cpp,
+	  saga_core/saga_gui/helper.cpp, saga_core/saga_gui/saga.cpp,
+	  saga_core/saga_gui/saga_gui.vcproj,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_module.cpp,
+	  saga_core/saga_gui/wksp_pointcloud.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_shapes.h,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.h,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_shapes_points.cpp,
+	  saga_core/saga_gui/wksp_shapes_polygon.cpp,
+	  saga_core/saga_gui/wksp_table.cpp,
+	  saga_core/saga_gui/wksp_tin.cpp,
+	  modules_io/db/io_odbc/pgis_shapes.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.dsp,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcproj,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/api_file.cpp,
+	  saga_core/saga_api/api_memory.cpp,
+	  saga_core/saga_api/api_string.cpp,
+	  saga_core/saga_api/api_translator.cpp,
+	  saga_core/saga_api/geo_tools.h, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/metadata.h,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/projections.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_assign.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_assign.h,
+	  modules_projection/pj_proj4/pj_proj4/crs_transform.cpp,
+	  modules_projection/pj_proj4/pj_proj4/crs_transform.h: crs &
+	  projection support (not fully completed)
+
+2010-09-02 23:21  reklov_w
+
+	* src/modules/shapes/shapes_tools/shapes_buffer.cpp: fixed typo
+
+2010-08-30 18:25  oconrad
+
+	* src/saga_core/: saga_api/api_callback.cpp, saga_api/api_core.h,
+	  saga_api/module.cpp, saga_api/module.h, saga_gui/callback.cpp,
+	  saga_gui/wksp_module.cpp: modules: stop_execution-callback
+	  without dialog prompt enabled
+
+2010-08-30 13:15  johanvdw
+
+	* src/saga_core/saga_cmd/Makefile.am: Fix non-unicode autotools
+	  build
+
+2010-08-29 17:53  johanvdw
+
+	* src/saga_core/saga_cmd/Makefile.am: Fix non-unicode autotools
+	  build
+
+2010-08-28 17:48  reklov_w
+
+	* src/modules_io/shapes/io_shapes_las/las_import.cpp: fix color
+	  attribute setting
+
+2010-08-28 17:47  reklov_w
+
+	* src/saga_core/saga_api/: api_memory.cpp, pointcloud.cpp: new
+	  stepping for SG_ARRAY_GROWTH, and faster growing for point clouds
+
+2010-08-27 09:53  oconrad
+
+	* src/: saga_core/saga_gui/dlg_list_base.cpp,
+	  saga_core/saga_gui/dlg_list_base.h,
+	  saga_core/saga_gui/res_controls.cpp,
+	  saga_core/saga_gui/res_controls.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.h,
+	  saga_core/saga_api/table_io.cpp: no message
+
+2010-08-25 18:17  oconrad
+
+	* src/: modules/grid/grid_filter/Filter_LoG.cpp,
+	  modules/grid/grid_filter/Filter_LoG.h,
+	  modules_io/gdal/io_gdal/gdal_export.cpp,
+	  modules_io/gdal/io_gdal/gdal_export_geotiff.cpp,
+	  saga_core/saga_api/geo_tools.h, saga_core/saga_api/module.cpp,
+	  saga_core/saga_api/module.h,
+	  saga_core/saga_api/module_interactive_base.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_api/projections.cpp: projection support: if
+	  defined data object's CRS will be inherited.
+
+2010-08-25 01:44  reklov_w
+
+	* configure.in,
+	  src/modules_terrain_analysis/terrain_analysis/Makefile.am:
+	  backport from trunk: reverted to build ta_compond library on
+	  linux by default because the change does not work (segfaults with
+	  saga_cmd,strange behaviour in the GUI; seems like the module libs
+	  the module depends on do not get loaded correctly
+
+2010-08-25 01:02  reklov_w
+
+	* configure.in: oops, my configure.in contained to build the las
+	  import module; removed
+
+2010-08-25 00:58  reklov_w
+
+	* src/modules_terrain_analysis/terrain_analysis/Makefile.am,
+	  configure.in: reverted to build ta_compond library on linux by
+	  default because the change does not work (segfaults with
+	  saga_cmd,strange behaviour in the GUI; seems like the module libs
+	  the module depends on do not get loaded correctly
+
+2010-08-23 01:02  reklov_w
+
+	* src/modules/grid/grid_filter/Filter_Terrain_SlopeBased.cpp: fix
+	  kernel bug (not all cells processed) and optimization
+
+2010-08-13 10:08  johanvdw
+
+	* src/saga_core/saga_cmd/saga_cmd.cpp: Add support for MacOSX dylib
+	  dynamic libraries
+
+2010-08-10 16:32  reklov_w
+
+	* src/modules_io/grid/io_grid/xyz.cpp: export xyz: added the
+	  possibility to exclude NoData cells from the output
+
+2010-07-30 10:20  johanvdw
+
+	* src/modules/grid/grid_tools/Grid_Aggregate.cpp: Add module
+	  description (from Sextante)
+
+2010-07-22 14:47  johanvdw
+
+	* configure.in, src/saga_core/saga_cmd/Makefile.am,
+	  src/saga_core/saga_gui/Makefile.am: Changes to enable building
+	  dist target
+
+2010-07-19 17:42  oconrad
+
+	* src/: saga_core/saga_api/metadata.cpp,
+	  saga_core/saga_api/metadata.h, saga_core/saga_api/saga_api.h,
+	  saga_core/saga_gui/saga.cpp, saga.dsw: no message
+
+2010-07-13 18:08  oconrad
+
+	* src/: modules/grid/grid_discretisation/Makefile.am,
+	  modules/grid/grid_discretisation/grid_discretisation.dsp,
+	  modules/grid/grid_discretisation/makefile.linux,
+	  modules/grid/grid_discretisation/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.dsp:
+	  no message
+
+2010-07-13 15:56  oconrad
+
+	* src/modules/grid/grid_discretisation/: MLB_Interface.cpp,
+	  grid_discretisation.vcproj, grid_seeds.cpp, grid_seeds.h,
+	  rga_basic.cpp, rga_basic.h: modules: seeds & region growing
+	  algorithm (obia)
+
+2010-07-08 17:08  johanvdw
+
+	* src/: modules/pointcloud/pointcloud_viewer/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  modules_io/db/io_odbc/Makefile.am,
+	  modules_io/grid/io_grid_image/Makefile.am,
+	  saga_core/saga_cmd/man/Makefile.am,
+	  saga_core/saga_cmd/man/saga_cmd.1,
+	  saga_core/saga_gui/man/Makefile.am,
+	  saga_core/saga_gui/man/saga_gui.1: Add manfiles for saga_gui and
+	  saga_cmd
+
+	  Remove unused version numbers from modules - continued
+
+2010-07-08 17:06  johanvdw
+
+	* configure.in: Add manfiles for saga_gui and saga_cmd
+
+2010-07-08 16:50  johanvdw
+
+	* src/saga_core/saga_cmd/: saga_cmd.cpp, Makefile.am: Update module
+	  search path for automake builds
+
+2010-07-08 16:23  johanvdw
+
+	* src/modules/shapes/shapes_transect/Polygon_Transect.cpp: Update
+	  module description formatting
+
+2010-07-08 16:21  johanvdw
+
+	* src/modules/shapes/shapes_transect/MLB_Interface.cpp: Change
+	  workspace location to Shapes - Transect
+
+2010-07-08 16:18  johanvdw
+
+	*
+	  src/modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.am:
+	  Add ruggedness to Makefile.am
+
+2010-07-08 16:11  johanvdw
+
+	* src/: modules/grid/grid_filter/Makefile.am,
+	  modules/grid/grid_gridding/Makefile.am,
+	  modules/grid/grid_spline/Makefile.am,
+	  modules/shapes/shapes_transect/Makefile.am,
+	  modules/table/table_calculus/Makefile.am,
+	  modules/tin/tin_tools/Makefile.am,
+	  modules_contrib/contrib_s_liersch/ihacres/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_regression/Makefile.am,
+	  modules_images/modules_vigra/vigra/Makefile.am,
+	  modules_io/esri_e00/io_esri_e00/Makefile.am,
+	  modules_io/gdal/io_gdal/Makefile.am,
+	  modules_io/grid/io_grid_grib2/Makefile.am,
+	  modules_recreations/recreations/recreations_fractals/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.am,
+	  modules/grid/grid_analysis/Makefile.am,
+	  modules/grid/grid_calculus_bsl/Makefile.am,
+	  modules/grid/grid_tools/Makefile.am,
+	  modules/grid/grid_visualisation/Makefile.am,
+	  modules/pointcloud/pointcloud_tools/Makefile.am,
+	  modules/shapes/shapes_grid/Makefile.am,
+	  modules/shapes/shapes_lines/Makefile.am,
+	  modules/shapes/shapes_points/Makefile.am,
+	  modules/shapes/shapes_polygons/Makefile.am,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules_io/grid/io_grid/Makefile.am,
+	  modules_io/shapes/io_shapes/Makefile.am,
+	  modules_projection/pj_georeference/pj_georeference/Makefile.am,
+	  modules_simulation/fire/sim_fire_spreading/Makefile.am,
+	  modules_template/template/template/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  modules/grid/grid_calculus/Makefile.am,
+	  modules/shapes/shapes_lines_ex/Makefile.am,
+	  modules/table/table_tools/Makefile.am,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/Makefile.am,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_points/Makefile.am,
+	  modules_images/modules_imagery/imagery_segmentation/Makefile.am,
+	  modules_images/modules_opencv/opencv/Makefile.am,
+	  modules_io/db/io_db_mysql/Makefile.am,
+	  modules_io/shapes/io_shapes_dxf/Makefile.am,
+	  modules_io/shapes/io_shapes_las/Makefile.am,
+	  modules_lectures/lectures/lectures_introduction/Makefile.am,
+	  modules_projection/pj_proj4/pj_proj4/Makefile.am,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile.am,
+	  modules_simulation/hydrology/sim_hydrology/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.am,
+	  modules/grid/grid_discretisation/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  modules_io/gps/io_gps/Makefile.am,
+	  modules_io/table/io_table/Makefile.am,
+	  modules_projection/pj_geotrans/pj_geotrans/Makefile.am,
+	  modules_recreations/recreations/recreations_games/Makefile.am,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.am:
+	  Remove unused so-versioning from modules
+
+	  By adding -avoid-version to ldflags
+
+2010-07-06 15:01  oconrad
+
+	* src/: saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_memory.cpp,
+	  saga_core/saga_api/saga_api.dsp,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.dsp,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.dsp,
+	  modules_io/gdal/io_gdal/io_gdal.dsp,
+	  modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  modules_projection/pj_georeference/pj_georeference/lmdif0.c,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ruggedness.cpp,
+	  saga_core/saga_cmd/saga_cmd.dsp, saga_core/saga_gdi/saga_gdi.dsp,
+	  saga_core/saga_gui/saga_gui.dsp: mainly first macos patches
+
+2010-07-05 10:05  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Distances.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ruggedness.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ruggedness.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcproj:
+	  plascencia fixes & ruggedness modules added
+
+2010-07-04 15:54  reklov_w
+
+	* src/modules_io/shapes/io_shapes_las/: las_export.cpp,
+	  las_import.cpp: bug fix and updates for import/export module
+	  (offset is already handled with liblas in case header info is
+	  correct)
+
+2010-07-03 23:11  reklov_w
+
+	* src/modules_io/shapes/io_shapes_las/: MLB_Interface.cpp,
+	  Makefile.am, io_shapes_las.dsp, io_shapes_las.vcproj,
+	  las_export.cpp, las_export.h, las_import.cpp, makefile.linux,
+	  makefile.mingw: new LAS export module and updates for las import
+	  (now offset and scale is recognized and it is possible to skip
+	  the isValid() check that may fail with large scan angles (e.g.
+	  from MLS data)
+
+2010-07-01 12:03  reklov_w
+
+	* src/modules/pointcloud/pointcloud_tools/pc_drop_attribute.cpp:
+	  progress bar added
+
+2010-06-29 05:25  johanvdw
+
+	* src/saga_core/saga_gui/wksp_module_manager.cpp: Fix module html
+	  generation on unix
+
+2010-06-29 01:22  johanvdw
+
+	* configure.in, src/saga_core/saga_api/Makefile.am: Build using
+	  libharu if it is available in the system directories
+
+2010-06-29 01:17  johanvdw
+
+	* configure.in,
+	  src/modules_images/modules_opencv/opencv/Makefile.am: Build
+	  opencv-module on unix
+
+2010-06-24 14:25  oconrad
+
+	* src/: modules_io/gdal/io_gdal/io_gdal.vcproj,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  saga_core/saga_gui/wksp_base_control.cpp: no message
+
+2010-06-24 12:16  reklov_w
+
+	* src/modules/pointcloud/pointcloud_tools/pc_cluster_analysis.cpp:
+	  bug fix for LUT classes fit
+
+2010-06-22 13:03  reklov_w
+
+	* src/modules/pointcloud/pointcloud_tools/pc_cluster_analysis.cpp:
+	  bug fix (multiple module runs now correctly reset seleted
+	  attributes, LUT min/max now correctly set)
+
+2010-06-20 17:35  reklov_w
+
+	* src/modules/pointcloud/pointcloud_tools/: MLB_Interface.cpp,
+	  Makefile.am, makefile.linux, makefile.mingw,
+	  pc_cluster_analysis.cpp, pc_cluster_analysis.h,
+	  pointcloud_tools.vcproj: new module 'cluster analysis for point
+	  clouds' added
+
+2010-06-18 14:11  reklov_w
+
+	* src/modules/pointcloud/pointcloud_tools/: Makefile.am,
+	  makefile.linux, makefile.mingw: added new module 'Point Cloud
+	  Attribute Calculator' to makefiles
+
+2010-06-18 13:23  reklov_w
+
+	* src/modules/pointcloud/pointcloud_tools/: MLB_Interface.cpp,
+	  pc_attribute_calculator.cpp, pc_attribute_calculator.h,
+	  pointcloud_tools.vcproj: added new module 'Point Cloud Attribute
+	  Calculator'
+
+2010-06-17 17:45  oconrad
+
+	* src/: saga_core/saga_gui/dlg_list_base.cpp,
+	  saga_core/saga_gui/wksp.cpp,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_base_control.h,
+	  modules_io/gdal/io_gdal/io_gdal.dsp,
+	  modules_io/gdal/io_gdal/io_gdal.vcproj,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_cmd/module_library.cpp: no message
+
+2010-06-15 15:16  oconrad
+
+	* src/: saga_core/saga_api/api_string.cpp,
+	  modules_io/grid/io_grid/xyz.cpp: CSG_String::asDouble() works now
+	  also on not null terminated number strings
+
+2010-06-10 20:59  johanvdw
+
+	* src/modules_contrib/contrib_t_wutzler/contrib_t_wutzler/:
+	  CompleteLinkage.cpp, CompleteLinkage.h, DebugStream.h,
+	  Makefile.am, rgbOverlay.cpp: contrib_t_wutzler: various fixes to
+	  compile with gcc 4.4
+
+2010-06-10 18:33  oconrad
+
+	* src/: modules_io/gdal/io_gdal/gdal_export.cpp,
+	  modules/grid/grid_visualisation/grid_visualisation.dsp,
+	  modules_io/grid/io_grid_image/grid_export.cpp,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  saga_core/saga_api/geo_tools.h,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/pointcloud.h,
+	  saga_core/saga_api/projections.cpp,
+	  saga_core/saga_api/shapes_io.cpp: no message
+
+2010-06-08 17:04  johanvdw
+
+	* configure.in, src/saga_core/saga_api/Makefile.am,
+	  src/saga_core/saga_gdi/Makefile.am,
+	  src/saga_core/saga_odbc/Makefile.am: Add version number to shared
+	  library sonames
+
+2010-06-04 17:24  oconrad
+
+	* src/: saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_memory.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/pointcloud.h,
+	  modules_io/db/io_odbc/MLB_Interface.cpp,
+	  modules_io/db/io_odbc/get_connection.cpp,
+	  modules_io/db/io_odbc/get_connection.h,
+	  modules_io/db/io_odbc/pgis_shapes.cpp,
+	  modules_io/db/io_odbc/table.cpp,
+	  saga_core/saga_cmd/module_library.cpp,
+	  saga_core/saga_odbc/saga_odbc.cpp,
+	  saga_core/saga_odbc/saga_odbc.h, saga_core/saga_gui/wksp.cpp: no
+	  message
+
+2010-05-31 15:05  oconrad
+
+	* src/saga_core/saga_cmd/saga_cmd.cpp: saga_cmd: mlb_interface is
+	  recognised again
+
+2010-05-28 18:49  oconrad
+
+	* src/:
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.h,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.cpp,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Blend.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/point_trend_surface.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.h,
+	  saga_core/saga_api/module.cpp, saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_cmd/module_library.cpp,
+	  saga_core/saga_cmd/module_library.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h,
+	  saga_core/saga_cmd/saga_cmd.cpp: no message
+
+2010-05-28 11:18  oconrad
+
+	* src/: saga_core/saga_api/api_file.cpp,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/pointcloud.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression_grid.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression_grid.cpp,
+	  saga_core/saga_cmd/callback.cpp, saga_core/saga_cmd/callback.h,
+	  saga_core/saga_cmd/module_library.cpp,
+	  saga_core/saga_cmd/saga_cmd.cpp: csg_pointcloud: load/save bug
+	  fix geogr. weighted regression: support for no data table values
+	  saga_cmd: general flags (silent mode etc.); module path detection
+
+2010-05-26 10:34  oconrad
+
+	* src/saga_core/saga_gui/parameters_control.cpp:
+	  saga_gui/parameters_control.cpp: gcc compilation error fixed
+
+2010-05-21 16:46  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_ordinary_global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_universal_global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_ordinary_global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal_global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/variogram_dialog.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.cpp,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Variogram_Cloud.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Variogram_Surface.cpp,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/mat_tools.h,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/pointcloud.h, saga_core/saga_api/quadtree.cpp,
+	  saga_core/saga_api/table.h,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/Interpolation.h,
+	  modules/grid/grid_gridding/Interpolation_NaturalNeighbour.cpp,
+	  modules/grid/grid_gridding/Interpolation_Shepard.cpp,
+	  modules/grid/grid_gridding/Interpolation_Shepard.h,
+	  modules/grid/grid_gridding/Interpolation_Triangulation.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/point_grid_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/point_multi_grid_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/point_trend_surface.cpp,
+	  modules_io/db/io_odbc/MLB_Interface.cpp,
+	  modules_io/db/io_odbc/pgis_shapes.cpp,
+	  modules_io/db/io_odbc/shapes.cpp, modules_io/db/io_odbc/shapes.h,
+	  modules_io/db/io_odbc/table.cpp, modules_io/db/io_odbc/table.h,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/project.cpp, saga_core/saga_gui/project.h,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h, saga_core/saga_gui/wksp.cpp,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_base_control.h,
+	  saga_core/saga_gui/wksp_base_item.cpp,
+	  saga_core/saga_gui/wksp_base_item.h,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_map_manager.cpp,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.h,
+	  saga_core/saga_odbc/saga_odbc.cpp,
+	  saga_core/saga_odbc/saga_odbc.h: various modules: recognising
+	  table's no-data values gui: search for attributes api: point
+	  cloud selection (alpha stage) odbc: improvements (constraints
+	  have still to be added)
+
+2010-05-19 15:46  reklov_w
+
+	* src/modules/grid/grid_analysis/grid_analysis.vcproj: revert last
+	  change
+
+2010-05-19 15:36  reklov_w
+
+	* src/modules/grid/grid_analysis/grid_analysis.vcproj: wx2.8.11
+	  with msvc9 unicode compilation (64-bit)
+
+2010-05-19 15:17  reklov_w
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_lighting/:
+	  SADO_SolarRadiation.cpp, SolarRadiation.cpp: fix day2month
+	  conversion
+
+2010-05-19 10:41  reklov_w
+
+	* src/modules/grid/grid_filter/Filter_Multi_Dir_Lee.cpp: fix access
+	  violation with method "absolute" if stddev grid is not created
+
+2010-05-18 13:32  oconrad
+
+	* src/modules/grid/grid_visualisation/: Grid_Histogram_Surface.cpp,
+	  Grid_Histogram_Surface.h: no message
+
+2010-05-18 13:31  oconrad
+
+	* src/:
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules/grid/grid_analysis/grid_analysis.vcproj,
+	  modules/grid/grid_calculus/grid_calculus.vcproj,
+	  modules/grid/grid_calculus_bsl/grid_calculus_bsl.vcproj,
+	  modules/grid/grid_discretisation/grid_discretisation.vcproj,
+	  modules/grid/grid_filter/grid_filter.vcproj,
+	  modules/grid/grid_gridding/grid_gridding.vcproj,
+	  modules/grid/grid_spline/grid_spline.vcproj,
+	  modules/grid/grid_tools/grid_tools.vcproj,
+	  modules/grid/grid_visualisation/MLB_Interface.cpp,
+	  modules/grid/grid_visualisation/Makefile.am,
+	  modules/grid/grid_visualisation/grid_visualisation.vcproj,
+	  modules/grid/grid_visualisation/makefile.linux,
+	  modules/grid/grid_visualisation/makefile.mingw,
+	  modules_contrib/contrib_s_liersch/ihacres/ihacres.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_regression/geostatistics_regression.vcproj,
+	  modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.vcproj,
+	  modules_io/db/io_odbc/io_odbc.vcproj,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.vcproj,
+	  modules_io/gdal/io_gdal/io_gdal.vcproj,
+	  modules_io/gps/io_gps/io_gps.vcproj,
+	  modules_io/grid/io_grid/io_grid.vcproj,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.vcproj,
+	  modules_io/grid/io_grid_image/io_grid_image.vcproj,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes_dxf/io_shapes_dxf.vcproj,
+	  modules_io/shapes/io_shapes_las/io_shapes_las.vcproj,
+	  modules_io/table/io_table/io_table.vcproj,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.vcproj,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.vcproj,
+	  modules_images/modules_opencv/opencv/opencv.vcproj,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.vcproj,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.vcproj,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.vcproj,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcproj,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.vcproj,
+	  modules/shapes/shapes_grid/shapes_grid.vcproj,
+	  modules/shapes/shapes_lines/shapes_lines.vcproj,
+	  modules_recreations/recreations/recreations_games/recreations_games.vcproj,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_cmd/saga_cmd.vcproj,
+	  saga_core/saga_gdi/saga_gdi.vcproj,
+	  saga_core/saga_gui/saga_gui.vcproj,
+	  saga_core/saga_odbc/saga_odbc.vcproj,
+	  modules/shapes/shapes_points/shapes_points.vcproj,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcproj,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  modules/shapes/shapes_transect/shapes_transect.vcproj,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.vcproj,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.vcproj,
+	  modules_simulation/fire/sim_fire_spreading/sim_fire_spreading.vcproj,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  modules/table/table_calculus/table_calculus.vcproj,
+	  modules/table/table_tools/table_tools.vcproj,
+	  modules/tin/tin_tools/tin_tools.vcproj,
+	  modules_images/modules_vigra/vigra/vigra.vcproj: wx2.8.11 with
+	  msvc9 unicode compilation (32-bit)
+
+2010-05-12 14:54  oconrad
+
+	* src/saga_core/saga_api/pointcloud.cpp:
+	  csg_pointcloud::del_point() bug fix
+
+2010-05-10 15:25  oconrad
+
+	* src/: saga_core/saga_api/geo_classes.cpp,
+	  saga_core/saga_api/geo_tools.h, saga_core/saga_api/mat_tools.cpp,
+	  saga_core/saga_api/mat_tools.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression_grid.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression_grid.cpp,
+	  saga_core/saga_gui/makefile.mingw: no message
+
+2010-05-07 16:27  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.cpp,
+	  saga_core/saga_gui/saga.cpp, saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_gui/wksp_module_manager.cpp: no message
+
+2010-05-06 15:41  reklov_w
+
+	*
+	  src/modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.cpp:
+	  fixing unicode string handling in module library description
+
+2010-05-06 14:56  oconrad
+
+	* src/: saga_core/saga_api/api_core.cpp,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/dataobject.h,
+	  saga_core/saga_api/geo_classes.cpp,
+	  saga_core/saga_api/geo_tools.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/grid_system.cpp,
+	  saga_core/saga_api/mat_tools.h, saga_core/saga_api/table.cpp,
+	  saga_core/saga_api/table_record.cpp,
+	  saga_core/saga_api/table_value.h,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.h,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression.h,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression_grid.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression_grid.h,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression.h,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression_grid.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression_grid.h,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_shapes_points.cpp,
+	  saga_core/saga_gui/wksp_shapes_polygon.cpp,
+	  saga_core/saga_gui/wksp_table.cpp: no message
+
+2010-05-06 09:47  reklov_w
+
+	* configure.in,
+	  src/modules_terrain_analysis/terrain_analysis/Makefile.am:
+	  enabled build of ta_compound by default (linux)
+
+2010-04-29 18:06  oconrad
+
+	* src/: saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/api_file.cpp,
+	  saga_core/saga_api/mat_tools.cpp, saga_core/saga_api/mat_tools.h,
+	  saga_core/saga_api/module.cpp, saga_core/saga_api/module.h,
+	  saga_core/saga_api/shapes.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.mingw,
+	  modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  saga_core/saga_gui/callback.cpp: no message
+
+2010-04-29 01:32  reklov_w
+
+	* src/: modules/grid/grid_analysis/grid_analysis.lng.txt,
+	  modules/grid/grid_calculus/grid_calculus.lng.txt,
+	  modules/grid/grid_calculus_bsl/grid_calculus_bsl.lng.txt,
+	  modules/grid/grid_discretisation/grid_discretisation.lng.txt,
+	  modules/grid/grid_filter/grid_filter.lng.txt,
+	  modules/grid/grid_gridding/grid_gridding.lng.txt,
+	  modules/grid/grid_spline/grid_spline.lng.txt,
+	  modules/grid/grid_tools/grid_tools.lng.txt,
+	  modules/grid/grid_visualisation/grid_visualisation.lng.txt,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.lng.txt,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.lng.txt,
+	  modules/shapes/shapes_grid/shapes_grid.lng.txt,
+	  modules/shapes/shapes_lines/shapes_lines.lng.txt,
+	  modules/shapes/shapes_lines_ex/shapes_lines_ex.lng.txt,
+	  modules/shapes/shapes_points/shapes_points.lng.txt,
+	  modules/shapes/shapes_polygons/shapes_polygons.lng.txt,
+	  modules/shapes/shapes_tools/shapes_tools.lng.txt,
+	  modules/table/table_calculus/table_calculus.lng.txt,
+	  modules/table/table_tools/table_tools.lng.txt,
+	  modules/tin/tin_tools/tin_tools.lng.txt,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.lng.txt,
+	  modules_contrib/contrib_s_liersch/ihacres/ihacres.lng.txt,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.lng.txt,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.lng.txt,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.lng.txt,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.lng.txt,
+	  modules_geostatistics/geostatistics/geostatistics_regression/geostatistics_regression.lng.txt,
+	  modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.lng.txt,
+	  modules_images/modules_opencv/opencv/opencv.lng.txt,
+	  modules_images/modules_vigra/vigra/vigra.lng.txt,
+	  modules_io/db/io_odbc/io_odbc.lng.txt,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.lng.txt,
+	  modules_io/gdal/io_gdal/io_gdal.lng.txt,
+	  modules_io/gps/io_gps/io_gps.lng.txt,
+	  modules_io/grid/io_grid/io_grid.lng.txt,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.lng.txt,
+	  modules_io/grid/io_grid_image/io_grid_image.lng.txt,
+	  modules_io/shapes/io_shapes/io_shapes.lng.txt,
+	  modules_io/shapes/io_shapes_dxf/io_shapes_dxf.lng.txt,
+	  modules_io/shapes/io_shapes_las/io_shapes_las.lng.txt,
+	  modules_io/table/io_table/io_table.lng.txt,
+	  modules_io/table/io_table_odbc/io_table_odbc.lng.txt,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.lng.txt,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.lng.txt,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.lng.txt,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.lng.txt,
+	  modules_recreations/recreations/recreations_games/recreations_games.lng.txt,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.lng.txt,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.lng.txt,
+	  modules_simulation/fire/sim_fire_spreading/sim_fire_spreading.lng.txt,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.lng.txt,
+	  saga_core/saga_gui/res/saga.ger.txt,
+	  saga_core/saga_gui/res/saga.lng.txt: language files updated to
+	  match cvs
+
+2010-04-28 17:27  reklov_w
+
+	* src/saga_core/saga_gui/: res_commands.cpp, wksp_pointcloud.cpp:
+	  added classification support (min/max, stddev) for pointclouds
+
+2010-04-28 16:23  reklov_w
+
+	* src/saga_core/saga_gui/wksp_pointcloud.cpp: added Display Color
+	  Classification Type RGB for pointclouds
+
+2010-04-28 15:07  reklov_w
+
+	* src/modules/pointcloud/pointcloud_tools/pc_cut.cpp: moved dialog
+	  parameters for "AREA"  from constructor to on_execute to fix
+	  "invalid parameter" bug in non-interactive version
+
+2010-04-27 10:51  reklov_w
+
+	* src/: saga_core/Makefile.am, saga_core/makefile.linux,
+	  saga_core/saga_gui/Makefile.am,
+	  saga_core/saga_gui/makefile.linux,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  modules_io/Makefile.am, modules_io/makefile.linux: activated ODBC
+	  support on linux; this adds a new dependency on unixODBC
+
+2010-04-26 09:37  oconrad
+
+	* src/: saga.dsw, saga.sln: no message
+
+2010-04-26 09:17  oconrad
+
+	* src/: modules/pointcloud/pointcloud_tools/pointcloud_tools.dsp,
+	  saga_core/saga_gui/wksp_module_manager.cpp: no message
+
+2010-04-24 00:13  reklov_w
+
+	* src/modules_io/shapes/io_shapes_las/las_import.cpp: fix R,G,B,
+	  datatypes (now SG_DATATYPE_Int) to prevent overflow
+
+2010-04-21 10:58  reklov_w
+
+	* src/modules_io/shapes/io_shapes/xyz.cpp: fix to support point
+	  cloud export correctly (before fix, x and y were written twice to
+	  the table)
+
+2010-04-20 18:21  oconrad
+
+	* src/saga_core/: saga_api/module.h, saga_api/module_library.cpp,
+	  saga_cmd/module_library.cpp, saga_gui/wksp_module_library.cpp,
+	  saga_gui/wksp_module_manager.cpp, saga_odbc/saga_odbc.cpp,
+	  saga_odbc/saga_odbc.h: no message
+
+2010-04-20 12:50  oconrad
+
+	* src/saga_core/saga_api/: api_core.h, api_file.cpp, module.cpp,
+	  module.h, pointcloud.cpp, table.cpp, table.h, table_record.cpp,
+	  table_selection.cpp: no message
+
+2010-04-20 12:49  oconrad
+
+	* src/: modules/grid/grid_gridding/Interpolation_Triangulation.cpp,
+	  modules/grid/grid_gridding/Interpolation_Triangulation.h,
+	  modules_io/shapes/io_shapes/stl.cpp,
+	  modules_io/shapes/io_shapes/stl.h: improved triangulation
+	  algorithm (stl import, interpolation)
+
+2010-04-20 09:46  johanvdw
+
+	*
+	  src/modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.cpp:
+	  Update Protection Index description
+
+	  Based on input from a discussion on:
+	  http://sourceforge.net/projects/saga-gis/forums/forum/790705/topic/3674186
+
+2010-04-19 09:27  reklov_w
+
+	* src/modules/pointcloud/pointcloud_tools/: MLB_Interface.cpp,
+	  Makefile.am, makefile.linux, makefile.mingw,
+	  pc_thinning_simple.cpp, pc_thinning_simple.h,
+	  pointcloud_tools.dsp, pointcloud_tools.vcproj: new module pc
+	  thinning (simple) added
+
+2010-04-18 20:26  reklov_w
+
+	* src/saga_core/saga_api/pointcloud.cpp: fix Del_Point(), bug
+	  caused heap corruption in _Dec_Array()
+
+2010-04-16 22:27  reklov_w
+
+	* src/saga_core/saga_odbc/saga_odbc.vcproj: fix wrong 64bit build
+	  configurations, corrected _SAGA_ODBC_EXPORTS
+
+2010-04-16 18:08  oconrad
+
+	* src/: saga_core/saga_gui/dlg_list_base.cpp,
+	  saga_core/saga_gui/dlg_list_grid.cpp,
+	  saga_core/saga_gui/dlg_list_pointcloud.cpp,
+	  saga_core/saga_gui/dlg_list_shapes.cpp,
+	  saga_core/saga_gui/dlg_list_table.cpp,
+	  saga_core/saga_gui/dlg_list_tin.cpp,
+	  saga_core/saga_gui/wksp_table.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  saga_core/saga_api/mat_regression_multiple.cpp,
+	  saga_core/saga_api/mat_tools.h, saga_core/saga_api/module.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/point_multi_grid_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/point_multi_grid_regression.h,
+	  modules_images/modules_vigra/vigra/vigra_fft.cpp,
+	  modules_io/shapes/io_shapes/stl.cpp,
+	  modules_io/shapes/io_shapes/stl.h,
+	  saga_core/saga_odbc/saga_odbc.cpp: no message
+
+2010-04-16 17:33  reklov_w
+
+	* src/saga.sln: fix wrong 64bit build configurations
+
+2010-04-15 11:14  oconrad
+
+	* src/saga_core/saga_api/: api_core.cpp, api_core.h, grid_io.cpp:
+	  saga grid ascii import: bug fixed
+
+2010-04-14 21:45  reklov_w
+
+	* src/modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.cpp: SAGA
+	  treats xmin/ymin as "pixel-as-point" and not as "pixel-as-area"
+
+2010-04-14 15:07  oconrad
+
+	* src/: modules_io/table/io_table/MLB_Interface.cpp,
+	  modules_io/table/io_table/io_table_txt.cpp,
+	  modules_io/table/io_table/io_table_txt.h,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/projections.cpp,
+	  saga_core/saga_odbc/saga_odbc.cpp: no message
+
+2010-04-06 21:27  reklov_w
+
+	*
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp:
+	  fix bug in aspect calculation
+
+2010-03-26 13:09  oconrad
+
+	* src/saga_core/saga_api/api_core.h,
+	  src/saga_core/saga_api/api_file.cpp,
+	  src/saga_core/saga_api/grid.h,
+	  src/saga_core/saga_api/pointcloud.cpp,
+	  src/saga_core/saga_api/pointcloud.h,
+	  src/modules/pointcloud/pointcloud_viewer/points_view_module.cpp,
+	  src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/Flat_Detection.h,
+	  src/saga_core/saga_gui/wksp_map.cpp,
+	  src/saga_core/saga_gui/wksp_pointcloud.cpp, configure.in: no
+	  message
+
+2010-03-26 12:42  oconrad
+
+	* src/modules_io/db/io_odbc/: Get_Connection.cpp, Get_Connection.h,
+	  PGIS_Shapes.cpp, PGIS_Shapes.h, Shapes.cpp, Shapes.h, Table.cpp,
+	  Table.h, Makefile.am, get_connection.cpp, get_connection.h,
+	  pgis_shapes.cpp, pgis_shapes.h, shapes.cpp, shapes.h, table.cpp,
+	  table.h: no message
+
+2010-03-25 17:47  oconrad
+
+	* src/: modules/shapes/shapes_transect/Polygon_Transect.cpp,
+	  modules/shapes/shapes_transect/shapes_transect.dsp,
+	  modules/shapes/shapes_transect/shapes_transect.vcproj, saga.dsw,
+	  saga.sln: no message
+
+2010-03-25 17:37  oconrad
+
+	* src/: modules/grid/grid_discretisation/rga_basic.cpp,
+	  modules_io/db/Makefile.am, modules_io/db/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.dsp,
+	  saga.bat, saga.dsw, saga.sln: no message
+
+2010-03-25 17:36  oconrad
+
+	* src/: modules_io/db/io_odbc/Get_Connection.cpp,
+	  modules_io/db/io_odbc/Get_Connection.h,
+	  modules_io/db/io_odbc/MLB_Interface.cpp,
+	  modules_io/db/io_odbc/MLB_Interface.h,
+	  modules_io/db/io_odbc/Makefile.am,
+	  modules_io/db/io_odbc/PGIS_Shapes.cpp,
+	  modules_io/db/io_odbc/PGIS_Shapes.h,
+	  modules_io/db/io_odbc/Shapes.cpp, modules_io/db/io_odbc/Shapes.h,
+	  modules_io/db/io_odbc/Table.cpp, modules_io/db/io_odbc/Table.h,
+	  modules_io/db/io_odbc/io_odbc.dsp,
+	  modules_io/db/io_odbc/io_odbc.lng.txt,
+	  modules_io/db/io_odbc/io_odbc.vcproj,
+	  modules_io/db/io_odbc/makefile.linux,
+	  modules_io/db/io_odbc/makefile.mingw,
+	  saga_core/saga_odbc/Makefile.am,
+	  saga_core/saga_odbc/makefile.linux,
+	  saga_core/saga_odbc/makefile.mingw, saga_core/saga_odbc/otlv4.h,
+	  saga_core/saga_odbc/saga_odbc.cpp,
+	  saga_core/saga_odbc/saga_odbc.dsp,
+	  saga_core/saga_odbc/saga_odbc.h,
+	  saga_core/saga_odbc/saga_odbc.vcproj: saga_odbc: new additional
+	  api library for database (via odbc) access changed io_odbc module
+	  library (previous name io_odbc_otl)
+
+2010-03-25 10:23  johanvdw
+
+	* src/modules/shapes/: Makefile.am, makefile.linux: Update
+	  modules/shapefiles to include shapes transect
+
+2010-03-25 10:20  johanvdw
+
+	* configure.in,
+	  src/modules/shapes/shapes_transect/MLB_Interface.cpp,
+	  src/modules/shapes/shapes_transect/MLB_Interface.h,
+	  src/modules/shapes/shapes_transect/Makefile.am,
+	  src/modules/shapes/shapes_transect/Polygon_Transect.cpp,
+	  src/modules/shapes/shapes_transect/Polygon_Transect.h,
+	  src/modules/shapes/shapes_transect/makefile.linux,
+	  src/modules/shapes/shapes_transect/makefile.mingw,
+	  src/modules/shapes/shapes_transect/shapes_transect.vcproj: New
+	  module: Create transect through polygons map
+
+	  Transect for lines and polygon shapefiles
+
+	  The goal of this module is to create a transect along a line
+	  through a polygon map.  Eg
+
+	  |____ST1_____!_ST2_!__ST1__!_______ST#_____|
+
+	  (Soil type 1 etc...)
+
+	  This is done by creating a table with the ID of each line, the
+	  distance to the starting point and the different transects:
+
+	  |  line_id  |  start	|  end	|  code/field  | |    0      |	  0
+	     |	124  |	   ST1	    | |    0	  |   124   |  300  |
+	  ST2	   | |	  0	 |   300   | 1223  |	 ST1	  | |	 0
+	      |  1223	| 2504	|     ST3      | |    1      |	  0    |
+	  200  |     ST4      | |   ...     |	...   |  ...  |     ...
+	   |
+
+	  The module requires an input shape with all the line transects
+	  [Transect_Line] and a polygon theme [Theme]. You also have to
+	  select which field you want to have in the resulting table
+	  [Transect_Result].  This can be an ID of the polygon theme if you
+	  want to link the tables later on, or any other field
+	  [Theme_Field].
+
+2010-03-24 09:24  oconrad
+
+	* src/saga_core/saga_api/: api_file.cpp, dataobject.cpp, grid.cpp,
+	  grid_io.cpp, grid_memory.cpp, module.cpp, parameter_data.cpp,
+	  parameters.cpp, table_io.cpp, table_value.h: saga_api serious bug
+	  fix: csg_string::printf() used without argument list leads
+	  potentially to program crash
+
+2010-03-24 09:22  oconrad
+
+	* src/: modules/grid/grid_tools/GridsFromTableAndGrid.cpp,
+	  modules/grid/grid_tools/GridsFromTableAndGrid.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_01.cpp,
+	  saga_core/saga_gui/dc_helper.cpp: saga_gui bug fix: deep map
+	  window zoom freezes saga lectures_introduction bug fix: choices
+	  list gridsfromtableandgrid module enhanced
+	  gsgrid_zonal_statistics: field names optionally with full length
+
+2010-03-24 09:18  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/:
+	  Flat_Detection.cpp, Flat_Detection.h, MLB_Interface.cpp,
+	  Makefile.am, makefile.linux, makefile.mingw,
+	  ta_preprocessor.vcproj: flat_detection module added
+
+2010-03-22 11:14  johanvdw
+
+	* src/saga_core/saga_api/: api_core.h, api_string.cpp: Update
+	  SG_FPRINTF to work with gcc unicode
+
+	  Before the fix running saga_cmd without arguments and without
+	  library directory would yield: e:n afterwards: error: no valid
+	  module library found in path [...]
+
+	  this error started after the silent mode was introduced
+	  (11-1-2010)
+
+2010-03-18 11:03  oconrad
+
+	* src/modules_io/: gdal/io_gdal/gdal_driver.cpp,
+	  gdal/io_gdal/gdal_driver.h, gdal/io_gdal/gdal_export.cpp,
+	  gdal/io_gdal/gdal_import.cpp, gdal/io_gdal/gdal_import.h,
+	  grid/io_grid_image/grid_export.cpp,
+	  grid/io_grid_image/grid_import.cpp: io_gdal/io_grid_image:
+	  rotation/scaling support
+
+2010-03-17 20:38  oconrad
+
+	* src/modules/grid/:
+	  grid_discretisation/Grid_Classify_Supervised.cpp,
+	  grid_tools/Grid_Proximity.cpp: no message
+
+2010-03-16 17:10  oconrad
+
+	* src/: modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules_io/grid/io_grid_image/grid_import.h,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/geo_tools.h, saga_core/saga_api/module.cpp,
+	  saga_core/saga_api/module.h, saga_core/saga_api/projections.cpp,
+	  saga_core/saga_api/shapes.h, saga_core/saga_api/shapes_io.cpp:
+	  saga_api: projections support (not finished yet) io_grid_image:
+	  world file scaling/rotation support
+
+2010-03-16 10:47  oconrad
+
+	* src/modules/grid/grid_tools/: Grid_Proximity.cpp,
+	  Grid_Proximity.h, MLB_Interface.cpp, Makefile.am, grid_tools.dsp,
+	  grid_tools.vcproj, makefile.linux, makefile.mingw: module added
+	  to grid_tools: proximity grid calculation
+
+2010-03-16 10:21  reklov_w
+
+	* src/modules/shapes/shapes_tools/: QueryBuilder.cpp,
+	  QueryParser.cpp, QueryParser.h: added error checking for formula
+	  and fixed bugs (pointer to uninitialized vector)
+
+2010-03-15 18:04  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveUp.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveUp.h,
+	  saga_core/saga_api/grid.cpp: csg_grid index creation error not
+	  properly handled in catchment area calculation
+
+2010-03-15 16:21  oconrad
+
+	* src/saga_core/saga_api/table_dbase.cpp: serious bug fix: dbase
+	  string fields must have a size > 0 on initialisation
+
+2010-03-15 16:19  oconrad
+
+	* src/saga_core/saga_api/api_file.cpp: missing implementation of
+	  csg_file::set_unicodemode() (caused error in swig/python build)
+
+2010-03-15 16:16  oconrad
+
+	* src/modules_io/gdal/io_gdal/io_gdal.dsp: no message
+
+2010-03-15 13:50  reklov_w
+
+	* src/: modules/grid/grid_analysis/grid_analysis.vcproj,
+	  modules/grid/grid_calculus/grid_calculus.vcproj,
+	  modules/grid/grid_calculus_bsl/grid_calculus_bsl.vcproj,
+	  modules/grid/grid_discretisation/grid_discretisation.vcproj,
+	  modules/grid/grid_filter/grid_filter.vcproj,
+	  modules/grid/grid_gridding/grid_gridding.vcproj,
+	  modules/grid/grid_spline/grid_spline.vcproj,
+	  modules/grid/grid_tools/grid_tools.vcproj,
+	  modules/grid/grid_visualisation/grid_visualisation.vcproj,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.vcproj,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.vcproj,
+	  modules/shapes/shapes_grid/shapes_grid.vcproj,
+	  modules/shapes/shapes_lines/shapes_lines.vcproj,
+	  modules/shapes/shapes_points/shapes_points.vcproj,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcproj,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  modules/table/table_calculus/table_calculus.vcproj,
+	  modules/table/table_tools/table_tools.vcproj,
+	  modules/tin/tin_tools/tin_tools.vcproj,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.vcproj,
+	  modules_contrib/contrib_s_liersch/ihacres/ihacres.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_regression/geostatistics_regression.vcproj,
+	  modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.vcproj,
+	  modules_images/modules_opencv/opencv/opencv.vcproj,
+	  modules_images/modules_vigra/vigra/vigra.vcproj,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.vcproj,
+	  modules_io/gdal/io_gdal/io_gdal.vcproj,
+	  modules_io/gps/io_gps/io_gps.vcproj,
+	  modules_io/grid/io_grid/io_grid.vcproj,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.vcproj,
+	  modules_io/grid/io_grid_image/io_grid_image.vcproj,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes_dxf/io_shapes_dxf.vcproj,
+	  modules_io/shapes/io_shapes_las/io_shapes_las.vcproj,
+	  modules_io/table/io_table/io_table.vcproj,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.vcproj,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.vcproj,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.vcproj,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcproj,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.vcproj,
+	  modules_recreations/recreations/recreations_games/recreations_games.vcproj,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.vcproj,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.vcproj,
+	  modules_simulation/fire/sim_fire_spreading/sim_fire_spreading.vcproj,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  saga.sln, saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_cmd/saga_cmd.vcproj,
+	  saga_core/saga_gdi/saga_gdi.vcproj,
+	  saga_core/saga_gui/saga_gui.vcproj: added x64 build targets to
+	  visual studio projects
+
+2010-03-15 13:45  reklov_w
+
+	* src/modules_projection/:
+	  pj_geotrans/pj_geotrans/lib/lib_src_geotrans2.2.6.zip,
+	  pj_proj4/pj_proj4/lib/lib_src_proj-4.6.1.zip: added visual studio
+	  solution file and x64 build targets to zip
+
+2010-03-14 18:11  oconrad
+
+	* src/modules_io/gdal/io_gdal/io_gdal.vcproj: no message
+
+2010-03-11 15:38  reklov_w
+
+	* src/saga_core/saga_gui/res_dialogs.cpp: add point clouds to all
+	  recognized types on load
+
+2010-03-09 23:43  reklov_w
+
+	* src/modules/grid/grid_tools/Grid_Merge.cpp: fix previous change
+	  "Fix memory leak"
+
+2010-03-05 20:46  johanvdw
+
+	* src/modules/grid/grid_tools/Grid_Merge.cpp: Fix memory leak
+
+2010-03-04 16:35  oconrad
+
+	* src/: saga.bat, saga.dsw,
+	  modules_geostatistics/geostatistics/geostatistics_regression/geostatistics_regression.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression.cpp,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/api_memory.cpp,
+	  saga_core/saga_api/api_string.cpp,
+	  saga_core/saga_api/saga_api.dsp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_ogis.cpp, saga_core/saga_api/table.h,
+	  saga_core/saga_api/table_record.cpp,
+	  saga_core/saga_api/table_value.h: api: serious bug in
+	  csg_table_record::assign fixed api: csg_table_value_binary added
+	  minor bug fixes and enhancements: io_db_otl,
+	  geostatistics_regression...
+
+2010-03-03 20:09  oconrad
+
+	* src/: modules_io/db/Makefile.am, modules_io/db/makefile.linux,
+	  modules_io/db/io_db_mysql/Get_Table.cpp,
+	  modules_io/db/io_db_mysql/Get_Table.h,
+	  modules_io/db/io_db_mysql/MLB_Interface.cpp,
+	  modules_io/db/io_db_mysql/MLB_Interface.h,
+	  modules_io/db/io_db_mysql/Makefile.am,
+	  modules_io/db/io_db_mysql/io_db_mysql.dsp,
+	  modules_io/db/io_db_mysql/io_db_mysql.vcproj,
+	  modules_io/db/io_db_mysql/makefile.linux,
+	  modules_io/db/io_db_mysql/makefile.mingw,
+	  modules_io/db/io_db_mysql/readme.txt,
+	  saga_core/saga_api/Makefile.am, saga_core/saga_api/api_core.cpp,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/api_memory.cpp,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/saga_api.vcproj, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_ogis.cpp, saga_core/saga_api/table.h,
+	  saga_core/saga_api/table_record.cpp,
+	  saga_core/saga_api/table_value.h, saga.sln: api: csg_bytes
+	  (helper class for byte array handling) api:
+	  csg_shapes_ogis_convert (conversion from/to opengis wkb/wkt)
+	  module library: io_db_odbc added (replaces wxodbc based modules,
+	  alpha)
+
+2010-03-02 11:07  johanvdw
+
+	* src/saga_core/saga_gui/: Makefile.am, saga_frame.cpp: Fix Tip of
+	  the day for Automake installations
+
+2010-03-01 17:46  oconrad
+
+	* src/saga_core/saga_gui/: wksp_map.cpp, wksp_map_dc.cpp: no
+	  message
+
+2010-02-25 18:16  oconrad
+
+	* src/saga_core/saga_gui/: view_layout_info.cpp,
+	  view_table_control.cpp, wksp_map.cpp: no message
+
+2010-02-23 18:00  oconrad
+
+	* src/: modules/grid/grid_filter/Filter.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/pointcloud.h,
+	  saga_core/saga_api/shapes_io.cpp, saga_core/saga_api/table.cpp,
+	  saga_core/saga_api/table.h, saga_core/saga_api/table_dbase.cpp,
+	  saga_core/saga_api/table_io.cpp,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/res_dialogs.cpp,
+	  saga_core/saga_gui/view_table.cpp,
+	  saga_core/saga_gui/view_table.h,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/view_table_control.h,
+	  saga_core/saga_gui/wksp_layer.cpp: no message
+
+2010-02-22 17:21  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.h,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Variogram_Cloud.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Variogram_Cloud.h,
+	  modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Variogram_Surface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Variogram_Surface.h,
+	  modules/grid/grid_filter/grid_filter.dsp,
+	  modules/grid/grid_tools/Grid_Gaps_Spline_Fill.cpp,
+	  modules/grid/grid_tools/Grid_Gaps_Spline_Fill.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/semivariogram.cpp,
+	  modules_io/grid/io_grid/xyz.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_shapes.h: modules for variogram analysis
+	  minor bug fixes (xyz import, spline filled gaps, table view)
+
+2010-02-18 09:36  reklov_w
+
+	* src/modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp:
+	  applied Patches item #2953685 provided by Johan Van de Wauw
+	  fixing missing duplicate of start and end point
+
+2010-02-17 14:27  oconrad
+
+	* src/: modules/grid/grid_tools/Grid_Gaps_Spline_Fill.cpp,
+	  modules/grid/grid_tools/Grid_Gaps_Spline_Fill.h,
+	  modules/grid/grid_tools/Grid_Mask.cpp,
+	  modules/grid/grid_tools/Grid_Mask.h,
+	  modules/grid/grid_tools/MLB_Interface.cpp,
+	  modules/grid/grid_tools/Makefile.am,
+	  modules/grid/grid_tools/grid_tools.dsp,
+	  modules/grid/grid_tools/grid_tools.vcproj,
+	  modules/grid/grid_tools/makefile.linux,
+	  modules/grid/grid_tools/makefile.mingw,
+	  saga_core/saga_api/geo_classes.cpp,
+	  saga_core/saga_api/geo_tools.h, saga_core/saga_api/shapes_io.cpp:
+	  grid tool modules added: - grid_mask - close gaps with spline
+
+2010-02-15 17:51  oconrad
+
+	* src/: modules/shapes/shapes_tools/CreateChartLayer.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_regression/geostatistics_regression.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression.h,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression_grid.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression_grid.h,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression_grid.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_regression/gw_regression_grid.h,
+	  modules_geostatistics/geostatistics/geostatistics_regression/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_regression/makefile.mingw,
+	  saga_core/saga_api/module.cpp,
+	  saga_core/saga_gui/wksp_module.cpp: modules added: geographically
+	  weighted regression (multi/grid support)
+
+2010-02-13 23:38  reklov_w
+
+	* src/modules/grid/grid_filter/: Filter_Terrain_SlopeBased.cpp,
+	  Filter_Terrain_SlopeBased.h, MLB_Interface.cpp, Makefile.am,
+	  grid_filter.vcproj, makefile.linux, makefile.mingw: DTM Filter
+	  (slope-based) module added
+
+2010-02-12 17:37  oconrad
+
+	* configure.in, src/saga.bat, src/saga.dsw, src/saga.sln,
+	  src/modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  src/modules/shapes/shapes_tools/CreateChartLayer.cpp,
+	  src/modules_geostatistics/geostatistics/Makefile.am,
+	  src/modules_geostatistics/geostatistics/makefile.linux,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Statistics.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Trend_Surface.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Trend_Surface.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance_Radius.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/fast_representativeness.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.dsp,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/gw_regression.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/gw_regression.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/makefile.linux,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/makefile.mingw,
+	  src/modules_io/table/io_table_odbc/odbc.cpp,
+	  src/saga_core/saga_api/module.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/MLB_Interface.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/MLB_Interface.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/Makefile.am,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/geostatistics_regression.dsp,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/geostatistics_regression.lng.txt,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/geostatistics_regression.vcproj,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/gw_multi_regression.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/gw_regression.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/gw_regression.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/makefile.linux,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/makefile.mingw,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/point_grid_regression.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/point_grid_regression.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/point_multi_grid_regression.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/point_multi_grid_regression.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/point_trend_surface.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_regression/point_trend_surface.h,
+	  src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.cpp,
+	  src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcproj,
+	  src/saga_core/saga_gui/wksp_map.cpp: no message
+
+2010-02-11 18:21  oconrad
+
+	* src/modules_geostatistics/geostatistics/geostatistics_grid/:
+	  gw_regression.cpp, gw_regression.h: added module: geographically
+	  weighted regression
+
+2010-02-11 18:19  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.mingw,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.cpp,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameters.h, saga_core/saga_api/quadtree.cpp:
+	  module bug: pit_eliminator improved: geographically weighted
+	  regression
+
+2010-02-09 18:01  oconrad
+
+	* src/: modules/grid/grid_spline/Thin_Plate_Spline.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.h,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Global.h,
+	  modules/grid/grid_spline/Makefile.am,
+	  modules/grid/grid_spline/Thin_Plate_Spline.h,
+	  modules/grid/grid_spline/grid_spline.dsp,
+	  modules/grid/grid_spline/grid_spline.vcproj,
+	  modules/grid/grid_spline/makefile.linux,
+	  modules/grid/grid_spline/makefile.mingw,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/Interpolation.h,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.h,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.h,
+	  modules/grid/grid_gridding/grid_gridding.vcproj,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/grid/grid_tools/Grid_Resample.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Trend_Surface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Trend_Surface.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/semivariogram.h,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.h,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_gui/view_scatterplot.cpp,
+	  saga_core/saga_gui/view_table_control.cpp: simplified and unified
+	  grid target selector helper class for parameters
+
+2010-02-03 19:07  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Statistics.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Trend_Surface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Trend_Surface.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance_Radius.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/fast_representativeness.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.mingw,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.h,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Distances.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Distances.h,
+	  modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks_WL.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks_WL_XXL.cpp,
+	  saga_core/saga_api/table.cpp, saga_core/saga_api/table.h,
+	  saga_core/saga_cmd/module_library.cpp: 2 statistic modules added;
+	  supervised classification improved/added functions sink filling
+	  minimum slope saga_cmd point cloud support saga_api
+	  csg_table::add_field java compatibility
+
+2010-01-29 12:51  oconrad
+
+	* src/: saga_core/saga_api/api_callback.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.h,
+	  saga_core/saga_cmd/callback.cpp, saga_core/saga_cmd/callback.h,
+	  saga_core/saga_cmd/saga_cmd.cpp, saga_core/saga_gui/callback.cpp,
+	  saga_core/saga_gui/saga.cpp: no message
+
+2010-01-29 10:18  oconrad
+
+	* src/saga_core/saga_cmd/callback.cpp: no conio.h under linux
+
+2010-01-28 10:28  oconrad
+
+	* src/saga_core/: saga_api/api_core.h, saga_api/mat_spline.cpp,
+	  saga_api/mat_tools.h, saga_cmd/callback.cpp, saga_cmd/callback.h,
+	  saga_cmd/saga_cmd.cpp, saga_gui/view_map_3d.cpp,
+	  saga_gui/view_map_control.cpp, saga_gui/view_map_control.h:
+	  saga_cmd: silent mode saga_api: thin plate spline saga_gui:
+	  middle mouse pan in zoom mode, 3d view focus
+
+2010-01-25 16:50  oconrad
+
+	* src/: modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  modules_io/grid/io_grid/esri_arcinfo.h,
+	  saga_core/saga_gui/view_histogram.cpp,
+	  saga_core/saga_gui/wksp_grid.cpp, saga_core/saga_gui/wksp_grid.h,
+	  saga_core/saga_gui/wksp_layer.h,
+	  saga_core/saga_gui/wksp_layer_classify.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.h,
+	  saga_core/saga_gui/wksp_layer_legend.cpp,
+	  saga_core/saga_gui/wksp_map.cpp,
+	  saga_core/saga_gui/wksp_map_dc.h: grid: dynamic rgb overlay; esri
+	  ascii export
+
+2010-01-19 15:49  oconrad
+
+	* src/: Makefile.am, makefile.linux,
+	  modules/grid/grid_discretisation/Makefile.am,
+	  modules/grid/grid_discretisation/makefile.linux,
+	  modules/grid/grid_filter/Makefile.am,
+	  modules/grid/grid_filter/makefile.linux,
+	  modules_images/modules_imagery/imagery_segmentation/Makefile.am,
+	  modules_images/modules_imagery/imagery_segmentation/makefile.linux,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/MLB_Interface.cpp,
+	  modules/grid/grid_discretisation/grid_discretisation.dsp,
+	  modules/grid/grid_discretisation/grid_discretisation.vcproj,
+	  modules/grid/grid_discretisation/makefile.mingw,
+	  modules/grid/grid_discretisation/rga_basic.cpp,
+	  modules/grid/grid_discretisation/rga_basic.h,
+	  modules/grid/grid_filter/Filter_Majority.cpp,
+	  modules/grid/grid_filter/Filter_Majority.h,
+	  modules/grid/grid_filter/MLB_Interface.cpp,
+	  modules/grid/grid_filter/grid_filter.dsp,
+	  modules/grid/grid_filter/grid_filter.vcproj,
+	  modules/grid/grid_filter/makefile.mingw,
+	  modules/pointcloud/pointcloud_tools/pc_cut.cpp,
+	  modules_images/modules_imagery/imagery_segmentation/MLB_Interface.cpp,
+	  modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.dsp,
+	  modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.vcproj,
+	  modules_images/modules_imagery/imagery_segmentation/makefile.mingw,
+	  modules_images/modules_imagery/imagery_segmentation/rga_basic.cpp,
+	  modules_images/modules_imagery/imagery_segmentation/rga_basic.h,
+	  saga_core/saga_api/grid_operation.cpp: grid history, imagery lib
+	  removed from linux am (temporarily), majority filter added
+
+2010-01-18 18:14  oconrad
+
+	* src/saga_core/saga_gui/wksp_data_manager.cpp: grid (sort, no data
+	  values), parameter & gui
+
+2010-01-18 18:11  oconrad
+
+	* src/saga_core/saga_api/: grid.cpp, grid.h, module.cpp, module.h:
+	  grid (sort, no data values), parameter & gui
+
+2010-01-18 09:27  oconrad
+
+	* src/saga_core/saga_api/shapes_io.cpp: 3d shapefile import
+
+2010-01-15 16:08  oconrad
+
+	* src/: saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/grid.h,
+	  saga_core/saga_api/grid_memory.cpp,
+	  saga_core/saga_gui/callback.cpp, saga_core/saga_gui/saga.cpp,
+	  saga_core/saga_gui/saga.h,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.h,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.dsp: no
+	  message
+
+2010-01-15 09:37  reklov_w
+
+	* src/modules/pointcloud/pointcloud_tools/: pc_cut.cpp, pc_cut.h:
+	  interactive version now allows to digitize polygon, both versions
+	  support inverse selection
+
+2010-01-15 09:36  reklov_w
+
+	* src/modules/pointcloud/pointcloud_tools/: MLB_Interface.cpp,
+	  Makefile.am, makefile.linux, makefile.mingw, pc_transform.cpp,
+	  pc_transform.h, pointcloud_tools.vcproj: added transform point
+	  cloud module
+
+2010-01-08 14:46  oconrad
+
+	* src/saga_core/: saga_api/pointcloud.cpp, saga_api/pointcloud.h,
+	  saga_gui/view_scatterplot.cpp: no message
+
+2010-01-07 16:11  reklov_w
+
+	* src/modules/pointcloud/pointcloud_tools/: MLB_Interface.cpp,
+	  Makefile.am, makefile.linux, makefile.mingw,
+	  pc_drop_attribute.cpp, pc_drop_attribute.h,
+	  pc_reclass_extract.cpp, pc_reclass_extract.h,
+	  pointcloud_tools.vcproj: modules 'drop attribute' and
+	  'reclass/extract' added
+
+2010-01-06 09:35  oconrad
+
+	* src/modules_io/grid/io_grid/esri_arcinfo.cpp: linux unicode
+	  problem when saving esri ascii grid
+
+2010-01-06 09:33  oconrad
+
+	* src/saga_core/saga_api/shapes.h: gcc compiler error fixed
+
+2009-12-16 14:07  oconrad
+
+	* src/saga_core/saga_api/mat_formula.cpp: no message
+
+2009-12-16 11:29  oconrad
+
+	* src/modules_geostatistics/geostatistics/geostatistics_grid/:
+	  GSGrid_Regression_Multiple.cpp, GSGrid_Regression_Multiple.h: no
+	  message
+
+2009-12-15 17:52  oconrad
+
+	* src/: saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_file.cpp,
+	  saga_core/saga_api/api_memory.cpp,
+	  saga_core/saga_api/shape_part.cpp,
+	  saga_core/saga_api/shape_point.cpp,
+	  saga_core/saga_api/shape_points.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_io.cpp,
+	  modules/grid/grid_calculus_bsl/MLB_Interface.cpp,
+	  modules/grid/grid_calculus_bsl/auswert_foreach.cpp,
+	  modules/grid/grid_calculus_bsl/bsl_interpreter.cpp,
+	  modules/grid/grid_calculus_bsl/bsl_interpreter.h: no message
+
+2009-12-11 15:52  oconrad
+
+	* src/modules/grid/grid_calculus_bsl/: funktion.cpp,
+	  grid_calculus_bsl.dsp: no message
+
+2009-12-11 15:12  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_universal_global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal_global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal_global.h,
+	  modules_images/modules_imagery/imagery_segmentation/MLB_Interface.cpp,
+	  modules_images/modules_imagery/imagery_segmentation/Makefile.am,
+	  modules_images/modules_imagery/imagery_segmentation/fast_region_growing.h,
+	  modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.dsp,
+	  modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.vcproj,
+	  modules_images/modules_imagery/imagery_segmentation/makefile.linux,
+	  modules_images/modules_imagery/imagery_segmentation/makefile.mingw,
+	  modules/grid/Makefile.am, modules/grid/makefile.linux,
+	  modules/grid/grid_discretisation/Grid_FastSegments.h,
+	  modules/grid/grid_discretisation/Grid_Segmentation.h,
+	  modules/grid/grid_discretisation/MLB_Interface.cpp,
+	  modules/grid/grid_discretisation/Makefile.am,
+	  modules/grid/grid_discretisation/grid_discretisation.dsp,
+	  modules/grid/grid_discretisation/grid_discretisation.vcproj,
+	  modules/grid/grid_discretisation/makefile.linux,
+	  modules/grid/grid_discretisation/makefile.mingw,
+	  modules/shapes/shapes_points/shapes_points.dsp,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp,
+	  modules/shapes/shapes_polygons/shapes_polygons.dsp,
+	  modules_images/Makefile.am, modules_images/makefile.linux,
+	  modules_io/shapes/io_shapes/io_shapes.dsp,
+	  saga_core/saga_gui/parameters_control.cpp, Makefile.am,
+	  makefile.linux, saga.bat, saga.dsw, saga.sln,
+	  modules/grid/grid_discretisation/rga_basic.cpp,
+	  modules/grid/grid_discretisation/rga_basic.h,
+	  modules_images/modules_imagery/imagery_segmentation/fast_representativeness.cpp,
+	  modules_images/modules_imagery/imagery_segmentation/fast_representativeness.h,
+	  modules/grid/grid_calculus_bsl/grid_calculus_bsl.vcproj: no
+	  message
+
+2009-12-11 15:09  oconrad
+
+	* src/: modules/grid/grid_calculus_bsl/MLB_Interface.cpp,
+	  modules/grid/grid_calculus_bsl/MLB_Interface.h,
+	  modules/grid/grid_calculus_bsl/Makefile.am,
+	  modules/grid/grid_calculus_bsl/ausdruck.cpp,
+	  modules/grid/grid_calculus_bsl/ausdruck.h,
+	  modules/grid/grid_calculus_bsl/auswert_anweisung.cpp,
+	  modules/grid/grid_calculus_bsl/auswert_anweisung.h,
+	  modules/grid/grid_calculus_bsl/auswert_foreach.cpp,
+	  modules/grid/grid_calculus_bsl/auswert_foreach.h,
+	  modules/grid/grid_calculus_bsl/auswert_if.cpp,
+	  modules/grid/grid_calculus_bsl/auswert_if.h,
+	  modules/grid/grid_calculus_bsl/auswert_zuweisung.cpp,
+	  modules/grid/grid_calculus_bsl/auswert_zuweisung.h,
+	  modules/grid/grid_calculus_bsl/basistypen.cpp,
+	  modules/grid/grid_calculus_bsl/basistypen.h,
+	  modules/grid/grid_calculus_bsl/bedingung.cpp,
+	  modules/grid/grid_calculus_bsl/bedingung.h,
+	  modules/grid/grid_calculus_bsl/bsl_interpreter.cpp,
+	  modules/grid/grid_calculus_bsl/bsl_interpreter.h,
+	  modules/grid/grid_calculus_bsl/diverses.cpp,
+	  modules/grid/grid_calculus_bsl/diverses.h,
+	  modules/grid/grid_calculus_bsl/foreach.cpp,
+	  modules/grid/grid_calculus_bsl/foreach.h,
+	  modules/grid/grid_calculus_bsl/funktion.cpp,
+	  modules/grid/grid_calculus_bsl/funktion.h,
+	  modules/grid/grid_calculus_bsl/funktion_numerisch.h,
+	  modules/grid/grid_calculus_bsl/funktion_statistisch.h,
+	  modules/grid/grid_calculus_bsl/gr_def.h,
+	  modules/grid/grid_calculus_bsl/gr_syst.h,
+	  modules/grid/grid_calculus_bsl/grid_bsl.cpp,
+	  modules/grid/grid_calculus_bsl/grid_bsl.h,
+	  modules/grid/grid_calculus_bsl/grid_calculus_bsl.dsp,
+	  modules/grid/grid_calculus_bsl/grid_calculus_bsl.lng.txt,
+	  modules/grid/grid_calculus_bsl/grid_calculus_bsl.vcproj,
+	  modules/grid/grid_calculus_bsl/interpolation.cpp,
+	  modules/grid/grid_calculus_bsl/interpolation.h,
+	  modules/grid/grid_calculus_bsl/makefile.linux,
+	  modules/grid/grid_calculus_bsl/makefile.mingw,
+	  modules/grid/grid_calculus_bsl/pars_all.cpp,
+	  modules/grid/grid_calculus_bsl/pars_all.h,
+	  modules/grid/grid_calculus_bsl/vector.cpp,
+	  modules/grid/grid_calculus_bsl/vector.h,
+	  modules/grid/grid_calculus_bsl/zuweisung.cpp,
+	  modules/grid/grid_calculus_bsl/zuweisung.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/fast_representativeness.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/fast_representativeness.h,
+	  modules_images/modules_imagery/makefile.linux,
+	  modules_images/modules_imagery/imagery_segmentation/rga_basic.cpp,
+	  modules_images/modules_imagery/imagery_segmentation/rga_basic.h:
+	  no message
+
+2009-12-11 14:54  oconrad
+
+	* configure.in: no message
+
+2009-12-09 10:31  reklov_w
+
+	* src/modules_images/modules_imagery/Makefile.am: added
+
+2009-12-04 16:55  oconrad
+
+	* configure.in,
+	  src/modules/shapes/shapes_tools/GraticuleBuilder.cpp,
+	  src/modules_images/modules_imagery/imagery_segmentation/MLB_Interface.cpp,
+	  src/modules_images/modules_imagery/imagery_segmentation/MLB_Interface.h,
+	  src/modules_images/modules_imagery/imagery_segmentation/Makefile.am,
+	  src/modules_images/modules_imagery/imagery_segmentation/fast_region_growing.cpp,
+	  src/modules_images/modules_imagery/imagery_segmentation/fast_region_growing.h,
+	  src/modules_images/modules_imagery/imagery_segmentation/fast_representativeness.cpp,
+	  src/modules_images/modules_imagery/imagery_segmentation/fast_representativeness.h,
+	  src/modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.dsp,
+	  src/modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.lng.txt,
+	  src/modules_images/modules_imagery/imagery_segmentation/imagery_segmentation.vcproj,
+	  src/modules_images/modules_imagery/imagery_segmentation/makefile.linux,
+	  src/modules_images/modules_imagery/imagery_segmentation/makefile.mingw,
+	  src/modules_io/grid/io_grid/usgs_srtm.cpp, src/saga.dsw,
+	  src/saga.sln: no message
+
+2009-11-30 11:13  reklov_w
+
+	* src/modules/shapes/shapes_points/AddCoordinates.cpp: fix wrong
+	  parameter identifier (and thus access violation)
+
+2009-11-27 16:26  oconrad
+
+	* src/: saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_file.cpp,
+	  modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  modules_io/grid/io_grid/esri_arcinfo.h,
+	  saga_core/saga_gui/view_histogram.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.h,
+	  modules_io/grid/io_grid/io_grid.vcproj: no message
+
+2009-11-27 09:06  reklov_w
+
+	* src/modules_io/grid/io_grid/esri_arcinfo.cpp: fix for linux
+	  unicode support
+
+2009-11-26 16:42  oconrad
+
+	* src/saga_core/saga_gdi/Makefile.am: no message
+
+2009-11-26 09:29  reklov_w
+
+	* src/modules_io/grid/io_grid/esri_arcinfo.cpp: finish support of
+	  comma as decimal separator in esri ascii import
+
+2009-11-25 09:53  oconrad
+
+	* src/modules/shapes/shapes_points/: add_polygon_attributes.cpp,
+	  add_polygon_attributes.h: no message
+
+2009-11-24 15:04  oconrad
+
+	* src/: modules/shapes/shapes_points/MLB_Interface.cpp,
+	  modules/shapes/shapes_points/Makefile.am,
+	  modules/shapes/shapes_points/makefile.linux,
+	  modules/shapes/shapes_points/makefile.mingw,
+	  modules/shapes/shapes_points/shapes_points.vcproj,
+	  modules/pointcloud/pointcloud_tools/MLB_Interface.cpp,
+	  modules/pointcloud/pointcloud_viewer/MLB_Interface.cpp,
+	  modules_contrib/contrib_s_liersch/ihacres/MLB_Interface.cpp,
+	  modules_images/modules_opencv/opencv/Makefile.am,
+	  modules_images/modules_opencv/opencv/makefile.linux,
+	  modules_images/modules_opencv/opencv/makefile.mingw,
+	  modules_images/modules_opencv/opencv/opencv.dsp,
+	  modules_io/shapes/io_shapes/pointcloud_from_file.cpp,
+	  modules_io/shapes/io_shapes/pointcloud_from_text_file.cpp: no
+	  message
+
+2009-11-24 11:27  oconrad
+
+	* src/saga_core/saga_gui/view_map_3d.cpp: no message
+
+2009-11-24 10:53  reklov_w
+
+	* src/saga_core/saga_gui/view_map_3d.cpp: fix naming when saving
+	  sequence
+
+2009-11-23 17:55  oconrad
+
+	* src/: modules/grid/grid_spline/Gridding_Spline_BA.h,
+	  modules/grid/grid_spline/Gridding_Spline_Base.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.h,
+	  modules/grid/grid_spline/Gridding_Spline_CSA.h,
+	  modules/grid/grid_spline/Gridding_Spline_MBA.h,
+	  modules/grid/grid_spline/Gridding_Spline_MBA_Grid.cpp,
+	  modules/grid/grid_spline/Thin_Plate_Spline.cpp,
+	  modules/grid/grid_spline/Thin_Plate_Spline.h,
+	  modules/grid/grid_tools/Grid_Value_Request.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.h,
+	  modules_io/shapes/io_shapes_dxf/dxf_import.h,
+	  modules/pointcloud/pointcloud_viewer/points_view_control.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_control.h,
+	  modules/pointcloud/pointcloud_viewer/points_view_extent.cpp,
+	  modules_images/modules_opencv/opencv/opencv_morphology.cpp,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/view_shed.h:
+	  no message
+
+2009-11-23 17:36  oconrad
+
+	* src/saga_core/: saga_api/geo_classes.cpp, saga_api/geo_tools.h,
+	  saga_api/mat_spline.cpp, saga_api/mat_tools.h, saga_api/module.h,
+	  saga_api/module_interactive_base.cpp, saga_api/pointcloud.cpp,
+	  saga_api/pointcloud.h, saga_api/tin_elements.cpp,
+	  saga_gui/wksp_data_manager.cpp, saga_gui/wksp_pointcloud.cpp: no
+	  message
+
+2009-11-21 15:49  reklov_w
+
+	* src/saga_core/saga_api/: pointcloud.cpp, pointcloud.h: updated
+	  Get_Shape() to return point
+
+2009-11-21 15:48  reklov_w
+
+	* src/saga_core/saga_gui/wksp_pointcloud.cpp: updated Get_Value()
+	  to report z-values
+
+2009-11-20 08:23  reklov_w
+
+	* src/saga_core/saga_gui/wksp_module_manager.cpp: fix to compile
+	  with gcc (typecast added)
+
+2009-11-18 19:13  oconrad
+
+	* src/: modules_io/gdal/io_gdal/gdal_import.cpp,
+	  modules_io/gdal/io_gdal/io_gdal.vcproj,
+	  modules_io/gdal/io_gdal/ogr_import.cpp,
+	  saga_core/saga_gui/saga.cpp, saga_core/saga_gui/saga.h,
+	  saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  saga_core/saga_gui/wksp_module_manager.h: no message
+
+2009-11-18 17:31  reklov_w
+
+	* src/saga_core/saga_gui/parameters_properties.cpp: updated
+	  _Set_Table_Field() for point cloud support
+
+2009-11-18 17:30  reklov_w
+
+	* src/saga_core/saga_api/parameters.cpp: updated Add_Table_Field()
+	  for point cloud support
+
+2009-11-18 16:27  reklov_w
+
+	* src/modules_geostatistics/geostatistics/geostatistics_grid/:
+	  GSGrid_Zonal_Statistics.cpp, GSGrid_Zonal_Statistics.h: option to
+	  calculate statistics on aspect grid added
+
+2009-11-17 11:24  oconrad
+
+	* src/: modules/grid/grid_tools/Grid_Value_Type.cpp,
+	  modules/grid/grid_tools/Grid_Value_Type.h,
+	  saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid_operation.cpp: no message
+
+2009-11-17 10:23  reklov_w
+
+	* src/modules_io/grid/io_grid/esri_arcinfo.cpp: fix esri ascci
+	  export "zero precision" problem with negative numbers and
+	  xmin/ymin precision in header
+
+2009-11-17 09:45  reklov_w
+
+	* src/modules/grid/grid_tools/Grid_SortRaster.cpp: remove
+	  unneccessary line
+
+2009-11-17 09:27  oconrad
+
+	* src/: modules/grid/grid_calculus/Grid_Calculator.cpp,
+	  modules/grid/grid_calculus/Grid_Calculator.h,
+	  modules_images/modules_opencv/opencv/opencv_morphology.cpp,
+	  saga_core/saga_api/mat_formula.cpp: no message
+
+2009-11-17 09:03  reklov_w
+
+	* src/modules/grid/grid_tools/Grid_SortRaster.cpp: bug fix (nodata)
+
+2009-11-16 16:24  reklov_w
+
+	*
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp:
+	  limit output table field names to 10 characters to match dxf
+
+2009-11-16 15:31  reklov_w
+
+	* src/modules_io/shapes/io_shapes/pointcloud_from_text_file.cpp:
+	  fix for file selection parameter
+
+2009-11-16 12:22  reklov_w
+
+	* src/modules_io/shapes/io_shapes/: MLB_Interface.cpp, Makefile.am,
+	  io_shapes.vcproj, makefile.linux, makefile.mingw,
+	  pointcloud_from_text_file.cpp, pointcloud_from_text_file.h:
+	  pointcloud from text file module added
+
+2009-11-13 16:35  oconrad
+
+	* src/: modules/shapes/shapes_points/AddCoordinates.cpp,
+	  modules/shapes/shapes_points/AddCoordinates.h,
+	  modules_images/modules_opencv/opencv/MLB_Interface.cpp,
+	  modules_images/modules_vigra/vigra/MLB_Interface.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp: no message
+
+2009-11-06 14:35  oconrad
+
+	* src/modules_geostatistics/geostatistics/geostatistics_grid/:
+	  GSGrid_Residuals.cpp, GSGrid_Residuals.h: no message
+
+2009-11-06 13:24  oconrad
+
+	* src/saga_core/: saga_api/pointcloud.h, saga_api/dataobject.cpp,
+	  saga_api/parameter_data.cpp, saga_api/parameters.cpp,
+	  saga_api/pointcloud.cpp, saga_api/shapes.h, saga_api/table.h,
+	  saga_api/table_io.cpp, saga_gui/parameters_properties.cpp,
+	  saga_gui/wksp_data_manager.cpp, saga_gui/wksp_grid.cpp,
+	  saga_gui/wksp_pointcloud.cpp, saga_gui/wksp_shapes.cpp,
+	  saga_gui/wksp_tin.cpp: no message
+
+2009-11-05 17:40  reklov_w
+
+	* src/saga_core/saga_api/pointcloud.h: fixed get_attribute_count
+	  and others to omit x,y,z fields
+
+2009-11-01 12:37  reklov_w
+
+	*
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp:
+	  bug fix: variance was calculated instead of devdev and percentile
+	  was calculated with n-1 instead of n
+
+2009-10-29 21:22  reklov_w
+
+	* src/modules_io/shapes/io_shapes_las/Makefile.am: fixed missing
+	  link to liblas
+
+2009-10-29 20:45  reklov_w
+
+	* src/modules_contrib/contrib_s_liersch/ihacres/: MLB_Interface.h,
+	  convert_sl.h, ihacres_eq.h: fixed to compile on linux
+
+2009-10-27 13:42  reklov_w
+
+	* src/saga_core/saga_gui/: saga.cpp, wksp_data_manager.cpp: if
+	  saga_gui.ini and .cfg can't be written to startup dir, they're
+	  now placed into the user directory
+
+2009-10-20 09:40  oconrad
+
+	* src/modules/grid/grid_tools/Grid_Value_Replace_Interactive.cpp,
+	  src/modules_contrib/Makefile.am,
+	  src/modules_contrib/makefile.linux,
+	  src/modules_contrib/contrib_s_liersch/Makefile.am,
+	  src/modules_contrib/contrib_s_liersch/makefile.linux,
+	  src/modules_contrib/contrib_s_liersch/ihacres/MLB_Interface.cpp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/MLB_Interface.h,
+	  src/modules_contrib/contrib_s_liersch/ihacres/Makefile.am,
+	  src/modules_contrib/contrib_s_liersch/ihacres/convert_sl.cpp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/convert_sl.h,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres.dsp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres.lng.txt,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres.vcproj,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_basin.cpp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_basin.h,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_cal2.cpp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_cal2.h,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_elev.cpp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_elev.h,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_elev_bands.cpp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_elev_bands.h,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_elev_cal.cpp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_elev_cal.h,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_eq.cpp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_eq.h,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_v1.cpp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/ihacres_v1.h,
+	  src/modules_contrib/contrib_s_liersch/ihacres/makefile.linux,
+	  src/modules_contrib/contrib_s_liersch/ihacres/makefile.mingw,
+	  src/modules_contrib/contrib_s_liersch/ihacres/model_tools.cpp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/model_tools.h,
+	  src/modules_contrib/contrib_s_liersch/ihacres/snow_module.cpp,
+	  src/modules_contrib/contrib_s_liersch/ihacres/snow_module.h,
+	  src/modules_images/Makefile.am,
+	  src/modules_images/makefile.linux,
+	  src/modules_images/modules_opencv/Makefile.am,
+	  src/modules_images/modules_opencv/makefile.linux,
+	  src/modules_images/modules_opencv/opencv/MLB_Interface.cpp,
+	  src/modules_images/modules_opencv/opencv/MLB_Interface.h,
+	  src/modules_images/modules_opencv/opencv/Makefile.am,
+	  src/modules_images/modules_opencv/opencv/makefile.linux,
+	  src/modules_images/modules_opencv/opencv/makefile.mingw,
+	  src/modules_images/modules_opencv/opencv/opencv.cpp,
+	  src/modules_images/modules_opencv/opencv/opencv.dsp,
+	  src/modules_images/modules_opencv/opencv/opencv.h,
+	  src/modules_images/modules_opencv/opencv/opencv.lng.txt,
+	  src/modules_images/modules_opencv/opencv/opencv.vcproj,
+	  src/modules_images/modules_opencv/opencv/opencv_fourier.cpp,
+	  src/modules_images/modules_opencv/opencv/opencv_fourier.h,
+	  src/modules_images/modules_opencv/opencv/opencv_morphology.cpp,
+	  src/modules_images/modules_opencv/opencv/opencv_morphology.h,
+	  src/modules_images/modules_opencv/opencv/opencv_svd.cpp,
+	  src/modules_images/modules_opencv/opencv/opencv_svd.h,
+	  src/modules_images/modules_vigra/Makefile.am,
+	  src/modules_images/modules_vigra/makefile.linux,
+	  src/modules_images/modules_vigra/vigra/MLB_Interface.cpp,
+	  src/modules_images/modules_vigra/vigra/MLB_Interface.h,
+	  src/modules_images/modules_vigra/vigra/Makefile.am,
+	  src/modules_images/modules_vigra/vigra/makefile.linux,
+	  src/modules_images/modules_vigra/vigra/makefile.mingw,
+	  src/modules_images/modules_vigra/vigra/vigra.cpp,
+	  src/modules_images/modules_vigra/vigra/vigra.dsp,
+	  src/modules_images/modules_vigra/vigra/vigra.h,
+	  src/modules_images/modules_vigra/vigra/vigra.lng.txt,
+	  src/modules_images/modules_vigra/vigra/vigra.sln,
+	  src/modules_images/modules_vigra/vigra/vigra.vcproj,
+	  src/modules_images/modules_vigra/vigra/vigra_distance.cpp,
+	  src/modules_images/modules_vigra/vigra/vigra_distance.h,
+	  src/modules_images/modules_vigra/vigra/vigra_edges.cpp,
+	  src/modules_images/modules_vigra/vigra/vigra_edges.h,
+	  src/modules_images/modules_vigra/vigra/vigra_fft.cpp,
+	  src/modules_images/modules_vigra/vigra/vigra_fft.h,
+	  src/modules_images/modules_vigra/vigra/vigra_morphology.cpp,
+	  src/modules_images/modules_vigra/vigra/vigra_morphology.h,
+	  src/modules_images/modules_vigra/vigra/vigra_smoothing.cpp,
+	  src/modules_images/modules_vigra/vigra/vigra_smoothing.h,
+	  src/modules_images/modules_vigra/vigra/vigra_watershed.cpp,
+	  src/modules_images/modules_vigra/vigra/vigra_watershed.h,
+	  src/saga_core/saga_api/parameter_data.cpp,
+	  src/saga_core/saga_gui/parameters_properties.cpp, src/saga.dsw,
+	  src/saga.sln, configure.in: no message
+
+2009-10-08 18:37  oconrad
+
+	* src/saga_core/saga_gui/wksp_shapes.cpp: no message
+
+2009-10-06 17:33  oconrad
+
+	* src/: modules_io/shapes/io_shapes_las/las_import.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/table_dbase.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp: no message
+
+2009-10-02 17:21  oconrad
+
+	* src/saga.sln: no message
+
+2009-10-02 17:07  oconrad
+
+	* src/modules/pointcloud/pointcloud_viewer/:
+	  points_view_control.cpp, points_view_control.h,
+	  points_view_dialog.cpp, points_view_dialog.h,
+	  points_view_extent.cpp: no message
+
+2009-10-02 13:48  oconrad
+
+	* src/saga_core/: saga_api/makefile.linux, saga_gdi/makefile.linux:
+	  no message
+
+2009-10-02 11:48  oconrad
+
+	* src/saga_core/saga_gui/: wksp_data_layers.cpp,
+	  wksp_map_buttons.cpp: no message
+
+2009-10-02 09:58  oconrad
+
+	* src/saga_core/saga_api/metadata.cpp: no message
+
+2009-10-01 18:18  oconrad
+
+	* src/saga_core/saga_gui/dlg_about.cpp: no message
+
+2009-10-01 17:50  oconrad
+
+	* src/saga_core/saga_gui/dlg_about.cpp: no message
+
+2009-10-01 16:01  oconrad
+
+	* src/: saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/Makefile.am, saga_core/saga_api/dataobject.h,
+	  saga_core/saga_api/geo_tools.h,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/projections.cpp,
+	  saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_api/table_value.h,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.vcproj,
+	  modules/pointcloud/pointcloud_viewer/points_view_control.cpp,
+	  modules_io/table/io_table_odbc/PGIS_Shapes.cpp,
+	  saga_core/saga_gui/dlg_about.cpp,
+	  saga_core/saga_gui/saga_gui.dsp,
+	  saga_core/saga_gui/saga_gui.vcproj,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  saga_core/saga_gui/res/saga_srs.txt: no message
+
+2009-09-30 20:00  oconrad
+
+	* src/: modules_io/shapes/io_shapes/MLB_Interface.cpp,
+	  modules_io/shapes/io_shapes/stl.cpp,
+	  modules_io/shapes/io_shapes/stl.h,
+	  modules_io/shapes/io_shapes_las/io_shapes_las.vcproj,
+	  modules_io/shapes/io_shapes_las/las_import.cpp,
+	  modules_io/table/io_table_odbc/MLB_Interface.cpp,
+	  modules_io/table/io_table_odbc/MLB_Interface.h,
+	  modules_io/table/io_table_odbc/PGIS_Shapes.cpp,
+	  modules_io/table/io_table_odbc/PGIS_Shapes.h,
+	  modules_io/table/io_table_odbc/io_table_odbc.dsp,
+	  modules_io/table/io_table_odbc/io_table_odbc.vcproj,
+	  modules_io/table/io_table_odbc/odbc.cpp,
+	  modules_io/table/io_table_odbc/shapes_ogis.cpp,
+	  modules_io/table/io_table_odbc/shapes_ogis.h,
+	  saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_translator.cpp,
+	  saga_core/saga_api/geo_tools.h,
+	  saga_core/saga_api/projections.cpp,
+	  saga_core/saga_api/saga_api.h,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_api/table_io.cpp, saga_core/saga_cmd/saga_cmd.cpp,
+	  saga_core/saga_gui/saga.cpp: no message
+
+2009-09-25 17:47  oconrad
+
+	* src/modules_io/table/io_table_odbc/: Get_Connection.cpp,
+	  Get_Connection.h, MLB_Interface.cpp, PGIS_Shapes.cpp,
+	  PGIS_Shapes.h, Shapes.cpp, Shapes.h, Table.cpp, Table.h,
+	  odbc.cpp, odbc.h: no message
+
+2009-09-25 14:02  oconrad
+
+	* src/: modules/table/table_calculus/table_running_average.cpp,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_cmd/saga_cmd.vcproj,
+	  saga_core/saga_gui/project.cpp, saga_core/saga_gui/project.h,
+	  saga_core/saga_gui/saga_gui.vcproj: no message
+
+2009-09-24 18:23  oconrad
+
+	* src/: saga_core/saga_api/api_core.cpp,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/api_string.cpp,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/dataobject.h, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/metadata.cpp, saga_core/saga_api/metadata.h,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h,
+	  modules_io/shapes/io_shapes/gpx.cpp,
+	  modules_io/shapes/io_shapes/gpx.h, saga_core/saga_gui/helper.cpp,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/project.cpp, saga_core/saga_gui/project.h,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_base_control.h,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  saga_core/saga_gui/wksp_pointcloud.cpp: no message
+
+2009-09-23 11:10  reklov_w
+
+	* src/modules_io/shapes/io_shapes_las/las_import.cpp: datatype
+	  definition updates
+
+2009-09-23 11:10  reklov_w
+
+	* src/saga_core/saga_api/saga_api.vcproj: removed obsolete file
+
+2009-09-22 18:19  oconrad
+
+	* src/: saga_core/saga_api/Makefile.am,
+	  saga_core/saga_api/api_history.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  modules/pointcloud/pointcloud_tools/pc_from_shapes.cpp,
+	  modules/pointcloud/pointcloud_tools/pc_to_shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.cpp,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.h,
+	  modules_io/table/io_table_odbc/odbc.cpp,
+	  modules_io/table/io_table_odbc/odbc.h: no message
+
+2009-09-21 17:42  reklov_w
+
+	* src/modules/pointcloud/pointcloud_viewer/points_view_module.cpp:
+	  module description updated
+
+2009-09-21 17:40  reklov_w
+
+	* src/modules_io/shapes/io_shapes_las/las_import.cpp: changes to
+	  use liblas c++ api and other stuff
+
+2009-09-21 17:40  reklov_w
+
+	* src/modules_io/shapes/io_shapes_las/io_shapes_las.vcproj: changes
+	  to reflect liblas build from mercurial/trunk
+
+2009-09-18 16:13  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_base.cpp,
+	  modules/shapes/shapes_points/AddCoordinates.cpp,
+	  modules/shapes/shapes_points/CountPoints.cpp,
+	  modules/shapes/shapes_points/CreatePointGrid.cpp,
+	  modules/shapes/shapes_points/DistanceMatrix.cpp,
+	  modules/shapes/shapes_points/FitNPointsToShape.cpp,
+	  modules/shapes/shapes_points/remove_duplicates.cpp,
+	  modules/shapes/shapes_points/separate_by_direction.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/semivariogram.cpp,
+	  modules_io/shapes/io_shapes/atlas_bna.cpp,
+	  modules_io/shapes/io_shapes/generate.cpp,
+	  modules_io/shapes/io_shapes/gpx.cpp,
+	  modules_io/shapes/io_shapes/gpx.h,
+	  modules_io/shapes/io_shapes/gstat.cpp,
+	  modules_io/shapes/io_shapes/pointcloud_from_file.cpp,
+	  modules_io/shapes/io_shapes/stl.cpp,
+	  modules_io/shapes/io_shapes/surfer_bln.cpp,
+	  modules_io/shapes/io_shapes/wasp_map.cpp,
+	  modules_io/shapes/io_shapes/xyz.cpp,
+	  modules_recreations/recreations/recreations_fractals/Bifurcation.cpp,
+	  modules_recreations/recreations/recreations_fractals/Gaussian_Landscapes.cpp,
+	  modules_recreations/recreations/recreations_fractals/Grid_FractalDimension.cpp,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.cpp,
+	  modules_recreations/recreations/recreations_fractals/Newton.cpp,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/D8_Flow_Analysis.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Strahler.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.cpp,
+	  saga_core/saga_gui/active_history.cpp,
+	  saga_core/saga_gui/active_history.h,
+	  saga_core/saga_gui/helper.cpp,
+	  saga_core/saga_gui/view_histogram.cpp,
+	  saga_core/saga_gui/view_map_3d.cpp,
+	  saga_core/saga_gui/view_scatterplot.cpp,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/view_table_diagram.cpp,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_module.cpp,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  saga_core/saga_gui/wksp_module_manager.h,
+	  saga_core/saga_gui/wksp_pointcloud.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_tin.cpp,
+	  modules/grid/grid_analysis/Cost_Anisotropic.cpp,
+	  modules/grid/grid_analysis/Cost_Isotropic.cpp,
+	  modules/grid/grid_analysis/Cost_PolarToRect.cpp,
+	  modules/grid/grid_analysis/Cost_RectToPolar.cpp,
+	  modules/grid/grid_analysis/CrossClassification.cpp,
+	  modules/grid/grid_analysis/Grid_AggregationIndex.cpp,
+	  modules/grid/grid_analysis/Grid_CVA.cpp,
+	  modules/grid/grid_analysis/Grid_Pattern.cpp,
+	  modules/grid/grid_analysis/Image_VI_Distance.cpp,
+	  modules/grid/grid_analysis/Image_VI_Slope.cpp,
+	  modules/grid/grid_analysis/LeastCostPathProfile.cpp,
+	  modules/grid/grid_analysis/Soil_Texture.cpp,
+	  modules/grid/grid_analysis/fragmentation_base.cpp,
+	  modules/grid/grid_analysis/fragmentation_classify.cpp,
+	  modules/grid/grid_analysis/fragmentation_standard.cpp,
+	  modules/grid/grid_analysis/owa.cpp,
+	  modules/grid/grid_tools/CreateGridSystem.cpp,
+	  modules/grid/grid_tools/Grid_Buffer.cpp,
+	  modules/grid/grid_tools/Grid_Buffer_Proximity.cpp,
+	  modules/grid/grid_tools/Grid_CombineGrids.cpp,
+	  modules/grid/grid_tools/Grid_Gaps.cpp,
+	  modules/grid/grid_tools/Grid_Merge.cpp,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/grid/grid_tools/Grid_ThresholdBuffer.cpp,
+	  modules/grid/grid_tools/Grid_Value_Reclassify.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace.cpp,
+	  modules/grid/grid_tools/Grid_Value_Request.cpp,
+	  modules/grid/grid_tools/Grid_Value_Type.cpp,
+	  modules/grid/grid_tools/GridsFromTableAndGrid.cpp,
+	  modules/shapes/shapes_tools/CreateChartLayer.cpp,
+	  modules/shapes/shapes_tools/CreateWebContent.cpp,
+	  modules/shapes/shapes_tools/GraticuleBuilder.cpp,
+	  modules/shapes/shapes_tools/JoinTables.cpp,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.cpp,
+	  modules/shapes/shapes_tools/Shapes_Merge.cpp,
+	  modules/shapes/shapes_tools/Shapes_Report.cpp,
+	  modules/shapes/shapes_tools/Summarize.cpp,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.cpp,
+	  modules/shapes/shapes_tools/quadtree_structure.cpp,
+	  modules/shapes/shapes_tools/shapes_buffer.cpp,
+	  modules/shapes/shapes_tools/shapes_cut.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.h,
+	  modules_io/grid/io_grid/erdas_lan.cpp,
+	  modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  modules_io/grid/io_grid/grid_table.cpp,
+	  modules_io/grid/io_grid/mola.cpp,
+	  modules_io/grid/io_grid/raw.cpp,
+	  modules_io/shapes/io_shapes_dxf/dxf_import.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.h,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp,
+	  modules_simulation/hydrology/sim_hydrology/WaterRetentionCapacity.cpp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.cpp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel_values.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Curvature_Classification.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Hypsometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/SurfaceSpecificPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/distance_gradient.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/mrvbf.cpp,
+	  saga_core/saga_api/compatibility.h,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/dataobject.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/grid_memory.cpp,
+	  saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/grid_pyramid.cpp,
+	  saga_core/saga_api/mat_regression_multiple.cpp,
+	  saga_core/saga_api/metadata.cpp, saga_core/saga_api/metadata.h,
+	  saga_core/saga_api/module.cpp, saga_core/saga_api/module.h,
+	  saga_core/saga_api/module_grid.cpp,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/pointcloud.h, saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/table.cpp,
+	  saga_core/saga_api/table.h, saga_core/saga_api/table_io.cpp,
+	  saga_core/saga_api/table_record.cpp, saga_core/saga_api/tin.cpp,
+	  modules/grid/grid_filter/Filter_3x3.cpp,
+	  modules/grid/grid_filter/Filter_Gauss.cpp,
+	  modules/grid/grid_filter/Filter_LoG.cpp,
+	  modules/grid/grid_filter/Filter_Multi_Dir_Lee.cpp,
+	  modules/table/table_calculus/Fit.cpp,
+	  modules/table/table_calculus/Table_Calculator.cpp,
+	  modules/table/table_calculus/Table_CalculatorShapes.cpp,
+	  modules/table/table_calculus/Table_Trend.cpp,
+	  modules/table/table_calculus/table_running_average.cpp,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.cpp,
+	  modules_io/grid/io_grid/raw.h,
+	  modules_io/grid/io_grid/srtm30.cpp,
+	  modules_io/grid/io_grid/surfer.cpp,
+	  modules_io/grid/io_grid/usgs_srtm.cpp,
+	  modules_io/grid/io_grid/xyz.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_06.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_10.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_11.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_14.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/FlowDepth.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesConst.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesVar.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Sinuosity.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SlopeLength.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/flow_massflux.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/flow_width.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks_WL.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.cpp,
+	  modules_io/gdal/io_gdal/gdal_driver.cpp,
+	  modules_io/gdal/io_gdal/gdal_driver.h,
+	  modules_io/gdal/io_gdal/ogr_driver.cpp,
+	  modules_io/gdal/io_gdal/ogr_driver.h,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_simulation/fire/sim_fire_spreading/Forecasting.cpp,
+	  modules_simulation/fire/sim_fire_spreading/Simulate.cpp,
+	  modules_simulation/fire/sim_fire_spreading/SimulateVariableWind.cpp,
+	  modules/grid/grid_calculus/Grid_Calculator.cpp,
+	  modules/grid/grid_calculus/Grid_Geometric_Figures.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Field.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.cpp,
+	  modules/grid/grid_discretisation/rga_basic.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_BA.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_MBA.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_MBA_Grid.cpp,
+	  modules/grid/grid_visualisation/Grid_3D_Image.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Triangle.cpp,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.cpp,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.cpp,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Contour.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Gradient.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points_Random.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp,
+	  modules/shapes/shapes_grid/grid_local_extremes_to_points.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp,
+	  modules_io/grid/io_grid_grib2/grib2_import.cpp,
+	  modules_io/grid/io_grid_image/grid_export.cpp,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_ProfileFromPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile_From_Lines.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.cpp,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.h,
+	  modules/pointcloud/pointcloud_tools/pc_from_grid.cpp,
+	  modules/pointcloud/pointcloud_tools/pc_from_shapes.cpp,
+	  modules/pointcloud/pointcloud_tools/pc_to_grid.cpp,
+	  modules/pointcloud/pointcloud_tools/pc_to_shapes.cpp,
+	  modules/shapes/shapes_lines/Lines_From_Points.cpp,
+	  modules/shapes/shapes_lines/line_properties.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Geometrics.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp,
+	  modules/shapes/shapes_polygons/polygon_to_points.cpp,
+	  modules/shapes/shapes_polygons/shape_index.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  modules_io/table/io_table/io_table_txt.cpp,
+	  modules_io/table/io_table_odbc/PGIS_Shapes.cpp,
+	  modules_io/table/io_table_odbc/odbc.cpp,
+	  modules_io/table/io_table_odbc/odbc.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper.cpp,
+	  modules_recreations/recreations/recreations_games/Sudoku.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Life.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_01.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_02.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.cpp,
+	  modules/table/table_tools/Table_Create_Empty.cpp,
+	  modules/table/table_tools/Table_Enumerate.cpp,
+	  modules/table/table_tools/Table_Rotate.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Trace.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.cpp,
+	  modules/tin/tin_tools/TIN_Gradient.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp: no message
+
+2009-09-16 14:11  oconrad
+
+	* src/modules_io/: table/io_table_odbc/Makefile.am,
+	  table/io_table_odbc/makefile.linux,
+	  table/io_table_odbc/makefile.mingw,
+	  shapes/io_shapes/makefile.linux, shapes/io_shapes/makefile.mingw:
+	  no message
+
+2009-09-15 18:51  oconrad
+
+	* src/saga_core/: saga_gui/makefile.mingw, saga_api/saga_api.h: no
+	  message
+
+2009-09-15 18:48  oconrad
+
+	* src/: modules_io/shapes/io_shapes/MLB_Interface.cpp,
+	  modules_io/shapes/io_shapes/Makefile.am,
+	  modules_io/shapes/io_shapes/gpx.cpp,
+	  modules_io/shapes/io_shapes/gpx.h,
+	  modules_io/shapes/io_shapes/io_shapes.dsp,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes/makefile.linux,
+	  modules_io/shapes/io_shapes/makefile.mingw,
+	  modules_io/table/io_table_odbc/PGIS_Shapes.cpp,
+	  modules_io/table/io_table_odbc/PGIS_Shapes.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/relative_heights.cpp,
+	  saga_core/saga_api/Makefile.am, saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_file.cpp, saga_core/saga_api/dataobject.h,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/metadata.cpp, saga_core/saga_api/metadata.h,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_cmd/saga_cmd.dsp: no message
+
+2009-09-15 16:50  reklov_w
+
+	* src/saga_core/saga_api/saga_api.h: fix typo in SWIG #def
+
+2009-09-14 13:15  reklov_w
+
+	* src/modules_io/table/io_table_odbc/io_table_odbc.vcproj: remove
+	  old/add new files to reflect module updates
+
+2009-09-11 17:22  oconrad
+
+	* src/modules_io/table/io_table_odbc/: Get_Connection.cpp,
+	  Get_Connection.h, Get_SQLTable.cpp, Get_SQLTable.h,
+	  Get_Table.cpp, Get_Table.h, MLB_Interface.cpp, MLB_Interface.h,
+	  PGIS_Shapes.cpp, PGIS_Shapes.h, Shapes.cpp, Shapes.h, Table.cpp,
+	  Table.h, io_table_odbc.dsp, odbc.cpp, odbc.h: no message
+
+2009-09-10 18:17  oconrad
+
+	* src/: saga_core/saga_gui/helper.cpp,
+	  saga_core/saga_gui/parameters_properties.cpp,
+	  saga_core/saga_gui/view_map_3d.cpp,
+	  saga_core/saga_gui/view_map_3d.h,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_control.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_control.h,
+	  modules/pointcloud/pointcloud_viewer/points_view_dialog.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_dialog.h,
+	  saga_core/saga_api/pointcloud.cpp: no message
+
+2009-09-09 19:13  oconrad
+
+	* src/: saga_core/saga_gui/helper.cpp, saga_core/saga_gui/helper.h,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/view_table_diagram.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_control.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_control.h,
+	  modules_io/shapes/io_shapes_las/las_import.cpp: no message
+
+2009-09-08 17:45  oconrad
+
+	* src/: modules_io/shapes/io_shapes_las/las_import.cpp,
+	  saga_core/saga_gui/view_table_diagram.cpp: no message
+
+2009-09-08 16:32  oconrad
+
+	* src/saga_core/: saga_gui/helper.cpp,
+	  saga_gui/wksp_pointcloud.cpp, saga_api/parameters.cpp,
+	  saga_api/parameters.h, saga_api/pointcloud.cpp,
+	  saga_api/pointcloud.h, saga_api/table.h: no message
+
+2009-09-07 15:55  oconrad
+
+	* src/saga_core/saga_gui/: parameters_control.cpp, wksp_grid.cpp,
+	  wksp_pointcloud.cpp: no message
+
+2009-09-07 11:39  oconrad
+
+	* src/: modules/grid/grid_calculus/Grid_Calculator.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_dialog.cpp,
+	  modules/table/table_calculus/Table_Calculator.cpp,
+	  modules_io/table/io_table/io_table_txt.cpp,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/table_io.cpp,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_pointcloud.cpp,
+	  saga_core/saga_gui/wksp_pointcloud.h: no message
+
+2009-09-02 17:20  oconrad
+
+	* src/: saga_core/saga_gui/parameters_properties.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_control.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_control.h,
+	  modules/pointcloud/pointcloud_viewer/points_view_dialog.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_dialog.h,
+	  modules/pointcloud/pointcloud_viewer/points_view_extent.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_extent.h: no
+	  message
+
+2009-09-01 16:47  oconrad
+
+	* configure.in: no message
+
+2009-09-01 16:15  oconrad
+
+	* src/: saga.bat, saga.dsw, saga.sln: no message
+
+2009-09-01 16:12  oconrad
+
+	* src/: modules/grid/grid_analysis/Makefile.am,
+	  modules/grid/grid_analysis/fragmentation_resampling.h,
+	  modules/grid/grid_analysis/grid_analysis.dsp,
+	  modules/grid/grid_analysis/grid_analysis.vcproj,
+	  modules/grid/grid_analysis/grid_pyramid.cpp,
+	  modules/grid/grid_analysis/grid_pyramid.h,
+	  modules/grid/grid_analysis/makefile.linux,
+	  modules/grid/grid_analysis/makefile.mingw,
+	  modules/pointcloud/Makefile.am,
+	  modules/pointcloud/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  modules_io/shapes/io_shapes_las/io_shapes_las.lng.txt,
+	  modules_io/shapes/io_shapes_las/las_import.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/grid_pyramid.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/grid_pyramid.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/view_shed.h,
+	  saga_core/saga_api/Makefile.am, saga_core/saga_api/grid.h,
+	  saga_core/saga_api/grid_pyramid.cpp,
+	  saga_core/saga_api/grid_pyramid.h,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/pointcloud.h, saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_api/saga_api.h,
+	  saga_core/saga_api/saga_api.vcproj,
+	  modules/pointcloud/pointcloud_tools/MLB_Interface.cpp,
+	  modules/pointcloud/pointcloud_tools/MLB_Interface.h,
+	  modules/pointcloud/pointcloud_tools/Makefile.am,
+	  modules/pointcloud/pointcloud_tools/makefile.linux,
+	  modules/pointcloud/pointcloud_tools/makefile.mingw,
+	  modules/pointcloud/pointcloud_tools/pc_cut.cpp,
+	  modules/pointcloud/pointcloud_tools/pc_cut.h,
+	  modules/pointcloud/pointcloud_tools/pc_from_grid.cpp,
+	  modules/pointcloud/pointcloud_tools/pc_from_grid.h,
+	  modules/pointcloud/pointcloud_tools/pc_from_shapes.cpp,
+	  modules/pointcloud/pointcloud_tools/pc_from_shapes.h,
+	  modules/pointcloud/pointcloud_tools/pc_to_grid.cpp,
+	  modules/pointcloud/pointcloud_tools/pc_to_grid.h,
+	  modules/pointcloud/pointcloud_tools/pc_to_shapes.cpp,
+	  modules/pointcloud/pointcloud_tools/pc_to_shapes.h,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.dsp,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.lng.txt,
+	  modules/pointcloud/pointcloud_tools/pointcloud_tools.vcproj,
+	  modules/pointcloud/pointcloud_viewer/MLB_Interface.cpp,
+	  modules_io/shapes/Makefile.am,
+	  saga_core/saga_cmd/module_library.cpp,
+	  saga_core/saga_gui/Makefile.am,
+	  saga_core/saga_gui/dlg_list_pointcloud.cpp,
+	  saga_core/saga_gui/dlg_list_pointcloud.h,
+	  saga_core/saga_gui/makefile.linux,
+	  saga_core/saga_gui/makefile.mingw,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/parameters_properties.cpp,
+	  saga_core/saga_gui/res_dialogs.cpp,
+	  saga_core/saga_gui/res_dialogs.h,
+	  saga_core/saga_gui/saga_gui.dsp,
+	  saga_core/saga_gui/saga_gui.vcproj,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_module.cpp,
+	  saga_core/saga_gui/wksp_pointcloud.cpp,
+	  saga_core/saga_gui/wksp_pointcloud.h,
+	  saga_core/saga_gui/wksp_pointcloud_manager.cpp: no message
+
+2009-09-01 16:07  oconrad
+
+	* configure.in: no message
+
+2009-08-28 17:30  oconrad
+
+	* src/saga_core/saga_gdi/Makefile.am: no message
+
+2009-08-28 17:27  oconrad
+
+	* src/saga_core/saga_gdi/saga_gdi.cpp: no message
+
+2009-08-28 17:20  oconrad
+
+	* src/: modules/Makefile.am, modules/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/sgui_diagram.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/sgui_diagram.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/sgui_dialog.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/sgui_dialog.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/sgui_helper.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/sgui_helper.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/variogram_dialog.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/variogram_dialog.h,
+	  modules/pointcloud/Makefile.am,
+	  modules/pointcloud/makefile.linux,
+	  modules/pointcloud/pointcloud_viewer/MLB_Interface.cpp,
+	  modules/pointcloud/pointcloud_viewer/MLB_Interface.h,
+	  modules/pointcloud/pointcloud_viewer/Makefile.am,
+	  modules/pointcloud/pointcloud_viewer/makefile.linux,
+	  modules/pointcloud/pointcloud_viewer/makefile.mingw,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.dsp,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.lng.txt,
+	  modules/pointcloud/pointcloud_viewer/pointcloud_viewer.vcproj,
+	  modules/pointcloud/pointcloud_viewer/points_view_control.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_control.h,
+	  modules/pointcloud/pointcloud_viewer/points_view_dialog.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_dialog.h,
+	  modules/pointcloud/pointcloud_viewer/points_view_extent.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_extent.h,
+	  modules/pointcloud/pointcloud_viewer/points_view_module.cpp,
+	  modules/pointcloud/pointcloud_viewer/points_view_module.h,
+	  saga_core/Makefile.am, saga_core/makefile.linux,
+	  saga_core/saga_gdi/Makefile.am,
+	  saga_core/saga_gdi/makefile.linux,
+	  saga_core/saga_gdi/makefile.mingw,
+	  saga_core/saga_gdi/saga_gdi.dsp, saga_core/saga_gdi/saga_gdi.h,
+	  saga_core/saga_gdi/saga_gdi.vcproj,
+	  saga_core/saga_gdi/sgdi_diagram.cpp,
+	  saga_core/saga_gdi/sgdi_diagram.h,
+	  saga_core/saga_gdi/sgdi_dialog.cpp,
+	  saga_core/saga_gdi/sgdi_dialog.h,
+	  saga_core/saga_gdi/sgdi_helper.cpp,
+	  saga_core/saga_gdi/sgdi_helper.h, saga.bat, saga.dsw, saga.sln:
+	  no message
+
+2009-08-28 17:13  oconrad
+
+	* configure.in: no message
+
+2009-08-27 17:57  oconrad
+
+	* src/saga_core/: saga_gui/active.cpp, saga_api/api_callback.cpp,
+	  saga_api/pointcloud.h, saga_gui/parameters_control.cpp,
+	  saga_gui/parameters_properties.cpp, saga_gui/wksp_grid.cpp,
+	  saga_gui/wksp_layer.cpp, saga_gui/wksp_pointcloud.cpp: no message
+
+2009-08-26 17:14  oconrad
+
+	* src/: modules_io/shapes/io_shapes/Makefile.am,
+	  saga_core/saga_gui/active_parameters.cpp,
+	  saga_core/saga_gui/makefile.linux,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/wx/propgrid/propgrid.cpp,
+	  saga_core/saga_gui/active.cpp: no message
+
+2009-08-25 16:36  oconrad
+
+	* src/: saga_core/saga_gui/active.cpp, saga_core/saga_gui/active.h,
+	  saga_core/saga_gui/active_history.cpp,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/parameters_control.h,
+	  saga_core/saga_gui/wksp_shapes_edit.cpp,
+	  modules_io/table/io_table/io_table.vcproj,
+	  saga_core/saga_cmd/module_library.cpp: no message
+
+2009-08-24 18:28  oconrad
+
+	* src/saga_core/saga_gui/: active_parameters.cpp,
+	  parameters_control.cpp, parameters_control.h,
+	  parameters_properties.cpp, parameters_properties.h,
+	  saga_gui.vcproj: no message
+
+2009-08-21 18:03  oconrad
+
+	* src/saga_core/: saga_api/parameter_data.cpp,
+	  saga_gui/parameters_control.cpp, saga_gui/parameters_control.h,
+	  saga_gui/parameters_properties.cpp,
+	  saga_gui/parameters_properties.h,
+	  saga_gui/wx/propgrid/propgrid.h: no message
+
+2009-08-20 19:36  reklov_w
+
+	* src/modules/grid/grid_analysis/Cost_RectToPolar.cpp: updates for
+	  better nodata handling
+
+2009-08-20 19:18  reklov_w
+
+	* src/modules/grid/grid_analysis/Cost_RectToPolar.cpp: bug fixes
+	  for wrong parameter query and computations
+
+2009-08-19 18:57  oconrad
+
+	* src/saga_core/saga_gui/: wx/propgrid/advprops.cpp, Makefile.am,
+	  makefile.linux, makefile.mingw, parameters_control.cpp,
+	  parameters_properties.cpp, parameters_properties.h, saga_gui.dsp,
+	  wx/propgrid/advprops.h, wx/propgrid/extras.cpp,
+	  wx/propgrid/extras.h, wx/propgrid/manager.cpp,
+	  wx/propgrid/manager.h, wx/propgrid/odcombo.cpp,
+	  wx/propgrid/odcombo.h, wx/propgrid/propdev.h,
+	  wx/propgrid/propgrid.cpp, wx/propgrid/propgrid.h,
+	  wx/propgrid/props.cpp, wx/propgrid/editors.cpp,
+	  wx/propgrid/editors.h, wx/propgrid/props.h: no message
+
+2009-08-18 10:10  oconrad
+
+	* src/: modules/shapes/shapes_points/Clip_Points.cpp,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_gui/makefile.linux,
+	  saga_core/saga_gui/makefile.mingw, saga.bat: no message
+
+2009-08-17 15:15  oconrad
+
+	* src/modules/shapes/shapes_tools/shapes_tools.vcproj: no message
+
+2009-08-17 15:01  oconrad
+
+	* src/: saga_core/saga_gui/active.cpp, saga_core/saga_gui/active.h,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/view_table_control.h,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/shapes/shapes_tools/SearchInTable.cpp,
+	  modules/shapes/shapes_tools/SearchInTable.h,
+	  modules/shapes/shapes_tools/SelectByTheme.cpp,
+	  modules/shapes/shapes_tools/SelectByTheme.h,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.cpp,
+	  modules/shapes/shapes_tools/ShapeSelector.cpp,
+	  modules/shapes/shapes_tools/ShapeSelector.h,
+	  modules/shapes/shapes_tools/makefile.linux,
+	  modules/shapes/shapes_tools/makefile.mingw,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  saga_core/saga_api/pointcloud.h,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.h: no message
+
+2009-08-14 13:11  reklov_w
+
+	* src/modules/shapes/shapes_grid/Grid_Polygon_Clip.cpp: added
+	  support to use only selected polygons for clipping
+
+2009-08-06 09:33  oconrad
+
+	* src/saga_core/: saga_api/pointcloud.cpp, saga_gui/project.cpp: no
+	  message
+
+2009-07-24 15:03  oconrad
+
+	* src/saga_core/saga_api/pointcloud.cpp: no message
+
+2009-07-23 17:54  oconrad
+
+	* src/saga_core/: saga_api/parameter_data.cpp,
+	  saga_gui/parameters_control.cpp,
+	  saga_gui/parameters_properties.cpp,
+	  saga_gui/parameters_properties.h: no message
+
+2009-07-20 14:34  reklov_w
+
+	* src/saga_core/saga_api/saga_api.h: update swig for pointcloud.h
+
+2009-07-19 21:04  reklov_w
+
+	* src/modules/grid/grid_tools/Grid_Merge.cpp: now calculates true
+	  mean of overlapping grids
+
+2009-07-19 21:02  reklov_w
+
+	* src/modules/grid/grid_tools/CreateGridSystem.cpp: now allows to
+	  set the value with which the dummy grid is initialized
+
+2009-07-19 15:11  reklov_w
+
+	* src/saga_core/saga_api/pointcloud.cpp: hack for Name on linux
+	  unicode
+
+2009-07-19 14:49  reklov_w
+
+	* src/modules_io/shapes/io_shapes_las/Makefile.am: removed
+	  backslash
+
+2009-07-19 14:47  reklov_w
+
+	* src/modules_io/shapes/io_shapes/stl.cpp: adaptions for linux
+
+2009-07-19 14:44  reklov_w
+
+	* src/saga_core/saga_api/pointcloud.cpp: adaption for linux
+
+2009-07-19 14:39  reklov_w
+
+	* src/saga_core/: saga_gui/Makefile.am, saga_api/Makefile.am: added
+	  pointcloud
+
+2009-07-19 14:34  reklov_w
+
+	* src/modules_io/table/Makefile.am: removed io_table_odbc
+
+2009-07-19 14:32  reklov_w
+
+	* src/modules_io/shapes/io_shapes/Makefile.am: pointcloud_from_file
+	  added
+
+2009-07-19 14:29  reklov_w
+
+	* src/modules_io/shapes/io_shapes_las/Makefile.am: updated for las
+
+2009-07-19 14:25  reklov_w
+
+	* src/modules_io/shapes/Makefile.am: added io_shapes_las
+
+2009-07-19 14:23  reklov_w
+
+	* configure.in: added io_shapes_las and removed io_table_odbc
+
+2009-07-17 12:52  oconrad
+
+	* src/saga.sln: no message
+
+2009-07-17 12:48  oconrad
+
+	* src/: modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes/stl.cpp,
+	  modules_io/shapes/io_shapes_las/io_shapes_las.vcproj,
+	  saga_core/saga_api/doc_html.cpp, saga_core/saga_api/doc_svg.cpp,
+	  saga_core/saga_api/doc_svg.h, saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/saga_api.vcproj, saga_core/saga_api/table.cpp,
+	  saga_core/saga_api/table.h, saga_core/saga_gui/saga_gui.vcproj,
+	  saga_core/saga_gui/svg_interactive_map.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_pointcloud.cpp: no message
+
+2009-07-16 19:00  oconrad
+
+	* src/saga.dsw: no message
+
+2009-07-16 18:56  oconrad
+
+	* src/: modules/shapes/shapes_tools/CreateChartLayer.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/variogram_dialog.cpp,
+	  modules_io/shapes/io_shapes/MLB_Interface.cpp,
+	  modules_io/shapes/io_shapes/io_shapes.dsp,
+	  modules_io/shapes/io_shapes/pointcloud_from_file.cpp,
+	  modules_io/shapes/io_shapes/pointcloud_from_file.h,
+	  modules_io/shapes/io_shapes/stl.cpp,
+	  modules_io/shapes/io_shapes_las/MLB_Interface.cpp,
+	  modules_io/shapes/io_shapes_las/MLB_Interface.h,
+	  modules_io/shapes/io_shapes_las/Makefile.am,
+	  modules_io/shapes/io_shapes_las/io_shapes_las.dsp,
+	  modules_io/shapes/io_shapes_las/io_shapes_las.vcproj,
+	  modules_io/shapes/io_shapes_las/las_import.cpp,
+	  modules_io/shapes/io_shapes_las/las_import.h,
+	  modules_io/shapes/io_shapes_las/makefile.linux,
+	  modules_io/shapes/io_shapes_las/makefile.mingw,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/api_file.cpp,
+	  saga_core/saga_api/dataobject.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h, saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/mat_formula.cpp,
+	  saga_core/saga_api/mat_tools.cpp, saga_core/saga_api/mat_tools.h,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_api/pointcloud.cpp,
+	  saga_core/saga_api/pointcloud.h, saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_api/saga_api.h,
+	  saga_core/saga_api/saga_api_to_python_win.bat,
+	  saga_core/saga_api/table.cpp, saga_core/saga_api/table.h,
+	  saga_core/saga_api/table_io.cpp,
+	  saga_core/saga_api/table_record.cpp,
+	  saga_core/saga_gui/active.cpp,
+	  saga_core/saga_gui/active_history.cpp,
+	  saga_core/saga_gui/active_legend.cpp,
+	  saga_core/saga_gui/active_parameters.cpp,
+	  saga_core/saga_gui/project.cpp,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/res_dialogs.cpp,
+	  saga_core/saga_gui/res_dialogs.h,
+	  saga_core/saga_gui/res_images.cpp,
+	  saga_core/saga_gui/res_images.h, saga_core/saga_gui/saga_gui.dsp,
+	  saga_core/saga_gui/view_histogram.cpp,
+	  saga_core/saga_gui/view_table_diagram.cpp,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_base_item.cpp,
+	  saga_core/saga_gui/wksp_base_item.h,
+	  saga_core/saga_gui/wksp_base_manager.cpp,
+	  saga_core/saga_gui/wksp_data_control.cpp,
+	  saga_core/saga_gui/wksp_data_layers.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_data_manager.h,
+	  saga_core/saga_gui/wksp_data_menu_file.cpp,
+	  saga_core/saga_gui/wksp_data_menu_files.cpp,
+	  saga_core/saga_gui/wksp_data_menu_files.h,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.cpp,
+	  saga_core/saga_gui/wksp_layer_legend.cpp,
+	  saga_core/saga_gui/wksp_map_control.cpp,
+	  saga_core/saga_gui/wksp_pointcloud.cpp,
+	  saga_core/saga_gui/wksp_pointcloud.h,
+	  saga_core/saga_gui/wksp_pointcloud_manager.cpp,
+	  saga_core/saga_gui/wksp_pointcloud_manager.h,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_tin.cpp: no message
+
+2009-07-03 22:14  reklov_w
+
+	* src/modules/grid/grid_analysis/Image_VI_Slope.cpp: bugfix for
+	  TTVI calculation
+
+2009-07-02 09:56  reklov_w
+
+	* src/modules_io/shapes/io_shapes_dxf/dxflib/dl_writer_ascii.cpp:
+	  changes from Johan Van de Wauw to make it compile under linux
+
+2009-06-24 16:58  oconrad
+
+	* src/: modules_io/gdal/io_gdal/gdal_import.cpp,
+	  modules_io/gdal/io_gdal/gdal_import.h,
+	  saga_core/saga_gui/wksp_module.cpp: no message
+
+2009-06-11 18:18  oconrad
+
+	* src/saga_core/saga_api/saga_api_to_python_win.bat: no message
+
+2009-06-11 15:08  oconrad
+
+	* src/saga_core/: saga_api/parameters.cpp,
+	  saga_gui/wksp_base_control.cpp, saga_gui/wksp_base_control.h,
+	  saga_gui/wksp_map.cpp: no message
+
+2009-06-10 19:11  oconrad
+
+	* src/: modules_io/grid/io_grid/MLB_Interface.cpp,
+	  modules_io/grid/io_grid/xyz.cpp, modules_io/grid/io_grid/xyz.h,
+	  modules_io/grid/io_grid_image/grid_export.cpp,
+	  modules_io/grid/io_grid_image/grid_export.h,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_base_control.h,
+	  saga_core/saga_gui/wksp_base_item.h,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_map.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_tin.cpp: no message
+
+2009-06-05 14:00  oconrad
+
+	* src/modules/shapes/shapes_grid/grid_local_extremes_to_points.cpp:
+	  no message
+
+2009-05-28 15:08  oconrad
+
+	* src/: modules/grid/grid_calculus/grid_calculus.vcproj,
+	  modules/shapes/shapes_grid/Makefile.am,
+	  modules/shapes/shapes_grid/makefile.linux,
+	  modules/shapes/shapes_grid/makefile.mingw,
+	  modules/shapes/shapes_grid/shapes_grid.vcproj,
+	  modules/shapes/shapes_lines/MLB_Interface.cpp,
+	  modules/shapes/shapes_lines/Makefile.am,
+	  modules/shapes/shapes_lines/line_properties.cpp,
+	  modules/shapes/shapes_lines/line_properties.h,
+	  modules/shapes/shapes_lines/makefile.linux,
+	  modules/shapes/shapes_lines/makefile.mingw,
+	  modules/shapes/shapes_lines/shapes_lines.dsp,
+	  modules/shapes/shapes_lines/shapes_lines.vcproj,
+	  modules/shapes/shapes_tools/shapes_cut.cpp,
+	  modules/shapes/shapes_tools/shapes_cut.h,
+	  saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_selection.cpp,
+	  saga_core/saga_gui/view_table_diagram.cpp,
+	  saga_core/saga_gui/view_table_diagram.h: no message
+
+2009-05-27 19:30  oconrad
+
+	* src/modules/: grid/grid_calculus/MLB_Interface.cpp,
+	  grid/grid_calculus/Makefile.am,
+	  grid/grid_calculus/grid_difference.cpp,
+	  grid/grid_calculus/grid_difference.h,
+	  grid/grid_calculus/makefile.linux,
+	  grid/grid_calculus/makefile.mingw,
+	  grid/grid_calculus/grid_calculus.dsp,
+	  shapes/shapes_grid/MLB_Interface.cpp,
+	  shapes/shapes_grid/grid_local_extremes_to_points.cpp,
+	  shapes/shapes_grid/grid_local_extremes_to_points.h,
+	  shapes/shapes_grid/shapes_grid.dsp: no message
+
+2009-05-27 18:01  oconrad
+
+	* src/: modules/grid/grid_filter/Filter_Multi_Dir_Lee.cpp,
+	  modules/grid/grid_filter/Filter_Multi_Dir_Lee.h,
+	  saga_core/saga_api/grid.h, saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/shape.cpp, saga_core/saga_api/shapes.cpp,
+	  saga_core/saga_api/shapes.h, saga_core/saga_api/table.cpp,
+	  saga_core/saga_api/table.h, saga_core/saga_api/table_record.cpp,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/shapes/shapes_tools/shapes_split_by_attribute.cpp,
+	  modules/shapes/shapes_tools/shapes_split_by_attribute.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.h:
+	  no message
+
+2009-05-20 15:42  oconrad
+
+	* src/modules/shapes/shapes_tools/Shapes_Assign_Table.cpp: no
+	  message
+
+2009-05-15 14:17  oconrad
+
+	* src/saga_core/saga_gui/: view_table_diagram.cpp,
+	  wksp_shapes_line.cpp: no message
+
+2009-05-14 17:51  oconrad
+
+	* src/: modules_io/shapes/io_shapes_dxf/dxf_import.cpp,
+	  modules_io/shapes/io_shapes_dxf/dxf_import.h,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_shapes.h,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.h: no message
+
+2009-05-14 15:26  oconrad
+
+	* src/: modules_io/gdal/io_gdal/gdal_import.cpp,
+	  modules_io/grid/io_grid/grid_table.cpp,
+	  modules_io/grid/io_grid/raw.cpp,
+	  modules_io/shapes/io_shapes/atlas_bna.cpp,
+	  modules_io/shapes/io_shapes/surfer_bln.cpp,
+	  modules_io/shapes/io_shapes/wasp_map.cpp,
+	  modules_io/shapes/io_shapes_dxf/dxf_import.cpp,
+	  modules_io/table/io_table/io_table_txt.cpp,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/wksp_base_manager.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_data_menu_file.cpp: no message
+
+2009-05-14 14:37  reklov_w
+
+	* src/modules/grid/grid_tools/: Grid_Fill.cpp, Grid_Fill.h:
+	  optionally allow to flood nodata
+
+2009-05-13 17:26  oconrad
+
+	* src/modules_io/shapes/io_shapes_dxf/: dxflib/dl_attributes.h,
+	  dxflib/dl_codes.h, dxflib/dl_creationadapter.h,
+	  dxflib/dl_creationinterface.h, dxflib/dl_dxf.cpp,
+	  dxflib/dl_dxf.h, dxflib/dl_entities.h, dxflib/dl_exception.h,
+	  dxflib/dl_extrusion.h, dxflib/dl_writer.h,
+	  dxflib/dl_writer_ascii.cpp, dxflib/dl_writer_ascii.h,
+	  dxf_import.cpp, dxf_import.h: no message
+
+2009-04-29 16:32  oconrad
+
+	* src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp: no
+	  message
+
+2009-04-29 16:01  oconrad
+
+	* src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp: no
+	  message
+
+2009-04-28 18:31  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_morphometry/:
+	  MLB_Interface.cpp, Makefile.am, air_flow_height.cpp,
+	  air_flow_height.h, anisotropic_heating.cpp,
+	  anisotropic_heating.h, land_surface_temperature.cpp,
+	  land_surface_temperature.h, makefile.linux, makefile.mingw,
+	  relative_heights.cpp, relative_heights.h, ta_morphometry.dsp,
+	  ta_morphometry.vcproj, wind_effect.cpp, wind_effect.h: no message
+
+2009-04-07 22:08  reklov_w
+
+	* src/modules_io/grid/io_grid_image/grid_export.cpp: allows now the
+	  setting of a palette when used without GUI
+
+2009-04-07 15:47  oconrad
+
+	* src/saga_core/saga_gui/view_table_diagram.cpp: no message
+
+2009-04-02 13:11  oconrad
+
+	* src/: modules/grid/grid_tools/Grid_Buffer.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/HillShade.cpp,
+	  saga_core/saga_gui/view_table_diagram.cpp: no message
+
+2009-04-01 16:34  oconrad
+
+	* src/saga_core/saga_gui/: res_commands.cpp, res_commands.h,
+	  view_histogram.cpp, view_histogram.h, view_table_diagram.cpp,
+	  view_table_diagram.h: no message
+
+2009-03-31 12:40  oconrad
+
+	* src/saga_core/saga_gui/: res_commands.cpp, res_commands.h,
+	  view_histogram.cpp, view_histogram.h, wksp_layer_classify.cpp,
+	  wksp_layer_classify.h, wksp_shapes.cpp: no message
+
+2009-03-30 16:00  oconrad
+
+	* src/modules/grid/grid_tools/: Grid_Gaps.cpp, Grid_Gaps.h: no
+	  message
+
+2009-03-27 18:15  oconrad
+
+	* src/: modules/grid/grid_spline/Gridding_Spline_TPS_Local.cpp,
+	  saga_core/saga_api/quadtree.cpp, saga_core/saga_api/shapes.h: no
+	  message
+
+2009-03-27 14:39  oconrad
+
+	* src/modules_geostatistics/geostatistics/geostatistics_kriging/:
+	  kriging_base.cpp, kriging_base.h, semivariogram.cpp,
+	  semivariogram.h, variogram_dialog.cpp, variogram_dialog.h: no
+	  message
+
+2009-03-25 11:37  oconrad
+
+	* src/saga_core/saga_api/table.cpp: no message
+
+2009-03-24 17:37  oconrad
+
+	* src/saga_core/: saga_api/api_colors.cpp, saga_api/api_core.h,
+	  saga_api/api_history.cpp, saga_api/api_translator.cpp,
+	  saga_api/dataobject.h, saga_api/grid.cpp, saga_api/grid.h,
+	  saga_api/grid_io.cpp, saga_api/module.h,
+	  saga_api/module_library.cpp, saga_api/module_library.h,
+	  saga_api/module_library_interface.cpp, saga_api/parameters.cpp,
+	  saga_api/parameters.h, saga_api/shapes.cpp, saga_api/shapes.h,
+	  saga_api/shapes_io.cpp, saga_api/table.cpp, saga_api/table.h,
+	  saga_api/table_io.cpp, saga_api/tin.cpp, saga_api/tin.h,
+	  saga_cmd/module_library.cpp, saga_gui/parameters_properties.cpp,
+	  saga_gui/parameters_properties.h, saga_gui/wksp_layer.cpp,
+	  saga_gui/wksp_table.cpp: no message
+
+2009-03-17 13:32  reklov_w
+
+	* src/modules/shapes/shapes_tools/Makefile.am: typo fixed to make
+	  quadtree_structure compile on linux
+
+2009-03-15 12:49  reklov_w
+
+	*
+	  src/modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj:
+	  update for correct postbuild *.lng copy
+
+2009-03-13 17:24  oconrad
+
+	* src/saga_core/saga_gui/parameters_control.cpp: no message
+
+2009-03-11 16:28  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/semivariogram.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/semivariogram.h,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/tin_triangulation.cpp: no message
+
+2009-03-11 16:08  oconrad
+
+	* src/: modules/grid/grid_spline/Gridding_Spline_TPS_Local.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Local.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal.cpp,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/Interpolation.h,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.cpp,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.h,
+	  modules/shapes/shapes_tools/MLB_Interface.cpp,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/shapes/shapes_tools/makefile.linux,
+	  modules/shapes/shapes_tools/makefile.mingw,
+	  modules/shapes/shapes_tools/quadtree_structure.cpp,
+	  modules/shapes/shapes_tools/quadtree_structure.h,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  saga_core/saga_api/Makefile.am,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/quadtree.cpp, saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_api/saga_api.vcproj, saga_core/saga_api/shapes.h,
+	  saga_core/saga_gui/view_table_diagram.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp:
+	  no message
+
+2009-03-04 10:16  reklov_w
+
+	* src/modules/grid/grid_gridding/Shapes2Grid.cpp: optionally grid
+	  only selected shapes
+
+2009-03-02 12:27  oconrad
+
+	* src/: saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Geometrics.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp: no message
+
+2009-02-25 18:26  oconrad
+
+	* src/saga_core/: saga_api/grid.cpp, saga_api/grid.h,
+	  saga_api/grid_operation.cpp, saga_gui/wksp_grid.cpp: no message
+
+2009-02-16 17:40  oconrad
+
+	* src/saga_core/saga_api/: api_callback.cpp, api_core.h, module.h:
+	  no message
+
+2009-02-13 16:50  reklov_w
+
+	* src/modules/shapes/shapes_grid/Grid_To_Points.cpp: cut off file
+	  extension (.sgrd) in field names of output shape
+
+2009-02-10 17:11  reklov_w
+
+	* src/saga_core/saga_cmd/module_library.cpp: print out module usage
+	  when no module parameters are provided
+
+2009-02-06 18:00  oconrad
+
+	* src/saga_core/saga_api/: grid.cpp, grid.h: no message
+
+2009-02-06 17:24  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.cpp,
+	  saga_core/saga_api/grid.cpp: no message
+
+2009-02-06 17:08  oconrad
+
+	* src/saga_core/saga_api/: grid.cpp, grid.h: no message
+
+2009-02-04 13:52  reklov_w
+
+	* src/saga.sln: io_table module added
+
+2009-02-04 13:51  reklov_w
+
+	* src/modules_io/table/io_table/io_table.vcproj: added
+
+2009-02-04 11:34  reklov_w
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  saga_core/saga_gui/saga_gui.vcproj: postbuild copy of language
+	  files added
+
+2009-02-04 11:31  reklov_w
+
+	* src/:
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.vcproj,
+	  modules_recreations/recreations/recreations_games/recreations_games.vcproj,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.vcproj,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.vcproj,
+	  modules_simulation/fire/sim_fire_spreading/sim_fire_spreading.vcproj,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.vcproj:
+	  postbuild copy of language files added
+
+2009-02-04 11:28  reklov_w
+
+	* src/: modules_io/grid/io_grid/io_grid.vcproj,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.vcproj,
+	  modules_io/grid/io_grid_image/io_grid_image.vcproj,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes_dxf/io_shapes_dxf.vcproj,
+	  modules_io/table/io_table_odbc/io_table_odbc.vcproj,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.vcproj,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.vcproj,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcproj: postbuild
+	  copy of language files added
+
+2009-02-04 11:24  reklov_w
+
+	* src/: modules/table/table_tools/table_tools.vcproj,
+	  modules/tin/tin_tools/tin_tools.vcproj,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcproj,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.vcproj,
+	  modules_io/gdal/io_gdal/io_gdal.vcproj,
+	  modules_io/gps/io_gps/io_gps.vcproj: postbuild copy of language
+	  files added
+
+2009-02-04 11:21  reklov_w
+
+	* src/modules/: shapes/shapes_lines/shapes_lines.vcproj,
+	  shapes/shapes_points/shapes_points.vcproj,
+	  shapes/shapes_polygons/shapes_polygons.vcproj,
+	  shapes/shapes_tools/shapes_tools.vcproj,
+	  table/table_calculus/table_calculus.vcproj: postbuild copy of
+	  language files added
+
+2009-02-04 11:18  reklov_w
+
+	* src/modules/: grid/grid_analysis/grid_analysis.vcproj,
+	  grid/grid_calculus/grid_calculus.vcproj,
+	  grid/grid_discretisation/grid_discretisation.vcproj,
+	  grid/grid_filter/grid_filter.vcproj,
+	  grid/grid_gridding/grid_gridding.vcproj,
+	  grid/grid_spline/grid_spline.vcproj,
+	  grid/grid_tools/grid_tools.vcproj,
+	  grid/grid_visualisation/grid_visualisation.vcproj,
+	  shapes/shapes_grid/shapes_grid.vcproj: postbuild copy of language
+	  files added
+
+2009-02-03 14:00  oconrad
+
+	* src/saga_core/saga_api/: doc_svg.cpp, doc_svg.h, parameter.cpp,
+	  parameters.h, table.cpp, table.h: no message
+
+2009-01-30 17:33  oconrad
+
+	* src/modules_simulation/hydrology/sim_hydrology/: KinWav_D8.cpp,
+	  KinWav_D8.h: no message
+
+2009-01-30 11:37  oconrad
+
+	* src/modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp: no
+	  message
+
+2009-01-29 16:44  oconrad
+
+	* src/modules_simulation/hydrology/sim_hydrology/: KinWav_D8.cpp,
+	  KinWav_D8.h: no message
+
+2009-01-28 10:48  oconrad
+
+	* src/saga_core/: saga_api/parameter.cpp, saga_api/parameters.h,
+	  saga_gui/parameters_properties.cpp: no message
+
+2009-01-27 17:00  oconrad
+
+	* src/modules/grid/grid_analysis/: CoveredDistance.cpp,
+	  CoveredDistance.h, owa.cpp: no message
+
+2009-01-27 16:29  oconrad
+
+	* src/saga_core/saga_api/saga_api.vcproj: no message
+
+2009-01-27 14:56  oconrad
+
+	* src/saga_core/saga_api/: api_core.h, api_file.cpp,
+	  api_string.cpp, module.cpp, saga_api.dsp: no message
+
+2009-01-26 21:23  reklov_w
+
+	* src/saga_core/saga_cmd/module_library.cpp: typecast long to int
+
+2009-01-26 17:06  oconrad
+
+	* src/saga_core/saga_cmd/module_library.cpp: no message
+
+2009-01-26 16:59  oconrad
+
+	* src/saga_core/saga_cmd/module_library.cpp: no message
+
+2009-01-26 16:29  oconrad
+
+	* src/: saga_core/saga_api/api_string.cpp,
+	  modules/table/table_tools/Table_Create_Empty.cpp: no message
+
+2009-01-19 15:01  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_hydrology/:
+	  Makefile.am, MLB_Interface.cpp, TopographicIndices.cpp,
+	  TopographicIndices.h, flow_width.cpp, flow_width.h,
+	  makefile.linux, makefile.mingw, ta_hydrology.dsp,
+	  ta_hydrology.vcproj: no message
+
+2009-01-19 13:50  oconrad
+
+	* src/modules/table/table_calculus/: table_running_average.cpp,
+	  table_running_average.h: no message
+
+2009-01-19 12:01  oconrad
+
+	* src/saga_core/saga_api/parameter_data.cpp: no message
+
+2009-01-16 15:18  oconrad
+
+	* src/: modules/table/table_calculus/MLB_Interface.cpp,
+	  modules/table/table_calculus/Makefile.am,
+	  modules/table/table_calculus/makefile.linux,
+	  modules/table/table_calculus/makefile.mingw,
+	  modules/table/table_calculus/table_calculus.dsp,
+	  modules/table/table_calculus/table_calculus.vcproj,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_table.cpp,
+	  saga_core/saga_gui/wksp_tin.cpp: no message
+
+2009-01-13 17:15  oconrad
+
+	* src/: modules/grid/grid_discretisation/Makefile.am,
+	  modules/grid/grid_discretisation/makefile.linux,
+	  modules/grid/grid_discretisation/makefile.mingw,
+	  saga_core/saga_api/parameter_data.cpp: no message
+
+2009-01-12 18:13  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/flow_massflux.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/flow_massflux.h,
+	  modules/grid/grid_discretisation/rga_basic.cpp,
+	  modules/grid/grid_discretisation/rga_basic.h: no message
+
+2009-01-12 16:22  oconrad
+
+	* src/: modules/grid/grid_discretisation/MLB_Interface.cpp,
+	  modules/grid/grid_discretisation/Makefile.am,
+	  modules/grid/grid_discretisation/grid_discretisation.dsp,
+	  modules/grid/grid_discretisation/grid_discretisation.vcproj,
+	  modules/grid/grid_discretisation/makefile.linux,
+	  modules/grid/grid_discretisation/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcproj,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/view_map.cpp,
+	  saga_core/saga_gui/view_map_control.cpp,
+	  saga_core/saga_gui/wksp_map.cpp, saga_core/saga_gui/wksp_map.h,
+	  saga_core/saga_gui/wksp_map_manager.cpp: no message
+
+2009-01-12 13:47  oconrad
+
+	* src/saga_core/saga_api/parameters.cpp: no message
+
+2009-01-12 13:47  oconrad
+
+	* src/modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp:
+	  patch for quantile calculation by K.Stricker
+
+2009-01-05 17:52  oconrad
+
+	* src/: modules/grid/grid_gridding/Interpolation_Triangulation.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_TIN.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_TIN.h,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.h,
+	  modules/tin/tin_tools/TIN_Flow_Trace.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Trace.h,
+	  modules/tin/tin_tools/TIN_From_Grid.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.cpp,
+	  modules/tin/tin_tools/TIN_Gradient.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp,
+	  saga_core/saga_api/compatibility.h,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/dataobject.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h, saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/tin.cpp, saga_core/saga_api/tin.h,
+	  saga_core/saga_api/tin_elements.cpp,
+	  saga_core/saga_api/tin_triangulation.cpp,
+	  saga_core/saga_gui/parameters_properties.cpp,
+	  saga_core/saga_gui/wksp_tin.cpp: no message
+
+2008-12-29 03:47  reklov_w
+
+	* src/: modules/shapes/shapes_grid/Grid_To_Contour.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp:
+	  cut off grid file extension when used as attribute field name
+
+2008-12-29 03:45  reklov_w
+
+	* src/modules/grid/grid_gridding/Shapes2Grid.cpp: print warning if
+	  field type is string and uids are generated
+
+2008-12-18 16:44  oconrad
+
+	* src/saga_core/saga_gui/: active_attributes.cpp,
+	  view_table_control.cpp, view_table_control.h,
+	  wksp_shapes_point.cpp, wksp_shapes_polygon.cpp: no message
+
+2008-12-17 18:18  oconrad
+
+	* src/saga_core/saga_gui/view_table_control.cpp: no message
+
+2008-12-17 11:02  oconrad
+
+	* src/modules_io/shapes/io_shapes/: MLB_Interface.cpp, Makefile.am,
+	  io_shapes.dsp, io_shapes.vcproj, makefile.linux, makefile.mingw,
+	  stl.cpp, stl.h: no message
+
+2008-12-15 15:22  oconrad
+
+	* src/: modules/shapes/shapes_points/AddCoordinates.cpp,
+	  modules/shapes/shapes_points/Clip_Points.cpp,
+	  modules/shapes/shapes_points/CountPoints.cpp,
+	  modules/shapes/shapes_points/CreatePointGrid.cpp,
+	  modules/shapes/shapes_points/FitNPointsToShape.cpp,
+	  modules/shapes/shapes_points/Points_From_Lines.cpp,
+	  modules/shapes/shapes_points/Points_From_Table.cpp,
+	  modules/shapes/shapes_points/remove_duplicates.cpp,
+	  modules/shapes/shapes_points/separate_by_direction.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_ordinary_global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_universal_global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_ordinary_global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal_global.cpp,
+	  modules_io/shapes/io_shapes/atlas_bna.cpp,
+	  modules_io/shapes/io_shapes/generate.cpp,
+	  modules_io/shapes/io_shapes/gstat.cpp,
+	  modules_io/shapes/io_shapes/surfer_bln.cpp,
+	  modules_io/shapes/io_shapes/wasp_map.cpp,
+	  modules_io/shapes/io_shapes/xyz.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Engine.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Shapes.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/D8_Flow_Analysis.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.cpp,
+	  modules/grid/grid_tools/CreateGridSystem.h,
+	  modules/grid/grid_tools/Grid_Aggregate.h,
+	  modules/grid/grid_tools/Grid_Completion.h,
+	  modules/grid/grid_tools/Grid_ConstantGrid.h,
+	  modules/grid/grid_tools/Grid_CropToData.h,
+	  modules/grid/grid_tools/Grid_Cut.h,
+	  modules/grid/grid_tools/Grid_Gaps.h,
+	  modules/grid/grid_tools/Grid_Gaps_OneCell.h,
+	  modules/grid/grid_tools/Grid_Merge.h,
+	  modules/grid/grid_tools/Grid_Resample.h,
+	  modules/grid/grid_tools/GridsFromTableAndGrid.h,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Contour.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Gradient.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points_Random.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp,
+	  modules/shapes/shapes_tools/CreateChartLayer.cpp,
+	  modules/shapes/shapes_tools/CreateWebContent.cpp,
+	  modules/shapes/shapes_tools/GraticuleBuilder.cpp,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.cpp,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.h,
+	  modules/shapes/shapes_tools/QueryBuilder.cpp,
+	  modules/shapes/shapes_tools/QueryParser.cpp,
+	  modules/shapes/shapes_tools/SearchInTable.cpp,
+	  modules/shapes/shapes_tools/SelectByTheme.cpp,
+	  modules/shapes/shapes_tools/SeparateShapes.cpp,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.cpp,
+	  modules/shapes/shapes_tools/ShapeSelector.cpp,
+	  modules/shapes/shapes_tools/Shapes_Assign_Table.cpp,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.cpp,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.h,
+	  modules/shapes/shapes_tools/Shapes_Merge.cpp,
+	  modules/shapes/shapes_tools/Shapes_Merge.h,
+	  modules/shapes/shapes_tools/Shapes_Report.cpp,
+	  modules/shapes/shapes_tools/Summarize.cpp,
+	  modules/shapes/shapes_tools/TransformShapes.cpp,
+	  modules/shapes/shapes_tools/shapes_buffer.cpp,
+	  modules/shapes/shapes_tools/shapes_cut.cpp,
+	  modules/shapes/shapes_tools/shapes_cut.h,
+	  modules/shapes/shapes_tools/shapes_cut_interactive.h,
+	  modules/shapes/shapes_tools/shapes_extents.cpp,
+	  modules/shapes/shapes_tools/shapes_split.h,
+	  modules/shapes/shapes_tools/shapes_split_by_attribute.cpp,
+	  modules/shapes/shapes_tools/shapes_split_by_attribute.h,
+	  modules/shapes/shapes_tools/shapes_split_randomly.cpp,
+	  modules/shapes/shapes_tools/shapes_split_randomly.h,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.cpp,
+	  modules_io/shapes/io_shapes_dxf/dxf_import.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_12.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_13.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_14.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.cpp,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/dataobject.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/shape.cpp, saga_core/saga_api/shape_line.cpp,
+	  saga_core/saga_api/shape_point.cpp,
+	  saga_core/saga_api/shape_points.cpp,
+	  saga_core/saga_api/shape_polygon.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_io.cpp,
+	  saga_core/saga_api/shapes_search.cpp,
+	  saga_core/saga_api/shapes_selection.cpp,
+	  saga_core/saga_api/table.cpp, saga_core/saga_api/table.h,
+	  saga_core/saga_api/table_io.cpp,
+	  saga_core/saga_api/table_record.cpp,
+	  saga_core/saga_api/table_selection.cpp,
+	  saga_core/saga_api/tin.cpp, saga_core/saga_api/tin.h,
+	  saga_core/saga_api/tin_triangulation.cpp,
+	  modules/grid/grid_analysis/LeastCostPathProfile.cpp,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.cpp,
+	  modules/grid/grid_gridding/Interpolation_Shepard.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Local.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_TIN.cpp,
+	  modules/shapes/shapes_lines/Lines_From_Points.cpp,
+	  modules/shapes/shapes_lines/Lines_From_Polygons.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  modules_io/gdal/io_gdal/ogr_driver.cpp,
+	  modules_simulation/hydrology/sim_hydrology/WaterRetentionCapacity.cpp,
+	  modules_simulation/hydrology/sim_hydrology/idw.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile_From_Lines.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.cpp,
+	  saga_core/saga_gui/parameters_properties.cpp,
+	  modules/shapes/shapes_lines_ex/SimplifyShapes.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Centroids.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Geometrics.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Union.cpp,
+	  modules/shapes/shapes_polygons/Polygons_From_Lines.cpp,
+	  modules/shapes/shapes_polygons/polygon_to_points.cpp,
+	  modules/shapes/shapes_polygons/shape_index.cpp,
+	  modules/table/table_calculus/Table_CalculatorShapes.cpp,
+	  modules/table/table_calculus/Table_Trend.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.cpp,
+	  modules/tin/tin_tools/TIN_Gradient.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.cpp,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.cpp,
+	  saga_core/saga_gui/svg_interactive_map.cpp,
+	  saga_core/saga_gui/view_scatterplot.cpp,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/wksp_data_control.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_map.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_shapes.h,
+	  saga_core/saga_gui/wksp_shapes_edit.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.h,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.h,
+	  saga_core/saga_gui/wksp_shapes_points.cpp,
+	  saga_core/saga_gui/wksp_shapes_polygon.cpp,
+	  saga_core/saga_gui/wksp_shapes_polygon.h,
+	  saga_core/saga_gui/wksp_tin.cpp, saga_core/saga_gui/wksp_tin.h:
+	  no message
+
+2008-12-08 01:42  reklov_w
+
+	* src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp: unicode
+	  fixes
+
+2008-12-08 00:48  reklov_w
+
+	* src/saga_core/saga_gui/wksp_base_control.cpp: wxGTK/linux fixes
+
+2008-12-05 17:48  oconrad
+
+	* src/:
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  saga_core/saga_gui/helper.cpp, saga_core/saga_gui/helper.h,
+	  saga_core/saga_gui/view_map_control.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_shapes_polygon.cpp: no message
+
+2008-12-02 15:10  reklov_w
+
+	*
+	  src/modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj:
+	  vc8 project update
+
+2008-12-02 15:07  reklov_w
+
+	* src/: saga_core/saga_gui/wksp_map.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/topographic_correction.cpp:
+	  module parameter updates
+
+2008-12-01 14:51  oconrad
+
+	* src/saga_core/: saga_api/mat_formula.cpp,
+	  saga_gui/res_commands.cpp, saga_gui/res_commands.h,
+	  saga_gui/view_map.cpp, saga_gui/view_map_control.cpp,
+	  saga_gui/wksp_map.cpp, saga_gui/wksp_map.h,
+	  saga_gui/wksp_map_manager.cpp: no message
+
+2008-11-30 15:52  reklov_w
+
+	* src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp: unicode
+	  fixes
+
+2008-11-29 15:44  reklov_w
+
+	* src/modules_io/gdal/io_gdal/: ogr_driver.cpp, ogr_driver.h,
+	  ogr_export.cpp, ogr_import.cpp: unicode fixes
+
+2008-11-29 14:09  reklov_w
+
+	* src/modules_io/gdal/io_gdal/: gdal_export.cpp, gdal_import.cpp:
+	  unicode fixes
+
+2008-11-29 12:49  reklov_w
+
+	* src/modules_io/gdal/io_gdal/gdal_export.cpp: GDALGetDriverByName
+	  uses Description not Metaname
+
+2008-11-24 11:36  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/topographic_correction.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/topographic_correction.h,
+	  modules_io/gdal/io_gdal/gdal_driver.h,
+	  modules_io/gdal/io_gdal/gdal_export.cpp,
+	  modules_io/gdal/io_gdal/gdal_export.h,
+	  modules_io/gdal/io_gdal/gdal_import.cpp,
+	  modules_io/gdal/io_gdal/ogr_export.cpp,
+	  modules_io/gdal/io_gdal/ogr_import.cpp: topographic correction
+	  for satellite imagery
+
+2008-11-18 14:56  oconrad
+
+	* src/modules/: grid/grid_gridding/nn/nncommon.c,
+	  grid/grid_gridding/nn/triangle.c,
+	  grid/grid_spline/Gridding_Spline_CSA.cpp,
+	  shapes/shapes_tools/Makefile.am: no message
+
+2008-11-15 17:29  reklov_w
+
+	* src/: modules/grid/grid_tools/CreateGridSystem.cpp,
+	  modules/grid/grid_tools/Grid_Value_Reclassify.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFlood.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFloodInteractive.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks.cpp:
+	  contact updated
+
+2008-11-15 17:28  reklov_w
+
+	*
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp:
+	  bug with doubly inserted zone ids solved, table cleanup before
+	  writing
+
+2008-10-14 18:05  oconrad
+
+	* src/saga_core/: saga_api/table.cpp, saga_api/table.h,
+	  saga_gui/wksp_shapes_polygon.cpp, saga_gui/wksp_shapes_polygon.h:
+	  no message
+
+2008-10-14 12:55  oconrad
+
+	* src/saga_core/: saga_api/parameters.cpp, saga_api/table.cpp,
+	  saga_api/table.h, saga_gui/res_commands.cpp,
+	  saga_gui/res_commands.h, saga_gui/view_table.cpp,
+	  saga_gui/view_table.h, saga_gui/view_table_control.cpp,
+	  saga_gui/view_table_control.h: no message
+
+2008-10-09 23:16  reklov_w
+
+	* src/modules/shapes/shapes_polygons/Polygon_Geometrics.cpp: option
+	  added to optionally save the changes to the input shapefile
+
+2008-10-09 17:48  oconrad
+
+	* src/modules/table/table_calculus/: Table_Calculator.cpp,
+	  Table_CalculatorShapes.cpp: no message
+
+2008-10-07 13:34  oconrad
+
+	* src/saga_core/: saga_api/grid.cpp, saga_gui/res_dialogs.cpp: no
+	  message
+
+2008-09-30 16:41  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_14.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Triangle.cpp,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SAGA_Wetness_Index.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SlopeLength.cpp,
+	  saga_core/saga_api/grid.cpp,
+	  modules/grid/grid_discretisation/Grid_FastSegments.cpp,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Hypsometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.cpp: no message
+
+2008-09-30 15:34  oconrad
+
+	* src/: saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/compatibility.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h, saga_core/saga_api/grid_memory.cpp,
+	  modules/grid/grid_discretisation/Grid_Segmentation.cpp: no
+	  message
+
+2008-09-26 16:43  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/:
+	  Pit_Eliminator.cpp, Pit_Router.cpp, Pit_Router.h: no message
+
+2008-09-26 13:28  oconrad
+
+	* src/:
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.h,
+	  saga_core/saga_api/shapes_search.cpp: no message
+
+2008-09-26 10:50  oconrad
+
+	* src/modules/: grid/grid_gridding/nn/delaunay.c,
+	  grid/grid_gridding/nn/delaunay.h,
+	  grid/grid_gridding/Interpolation_NaturalNeighbour.cpp,
+	  grid/grid_gridding/Interpolation_NaturalNeighbour.h,
+	  grid/grid_gridding/nn/hash.c, grid/grid_gridding/nn/hash.h,
+	  grid/grid_gridding/nn/istack.c, grid/grid_gridding/nn/istack.h,
+	  grid/grid_gridding/nn/lpi.c, grid/grid_gridding/nn/nan.h,
+	  grid/grid_gridding/nn/nn.h, grid/grid_gridding/nn/nnai.c,
+	  grid/grid_gridding/nn/nncommon.c, grid/grid_gridding/nn/nnpi.c,
+	  grid/grid_gridding/nn/triangle.c,
+	  grid/grid_gridding/nn/triangle.h,
+	  grid/grid_gridding/nn/version.h,
+	  shapes/shapes_points/separate_by_direction.cpp,
+	  shapes/shapes_points/separate_by_direction.h,
+	  grid/grid_gridding/MLB_Interface.cpp,
+	  grid/grid_gridding/Makefile.am,
+	  grid/grid_gridding/grid_gridding.dsp,
+	  grid/grid_gridding/grid_gridding.vcproj,
+	  grid/grid_gridding/makefile.linux,
+	  grid/grid_gridding/makefile.mingw, grid/grid_spline/Makefile.am,
+	  grid/grid_spline/csa.c, grid/grid_spline/csa.h,
+	  grid/grid_spline/makefile.linux, grid/grid_spline/makefile.mingw,
+	  shapes/shapes_points/MLB_Interface.cpp,
+	  shapes/shapes_points/Makefile.am,
+	  shapes/shapes_points/makefile.linux,
+	  shapes/shapes_points/makefile.mingw,
+	  shapes/shapes_points/shapes_points.dsp,
+	  shapes/shapes_points/shapes_points.vcproj,
+	  shapes/shapes_tools/shapes_cut.cpp: no message
+
+2008-09-25 16:12  oconrad
+
+	* src/saga_core/saga_gui/wksp_shapes_line.cpp: no message
+
+2008-09-25 15:43  oconrad
+
+	* src/: modules/grid/grid_spline/MLB_Interface.cpp,
+	  modules/grid/grid_spline/Makefile.am,
+	  modules/grid/grid_spline/grid_spline.dsp,
+	  modules/grid/grid_spline/grid_spline.vcproj,
+	  modules/grid/grid_spline/makefile.linux,
+	  modules/grid/grid_spline/makefile.mingw,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_ordinary.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal.h,
+	  saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_search.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_CSA.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_CSA.h,
+	  modules/grid/grid_spline/csa.c, modules/grid/grid_spline/csa.h:
+	  no message
+
+2008-09-23 17:37  oconrad
+
+	* src/: saga_core/saga_gui/dlg_list_grid.cpp,
+	  saga_core/saga_gui/project.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  saga_core/saga_gui/wksp_module_menu.cpp,
+	  saga_core/saga_gui/wksp_module_menu.h,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Local.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Local.h,
+	  modules/grid/grid_spline/Thin_Plate_Spline.cpp,
+	  modules/grid/grid_spline/Thin_Plate_Spline.h,
+	  modules/shapes/shapes_tools/shapes_buffer.cpp,
+	  modules/shapes/shapes_tools/shapes_buffer.h,
+	  modules/shapes/shapes_tools/shapes_split_by_attribute.cpp,
+	  saga_core/saga_api/geo_functions.cpp,
+	  saga_core/saga_api/module.h, saga_core/saga_api/tin_elements.cpp:
+	  no message
+
+2008-09-22 17:19  oconrad
+
+	* src/:
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.h,
+	  modules/shapes/shapes_tools/MLB_Interface.cpp,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/shapes/shapes_tools/makefile.linux,
+	  modules/shapes/shapes_tools/makefile.mingw,
+	  modules/shapes/shapes_tools/shapes_split_by_attribute.cpp,
+	  modules/shapes/shapes_tools/shapes_split_by_attribute.h,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_search.cpp: no message
+
+2008-09-19 16:01  oconrad
+
+	* src/modules_io/table/io_table/io_table_txt.cpp: no message
+
+2008-09-18 17:13  oconrad
+
+	* src/modules_io/table/io_table/MLB_Interface.cpp,
+	  src/modules_io/table/io_table/MLB_Interface.h,
+	  src/modules_io/table/io_table/Makefile.am,
+	  src/modules_io/table/io_table/io_table.dsp,
+	  src/modules_io/table/io_table/io_table.lng.txt,
+	  src/modules_io/table/io_table/io_table.vcproj,
+	  src/modules_io/table/io_table/io_table_txt.cpp,
+	  src/modules_io/table/io_table/io_table_txt.h,
+	  src/modules_io/table/io_table/makefile.linux,
+	  src/modules_io/table/io_table/makefile.mingw,
+	  src/modules_io/table/Makefile.am,
+	  src/modules_io/table/makefile.linux,
+	  src/saga_core/saga_api/api_core.h,
+	  src/saga_core/saga_api/api_file.cpp,
+	  src/saga_core/saga_api/api_string.cpp,
+	  src/saga_core/saga_api/grid_io.cpp,
+	  src/saga_core/saga_api/shapes_io.cpp,
+	  src/saga_core/saga_api/table.cpp, src/saga_core/saga_api/table.h,
+	  src/saga_core/saga_api/table_io.cpp,
+	  src/modules/shapes/shapes_points/Points_From_Table.cpp,
+	  configure.in, src/saga.bat, src/saga.dsw: no message
+
+2008-09-17 14:22  oconrad
+
+	* src/: saga_core/saga_api/api_string.cpp,
+	  saga_core/saga_api/grid_io.cpp,
+	  modules_projection/pj_proj4/pj_proj4/MLB_Interface.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.h: no message
+
+2008-09-15 17:16  oconrad
+
+	*
+	  src/modules_projection/pj_geotrans/pj_geotrans/data/Projection_GeoTRANS_Datum_3.dat:
+	  no message
+
+2008-09-15 12:48  oconrad
+
+	* src/saga_core/saga_api/parameter_data.cpp: no message
+
+2008-09-12 11:49  oconrad
+
+	* src/saga_core/saga_cmd/module_library.cpp: no message
+
+2008-09-11 17:23  oconrad
+
+	* src/modules_projection/pj_proj4/pj_proj4/: MLB_Interface.cpp,
+	  PROJ4_Base.cpp, PROJ4_Base.h, PROJ4_Grid.cpp, PROJ4_Grid.h,
+	  PROJ4_Shapes.cpp, PROJ4_Shapes.h: no message
+
+2008-09-10 18:08  oconrad
+
+	* src/:
+	  modules_projection/pj_proj4/pj_proj4/lib/lib_src_proj-4.6.1.zip,
+	  saga_core/saga_api/parameters.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp: no message
+
+2008-09-09 12:37  oconrad
+
+	* src/saga_core/saga_cmd/module_library.cpp: no message
+
+2008-09-09 00:40  reklov_w
+
+	* src/saga_core/saga_cmd/saga_cmd.cpp: saga_cmd -help text updated
+
+2008-09-08 15:57  oconrad
+
+	* src/modules_io/gdal/io_gdal/: gdal_driver.cpp, gdal_driver.h,
+	  gdal_import.cpp, gdal_import.h: no message
+
+2008-09-04 15:16  oconrad
+
+	* src/: modules/grid/grid_filter/Filter_3x3.cpp,
+	  saga_core/saga_api/parameters.cpp: no message
+
+2008-09-03 17:26  oconrad
+
+	* src/modules_projection/pj_proj4/pj_proj4/:
+	  lib/lib_src_proj-4.4.9.zip, lib/lib_src_proj-4.6.1.zip,
+	  PROJ4_Grid.cpp, PROJ4_Shapes.cpp: no message
+
+2008-09-03 15:26  oconrad
+
+	* configure.in, src/Makefile.am, src/makefile.linux, src/saga.bat,
+	  src/saga.dsw, src/saga.sln,
+	  src/modules/shapes/shapes_polygons/MLB_Interface.cpp,
+	  src/modules/shapes/shapes_polygons/Makefile.am,
+	  src/modules/shapes/shapes_polygons/makefile.linux,
+	  src/modules/shapes/shapes_polygons/makefile.mingw,
+	  src/modules/shapes/shapes_polygons/polygon_to_points.cpp,
+	  src/modules/shapes/shapes_polygons/polygon_to_points.h,
+	  src/modules/shapes/shapes_polygons/shapes_polygons.dsp,
+	  src/modules/shapes/shapes_polygons/shapes_polygons.vcproj,
+	  src/modules/shapes/shapes_tools/MLB_Interface.cpp,
+	  src/modules/shapes/shapes_tools/Makefile.am,
+	  src/modules/shapes/shapes_tools/makefile.linux,
+	  src/modules/shapes/shapes_tools/makefile.mingw,
+	  src/modules/shapes/shapes_tools/shapes_extents.cpp,
+	  src/modules/shapes/shapes_tools/shapes_extents.h,
+	  src/modules/shapes/shapes_tools/shapes_tools.dsp,
+	  src/modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  src/modules_io/Makefile.am, src/modules_io/makefile.linux,
+	  src/modules_io/gdal/io_gdal/gdal_driver.cpp,
+	  src/modules_io/gdal/io_gdal/gdal_driver.h,
+	  src/modules_io/gdal/io_gdal/gdal_export.cpp,
+	  src/modules_io/gdal/io_gdal/gdal_export.h,
+	  src/modules_io/gdal/io_gdal/gdal_export_geotiff.cpp,
+	  src/modules_io/gdal/io_gdal/gdal_export_geotiff.h,
+	  src/modules_io/gdal/Makefile.am,
+	  src/modules_io/gdal/makefile.linux,
+	  src/modules_io/gdal/io_gdal/MLB_Interface.cpp,
+	  src/modules_io/gdal/io_gdal/MLB_Interface.h,
+	  src/modules_io/gdal/io_gdal/Makefile.am,
+	  src/modules_io/gdal/io_gdal/gdal_import.cpp,
+	  src/modules_io/gdal/io_gdal/gdal_import.h,
+	  src/modules_io/gdal/io_gdal/io_gdal.dsp,
+	  src/modules_io/gdal/io_gdal/io_gdal.lng.txt,
+	  src/modules_io/gdal/io_gdal/io_gdal.vcproj,
+	  src/modules_io/gdal/io_gdal/makefile.linux,
+	  src/modules_io/gdal/io_gdal/makefile.mingw,
+	  src/modules_io/gdal/io_gdal/ogr_driver.cpp,
+	  src/modules_io/gdal/io_gdal/ogr_driver.h,
+	  src/modules_io/gdal/io_gdal/ogr_export.cpp,
+	  src/modules_io/gdal/io_gdal/ogr_export.h,
+	  src/modules_io/gdal/io_gdal/ogr_import.cpp,
+	  src/modules_io/gdal/io_gdal/ogr_import.h: no message
+
+2008-08-21 12:29  oconrad
+
+	* src/: modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.cpp,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  saga_core/saga_api/shape_part.cpp,
+	  modules/shapes/shapes_tools/shapes_buffer.cpp,
+	  saga_core/saga_api/shape_polygon.cpp: no message
+
+2008-08-19 12:00  oconrad
+
+	* src/modules/shapes/shapes_grid/: Grid_Polygon_Clip.cpp,
+	  Grid_Statistics_AddTo_Polygon.cpp: no message
+
+2008-07-25 15:55  oconrad
+
+	* src/modules/shapes/shapes_polygons/: Polygon_Intersection.cpp,
+	  Polygon_Intersection.h: no message
+
+2008-07-24 14:10  oconrad
+
+	* src/modules_io/makefile.linux: no message
+
+2008-07-24 13:53  oconrad
+
+	*
+	  src/modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp:
+	  no message
+
+2008-07-23 19:12  oconrad
+
+	* src/modules_io/table/io_table_odbc/makefile.linux: [no log
+	  message]
+
+2008-07-23 18:54  oconrad
+
+	* configure.in, src/modules_io/Makefile.am: [no log message]
+
+2008-07-22 12:42  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/:
+	  ta_profiles/Grid_Profile.cpp, ta_profiles/Grid_Profile.h,
+	  ta_profiles/Grid_Swath_Profile.cpp,
+	  ta_profiles/Grid_Swath_Profile.h, ta_channels/Helper.cpp,
+	  ta_channels/Strahler.cpp: no message
+
+2008-07-21 12:12  oconrad
+
+	* src/saga_core/saga_gui/parameters_control.cpp: no message
+
+2008-07-21 11:44  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_morphometry/:
+	  ta_morphometry.dsp, ta_morphometry.vcproj: no message
+
+2008-07-21 11:31  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_morphometry/:
+	  MLB_Interface.cpp, Makefile.am, makefile.linux, makefile.mingw,
+	  mass_balance_index.cpp, mass_balance_index.h: no message
+
+2008-07-18 15:11  oconrad
+
+	* src/: modules_io/table/io_table_odbc/Get_Connection.cpp,
+	  modules_io/table/io_table_odbc/Get_Connection.h,
+	  modules_io/table/io_table_odbc/Get_SQLTable.cpp,
+	  modules_io/table/io_table_odbc/Get_SQLTable.h,
+	  modules_io/table/io_table_odbc/Get_Table.cpp,
+	  modules_io/table/io_table_odbc/Get_Table.h,
+	  modules_io/table/io_table_odbc/MLB_Interface.cpp,
+	  modules_io/table/io_table_odbc/Makefile.am,
+	  modules_io/table/io_table_odbc/io_table_odbc.dsp,
+	  modules_io/table/io_table_odbc/io_table_odbc.vcproj,
+	  modules_io/table/io_table_odbc/makefile.linux,
+	  modules_io/table/io_table_odbc/makefile.mingw,
+	  modules_io/table/io_table_odbc/odbc.cpp,
+	  modules_io/table/io_table_odbc/odbc.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  saga_core/saga_api/module.h, saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h,
+	  modules/shapes/shapes_points/shapes_points.vcproj,
+	  saga_core/saga_gui/saga.cpp, saga_core/saga_gui/wksp_module.cpp:
+	  no message
+
+2008-07-18 14:12  oconrad
+
+	* src/: modules_io/grid/io_grid_image/specs_makefile.linux,
+	  modules_io/grid/io_grid_image/specs_makefile.mingw,
+	  modules_io/table/io_table_odbc/specs_makefile.linux,
+	  modules_io/table/io_table_odbc/specs_makefile.mingw,
+	  modules_projection/pj_geotrans/pj_geotrans/specs_makefile.linux,
+	  modules_projection/pj_geotrans/pj_geotrans/specs_makefile.mingw,
+	  modules_projection/pj_proj4/pj_proj4/specs_makefile.linux,
+	  modules_projection/pj_proj4/pj_proj4/specs_makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/specs_makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/specs_makefile.mingw:
+	  no message
+
+2008-07-16 14:07  oconrad
+
+	* src/modules/shapes/shapes_tools/TransformShapes.cpp: no message
+
+2008-07-16 13:47  oconrad
+
+	* src/modules/shapes/: shapes_points/Clip_Points.cpp,
+	  shapes_points/Clip_Points.h, shapes_points/MLB_Interface.cpp,
+	  shapes_points/Makefile.am, shapes_points/makefile.linux,
+	  shapes_points/makefile.mingw, shapes_points/shapes_points.dsp,
+	  shapes_tools/TransformShapes.cpp, shapes_tools/TransformShapes.h:
+	  no message
+
+2008-07-15 16:55  oconrad
+
+	* src/: modules/table/table_calculus/Fit.cpp,
+	  modules_io/shapes/io_shapes_dxf/dxflib/dl_writer.h,
+	  saga_core/saga_api/grid.cpp: [no log message]
+
+2008-07-09 14:17  oconrad
+
+	* src/saga_core/saga_gui/wksp_base_control.cpp: [no log message]
+
+2008-06-26 15:18  oconrad
+
+	* src/: modules/grid/grid_analysis/MLB_Interface.cpp,
+	  modules/grid/grid_analysis/Makefile.am,
+	  modules/grid/grid_analysis/fragmentation_base.cpp,
+	  modules/grid/grid_analysis/fragmentation_base.h,
+	  modules/grid/grid_analysis/fragmentation_classify.cpp,
+	  modules/grid/grid_analysis/fragmentation_classify.h,
+	  modules/grid/grid_analysis/grid_analysis.dsp,
+	  modules/grid/grid_analysis/grid_analysis.vcproj,
+	  modules/grid/grid_analysis/makefile.linux,
+	  modules/grid/grid_analysis/makefile.mingw,
+	  modules/grid/grid_analysis/fragmentation_resampling.cpp,
+	  modules/grid/grid_analysis/fragmentation_resampling.h,
+	  modules/grid/grid_analysis/fragmentation_standard.cpp,
+	  modules/grid/grid_analysis/fragmentation_standard.h,
+	  modules/grid/grid_analysis/grid_pyramid.cpp,
+	  modules/grid/grid_analysis/grid_pyramid.h,
+	  modules/shapes/shapes_lines/Lines_From_Points.cpp,
+	  modules/shapes/shapes_lines/Lines_From_Points.h,
+	  modules/shapes/shapes_lines/MLB_Interface.cpp,
+	  modules/shapes/shapes_lines/Makefile.am,
+	  modules/shapes/shapes_lines/makefile.linux,
+	  modules/shapes/shapes_lines/makefile.mingw,
+	  modules/shapes/shapes_lines/shapes_lines.dsp,
+	  modules/shapes/shapes_lines/shapes_lines.vcproj,
+	  modules/shapes/shapes_polygons/MLB_Interface.cpp,
+	  modules/shapes/shapes_polygons/Makefile.am,
+	  modules/shapes/shapes_polygons/makefile.linux,
+	  modules/shapes/shapes_polygons/makefile.mingw,
+	  modules/shapes/shapes_polygons/shape_index.cpp,
+	  modules/shapes/shapes_polygons/shape_index.h,
+	  modules/shapes/shapes_polygons/shapes_polygons.dsp,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcproj,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h, saga_core/saga_api/shapes.cpp,
+	  saga_core/saga_api/shapes.h, saga_core/saga_api/table_value.h: no
+	  message
+
+2008-06-06 12:02  oconrad
+
+	* src/saga_core/saga_gui/: active_history.cpp, active_history.h: no
+	  message
+
+2008-06-06 10:37  oconrad
+
+	* src/saga_core/saga_gui/: makefile.linux, makefile.mingw: [no log
+	  message]
+
+2008-06-06 10:18  oconrad
+
+	* src/saga_core/saga_gui/active_history.cpp: [no log message]
+
+2008-06-06 10:10  oconrad
+
+	* src/saga_core/saga_api/makefile.linux: [no log message]
+
+2008-06-05 18:05  oconrad
+
+	* src/saga_core/saga_gui/saga_gui.vcproj: no message
+
+2008-06-05 17:57  oconrad
+
+	* src/saga_core/saga_gui/: active_history.cpp, active_history.h: no
+	  message
+
+2008-06-05 17:46  oconrad
+
+	* src/saga_core/saga_gui/: Makefile.am, active.cpp, active.h,
+	  makefile.linux, makefile.mingw, res_controls.h, res_images.h,
+	  saga_gui.dsp, wksp_grid.cpp: no message
+
+2008-06-05 11:05  oconrad
+
+	* src/saga_core/saga_gui/: wksp_base_control.cpp, wksp_grid.cpp: no
+	  message
+
+2008-05-30 17:50  oconrad
+
+	* src/saga_core/saga_gui/wksp_grid.cpp: no message
+
+2008-05-29 15:15  oconrad
+
+	* src/saga_core/saga_gui/: res_commands.cpp, res_commands.h,
+	  wksp_base_control.cpp, wksp_base_control.h: no message
+
+2008-05-28 17:33  oconrad
+
+	* src/saga_core/saga_gui/view_map_control.cpp: no message
+
+2008-05-28 17:22  oconrad
+
+	* src/saga_core/saga_gui/: view_map_control.cpp,
+	  wksp_layer_classify.cpp: no message
+
+2008-05-26 13:12  oconrad
+
+	* src/saga_core/saga_gui/: wksp_base_control.cpp,
+	  wksp_base_control.h, wksp_data_layers.cpp: no message
+
+2008-05-23 12:13  oconrad
+
+	* src/saga_core/saga_gui/: view_scatterplot.cpp,
+	  view_scatterplot.h: no message
+
+2008-05-22 17:34  oconrad
+
+	* src/saga_core/saga_gui/view_histogram.cpp: no message
+
+2008-05-22 16:48  oconrad
+
+	* src/saga_core/saga_gui/: view_map_control.cpp,
+	  view_map_control.h: no message
+
+2008-05-22 15:34  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.h: no message
+
+2008-05-22 14:19  oconrad
+
+	* src/: saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_base_control.h,
+	  saga_core/saga_gui/wksp_data_layers.cpp,
+	  modules/shapes/shapes_tools/Shapes_Merge.cpp: no message
+
+2008-05-21 15:49  oconrad
+
+	* src/saga_core/saga_gui/: wksp_grid.cpp, wksp_grid.h,
+	  wksp_shapes.cpp: no message
+
+2008-05-21 14:35  oconrad
+
+	* src/modules/grid/grid_spline/grid_spline.vcproj: no message
+
+2008-05-21 14:15  oconrad
+
+	* src/modules/grid/grid_spline/: Gridding_Spline_Base.cpp,
+	  grid_spline.dsp, Gridding_Spline_Base.h,
+	  Gridding_Spline_MBA_Grid.cpp, Gridding_Spline_MBA_Grid.h,
+	  Gridding_Spline_TPS_Global.cpp, Gridding_Spline_TPS_Global.h,
+	  MLB_Interface.cpp, Makefile.am, makefile.linux, makefile.mingw:
+	  no message
+
+2008-05-21 12:46  oconrad
+
+	* src/saga_core/saga_gui/: view_table_control.cpp,
+	  wksp_shapes_edit.cpp: no message
+
+2008-05-21 12:19  oconrad
+
+	* src/saga_core/saga_gui/: res_commands.cpp, view_table.cpp,
+	  view_table_control.cpp, view_table_control.h: no message
+
+2008-05-14 12:47  oconrad
+
+	* src/saga_core/saga_api/table_io.cpp: no message
+
+2008-05-14 11:14  oconrad
+
+	*
+	  src/modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj:
+	  no message
+
+2008-05-13 23:58  oconrad
+
+	* src/modules_io/grid/io_grid/erdas_lan.cpp: no message
+
+2008-05-13 11:08  oconrad
+
+	*
+	  src/modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.linux:
+	  no message
+
+2008-05-09 17:18  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_lighting/:
+	  ta_lighting.dsp, makefile.mingw, Makefile.am: [no log message]
+
+2008-05-09 17:12  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_lighting/:
+	  grid_pyramid.h, grid_pyramid.cpp, MLB_Interface.cpp: [no log
+	  message]
+
+2008-05-09 17:08  oconrad
+
+	*
+	  src/modules_terrain_analysis/terrain_analysis/ta_lighting/view_shed.cpp:
+	  [no log message]
+
+2008-05-09 17:05  oconrad
+
+	*
+	  src/modules_terrain_analysis/terrain_analysis/ta_lighting/view_shed.h:
+	  [no log message]
+
+2008-05-09 10:41  oconrad
+
+	* src/: saga_core/saga_api/api_string.cpp,
+	  saga_core/saga_api/api_translator.cpp,
+	  saga_core/saga_api/compatibility.h,
+	  saga_core/saga_api/mat_matrix.cpp,
+	  saga_core/saga_api/mat_tools.h, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/table.cpp, saga_core/saga_api/table.h,
+	  saga_core/saga_api/table_dbase.cpp,
+	  saga_core/saga_api/table_io.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Union.cpp,
+	  modules/table/table_tools/Table_Enumerate.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp: no message
+
+2008-05-06 18:35  oconrad
+
+	* src/modules/grid/grid_gridding/Interpolation_InverseDistance.cpp:
+	  no message
+
+2008-05-05 17:28  oconrad
+
+	* src/: saga_core/saga_api/table.cpp,
+	  modules/table/table_tools/Table_Enumerate.cpp,
+	  saga_core/saga_api/table.h,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_table.cpp: no message
+
+2008-04-24 18:04  oconrad
+
+	* src/modules/shapes/shapes_tools/: shapes_buffer.cpp,
+	  shapes_buffer.h: no message
+
+2008-04-24 13:07  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.h,
+	  saga_core/saga_api/table.cpp, saga_core/saga_api/table.h: no
+	  message
+
+2008-04-22 11:43  oconrad
+
+	* src/modules/shapes/: shapes_polygons/Makefile.am,
+	  shapes_polygons/makefile.linux,
+	  shapes_polygons/Polygon_Intersection.cpp,
+	  shapes_polygons/makefile.mingw,
+	  shapes_polygons/shapes_polygons.dsp,
+	  shapes_polygons/shapes_polygons.vcproj,
+	  shapes_tools/shapes_buffer.cpp, shapes_tools/shapes_buffer.h: no
+	  message
+
+2008-04-18 16:49  oconrad
+
+	* src/modules/shapes/shapes_polygons/: MLB_Interface.cpp,
+	  Polygon_Union.cpp, Polygon_Union.h: no message
+
+2008-04-18 16:40  oconrad
+
+	* src/: modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.h,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.h,
+	  saga_core/saga_api/shape.cpp, saga_core/saga_api/shape_part.cpp,
+	  saga_core/saga_api/shape_point.cpp,
+	  saga_core/saga_api/shape_points.cpp,
+	  saga_core/saga_api/shape_polygon.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_io.cpp: no message
+
+2008-04-16 18:21  oconrad
+
+	* src/: modules/shapes/shapes_polygons/Makefile.am,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.h,
+	  modules/shapes/shapes_polygons/makefile.linux,
+	  modules/shapes/shapes_polygons/makefile.mingw,
+	  modules/shapes/shapes_polygons/shapes_polygons.dsp,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcproj,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/shapes/shapes_tools/ShapeSelector.cpp,
+	  modules/shapes/shapes_tools/ShapeSelector.h,
+	  modules/shapes/shapes_tools/makefile.linux,
+	  modules/shapes/shapes_tools/makefile.mingw,
+	  modules/shapes/shapes_tools/shapes_buffer.cpp,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  modules/shapes/shapes_polygons/Polygon_Intersection_GPC.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection_GPC.h,
+	  modules/shapes/shapes_tools/Intersection_GPC.c,
+	  modules/shapes/shapes_tools/Intersection_GPC.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Intersection_GPC.c,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Intersection_GPC.h,
+	  modules/shapes/shapes_polygons/Polygon_Clipper.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Clipper.h,
+	  modules/shapes/shapes_tools/Polygon_Clipper.cpp,
+	  modules/shapes/shapes_tools/Polygon_Clipper.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Polygon_Clipper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Polygon_Clipper.h:
+	  no message
+
+2008-04-09 18:28  oconrad
+
+	* src/: saga_core/saga_api/grid.cpp, saga_core/saga_api/grid.h,
+	  saga_core/saga_api/grid_system.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.h: no message
+
+2008-04-04 17:29  oconrad
+
+	* src/modules/grid/grid_filter/: Filter_LoG.cpp, Filter_LoG.h: no
+	  message
+
+2008-04-03 12:57  oconrad
+
+	* src/: saga_core/saga_api/Makefile.am,
+	  saga_core/saga_api/geo_tools.h,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_api/shape_line.cpp,
+	  saga_core/saga_api/shape_part.cpp,
+	  saga_core/saga_api/shape_point.cpp,
+	  saga_core/saga_api/shape_points.cpp,
+	  saga_core/saga_api/shape_polygon.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj,
+	  saga_core/saga_gui/view_map_control.cpp: no message
+
+2008-03-12 13:56  oconrad
+
+	* src/modules_geostatistics/geostatistics/geostatistics_kriging/:
+	  _kriging_universal.cpp, _kriging_universal_global.cpp,
+	  kriging_universal.cpp, kriging_universal_global.cpp: no message
+
+2008-03-12 13:23  oconrad
+
+	* src/modules_geostatistics/geostatistics/geostatistics_kriging/:
+	  _kriging_universal.cpp, _kriging_universal_global.cpp,
+	  kriging_ordinary.cpp, kriging_ordinary_global.cpp: no message
+
+2008-03-10 12:41  oconrad
+
+	*
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/makefile.mingw:
+	  no message
+
+2008-03-10 12:36  oconrad
+
+	* src/saga_core/: saga_gui/dlg_about.cpp, saga_gui/project.cpp,
+	  saga_gui/project.h, saga_gui/view_map.cpp,
+	  saga_gui/wksp_base_control.cpp, saga_gui/wksp_base_item.cpp,
+	  saga_gui/wksp_base_item.h, saga_gui/wksp_data_layers.cpp,
+	  saga_gui/wksp_data_manager.cpp, saga_gui/wksp_data_manager.h,
+	  saga_gui/wksp_map.cpp, saga_api/doc_pdf.cpp: no message
+
+2008-03-07 18:19  oconrad
+
+	* src/: modules/grid/grid_analysis/grid_analysis.dsp,
+	  modules/grid/grid_calculus/grid_calculus.dsp,
+	  modules/grid/grid_discretisation/grid_discretisation.dsp,
+	  modules/grid/grid_filter/grid_filter.dsp,
+	  modules/grid/grid_gridding/grid_gridding.dsp,
+	  modules/grid/grid_spline/grid_spline.dsp,
+	  modules/grid/grid_tools/grid_tools.dsp,
+	  modules/grid/grid_visualisation/grid_visualisation.dsp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.dsp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.dsp,
+	  saga_core/saga_api/api_translator.cpp,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.dsp,
+	  modules_io/gps/io_gps/io_gps.dsp,
+	  modules_io/grid/io_grid/io_grid.dsp,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.dsp,
+	  modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  modules_io/shapes/io_shapes/io_shapes.dsp,
+	  modules_io/shapes/io_shapes_dxf/io_shapes_dxf.dsp,
+	  modules_io/table/io_table_odbc/io_table_odbc.dsp,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.dsp,
+	  modules/shapes/shapes_grid/shapes_grid.dsp,
+	  modules/shapes/shapes_lines/shapes_lines.dsp,
+	  modules/shapes/shapes_lines_ex/shapes_lines_ex.dsp,
+	  modules/shapes/shapes_points/shapes_points.dsp,
+	  modules/shapes/shapes_polygons/shapes_polygons.dsp,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.dsp,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.dsp,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.dsp,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.dsp,
+	  modules_recreations/recreations/recreations_games/recreations_games.dsp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.dsp,
+	  modules/table/table_calculus/table_calculus.dsp,
+	  modules/table/table_tools/table_tools.dsp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.dsp,
+	  modules_simulation/fire/sim_fire_spreading/sim_fire_spreading.dsp,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.dsp,
+	  modules/tin/tin_tools/tin_tools.dsp: no message
+
+2008-03-07 17:56  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.ger.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.dsp,
+	  saga_core/saga_gui/saga_gui.dsp: no message
+
+2008-03-07 17:36  oconrad
+
+	* src/: saga_core/saga_gui/res/saga.ger.txt,
+	  saga_core/saga_gui/res/saga.lng.txt,
+	  saga_core/saga_gui/res/saga_eng.txt,
+	  saga_core/saga_gui/res/saga_ger.txt,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.lng.txt,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.ger,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.ger.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.lng.txt,
+	  saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_translator.cpp,
+	  saga_core/saga_api/shapes_io.cpp,
+	  modules/grid/grid_analysis/grid_analysis.lng.txt,
+	  modules/grid/grid_calculus/grid_calculus.lng.txt,
+	  modules/grid/grid_discretisation/grid_discretisation.lng.txt,
+	  modules/grid/grid_filter/grid_filter.lng.txt,
+	  modules/grid/grid_gridding/grid_gridding.lng.txt,
+	  modules/grid/grid_spline/grid_spline.lng.txt,
+	  modules/grid/grid_tools/grid_tools.lng.txt,
+	  modules/grid/grid_visualisation/grid_visualisation.lng.txt,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.lng.txt,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.lng.txt,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.lng.txt,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.lng.txt,
+	  modules_io/gps/io_gps/io_gps.lng.txt,
+	  modules_io/grid/io_grid/io_grid.lng.txt,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.lng.txt,
+	  modules_io/grid/io_grid_image/io_grid_image.lng.txt,
+	  modules_io/shapes/io_shapes/io_shapes.lng.txt,
+	  modules_io/shapes/io_shapes_dxf/io_shapes_dxf.lng.txt,
+	  modules_io/table/io_table_odbc/io_table_odbc.lng.txt,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.lng.txt,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.lng.txt,
+	  modules/shapes/shapes_grid/shapes_grid.lng.txt,
+	  modules/shapes/shapes_lines/shapes_lines.lng.txt,
+	  modules/shapes/shapes_lines_ex/shapes_lines_ex.lng.txt,
+	  modules/shapes/shapes_points/shapes_points.lng.txt,
+	  modules/shapes/shapes_polygons/shapes_polygons.lng.txt,
+	  modules/shapes/shapes_tools/shapes_tools.lng.txt,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.lng.txt,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.lng.txt,
+	  modules_recreations/recreations/recreations_games/recreations_games.lng.txt,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.lng.txt,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.lng.txt,
+	  modules_simulation/fire/sim_fire_spreading/sim_fire_spreading.lng.txt,
+	  modules/table/table_calculus/table_calculus.lng.txt,
+	  modules/table/table_tools/table_tools.lng.txt,
+	  modules/tin/tin_tools/tin_tools.lng.txt,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.lng.txt,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.lng.txt:
+	  no message
+
+2008-03-07 16:48  oconrad
+
+	* src/saga.dsw: no message
+
+2008-03-07 16:30  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  saga.bat, saga.dsw, saga.sln: no message
+
+2008-03-07 16:15  oconrad
+
+	*
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/MLB_Interface.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_base.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_base.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_ordinary.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_ordinary.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_ordinary_global.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_ordinary_global.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_universal.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_universal.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_universal_global.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/_kriging_universal_global.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.dsp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/kriging_base.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/kriging_ordinary.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/kriging_ordinary.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/makefile.linux,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/makefile.mingw,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/kriging_ordinary_global.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/kriging_ordinary_global.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal_global.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/kriging_universal_global.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/sgui_diagram.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/sgui_diagram.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/sgui_dialog.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/sgui_dialog.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/sgui_helper.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/sgui_helper.h,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/variogram_dialog.cpp,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/variogram_dialog.h,
+	  src/modules_geostatistics/geostatistics/Makefile.am,
+	  src/modules_geostatistics/geostatistics/makefile.linux,
+	  configure.in: no message
+
+2008-03-07 15:38  oconrad
+
+	* src/modules_geostatistics/geostatistics/geostatistics_kriging/:
+	  Kriging_Base.cpp, Kriging_Base.h, Kriging_Ordinary.cpp,
+	  Kriging_Ordinary.h, Kriging_Ordinary_Global.cpp,
+	  Kriging_Ordinary_Global.h, Kriging_Universal.cpp,
+	  Kriging_Universal.h, Kriging_Universal_Global.cpp,
+	  Kriging_Universal_Global.h: no message
+
+2008-03-07 15:32  oconrad
+
+	* src/: modules_io/grid/io_grid/bmp_export.cpp,
+	  modules_io/grid/io_grid/erdas_lan.cpp,
+	  modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  modules_io/grid/io_grid/grid_table.cpp,
+	  modules_io/grid/io_grid/mola.cpp,
+	  modules_io/grid/io_grid/raw.cpp,
+	  modules_io/grid/io_grid/srtm30.cpp,
+	  modules_io/shapes/io_shapes/atlas_bna.cpp,
+	  modules_io/shapes/io_shapes/generate.cpp,
+	  modules_io/shapes/io_shapes/gstat.cpp,
+	  modules_io/shapes/io_shapes/surfer_bln.cpp,
+	  modules_io/shapes/io_shapes/wasp_map.cpp,
+	  modules_io/shapes/io_shapes/xyz.cpp,
+	  modules_recreations/recreations/recreations_fractals/Bifurcation.cpp,
+	  modules_recreations/recreations/recreations_fractals/Gaussian_Landscapes.cpp,
+	  modules_recreations/recreations/recreations_fractals/Grid_FractalDimension.cpp,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.cpp,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.cpp,
+	  modules_io/grid/io_grid/surfer.cpp,
+	  modules_io/grid/io_grid/usgs_srtm.cpp,
+	  modules_io/grid/io_grid/xyz.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/CellBalance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaDownslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveUp.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SAGA_Wetness_Index.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp,
+	  saga_core/saga_cmd/callback.cpp, saga_core/saga_cmd/saga_cmd.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Shapes.cpp,
+	  modules_projection/pj_georeference/pj_georeference/georef_grid_move.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/D8_Flow_Analysis.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Curvature_Classification.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Hypsometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Morphometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/SurfaceSpecificPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/distance_gradient.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/mrvbf.cpp,
+	  saga_core/saga_gui/dlg_about.cpp,
+	  saga_core/saga_gui/dlg_about_logo.cpp,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.cpp,
+	  modules_io/shapes/io_shapes_dxf/dxf_import.cpp,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.cpp,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_dialogs.cpp,
+	  saga_core/saga_gui/wksp_base_item.cpp,
+	  saga_core/saga_gui/wksp_map.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  modules/grid/grid_filter/Filter.cpp,
+	  modules/grid/grid_filter/Filter_3x3.cpp,
+	  modules/grid/grid_visualisation/Grid_3D_Image.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Blend.cpp,
+	  modules_io/table/io_table_odbc/Get_Table.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp,
+	  modules/grid/grid_discretisation/Grid_FastSegments.cpp,
+	  modules/grid/grid_discretisation/Grid_Segmentation.cpp,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.cpp,
+	  modules/grid/grid_tools/Grid_Completion.cpp,
+	  modules/grid/grid_tools/Grid_Cut.cpp,
+	  modules/grid/grid_tools/Grid_Fill.cpp,
+	  modules/grid/grid_tools/Grid_Gaps.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Rotate.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Triangle.cpp,
+	  modules/grid/grid_visualisation/Grid_Colors_Fit.cpp,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.cpp,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Contour.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Gradient.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points_Random.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp,
+	  modules/grid/grid_calculus/Grid_Geometric_Figures.cpp,
+	  modules/grid/grid_calculus/Grid_Normalise.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Field.cpp,
+	  modules/grid/grid_tools/Grid_Gaps_OneCell.cpp,
+	  modules/grid/grid_tools/Grid_Merge.cpp,
+	  modules/grid/grid_tools/Grid_Orientation.cpp,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace.cpp,
+	  modules/grid/grid_tools/Grid_Value_Request.cpp,
+	  modules/grid/grid_tools/Grid_Value_Type.cpp,
+	  modules_io/grid/io_grid_image/grid_export.cpp,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile_From_Lines.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.cpp,
+	  modules/grid/grid_calculus/Grid_Volume.cpp,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_BA.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_MBA.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Global.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Local.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_TIN.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance_Radius.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_01.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_02.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/HillShade.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Visibility_Point.cpp,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.cpp,
+	  modules/grid/grid_gridding/Interpolation_Triangulation.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal_Global.cpp,
+	  modules/shapes/shapes_lines/Lines_From_Polygons.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Centroids.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_polygons/Polygons_From_Lines.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Life.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.cpp,
+	  modules_simulation/fire/Makefile.am,
+	  modules_simulation/fire/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Eliminator.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.cpp,
+	  saga_core/saga_api/mat_formula.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  modules/shapes/shapes_points/remove_duplicates.cpp,
+	  modules/shapes/shapes_tools/Shapes_Assign_Table.cpp,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.cpp,
+	  modules/shapes/shapes_tools/Shapes_Report.cpp,
+	  modules/shapes/shapes_tools/shapes_buffer.cpp,
+	  modules/shapes/shapes_tools/shapes_cut.cpp,
+	  modules/shapes/shapes_tools/shapes_cut_interactive.cpp,
+	  modules/shapes/shapes_tools/shapes_split.cpp,
+	  modules/shapes/shapes_tools/shapes_split_randomly.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.cpp,
+	  saga_core/saga_gui/res/saga_eng.txt,
+	  saga_core/saga_gui/res/saga_ger.txt,
+	  modules/table/table_tools/Table_Create_Empty.cpp,
+	  modules/table/table_calculus/Table_Trend.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Trace.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.cpp,
+	  modules/tin/tin_tools/TIN_From_Shapes.cpp,
+	  modules/tin/tin_tools/TIN_Gradient.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp,
+	  modules_template/template/template/Template.cpp,
+	  modules_simulation/fire/sim_fire_spreading/Forecasting.cpp,
+	  modules_simulation/fire/sim_fire_spreading/Forecasting.h,
+	  modules_simulation/fire/sim_fire_spreading/MLB_Interface.cpp,
+	  modules_simulation/fire/sim_fire_spreading/MLB_Interface.h,
+	  modules_simulation/fire/sim_fire_spreading/Makefile.am,
+	  modules_simulation/fire/sim_fire_spreading/fireLib.c,
+	  modules_simulation/fire/sim_fire_spreading/fireLib.h,
+	  modules_simulation/fire/sim_fire_spreading/makefile.linux,
+	  modules_simulation/fire/sim_fire_spreading/makefile.mingw,
+	  modules_simulation/fire/sim_fire_spreading/Pt.h,
+	  modules_simulation/fire/sim_fire_spreading/Simulate.cpp,
+	  modules_simulation/fire/sim_fire_spreading/Simulate.h,
+	  modules_simulation/fire/sim_fire_spreading/SimulateVariableWind.cpp,
+	  modules_simulation/fire/sim_fire_spreading/SimulateVariableWind.h,
+	  modules_simulation/fire/sim_fire_spreading/sim_fire_spreading.dsp,
+	  modules_simulation/fire/sim_fire_spreading/sim_fire_spreading.vcproj:
+	  no message
+
+2008-03-06 17:26  oconrad
+
+	* src/saga_core/saga_api/api_translator.cpp: no message
+
+2008-03-06 16:47  oconrad
+
+	* src/: saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_file.cpp,
+	  saga_core/saga_api/api_string.cpp,
+	  saga_core/saga_api/api_translator.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks_WL.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks_WL_XXL.cpp,
+	  saga_core/saga_cmd/saga_cmd.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.ger,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/wksp_shapes_polygon.cpp,
+	  saga_core/saga_gui/wksp_tin.cpp: no message
+
+2008-03-05 10:42  oconrad
+
+	* src/saga_core/saga_api/doc_pdf.cpp: [no log message]
+
+2008-03-05 10:24  oconrad
+
+	* src/saga_core/saga_gui/wksp.cpp: [no log message]
+
+2008-02-28 17:19  oconrad
+
+	* src/: saga_core/saga_gui/active.cpp,
+	  saga_core/saga_gui/active_legend.cpp,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_data_layers.cpp,
+	  saga_core/saga_gui/wksp_shapes_edit.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.cpp,
+	  saga_core/saga_gui/wksp_shapes_type.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_io.cpp, saga_core/saga_api/table.cpp,
+	  saga_core/saga_api/table.h, saga_core/saga_api/table_io.cpp: no
+	  message
+
+2008-02-27 18:05  oconrad
+
+	* src/: saga_core/saga_gui/dlg_about.cpp,
+	  saga_core/saga_gui/wksp_grid_system.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_ProfileFromPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.dsp,
+	  saga_core/saga_api/doc_pdf.cpp, saga_core/saga_api/doc_pdf.h,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/saga_api.dsp: no message
+
+2008-02-26 17:39  oconrad
+
+	* src/saga_core/: saga_cmd/callback.cpp, saga_cmd/saga_cmd.cpp,
+	  saga_gui/helper.cpp: no message
+
+2008-02-26 15:31  oconrad
+
+	* src/modules_io/shapes/: Makefile.am, makefile.linux: [no log
+	  message]
+
+2008-02-25 16:42  oconrad
+
+	* src/:
+	  modules_projection/pj_georeference/pj_georeference/georef_grid_move.cpp,
+	  saga_core/saga_api/module.cpp, saga_core/saga_api/module.h,
+	  modules/shapes/shapes_tools/shapes_split_randomly.cpp,
+	  saga_core/saga_gui/wksp_module.cpp,
+	  saga_core/saga_gui/callback.cpp,
+	  modules/shapes/shapes_tools/shapes_buffer.cpp,
+	  modules/shapes/shapes_tools/shapes_buffer.h: no message
+
+2008-02-22 16:31  oconrad
+
+	* src/: saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/module.cpp,
+	  saga_core/saga_api/module.h, saga_core/saga_api/shapes.cpp,
+	  saga_core/saga_api/shapes.h, saga_core/saga_gui/callback.cpp,
+	  saga_core/saga_gui/wksp.cpp,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_data_manager.h,
+	  saga_core/saga_gui/wksp_grid_manager.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.h,
+	  saga_core/saga_gui/wksp_shapes_manager.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.h,
+	  saga_core/saga_gui/wksp_tin_manager.cpp,
+	  saga_core/saga_gui/wksp_tin_manager.h,
+	  modules/shapes/shapes_tools/shapes_buffer.cpp,
+	  modules/shapes/shapes_tools/shapes_buffer.h,
+	  modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.cpp:
+	  no message
+
+2008-02-15 15:34  oconrad
+
+	* src/modules/grid/grid_visualisation/Grid_Color_Triangle.cpp,
+	  src/modules/grid/grid_visualisation/Grid_Color_Triangle.h,
+	  src/modules/shapes/shapes_tools/shapes_buffer.cpp,
+	  src/modules/shapes/shapes_tools/shapes_buffer.h,
+	  src/modules_projection/pj_georeference/pj_georeference/georef_grid_move.cpp,
+	  src/modules_projection/pj_georeference/pj_georeference/georef_grid_move.h,
+	  src/saga_core/saga_gui/view_table_control.cpp,
+	  src/saga_core/saga_gui/wksp_base_control.cpp,
+	  src/saga_core/saga_gui/wksp_base_control.h,
+	  src/saga_core/saga_gui/wksp_data_control.cpp,
+	  src/saga_core/saga_gui/wksp_data_layers.cpp,
+	  src/saga_core/saga_gui/wksp_data_layers.h,
+	  src/saga_core/saga_gui/wksp_map_buttons.cpp, src/saga.sln,
+	  configure.in: no message
+
+2008-02-15 15:30  oconrad
+
+	* src/: saga_core/saga_api/api_string.cpp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.vcproj,
+	  modules/grid/grid_analysis/grid_analysis.vcproj,
+	  modules/grid/grid_calculus/grid_calculus.vcproj,
+	  modules/grid/grid_discretisation/grid_discretisation.vcproj,
+	  modules/grid/grid_filter/grid_filter.vcproj,
+	  modules/grid/grid_gridding/grid_gridding.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcproj,
+	  saga_core/saga_gui/dlg_about.cpp,
+	  modules/grid/grid_spline/grid_spline.vcproj,
+	  modules/grid/grid_tools/grid_tools.vcproj,
+	  modules/grid/grid_visualisation/Makefile.am,
+	  modules/grid/grid_visualisation/grid_visualisation.dsp,
+	  modules/grid/grid_visualisation/grid_visualisation.vcproj,
+	  modules/grid/grid_visualisation/makefile.linux,
+	  modules/shapes/shapes_points/Makefile.am,
+	  modules/shapes/shapes_points/makefile.linux,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.vcproj,
+	  modules_io/gps/io_gps/io_gps.vcproj,
+	  modules_io/grid/io_grid/io_grid.vcproj,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.vcproj,
+	  modules_io/grid/io_grid_image/io_grid_image.vcproj,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes_dxf/io_shapes_dxf.vcproj,
+	  modules_io/table/io_table_odbc/io_table_odbc.vcproj,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.vcproj,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/shapes/shapes_tools/makefile.linux,
+	  modules_geostatistics/geostatistics/Makefile.am,
+	  modules_geostatistics/geostatistics/makefile.linux,
+	  modules_projection/pj_georeference/pj_georeference/Makefile.am,
+	  modules/grid/grid_visualisation/MLB_Interface.cpp,
+	  modules/grid/grid_visualisation/makefile.mingw,
+	  modules/shapes/shapes_points/makefile.mingw,
+	  modules/shapes/shapes_points/shapes_points.vcproj,
+	  modules/shapes/shapes_tools/MLB_Interface.cpp,
+	  modules/shapes/shapes_tools/makefile.mingw,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  modules_projection/pj_georeference/pj_georeference/MLB_Interface.cpp,
+	  modules_projection/pj_georeference/pj_georeference/makefile.linux,
+	  modules_projection/pj_georeference/pj_georeference/makefile.mingw,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.dsp,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.vcproj,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.vcproj,
+	  modules/shapes/shapes_grid/shapes_grid.vcproj,
+	  modules/shapes/shapes_lines/shapes_lines.vcproj,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcproj,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcproj,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.vcproj,
+	  modules_recreations/recreations/recreations_games/recreations_games.vcproj,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.vcproj,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.vcproj,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.vcproj,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_cmd/saga_cmd.vcproj,
+	  saga_core/saga_gui/saga_gui.vcproj,
+	  modules/table/table_calculus/table_calculus.vcproj,
+	  modules/table/table_tools/table_tools.vcproj,
+	  modules/tin/tin_tools/tin_tools.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj:
+	  no message
+
+2008-02-12 17:19  oconrad
+
+	* src/modules_io/grid/io_grid/xyz.cpp: no message
+
+2008-02-06 12:23  oconrad
+
+	* src/: modules/shapes/shapes_points/shapes_points.vcproj,
+	  modules_io/grid/io_grid_image/io_grid_image.vcproj,
+	  modules_io/shapes/io_shapes_dxf/io_shapes_dxf.vcproj,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.vcproj, saga.sln: no
+	  message
+
+2008-02-01 15:33  oconrad
+
+	* src/: modules_io/grid/io_grid_image/grid_export.h,
+	  modules_io/grid/io_grid_image/grid_import.h,
+	  modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  saga_core/saga_api/mat_trend.cpp, saga_core/saga_api/module.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/wksp_module_manager.cpp: no message
+
+2008-01-30 17:02  oconrad
+
+	* src/: modules/shapes/shapes_points/MLB_Interface.cpp,
+	  modules/shapes/shapes_points/remove_duplicates.cpp,
+	  modules/shapes/shapes_points/remove_duplicates.h,
+	  modules/shapes/shapes_points/shapes_points.dsp,
+	  saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_selection.cpp: no message
+
+2008-01-30 10:52  oconrad
+
+	* src/modules/shapes/shapes_tools/: shapes_split_randomly.cpp,
+	  shapes_split_randomly.h: no message
+
+2008-01-29 17:18  oconrad
+
+	* src/: modules/shapes/shapes_tools/MLB_Interface.cpp,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  saga_core/saga_api/mat_formula.cpp, saga_core/saga_api/table.cpp,
+	  saga.bat: no message
+
+2008-01-28 17:38  oconrad
+
+	* src/: modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  saga_core/saga_api/mat_trend.cpp: no message
+
+2008-01-25 18:02  oconrad
+
+	* src/: modules/table/table_calculus/Fit.cpp,
+	  modules/table/table_calculus/Table_Calculator.cpp,
+	  modules/table/table_calculus/Table_CalculatorShapes.cpp,
+	  modules/grid/grid_calculus/Grid_Calculator.cpp,
+	  modules/grid/grid_calculus/Grid_Plotter.cpp,
+	  modules/shapes/shapes_tools/QueryParser.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary_Global.cpp,
+	  saga_core/saga_api/mat_formula.cpp,
+	  saga_core/saga_api/mat_tools.h, saga_core/saga_api/mat_trend.cpp,
+	  saga.dsw: no message
+
+2008-01-24 17:16  oconrad
+
+	* src/: saga.dsw, modules/table/table_calculus/Table_Trend.cpp: no
+	  message
+
+2008-01-22 17:54  oconrad
+
+	* src/saga_core/saga_gui/: wksp_shapes.cpp, wksp_shapes_edit.cpp:
+	  no message
+
+2008-01-22 16:55  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  saga_core/saga_gui/view_scatterplot.cpp: no message
+
+2008-01-22 11:55  oconrad
+
+	* src/: saga_core/saga_api/parameters.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.h:
+	  no message
+
+2008-01-21 16:39  oconrad
+
+	* src/: saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.h,
+	  saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_selection.cpp: no message
+
+2008-01-21 09:48  oconrad
+
+	* src/saga_core/saga_gui/: wksp_layer.cpp, wksp_map.cpp,
+	  wksp_module.cpp, wksp_module_library.cpp,
+	  wksp_module_manager.cpp, wksp_table.cpp: no message
+
+2008-01-18 16:26  oconrad
+
+	* src/saga_core/saga_gui/res_commands.h: no message
+
+2008-01-18 16:19  oconrad
+
+	* src/saga_core/saga_gui/res_commands.cpp: no message
+
+2008-01-18 16:07  oconrad
+
+	* src/saga_core/saga_gui/project.cpp: no message
+
+2008-01-18 15:26  oconrad
+
+	* src/saga_core/saga_gui/info_messages.h: no message
+
+2008-01-18 15:22  oconrad
+
+	* src/saga_core/saga_gui/: helper.h, info_messages.cpp: no message
+
+2008-01-18 15:16  oconrad
+
+	* src/saga_core/saga_gui/: callback.cpp, helper.cpp: no message
+
+2008-01-18 15:10  oconrad
+
+	* src/saga_core/saga_api/tin.cpp: no message
+
+2008-01-18 15:06  oconrad
+
+	* src/saga_core/saga_api/: shapes_io.cpp, table_io.cpp: no message
+
+2008-01-18 15:01  oconrad
+
+	* src/saga_core/saga_api/: grid_io.cpp, parameters.cpp: no message
+
+2008-01-18 14:53  oconrad
+
+	* src/saga_core/saga_api/: api_callback.cpp, api_core.h: no message
+
+2008-01-16 11:12  oconrad
+
+	* src/saga_core/saga_gui/dc_helper.cpp: no message
+
+2008-01-15 11:46  oconrad
+
+	* src/saga_core/saga_gui/wksp_map_layer.cpp: no message
+
+2008-01-14 16:32  oconrad
+
+	* src/saga_core/saga_gui/wksp_module_manager.cpp: no message
+
+2008-01-11 15:19  oconrad
+
+	* src/saga_core/: saga_api/api_string.cpp, saga_api/saga_api.h,
+	  saga_api/table_value.h, saga_gui/wksp_shapes_point.cpp,
+	  saga_gui/wksp_shapes_points.cpp,
+	  saga_gui/wksp_shapes_polygon.cpp: no message
+
+2008-01-11 13:37  oconrad
+
+	* src/:
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  saga_core/saga_gui/saga.cpp,
+	  saga_core/saga_gui/view_scatterplot.cpp,
+	  saga_core/saga_gui/view_table_diagram.cpp,
+	  saga_core/saga_gui/wksp.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_module_manager.cpp: no message
+
+2008-01-10 17:48  oconrad
+
+	* src/saga_core/saga_gui/: wksp_base_item.cpp, wksp_map_dc.cpp,
+	  wksp_map_dc.h, wksp_shapes.cpp: no message
+
+2008-01-09 18:23  oconrad
+
+	* src/: saga.dsw, saga_core/saga_api/shapes_io.cpp: no message
+
+2008-01-08 17:47  oconrad
+
+	* src/saga_core/saga_gui/: res_commands.cpp, res_commands.h,
+	  res_images.cpp, res_images.h, wksp.cpp, wksp_base_manager.cpp,
+	  wksp_base_manager.h, wksp_data_layers.cpp, wksp_data_layers.h,
+	  wksp_grid.cpp, wksp_map.cpp, wksp_map_buttons.cpp,
+	  wksp_map_buttons.h, wksp_map_control.cpp, wksp_map_control.h,
+	  wksp_map_layer.cpp, wksp_map_layer.h,
+	  res/xpm/nb_wksp_thumbnails.xpm, res/xpm/nb_wksp_treeview.xpm: no
+	  message
+
+2008-01-07 18:09  oconrad
+
+	* src/saga_core/saga_gui/: wksp.cpp, wksp_data_layers.cpp,
+	  wksp_map_buttons.cpp: no message
+
+2008-01-04 16:25  oconrad
+
+	* src/saga_core/saga_gui/: project.cpp, res_commands.cpp,
+	  res_commands.h, res_images.cpp, res_images.h, view_map.cpp,
+	  view_map.h, wksp_map.cpp, wksp_map.h,
+	  res/xpm/tb_map_zoom_next.xpm, saga_gui.dsp: no message
+
+2008-01-03 10:45  oconrad
+
+	*
+	  src/modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp:
+	  no message
+
+2007-11-21 18:16  oconrad
+
+	* src/:
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Morphometry.cpp:
+	  no message
+
+2007-11-14 12:54  oconrad
+
+	* src/saga_core/saga_cmd/module_library.cpp: no message
+
+2007-11-13 18:23  oconrad
+
+	* src/saga_core/: saga_api/dataobject.cpp,
+	  saga_api/grid_operation.cpp, saga_api/grid_system.cpp,
+	  saga_api/module_library.cpp, saga_api/module_library.h,
+	  saga_cmd/module_library.cpp, saga_gui/res_commands.cpp,
+	  saga_gui/res_commands.h, saga_gui/saga_gui.dsp,
+	  saga_gui/wksp_module.cpp, saga_gui/wksp_module.h,
+	  saga_cmd/saga_cmd.dsp: no message
+
+2007-11-08 11:53  oconrad
+
+	* src/saga_core/saga_api/: module_grid.cpp, table_value.h: no
+	  message
+
+2007-11-06 16:51  oconrad
+
+	* src/:
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.dsp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.dsp,
+	  saga_core/saga_gui/dlg_about.cpp,
+	  saga_core/saga_gui/dlg_list_grid.cpp,
+	  saga_core/saga_gui/saga_gui.dsp,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_grid_system.cpp,
+	  saga_core/saga_gui/wksp_grid_system.h,
+	  modules/grid/grid_analysis/grid_analysis.dsp,
+	  modules/grid/grid_calculus/grid_calculus.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.dsp,
+	  modules/grid/grid_discretisation/grid_discretisation.dsp,
+	  modules/grid/grid_filter/grid_filter.dsp,
+	  modules/grid/grid_gridding/grid_gridding.dsp,
+	  modules/grid/grid_spline/grid_spline.dsp,
+	  modules/grid/grid_tools/grid_tools.dsp,
+	  modules/grid/grid_visualisation/grid_visualisation.dsp,
+	  saga_core/saga_api/grid_system.cpp, saga_core/saga_api/table.h,
+	  saga_core/saga_api/table_value.h,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.dsp,
+	  modules_io/gps/io_gps/io_gps.dsp,
+	  modules_io/grid/io_grid/io_grid.dsp,
+	  modules_io/grid/io_grid/usgs_srtm.cpp,
+	  modules_io/grid/io_grid/usgs_srtm.h,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.dsp,
+	  modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  modules_io/shapes/io_shapes/io_shapes.dsp,
+	  modules_io/table/io_table_odbc/io_table_odbc.dsp,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.dsp,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.dsp,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.dsp,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.dsp,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.dsp,
+	  modules/shapes/shapes_grid/shapes_grid.dsp,
+	  modules/shapes/shapes_lines/shapes_lines.dsp,
+	  modules_recreations/recreations/recreations_games/recreations_games.dsp,
+	  saga_core/saga_cmd/saga_cmd.dsp,
+	  modules/shapes/shapes_lines_ex/shapes_lines_ex.dsp,
+	  modules/shapes/shapes_points/shapes_points.dsp,
+	  modules/shapes/shapes_polygons/shapes_polygons.dsp,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.dsp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.dsp,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.dsp,
+	  modules/table/table_calculus/table_calculus.dsp,
+	  modules/table/table_tools/table_tools.dsp,
+	  modules/tin/tin_tools/tin_tools.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.dsp,
+	  saga.dsw: no message
+
+2007-10-31 12:44  oconrad
+
+	* src/modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.cpp:
+	  no message
+
+2007-10-24 12:24  oconrad
+
+	* src/modules_template/: template/Makefile.am,
+	  template/makefile.linux, Makefile.am, makefile.linux,
+	  modules_template.bat, modules_template.dsw,
+	  modules_template.linux, template/template/MLB_Interface.cpp,
+	  template/template/MLB_Interface.h, template/template/Makefile.am,
+	  template/template/Template.bat, template/template/Template.cpp,
+	  template/template/Template.dsp, template/template/Template.dsw,
+	  template/template/Template.h, template/template/Template.sln,
+	  template/template/Template.vcproj,
+	  template/template/makefile.linux,
+	  template/template/makefile.mingw: no message
+
+2007-10-23 15:23  oconrad
+
+	* src/saga_core/: saga_api/saga_api.h, saga_gui/saga.cpp: [no log
+	  message]
+
+2007-10-23 13:12  oconrad
+
+	* src/modules_io/grid/io_grid_grib2/: Makefile.am,
+	  g2clib-1.0.4/dec_jpeg2000.c, g2clib-1.0.4/dec_png.c,
+	  g2clib-1.0.4/enc_jpeg2000.c, g2clib-1.0.4/enc_png.c: [no log
+	  message]
+
+2007-10-19 15:03  oconrad
+
+	* src/saga_core/saga_api/: grid.cpp, grid_operation.cpp: no message
+
+2007-10-12 15:54  oconrad
+
+	* src/saga_core/saga_gui/saga_frame.cpp: no message
+
+2007-10-10 17:53  oconrad
+
+	* src/modules/grid/grid_visualisation/Grid_RGB_Composite.cpp: no
+	  message
+
+2007-10-08 17:31  oconrad
+
+	* src/modules_io/shapes/io_shapes_dxf/: dxflib/dl_attributes.h,
+	  dxflib/dl_codes.h, dxflib/dl_creationadapter.h,
+	  dxflib/dl_creationinterface.h, dxflib/dl_dxf.cpp,
+	  dxflib/dl_dxf.h, dxflib/dl_entities.h, dxflib/dl_exception.h,
+	  Makefile.am, dxf_import.cpp, dxf_import.h, io_shapes_dxf.dsp,
+	  io_shapes_dxf.vcproj, dxflib/dl_extrusion.h, dxflib/dl_writer.h,
+	  dxflib/dl_writer_ascii.cpp, dxflib/dl_writer_ascii.h,
+	  makefile.linux, makefile.mingw, MLB_Interface.cpp,
+	  MLB_Interface.h: no message
+
+2007-10-04 16:15  oconrad
+
+	* src/: modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp,
+	  saga_core/saga_api/grid_operation.cpp: no message
+
+2007-10-02 16:57  oconrad
+
+	* src/: modules_io/grid/io_grid_grib2/g2clib-1.0.4/enc_jpeg2000.c,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.dsp,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2.dsw,
+	  modules_io/grid/io_grid_grib2/io_grid_grib2_x.dsp, saga.dsw: no
+	  message
+
+2007-10-02 15:14  oconrad
+
+	* src/modules_io/grid/io_grid_grib2/: g2clib-1.0.4/dec_jpeg2000.c,
+	  g2clib-1.0.4/dec_png.c, g2clib-1.0.4/enc_jpeg2000.c,
+	  g2clib-1.0.4/enc_png.c, g2clib-1.0.4/grib2.h, MLB_Interface.cpp,
+	  grib2_import.cpp: no message
+
+2007-10-02 13:50  oconrad
+
+	* src/modules/grid/: grid_filter/Filter.cpp, grid_filter/Filter.h,
+	  grid_filter/Filter_Gauss.cpp, grid_filter/Filter_Gauss.h,
+	  grid_tools/Grid_Cut.cpp, grid_tools/Grid_Cut.h: no message
+
+2007-10-02 12:34  oconrad
+
+	* src/modules/grid/grid_filter/: Filter_Gauss.cpp, Filter_Gauss.h:
+	  no message
+
+2007-10-01 13:24  oconrad
+
+	* src/modules/grid/grid_tools/: Grid_Merge.cpp, Grid_Merge.h: no
+	  message
+
+2007-09-25 16:19  oconrad
+
+	* src/modules/grid/grid_tools/Grid_Merge.cpp: no message
+
+2007-09-25 16:12  oconrad
+
+	* src/modules/grid/grid_tools/Grid_Merge.cpp: no message
+
+2007-09-25 16:04  oconrad
+
+	* src/: modules/grid/grid_tools/Grid_Merge.cpp,
+	  modules_io/grid/io_grid/usgs_srtm.cpp: no message
+
+2007-09-24 17:22  oconrad
+
+	* src/modules_io/grid/io_grid/: esri_arcinfo.cpp, esri_arcinfo.h:
+	  no message
+
+2007-09-22 13:34  reklov_w
+
+	* src/saga_core/saga_cmd/module_library.cpp: no message
+
+2007-09-20 17:50  oconrad
+
+	* src/: modules_contrib/Makefile.am, Makefile.am: [no log message]
+
+2007-09-18 13:49  tschorr
+
+	* configure.in, src/modules_io/grid/Makefile.am,
+	  src/modules_io/grid/io_grid_grib2/MLB_Interface.cpp,
+	  src/modules_io/grid/io_grid_grib2/MLB_Interface.h,
+	  src/modules_io/grid/io_grid_grib2/Makefile.am,
+	  src/modules_io/grid/io_grid_grib2/grib2_import.cpp,
+	  src/modules_io/grid/io_grid_grib2/grib2_import.h,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/CHANGES,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/README,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/cmplxpack.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/compack.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/comunpack.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/dec_jpeg2000.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/dec_png.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/drstemplates.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/drstemplates.h,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/enc_jpeg2000.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/enc_png.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addfield.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addgrid.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addlocal.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_create.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_free.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_getfld.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_gribend.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_info.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_miss.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack1.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack2.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack3.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack4.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack5.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack6.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack7.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gbits.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/getdim.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/getpoly.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/grib2.h,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/grib2c.doc,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gridtemplates.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gridtemplates.h,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/int_power.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/jpcpack.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/jpcunpack.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/makefile,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/misspack.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/mkieee.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pack_gp.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pdstemplates.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pdstemplates.h,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pngpack.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pngunpack.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/rdieee.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/reduce.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/seekgb.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/simpack.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/simunpack.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/specpack.c,
+	  src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/specunpack.c:
+	  added initial grib2 import
+
+2007-08-27 12:49  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_hydrology/:
+	  Flow_Parallel.cpp, Flow_Parallel.h: no message
+
+2007-08-03 13:35  oconrad
+
+	* src/modules_io/grid/io_grid_image/makefile.linux,
+	  src/saga_core/saga_api/makefile.linux,
+	  src/saga_core/saga_cmd/makefile.linux,
+	  src/saga_core/saga_gui/makefile.linux, configure.in: no message
+
+2007-08-01 15:58  oconrad
+
+	* src/: saga.bat, saga.dsw, saga.sln,
+	  modules_template/modules_template.linux,
+	  saga_core/saga_api/makefile.linux: no message
+
+2007-08-01 15:55  oconrad
+
+	* src/: modules/makefile.linux, modules/grid/makefile.linux,
+	  modules/shapes/makefile.linux, modules/table/makefile.linux,
+	  modules/tin/makefile.linux,
+	  modules_contrib/contrib_t_wutzler/makefile.linux,
+	  modules_geostatistics/makefile.linux,
+	  modules_geostatistics/geostatistics/makefile.linux,
+	  modules_io/makefile.linux, modules_io/esri_e00/makefile.linux,
+	  modules_io/gps/makefile.linux, modules_io/grid/makefile.linux,
+	  modules_io/shapes/makefile.linux,
+	  modules_io/table/makefile.linux, modules_lectures/makefile.linux,
+	  modules_lectures/lectures/makefile.linux,
+	  modules_projection/makefile.linux,
+	  modules_projection/pj_georeference/makefile.linux,
+	  modules_projection/pj_geotrans/makefile.linux,
+	  modules_projection/pj_proj4/makefile.linux,
+	  modules_recreations/makefile.linux,
+	  modules_recreations/recreations/makefile.linux,
+	  modules_simulation/cellular_automata/makefile.linux,
+	  modules_simulation/ecosystems/makefile.linux,
+	  modules_simulation/makefile.linux,
+	  modules_simulation/fire/makefile.linux,
+	  modules_simulation/hydrology/makefile.linux,
+	  modules_template/makefile.linux,
+	  modules_template/template/makefile.linux,
+	  modules_terrain_analysis/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/makefile.linux,
+	  saga_core/makefile.linux,
+	  modules/grid/grid_analysis/makefile.mingw,
+	  modules/grid/grid_calculus/makefile.mingw,
+	  modules/grid/grid_discretisation/makefile.mingw,
+	  modules/grid/grid_filter/makefile.mingw,
+	  modules/grid/grid_gridding/makefile.mingw,
+	  modules/grid/grid_spline/makefile.mingw,
+	  modules/grid/grid_tools/makefile.mingw,
+	  modules/grid/grid_visualisation/makefile.mingw,
+	  modules/shapes/shapes_grid/makefile.mingw,
+	  modules/shapes/shapes_lines/makefile.mingw,
+	  modules/shapes/shapes_lines_ex/makefile.mingw,
+	  modules/shapes/shapes_points/makefile.mingw,
+	  modules/shapes/shapes_polygons/makefile.mingw,
+	  modules/shapes/shapes_tools/makefile.mingw,
+	  modules/table/table_calculus/makefile.mingw,
+	  modules/table/table_tools/makefile.mingw,
+	  modules/tin/tin_tools/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.mingw,
+	  modules_io/esri_e00/io_esri_e00/makefile.mingw,
+	  modules_io/gps/io_gps/makefile.mingw,
+	  modules_io/grid/io_grid/makefile.mingw,
+	  modules_io/grid/io_grid_image/makefile.mingw,
+	  modules_io/shapes/io_shapes/makefile.mingw,
+	  modules_io/table/io_table_odbc/makefile.mingw,
+	  modules_lectures/lectures/lectures_introduction/makefile.mingw,
+	  modules_projection/pj_georeference/pj_georeference/makefile.mingw,
+	  modules_projection/pj_geotrans/pj_geotrans/makefile.mingw,
+	  modules_projection/pj_proj4/pj_proj4/makefile.mingw,
+	  modules_recreations/recreations/recreations_fractals/makefile.mingw,
+	  modules_recreations/recreations/recreations_games/makefile.mingw,
+	  modules_simulation/cellular_automata/sim_cellular_automata/makefile.mingw,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/makefile.mingw,
+	  modules_simulation/hydrology/sim_hydrology/makefile.mingw,
+	  modules_template/template/template/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.mingw,
+	  makefile.linux, saga_core/saga_gui/dlg_about.cpp,
+	  saga_core/saga_gui/saga.cpp, saga_core/saga_gui/saga.h: no
+	  message
+
+2007-08-01 15:44  oconrad
+
+	* src/: modules/modules.bat, modules/modules.dsw,
+	  modules/modules.sln, modules_contrib/modules_contrib.bat,
+	  modules_contrib/modules_contrib.dsw,
+	  modules_contrib/modules_contrib.linux,
+	  modules_geostatistics/modules_geostatistics.bat,
+	  modules_geostatistics/modules_geostatistics.dsw,
+	  modules_geostatistics/modules_geostatistics.linux,
+	  modules_geostatistics/modules_geostatistics.sln,
+	  modules_io/modules_io.bat, modules_io/modules_io.dsw,
+	  modules_io/modules_io.linux, modules_io/modules_io.sln,
+	  modules_lectures/modules_lectures.bat,
+	  modules_lectures/modules_lectures.dsw,
+	  modules_lectures/modules_lectures.linux,
+	  modules_lectures/modules_lectures.sln,
+	  modules_projection/modules_projection.bat,
+	  modules_projection/modules_projection.dsw,
+	  modules_projection/modules_projection.linux,
+	  modules_projection/modules_projection.sln,
+	  modules_recreations/modules_recreations.bat,
+	  modules_recreations/modules_recreations.dsw,
+	  modules_recreations/modules_recreations.linux,
+	  modules_recreations/modules_recreations.sln,
+	  modules_simulation/modules_simulation.bat,
+	  modules_simulation/modules_simulation.dsw,
+	  modules_simulation/modules_simulation.linux,
+	  modules_simulation/modules_simulation.sln,
+	  modules_terrain_analysis/modules_terrain_analysis.bat,
+	  modules_terrain_analysis/modules_terrain_analysis.dsw,
+	  modules_terrain_analysis/modules_terrain_analysis.linux,
+	  modules_terrain_analysis/modules_terrain_analysis.sln,
+	  saga_core/saga_core.dsw, saga_core/saga_api/saga_api.bat,
+	  saga_core/saga_api/saga_api_inst.sh,
+	  saga_core/saga_cmd/saga_cmd.bat, saga_core/saga_gui/saga_gui.bat,
+	  modules_contrib/Makefile.am, modules_contrib/makefile.linux,
+	  modules_contrib/contrib_a_perego/Makefile.am,
+	  modules_contrib/contrib_a_perego/makefile.linux,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/A1WiTh.cpp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/A1WiTh.h,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/A2WiTh.cpp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/A2WiTh.h,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/A3WiTh.cpp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/A3WiTh.h,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/AvWiMa1.cpp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/AvWiMa1.h,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/AvWiMa2.cpp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/AvWiMa2.h,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/MLB_Interface.cpp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/MLB_Interface.h,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/Makefile.am,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.dsp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/contrib_a_perego.vcproj,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/destriping1.cpp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/destriping1.h,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/destriping2.cpp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/destriping2.h,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/directional1.cpp,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/directional1.h,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/makefile.linux,
+	  modules_contrib/contrib_a_perego/contrib_a_perego/makefile.mingw,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/makefile.mingw:
+	  no message
+
+2007-08-01 11:42  oconrad
+
+	* src/modules/modules.linux: no message
+
+2007-07-31 15:06  oconrad
+
+	* src/: modules_io/grid/io_grid_image/Makefile.am,
+	  modules_io/grid/io_grid_image/makefile.linux,
+	  modules/grid/grid_analysis/makefile.linux,
+	  modules/grid/grid_calculus/makefile.linux,
+	  modules/grid/grid_discretisation/makefile.linux,
+	  modules/grid/grid_filter/makefile.linux,
+	  modules/grid/grid_gridding/makefile.linux,
+	  modules/grid/grid_spline/makefile.linux,
+	  modules/grid/grid_tools/makefile.linux,
+	  modules/grid/grid_visualisation/makefile.linux,
+	  modules/shapes/shapes_grid/makefile.linux,
+	  modules/shapes/shapes_lines/makefile.linux,
+	  modules/shapes/shapes_lines_ex/makefile.linux,
+	  modules/shapes/shapes_points/makefile.linux,
+	  modules/shapes/shapes_polygons/makefile.linux,
+	  modules/shapes/shapes_tools/makefile.linux,
+	  modules/table/table_calculus/makefile.linux,
+	  modules/table/table_tools/makefile.linux,
+	  modules/tin/tin_tools/makefile.linux,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.linux,
+	  modules_io/esri_e00/io_esri_e00/makefile.linux,
+	  modules_io/gps/io_gps/makefile.linux,
+	  modules_io/grid/io_grid/makefile.linux,
+	  modules_io/shapes/io_shapes/makefile.linux,
+	  modules_io/table/io_table_odbc/makefile.linux,
+	  modules_lectures/lectures/lectures_introduction/makefile.linux,
+	  modules_projection/pj_georeference/pj_georeference/makefile.linux,
+	  modules_projection/pj_geotrans/pj_geotrans/makefile.linux,
+	  modules_projection/pj_proj4/pj_proj4/makefile.linux,
+	  modules_recreations/recreations/recreations_fractals/makefile.linux,
+	  modules_recreations/recreations/recreations_games/makefile.linux,
+	  modules_simulation/cellular_automata/sim_cellular_automata/makefile.linux,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/makefile.linux,
+	  modules_simulation/hydrology/sim_hydrology/makefile.linux,
+	  modules_template/template/template/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.linux,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_cmd/makefile.linux,
+	  saga_core/saga_gui/makefile.linux,
+	  saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_gui/wksp_base_control.cpp: no message
+
+2007-07-30 09:28  oconrad
+
+	* src/: modules/grid/grid_analysis/Soil_Texture.cpp,
+	  modules/grid/grid_analysis/Soil_Texture.h,
+	  modules/grid/grid_tools/CreateGridSystem.cpp,
+	  modules/grid/grid_tools/CreateGridSystem.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks_WL.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks_WL.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks_WL_XXL.cpp,
+	  modules/grid/grid_analysis/MLB_Interface.cpp,
+	  modules/grid/grid_analysis/Makefile.am,
+	  modules/grid/grid_analysis/grid_analysis.dsp,
+	  modules/grid/grid_analysis/grid_analysis.vcproj,
+	  modules/grid/grid_analysis/makefile.linux,
+	  modules/grid/grid_analysis/makefile.mingw,
+	  modules/grid/grid_tools/MLB_Interface.cpp,
+	  modules/grid/grid_tools/Makefile.am,
+	  modules/grid/grid_tools/grid_tools.dsp,
+	  modules/grid/grid_tools/grid_tools.vcproj,
+	  modules/grid/grid_tools/makefile.linux,
+	  modules/grid/grid_tools/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcproj:
+	  no message
+
+2007-07-24 14:17  oconrad
+
+	* src/saga_core/saga_gui/: Makefile.am, active.cpp,
+	  dlg_about_logo.cpp, makefile.linux, makefile.mingw, project.cpp,
+	  res_images.h, saga_frame.cpp, saga_gui.dsp, saga_gui.vcproj,
+	  wksp.cpp, wksp.h, wksp_base_control.cpp, wksp_data_control.cpp,
+	  wksp_data_layers.cpp, wksp_data_layers.h, wksp_layer.cpp,
+	  wksp_map.cpp, wksp_map.h, wksp_map_control.cpp,
+	  wksp_module_menu.cpp, res/xpm/saga_splash.xpm,
+	  wksp_map_buttons.cpp, wksp_map_buttons.h: no message
+
+2007-07-16 15:39  oconrad
+
+	* src/saga_core/saga_api/compatibility.h: no message
+
+2007-07-09 16:37  oconrad
+
+	* src/modules/shapes/shapes_tools/SeparateShapes.cpp: no message
+
+2007-07-06 12:07  tschorr
+
+	* src/saga_core/saga_gui/: wksp_module_menu.cpp,
+	  wksp_module_menu.h: cleanup
+
+2007-07-06 10:46  tschorr
+
+	* src/saga_core/saga_gui/wksp_module_menu.cpp: fixed modules menu
+	  (bug #1743837)
+
+2007-07-06 10:14  tschorr
+
+	* src/saga_core/saga_gui/: wksp_module_menu.cpp,
+	  wksp_module_menu.h: fixed modules menu (bug #1743837)
+
+2007-07-03 12:20  tschorr
+
+	* src/saga_core/saga_gui/: Makefile.am, wksp_module_manager.cpp:
+	  fixed bug #1737698
+
+2007-06-27 16:20  oconrad
+
+	* src/modules_io/grid/io_grid_image/: MLB_Interface.cpp,
+	  grid_export.cpp, grid_import.cpp: no message
+
+2007-06-08 15:02  oconrad
+
+	* src/saga_core/saga_api/saga_api_to_python_win.bat: no message
+
+2007-06-06 16:15  oconrad
+
+	* src/saga_core/saga_gui/res/xpm/saga_splash.xpm: no message
+
+2007-05-23 11:04  tschorr
+
+	* configure.in: changed version to 2.0
+
+2007-05-18 11:54  oconrad
+
+	* src/saga_core/saga_cmd/makefile.linux,
+	  src/saga_core/saga_gui/makefile.linux, AUTHORS, ChangeLog, NEWS,
+	  README: no message
+
+2007-05-11 14:40  oconrad
+
+	* src/saga_core/saga_api/grid.cpp: no message
+
+2007-05-08 10:27  oconrad
+
+	* src/: modules/shapes/shapes_lines_ex/shapes_lines_ex.vcproj,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.vcproj:
+	  no message
+
+2007-05-08 10:21  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  modules/grid/grid_analysis/grid_analysis.vcproj,
+	  modules/grid/grid_calculus/grid_calculus.vcproj,
+	  modules/grid/grid_discretisation/grid_discretisation.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcproj,
+	  modules/grid/grid_filter/grid_filter.vcproj,
+	  modules/grid/grid_gridding/grid_gridding.vcproj,
+	  modules/grid/grid_spline/grid_spline.vcproj,
+	  modules/grid/grid_tools/grid_tools.vcproj,
+	  modules/grid/grid_visualisation/grid_visualisation.vcproj,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.vcproj,
+	  modules_io/gps/io_gps/io_gps.vcproj,
+	  modules_io/grid/io_grid/io_grid.vcproj,
+	  modules_io/grid/io_grid_image/io_grid_image.vcproj,
+	  modules_io/grid/io_grid_image/makefile.mingw,
+	  modules_io/grid/io_grid_image/specs_makefile.mingw,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/table/io_table_odbc/io_table_odbc.vcproj,
+	  modules_io/table/io_table_odbc/makefile.mingw,
+	  modules_io/table/io_table_odbc/specs_makefile.mingw,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.vcproj,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.vcproj,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.vcproj,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcproj,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.vcproj,
+	  modules_recreations/recreations/recreations_games/recreations_games.vcproj,
+	  saga_core/saga_api/saga_api.vcproj,
+	  modules/shapes/shapes_grid/shapes_grid.vcproj,
+	  modules/shapes/shapes_lines/shapes_lines.vcproj,
+	  saga_core/saga_cmd/saga_cmd.vcproj,
+	  saga_core/saga_gui/saga_gui.vcproj,
+	  modules/shapes/shapes_points/shapes_points.vcproj,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcproj,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.vcproj,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.vcproj,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  modules/table/table_calculus/table_calculus.vcproj,
+	  modules/table/table_tools/table_tools.vcproj,
+	  modules/tin/tin_tools/tin_tools.vcproj: no message
+
+2007-05-04 16:50  oconrad
+
+	* src/saga_core/saga_gui/wx/propgrid/: advprops.cpp, advprops.h,
+	  manager.cpp, manager.h, odcombo.cpp, odcombo.h, propdev.h,
+	  propgrid.cpp, propgrid.h, props.cpp: no message
+
+2007-05-04 13:54  oconrad
+
+	* src/saga_core/saga_gui/: dlg_about.cpp, wksp_module_manager.cpp:
+	  no message
+
+2007-05-04 12:34  oconrad
+
+	* src/saga_core/: saga_api/saga_api.vcproj, saga_gui/saga.cpp,
+	  saga_gui/saga_gui.vcproj: no message
+
+2007-04-27 14:50  oconrad
+
+	* src/saga_core/saga_gui/: res_commands.cpp, res_commands.h,
+	  view_map.cpp, view_map.h, wksp_map.cpp, wksp_map.h: no message
+
+2007-04-23 16:38  oconrad
+
+	* src/: modules_io/grid/io_grid_image/io_grid_image.vcproj,
+	  modules_io/table/io_table_odbc/io_table_odbc.vcproj,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_cmd/saga_cmd.vcproj,
+	  saga_core/saga_gui/saga_gui.vcproj: no message
+
+2007-04-17 12:33  oconrad
+
+	* src/saga_core/: saga_cmd/callback.cpp,
+	  saga_api/saga_api_to_python_win.bat,
+	  saga_api/saga_api_to_python_win.py,
+	  saga_gui/wksp_module_manager.cpp: no message
+
+2007-04-16 17:28  oconrad
+
+	* src/: modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  modules_io/grid/io_grid_image/makefile.mingw,
+	  modules_io/table/io_table_odbc/io_table_odbc.dsp,
+	  modules_io/table/io_table_odbc/makefile.mingw,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_cmd/makefile.mingw,
+	  saga_core/saga_cmd/saga_cmd.dsp,
+	  saga_core/saga_gui/makefile.mingw,
+	  saga_core/saga_gui/saga_gui.dsp: no message
+
+2007-03-27 16:50  oconrad
+
+	* src/: modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  modules_io/table/io_table_odbc/io_table_odbc.dsp,
+	  saga_core/saga_gui/wx/propgrid/odcombo.h,
+	  saga_core/saga_gui/wx/propgrid/propgrid.h,
+	  saga_core/saga_api/saga_api.dsp, saga_core/saga_cmd/saga_cmd.dsp,
+	  saga_core/saga_gui/saga_gui.dsp: no message
+
+2007-03-27 12:55  oconrad
+
+	* src/saga_core/saga_api/compatibility.h: no message
+
+2007-03-23 16:32  oconrad
+
+	* src/saga_core/: saga_api/parameter_data.cpp,
+	  saga_api/parameters.cpp, saga_gui/parameters_control.cpp: no
+	  message
+
+2007-03-23 11:49  oconrad
+
+	* src/saga_core/saga_cmd/module_library.cpp: no message
+
+2007-03-22 18:01  oconrad
+
+	* src/saga_core/saga_gui/res/saga_tip.txt: no message
+
+2007-03-22 15:23  oconrad
+
+	* src/saga_core/: saga_gui/dlg_list_grid.cpp,
+	  saga_gui/dlg_list_shapes.cpp, saga_gui/dlg_list_table.cpp,
+	  saga_gui/dlg_list_tin.cpp, saga_gui/dlg_parameters.cpp,
+	  saga_gui/parameters_control.cpp,
+	  saga_gui/parameters_properties.cpp, saga_gui/saga_frame.cpp,
+	  saga_gui/wksp_data_manager.cpp, saga_gui/wksp_module.cpp,
+	  saga_gui/wksp_module_manager.cpp,
+	  saga_gui/wksp_shapes_points.cpp, saga_gui/wksp_shapes_type.cpp,
+	  saga_cmd/Makefile.am, saga_api/Makefile.am,
+	  saga_api/parameter.cpp: no message
+
+2007-03-22 11:37  oconrad
+
+	* src/saga_core/saga_gui/parameters_properties.cpp: no message
+
+2007-03-12 12:13  oconrad
+
+	* src/saga_core/saga_api/shape_points.cpp: no message
+
+2007-03-08 16:59  oconrad
+
+	* src/saga_core/saga_gui/wksp_map_dc.cpp: no message
+
+2007-03-07 17:48  oconrad
+
+	* src/saga_core/saga_api/: shapes.cpp, table.cpp: no message
+
+2007-03-01 16:31  oconrad
+
+	* src/: modules/grid/grid_analysis/Image_VI_Distance.cpp,
+	  saga_core/saga_gui/project.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp: no message
+
+2007-02-28 17:44  oconrad
+
+	* src/:
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.h,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.cpp: no
+	  message
+
+2007-02-27 15:36  oconrad
+
+	* src/saga_core/saga_gui/wksp_data_manager.cpp: no message
+
+2007-02-27 14:46  oconrad
+
+	* src/saga_core/saga_gui/saga_frame.cpp: no message
+
+2007-02-27 14:35  oconrad
+
+	* src/: modules/grid/grid_tools/Grid_Value_Request.cpp,
+	  saga_core/saga_gui/project.cpp, saga_core/saga_gui/project.h,
+	  saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_gui/saga_frame.h,
+	  saga_core/saga_gui/view_map_control.cpp,
+	  saga_core/saga_gui/wksp_table_manager.cpp: no message
+
+2007-02-27 12:46  oconrad
+
+	* src/saga_core/saga_gui/project.cpp: no message
+
+2007-02-26 18:48  oconrad
+
+	* src/: saga_core/saga_gui/active.cpp,
+	  saga_core/saga_gui/callback.cpp, saga_core/saga_gui/dlg_base.cpp,
+	  saga_core/saga_gui/dlg_colors.cpp, saga_core/saga_gui/helper.cpp,
+	  saga_core/saga_gui/helper.h,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/project.cpp, saga_core/saga_gui/project.h,
+	  saga_core/saga_gui/res_dialogs.cpp,
+	  saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/api_colors.cpp, saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/grid_io.cpp, saga_core/saga_api/module.cpp,
+	  saga_core/saga_api/module.h, saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_cmd/callback.cpp, saga_core/saga_gui/saga_frame.h,
+	  saga_core/saga_gui/view_map_control.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_data_manager.h,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_map.cpp,
+	  saga_core/saga_gui/wksp_shapes.h,
+	  modules_io/grid/io_grid/surfer.cpp: no message
+
+2007-02-23 17:02  oconrad
+
+	* src/saga_core/saga_gui/view_map_control.cpp: no message
+
+2007-02-22 15:40  oconrad
+
+	* src/saga_core/saga_api/module_grid.cpp: no message
+
+2007-02-13 14:08  tschorr
+
+	* src/saga_core/saga_api/Makefile.am: [no log message]
+
+2007-02-13 13:59  tschorr
+
+	* src/saga_core/saga_api/module.h: [no log message]
+
+2007-02-13 13:49  tschorr
+
+	* src/: modules/grid/grid_analysis/Makefile.am,
+	  modules/grid/grid_calculus/Makefile.am,
+	  modules/grid/grid_discretisation/Makefile.am,
+	  modules/grid/grid_filter/Makefile.am,
+	  modules/grid/grid_gridding/Makefile.am,
+	  modules/grid/grid_spline/Makefile.am,
+	  modules/grid/grid_tools/Makefile.am,
+	  modules/grid/grid_visualisation/Makefile.am,
+	  modules/shapes/shapes_grid/Makefile.am,
+	  modules/shapes/shapes_lines/Makefile.am,
+	  modules/shapes/shapes_lines_ex/Makefile.am,
+	  modules/shapes/shapes_points/Makefile.am,
+	  modules/shapes/shapes_polygons/Makefile.am,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/table/table_calculus/Makefile.am,
+	  modules/table/table_tools/Makefile.am,
+	  modules/tin/tin_tools/Makefile.am,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_points/Makefile.am,
+	  modules_io/esri_e00/io_esri_e00/Makefile.am,
+	  modules_io/gps/io_gps/Makefile.am,
+	  modules_io/grid/io_grid/Makefile.am,
+	  modules_io/shapes/io_shapes/Makefile.am,
+	  modules_io/table/io_table_odbc/Makefile.am,
+	  modules_lectures/lectures/lectures_introduction/Makefile.am,
+	  modules_projection/pj_georeference/pj_georeference/Makefile.am,
+	  modules_projection/pj_geotrans/pj_geotrans/Makefile.am,
+	  modules_projection/pj_proj4/pj_proj4/Makefile.am,
+	  modules_recreations/recreations/recreations_fractals/Makefile.am,
+	  modules_recreations/recreations/recreations_games/Makefile.am,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Makefile.am,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile.am,
+	  modules_simulation/hydrology/sim_hydrology/Makefile.am,
+	  modules_template/template/template/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  saga_core/saga_api/Makefile.am: [no log message]
+
+2007-02-13 10:57  tschorr
+
+	* src/: modules/grid/grid_analysis/Makefile.am,
+	  modules/grid/grid_calculus/Makefile.am,
+	  modules/grid/grid_discretisation/Makefile.am,
+	  modules/grid/grid_filter/Makefile.am,
+	  modules/grid/grid_gridding/Makefile.am,
+	  modules/grid/grid_spline/Makefile.am,
+	  modules/grid/grid_tools/Makefile.am,
+	  modules/grid/grid_visualisation/Makefile.am,
+	  modules/shapes/shapes_grid/Makefile.am,
+	  modules/shapes/shapes_lines/Makefile.am,
+	  modules/shapes/shapes_lines_ex/Makefile.am,
+	  modules/shapes/shapes_points/Makefile.am,
+	  modules/shapes/shapes_polygons/Makefile.am,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/table/table_calculus/Makefile.am,
+	  modules/table/table_tools/Makefile.am,
+	  modules/tin/tin_tools/Makefile.am,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_points/Makefile.am,
+	  modules_io/esri_e00/io_esri_e00/Makefile.am,
+	  modules_io/gps/io_gps/Makefile.am,
+	  modules_io/grid/io_grid/Makefile.am,
+	  modules_io/grid/io_grid_image/Makefile.am,
+	  modules_io/shapes/io_shapes/Makefile.am,
+	  modules_io/table/io_table_odbc/Makefile.am,
+	  modules_lectures/lectures/lectures_introduction/Makefile.am,
+	  modules_projection/pj_georeference/pj_georeference/Makefile.am,
+	  modules_projection/pj_geotrans/pj_geotrans/Makefile.am,
+	  modules_projection/pj_proj4/pj_proj4/Makefile.am,
+	  modules_recreations/recreations/recreations_fractals/Makefile.am,
+	  modules_recreations/recreations/recreations_games/Makefile.am,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Makefile.am,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile.am,
+	  modules_simulation/hydrology/sim_hydrology/Makefile.am,
+	  modules_template/template/template/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  saga_core/saga_api/Makefile.am, saga_core/saga_api/module.h,
+	  saga_core/saga_cmd/Makefile.am, saga_core/saga_gui/Makefile.am,
+	  saga_core/saga_gui/wksp_data_manager.cpp: added -fPIC compiler
+	  flag
+
+2007-02-12 16:57  tschorr
+
+	* configure.in: removed -fpermissive for x86_64
+
+2007-02-12 16:43  tschorr
+
+	* src/saga_core/saga_gui/: Makefile.am, callback.cpp,
+	  dlg_list_grid.cpp, project.cpp: removed -fpermissive for x86_64
+
+2007-02-12 16:39  tschorr
+
+	* src/saga_core/saga_cmd/Makefile.am: [no log message]
+
+2007-02-12 16:35  tschorr
+
+	* src/saga_core/saga_cmd/Makefile.am: removed -fpermissive for
+	  x86_64
+
+2007-02-12 15:16  tschorr
+
+	* src/saga_core/saga_gui/wksp_data_manager.cpp: fixed issue 1650599
+
+2007-02-09 14:03  oconrad
+
+	* src/modules/grid/grid_tools/Grid_Resample.cpp: no message
+
+2007-02-08 15:59  oconrad
+
+	*
+	  src/modules_projection/pj_georeference/pj_georeference/Collect_Points.cpp:
+	  no message
+
+2007-02-07 16:25  oconrad
+
+	* src/: modules_io/grid/io_grid_image/grid_import.cpp,
+	  saga_core/saga_gui/wx/propgrid/manager.h,
+	  saga_core/saga_gui/wx/propgrid/propgrid.h: no message
+
+2007-02-07 13:32  tschorr
+
+	* src/saga_core/saga_api/: api_core.h, saga_api.h,
+	  saga_api_to_python_linux.py: fixed definition of DWORD for x86_64
+
+2007-02-06 14:12  oconrad
+
+	* src/modules_io/grid/io_grid_image/grid_import.cpp: no message
+
+2007-02-06 13:42  oconrad
+
+	* src/saga_core/saga_gui/: wksp_shapes_point.cpp,
+	  wksp_shapes_point.h, wksp_shapes_points.cpp,
+	  wksp_shapes_points.h: no message
+
+2007-01-23 13:53  reklov_w
+
+	* src/saga_core/saga_gui/view_map_3d.cpp: no message
+
+2007-01-22 13:59  oconrad
+
+	* src/saga_core/saga_gui/: res_commands.cpp, view_map_3d.cpp,
+	  wksp_map.cpp: no message
+
+2007-01-22 12:37  oconrad
+
+	* src/saga_core/saga_api/: shapes_io.cpp, table_dbase.h,
+	  table_io.cpp: no message
+
+2007-01-19 12:12  oconrad
+
+	* src/saga_core/saga_api/api_file.cpp: no message
+
+2007-01-17 07:27  tschorr
+
+	* src/modules_io/grid/io_grid_image/Makefile.am: Makefile.am
+
+2007-01-16 20:52  tschorr
+
+	* src/saga_core/: saga_cmd/Makefile.am, saga_gui/Makefile.am: fixed
+	  AM_LDFLAGS for saga_cmd, saga_gui
+
+2007-01-16 16:52  tschorr
+
+	* src/saga_core/saga_api/Makefile.am: fixed unicode=no for LDFLAGS
+
+2007-01-11 18:58  oconrad
+
+	* src/saga_core/saga_api/api_string.cpp: no message
+
+2007-01-11 15:05  tschorr
+
+	* Makefile.am, configure.in,
+	  src/modules/grid/grid_analysis/Makefile.am,
+	  src/modules/grid/grid_calculus/Makefile.am,
+	  src/modules/grid/grid_discretisation/Makefile.am,
+	  src/modules/grid/grid_filter/Makefile.am,
+	  src/modules/grid/grid_gridding/Makefile.am,
+	  src/modules/grid/grid_spline/Makefile.am,
+	  src/modules/grid/grid_tools/Makefile.am,
+	  src/modules/grid/grid_visualisation/Makefile.am,
+	  src/modules/shapes/shapes_grid/Makefile.am,
+	  src/modules/shapes/shapes_lines/Makefile.am,
+	  src/modules/shapes/shapes_lines_ex/Makefile.am,
+	  src/modules/shapes/shapes_points/Makefile.am,
+	  src/modules/shapes/shapes_polygons/Makefile.am,
+	  src/modules/shapes/shapes_tools/Makefile.am,
+	  src/modules/table/table_calculus/Makefile.am,
+	  src/modules/table/table_tools/Makefile.am,
+	  src/modules/tin/tin_tools/Makefile.am,
+	  src/modules_contrib/contrib_t_wutzler/contrib_t_wutzler/Makefile.am,
+	  src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  src/modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  src/modules_geostatistics/geostatistics/geostatistics_points/Makefile.am,
+	  src/modules_io/esri_e00/io_esri_e00/Makefile.am,
+	  src/modules_io/gps/io_gps/Makefile.am,
+	  src/modules_io/grid/io_grid/Makefile.am,
+	  src/modules_io/grid/io_grid_image/Makefile.am,
+	  src/modules_io/grid/io_grid_image/grid_import.cpp,
+	  src/modules_io/shapes/io_shapes/Makefile.am,
+	  src/modules_io/table/io_table_odbc/Makefile.am,
+	  src/modules_lectures/lectures/lectures_introduction/Makefile.am,
+	  src/modules_projection/pj_georeference/pj_georeference/Makefile.am,
+	  src/modules_projection/pj_geotrans/pj_geotrans/Makefile.am,
+	  src/modules_projection/pj_proj4/pj_proj4/Makefile.am,
+	  src/modules_recreations/recreations/recreations_fractals/Makefile.am,
+	  src/modules_recreations/recreations/recreations_games/Makefile.am,
+	  src/modules_simulation/cellular_automata/sim_cellular_automata/Makefile.am,
+	  src/modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile.am,
+	  src/modules_simulation/hydrology/sim_hydrology/Makefile.am,
+	  src/modules_template/template/template/Makefile.am,
+	  src/modules_terrain_analysis/terrain_analysis/ta_channels/Makefile.am,
+	  src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.am,
+	  src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.am,
+	  src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am,
+	  src/modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.am,
+	  src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.am,
+	  src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  src/saga_core/saga_api/Makefile.am,
+	  src/saga_core/saga_cmd/Makefile.am,
+	  src/saga_core/saga_gui/Makefile.am: --enable-unicode,
+	  --enable-debug support in configure
+
+2007-01-11 09:50  tschorr
+
+	* AUTHORS, ChangeLog, NEWS, README: [no log message]
+
+2007-01-11 09:41  tschorr
+
+	* configure.in, Makefile.am: [no log message]
+
+2007-01-10 17:11  oconrad
+
+	* src/modules_io/grid/io_grid/mola.cpp: no message
+
+2007-01-10 14:20  oconrad
+
+	* src/: saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_string.cpp,
+	  modules/grid/grid_tools/Grid_Buffer_Proximity.cpp,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp:
+	  no message
+
+2007-01-09 16:06  oconrad
+
+	* src/saga_core/saga_gui/: active.cpp, active.h,
+	  wksp_base_item.cpp, wksp_data_manager.cpp, wksp_layer.cpp,
+	  wksp_map.cpp, wksp_map.h, wksp_map_layer.cpp, wksp_table.cpp: no
+	  message
+
+2007-01-09 12:40  oconrad
+
+	* src/: saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_file.cpp,
+	  saga_core/saga_api/api_string.cpp,
+	  saga_core/saga_api/doc_pdf.cpp, saga_core/saga_api/doc_pdf.h,
+	  saga_core/saga_api/module.cpp, saga_core/saga_api/module.h,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h, saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_api/table.cpp, saga_core/saga_api/table.h,
+	  saga_core/saga_api/table_dbase.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.dsp,
+	  saga_core/saga_gui/dlg_about.cpp,
+	  saga_core/saga_gui/saga_gui.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.dsp,
+	  modules/grid/grid_analysis/grid_analysis.dsp,
+	  modules/grid/grid_calculus/grid_calculus.dsp,
+	  modules/grid/grid_discretisation/grid_discretisation.dsp,
+	  modules/grid/grid_filter/grid_filter.dsp,
+	  modules/grid/grid_gridding/grid_gridding.dsp,
+	  modules/grid/grid_spline/grid_spline.dsp,
+	  modules/grid/grid_tools/grid_tools.dsp,
+	  modules/grid/grid_visualisation/grid_visualisation.dsp,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.dsp,
+	  modules_io/gps/io_gps/io_gps.dsp,
+	  modules_io/grid/io_grid/io_grid.dsp,
+	  modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  modules_io/shapes/io_shapes/io_shapes.dsp,
+	  modules_io/table/io_table_odbc/io_table_odbc.dsp,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.dsp,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.dsp,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.dsp,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.dsp,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.dsp,
+	  modules_recreations/recreations/recreations_games/recreations_games.dsp,
+	  modules/shapes/shapes_grid/shapes_grid.dsp,
+	  saga_core/saga_cmd/saga_cmd.dsp,
+	  modules/shapes/shapes_lines/shapes_lines.dsp,
+	  modules/shapes/shapes_lines_ex/shapes_lines_ex.dsp,
+	  modules/shapes/shapes_points/shapes_points.dsp,
+	  modules/shapes/shapes_polygons/shapes_polygons.dsp,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.dsp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.dsp,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.dsp,
+	  modules/table/table_calculus/table_calculus.dsp,
+	  modules/table/table_tools/table_tools.dsp,
+	  modules/tin/tin_tools/tin_tools.dsp: no message
+
+2007-01-08 15:56  oconrad
+
+	* src/: modules/grid/grid_tools/Makefile.am,
+	  modules/grid/grid_tools/grid_tools.dsp,
+	  modules/grid/grid_tools/grid_tools.vcproj,
+	  modules/grid/grid_tools/makefile.linux,
+	  modules/grid/grid_tools/Grid_Buffer_Proximity.cpp,
+	  modules/grid/grid_tools/Grid_Buffer_Proximity.h,
+	  modules/grid/grid_tools/MLB_Interface.cpp,
+	  modules/grid/grid_tools/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFlood.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFlood.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFloodInteractive.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcproj:
+	  no message
+
+2007-01-08 14:13  oconrad
+
+	* src/saga_core/: saga_api/api_core.h, saga_api/api_file.cpp,
+	  saga_api/dataobject.cpp, saga_api/doc_pdf.cpp,
+	  saga_api/doc_pdf.h, saga_api/saga_api.cpp,
+	  saga_api/table_dbase.cpp, saga_gui/dlg_about.cpp,
+	  saga_gui/view_layout_info.cpp: no message
+
+2007-01-08 08:43  tschorr
+
+	* src/: modules/grid/grid_analysis/Makefile.am,
+	  modules/grid/grid_calculus/Makefile.am,
+	  modules/grid/grid_discretisation/Makefile.am,
+	  modules/grid/grid_filter/Makefile.am,
+	  modules/grid/grid_gridding/Makefile.am,
+	  modules/grid/grid_spline/Makefile.am,
+	  modules/grid/grid_tools/Makefile.am,
+	  modules/grid/grid_visualisation/Makefile.am,
+	  modules/shapes/shapes_grid/Makefile.am,
+	  modules/shapes/shapes_lines/Makefile.am,
+	  modules/shapes/shapes_lines_ex/Makefile.am,
+	  modules/shapes/shapes_points/Makefile.am,
+	  modules/shapes/shapes_polygons/Makefile.am,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/table/table_calculus/Fit.cpp,
+	  modules/table/table_calculus/Makefile.am,
+	  modules/table/table_calculus/Table_Trend.cpp,
+	  modules/table/table_tools/Makefile.am,
+	  modules/tin/tin_tools/Makefile.am,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_points/Makefile.am,
+	  modules_io/esri_e00/io_esri_e00/Makefile.am,
+	  modules_io/gps/io_gps/Makefile.am,
+	  modules_io/grid/io_grid/Makefile.am,
+	  modules_io/grid/io_grid_image/Makefile.am,
+	  modules_io/shapes/io_shapes/Makefile.am,
+	  modules_io/table/io_table_odbc/Makefile.am,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.cpp,
+	  modules_lectures/lectures/lectures_introduction/Makefile.am,
+	  modules_projection/pj_georeference/pj_georeference/Makefile.am,
+	  modules_projection/pj_geotrans/pj_geotrans/Makefile.am,
+	  modules_projection/pj_proj4/pj_proj4/Makefile.am,
+	  modules_recreations/recreations/recreations_fractals/Makefile.am,
+	  modules_recreations/recreations/recreations_games/Makefile.am,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Makefile.am,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_01.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile.am,
+	  modules_simulation/hydrology/sim_hydrology/Makefile.am,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.cpp,
+	  modules_template/template/template/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/distance_gradient.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  saga_core/saga_api/Makefile.am, saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/doc_pdf.cpp, saga_core/saga_api/doc_pdf.h,
+	  saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/grid_system.cpp,
+	  saga_core/saga_api/mat_regression.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/shapes_io.cpp,
+	  saga_core/saga_api/table_dbase.cpp,
+	  saga_core/saga_cmd/Makefile.am, saga_core/saga_cmd/callback.cpp,
+	  saga_core/saga_cmd/module_library.cpp,
+	  saga_core/saga_gui/Makefile.am,
+	  saga_core/saga_gui/dlg_colors.cpp,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/parameters_properties.cpp,
+	  saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  saga_core/saga_gui/wksp_table.cpp: more wxGTK unicode fixes
+
+2007-01-05 17:39  tschorr
+
+	* src/saga_core/: saga_api/api_core.h, saga_api/api_file.cpp,
+	  saga_api/api_string.cpp, saga_api/saga_api_to_python_linux.py,
+	  saga_gui/dlg_colors.cpp, saga_gui/dlg_list_grid.cpp,
+	  saga_gui/dlg_list_shapes.cpp, saga_gui/dlg_list_table.cpp,
+	  saga_gui/dlg_list_tin.cpp, saga_gui/dlg_parameters.cpp,
+	  saga_gui/parameters_control.cpp,
+	  saga_gui/parameters_properties.cpp, saga_gui/res_controls.h,
+	  saga_gui/view_map_3d.cpp, saga_gui/view_scatterplot.cpp,
+	  saga_gui/wksp_map.cpp, saga_gui/wksp_module_manager.cpp,
+	  saga_gui/wksp_shapes_points.cpp, saga_gui/wksp_shapes_type.cpp:
+	  fixed some wxGTK unicode issues
+
+2006-12-28 16:59  oconrad
+
+	* src/saga_core/saga_api/: grid_io.cpp, grid_memory.cpp: no message
+
+2006-12-21 18:09  oconrad
+
+	* src/saga_core/saga_gui/saga_frame.cpp: no message
+
+2006-12-13 18:35  oconrad
+
+	* src/saga_core/saga_gui/: view_scatterplot.cpp,
+	  view_scatterplot.h, view_histogram.cpp: no message
+
+2006-12-13 16:34  oconrad
+
+	* src/saga_core/saga_gui/: dlg_base.cpp, view_map.cpp,
+	  view_scatterplot.cpp, wksp_base_control.cpp: no message
+
+2006-12-12 18:16  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.cpp,
+	  saga_core/saga_api/dataobject.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/grid_memory.cpp, saga_core/saga_api/module.h,
+	  saga_core/saga_api/table.h,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/wksp_grid.cpp: no message
+
+2006-12-12 14:57  oconrad
+
+	* src/saga_core/saga_gui/saga_frame.cpp: no message
+
+2006-12-12 14:17  oconrad
+
+	* src/saga_core/saga_gui/saga_frame.cpp: no message
+
+2006-12-12 12:25  oconrad
+
+	* src/saga_core/saga_gui/: wx/propgrid/advprops.cpp,
+	  wx/propgrid/advprops.h, wx/propgrid/manager.cpp,
+	  wx/propgrid/manager.h, wx/propgrid/odcombo.cpp,
+	  wx/propgrid/odcombo.h, wx/propgrid/propdev.h,
+	  wx/propgrid/propgrid.cpp, wx/propgrid/propgrid.h,
+	  wx/propgrid/props.cpp, dlg_about.cpp: no message
+
+2006-12-11 18:00  oconrad
+
+	* src/: modules_io/shapes/io_shapes/Makefile.am,
+	  modules_io/shapes/io_shapes/io_shapes.dsp,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes/MLB_Interface.cpp,
+	  modules_io/shapes/io_shapes/makefile.linux,
+	  modules_io/shapes/io_shapes/makefile.mingw,
+	  modules_io/shapes/io_shapes/wasp_map.cpp,
+	  modules_io/shapes/io_shapes/wasp_map.h,
+	  saga_core/saga_cmd/saga_cmd.cpp: no message
+
+2006-12-08 10:50  oconrad
+
+	* src/saga.sln: UNICODE support
+
+2006-12-08 10:42  oconrad
+
+	* src/saga_core/saga_core.sln: UNICODE support
+
+2006-12-08 10:28  oconrad
+
+	* src/: saga_core/saga_gui/active.cpp,
+	  saga_core/saga_gui/callback.cpp,
+	  saga_core/saga_gui/dc_helper.cpp,
+	  saga_core/saga_gui/dlg_about.cpp,
+	  saga_core/saga_gui/dlg_list_base.cpp,
+	  saga_core/saga_gui/helper.cpp, saga_core/saga_gui/helper.h,
+	  saga_core/saga_gui/info_messages.cpp,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/parameters_control.h,
+	  saga_core/saga_gui/parameters_properties.cpp,
+	  saga_core/saga_gui/parameters_properties.h,
+	  saga_core/saga_gui/project.cpp, saga_core/saga_gui/project.h,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/res_controls.cpp,
+	  saga_core/saga_gui/res_controls.h,
+	  saga_core/saga_gui/res_dialogs.cpp,
+	  saga_core/saga_gui/res_dialogs.h,
+	  saga_core/saga_gui/res_images.cpp, saga_core/saga_gui/saga.cpp,
+	  saga_core/saga_gui/saga.h, saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_gui/saga_frame.h, saga_core/saga_gui/saga_gui.dsp,
+	  saga_core/saga_gui/saga_gui.vcproj,
+	  saga_core/saga_gui/svg_interactive_map.cpp,
+	  saga_core/saga_gui/svg_interactive_map.h,
+	  saga_core/saga_gui/view_histogram.cpp,
+	  saga_core/saga_gui/view_layout.cpp,
+	  saga_core/saga_gui/view_layout_info.cpp,
+	  saga_core/saga_gui/view_map_3d.cpp,
+	  saga_core/saga_gui/view_map_3d_image.cpp,
+	  saga_core/saga_gui/view_map_3d_image.h,
+	  saga_core/saga_gui/view_map_control.cpp,
+	  saga_core/saga_gui/view_ruler.cpp,
+	  saga_core/saga_gui/view_scatterplot.cpp,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/view_table_control.h,
+	  saga_core/saga_gui/view_table_diagram.cpp,
+	  saga_core/saga_gui/wksp.cpp, saga_core/saga_gui/wksp.h,
+	  saga_core/saga_gui/wksp_base_manager.cpp,
+	  saga_core/saga_gui/wksp_data_layers.cpp,
+	  saga_core/saga_gui/wksp_data_layers.h,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_data_manager.h,
+	  saga_core/saga_gui/wksp_data_menu_file.cpp,
+	  saga_core/saga_gui/wksp_data_menu_file.h,
+	  saga_core/saga_gui/wksp_data_menu_files.cpp,
+	  saga_core/saga_gui/wksp_data_menu_files.h,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.h,
+	  saga_core/saga_gui/wksp_grid_system.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_layer.h,
+	  saga_core/saga_gui/wksp_layer_classify.cpp,
+	  saga_core/saga_gui/wksp_layer_legend.cpp,
+	  saga_core/saga_gui/wksp_map.cpp, saga_core/saga_gui/wksp_map.h,
+	  saga_core/saga_gui/wksp_map_manager.cpp,
+	  saga_core/saga_gui/wksp_module.cpp,
+	  saga_core/saga_gui/wksp_module.h,
+	  saga_core/saga_gui/wksp_module_library.cpp,
+	  saga_core/saga_gui/wksp_module_library.h,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  saga_core/saga_gui/wksp_module_manager.h,
+	  saga_core/saga_gui/wksp_module_menu.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_shapes.h,
+	  saga_core/saga_gui/wksp_shapes_edit.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.h,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_shapes_polygon.cpp,
+	  saga_core/saga_gui/wksp_shapes_type.cpp,
+	  saga_core/saga_gui/wksp_table.cpp,
+	  saga_core/saga_gui/wksp_table.h,
+	  saga_core/saga_gui/wksp_table_manager.cpp,
+	  saga_core/saga_gui/wksp_table_manager.h,
+	  saga_core/saga_gui/wksp_tin.cpp,
+	  saga_core/saga_gui/wksp_tin_manager.cpp,
+	  saga_core/saga_gui/wksp_tin_manager.h,
+	  modules/shapes/shapes_points/AddCoordinates.cpp,
+	  modules/shapes/shapes_points/CountPoints.cpp,
+	  modules/shapes/shapes_points/CreatePointGrid.cpp,
+	  modules/shapes/shapes_points/DistanceMatrix.cpp,
+	  modules/shapes/shapes_points/FitNPointsToShape.cpp,
+	  modules/shapes/shapes_points/MLB_Interface.cpp,
+	  modules/shapes/shapes_points/Points_From_Lines.cpp,
+	  modules/shapes/shapes_points/Points_From_Table.cpp,
+	  modules/shapes/shapes_points/shapes_points.dsp,
+	  modules/shapes/shapes_points/shapes_points.vcproj,
+	  saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/api_colors.cpp, saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_file.cpp,
+	  saga_core/saga_api/api_history.cpp,
+	  saga_core/saga_api/api_memory.cpp,
+	  saga_core/saga_api/api_string.cpp,
+	  saga_core/saga_api/api_translator.cpp,
+	  saga_core/saga_api/compatibility.h,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/dataobject.h, saga_core/saga_api/doc_html.cpp,
+	  saga_core/saga_api/doc_html.h, saga_core/saga_api/doc_pdf.cpp,
+	  saga_core/saga_api/doc_pdf.h, saga_core/saga_api/doc_svg.cpp,
+	  saga_core/saga_api/doc_svg.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/grid_memory.cpp,
+	  saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/grid_system.cpp,
+	  saga_core/saga_api/mat_formula.cpp,
+	  saga_core/saga_api/mat_matrix.cpp,
+	  saga_core/saga_api/mat_regression.cpp,
+	  saga_core/saga_api/mat_tools.h, saga_core/saga_api/mat_trend.cpp,
+	  saga_core/saga_api/module.cpp, saga_core/saga_api/module.h,
+	  saga_core/saga_api/module_grid.cpp,
+	  saga_core/saga_api/module_library.cpp,
+	  saga_core/saga_api/module_library.h,
+	  saga_core/saga_api/module_library_interface.cpp,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h, saga_core/saga_api/saga_api.cpp,
+	  saga_core/saga_api/saga_api.dsp, saga_core/saga_api/saga_api.h,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_api/saga_api_to_python_win.py,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_io.cpp, saga_core/saga_api/table.cpp,
+	  modules_io/shapes/io_shapes/MLB_Interface.cpp,
+	  modules_io/shapes/io_shapes/atlas_bna.cpp,
+	  modules_io/shapes/io_shapes/atlas_bna.h,
+	  modules_io/shapes/io_shapes/generate.cpp,
+	  modules_io/shapes/io_shapes/generate.h,
+	  modules_io/shapes/io_shapes/gstat.cpp,
+	  modules_io/shapes/io_shapes/gstat.h,
+	  modules_io/shapes/io_shapes/io_shapes.dsp,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes/surfer_bln.cpp,
+	  modules_io/shapes/io_shapes/surfer_bln.h,
+	  modules_io/shapes/io_shapes/xyz.cpp,
+	  modules_io/shapes/io_shapes/xyz.h,
+	  modules_recreations/recreations/recreations_fractals/Bifurcation.cpp,
+	  modules_recreations/recreations/recreations_fractals/Gaussian_Landscapes.cpp,
+	  modules_recreations/recreations/recreations_fractals/Grid_FractalDimension.cpp,
+	  modules_recreations/recreations/recreations_fractals/MLB_Interface.cpp,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.cpp,
+	  modules_recreations/recreations/recreations_fractals/Newton.cpp,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/BasinGrid.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/CellBalance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/EdgeContamination.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/EdgeContamination.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/FlowDepth.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaDownslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaDownslope.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveUp.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesConst.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesVar.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SAGA_Wetness_Index.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SAGA_Wetness_Index.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Sinuosity.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SlopeLength.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcproj,
+	  saga_core/saga_api/table.h, saga_core/saga_api/table_dbase.cpp,
+	  saga_core/saga_api/table_dbase.h,
+	  saga_core/saga_api/table_io.cpp,
+	  saga_core/saga_api/table_record.cpp,
+	  saga_core/saga_api/table_value.h, saga_core/saga_api/tin.cpp,
+	  saga_core/saga_api/tin.h,
+	  modules_io/grid/io_grid/MLB_Interface.cpp,
+	  modules_io/grid/io_grid/bmp_export.cpp,
+	  modules_io/grid/io_grid/bmp_export.h,
+	  modules_io/grid/io_grid/erdas_lan.cpp,
+	  modules_io/grid/io_grid/erdas_lan.h,
+	  modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  modules_io/grid/io_grid/esri_arcinfo.h,
+	  modules_io/grid/io_grid/grid_table.cpp,
+	  modules_io/grid/io_grid/grid_table.h,
+	  modules_io/grid/io_grid/io_grid.dsp,
+	  modules_io/grid/io_grid/io_grid.vcproj,
+	  modules_io/grid/io_grid/mola.cpp, modules_io/grid/io_grid/mola.h,
+	  modules_io/grid/io_grid/raw.cpp, modules_io/grid/io_grid/raw.h,
+	  modules_io/grid/io_grid/srtm30.cpp,
+	  modules_io/grid/io_grid/srtm30.h,
+	  modules_io/grid/io_grid/surfer.cpp,
+	  modules_io/grid/io_grid/surfer.h,
+	  modules_io/grid/io_grid/usgs_srtm.cpp,
+	  modules_io/grid/io_grid/usgs_srtm.h,
+	  modules_io/grid/io_grid/xyz.cpp, modules_io/grid/io_grid/xyz.h,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.cpp,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.dsp,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/D8_Flow_Analysis.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Strahler.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.vcproj,
+	  saga_core/saga_cmd/callback.cpp, saga_core/saga_cmd/callback.h,
+	  saga_core/saga_cmd/module_library.cpp,
+	  saga_core/saga_cmd/module_library.h,
+	  saga_core/saga_cmd/saga_cmd.cpp, saga_core/saga_cmd/saga_cmd.dsp,
+	  saga_core/saga_cmd/saga_cmd.vcproj,
+	  modules/grid/grid_analysis/Cost_Anisotropic.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/MLB_Interface.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.dsp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.vcproj,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/rgbOverlay.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/tomaschTool.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Engine.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Shapes.cpp,
+	  modules_projection/pj_georeference/pj_georeference/MLB_Interface.cpp,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.dsp,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Curvature_Classification.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Curvature_Classification.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Hypsometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Morphometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/SurfaceSpecificPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/SurfaceSpecificPoints.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/distance_gradient.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/mrvbf.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcproj,
+	  modules/grid/grid_analysis/Cost_Anisotropic.h,
+	  modules/grid/grid_analysis/Cost_Isotropic.cpp,
+	  modules/grid/grid_analysis/Cost_Isotropic.h,
+	  modules/grid/grid_analysis/Cost_PolarToRect.cpp,
+	  modules/grid/grid_analysis/Cost_PolarToRect.h,
+	  modules/grid/grid_analysis/Cost_RectToPolar.cpp,
+	  modules/grid/grid_analysis/Cost_RectToPolar.h,
+	  modules/grid/grid_analysis/CoveredDistance.cpp,
+	  modules/grid/grid_analysis/CrossClassification.cpp,
+	  modules/grid/grid_analysis/Fuzzify.cpp,
+	  modules/grid/grid_analysis/Fuzzify.h,
+	  modules/grid/grid_analysis/FuzzyAND.cpp,
+	  modules/grid/grid_analysis/FuzzyAND.h,
+	  modules/grid/grid_analysis/FuzzyOR.cpp,
+	  modules/grid/grid_analysis/FuzzyOR.h,
+	  modules/grid/grid_analysis/Grid_AHP.cpp,
+	  modules/grid/grid_analysis/Grid_AggregationIndex.cpp,
+	  modules/grid/grid_analysis/Grid_CVA.cpp,
+	  modules/grid/grid_analysis/Grid_LayerOfMaximumValue.cpp,
+	  modules/grid/grid_analysis/Grid_Pattern.cpp,
+	  modules/grid/grid_analysis/Image_VI_Distance.cpp,
+	  modules/grid/grid_analysis/Image_VI_Distance.h,
+	  modules/grid/grid_analysis/Image_VI_Slope.cpp,
+	  modules/grid/grid_analysis/Image_VI_Slope.h,
+	  modules/grid/grid_analysis/LeastCostPathProfile.cpp,
+	  modules/grid/grid_analysis/LeastCostPathProfile.h,
+	  modules/grid/grid_analysis/MLB_Interface.cpp,
+	  modules/grid/grid_analysis/grid_analysis.dsp,
+	  modules/grid/grid_analysis/grid_analysis.vcproj,
+	  modules/grid/grid_analysis/owa.cpp,
+	  modules/shapes/shapes_tools/CreateChartLayer.cpp,
+	  modules/shapes/shapes_tools/CreateWebContent.cpp,
+	  modules/shapes/shapes_tools/CreateWebContent.h,
+	  modules/shapes/shapes_tools/GraticuleBuilder.cpp,
+	  modules/shapes/shapes_tools/JoinTables.cpp,
+	  modules/shapes/shapes_tools/MLB_Interface.cpp,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.cpp,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.h,
+	  modules/shapes/shapes_tools/QueryBuilder.cpp,
+	  modules/shapes/shapes_tools/SearchInTable.cpp,
+	  modules/shapes/shapes_tools/SelectByTheme.cpp,
+	  modules/shapes/shapes_tools/SeparateShapes.cpp,
+	  modules/shapes/shapes_tools/Shapes_Assign_Table.cpp,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.cpp,
+	  modules/shapes/shapes_tools/shapes_cut.cpp,
+	  modules/shapes/shapes_tools/shapes_cut.h,
+	  modules/shapes/shapes_tools/shapes_cut_interactive.cpp,
+	  modules/shapes/shapes_tools/shapes_cut_interactive.h,
+	  modules/shapes/shapes_tools/Shapes_Merge.cpp,
+	  modules/shapes/shapes_tools/Shapes_Merge.h,
+	  modules/shapes/shapes_tools/Shapes_Report.cpp,
+	  modules/shapes/shapes_tools/Shapes_Report.h,
+	  modules/shapes/shapes_tools/Summarize.cpp,
+	  modules/shapes/shapes_tools/Summarize.h,
+	  modules/shapes/shapes_tools/TransformShapes.cpp,
+	  modules/shapes/shapes_tools/shapes_split.cpp,
+	  modules/shapes/shapes_tools/shapes_split.h,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp,
+	  modules_simulation/hydrology/sim_hydrology/MLB_Interface.cpp,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.dsp,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.vcproj,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.cpp,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.cpp,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.h,
+	  modules_io/esri_e00/io_esri_e00/MLB_Interface.cpp,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.dsp,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.vcproj,
+	  modules_lectures/lectures/lectures_introduction/Exercise_01.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_02.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_03.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_04.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_05.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_06.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_10.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_11.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_12.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_13.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_14.cpp,
+	  modules_lectures/lectures/lectures_introduction/MLB_Interface.cpp,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.dsp,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.vcproj,
+	  modules_simulation/hydrology/sim_hydrology/WaterRetentionCapacity.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Eliminator.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcproj,
+	  modules/grid/grid_filter/Filter.cpp,
+	  modules/grid/grid_filter/FilterClumps.cpp,
+	  modules/grid/grid_filter/Filter_3x3.cpp,
+	  modules/grid/grid_filter/Filter_Gauss.cpp,
+	  modules/grid/grid_filter/Filter_LoG.cpp,
+	  modules/grid/grid_filter/Filter_Multi_Dir_Lee.cpp,
+	  modules/grid/grid_filter/MLB_Interface.cpp,
+	  modules/grid/grid_filter/grid_filter.dsp,
+	  modules/grid/grid_filter/grid_filter.vcproj,
+	  modules/table/table_calculus/Fit.cpp,
+	  modules/table/table_calculus/MLB_Interface.cpp,
+	  modules/table/table_calculus/Table_Calculator.cpp,
+	  modules/table/table_calculus/Table_CalculatorShapes.cpp,
+	  modules/table/table_calculus/Table_Trend.cpp,
+	  modules/table/table_calculus/table_calculus.dsp,
+	  modules/table/table_calculus/table_calculus.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance_Radius.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance_Radius.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcproj,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.h,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.h,
+	  modules_projection/pj_geotrans/pj_geotrans/MLB_Interface.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.dsp,
+	  modules_io/gps/io_gps/GPSBabel.cpp,
+	  modules_io/gps/io_gps/gpx2shp.cpp,
+	  modules_io/table/io_table_odbc/Get_Table.cpp,
+	  modules_io/table/io_table_odbc/Get_Table.h,
+	  modules_io/table/io_table_odbc/MLB_Interface.cpp,
+	  modules_io/table/io_table_odbc/io_table_odbc.dsp,
+	  modules_io/table/io_table_odbc/io_table_odbc.vcproj,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.vcproj,
+	  modules/grid/grid_tools/Grid_Aggregate.cpp,
+	  modules/grid/grid_tools/Grid_Aggregate.h,
+	  modules/grid/grid_tools/Grid_Buffer.cpp,
+	  modules/grid/grid_tools/Grid_Buffer.h,
+	  modules/grid/grid_tools/Grid_CombineGrids.cpp,
+	  modules/grid/grid_tools/Grid_Completion.cpp,
+	  modules/grid/grid_tools/Grid_Completion.h,
+	  modules/grid/grid_tools/Grid_ConstantGrid.cpp,
+	  modules/grid/grid_tools/Grid_ConstantGrid.h,
+	  modules/grid/grid_tools/Grid_CropToData.cpp,
+	  modules/grid/grid_tools/Grid_CropToData.h,
+	  modules/grid/grid_tools/Grid_Cut.cpp,
+	  modules/grid/grid_tools/Grid_Cut.h,
+	  modules/grid/grid_tools/Grid_Fill.cpp,
+	  modules/grid/grid_tools/Grid_Fill.h,
+	  modules/grid/grid_tools/Grid_Gaps.cpp,
+	  modules/grid/grid_tools/Grid_Gaps.h,
+	  modules/grid/grid_tools/Grid_Gaps_OneCell.cpp,
+	  modules/grid/grid_tools/Grid_Gaps_OneCell.h,
+	  modules/grid/grid_tools/Grid_InvertNoData.cpp,
+	  modules/grid/grid_tools/Grid_Merge.cpp,
+	  modules/grid/grid_tools/Grid_Merge.h,
+	  modules/grid/grid_tools/Grid_Orientation.cpp,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/grid/grid_tools/Grid_Resample.h,
+	  modules/grid/grid_tools/Grid_SortRaster.cpp,
+	  modules/grid/grid_tools/Grid_ThresholdBuffer.cpp,
+	  modules/grid/grid_tools/Grid_ThresholdBuffer.h,
+	  modules/grid/grid_tools/grid_tools.dsp,
+	  modules/grid/grid_tools/grid_tools.vcproj,
+	  modules/grid/grid_visualisation/Grid_3D_Image.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Blend.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Rotate.cpp,
+	  modules/grid/grid_visualisation/Grid_Colors_Fit.cpp,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.cpp,
+	  modules/grid/grid_visualisation/MLB_Interface.cpp,
+	  modules/grid/grid_visualisation/grid_visualisation.dsp,
+	  modules/grid/grid_visualisation/grid_visualisation.vcproj,
+	  modules_io/gps/io_gps/MLB_Interface.cpp,
+	  modules_io/gps/io_gps/io_gps.dsp,
+	  modules_io/gps/io_gps/io_gps.vcproj,
+	  modules/grid/grid_calculus/Grid_Calculator.cpp,
+	  modules/grid/grid_calculus/Grid_Geometric_Figures.cpp,
+	  modules/grid/grid_calculus/Grid_Geometric_Figures.h,
+	  modules/grid/grid_calculus/Grid_Normalise.cpp,
+	  modules/grid/grid_calculus/Grid_Normalise.h,
+	  modules/grid/grid_calculus/Grid_Plotter.cpp,
+	  modules/grid/grid_calculus/grid_calculus.dsp,
+	  modules/grid/grid_calculus/grid_calculus.vcproj,
+	  modules/grid/grid_tools/Grid_Value_Reclassify.cpp,
+	  modules/grid/grid_tools/Grid_Value_Reclassify.h,
+	  modules/grid/grid_tools/Grid_Value_Replace.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace.h,
+	  modules/grid/grid_tools/Grid_Value_Replace_Interactive.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace_Interactive.h,
+	  modules/grid/grid_tools/Grid_Value_Request.cpp,
+	  modules/grid/grid_tools/Grid_Value_Request.h,
+	  modules/grid/grid_tools/Grid_Value_Type.cpp,
+	  modules/grid/grid_tools/Grid_Value_Type.h,
+	  modules/grid/grid_tools/GridsFromTableAndGrid.cpp,
+	  modules/grid/grid_tools/GridsFromTableAndGrid.h,
+	  modules/grid/grid_tools/MLB_Interface.cpp,
+	  modules/grid/grid_calculus/Grid_Plotter.h,
+	  modules/grid/grid_calculus/Grid_Random_Field.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Field.h,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.h,
+	  modules/grid/grid_calculus/Grid_Volume.cpp,
+	  modules/grid/grid_calculus/MLB_Interface.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.h,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.h,
+	  modules/grid/grid_discretisation/grid_discretisation.dsp,
+	  modules/grid/grid_discretisation/grid_discretisation.vcproj,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.cpp,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Contour.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Gradient.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points_Random.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp,
+	  modules/shapes/shapes_grid/MLB_Interface.cpp,
+	  modules/shapes/shapes_grid/shapes_grid.dsp,
+	  modules/shapes/shapes_grid/shapes_grid.vcproj,
+	  modules/grid/grid_discretisation/Grid_FastSegments.cpp,
+	  modules/grid/grid_discretisation/Grid_Segmentation.cpp,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.cpp,
+	  modules/grid/grid_discretisation/MLB_Interface.cpp,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/Interpolation.h,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.cpp,
+	  modules/grid/grid_gridding/Interpolation_Shepard.cpp,
+	  modules/grid/grid_gridding/Interpolation_Triangulation.cpp,
+	  modules/grid/grid_gridding/MLB_Interface.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules/grid/grid_gridding/grid_gridding.dsp,
+	  modules/grid/grid_gridding/grid_gridding.vcproj,
+	  modules_io/grid/io_grid_image/MLB_Interface.cpp,
+	  modules_io/grid/io_grid_image/grid_export.cpp,
+	  modules_io/grid/io_grid_image/grid_export.h,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules_io/grid/io_grid_image/grid_import.h,
+	  modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  modules_io/grid/io_grid_image/io_grid_image.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_ProfileFromPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile_From_Lines.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile_From_Lines.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  modules/grid/grid_spline/Gridding_Spline_BA.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.h,
+	  modules/grid/grid_spline/Gridding_Spline_MBA.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Global.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Local.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_TIN.cpp,
+	  modules/grid/grid_spline/MLB_Interface.cpp,
+	  modules/grid/grid_spline/grid_spline.dsp,
+	  modules/grid/grid_spline/grid_spline.vcproj,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_01.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_02.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/HillShade.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Visibility_Point.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj,
+	  modules/shapes/shapes_lines/Lines_From_Polygons.cpp,
+	  modules/shapes/shapes_lines/MLB_Interface.cpp,
+	  modules/shapes/shapes_lines/shapes_lines.dsp,
+	  modules/shapes/shapes_lines/shapes_lines.vcproj,
+	  modules/shapes/shapes_lines_ex/MLB_Interface.cpp,
+	  modules/shapes/shapes_lines_ex/SimplifyShapes.cpp,
+	  modules/shapes/shapes_lines_ex/shapes_lines_ex.dsp,
+	  modules/shapes/shapes_lines_ex/shapes_lines_ex.vcproj,
+	  modules_recreations/recreations/recreations_games/MLB_Interface.cpp,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper.cpp,
+	  modules_recreations/recreations/recreations_games/Sudoku.cpp,
+	  modules_recreations/recreations/recreations_games/recreations_games.dsp,
+	  modules_recreations/recreations/recreations_games/recreations_games.vcproj,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Life.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/MLB_Interface.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.dsp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.vcproj,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/MLB_Interface.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.dsp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.vcproj,
+	  modules/shapes/shapes_polygons/MLB_Interface.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Centroids.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Geometrics.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp,
+	  modules/shapes/shapes_polygons/Polygons_From_Lines.cpp,
+	  modules/shapes/shapes_polygons/shapes_polygons.dsp,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcproj,
+	  modules/table/table_tools/MLB_Interface.cpp,
+	  modules/table/table_tools/Table_Create_Empty.cpp,
+	  modules/table/table_tools/Table_Enumerate.cpp,
+	  modules/table/table_tools/Table_Rotate.cpp,
+	  modules/table/table_tools/table_tools.dsp,
+	  modules/table/table_tools/table_tools.vcproj,
+	  modules/tin/tin_tools/MLB_Interface.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.h,
+	  modules/tin/tin_tools/TIN_Flow_Trace.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Trace.h,
+	  modules/tin/tin_tools/TIN_From_Grid.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid.h,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.h,
+	  modules/tin/tin_tools/TIN_From_Shapes.cpp,
+	  modules/tin/tin_tools/TIN_From_Shapes.h,
+	  modules/tin/tin_tools/TIN_Gradient.cpp,
+	  modules/tin/tin_tools/TIN_Gradient.h,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.h,
+	  modules/tin/tin_tools/tin_tools.dsp,
+	  modules/tin/tin_tools/tin_tools.vcproj,
+	  modules_projection/pj_proj4/pj_proj4/MLB_Interface.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.h,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.dsp,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcproj,
+	  modules_template/template/template/MLB_Interface.cpp,
+	  modules_template/template/template/Template.h,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.vcproj:
+	  UNICODE support
+
+2006-12-04 10:56  oconrad
+
+	* src/: modules/shapes/shapes_grid/Grid_To_Points.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp: no
+	  message
+
+2006-11-30 13:29  oconrad
+
+	* src/: modules_projection/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/Makefile.am,
+	  saga_core/saga_gui/Makefile.am,
+	  saga_core/saga_gui/wksp_data_manager.cpp: no message
+
+2006-11-30 10:11  tschorr
+
+	* src/modules/: grid/grid_analysis/owa.h,
+	  table/table_calculus/LMFit.h: fixed gcc 4.1.1  extra
+	  qualification 'A::' on member 'A' error
+
+2006-11-29 14:39  tschorr
+
+	* src/: modules_projection/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/Makefile.am: changed
+	  some Makefile.ams to fix make dist
+
+2006-11-29 13:54  oconrad
+
+	* src/: saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_file.cpp, saga_core/saga_api/doc_pdf.cpp,
+	  modules_io/grid/io_grid/Makefile.am,
+	  modules_io/shapes/io_shapes/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile_From_Lines.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile_From_Lines.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_module_control.cpp: no message
+
+2006-11-27 18:22  oconrad
+
+	* src/: saga_core/saga_gui/active_description.cpp,
+	  saga_core/saga_gui/helper.h,
+	  modules_terrain_analysis/terrain_analysis/Makefile.am: no message
+
+2006-11-27 16:43  oconrad
+
+	* src/:
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp,
+	  saga_core/saga_gui/view_map.cpp,
+	  saga_core/saga_gui/wksp_data_layers.cpp,
+	  saga_core/saga_gui/wksp_map.cpp, saga_core/saga_gui/wksp_map.h:
+	  no message
+
+2006-11-24 17:19  oconrad
+
+	* src/: saga_core/saga_api/doc_pdf.cpp,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_api/saga_api.vcproj,
+	  modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  modules_io/grid/io_grid_image/io_grid_image.vcproj,
+	  modules_io/grid/io_grid_image/makefile.mingw,
+	  modules_io/grid/io_grid_image/specs_makefile.mingw,
+	  modules_io/table/io_table_odbc/io_table_odbc.dsp,
+	  modules_io/table/io_table_odbc/io_table_odbc.vcproj,
+	  modules_io/table/io_table_odbc/makefile.mingw,
+	  modules_io/table/io_table_odbc/specs_makefile.mingw,
+	  saga_core/saga_gui/Makefile.am,
+	  saga_core/saga_gui/makefile.linux,
+	  saga_core/saga_gui/makefile.mingw,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_commands.h, saga_core/saga_gui/saga.cpp,
+	  saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_gui/saga_frame.h, saga_core/saga_gui/saga_gui.dsp,
+	  saga_core/saga_cmd/makefile.linux,
+	  saga_core/saga_cmd/makefile.mingw,
+	  saga_core/saga_cmd/saga_cmd.dsp,
+	  saga_core/saga_cmd/saga_cmd.vcproj,
+	  saga_core/saga_gui/saga_gui.vcproj, saga_core/saga_gui/wksp.cpp,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_data_control.cpp,
+	  saga_core/saga_gui/wksp_data_layers.cpp,
+	  saga_core/saga_gui/wksp_data_layers.h,
+	  saga_core/saga_gui/wx/propgrid/propgrid.cpp,
+	  saga_core/saga_gui/res/saga_tip.txt: no message
+
+2006-11-23 14:50  oconrad
+
+	* src/: modules_io/shapes/io_shapes/surfer_bln.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp: no message
+
+2006-11-22 19:48  oconrad
+
+	* src/saga_core/saga_gui/wksp_data_layers.cpp: no message
+
+2006-11-22 18:48  oconrad
+
+	* src/saga_core/saga_gui/: Makefile.am, active.cpp, active.h,
+	  active_layers.cpp, active_layers.h, makefile.linux,
+	  makefile.mingw, res_images.h, saga_frame.cpp, saga_gui.dsp,
+	  saga_gui.vcproj, wksp.cpp, wksp.h, wksp_base_control.cpp,
+	  wksp_base_manager.cpp, wksp_data_control.cpp,
+	  wksp_data_layers.cpp, wksp_data_layers.h, wksp_layer.cpp,
+	  wx/propgrid/odcombo.cpp: no message
+
+2006-11-21 15:53  oconrad
+
+	* src/saga_core/saga_gui/: active.cpp, active.h, active_layers.cpp,
+	  active_layers.h, res_images.h, saga_frame.cpp, saga_frame.h,
+	  wksp_layer.cpp: no message
+
+2006-11-21 11:53  oconrad
+
+	* src/saga_core/saga_gui/: Makefile.am, makefile.linux,
+	  makefile.mingw, saga_gui.vcproj: no message
+
+2006-11-20 19:43  oconrad
+
+	* src/saga_core/saga_gui/: active.cpp, active.h, active_layers.cpp,
+	  active_layers.h, saga_gui.dsp, svg_interactive_map.cpp,
+	  wksp_grid.cpp, wksp_grid.h, wksp_layer.cpp, wksp_layer.h,
+	  wksp_shapes.cpp: no message
+
+2006-11-20 16:18  oconrad
+
+	* src/saga_core/saga_gui/parameters_control.cpp: no message
+
+2006-11-20 12:23  oconrad
+
+	* src/saga_core/saga_gui/: dc_helper.cpp, view_map.cpp: no message
+
+2006-11-17 16:18  oconrad
+
+	* src/: modules/grid/grid_tools/Grid_Value_Reclassify.cpp,
+	  modules/grid/grid_tools/Grid_Value_Reclassify.h,
+	  saga_core/saga_gui/wx/propgrid/odcombo.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_gui/saga_gui.dsp: no message
+
+2006-11-17 11:58  oconrad
+
+	* src/modules_geostatistics/geostatistics/geostatistics_grid/:
+	  GSGrid_Zonal_Statistics.cpp, GSGrid_Zonal_Statistics.h: no
+	  message
+
+2006-11-16 17:34  oconrad
+
+	* src/modules/shapes/shapes_tools/shapes_cut.cpp: no message
+
+2006-11-16 16:25  oconrad
+
+	* src/: modules/shapes/shapes_tools/shapes_cut.cpp,
+	  modules/shapes/shapes_tools/shapes_cut.h,
+	  modules/shapes/shapes_tools/shapes_cut_interactive.cpp,
+	  modules/shapes/shapes_tools/shapes_cut_interactive.h,
+	  modules/shapes/shapes_tools/shapes_split.cpp,
+	  modules/shapes/shapes_tools/shapes_split.h,
+	  modules/shapes/shapes_tools/CreateWebContent.h,
+	  modules/shapes/shapes_tools/GraticuleBuilder.cpp,
+	  modules/shapes/shapes_tools/GraticuleBuilder.h,
+	  modules/shapes/shapes_tools/MLB_Interface.cpp,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.cpp,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.h,
+	  modules/shapes/shapes_tools/QueryBuilder.h,
+	  modules/shapes/shapes_tools/QueryParser.cpp,
+	  modules/shapes/shapes_tools/SelectByTheme.h,
+	  modules/shapes/shapes_tools/SeparateShapes.cpp,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.h,
+	  modules/shapes/shapes_tools/ShapeSelector.cpp,
+	  modules/shapes/shapes_tools/Shapes_Merge.h,
+	  modules/shapes/shapes_tools/Summarize.h,
+	  modules/shapes/shapes_tools/makefile.linux,
+	  modules/shapes/shapes_tools/makefile.mingw,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_gui/dlg_parameters.cpp,
+	  saga_core/saga_gui/parameters_control.cpp: no message
+
+2006-11-15 21:04  oconrad
+
+	* src/saga_core/saga_gui/: parameters_control.cpp,
+	  parameters_control.h, wksp_map.cpp, wksp_map_manager.cpp: no
+	  message
+
+2006-11-15 16:55  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.cpp,
+	  saga_core/saga_api/shape.cpp, saga_core/saga_api/shape_line.cpp,
+	  saga_core/saga_api/shape_point.cpp,
+	  saga_core/saga_api/shape_points.cpp,
+	  saga_core/saga_api/shape_polygon.cpp,
+	  saga_core/saga_gui/view_map_control.cpp: no message
+
+2006-11-14 15:41  oconrad
+
+	* src/modules/grid/grid_gridding/: Shapes2Grid.cpp, Shapes2Grid.h:
+	  no message
+
+2006-11-13 20:49  oconrad
+
+	* src/modules/grid/grid_gridding/Shapes2Grid.cpp: no message
+
+2006-11-10 18:11  oconrad
+
+	* src/:
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules/grid/grid_gridding/grid_gridding.dsp,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp: no message
+
+2006-11-09 17:03  oconrad
+
+	* src/saga_core/saga_api/shapes.cpp: no message
+
+2006-11-08 15:03  oconrad
+
+	* src/saga_core/: saga_gui/active.cpp, saga_gui/active.h,
+	  saga_gui/active_parameters.cpp, saga_gui/parameters_control.cpp,
+	  saga_gui/parameters_properties.cpp,
+	  saga_gui/parameters_properties.h, saga_gui/project.cpp,
+	  saga_gui/res_dialogs.cpp, saga_gui/res_dialogs.h,
+	  saga_gui/saga.cpp, saga_gui/saga_frame.cpp,
+	  saga_gui/view_map.cpp, saga_gui/wksp_base_manager.cpp,
+	  saga_gui/wksp_layer.cpp, saga_gui/wksp_layer.h,
+	  saga_gui/wksp_table.cpp, saga_gui/wksp_table.h,
+	  saga_api/grid_io.cpp, saga_api/shapes.cpp: no message
+
+2006-11-01 20:19  oconrad
+
+	* src/modules_geostatistics/geostatistics/geostatistics_kriging/:
+	  Kriging_Base.cpp, Kriging_Universal.cpp: no message
+
+2006-11-01 20:15  oconrad
+
+	* src/saga_core/saga_api/: shapes.cpp, shapes.h: no message
+
+2006-10-31 14:32  oconrad
+
+	* src/:
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  saga_core/saga_api/compatibility.h,
+	  saga_core/saga_api/module.cpp, saga_core/saga_api/module.h,
+	  saga_core/saga_api/module_library.cpp,
+	  modules/shapes/shapes_tools/CreateChartLayer.cpp,
+	  modules/shapes/shapes_tools/Summarize.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.h,
+	  modules_io/table/io_table_odbc/Get_Table.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules/grid/grid_tools/Grid_Cut.cpp,
+	  modules/grid/grid_tools/Grid_Merge.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.cpp,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.cpp,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.cpp,
+	  saga_core/saga_cmd/module_library.cpp,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_io/grid/io_grid/srtm30.cpp: no message
+
+2006-10-30 18:42  oconrad
+
+	* src/saga_core/saga_api/api_callback.cpp: no message
+
+2006-10-29 19:07  oconrad
+
+	* src/: saga_core/saga_api/Makefile.am,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/module_library.cpp,
+	  saga_core/saga_api/saga_api_inst.sh,
+	  saga_core/saga_api/saga_api_to_python_linux.py,
+	  saga_core/saga_api/saga_api_to_python_linux.sh,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/mrvbf.cpp:
+	  no message
+
+2006-10-27 20:34  oconrad
+
+	* src/saga_core/saga_gui/: saga_gui.dsp, wksp_data_manager.h,
+	  wksp_map.cpp, wksp_map_manager.cpp, wksp_map_manager.h,
+	  res/xpm/tb_table_row_del.xpm: no message
+
+2006-10-27 18:27  oconrad
+
+	* src/: saga_core/saga_api/api_colors.cpp,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/dataobject.h,
+	  saga_core/saga_api/grid.cpp, saga_core/saga_api/grid.h,
+	  modules_io/grid/io_grid/erdas_lan.cpp,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/distance_gradient.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_11.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.cpp,
+	  modules/grid/grid_visualisation/Grid_3D_Image.cpp,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.cpp,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  saga_core/saga_api/grid_io.cpp,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.cpp,
+	  saga_core/saga_api/grid_memory.cpp,
+	  saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/module.cpp, saga_core/saga_api/module.h,
+	  saga_core/saga_api/saga_api.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/HillShade.cpp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Life.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Morphometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/mrvbf.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SlopeLength.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp,
+	  saga_core/saga_gui/saga.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp: no message
+
+2006-10-26 17:36  oconrad
+
+	* src/: saga_core/saga_api/api_colors.cpp,
+	  saga_core/saga_api/api_core.h, saga_core/saga_api/grid.h,
+	  saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/grid_memory.cpp,
+	  saga_core/saga_api/mat_formula.cpp,
+	  saga_core/saga_api/mat_tools.h, saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/table.h, modules/table/table_calculus/Fit.cpp,
+	  saga_core/saga_gui/helper.cpp, saga_core/saga_gui/saga.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcproj,
+	  saga_core/saga_gui/saga.h,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  modules_io/grid/io_grid/raw.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/distance_gradient.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/distance_gradient.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/mrvbf.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/mrvbf.h:
+	  no message
+
+2006-10-26 12:35  oconrad
+
+	* src/: saga_core/saga_gui/active.cpp, saga_core/saga_gui/active.h,
+	  saga_core/saga_gui/active_attributes.cpp,
+	  saga_core/saga_gui/active_attributes.h,
+	  saga_core/saga_gui/active_parameters.cpp,
+	  saga_core/saga_gui/active_parameters.h,
+	  saga_core/saga_gui/callback.cpp,
+	  saga_core/saga_gui/dlg_list_base.cpp,
+	  saga_core/saga_gui/dlg_list_base.h,
+	  saga_core/saga_gui/dlg_list_grid.cpp,
+	  saga_core/saga_gui/dlg_list_grid.h,
+	  saga_core/saga_gui/dlg_list_shapes.cpp,
+	  saga_core/saga_gui/dlg_list_shapes.h,
+	  saga_core/saga_gui/dlg_list_table.cpp,
+	  saga_core/saga_gui/dlg_list_table.h,
+	  saga_core/saga_gui/dlg_list_tin.cpp,
+	  saga_core/saga_gui/dlg_list_tin.h,
+	  saga_core/saga_gui/dlg_parameters.cpp,
+	  saga_core/saga_gui/dlg_parameters.h,
+	  saga_core/saga_gui/dlg_table.cpp, saga_core/saga_gui/dlg_table.h,
+	  saga_core/saga_gui/helper.cpp, saga_core/saga_gui/helper.h,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/parameters_control.h,
+	  saga_core/saga_gui/parameters_properties.cpp,
+	  saga_core/saga_gui/parameters_properties.h,
+	  saga_core/saga_gui/project.cpp, saga_core/saga_gui/project.h,
+	  saga_core/saga_gui/res_dialogs.cpp,
+	  saga_core/saga_gui/res_dialogs.h,
+	  saga_core/saga_gui/svg_interactive_map.cpp,
+	  saga_core/saga_gui/svg_interactive_map.h,
+	  saga_core/saga_gui/view_histogram.cpp,
+	  saga_core/saga_gui/view_map_3d.cpp,
+	  saga_core/saga_gui/view_map_3d.h,
+	  saga_core/saga_gui/view_map_3d_image.cpp,
+	  saga_core/saga_gui/view_map_3d_image.h,
+	  saga_core/saga_gui/view_map_control.cpp,
+	  saga_core/saga_gui/view_scatterplot.cpp,
+	  saga_core/saga_gui/view_scatterplot.h,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/view_table_control.h,
+	  saga_core/saga_gui/view_table_diagram.cpp,
+	  saga_core/saga_gui/view_table_diagram.h,
+	  saga_core/saga_gui/wksp_base_item.cpp,
+	  saga_core/saga_gui/wksp_base_item.h,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_data_manager.h,
+	  saga_core/saga_gui/wksp_grid.cpp, saga_core/saga_gui/wksp_grid.h,
+	  saga_core/saga_gui/wksp_grid_manager.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.h,
+	  saga_core/saga_gui/wksp_grid_system.cpp,
+	  saga_core/saga_gui/wksp_grid_system.h,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_layer.h,
+	  saga_core/saga_gui/wksp_layer_classify.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.h,
+	  saga_core/saga_gui/wksp_layer_legend.cpp,
+	  saga_core/saga_gui/wksp_layer_legend.h,
+	  saga_core/saga_gui/wksp_map.cpp, saga_core/saga_gui/wksp_map.h,
+	  saga_core/saga_gui/wksp_map_dc.cpp,
+	  saga_core/saga_gui/wksp_map_dc.h,
+	  saga_core/saga_gui/wksp_map_layer.cpp,
+	  saga_core/saga_gui/wksp_map_layer.h,
+	  saga_core/saga_gui/wksp_module.cpp,
+	  saga_core/saga_gui/wksp_module.h,
+	  saga_core/saga_gui/wksp_module_library.cpp,
+	  saga_core/saga_gui/wksp_module_library.h,
+	  saga_core/saga_gui/wksp_module_manager.h,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_shapes.h,
+	  saga_core/saga_gui/wksp_shapes_edit.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.h,
+	  saga_core/saga_gui/wksp_shapes_manager.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.h,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.h,
+	  saga_core/saga_gui/wksp_shapes_points.cpp,
+	  saga_core/saga_gui/wksp_shapes_points.h,
+	  saga_core/saga_gui/wksp_shapes_polygon.cpp,
+	  saga_core/saga_gui/wksp_shapes_polygon.h,
+	  saga_core/saga_gui/wksp_shapes_type.cpp,
+	  saga_core/saga_gui/wksp_shapes_type.h,
+	  saga_core/saga_gui/wksp_table.cpp,
+	  saga_core/saga_gui/wksp_table.h,
+	  saga_core/saga_gui/wksp_table_manager.cpp,
+	  saga_core/saga_gui/wksp_table_manager.h,
+	  saga_core/saga_gui/wksp_tin.cpp, saga_core/saga_gui/wksp_tin.h,
+	  saga_core/saga_gui/wksp_tin_manager.cpp,
+	  saga_core/saga_gui/wksp_tin_manager.h,
+	  modules/shapes/shapes_points/AddCoordinates.cpp,
+	  modules/shapes/shapes_points/AddCoordinates.h,
+	  modules/shapes/shapes_points/CountPoints.cpp,
+	  modules/shapes/shapes_points/CountPoints.h,
+	  modules/shapes/shapes_points/CreatePointGrid.cpp,
+	  modules/shapes/shapes_points/CreatePointGrid.h,
+	  modules/shapes/shapes_points/DistanceMatrix.cpp,
+	  modules/shapes/shapes_points/DistanceMatrix.h,
+	  modules/shapes/shapes_points/FitNPointsToShape.cpp,
+	  modules/shapes/shapes_points/FitNPointsToShape.h,
+	  modules/shapes/shapes_points/MLB_Interface.cpp,
+	  modules/shapes/shapes_points/Points_From_Lines.cpp,
+	  modules/shapes/shapes_points/Points_From_Lines.h,
+	  modules/shapes/shapes_points/Points_From_Table.cpp,
+	  modules/shapes/shapes_points/Points_From_Table.h,
+	  saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/compatibility.h,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/dataobject.h, saga_core/saga_api/doc_html.cpp,
+	  saga_core/saga_api/doc_html.h, saga_core/saga_api/doc_pdf.cpp,
+	  saga_core/saga_api/doc_pdf.h, saga_core/saga_api/doc_svg.cpp,
+	  saga_core/saga_api/doc_svg.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/grid_memory.cpp,
+	  saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/grid_system.cpp,
+	  saga_core/saga_api/mat_regression_multiple.cpp,
+	  saga_core/saga_api/mat_tools.h, saga_core/saga_api/module.cpp,
+	  saga_core/saga_api/module.h, saga_core/saga_api/module_grid.cpp,
+	  saga_core/saga_api/module_grid_interactive.cpp,
+	  saga_core/saga_api/module_interactive.cpp,
+	  saga_core/saga_api/module_interactive_base.cpp,
+	  saga_core/saga_api/module_library.cpp,
+	  saga_core/saga_api/module_library.h,
+	  saga_core/saga_api/module_library_interface.cpp,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h, saga_core/saga_api/saga_api.h,
+	  saga_core/saga_api/saga_api.vcproj, saga_core/saga_api/shape.cpp,
+	  saga_core/saga_api/shape_line.cpp,
+	  saga_core/saga_api/shape_point.cpp,
+	  saga_core/saga_api/shape_points.cpp,
+	  saga_core/saga_api/shape_polygon.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_io.cpp,
+	  saga_core/saga_api/shapes_search.cpp,
+	  saga_core/saga_api/shapes_selection.cpp,
+	  saga_core/saga_api/table.cpp, saga_core/saga_api/table.h,
+	  saga_core/saga_api/table_dbase.cpp,
+	  saga_core/saga_api/table_dbase.h,
+	  saga_core/saga_api/table_io.cpp,
+	  saga_core/saga_api/table_record.cpp,
+	  saga_core/saga_api/table_selection.cpp,
+	  saga_core/saga_api/table_value.h, saga_core/saga_api/tin.cpp,
+	  modules_io/shapes/io_shapes/atlas_bna.cpp,
+	  modules_io/shapes/io_shapes/atlas_bna.h,
+	  modules_io/shapes/io_shapes/generate.cpp,
+	  saga_core/saga_api/tin.h, saga_core/saga_api/tin_elements.cpp,
+	  saga_core/saga_api/tin_triangulation.cpp,
+	  modules_io/shapes/io_shapes/MLB_Interface.cpp,
+	  modules_io/shapes/io_shapes/generate.h,
+	  modules_io/shapes/io_shapes/gstat.cpp,
+	  modules_io/shapes/io_shapes/gstat.h,
+	  modules_io/shapes/io_shapes/surfer_bln.cpp,
+	  modules_io/shapes/io_shapes/surfer_bln.h,
+	  modules_io/shapes/io_shapes/xyz.cpp,
+	  modules_io/shapes/io_shapes/xyz.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/BasinGrid.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/BasinGrid.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/CellBalance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/CellBalance.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/EdgeContamination.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaDownslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaDownslope.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/FlowDepth.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/FlowDepth.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveUp.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Helper.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesConst.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesConst.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesVar.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesVar.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SAGA_Wetness_Index.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SAGA_Wetness_Index.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Sinuosity.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Sinuosity.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SlopeLength.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.h,
+	  modules_recreations/recreations/recreations_fractals/Bifurcation.cpp,
+	  modules_recreations/recreations/recreations_fractals/Bifurcation.h,
+	  modules_recreations/recreations/recreations_fractals/Gaussian_Landscapes.h,
+	  modules_recreations/recreations/recreations_fractals/Grid_FractalDimension.cpp,
+	  modules_recreations/recreations/recreations_fractals/Grid_FractalDimension.h,
+	  modules_recreations/recreations/recreations_fractals/MLB_Interface.cpp,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.cpp,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.h,
+	  modules_recreations/recreations/recreations_fractals/Newton.cpp,
+	  modules_recreations/recreations/recreations_fractals/Newton.h,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.cpp,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.h,
+	  modules_io/grid/io_grid/bmp_export.cpp,
+	  modules_io/grid/io_grid/bmp_export.h,
+	  modules_io/grid/io_grid/erdas_lan.cpp,
+	  modules_io/grid/io_grid/erdas_lan.h,
+	  modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  modules_io/grid/io_grid/esri_arcinfo.h,
+	  modules_io/grid/io_grid/MLB_Interface.cpp,
+	  modules_io/grid/io_grid/grid_table.cpp,
+	  modules_io/grid/io_grid/grid_table.h,
+	  modules_io/grid/io_grid/mola.cpp, modules_io/grid/io_grid/mola.h,
+	  modules_io/grid/io_grid/raw.cpp, modules_io/grid/io_grid/raw.h,
+	  modules_io/grid/io_grid/srtm30.cpp,
+	  modules_io/grid/io_grid/srtm30.h,
+	  modules_io/grid/io_grid/surfer.cpp,
+	  modules_io/grid/io_grid/surfer.h,
+	  modules_io/grid/io_grid/usgs_srtm.cpp,
+	  modules_io/grid/io_grid/usgs_srtm.h,
+	  modules_io/grid/io_grid/xyz.cpp, modules_io/grid/io_grid/xyz.h,
+	  saga_core/saga_cmd/callback.cpp,
+	  saga_core/saga_cmd/module_library.cpp,
+	  saga_core/saga_cmd/module_library.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/D8_Flow_Analysis.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/D8_Flow_Analysis.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Helper.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Strahler.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Strahler.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds.h,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.h,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Engine.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Engine.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.h,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.h,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Shapes.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Shapes.h,
+	  modules_projection/pj_georeference/pj_georeference/MLB_Interface.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/MLB_Interface.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/rgbOverlay.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/rgbOverlay.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/tomaschTool.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/tomaschTool.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Curvature_Classification.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Curvature_Classification.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Hypsometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Hypsometry.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Morphometry.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/SurfaceSpecificPoints.cpp,
+	  modules/grid/grid_analysis/Cost_Anisotropic.h,
+	  modules/grid/grid_analysis/Cost_Isotropic.h,
+	  modules/grid/grid_analysis/Cost_PolarToRect.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/SurfaceSpecificPoints.h,
+	  modules/grid/grid_analysis/Cost_PolarToRect.h,
+	  modules/grid/grid_analysis/Cost_RectToPolar.cpp,
+	  modules/grid/grid_analysis/Cost_RectToPolar.h,
+	  modules/grid/grid_analysis/CoveredDistance.cpp,
+	  modules/grid/grid_analysis/CoveredDistance.h,
+	  modules/grid/grid_analysis/CrossClassification.cpp,
+	  modules/grid/grid_analysis/CrossClassification.h,
+	  modules/grid/grid_analysis/Fuzzify.cpp,
+	  modules/grid/grid_analysis/Fuzzify.h,
+	  modules/grid/grid_analysis/FuzzyAND.cpp,
+	  modules/grid/grid_analysis/FuzzyAND.h,
+	  modules/grid/grid_analysis/FuzzyOR.cpp,
+	  modules/grid/grid_analysis/FuzzyOR.h,
+	  modules/grid/grid_analysis/Grid_AHP.cpp,
+	  modules/grid/grid_analysis/Grid_AggregationIndex.cpp,
+	  modules/grid/grid_analysis/Grid_AggregationIndex.h,
+	  modules/grid/grid_analysis/Grid_AHP.h,
+	  modules/grid/grid_analysis/Grid_CVA.cpp,
+	  modules/grid/grid_analysis/Grid_CVA.h,
+	  modules/grid/grid_analysis/Grid_LayerOfMaximumValue.cpp,
+	  modules/grid/grid_analysis/Grid_LayerOfMaximumValue.h,
+	  modules/grid/grid_analysis/Grid_Pattern.cpp,
+	  modules/grid/grid_analysis/Grid_Pattern.h,
+	  modules/grid/grid_analysis/Image_VI_Distance.cpp,
+	  modules/grid/grid_analysis/Image_VI_Distance.h,
+	  modules/grid/grid_analysis/Image_VI_Slope.cpp,
+	  modules/grid/grid_analysis/Image_VI_Slope.h,
+	  modules/grid/grid_analysis/LeastCostPathProfile.cpp,
+	  modules/grid/grid_analysis/LeastCostPathProfile.h,
+	  modules/grid/grid_analysis/MLB_Interface.cpp,
+	  modules/grid/grid_analysis/owa.cpp,
+	  modules/grid/grid_analysis/owa.h,
+	  modules/shapes/shapes_tools/CreateChartLayer.cpp,
+	  modules/shapes/shapes_tools/CreateChartLayer.h,
+	  modules/shapes/shapes_tools/CreateWebContent.cpp,
+	  modules/shapes/shapes_tools/CreateWebContent.h,
+	  modules/shapes/shapes_tools/GraticuleBuilder.cpp,
+	  modules/shapes/shapes_tools/GraticuleBuilder.h,
+	  modules/shapes/shapes_tools/JoinTables.cpp,
+	  modules/shapes/shapes_tools/JoinTables.h,
+	  modules/shapes/shapes_tools/MLB_Interface.cpp,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.cpp,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.h,
+	  modules/shapes/shapes_tools/QueryBuilder.cpp,
+	  modules/shapes/shapes_tools/QueryBuilder.h,
+	  modules/shapes/shapes_tools/QueryParser.cpp,
+	  modules/shapes/shapes_tools/QueryParser.h,
+	  modules/shapes/shapes_tools/SearchInTable.cpp,
+	  modules/shapes/shapes_tools/SearchInTable.h,
+	  modules/shapes/shapes_tools/SelectByTheme.cpp,
+	  modules/shapes/shapes_tools/SelectByTheme.h,
+	  modules/shapes/shapes_tools/SeparateShapes.cpp,
+	  modules/shapes/shapes_tools/SeparateShapes.h,
+	  modules/shapes/shapes_tools/Shapes_Assign_Table.cpp,
+	  modules/shapes/shapes_tools/Shapes_Assign_Table.h,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.cpp,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.h,
+	  modules/shapes/shapes_tools/Shapes_Merge.cpp,
+	  modules/shapes/shapes_tools/Shapes_Merge.h,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.cpp,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.h,
+	  modules/shapes/shapes_tools/ShapeSelector.cpp,
+	  modules/shapes/shapes_tools/ShapeSelector.h,
+	  modules/shapes/shapes_tools/Shapes_Report.cpp,
+	  modules/shapes/shapes_tools/Shapes_Report.h,
+	  modules/shapes/shapes_tools/Summarize.cpp,
+	  modules/shapes/shapes_tools/Summarize.h,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.cpp,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.h,
+	  modules/shapes/shapes_tools/TransformShapes.cpp,
+	  modules/shapes/shapes_tools/TransformShapes.h,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.cpp,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.h,
+	  modules_simulation/hydrology/sim_hydrology/idw.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.h,
+	  modules_simulation/hydrology/sim_hydrology/MLB_Interface.cpp,
+	  modules_simulation/hydrology/sim_hydrology/WaterRetentionCapacity.cpp,
+	  modules_simulation/hydrology/sim_hydrology/WaterRetentionCapacity.h,
+	  modules_simulation/hydrology/sim_hydrology/idw.h,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.cpp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.h,
+	  modules_simulation/hydrology/sim_hydrology/topmodel_values.cpp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel_values.h,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.cpp,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.h,
+	  modules_io/esri_e00/io_esri_e00/MLB_Interface.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_01.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_01.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_02.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_02.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_03.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_04.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_05.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_06.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_06.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_10.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_11.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_11.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_12.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_12.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_13.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_13.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_14.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_14.h,
+	  modules_lectures/lectures/lectures_introduction/MLB_Interface.cpp,
+	  modules/grid/grid_filter/Filter.cpp,
+	  modules/grid/grid_filter/Filter.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Eliminator.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.h,
+	  modules/grid/grid_filter/Filter_3x3.cpp,
+	  modules/grid/grid_filter/Filter_3x3.h,
+	  modules/grid/grid_filter/Filter_Gauss.cpp,
+	  modules/grid/grid_filter/Filter_Gauss.h,
+	  modules/grid/grid_filter/Filter_LoG.cpp,
+	  modules/grid/grid_filter/Filter_LoG.h,
+	  modules/grid/grid_filter/Filter_Multi_Dir_Lee.cpp,
+	  modules/grid/grid_filter/FilterClumps.h,
+	  modules/grid/grid_filter/Filter_Multi_Dir_Lee.h,
+	  modules/grid/grid_filter/MLB_Interface.cpp,
+	  modules/table/table_calculus/Fit.cpp,
+	  modules/table/table_calculus/Fit.h,
+	  modules/table/table_calculus/MLB_Interface.cpp,
+	  modules/table/table_calculus/Table_Calculator.cpp,
+	  modules/table/table_calculus/Table_Calculator.h,
+	  modules/table/table_calculus/Table_CalculatorShapes.cpp,
+	  modules/table/table_calculus/Table_CalculatorShapes.h,
+	  modules/table/table_calculus/Table_Trend.cpp,
+	  modules/table/table_calculus/Table_Trend.h,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.h,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.h,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/MLB_Interface.cpp,
+	  modules_io/gps/io_gps/GPSBabel.h,
+	  modules_io/gps/io_gps/gpx2shp.cpp,
+	  modules_io/gps/io_gps/gpx2shp.h,
+	  modules_io/table/io_table_odbc/Get_Table.cpp,
+	  modules_io/table/io_table_odbc/Get_Table.h,
+	  modules_io/table/io_table_odbc/MLB_Interface.cpp,
+	  modules/grid/grid_visualisation/Grid_3D_Image.cpp,
+	  modules/grid/grid_visualisation/Grid_3D_Image.h,
+	  modules_io/gps/io_gps/MLB_Interface.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Blend.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Blend.h,
+	  modules/grid/grid_visualisation/Grid_Color_Rotate.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Rotate.h,
+	  modules/grid/grid_visualisation/Grid_Colors_Fit.cpp,
+	  modules/grid/grid_visualisation/Grid_Colors_Fit.h,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.cpp,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.h,
+	  modules/grid/grid_visualisation/MLB_Interface.cpp,
+	  modules/grid/grid_tools/Grid_Aggregate.cpp,
+	  modules/grid/grid_tools/Grid_Aggregate.h,
+	  modules/grid/grid_tools/Grid_Buffer.cpp,
+	  modules/grid/grid_tools/Grid_Buffer.h,
+	  modules/grid/grid_tools/Grid_CombineGrids.cpp,
+	  modules/grid/grid_tools/Grid_CombineGrids.h,
+	  modules/grid/grid_tools/Grid_Completion.cpp,
+	  modules/grid/grid_tools/Grid_Completion.h,
+	  modules/grid/grid_tools/Grid_ConstantGrid.cpp,
+	  modules/grid/grid_tools/Grid_ConstantGrid.h,
+	  modules/grid/grid_tools/Grid_CropToData.cpp,
+	  modules/grid/grid_tools/Grid_CropToData.h,
+	  modules/grid/grid_tools/Grid_Cut.cpp,
+	  modules/grid/grid_tools/Grid_Cut.h,
+	  modules/grid/grid_tools/Grid_Fill.cpp,
+	  modules/grid/grid_tools/Grid_Fill.h,
+	  modules/grid/grid_tools/Grid_Gaps.cpp,
+	  modules/grid/grid_tools/Grid_Gaps.h,
+	  modules/grid/grid_tools/Grid_Gaps_OneCell.cpp,
+	  modules/grid/grid_tools/Grid_Gaps_OneCell.h,
+	  modules/grid/grid_tools/Grid_InvertNoData.cpp,
+	  modules/grid/grid_tools/Grid_InvertNoData.h,
+	  modules/grid/grid_tools/Grid_Merge.cpp,
+	  modules/grid/grid_tools/Grid_Merge.h,
+	  modules/grid/grid_tools/Grid_Orientation.cpp,
+	  modules/grid/grid_tools/Grid_Orientation.h,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/grid/grid_tools/Grid_Resample.h,
+	  modules/grid/grid_tools/Grid_SortRaster.cpp,
+	  modules/grid/grid_tools/Grid_SortRaster.h,
+	  modules/grid/grid_tools/Grid_ThresholdBuffer.cpp,
+	  modules/grid/grid_tools/Grid_ThresholdBuffer.h,
+	  modules/grid/grid_tools/Grid_Value_Reclassify.cpp,
+	  modules/grid/grid_tools/Grid_Value_Reclassify.h,
+	  modules/grid/grid_tools/Grid_Value_Replace.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace.h,
+	  modules/grid/grid_tools/Grid_Value_Replace_Interactive.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace_Interactive.h,
+	  modules/grid/grid_tools/Grid_Value_Request.cpp,
+	  modules/grid/grid_tools/Grid_Value_Request.h,
+	  modules/grid/grid_tools/Grid_Value_Type.cpp,
+	  modules/grid/grid_tools/Grid_Value_Type.h,
+	  modules/grid/grid_tools/GridsFromTableAndGrid.cpp,
+	  modules/grid/grid_tools/GridsFromTableAndGrid.h,
+	  modules/grid/grid_tools/MLB_Interface.cpp,
+	  modules/grid/grid_calculus/Grid_Calculator.cpp,
+	  modules/grid/grid_calculus/Grid_Calculator.h,
+	  modules/grid/grid_calculus/Grid_Geometric_Figures.cpp,
+	  modules/grid/grid_calculus/Grid_Geometric_Figures.h,
+	  modules/grid/grid_calculus/Grid_Normalise.cpp,
+	  modules/grid/grid_calculus/Grid_Normalise.h,
+	  modules/grid/grid_calculus/Grid_Plotter.h,
+	  modules/grid/grid_calculus/Grid_Random_Field.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Field.h,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.h,
+	  modules/grid/grid_calculus/Grid_Volume.cpp,
+	  modules/grid/grid_calculus/Grid_Volume.h,
+	  modules/grid/grid_calculus/MLB_Interface.cpp,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.h,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.cpp,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.h,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.h,
+	  modules/shapes/shapes_grid/Grid_To_Contour.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Contour.h,
+	  modules/shapes/shapes_grid/Grid_To_Gradient.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Gradient.h,
+	  modules/shapes/shapes_grid/Grid_To_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points.h,
+	  modules/shapes/shapes_grid/Grid_To_Points_Random.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points_Random.h,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Points.h,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.h,
+	  modules/shapes/shapes_grid/MLB_Interface.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.h,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.h,
+	  modules/grid/grid_discretisation/Grid_FastSegments.h,
+	  modules/grid/grid_discretisation/Grid_Segmentation.h,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.cpp,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.h,
+	  modules/grid/grid_discretisation/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_ProfileFromPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_ProfileFromPoints.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.h,
+	  modules_io/grid/io_grid_image/grid_export.cpp,
+	  modules_io/grid/io_grid_image/grid_export.h,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules_io/grid/io_grid_image/grid_import.h,
+	  modules_io/grid/io_grid_image/MLB_Interface.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_BA.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_BA.h,
+	  modules/grid/grid_spline/Gridding_Spline_Base.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.h,
+	  modules/grid/grid_spline/Gridding_Spline_MBA.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_MBA.h,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Local.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Local.h,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_TIN.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_TIN.h,
+	  modules/grid/grid_spline/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Statistics.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance_Radius.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.h,
+	  modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/HillShade.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Visibility_Point.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Visibility_Point.h,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/Interpolation.h,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.cpp,
+	  modules/grid/grid_gridding/Interpolation_Triangulation.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_01.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_01.h,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_02.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_02.h,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.h,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/MLB_Interface.cpp,
+	  modules/grid/grid_gridding/MLB_Interface.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal_Global.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/MLB_Interface.cpp,
+	  modules/shapes/shapes_lines/Lines_From_Polygons.cpp,
+	  modules/shapes/shapes_lines/Lines_From_Polygons.h,
+	  modules/shapes/shapes_lines/MLB_Interface.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Life.h,
+	  modules_simulation/cellular_automata/sim_cellular_automata/MLB_Interface.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.h,
+	  modules_recreations/recreations/recreations_games/MLB_Interface.cpp,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper.cpp,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper.h,
+	  modules_recreations/recreations/recreations_games/Sudoku.cpp,
+	  modules_recreations/recreations/recreations_games/Sudoku.h,
+	  modules/shapes/shapes_lines_ex/MLB_Interface.cpp,
+	  modules/shapes/shapes_lines_ex/SimplifyShapes.cpp,
+	  modules/shapes/shapes_lines_ex/SimplifyShapes.h,
+	  modules/shapes/shapes_polygons/MLB_Interface.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Centroids.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Centroids.h,
+	  modules/shapes/shapes_polygons/Polygon_Geometrics.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Geometrics.h,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.h,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.h,
+	  modules/shapes/shapes_polygons/Polygons_From_Lines.cpp,
+	  modules/shapes/shapes_polygons/Polygons_From_Lines.h,
+	  modules/table/table_tools/MLB_Interface.cpp,
+	  modules/table/table_tools/Table_Create_Empty.cpp,
+	  modules/table/table_tools/Table_Create_Empty.h,
+	  modules/table/table_tools/Table_Enumerate.cpp,
+	  modules/table/table_tools/Table_Enumerate.h,
+	  modules/table/table_tools/Table_Rotate.cpp,
+	  modules/table/table_tools/Table_Rotate.h,
+	  modules/tin/tin_tools/MLB_Interface.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.h,
+	  modules/tin/tin_tools/TIN_Flow_Trace.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Trace.h,
+	  modules/tin/tin_tools/TIN_From_Grid.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid.h,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.h,
+	  modules/tin/tin_tools/TIN_From_Shapes.cpp,
+	  modules/tin/tin_tools/TIN_From_Shapes.h,
+	  modules/tin/tin_tools/TIN_Gradient.cpp,
+	  modules/tin/tin_tools/TIN_Gradient.h,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.h,
+	  modules_projection/pj_proj4/pj_proj4/MLB_Interface.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.cpp,
+	  modules_template/template/template/MLB_Interface.cpp,
+	  modules_template/template/template/Template.h,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.h:
+	  no message
+
+2006-10-26 12:30  oconrad
+
+	* src/saga_core/saga_api/: saga_api_to_python_linux.py,
+	  saga_api_to_python_win.bat, saga_api_to_python_win.py: no message
+
+2006-10-23 20:21  oconrad
+
+	* src/saga_core/saga_api/: module_library.cpp, module_library.h,
+	  saga_api.dsp: no message
+
+2006-10-23 15:57  oconrad
+
+	* src/saga_core/saga_gui/: saga_frame_layout.cpp,
+	  saga_frame_layout.h: no message
+
+2006-10-23 15:32  oconrad
+
+	* src/saga_core/saga_gui/: wx/barholder.h, wx/dockhost.h,
+	  wx/dockpanel.h, wx/dockwindow.h, wx/export.h, wx/exsplitter.h,
+	  wx/gdi.h, wx/gripper.h, wx/layoutmanager.h, wx/pane.h,
+	  wx/slidebar.h, wx/toolbutton.h, wx/util.h, Makefile.am,
+	  makefile.linux, makefile.mingw, saga_frame.cpp, saga_frame.h,
+	  saga_gui.dsp, saga_gui.vcproj: no message
+
+2006-10-20 17:22  oconrad
+
+	* src/modules/grid/grid_tools/Grid_Fill.cpp: no message
+
+2006-10-19 20:12  oconrad
+
+	* src/: saga_core/saga_gui/active.cpp,
+	  saga_core/saga_gui/dlg_about.cpp, saga_core/saga_gui/info.cpp,
+	  saga_core/saga_gui/saga.cpp, saga_core/saga_gui/view_layout.cpp,
+	  saga_core/saga_gui/wksp.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  modules/grid/grid_tools/Grid_Fill.cpp,
+	  modules/grid/grid_tools/Grid_Fill.h,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_add.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_add_part.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_del_part.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_select.xpm,
+	  saga_core/saga_gui/res/xpm/tb_layout_print.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_central_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_mode_pan.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_mode_select.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_mode_zoom.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_active.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_full.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_last.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_selection.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_col_del.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_row_del.xpm: no message
+
+2006-10-17 15:16  oconrad
+
+	* src/: modules/grid/grid_filter/Filter.cpp,
+	  modules/grid/grid_filter/Filter.h,
+	  saga_core/saga_gui/wx/propgrid/advprops.cpp,
+	  saga_core/saga_gui/wx/propgrid/advprops.h,
+	  saga_core/saga_gui/wx/propgrid/manager.cpp,
+	  saga_core/saga_gui/wx/propgrid/manager.h,
+	  saga_core/saga_gui/wx/propgrid/odcombo.cpp,
+	  saga_core/saga_gui/wx/propgrid/odcombo.h,
+	  saga_core/saga_gui/wx/propgrid/propdev.h,
+	  saga_core/saga_gui/wx/propgrid/propgrid.cpp,
+	  saga_core/saga_gui/wx/propgrid/propgrid.h,
+	  saga_core/saga_gui/wx/propgrid/props.cpp,
+	  modules/grid/grid_filter/Filter_Gauss.cpp,
+	  modules/grid/grid_filter/Filter_Gauss.h,
+	  modules/grid/grid_filter/Filter_LoG.cpp,
+	  modules/grid/grid_filter/Filter_LoG.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.h,
+	  saga_core/saga_api/mat_grid_radius.cpp,
+	  saga_core/saga_api/mat_tools.h: no message
+
+2006-10-16 12:57  oconrad
+
+	* src/modules_io/grid/io_grid/: srtm30.cpp, usgs_srtm.cpp: no
+	  message
+
+2006-09-30 16:28  oconrad
+
+	* src/:
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Shapes.cpp,
+	  modules_io/grid/io_grid/usgs_srtm.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.cpp: no message
+
+2006-09-27 16:17  oconrad
+
+	* src/: modules_io/shapes/io_shapes/MLB_Interface.cpp,
+	  modules_io/shapes/io_shapes/Makefile.am,
+	  modules_io/shapes/io_shapes/atlas_bna.cpp,
+	  modules_io/shapes/io_shapes/atlas_bna.h,
+	  modules_io/shapes/io_shapes/io_shapes.dsp,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes/makefile.linux,
+	  modules_io/shapes/io_shapes/makefile.mingw,
+	  modules_io/shapes/io_shapes/xyz.cpp,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_api/shape.cpp, saga_core/saga_api/shapes.cpp,
+	  saga_core/saga_api/shapes.h, saga_core/saga_gui/saga.cpp: no
+	  message
+
+2006-09-09 14:17  oconrad
+
+	* src/saga_core/: saga_api/geo_functions.cpp,
+	  saga_gui/view_map_control.cpp, saga_gui/view_map_control.h,
+	  saga_gui/wksp_shapes.cpp: no message
+
+2006-09-08 19:04  oconrad
+
+	* src/: modules_io/gps/io_gps/gpx2shp.cpp,
+	  saga_core/saga_cmd/saga_cmd.cpp: no message
+
+2006-09-04 20:06  oconrad
+
+	* src/: saga_core/saga_gui/active.cpp,
+	  saga_core/saga_gui/active_description.cpp,
+	  saga_core/saga_gui/active_description.h,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/res_dialogs.cpp,
+	  saga_core/saga_gui/wksp_base_item.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_data_menu_files.cpp,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.h,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_tin.cpp,
+	  saga_core/saga_gui/wksp_tin_manager.cpp,
+	  modules/grid/grid_tools/Grid_Completion.cpp,
+	  modules/tin/tin_tools/MLB_Interface.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Trace.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.cpp,
+	  modules/tin/tin_tools/TIN_From_Shapes.cpp,
+	  modules/tin/tin_tools/TIN_Gradient.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.cpp,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/CellBalance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/CellBalance.h,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/tin.cpp: no message
+
+2006-08-24 19:39  oconrad
+
+	* src/saga_core/saga_cmd/module_library.cpp: no message
+
+2006-08-24 16:18  oconrad
+
+	* src/saga_core/saga_cmd/: module_library.cpp, module_library.h: no
+	  message
+
+2006-08-23 13:56  oconrad
+
+	* src/: saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/dataobject.h, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/shape_points.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/table_io.cpp, saga_core/saga_api/tin.cpp,
+	  saga_core/saga_api/tin.h, saga_core/saga_api/tin_elements.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_tools/ShapeSelector.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.cpp,
+	  saga_core/saga_gui/project.cpp, saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.cpp,
+	  saga_core/saga_gui/wksp_table.cpp,
+	  saga_core/saga_gui/wksp_table_manager.cpp,
+	  saga_core/saga_gui/wksp_tin.cpp,
+	  saga_core/saga_gui/wksp_tin_manager.cpp: no message
+
+2006-08-21 19:13  oconrad
+
+	* src/saga_core/saga_api/: dataobject.h, mat_grid_radius.cpp,
+	  mat_spline.cpp, mat_tools.h: no message
+
+2006-08-19 20:38  oconrad
+
+	* src/saga_core/: saga_api/geo_functions.cpp, saga_api/geo_tools.h,
+	  saga_api/module.h, saga_api/parameters.cpp,
+	  saga_api/parameters.h, saga_cmd/module_library.cpp,
+	  saga_gui/wksp_module_library.cpp: no message
+
+2006-08-19 16:21  oconrad
+
+	* src/: saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_gui/saga_frame_layout.cpp,
+	  saga_core/saga_gui/saga_frame_layout.h,
+	  saga_core/saga_gui/view_map_3d.cpp,
+	  saga_core/saga_gui/view_map_3d_image.cpp,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.h,
+	  saga_core/saga_gui/wksp_layer_legend.cpp,
+	  saga_core/saga_gui/wksp_map.cpp,
+	  modules/shapes/shapes_tools/SeparateShapes.cpp,
+	  modules/shapes/shapes_tools/Shapes_Report.cpp,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SlopeLength.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes_io.cpp,
+	  saga_core/saga_api/shapes_search.cpp,
+	  saga_core/saga_api/table_io.cpp, saga_core/saga_api/tin.cpp,
+	  saga_core/saga_api/tin_triangulation.cpp,
+	  saga_core/saga_gui/wksp_map.h, saga_core/saga_gui/wksp_map_dc.h,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_shapes_polygon.cpp,
+	  saga_core/saga_gui/wksp_tin.cpp,
+	  modules/grid/grid_spline/Thin_Plate_Spline.cpp,
+	  modules_recreations/recreations/recreations_games/Sudoku.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.cpp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Visibility_Point.cpp:
+	  no message
+
+2006-08-19 16:16  oconrad
+
+	* src/:
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/rgbOverlay.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal_Global.cpp,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Life.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/HillShade.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Morphometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.cpp,
+	  saga_core/saga_api/mat_matrix.cpp,
+	  saga_core/saga_api/mat_trend.cpp, saga_core/saga_api/module.cpp,
+	  saga_core/saga_api/module.h,
+	  saga_core/saga_api/module_interactive_base.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/saga_api.cpp, saga_core/saga_api/saga_api.h,
+	  saga_core/saga_cmd/saga_cmd.cpp,
+	  saga_core/saga_gui/res_dialogs.cpp: no message
+
+2006-08-19 16:09  oconrad
+
+	* src/: saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/api_colors.cpp, saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_file.cpp,
+	  saga_core/saga_api/api_history.cpp,
+	  saga_core/saga_api/compatibility.h,
+	  saga_core/saga_api/dataobject.h, saga_core/saga_api/doc_html.cpp,
+	  saga_core/saga_api/doc_pdf.cpp, saga_core/saga_api/doc_pdf.h,
+	  saga_core/saga_api/doc_svg.cpp, saga_core/saga_api/doc_svg.h,
+	  modules_io/grid/io_grid/bmp_export.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.cpp,
+	  saga_core/saga_cmd/callback.cpp, saga_core/saga_cmd/callback.h,
+	  saga_core/saga_gui/callback.cpp, saga_core/saga_gui/callback.h,
+	  saga_core/saga_gui/dlg_about.cpp,
+	  modules/grid/grid_analysis/Fuzzify.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.cpp,
+	  modules/grid/grid_visualisation/Grid_3D_Image.cpp,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp,
+	  modules_io/grid/io_grid/erdas_lan.cpp,
+	  modules_io/grid/io_grid_image/grid_export.cpp,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_10.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_11.cpp,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp,
+	  saga_core/saga_api/grid.cpp, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/grid_memory.cpp,
+	  saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_gui/helper.cpp: no message
+
+2006-08-16 20:27  oconrad
+
+	* src/saga_core/saga_gui/: dlg_list_base.cpp, dlg_list_grid.cpp,
+	  dlg_list_shapes.cpp, dlg_list_table.cpp, dlg_list_tin.cpp,
+	  parameters_properties.cpp, saga_frame.cpp, saga_frame_layout.cpp,
+	  saga_frame_layout.h, view_layout_info.cpp, wksp_grid.cpp: no
+	  message
+
+2006-08-06 15:27  oconrad
+
+	* src/saga_core/saga_gui/view_map_control.cpp: no message
+
+2006-07-29 15:17  oconrad
+
+	* src/saga_core/saga_api/grid.cpp: no message
+
+2006-07-29 14:57  oconrad
+
+	* src/: saga_core/saga_api/api_colors.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_TIN.cpp: no message
+
+2006-07-29 13:37  oconrad
+
+	* src/modules_terrain_analysis/terrain_analysis/ta_lighting/:
+	  SADO_SolarRadiation.cpp, SADO_SolarRadiation.h: no message
+
+2006-07-28 18:02  oconrad
+
+	* src/: saga_core/saga_api/api_core.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.h,
+	  saga_core/saga_gui/wksp_grid.cpp: no message
+
+2006-07-27 18:17  oconrad
+
+	* src/:
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.h,
+	  saga_core/saga_api/grid.cpp, saga_core/saga_api/grid.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj:
+	  no message
+
+2006-07-24 16:40  oconrad
+
+	* src/:
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  saga_core/saga_api/saga_api_inst.sh: no message
+
+2006-07-24 14:45  oconrad
+
+	* src/makefile.linux: no message
+
+2006-07-24 14:35  oconrad
+
+	* src/: saga_core/saga_api/saga_api.bat,
+	  saga_core/saga_api/saga_api_inst.bat,
+	  saga_core/saga_api/saga_api_mingw.bat,
+	  saga_core/saga_cmd/saga_cmd.bat,
+	  saga_core/saga_cmd/saga_cmd_mingw.bat,
+	  saga_core/saga_gui/makefile.linux_dbg,
+	  saga_core/saga_gui/saga_gui.bat,
+	  saga_core/saga_gui/saga_gui_mingw.bat, modules_all.bat,
+	  modules_all.dsw, modules_all.linux, modules_all.sln: no message
+
+2006-07-24 14:32  oconrad
+
+	* src/: saga_core/saga_api/compatibility.h,
+	  saga_core/saga_api/mat_matrix.cpp,
+	  saga_core/saga_api/mat_tools.h,
+	  modules/grid/grid_spline/grid_spline.vcproj,
+	  saga_core/saga_cmd/makefile.linux,
+	  saga_core/saga_gui/makefile.linux: no message
+
+2006-07-23 00:17  oconrad
+
+	* src/saga.dsw: no message
+
+2006-07-22 23:56  oconrad
+
+	* src/: modules/grid/grid_spline/Gridding_Spline_Base.cpp,
+	  modules/grid/grid_spline/grid_spline.vcproj,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/Interpolation.h,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.h,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.cpp,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.h,
+	  modules/grid/grid_gridding/Interpolation_Shepard.cpp,
+	  modules/grid/grid_gridding/Interpolation_Shepard.h,
+	  modules/grid/grid_gridding/Interpolation_Triangulation.cpp,
+	  modules/grid/grid_gridding/Interpolation_Triangulation.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.cpp,
+	  saga_core/saga_api/compatibility.h,
+	  saga_core/saga_api/mat_indexing.cpp,
+	  saga_core/saga_api/mat_matrix.cpp,
+	  saga_core/saga_api/mat_tools.h,
+	  saga_core/saga_api/shapes_search.cpp: no message
+
+2006-07-21 21:50  oconrad
+
+	* src/: saga_core/saga_api/Makefile.am,
+	  saga_core/saga_api/doc_html.cpp, saga_core/saga_api/doc_html.h,
+	  saga_core/saga_api/doc_pdf.cpp, saga_core/saga_api/doc_pdf.h,
+	  saga_core/saga_api/doc_svg.cpp, saga_core/saga_api/doc_svg.h,
+	  saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/grid_memory.cpp,
+	  saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/grid_system.cpp,
+	  saga_core/saga_api/html_document.cpp,
+	  saga_core/saga_api/html_document.h,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/mat_formula.cpp,
+	  saga_core/saga_api/mat_grid_radius.cpp,
+	  saga_core/saga_api/mat_indexing.cpp,
+	  saga_core/saga_api/mat_matrix.cpp,
+	  saga_core/saga_api/mat_regression.cpp,
+	  saga_core/saga_api/mat_regression_multiple.cpp,
+	  saga_core/saga_api/mat_spline.cpp,
+	  saga_core/saga_api/mat_tools.cpp, saga_core/saga_api/mat_tools.h,
+	  saga_core/saga_api/mat_trend.cpp, saga_core/saga_api/module.cpp,
+	  saga_core/saga_api/module.h,
+	  saga_core/saga_api/module_interactive_base.cpp,
+	  saga_core/saga_api/module_library_interface.cpp,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/parameters.h,
+	  saga_core/saga_api/pdf_document.cpp,
+	  saga_core/saga_api/pdf_document.h,
+	  saga_core/saga_api/saga_api.cpp, saga_core/saga_api/saga_api.dsp,
+	  saga_core/saga_api/saga_api.h,
+	  saga_core/saga_api/saga_api.vcproj, saga_core/saga_api/shape.cpp,
+	  saga_core/saga_api/shape_line.cpp,
+	  saga_core/saga_api/shape_point.cpp,
+	  saga_core/saga_api/shape_points.cpp,
+	  saga_core/saga_api/shape_polygon.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/shapes_io.cpp,
+	  saga_core/saga_api/shapes_search.cpp,
+	  saga_core/saga_api/shapes_selection.cpp,
+	  saga_core/saga_api/svg_graph.cpp, saga_core/saga_api/svg_graph.h,
+	  saga_core/saga_api/table.cpp, saga_core/saga_api/table.h,
+	  saga_core/saga_api/table_dbase.cpp,
+	  saga_core/saga_api/table_io.cpp,
+	  saga_core/saga_api/table_record.cpp,
+	  saga_core/saga_api/table_selection.cpp,
+	  saga_core/saga_api/table_value.h, saga_core/saga_api/tin.cpp,
+	  saga_core/saga_api/tin.h, saga_core/saga_api/tin_elements.cpp,
+	  saga_core/saga_api/tin_triangulation.cpp,
+	  modules/grid/grid_discretisation/Grid_FastSegments.cpp,
+	  modules/grid/grid_discretisation/Grid_Segmentation.cpp,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.cpp,
+	  modules/grid/grid_tools/Grid_Fill.cpp,
+	  modules/grid/grid_tools/Grid_Fill.h,
+	  modules/grid/grid_tools/Grid_Gaps.cpp,
+	  modules/grid/grid_tools/Grid_Merge.cpp,
+	  modules/grid/grid_tools/Grid_Orientation.cpp,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/grid/grid_tools/Grid_SortRaster.cpp,
+	  modules/grid/grid_tools/Grid_ThresholdBuffer.cpp,
+	  modules/grid/grid_tools/Grid_ThresholdBuffer.h,
+	  modules/grid/grid_tools/Grid_Value_Replace.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace_Interactive.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace_Interactive.h,
+	  modules/grid/grid_tools/Grid_Value_Request.cpp,
+	  modules/grid/grid_tools/Grid_Value_Request.h,
+	  modules/grid/grid_tools/Grid_Value_Type.cpp,
+	  modules_io/grid/io_grid_image/grid_export.cpp,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules/grid/grid_analysis/Grid_LayerOfMaximumValue.cpp,
+	  modules/grid/grid_analysis/LeastCostPathProfile.cpp,
+	  modules/grid/grid_analysis/LeastCostPathProfile.h,
+	  modules/grid/grid_analysis/PointsEx.cpp,
+	  modules/grid/grid_analysis/PointsEx.h,
+	  modules/grid/grid_calculus/Grid_Geometric_Figures.cpp,
+	  modules/grid/grid_calculus/Grid_Normalise.cpp,
+	  modules/grid/grid_calculus/Grid_Plotter.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Field.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.cpp,
+	  modules/grid/grid_calculus/Grid_Volume.cpp,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.cpp,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.cpp,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Contour.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Gradient.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp,
+	  modules_io/grid/io_grid/grid_table.cpp,
+	  modules_io/grid/io_grid/mola.cpp,
+	  modules_io/grid/io_grid/raw.cpp,
+	  modules_recreations/recreations/recreations_fractals/Grid_FractalDimension.cpp,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.cpp,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.h,
+	  modules_recreations/recreations/recreations_fractals/Newton.cpp,
+	  modules_recreations/recreations/recreations_fractals/Newton.h,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.cpp,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_ProfileFromPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance_Radius.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  modules_io/grid/io_grid/srtm30.cpp,
+	  modules_io/grid/io_grid/srtm30.h,
+	  modules_io/grid/io_grid/surfer.cpp,
+	  modules_io/grid/io_grid/usgs_srtm.cpp,
+	  modules_io/shapes/io_shapes/gstat.cpp,
+	  modules_io/shapes/io_shapes/gstat.h,
+	  modules_io/shapes/io_shapes/surfer_bln.cpp,
+	  modules_io/shapes/io_shapes/xyz.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Helper.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Helper.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesConst.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesConst.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesVar.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesVar.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SAGA_Wetness_Index.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Sinuosity.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Sinuosity.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SlopeLength.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp,
+	  saga_core/saga_gui/helper.cpp,
+	  saga_core/saga_gui/parameters_properties.cpp,
+	  saga_core/saga_gui/project.cpp,
+	  saga_core/saga_gui/res_dialogs.cpp,
+	  saga_core/saga_gui/res_dialogs.h, saga_core/saga_gui/saga.cpp,
+	  saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_gui/svg_interactive_map.cpp,
+	  saga_core/saga_gui/svg_interactive_map.h,
+	  saga_core/saga_gui/view_layout_info.cpp,
+	  saga_core/saga_gui/view_map.cpp,
+	  saga_core/saga_gui/view_map_3d_image.cpp,
+	  saga_core/saga_gui/view_map_control.cpp,
+	  saga_core/saga_gui/view_map_control.h,
+	  saga_core/saga_gui/view_scatterplot.cpp,
+	  saga_core/saga_gui/view_scatterplot.h,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/view_table_diagram.cpp,
+	  saga_core/saga_gui/view_table_diagram.h,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_gridding/Interpolation_Shepard.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp,
+	  modules_simulation/hydrology/sim_hydrology/WaterRetentionCapacity.cpp,
+	  modules_simulation/hydrology/sim_hydrology/idw.cpp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/HillShade.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Visibility_Point.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Visibility_Point.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Hypsometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Morphometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/SurfaceSpecificPoints.cpp,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_data_manager.h,
+	  saga_core/saga_gui/wksp_data_menu_files.cpp,
+	  saga_core/saga_gui/wksp_grid.cpp, saga_core/saga_gui/wksp_grid.h,
+	  saga_core/saga_gui/wksp_grid_manager.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.h,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_layer.h,
+	  saga_core/saga_gui/wksp_layer_classify.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.h,
+	  saga_core/saga_gui/wksp_map.cpp, saga_core/saga_gui/wksp_map.h,
+	  saga_core/saga_gui/wksp_map_dc.cpp,
+	  saga_core/saga_gui/wksp_map_dc.h,
+	  saga_core/saga_gui/wksp_module.cpp,
+	  saga_core/saga_gui/wksp_module.h,
+	  saga_core/saga_gui/wksp_module_library.cpp,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  saga_core/saga_gui/wksp_module_menu.cpp,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_shapes.h,
+	  saga_core/saga_gui/wksp_shapes_edit.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.h,
+	  saga_core/saga_gui/wksp_shapes_manager.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.h,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_shapes_points.cpp,
+	  saga_core/saga_gui/wksp_shapes_polygon.cpp,
+	  saga_core/saga_gui/wksp_shapes_polygon.h,
+	  saga_core/saga_gui/wksp_shapes_type.cpp,
+	  saga_core/saga_gui/wksp_table_manager.cpp,
+	  saga_core/saga_gui/wksp_tin.cpp, saga_core/saga_gui/wksp_tin.h,
+	  saga_core/saga_gui/wksp_tin_manager.cpp,
+	  saga_core/saga_gui/wksp_tin_manager.h,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules/shapes/shapes_tools/JoinTables.cpp,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.cpp,
+	  modules/shapes/shapes_tools/QueryBuilder.cpp,
+	  modules/shapes/shapes_tools/QueryParser.cpp,
+	  modules/shapes/shapes_tools/QueryParser.h,
+	  modules/shapes/shapes_tools/SearchInTable.cpp,
+	  modules/shapes/shapes_tools/SeparateShapes.cpp,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.cpp,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.h,
+	  modules/shapes/shapes_tools/ShapeSelector.cpp,
+	  modules/shapes/shapes_tools/Shapes_Assign_Table.cpp,
+	  modules/shapes/shapes_tools/Shapes_Merge.cpp,
+	  modules/shapes/shapes_tools/Shapes_Report.cpp,
+	  modules/shapes/shapes_tools/Shapes_Report.h,
+	  modules/shapes/shapes_tools/Summarize.cpp,
+	  modules/shapes/shapes_tools/Summarize.h,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.cpp,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.h,
+	  modules/shapes/shapes_tools/TransformShapes.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary_Global.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal_Global.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.mingw,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Life.cpp,
+	  modules/grid/Makefile.am,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.cpp,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper.cpp,
+	  modules/shapes/shapes_lines_ex/SimplifyShapes.cpp,
+	  modules/shapes/shapes_points/Points_From_Lines.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Geometrics.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/rgbOverlay.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.cpp,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper.h,
+	  modules_recreations/recreations/recreations_games/Sudoku.cpp,
+	  modules_recreations/recreations/recreations_games/Sudoku.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Eliminator.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.cpp,
+	  saga_core/saga_cmd/module_library.cpp,
+	  saga_core/saga_cmd/saga_cmd.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_BA.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_BA.h,
+	  modules/grid/grid_spline/Gridding_Spline_Base.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_Base.h,
+	  modules/grid/grid_spline/Gridding_Spline_MBA.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_MBA.h,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Global.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Global.h,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Local.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_Local.h,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_TIN.cpp,
+	  modules/grid/grid_spline/Gridding_Spline_TPS_TIN.h,
+	  modules/grid/grid_spline/MLB_Interface.cpp,
+	  modules/grid/grid_spline/MLB_Interface.h,
+	  modules/grid/grid_spline/Makefile.am,
+	  modules/grid/grid_spline/Thin_Plate_Spline.cpp,
+	  modules/grid/grid_spline/Thin_Plate_Spline.h,
+	  modules/grid/grid_spline/grid_spline.dsp,
+	  modules/grid/grid_spline/grid_spline.vcproj,
+	  modules/grid/grid_spline/makefile.linux,
+	  modules/grid/grid_spline/makefile.mingw,
+	  modules/table/table_calculus/Table_Calculator.cpp,
+	  modules/table/table_calculus/Table_CalculatorShapes.cpp,
+	  modules/table/table_calculus/Table_Trend.cpp,
+	  modules/table/table_calculus/Table_Trend.h,
+	  modules/table/table_tools/Table_Create_Empty.cpp,
+	  modules/table/table_tools/Table_Enumerate.cpp,
+	  modules/table/table_tools/Table_Rotate.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.cpp,
+	  modules/tin/tin_tools/TIN_Gradient.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp, modules_all.bat,
+	  saga.bat, saga.dsw, saga.sln: no message
+
+2006-07-21 21:02  oconrad
+
+	* src/: saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/api_colors.cpp,
+	  saga_core/saga_api/api_core.cpp, saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/api_file.cpp,
+	  saga_core/saga_api/api_history.cpp,
+	  saga_core/saga_api/api_memory.cpp,
+	  saga_core/saga_api/api_string.cpp,
+	  saga_core/saga_api/api_translator.cpp,
+	  saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/dataobject.h,
+	  saga_core/saga_api/geo_classes.cpp,
+	  saga_core/saga_api/geo_functions.cpp,
+	  saga_core/saga_api/geo_tools.h, saga_core/saga_api/grid.cpp,
+	  saga_core/saga_api/grid.h,
+	  modules_io/grid/io_grid/bmp_export.cpp,
+	  modules_io/grid/io_grid/erdas_lan.cpp,
+	  modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  modules_recreations/recreations/recreations_fractals/Bifurcation.cpp,
+	  modules_recreations/recreations/recreations_fractals/Gaussian_Landscapes.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.cpp,
+	  saga_core/saga_cmd/callback.cpp, saga_core/saga_cmd/callback.h,
+	  saga_core/saga_gui/callback.cpp, saga_core/saga_gui/callback.h,
+	  saga_core/saga_gui/dlg_about.cpp,
+	  saga_core/saga_gui/dlg_colors.cpp,
+	  saga_core/saga_gui/dlg_colors.h,
+	  saga_core/saga_gui/dlg_colors_control.cpp,
+	  saga_core/saga_gui/dlg_colors_control.h,
+	  modules/grid/grid_analysis/Cost_Anisotropic.cpp,
+	  modules/grid/grid_analysis/Cost_Anisotropic.h,
+	  modules/grid/grid_analysis/Cost_Isotropic.cpp,
+	  modules/grid/grid_analysis/CrossClassification.cpp,
+	  modules/grid/grid_analysis/Fuzzify.cpp,
+	  modules/grid/grid_analysis/Grid_AHP.cpp,
+	  modules/shapes/shapes_tools/CreateChartLayer.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.h,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Engine.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Engine.h,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.h,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Shapes.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.cpp,
+	  modules/shapes/shapes_points/DistanceMatrix.cpp,
+	  modules/shapes/shapes_points/FitNPointsToShape.cpp,
+	  modules/shapes/shapes_tools/CreateChartLayer.h,
+	  modules/shapes/shapes_tools/CreateWebContent.cpp,
+	  modules/shapes/shapes_tools/CreateWebContent.h,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.cpp,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_10.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_11.cpp,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.cpp,
+	  modules/grid/grid_filter/Filter.cpp,
+	  modules/grid/grid_filter/Filter.h,
+	  modules/grid/grid_filter/FilterClumps.cpp,
+	  modules/grid/grid_filter/FilterClumps.h,
+	  modules/grid/grid_filter/Filter_3x3.cpp,
+	  modules/grid/grid_filter/Filter_Gauss.cpp,
+	  modules/grid/grid_filter/Filter_Gauss.h,
+	  modules/grid/grid_filter/Filter_LoG.cpp,
+	  modules/grid/grid_filter/Filter_LoG.h,
+	  modules/table/table_calculus/Fit.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_12.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_13.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_14.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaDownslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaDownslope.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/FlowDepth.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/FlowDepth.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveUp.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  modules_io/shapes/io_shapes/generate.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.h,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.h,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.cpp,
+	  modules/grid/grid_calculus/Grid_Calculator.cpp,
+	  modules/grid/grid_tools/Grid_Aggregate.cpp,
+	  modules/grid/grid_tools/Grid_Buffer.cpp,
+	  modules/grid/grid_tools/Grid_Completion.cpp,
+	  modules/grid/grid_tools/Grid_ConstantGrid.cpp,
+	  modules/grid/grid_tools/Grid_Cut.cpp,
+	  modules/grid/grid_tools/Grid_Cut.h,
+	  modules/grid/grid_visualisation/Grid_3D_Image.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Rotate.cpp,
+	  modules/grid/grid_visualisation/Grid_Colors_Fit.cpp,
+	  modules/grid/grid_visualisation/Grid_Colors_Fit.h,
+	  modules_io/gps/io_gps/GPSBabel.cpp,
+	  modules_io/gps/io_gps/gpx2shp.cpp,
+	  modules_io/table/io_table_odbc/Get_Table.cpp,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.h:
+	  no message
+
+2006-07-13 21:13  oconrad
+
+	* src/saga_core/saga_api/tin_elements.cpp: no message
+
+2006-07-12 20:51  oconrad
+
+	* src/saga_core/saga_api/: mat_matrix.cpp,
+	  mat_regression_multiple.cpp, mat_tools.h, shape_polygon.cpp,
+	  shapes.h, tin.h, tin_elements.cpp: no message
+
+2006-07-11 16:01  oconrad
+
+	* src/:
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.h,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Gradient.cpp,
+	  modules/grid/grid_gridding/Interpolation.h,
+	  modules/grid/grid_gridding/Interpolation_Shepard.cpp,
+	  modules/grid/grid_gridding/Interpolation_Shepard.h,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  modules/shapes/shapes_points/Points_From_Lines.h,
+	  modules/shapes/shapes_points/Points_From_Table.h,
+	  saga_core/saga_api/shapes.h,
+	  modules/shapes/shapes_tools/Shapes_Merge.h,
+	  saga_core/saga_api/shapes_search.cpp,
+	  modules_io/shapes/io_shapes/surfer_bln.h: no message
+
+2006-07-10 19:36  oconrad
+
+	* src/: modules/shapes/shapes_grid/Grid_To_Gradient.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Gradient.h,
+	  modules/shapes/shapes_grid/MLB_Interface.cpp,
+	  modules/shapes/shapes_grid/Makefile.am,
+	  modules/shapes/shapes_grid/makefile.linux,
+	  modules/shapes/shapes_grid/makefile.mingw,
+	  modules/shapes/shapes_grid/shapes_grid.dsp,
+	  modules/shapes/shapes_grid/shapes_grid.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  saga_core/saga_cmd/module_library.cpp,
+	  saga_core/saga_cmd/saga_cmd.cpp: no message
+
+2006-07-10 14:03  oconrad
+
+	* src/saga_core/saga_gui/: view_map_3d_image.cpp,
+	  view_table_diagram.cpp, view_table_diagram.h: no message
+
+2006-07-10 10:53  oconrad
+
+	* src/saga_core/saga_gui/: view_map_3d.cpp, view_map_3d_image.cpp,
+	  view_map_3d_image.h: no message
+
+2006-06-30 14:43  oconrad
+
+	* src/saga_core/saga_gui/: wksp_module_manager.cpp,
+	  wksp_module_manager.h: no message
+
+2006-06-29 19:45  oconrad
+
+	* src/saga_core/saga_gui/helper.cpp: no message
+
+2006-06-29 17:19  oconrad
+
+	* src/saga_core/: saga_api/grid_io.cpp, saga_cmd/saga_cmd.cpp,
+	  saga_gui/project.cpp, saga_gui/project.h,
+	  saga_gui/res_dialogs.cpp, saga_gui/wksp_data_manager.cpp: no
+	  message
+
+2006-06-28 16:11  oconrad
+
+	* src/saga_core/saga_gui/wksp_data_manager.cpp: no message
+
+2006-06-28 15:51  oconrad
+
+	* src/saga_core/saga_gui/: project.cpp, project.h, saga_frame.cpp,
+	  wksp_data_manager.cpp, wksp_data_manager.h,
+	  wksp_module_control.cpp, wksp_module_manager.cpp,
+	  wksp_module_manager.h: no message
+
+2006-06-26 17:40  oconrad
+
+	* src/:
+	  modules_projection/pj_geotrans/pj_geotrans/data/Projection_GeoTRANS_Geoid_EGM96.dat,
+	  modules_projection/pj_geotrans/pj_geotrans/lib/lib_src_geotrans2.2.6.zip,
+	  modules_projection/pj_proj4/Makefile.am,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.h,
+	  modules_projection/pj_proj4/pj_proj4/makefile.linux,
+	  modules_projection/pj_proj4/pj_proj4/makefile.mingw,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.dsp,
+	  modules_projection/pj_proj4/pj_proj4/specs_makefile.mingw,
+	  modules_projection/pj_proj4/pj_proj4/MLB_Interface.cpp,
+	  modules_projection/pj_proj4/pj_proj4/MLB_Interface.h,
+	  modules_projection/pj_proj4/pj_proj4/Makefile.am,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcproj,
+	  modules_projection/pj_proj4/pj_proj4/specs_makefile.linux,
+	  modules_projection/pj_proj4/pj_proj4/lib/lib_src_proj-4.4.9.zip,
+	  modules_recreations/Makefile.am,
+	  modules_recreations/modules_recreations.bat,
+	  modules_recreations/modules_recreations.dsw,
+	  modules_recreations/modules_recreations.linux,
+	  modules_recreations/modules_recreations.sln,
+	  modules_recreations/recreations/Makefile.am,
+	  modules_recreations/recreations/recreations_fractals/Bifurcation.h,
+	  modules_recreations/recreations/recreations_fractals/Grid_FractalDimension.cpp,
+	  modules_recreations/recreations/recreations_fractals/MLB_Interface.cpp,
+	  modules_recreations/recreations/recreations_fractals/Makefile.am,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.h,
+	  modules_recreations/recreations/recreations_fractals/makefile.linux,
+	  modules_recreations/recreations/recreations_fractals/MLB_Interface.h,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.cpp,
+	  modules_recreations/recreations/recreations_fractals/Newton.cpp,
+	  modules_recreations/recreations/recreations_fractals/Newton.h,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.h,
+	  modules_recreations/recreations/recreations_fractals/Bifurcation.cpp,
+	  modules_recreations/recreations/recreations_fractals/Gaussian_Landscapes.cpp,
+	  modules_recreations/recreations/recreations_fractals/Gaussian_Landscapes.h,
+	  modules_recreations/recreations/recreations_fractals/Grid_FractalDimension.h,
+	  modules_recreations/recreations/recreations_fractals/makefile.mingw,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.dsp,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.vcproj,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.cpp,
+	  modules_recreations/recreations/recreations_games/MLB_Interface.h,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper_Res.cpp,
+	  modules_recreations/recreations/recreations_games/Sudoku.cpp,
+	  modules_recreations/recreations/recreations_games/makefile.linux,
+	  modules_recreations/recreations/recreations_games/recreations_games.dsp,
+	  modules_recreations/recreations/recreations_games/recreations_games.vcproj,
+	  modules_recreations/recreations/recreations_games/MLB_Interface.cpp,
+	  modules_recreations/recreations/recreations_games/Makefile.am,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper.cpp,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper.h,
+	  modules_recreations/recreations/recreations_games/Sudoku.h,
+	  modules_recreations/recreations/recreations_games/makefile.mingw,
+	  modules_simulation/Makefile.am,
+	  modules_simulation/modules_simulation.bat,
+	  modules_simulation/modules_simulation.dsw,
+	  modules_simulation/modules_simulation.linux,
+	  modules_simulation/modules_simulation.sln,
+	  modules_simulation/cellular_automata/Makefile.am,
+	  modules_simulation/cellular_automata/sim_cellular_automata/MLB_Interface.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/MLB_Interface.h,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Life.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Life.h,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Makefile.am,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.h,
+	  modules_simulation/cellular_automata/sim_cellular_automata/makefile.mingw,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.dsp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/makefile.linux,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.vcproj,
+	  modules_simulation/ecosystems/Makefile.am,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_02.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_02.h,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_01.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_01.h,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.h,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/MLB_Interface.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/MLB_Interface.h,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile.am,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/makefile.linux,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/makefile.mingw,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.dsp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.vcproj,
+	  modules_simulation/fire/Makefile.am,
+	  modules_simulation/hydrology/Makefile.am,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.h,
+	  modules_simulation/hydrology/sim_hydrology/MLB_Interface.cpp,
+	  modules_simulation/hydrology/sim_hydrology/MLB_Interface.h,
+	  modules_simulation/hydrology/sim_hydrology/idw.cpp,
+	  modules_simulation/hydrology/sim_hydrology/idw.h,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.h,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.h,
+	  modules_simulation/hydrology/sim_hydrology/Makefile.am,
+	  modules_simulation/hydrology/sim_hydrology/WaterRetentionCapacity.h,
+	  modules_simulation/hydrology/sim_hydrology/makefile.mingw,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.dsp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel_values.cpp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel_values.h,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.cpp,
+	  modules_simulation/hydrology/sim_hydrology/WaterRetentionCapacity.cpp,
+	  modules_simulation/hydrology/sim_hydrology/makefile.linux,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.vcproj,
+	  modules_simulation/hydrology/sim_hydrology/data/dvwk_soil_moisture_climate1981.txt,
+	  modules_simulation/hydrology/sim_hydrology/data/topmodel_climate.txt,
+	  modules_simulation/hydrology/sim_hydrology/data/topmodel_grass_input.txt,
+	  modules_simulation/hydrology/sim_hydrology/data/topmodel_grass_param.txt,
+	  modules_simulation/hydrology/sim_hydrology/doc/TOPMODEL_GRASS.zip,
+	  modules_simulation/hydrology/sim_hydrology/doc/TOPMODEL_Lancaster.zip,
+	  modules_template/Makefile.am,
+	  modules_template/modules_template.bat,
+	  modules_template/modules_template.dsw,
+	  modules_template/modules_template.linux,
+	  modules_template/template/Makefile.am,
+	  modules_template/template/template/Template.dsp,
+	  modules_template/template/template/makefile.linux,
+	  modules_template/template/template/makefile.mingw,
+	  modules_template/template/template/MLB_Interface.cpp,
+	  modules_template/template/template/MLB_Interface.h,
+	  modules_template/template/template/Makefile.am,
+	  modules_template/template/template/Template.cpp,
+	  modules_template/template/template/Template.h,
+	  modules_terrain_analysis/Makefile.am,
+	  modules_terrain_analysis/modules_terrain_analysis.bat,
+	  modules_terrain_analysis/modules_terrain_analysis.dsw,
+	  modules_terrain_analysis/modules_terrain_analysis.linux,
+	  modules_terrain_analysis/modules_terrain_analysis.sln,
+	  modules_terrain_analysis/terrain_analysis/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/D8_Flow_Analysis.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/D8_Flow_Analysis.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Helper.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Strahler.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Strahler.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.h,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/specs_makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/specs_makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/BasinGrid.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/BasinGrid.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/CellBalance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/CellBalance.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/EdgeContamination.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/EdgeContamination.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/FlowDepth.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaDownslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaDownslope.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_BRM.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveUp.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveUp.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Helper.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesConst.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesConst.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesVar.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesVar.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/FlowDepth.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Pt.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SAGA_Wetness_Index.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Sinuosity.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SlopeLength.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SlopeLength.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Sinuosity.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SAGA_Wetness_Index.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/HillShade.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Visibility_Point.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Visibility_Point.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.ger,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/HillShade.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Curvature_Classification.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Hypsometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Hypsometry.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Morphometry.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/SurfaceSpecificPoints.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Curvature_Classification.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Morphometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/SurfaceSpecificPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Eliminator.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Eliminator.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Geometry.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_ProfileFromPoints.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Intersection_GPC.c,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Intersection_GPC.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_ProfileFromPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  saga_core/Makefile.am, saga_core/saga_core.dsw,
+	  saga_core/saga_core.sln, saga_core/saga_api/api_core.cpp,
+	  saga_core/saga_api/api_file.cpp, saga_core/saga_api/saga_api.cpp,
+	  saga_core/saga_api/saga_api.h, saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/grid.cpp, saga_core/saga_api/grid.h,
+	  saga_core/saga_api/shape.cpp, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/table.h, saga_core/saga_api/module.cpp,
+	  saga_core/saga_api/api_string.cpp, saga_core/saga_api/module.h,
+	  saga_core/saga_api/tin.h, saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/dataobject.h,
+	  saga_core/saga_api/geo_classes.cpp,
+	  saga_core/saga_api/geo_functions.cpp,
+	  saga_core/saga_api/geo_tools.h,
+	  saga_core/saga_api/grid_memory.cpp,
+	  saga_core/saga_api/changes.txt, saga_core/saga_api/table.cpp,
+	  saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/html_document.h,
+	  saga_core/saga_api/saga_api.dsp, saga_core/saga_api/tin.cpp,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/svg_graph.h, saga_core/saga_api/table_io.cpp,
+	  saga_core/saga_api/table_selection.cpp,
+	  saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/Makefile.am,
+	  saga_core/saga_api/grid_system.cpp,
+	  saga_core/saga_api/mat_matrix.cpp,
+	  saga_core/saga_api/mat_regression.cpp,
+	  saga_core/saga_api/mat_tools.cpp,
+	  saga_core/saga_api/parameters.h, saga_core/saga_api/mat_tools.h,
+	  saga_core/saga_api/mat_formula.cpp,
+	  saga_core/saga_api/module_grid_interactive.cpp,
+	  saga_core/saga_api/module_interactive.cpp,
+	  saga_core/saga_api/module_interactive_base.cpp,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/api_memory.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/shapes_io.cpp,
+	  saga_core/saga_api/html_document.cpp,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_api/saga_api_inst.bat,
+	  saga_core/saga_api/saga_api_inst.sh,
+	  saga_core/saga_api/saga_api_mingw.bat,
+	  saga_core/saga_api/shape_line.cpp,
+	  saga_core/saga_api/shape_point.cpp,
+	  saga_core/saga_api/shape_points.cpp,
+	  saga_core/saga_api/shape_polygon.cpp,
+	  saga_core/saga_api/shapes_search.cpp,
+	  saga_core/saga_api/shapes_selection.cpp,
+	  saga_core/saga_api/api_colors.cpp,
+	  saga_core/saga_api/table_dbase.cpp,
+	  saga_core/saga_api/table_dbase.h,
+	  saga_core/saga_api/api_translator.cpp,
+	  saga_core/saga_api/mat_spline.cpp,
+	  saga_core/saga_api/table_record.cpp,
+	  saga_core/saga_api/table_value.h,
+	  saga_core/saga_api/api_history.cpp,
+	  saga_core/saga_api/tin_elements.cpp,
+	  saga_core/saga_api/mat_grid_radius.cpp,
+	  saga_core/saga_api/mat_indexing.cpp,
+	  saga_core/saga_api/module_library_interface.cpp,
+	  saga_core/saga_api/pdf_document.h,
+	  saga_core/saga_api/tin_triangulation.cpp,
+	  saga_core/saga_api/mat_regression_multiple.cpp,
+	  saga_core/saga_api/module_grid.cpp,
+	  saga_core/saga_api/pdf_document.cpp,
+	  saga_core/saga_api/mat_trend.cpp,
+	  saga_core/saga_api/svg_graph.cpp,
+	  saga_core/saga_cmd/callback.cpp, saga_core/saga_cmd/callback.h,
+	  saga_core/saga_cmd/makefile.linux,
+	  saga_core/saga_cmd/saga_cmd.cpp, saga_core/saga_cmd/Makefile.am,
+	  saga_core/saga_cmd/makefile.mingw,
+	  saga_core/saga_cmd/module_library.cpp,
+	  saga_core/saga_cmd/module_library.h,
+	  saga_core/saga_cmd/saga_cmd.dsp,
+	  saga_core/saga_cmd/saga_cmd.vcproj,
+	  saga_core/saga_cmd/saga_cmd_mingw.bat,
+	  saga_core/saga_gui/active.cpp, saga_core/saga_gui/wksp_tin.cpp,
+	  saga_core/saga_gui/callback.cpp, saga_core/saga_gui/callback.h,
+	  saga_core/saga_gui/project.cpp, saga_core/saga_gui/project.h,
+	  saga_core/saga_gui/saga.cpp, saga_core/saga_gui/wksp_tin.h,
+	  saga_core/saga_gui/dlg_base.cpp, saga_core/saga_gui/dlg_base.h,
+	  saga_core/saga_gui/saga.h, saga_core/saga_gui/view_map.cpp,
+	  saga_core/saga_gui/view_map.h, saga_core/saga_gui/wksp_map.cpp,
+	  saga_core/saga_gui/wksp_map.h,
+	  saga_core/saga_gui/active_description.cpp,
+	  saga_core/saga_gui/active_description.h,
+	  saga_core/saga_gui/active_legend.cpp,
+	  saga_core/saga_gui/active_legend.h,
+	  saga_core/saga_gui/dlg_text.cpp, saga_core/saga_gui/wksp.cpp,
+	  saga_core/saga_gui/active_parameters.cpp,
+	  saga_core/saga_gui/active_parameters.h,
+	  saga_core/saga_gui/dc_helper.cpp, saga_core/saga_gui/dc_helper.h,
+	  saga_core/saga_gui/dlg_text.h, saga_core/saga_gui/dlg_about.cpp,
+	  saga_core/saga_gui/dlg_about.h,
+	  saga_core/saga_gui/dlg_about_logo.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/dlg_colors.cpp,
+	  saga_core/saga_gui/dlg_colors.h,
+	  saga_core/saga_gui/dlg_colors_control.cpp,
+	  saga_core/saga_gui/dlg_colors_control.h,
+	  saga_core/saga_gui/dlg_list_base.cpp,
+	  saga_core/saga_gui/dlg_list_base.h,
+	  saga_core/saga_gui/dlg_list_grid.cpp,
+	  saga_core/saga_gui/dlg_list_grid.h,
+	  saga_core/saga_gui/dlg_list_shapes.cpp,
+	  saga_core/saga_gui/dlg_list_shapes.h,
+	  saga_core/saga_gui/dlg_list_table.cpp,
+	  saga_core/saga_gui/dlg_list_table.h,
+	  saga_core/saga_gui/dlg_list_tin.cpp,
+	  saga_core/saga_gui/dlg_list_tin.h,
+	  saga_core/saga_gui/dlg_parameters.cpp,
+	  saga_core/saga_gui/dlg_parameters.h,
+	  saga_core/saga_gui/dlg_table.cpp, saga_core/saga_gui/dlg_table.h,
+	  saga_core/saga_gui/helper.cpp, saga_core/saga_gui/helper.h,
+	  saga_core/saga_gui/info.cpp, saga_core/saga_gui/info.h,
+	  saga_core/saga_gui/info_messages.cpp, saga_core/saga_gui/wksp.h,
+	  saga_core/saga_gui/active.h, saga_core/saga_gui/info_messages.h,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/res_dialogs.h,
+	  saga_core/saga_gui/makefile.linux,
+	  saga_core/saga_gui/makefile.linux_dbg,
+	  saga_core/saga_gui/makefile.mingw,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/parameters_properties.h,
+	  saga_core/saga_gui/res_controls.h,
+	  saga_core/saga_gui/res_images.h,
+	  saga_core/saga_gui/saga_frame_layout.h,
+	  saga_core/saga_gui/svg_interactive_map.h,
+	  saga_core/saga_gui/view_base.cpp,
+	  saga_core/saga_gui/res_dialogs.cpp,
+	  saga_core/saga_gui/active_attributes.h,
+	  saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_gui/view_table.cpp,
+	  saga_core/saga_gui/saga_gui.dsp,
+	  saga_core/saga_gui/saga_frame_droptarget.h,
+	  saga_core/saga_gui/svg_interactive_map.cpp,
+	  saga_core/saga_gui/wksp_map_layer.cpp,
+	  saga_core/saga_gui/saga_frame_layout.cpp,
+	  saga_core/saga_gui/saga_gui_mingw.bat,
+	  saga_core/saga_gui/wksp_base_item.h,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/view_base.h,
+	  saga_core/saga_gui/view_layout.cpp,
+	  saga_core/saga_gui/view_layout.h,
+	  saga_core/saga_gui/view_layout_control.cpp,
+	  saga_core/saga_gui/view_layout_control.h,
+	  saga_core/saga_gui/view_table_diagram.h,
+	  saga_core/saga_gui/view_layout_info.cpp,
+	  saga_core/saga_gui/view_layout_info.h,
+	  saga_core/saga_gui/view_layout_printout.cpp,
+	  saga_core/saga_gui/view_layout_printout.h,
+	  saga_core/saga_gui/view_map_3d.h,
+	  saga_core/saga_gui/view_map_3d_image.cpp,
+	  saga_core/saga_gui/view_map_3d_image.h,
+	  saga_core/saga_gui/view_map_control.cpp,
+	  saga_core/saga_gui/view_map_control.h,
+	  saga_core/saga_gui/view_ruler.cpp,
+	  saga_core/saga_gui/view_ruler.h,
+	  saga_core/saga_gui/wksp_data_menu_file.h,
+	  saga_core/saga_gui/view_scatterplot.cpp,
+	  saga_core/saga_gui/view_scatterplot.h,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.h,
+	  saga_core/saga_gui/active_attributes.cpp,
+	  saga_core/saga_gui/res_controls.cpp,
+	  saga_core/saga_gui/view_table_diagram.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.h,
+	  saga_core/saga_gui/saga_frame.h,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_base_item.cpp,
+	  saga_core/saga_gui/wksp_base_manager.cpp,
+	  saga_core/saga_gui/wksp_module_menu.cpp,
+	  saga_core/saga_gui/parameters_control.h,
+	  saga_core/saga_gui/wksp_data_control.cpp,
+	  saga_core/saga_gui/wksp_data_menu_file.cpp,
+	  saga_core/saga_gui/wksp_layer.h,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_data_menu_files.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.h,
+	  saga_core/saga_gui/wksp_tin_manager.h,
+	  saga_core/saga_gui/dlg_about_logo.h,
+	  saga_core/saga_gui/wksp_data_menu_files.h,
+	  saga_core/saga_gui/wksp_grid.h,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_table.h,
+	  saga_core/saga_gui/wksp_base_manager.h,
+	  saga_core/saga_gui/wksp_grid_system.h,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.h,
+	  saga_core/saga_gui/wksp_layer_legend.cpp,
+	  saga_core/saga_gui/wksp_map_layer.h,
+	  saga_core/saga_gui/wksp_map_control.cpp,
+	  saga_core/saga_gui/wksp_map_control.h,
+	  saga_core/saga_gui/wksp_map_dc.cpp,
+	  saga_core/saga_gui/wksp_module_control.cpp,
+	  saga_core/saga_gui/wksp_base_control.h,
+	  saga_core/saga_gui/wksp_map_dc.h,
+	  saga_core/saga_gui/wksp_map_manager.cpp,
+	  saga_core/saga_gui/wksp_map_manager.h,
+	  saga_core/saga_gui/wksp_module.h,
+	  saga_core/saga_gui/saga_frame_droptarget.cpp,
+	  saga_core/saga_gui/view_table.h,
+	  saga_core/saga_gui/wksp_module_library.cpp,
+	  saga_core/saga_gui/wksp_module_library.h,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  saga_core/saga_gui/wksp_shapes_type.h,
+	  saga_core/saga_gui/wksp_table_manager.cpp,
+	  saga_core/saga_gui/wksp_module_menu.h,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_table_manager.h,
+	  saga_core/saga_gui/view_histogram.h,
+	  saga_core/saga_gui/view_table_control.h,
+	  saga_core/saga_gui/wksp_shapes_manager.cpp,
+	  saga_core/saga_gui/wksp_table.cpp,
+	  saga_core/saga_gui/wksp_shapes.h,
+	  saga_core/saga_gui/wksp_shapes_points.cpp,
+	  saga_core/saga_gui/wksp_shapes_points.h,
+	  saga_core/saga_gui/wksp_shapes_polygon.cpp,
+	  saga_core/saga_gui/wksp_shapes_type.cpp,
+	  saga_core/saga_gui/wksp_data_manager.h,
+	  saga_core/saga_gui/wksp_grid_system.cpp,
+	  saga_core/saga_gui/wksp_module_control.h,
+	  saga_core/saga_gui/wksp_module_manager.h,
+	  saga_core/saga_gui/wksp_tin_manager.cpp,
+	  saga_core/saga_gui/res_images.cpp,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/Makefile.am,
+	  saga_core/saga_gui/active_HTMLExtraInfo.cpp,
+	  saga_core/saga_gui/active_HTMLExtraInfo.h,
+	  saga_core/saga_gui/view_histogram.cpp,
+	  saga_core/saga_gui/wksp_data_control.h,
+	  saga_core/saga_gui/wksp_layer_legend.h,
+	  saga_core/saga_gui/wksp_shapes_edit.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.h,
+	  saga_core/saga_gui/wksp_shapes_polygon.h,
+	  saga_core/saga_gui/parameters_properties.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.cpp,
+	  saga_core/saga_gui/saga_gui.vcproj,
+	  saga_core/saga_gui/view_map_3d.cpp,
+	  saga_core/saga_gui/wksp_module.cpp,
+	  saga_core/saga_gui/res/colours.bmp,
+	  saga_core/saga_gui/res/resource.h,
+	  saga_core/saga_gui/res/saga.ico,
+	  saga_core/saga_gui/res/saga_eng.txt,
+	  saga_core/saga_gui/res/saga_ger.txt,
+	  saga_core/saga_gui/res/saga_gui.rc,
+	  saga_core/saga_gui/res/xpm/crs_edit_point_add.xpm,
+	  saga_core/saga_gui/res/xpm/crs_edit_point_move.xpm,
+	  saga_core/saga_gui/res/xpm/crs_hand.xpm,
+	  saga_core/saga_gui/res/xpm/crs_hand_grap.xpm,
+	  saga_core/saga_gui/res/xpm/crs_info.xpm,
+	  saga_core/saga_gui/res/xpm/crs_magnifier.xpm,
+	  saga_core/saga_gui/res/xpm/crs_select.xpm,
+	  saga_core/saga_gui/res/xpm/default.xpm,
+	  saga_core/saga_gui/res/xpm/nb_active_attributes.xpm,
+	  saga_core/saga_gui/res/xpm/nb_active_description.xpm,
+	  saga_core/saga_gui/res/xpm/nb_active_htmlextrainfo.xpm,
+	  saga_core/saga_gui/res/xpm/nb_active_legend.xpm,
+	  saga_core/saga_gui/res/xpm/nb_active_parameters.xpm,
+	  saga_core/saga_gui/res/xpm/nb_info_error.xpm,
+	  saga_core/saga_gui/res/xpm/nb_info_execution.xpm,
+	  saga_core/saga_gui/res/xpm/nb_info_messages.xpm,
+	  saga_core/saga_gui/res/xpm/nb_wksp_data.xpm,
+	  saga_core/saga_gui/res/xpm/nb_wksp_maps.xpm,
+	  saga_core/saga_gui/res/xpm/nb_wksp_modules.xpm,
+	  saga_core/saga_gui/res/xpm/saga_icon_16.xpm,
+	  saga_core/saga_gui/res/xpm/saga_icon_32.xpm,
+	  saga_core/saga_gui/res/xpm/saga_splash.xpm,
+	  saga_core/saga_gui/res/xpm/tb_active.xpm,
+	  saga_core/saga_gui/res/xpm/tb_delete.xpm,
+	  saga_core/saga_gui/res/xpm/tb_diagram_parameters.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_add.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_add_part.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_del.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_del_part.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_del_point.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_select.xpm,
+	  saga_core/saga_gui/res/xpm/tb_help.xpm,
+	  saga_core/saga_gui/res/xpm/tb_histogram_as_table.xpm,
+	  saga_core/saga_gui/res/xpm/tb_histogram_cumulative.xpm,
+	  saga_core/saga_gui/res/xpm/tb_info.xpm,
+	  saga_core/saga_gui/res/xpm/tb_layout_page_setup.xpm,
+	  saga_core/saga_gui/res/xpm/tb_layout_print.xpm,
+	  saga_core/saga_gui/res/xpm/tb_layout_print_preview.xpm,
+	  saga_core/saga_gui/res/xpm/tb_layout_print_setup.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_central_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_central_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_interpolated.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_properties.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_x_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_x_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_y_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_y_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_z_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_z_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_stereo.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_3d_show.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_layout_show.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_legend_horizontal.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_legend_vertical.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_mode_distance.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_mode_pan.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_mode_select.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_mode_zoom.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_synchronize.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_active.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_full.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_last.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_selection.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open_grid.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open_module.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open_shapes.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open_table.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open_tin.xpm,
+	  saga_core/saga_gui/res/xpm/tb_save.xpm,
+	  saga_core/saga_gui/res/xpm/tb_scatterplot_parameters.xpm,
+	  saga_core/saga_gui/res/xpm/tb_show.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_col_add.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_col_del.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_row_add.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_row_del.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_row_del_all.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_row_ins.xpm,
+	  saga_core/saga_gui/res/xpm/tb_wksp.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_data_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_grid.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_grid_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_grid_system.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_map.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_map_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_module.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_module_library.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_module_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_noitems.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_shapes_line.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_shapes_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_shapes_point.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_shapes_points.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_shapes_polygon.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_table.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_table_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_tin.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_tin_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_diagram.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_histogram.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_layout.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_map.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_map3d.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_scatterplot.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_table.xpm,
+	  saga_core/saga_gui/wx/barholder.h,
+	  saga_core/saga_gui/wx/dockhost.h,
+	  saga_core/saga_gui/wx/dockpanel.h,
+	  saga_core/saga_gui/wx/dockwindow.h,
+	  saga_core/saga_gui/wx/export.h,
+	  saga_core/saga_gui/wx/exsplitter.h, saga_core/saga_gui/wx/gdi.h,
+	  saga_core/saga_gui/wx/gripper.h,
+	  saga_core/saga_gui/wx/layoutmanager.h,
+	  saga_core/saga_gui/wx/pane.h, saga_core/saga_gui/wx/slidebar.h,
+	  saga_core/saga_gui/wx/toolbutton.h, saga_core/saga_gui/wx/util.h,
+	  saga_core/saga_gui/wx/propgrid/advprops.h,
+	  saga_core/saga_gui/wx/propgrid/extras.cpp,
+	  saga_core/saga_gui/wx/propgrid/extras.h,
+	  saga_core/saga_gui/wx/propgrid/advprops.cpp,
+	  saga_core/saga_gui/wx/propgrid/manager.cpp,
+	  saga_core/saga_gui/wx/propgrid/manager.h,
+	  saga_core/saga_gui/wx/propgrid/odcombo.cpp,
+	  saga_core/saga_gui/wx/propgrid/odcombo.h,
+	  saga_core/saga_gui/wx/propgrid/propdev.h,
+	  saga_core/saga_gui/wx/propgrid/propgrid.cpp,
+	  saga_core/saga_gui/wx/propgrid/propgrid.h,
+	  saga_core/saga_gui/wx/propgrid/props.cpp: Initial revision
+
+2006-06-26 17:40  oconrad
+
+	* src/:
+	  modules_projection/pj_geotrans/pj_geotrans/data/Projection_GeoTRANS_Geoid_EGM96.dat,
+	  modules_projection/pj_geotrans/pj_geotrans/lib/lib_src_geotrans2.2.6.zip,
+	  modules_projection/pj_proj4/Makefile.am,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.cpp,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.h,
+	  modules_projection/pj_proj4/pj_proj4/makefile.linux,
+	  modules_projection/pj_proj4/pj_proj4/makefile.mingw,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.dsp,
+	  modules_projection/pj_proj4/pj_proj4/specs_makefile.mingw,
+	  modules_projection/pj_proj4/pj_proj4/MLB_Interface.cpp,
+	  modules_projection/pj_proj4/pj_proj4/MLB_Interface.h,
+	  modules_projection/pj_proj4/pj_proj4/Makefile.am,
+	  modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp,
+	  modules_projection/pj_proj4/pj_proj4/pj_proj4.vcproj,
+	  modules_projection/pj_proj4/pj_proj4/specs_makefile.linux,
+	  modules_projection/pj_proj4/pj_proj4/lib/lib_src_proj-4.4.9.zip,
+	  modules_recreations/Makefile.am,
+	  modules_recreations/modules_recreations.bat,
+	  modules_recreations/modules_recreations.dsw,
+	  modules_recreations/modules_recreations.linux,
+	  modules_recreations/modules_recreations.sln,
+	  modules_recreations/recreations/Makefile.am,
+	  modules_recreations/recreations/recreations_fractals/Bifurcation.h,
+	  modules_recreations/recreations/recreations_fractals/Grid_FractalDimension.cpp,
+	  modules_recreations/recreations/recreations_fractals/MLB_Interface.cpp,
+	  modules_recreations/recreations/recreations_fractals/Makefile.am,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.h,
+	  modules_recreations/recreations/recreations_fractals/makefile.linux,
+	  modules_recreations/recreations/recreations_fractals/MLB_Interface.h,
+	  modules_recreations/recreations/recreations_fractals/Mandelbrot.cpp,
+	  modules_recreations/recreations/recreations_fractals/Newton.cpp,
+	  modules_recreations/recreations/recreations_fractals/Newton.h,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.h,
+	  modules_recreations/recreations/recreations_fractals/Bifurcation.cpp,
+	  modules_recreations/recreations/recreations_fractals/Gaussian_Landscapes.cpp,
+	  modules_recreations/recreations/recreations_fractals/Gaussian_Landscapes.h,
+	  modules_recreations/recreations/recreations_fractals/Grid_FractalDimension.h,
+	  modules_recreations/recreations/recreations_fractals/makefile.mingw,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.dsp,
+	  modules_recreations/recreations/recreations_fractals/recreations_fractals.vcproj,
+	  modules_recreations/recreations/recreations_fractals/Pythagoras_Tree.cpp,
+	  modules_recreations/recreations/recreations_games/MLB_Interface.h,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper_Res.cpp,
+	  modules_recreations/recreations/recreations_games/Sudoku.cpp,
+	  modules_recreations/recreations/recreations_games/makefile.linux,
+	  modules_recreations/recreations/recreations_games/recreations_games.dsp,
+	  modules_recreations/recreations/recreations_games/recreations_games.vcproj,
+	  modules_recreations/recreations/recreations_games/MLB_Interface.cpp,
+	  modules_recreations/recreations/recreations_games/Makefile.am,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper.cpp,
+	  modules_recreations/recreations/recreations_games/Mine_Sweeper.h,
+	  modules_recreations/recreations/recreations_games/Sudoku.h,
+	  modules_recreations/recreations/recreations_games/makefile.mingw,
+	  modules_simulation/Makefile.am,
+	  modules_simulation/modules_simulation.bat,
+	  modules_simulation/modules_simulation.dsw,
+	  modules_simulation/modules_simulation.linux,
+	  modules_simulation/modules_simulation.sln,
+	  modules_simulation/cellular_automata/Makefile.am,
+	  modules_simulation/cellular_automata/sim_cellular_automata/MLB_Interface.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/MLB_Interface.h,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Life.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Life.h,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Makefile.am,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.cpp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/Wator.h,
+	  modules_simulation/cellular_automata/sim_cellular_automata/makefile.mingw,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.dsp,
+	  modules_simulation/cellular_automata/sim_cellular_automata/makefile.linux,
+	  modules_simulation/cellular_automata/sim_cellular_automata/sim_cellular_automata.vcproj,
+	  modules_simulation/ecosystems/Makefile.am,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_02.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_02.h,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_01.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_01.h,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Hugget_03.h,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/MLB_Interface.cpp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/MLB_Interface.h,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile.am,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/makefile.linux,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/makefile.mingw,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.dsp,
+	  modules_simulation/ecosystems/sim_ecosystems_hugget/sim_ecosystems_hugget.vcproj,
+	  modules_simulation/fire/Makefile.am,
+	  modules_simulation/hydrology/Makefile.am,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.cpp,
+	  modules_simulation/hydrology/sim_hydrology/KinWav_D8.h,
+	  modules_simulation/hydrology/sim_hydrology/MLB_Interface.cpp,
+	  modules_simulation/hydrology/sim_hydrology/MLB_Interface.h,
+	  modules_simulation/hydrology/sim_hydrology/idw.cpp,
+	  modules_simulation/hydrology/sim_hydrology/idw.h,
+	  modules_simulation/hydrology/sim_hydrology/topmodel.h,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.h,
+	  modules_simulation/hydrology/sim_hydrology/Makefile.am,
+	  modules_simulation/hydrology/sim_hydrology/WaterRetentionCapacity.h,
+	  modules_simulation/hydrology/sim_hydrology/makefile.mingw,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.dsp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel_values.cpp,
+	  modules_simulation/hydrology/sim_hydrology/topmodel_values.h,
+	  modules_simulation/hydrology/sim_hydrology/DVWK_SoilMoisture.cpp,
+	  modules_simulation/hydrology/sim_hydrology/WaterRetentionCapacity.cpp,
+	  modules_simulation/hydrology/sim_hydrology/makefile.linux,
+	  modules_simulation/hydrology/sim_hydrology/sim_hydrology.vcproj,
+	  modules_simulation/hydrology/sim_hydrology/data/dvwk_soil_moisture_climate1981.txt,
+	  modules_simulation/hydrology/sim_hydrology/data/topmodel_climate.txt,
+	  modules_simulation/hydrology/sim_hydrology/data/topmodel_grass_input.txt,
+	  modules_simulation/hydrology/sim_hydrology/data/topmodel_grass_param.txt,
+	  modules_simulation/hydrology/sim_hydrology/doc/TOPMODEL_GRASS.zip,
+	  modules_simulation/hydrology/sim_hydrology/doc/TOPMODEL_Lancaster.zip,
+	  modules_template/Makefile.am,
+	  modules_template/modules_template.bat,
+	  modules_template/modules_template.dsw,
+	  modules_template/modules_template.linux,
+	  modules_template/template/Makefile.am,
+	  modules_template/template/template/Template.dsp,
+	  modules_template/template/template/makefile.linux,
+	  modules_template/template/template/makefile.mingw,
+	  modules_template/template/template/MLB_Interface.cpp,
+	  modules_template/template/template/MLB_Interface.h,
+	  modules_template/template/template/Makefile.am,
+	  modules_template/template/template/Template.cpp,
+	  modules_template/template/template/Template.h,
+	  modules_terrain_analysis/Makefile.am,
+	  modules_terrain_analysis/modules_terrain_analysis.bat,
+	  modules_terrain_analysis/modules_terrain_analysis.dsw,
+	  modules_terrain_analysis/modules_terrain_analysis.linux,
+	  modules_terrain_analysis/modules_terrain_analysis.sln,
+	  modules_terrain_analysis/terrain_analysis/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/D8_Flow_Analysis.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/D8_Flow_Analysis.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Helper.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Strahler.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Strahler.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ta_channels.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Altitude.h,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/ChannelNetwork_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_channels/Watersheds_ext.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.h,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/specs_makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/specs_makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_compound/ta_compound.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/BasinGrid.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/BasinGrid.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/CellBalance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/CellBalance.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/EdgeContamination.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/EdgeContamination.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/FlowDepth.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaDownslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaDownslope.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_BRM.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Distance.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveUp.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveUp.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Helper.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Helper.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesConst.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesConst.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesVar.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/IsochronesVar.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/FlowDepth.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Pt.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SAGA_Wetness_Index.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Sinuosity.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SlopeLength.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SlopeLength.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/TopographicIndices.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_AreaUpslope.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_RecursiveDown.h,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/Sinuosity.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/SAGA_Wetness_Index.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_hydrology/ta_hydrology.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/HillShade.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Visibility_Point.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/Visibility_Point.h,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.ger,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/HillShade.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/ta_lighting.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Curvature_Classification.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Hypsometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Hypsometry.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Morphometry.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/SurfaceSpecificPoints.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Convergence_Radius.h,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Curvature_Classification.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/ta_morphometry.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/Morphometry.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_morphometry/SurfaceSpecificPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Eliminator.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Eliminator.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.vcproj,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/FillSinks.h,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/Pit_Router.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_preprocessor/ta_preprocessor.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Geometry.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.linux,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_ProfileFromPoints.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Swath_Profile.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Flow_Profile.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Intersection_GPC.c,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Intersection_GPC.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.h,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_ProfileFromPoints.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/makefile.mingw,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.cpp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.dsp,
+	  modules_terrain_analysis/terrain_analysis/ta_profiles/ta_profiles.vcproj,
+	  saga_core/Makefile.am, saga_core/saga_core.dsw,
+	  saga_core/saga_core.sln, saga_core/saga_api/api_core.cpp,
+	  saga_core/saga_api/api_file.cpp, saga_core/saga_api/saga_api.cpp,
+	  saga_core/saga_api/saga_api.h, saga_core/saga_api/api_core.h,
+	  saga_core/saga_api/grid.cpp, saga_core/saga_api/grid.h,
+	  saga_core/saga_api/shape.cpp, saga_core/saga_api/grid_io.cpp,
+	  saga_core/saga_api/table.h, saga_core/saga_api/module.cpp,
+	  saga_core/saga_api/api_string.cpp, saga_core/saga_api/module.h,
+	  saga_core/saga_api/tin.h, saga_core/saga_api/dataobject.cpp,
+	  saga_core/saga_api/shapes.cpp, saga_core/saga_api/shapes.h,
+	  saga_core/saga_api/dataobject.h,
+	  saga_core/saga_api/geo_classes.cpp,
+	  saga_core/saga_api/geo_functions.cpp,
+	  saga_core/saga_api/geo_tools.h,
+	  saga_core/saga_api/grid_memory.cpp,
+	  saga_core/saga_api/changes.txt, saga_core/saga_api/table.cpp,
+	  saga_core/saga_api/grid_operation.cpp,
+	  saga_core/saga_api/html_document.h,
+	  saga_core/saga_api/saga_api.dsp, saga_core/saga_api/tin.cpp,
+	  saga_core/saga_api/makefile.linux,
+	  saga_core/saga_api/makefile.mingw,
+	  saga_core/saga_api/svg_graph.h, saga_core/saga_api/table_io.cpp,
+	  saga_core/saga_api/table_selection.cpp,
+	  saga_core/saga_api/api_callback.cpp,
+	  saga_core/saga_api/Makefile.am,
+	  saga_core/saga_api/grid_system.cpp,
+	  saga_core/saga_api/mat_matrix.cpp,
+	  saga_core/saga_api/mat_regression.cpp,
+	  saga_core/saga_api/mat_tools.cpp,
+	  saga_core/saga_api/parameters.h, saga_core/saga_api/mat_tools.h,
+	  saga_core/saga_api/mat_formula.cpp,
+	  saga_core/saga_api/module_grid_interactive.cpp,
+	  saga_core/saga_api/module_interactive.cpp,
+	  saga_core/saga_api/module_interactive_base.cpp,
+	  saga_core/saga_api/parameter.cpp,
+	  saga_core/saga_api/parameters.cpp,
+	  saga_core/saga_api/api_memory.cpp,
+	  saga_core/saga_api/parameter_data.cpp,
+	  saga_core/saga_api/shapes_io.cpp,
+	  saga_core/saga_api/html_document.cpp,
+	  saga_core/saga_api/saga_api.vcproj,
+	  saga_core/saga_api/saga_api_inst.bat,
+	  saga_core/saga_api/saga_api_inst.sh,
+	  saga_core/saga_api/saga_api_mingw.bat,
+	  saga_core/saga_api/shape_line.cpp,
+	  saga_core/saga_api/shape_point.cpp,
+	  saga_core/saga_api/shape_points.cpp,
+	  saga_core/saga_api/shape_polygon.cpp,
+	  saga_core/saga_api/shapes_search.cpp,
+	  saga_core/saga_api/shapes_selection.cpp,
+	  saga_core/saga_api/api_colors.cpp,
+	  saga_core/saga_api/table_dbase.cpp,
+	  saga_core/saga_api/table_dbase.h,
+	  saga_core/saga_api/api_translator.cpp,
+	  saga_core/saga_api/mat_spline.cpp,
+	  saga_core/saga_api/table_record.cpp,
+	  saga_core/saga_api/table_value.h,
+	  saga_core/saga_api/api_history.cpp,
+	  saga_core/saga_api/tin_elements.cpp,
+	  saga_core/saga_api/mat_grid_radius.cpp,
+	  saga_core/saga_api/mat_indexing.cpp,
+	  saga_core/saga_api/module_library_interface.cpp,
+	  saga_core/saga_api/pdf_document.h,
+	  saga_core/saga_api/tin_triangulation.cpp,
+	  saga_core/saga_api/mat_regression_multiple.cpp,
+	  saga_core/saga_api/module_grid.cpp,
+	  saga_core/saga_api/pdf_document.cpp,
+	  saga_core/saga_api/mat_trend.cpp,
+	  saga_core/saga_api/svg_graph.cpp,
+	  saga_core/saga_cmd/callback.cpp, saga_core/saga_cmd/callback.h,
+	  saga_core/saga_cmd/makefile.linux,
+	  saga_core/saga_cmd/saga_cmd.cpp, saga_core/saga_cmd/Makefile.am,
+	  saga_core/saga_cmd/makefile.mingw,
+	  saga_core/saga_cmd/module_library.cpp,
+	  saga_core/saga_cmd/module_library.h,
+	  saga_core/saga_cmd/saga_cmd.dsp,
+	  saga_core/saga_cmd/saga_cmd.vcproj,
+	  saga_core/saga_cmd/saga_cmd_mingw.bat,
+	  saga_core/saga_gui/active.cpp, saga_core/saga_gui/wksp_tin.cpp,
+	  saga_core/saga_gui/callback.cpp, saga_core/saga_gui/callback.h,
+	  saga_core/saga_gui/project.cpp, saga_core/saga_gui/project.h,
+	  saga_core/saga_gui/saga.cpp, saga_core/saga_gui/wksp_tin.h,
+	  saga_core/saga_gui/dlg_base.cpp, saga_core/saga_gui/dlg_base.h,
+	  saga_core/saga_gui/saga.h, saga_core/saga_gui/view_map.cpp,
+	  saga_core/saga_gui/view_map.h, saga_core/saga_gui/wksp_map.cpp,
+	  saga_core/saga_gui/wksp_map.h,
+	  saga_core/saga_gui/active_description.cpp,
+	  saga_core/saga_gui/active_description.h,
+	  saga_core/saga_gui/active_legend.cpp,
+	  saga_core/saga_gui/active_legend.h,
+	  saga_core/saga_gui/dlg_text.cpp, saga_core/saga_gui/wksp.cpp,
+	  saga_core/saga_gui/active_parameters.cpp,
+	  saga_core/saga_gui/active_parameters.h,
+	  saga_core/saga_gui/dc_helper.cpp, saga_core/saga_gui/dc_helper.h,
+	  saga_core/saga_gui/dlg_text.h, saga_core/saga_gui/dlg_about.cpp,
+	  saga_core/saga_gui/dlg_about.h,
+	  saga_core/saga_gui/dlg_about_logo.cpp,
+	  saga_core/saga_gui/res_commands.h,
+	  saga_core/saga_gui/dlg_colors.cpp,
+	  saga_core/saga_gui/dlg_colors.h,
+	  saga_core/saga_gui/dlg_colors_control.cpp,
+	  saga_core/saga_gui/dlg_colors_control.h,
+	  saga_core/saga_gui/dlg_list_base.cpp,
+	  saga_core/saga_gui/dlg_list_base.h,
+	  saga_core/saga_gui/dlg_list_grid.cpp,
+	  saga_core/saga_gui/dlg_list_grid.h,
+	  saga_core/saga_gui/dlg_list_shapes.cpp,
+	  saga_core/saga_gui/dlg_list_shapes.h,
+	  saga_core/saga_gui/dlg_list_table.cpp,
+	  saga_core/saga_gui/dlg_list_table.h,
+	  saga_core/saga_gui/dlg_list_tin.cpp,
+	  saga_core/saga_gui/dlg_list_tin.h,
+	  saga_core/saga_gui/dlg_parameters.cpp,
+	  saga_core/saga_gui/dlg_parameters.h,
+	  saga_core/saga_gui/dlg_table.cpp, saga_core/saga_gui/dlg_table.h,
+	  saga_core/saga_gui/helper.cpp, saga_core/saga_gui/helper.h,
+	  saga_core/saga_gui/info.cpp, saga_core/saga_gui/info.h,
+	  saga_core/saga_gui/info_messages.cpp, saga_core/saga_gui/wksp.h,
+	  saga_core/saga_gui/active.h, saga_core/saga_gui/info_messages.h,
+	  saga_core/saga_gui/parameters_control.cpp,
+	  saga_core/saga_gui/res_dialogs.h,
+	  saga_core/saga_gui/makefile.linux,
+	  saga_core/saga_gui/makefile.linux_dbg,
+	  saga_core/saga_gui/makefile.mingw,
+	  saga_core/saga_gui/res_commands.cpp,
+	  saga_core/saga_gui/parameters_properties.h,
+	  saga_core/saga_gui/res_controls.h,
+	  saga_core/saga_gui/res_images.h,
+	  saga_core/saga_gui/saga_frame_layout.h,
+	  saga_core/saga_gui/svg_interactive_map.h,
+	  saga_core/saga_gui/view_base.cpp,
+	  saga_core/saga_gui/res_dialogs.cpp,
+	  saga_core/saga_gui/active_attributes.h,
+	  saga_core/saga_gui/saga_frame.cpp,
+	  saga_core/saga_gui/view_table.cpp,
+	  saga_core/saga_gui/saga_gui.dsp,
+	  saga_core/saga_gui/saga_frame_droptarget.h,
+	  saga_core/saga_gui/svg_interactive_map.cpp,
+	  saga_core/saga_gui/wksp_map_layer.cpp,
+	  saga_core/saga_gui/saga_frame_layout.cpp,
+	  saga_core/saga_gui/saga_gui_mingw.bat,
+	  saga_core/saga_gui/wksp_base_item.h,
+	  saga_core/saga_gui/wksp_shapes_line.cpp,
+	  saga_core/saga_gui/view_base.h,
+	  saga_core/saga_gui/view_layout.cpp,
+	  saga_core/saga_gui/view_layout.h,
+	  saga_core/saga_gui/view_layout_control.cpp,
+	  saga_core/saga_gui/view_layout_control.h,
+	  saga_core/saga_gui/view_table_diagram.h,
+	  saga_core/saga_gui/view_layout_info.cpp,
+	  saga_core/saga_gui/view_layout_info.h,
+	  saga_core/saga_gui/view_layout_printout.cpp,
+	  saga_core/saga_gui/view_layout_printout.h,
+	  saga_core/saga_gui/view_map_3d.h,
+	  saga_core/saga_gui/view_map_3d_image.cpp,
+	  saga_core/saga_gui/view_map_3d_image.h,
+	  saga_core/saga_gui/view_map_control.cpp,
+	  saga_core/saga_gui/view_map_control.h,
+	  saga_core/saga_gui/view_ruler.cpp,
+	  saga_core/saga_gui/view_ruler.h,
+	  saga_core/saga_gui/wksp_data_menu_file.h,
+	  saga_core/saga_gui/view_scatterplot.cpp,
+	  saga_core/saga_gui/view_scatterplot.h,
+	  saga_core/saga_gui/wksp_grid.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.h,
+	  saga_core/saga_gui/active_attributes.cpp,
+	  saga_core/saga_gui/res_controls.cpp,
+	  saga_core/saga_gui/view_table_diagram.cpp,
+	  saga_core/saga_gui/wksp_shapes_point.h,
+	  saga_core/saga_gui/saga_frame.h,
+	  saga_core/saga_gui/wksp_base_control.cpp,
+	  saga_core/saga_gui/wksp_base_item.cpp,
+	  saga_core/saga_gui/wksp_base_manager.cpp,
+	  saga_core/saga_gui/wksp_module_menu.cpp,
+	  saga_core/saga_gui/parameters_control.h,
+	  saga_core/saga_gui/wksp_data_control.cpp,
+	  saga_core/saga_gui/wksp_data_menu_file.cpp,
+	  saga_core/saga_gui/wksp_layer.h,
+	  saga_core/saga_gui/wksp_data_manager.cpp,
+	  saga_core/saga_gui/wksp_data_menu_files.cpp,
+	  saga_core/saga_gui/wksp_shapes_manager.h,
+	  saga_core/saga_gui/wksp_tin_manager.h,
+	  saga_core/saga_gui/dlg_about_logo.h,
+	  saga_core/saga_gui/wksp_data_menu_files.h,
+	  saga_core/saga_gui/wksp_grid.h,
+	  saga_core/saga_gui/wksp_shapes_point.cpp,
+	  saga_core/saga_gui/wksp_table.h,
+	  saga_core/saga_gui/wksp_base_manager.h,
+	  saga_core/saga_gui/wksp_grid_system.h,
+	  saga_core/saga_gui/wksp_layer.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.cpp,
+	  saga_core/saga_gui/wksp_layer_classify.h,
+	  saga_core/saga_gui/wksp_layer_legend.cpp,
+	  saga_core/saga_gui/wksp_map_layer.h,
+	  saga_core/saga_gui/wksp_map_control.cpp,
+	  saga_core/saga_gui/wksp_map_control.h,
+	  saga_core/saga_gui/wksp_map_dc.cpp,
+	  saga_core/saga_gui/wksp_module_control.cpp,
+	  saga_core/saga_gui/wksp_base_control.h,
+	  saga_core/saga_gui/wksp_map_dc.h,
+	  saga_core/saga_gui/wksp_map_manager.cpp,
+	  saga_core/saga_gui/wksp_map_manager.h,
+	  saga_core/saga_gui/wksp_module.h,
+	  saga_core/saga_gui/saga_frame_droptarget.cpp,
+	  saga_core/saga_gui/view_table.h,
+	  saga_core/saga_gui/wksp_module_library.cpp,
+	  saga_core/saga_gui/wksp_module_library.h,
+	  saga_core/saga_gui/wksp_module_manager.cpp,
+	  saga_core/saga_gui/wksp_shapes_type.h,
+	  saga_core/saga_gui/wksp_table_manager.cpp,
+	  saga_core/saga_gui/wksp_module_menu.h,
+	  saga_core/saga_gui/wksp_shapes.cpp,
+	  saga_core/saga_gui/wksp_table_manager.h,
+	  saga_core/saga_gui/view_histogram.h,
+	  saga_core/saga_gui/view_table_control.h,
+	  saga_core/saga_gui/wksp_shapes_manager.cpp,
+	  saga_core/saga_gui/wksp_table.cpp,
+	  saga_core/saga_gui/wksp_shapes.h,
+	  saga_core/saga_gui/wksp_shapes_points.cpp,
+	  saga_core/saga_gui/wksp_shapes_points.h,
+	  saga_core/saga_gui/wksp_shapes_polygon.cpp,
+	  saga_core/saga_gui/wksp_shapes_type.cpp,
+	  saga_core/saga_gui/wksp_data_manager.h,
+	  saga_core/saga_gui/wksp_grid_system.cpp,
+	  saga_core/saga_gui/wksp_module_control.h,
+	  saga_core/saga_gui/wksp_module_manager.h,
+	  saga_core/saga_gui/wksp_tin_manager.cpp,
+	  saga_core/saga_gui/res_images.cpp,
+	  saga_core/saga_gui/view_table_control.cpp,
+	  saga_core/saga_gui/Makefile.am,
+	  saga_core/saga_gui/active_HTMLExtraInfo.cpp,
+	  saga_core/saga_gui/active_HTMLExtraInfo.h,
+	  saga_core/saga_gui/view_histogram.cpp,
+	  saga_core/saga_gui/wksp_data_control.h,
+	  saga_core/saga_gui/wksp_layer_legend.h,
+	  saga_core/saga_gui/wksp_shapes_edit.cpp,
+	  saga_core/saga_gui/wksp_shapes_line.h,
+	  saga_core/saga_gui/wksp_shapes_polygon.h,
+	  saga_core/saga_gui/parameters_properties.cpp,
+	  saga_core/saga_gui/wksp_grid_manager.cpp,
+	  saga_core/saga_gui/saga_gui.vcproj,
+	  saga_core/saga_gui/view_map_3d.cpp,
+	  saga_core/saga_gui/wksp_module.cpp,
+	  saga_core/saga_gui/res/colours.bmp,
+	  saga_core/saga_gui/res/resource.h,
+	  saga_core/saga_gui/res/saga.ico,
+	  saga_core/saga_gui/res/saga_eng.txt,
+	  saga_core/saga_gui/res/saga_ger.txt,
+	  saga_core/saga_gui/res/saga_gui.rc,
+	  saga_core/saga_gui/res/xpm/crs_edit_point_add.xpm,
+	  saga_core/saga_gui/res/xpm/crs_edit_point_move.xpm,
+	  saga_core/saga_gui/res/xpm/crs_hand.xpm,
+	  saga_core/saga_gui/res/xpm/crs_hand_grap.xpm,
+	  saga_core/saga_gui/res/xpm/crs_info.xpm,
+	  saga_core/saga_gui/res/xpm/crs_magnifier.xpm,
+	  saga_core/saga_gui/res/xpm/crs_select.xpm,
+	  saga_core/saga_gui/res/xpm/default.xpm,
+	  saga_core/saga_gui/res/xpm/nb_active_attributes.xpm,
+	  saga_core/saga_gui/res/xpm/nb_active_description.xpm,
+	  saga_core/saga_gui/res/xpm/nb_active_htmlextrainfo.xpm,
+	  saga_core/saga_gui/res/xpm/nb_active_legend.xpm,
+	  saga_core/saga_gui/res/xpm/nb_active_parameters.xpm,
+	  saga_core/saga_gui/res/xpm/nb_info_error.xpm,
+	  saga_core/saga_gui/res/xpm/nb_info_execution.xpm,
+	  saga_core/saga_gui/res/xpm/nb_info_messages.xpm,
+	  saga_core/saga_gui/res/xpm/nb_wksp_data.xpm,
+	  saga_core/saga_gui/res/xpm/nb_wksp_maps.xpm,
+	  saga_core/saga_gui/res/xpm/nb_wksp_modules.xpm,
+	  saga_core/saga_gui/res/xpm/saga_icon_16.xpm,
+	  saga_core/saga_gui/res/xpm/saga_icon_32.xpm,
+	  saga_core/saga_gui/res/xpm/saga_splash.xpm,
+	  saga_core/saga_gui/res/xpm/tb_active.xpm,
+	  saga_core/saga_gui/res/xpm/tb_delete.xpm,
+	  saga_core/saga_gui/res/xpm/tb_diagram_parameters.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_add.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_add_part.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_del.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_del_part.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_del_point.xpm,
+	  saga_core/saga_gui/res/xpm/tb_edit_shape_select.xpm,
+	  saga_core/saga_gui/res/xpm/tb_help.xpm,
+	  saga_core/saga_gui/res/xpm/tb_histogram_as_table.xpm,
+	  saga_core/saga_gui/res/xpm/tb_histogram_cumulative.xpm,
+	  saga_core/saga_gui/res/xpm/tb_info.xpm,
+	  saga_core/saga_gui/res/xpm/tb_layout_page_setup.xpm,
+	  saga_core/saga_gui/res/xpm/tb_layout_print.xpm,
+	  saga_core/saga_gui/res/xpm/tb_layout_print_preview.xpm,
+	  saga_core/saga_gui/res/xpm/tb_layout_print_setup.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_central_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_central_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_interpolated.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_properties.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_x_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_x_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_y_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_y_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_z_less.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_shift_z_more.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map3d_stereo.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_3d_show.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_layout_show.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_legend_horizontal.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_legend_vertical.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_mode_distance.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_mode_pan.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_mode_select.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_mode_zoom.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_synchronize.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_active.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_full.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_last.xpm,
+	  saga_core/saga_gui/res/xpm/tb_map_zoom_selection.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open_grid.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open_module.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open_shapes.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open_table.xpm,
+	  saga_core/saga_gui/res/xpm/tb_open_tin.xpm,
+	  saga_core/saga_gui/res/xpm/tb_save.xpm,
+	  saga_core/saga_gui/res/xpm/tb_scatterplot_parameters.xpm,
+	  saga_core/saga_gui/res/xpm/tb_show.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_col_add.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_col_del.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_row_add.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_row_del.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_row_del_all.xpm,
+	  saga_core/saga_gui/res/xpm/tb_table_row_ins.xpm,
+	  saga_core/saga_gui/res/xpm/tb_wksp.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_data_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_grid.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_grid_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_grid_system.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_map.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_map_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_module.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_module_library.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_module_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_noitems.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_shapes_line.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_shapes_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_shapes_point.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_shapes_points.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_shapes_polygon.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_table.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_table_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_tin.xpm,
+	  saga_core/saga_gui/res/xpm/wksp_tin_manager.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_diagram.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_histogram.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_layout.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_map.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_map3d.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_scatterplot.xpm,
+	  saga_core/saga_gui/res/xpm/wnd_table.xpm,
+	  saga_core/saga_gui/wx/barholder.h,
+	  saga_core/saga_gui/wx/dockhost.h,
+	  saga_core/saga_gui/wx/dockpanel.h,
+	  saga_core/saga_gui/wx/dockwindow.h,
+	  saga_core/saga_gui/wx/export.h,
+	  saga_core/saga_gui/wx/exsplitter.h, saga_core/saga_gui/wx/gdi.h,
+	  saga_core/saga_gui/wx/gripper.h,
+	  saga_core/saga_gui/wx/layoutmanager.h,
+	  saga_core/saga_gui/wx/pane.h, saga_core/saga_gui/wx/slidebar.h,
+	  saga_core/saga_gui/wx/toolbutton.h, saga_core/saga_gui/wx/util.h,
+	  saga_core/saga_gui/wx/propgrid/advprops.h,
+	  saga_core/saga_gui/wx/propgrid/extras.cpp,
+	  saga_core/saga_gui/wx/propgrid/extras.h,
+	  saga_core/saga_gui/wx/propgrid/advprops.cpp,
+	  saga_core/saga_gui/wx/propgrid/manager.cpp,
+	  saga_core/saga_gui/wx/propgrid/manager.h,
+	  saga_core/saga_gui/wx/propgrid/odcombo.cpp,
+	  saga_core/saga_gui/wx/propgrid/odcombo.h,
+	  saga_core/saga_gui/wx/propgrid/propdev.h,
+	  saga_core/saga_gui/wx/propgrid/propgrid.cpp,
+	  saga_core/saga_gui/wx/propgrid/propgrid.h,
+	  saga_core/saga_gui/wx/propgrid/props.cpp: no message
+
+2006-06-26 17:37  oconrad
+
+	* src/: modules_all.bat, modules_all.dsw, gpl.txt, saga.sln,
+	  Makefile.am, install.txt, saga.bat, saga.dsw, lgpl.txt,
+	  modules_all.linux, modules_all.sln, modules/Makefile.am,
+	  modules/modules.bat, modules/modules.dsw, modules/modules.linux,
+	  modules/modules.sln, modules/grid/Makefile.am,
+	  modules/grid/grid_analysis/Cost_Anisotropic.cpp,
+	  modules/grid/grid_analysis/Cost_Anisotropic.h,
+	  modules/grid/grid_analysis/Cost_Isotropic.h,
+	  modules/grid/grid_analysis/Cost_PolarToRect.cpp,
+	  modules/grid/grid_analysis/Cost_PolarToRect.h,
+	  modules/grid/grid_analysis/Cost_RectToPolar.h,
+	  modules/grid/grid_analysis/CoveredDistance.cpp,
+	  modules/grid/grid_analysis/CoveredDistance.h,
+	  modules/grid/grid_analysis/CrossClassification.cpp,
+	  modules/grid/grid_analysis/CrossClassification.h,
+	  modules/grid/grid_analysis/makefile.linux,
+	  modules/grid/grid_analysis/owa.h,
+	  modules/grid/grid_analysis/Fuzzify.cpp,
+	  modules/grid/grid_analysis/Fuzzify.h,
+	  modules/grid/grid_analysis/FuzzyAND.h,
+	  modules/grid/grid_analysis/FuzzyOR.cpp,
+	  modules/grid/grid_analysis/FuzzyOR.h,
+	  modules/grid/grid_analysis/Grid_AHP.h,
+	  modules/grid/grid_analysis/Grid_AggregationIndex.cpp,
+	  modules/grid/grid_analysis/Grid_AggregationIndex.h,
+	  modules/grid/grid_analysis/Grid_CVA.cpp,
+	  modules/grid/grid_analysis/Grid_CVA.h,
+	  modules/grid/grid_analysis/Grid_LayerOfMaximumValue.cpp,
+	  modules/grid/grid_analysis/Grid_LayerOfMaximumValue.h,
+	  modules/grid/grid_analysis/owa.cpp,
+	  modules/grid/grid_analysis/Cost_Isotropic.cpp,
+	  modules/grid/grid_analysis/Grid_Pattern.h,
+	  modules/grid/grid_analysis/Image_VI_Distance.cpp,
+	  modules/grid/grid_analysis/Image_VI_Distance.h,
+	  modules/grid/grid_analysis/Image_VI_Slope.cpp,
+	  modules/grid/grid_analysis/Image_VI_Slope.h,
+	  modules/grid/grid_analysis/LeastCostPathProfile.h,
+	  modules/grid/grid_analysis/MLB_Interface.h,
+	  modules/grid/grid_analysis/PointsEx.cpp,
+	  modules/grid/grid_analysis/PointsEx.h,
+	  modules/grid/grid_analysis/grid_analysis.dsp,
+	  modules/grid/grid_analysis/FuzzyAND.cpp,
+	  modules/grid/grid_analysis/Grid_AHP.cpp,
+	  modules/grid/grid_analysis/MLB_Interface.cpp,
+	  modules/grid/grid_analysis/Makefile.am,
+	  modules/grid/grid_analysis/grid_analysis.vcproj,
+	  modules/grid/grid_analysis/makefile.mingw,
+	  modules/grid/grid_analysis/Cost_RectToPolar.cpp,
+	  modules/grid/grid_analysis/Grid_Pattern.cpp,
+	  modules/grid/grid_analysis/LeastCostPathProfile.cpp,
+	  modules/grid/grid_calculus/Grid_Geometric_Figures.h,
+	  modules/grid/grid_calculus/Grid_Normalise.cpp,
+	  modules/grid/grid_calculus/Grid_Normalise.h,
+	  modules/grid/grid_calculus/Grid_Plotter.cpp,
+	  modules/grid/grid_calculus/Grid_Plotter.h,
+	  modules/grid/grid_calculus/Grid_Volume.h,
+	  modules/grid/grid_calculus/Grid_Random_Field.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Field.h,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.h,
+	  modules/grid/grid_calculus/Grid_Volume.cpp,
+	  modules/grid/grid_calculus/MLB_Interface.cpp,
+	  modules/grid/grid_calculus/MLB_Interface.h,
+	  modules/grid/grid_calculus/grid_calculus.dsp,
+	  modules/grid/grid_calculus/makefile.linux,
+	  modules/grid/grid_calculus/Grid_Calculator.cpp,
+	  modules/grid/grid_calculus/Grid_Calculator.h,
+	  modules/grid/grid_calculus/Grid_Geometric_Figures.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.cpp,
+	  modules/grid/grid_calculus/Makefile.am,
+	  modules/grid/grid_calculus/grid_calculus.vcproj,
+	  modules/grid/grid_calculus/makefile.mingw,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.h,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.h,
+	  modules/grid/grid_discretisation/Grid_FastSegments.cpp,
+	  modules/grid/grid_discretisation/makefile.linux,
+	  modules/grid/grid_discretisation/Grid_FastSegments.h,
+	  modules/grid/grid_discretisation/Grid_Segmentation.cpp,
+	  modules/grid/grid_discretisation/Makefile.am,
+	  modules/grid/grid_discretisation/grid_discretisation.dsp,
+	  modules/grid/grid_discretisation/grid_discretisation.vcproj,
+	  modules/grid/grid_discretisation/makefile.mingw,
+	  modules/grid/grid_discretisation/Grid_Segmentation.h,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.cpp,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.h,
+	  modules/grid/grid_discretisation/MLB_Interface.h,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/MLB_Interface.cpp,
+	  modules/grid/grid_filter/FilterClumps.cpp,
+	  modules/grid/grid_filter/FilterClumps.h,
+	  modules/grid/grid_filter/Filter_3x3.cpp,
+	  modules/grid/grid_filter/Filter_3x3.h,
+	  modules/grid/grid_filter/Filter_Gauss.cpp,
+	  modules/grid/grid_filter/Filter_Gauss.h,
+	  modules/grid/grid_filter/Filter_LoG.cpp,
+	  modules/grid/grid_filter/Filter_LoG.h,
+	  modules/grid/grid_filter/Filter_Multi_Dir_Lee.cpp,
+	  modules/grid/grid_filter/Filter_Multi_Dir_Lee.h,
+	  modules/grid/grid_filter/MLB_Interface.cpp,
+	  modules/grid/grid_filter/MLB_Interface.h,
+	  modules/grid/grid_filter/Pt.h,
+	  modules/grid/grid_filter/grid_filter.dsp,
+	  modules/grid/grid_filter/Filter.cpp,
+	  modules/grid/grid_filter/Filter.h,
+	  modules/grid/grid_filter/Makefile.am,
+	  modules/grid/grid_filter/grid_filter.vcproj,
+	  modules/grid/grid_filter/makefile.linux,
+	  modules/grid/grid_filter/makefile.mingw,
+	  modules/grid/grid_gridding/makefile.linux,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.h,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.cpp,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.h,
+	  modules/grid/grid_gridding/Interpolation_Shepard.cpp,
+	  modules/grid/grid_gridding/Interpolation_Shepard.h,
+	  modules/grid/grid_gridding/Interpolation_Triangulation.h,
+	  modules/grid/grid_gridding/MLB_Interface.cpp,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/MLB_Interface.h,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.h,
+	  modules/grid/grid_gridding/Interpolation.h,
+	  modules/grid/grid_gridding/Interpolation_Triangulation.cpp,
+	  modules/grid/grid_gridding/Makefile.am,
+	  modules/grid/grid_gridding/Shepard.cpp,
+	  modules/grid/grid_gridding/Shepard.h,
+	  modules/grid/grid_gridding/grid_gridding.dsp,
+	  modules/grid/grid_gridding/grid_gridding.vcproj,
+	  modules/grid/grid_gridding/makefile.mingw,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_tools/Grid_Aggregate.cpp,
+	  modules/grid/grid_tools/Grid_Aggregate.h,
+	  modules/grid/grid_tools/Grid_Buffer.h,
+	  modules/grid/grid_tools/Grid_CombineGrids.cpp,
+	  modules/grid/grid_tools/Grid_CombineGrids.h,
+	  modules/grid/grid_tools/Grid_Merge.h,
+	  modules/grid/grid_tools/Grid_Completion.h,
+	  modules/grid/grid_tools/Grid_CropToData.cpp,
+	  modules/grid/grid_tools/Grid_CropToData.h,
+	  modules/grid/grid_tools/Grid_Cut.cpp,
+	  modules/grid/grid_tools/Grid_Cut.h,
+	  modules/grid/grid_tools/Grid_Fill.cpp,
+	  modules/grid/grid_tools/Grid_Fill.h,
+	  modules/grid/grid_tools/Grid_Gaps.cpp,
+	  modules/grid/grid_tools/Grid_Gaps.h,
+	  modules/grid/grid_tools/Grid_Gaps_OneCell.cpp,
+	  modules/grid/grid_tools/Grid_Gaps_OneCell.h,
+	  modules/grid/grid_tools/Grid_InvertNoData.cpp,
+	  modules/grid/grid_tools/Grid_InvertNoData.h,
+	  modules/grid/grid_tools/Grid_Merge.cpp,
+	  modules/grid/grid_tools/Grid_Orientation.h,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/grid/grid_tools/makefile.linux,
+	  modules/grid/grid_tools/Grid_ConstantGrid.cpp,
+	  modules/grid/grid_tools/Grid_Resample.h,
+	  modules/grid/grid_tools/Grid_SortRaster.h,
+	  modules/grid/grid_tools/Grid_ThresholdBuffer.cpp,
+	  modules/grid/grid_tools/Grid_ThresholdBuffer.h,
+	  modules/grid/grid_tools/Grid_Value_Replace.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace.h,
+	  modules/grid/grid_tools/Grid_Value_Replace_Interactive.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace_Interactive.h,
+	  modules/grid/grid_tools/Grid_Value_Request.cpp,
+	  modules/grid/grid_tools/Grid_Value_Request.h,
+	  modules/grid/grid_tools/Grid_Value_Type.cpp,
+	  modules/grid/grid_tools/Grid_Value_Type.h,
+	  modules/grid/grid_tools/GridsFromTableAndGrid.cpp,
+	  modules/grid/grid_tools/GridsFromTableAndGrid.h,
+	  modules/grid/grid_tools/MLB_Interface.cpp,
+	  modules/grid/grid_tools/MLB_Interface.h,
+	  modules/grid/grid_tools/Pt.h,
+	  modules/grid/grid_tools/grid_tools.dsp,
+	  modules/grid/grid_tools/Grid_Buffer.cpp,
+	  modules/grid/grid_tools/Grid_Completion.cpp,
+	  modules/grid/grid_tools/Grid_ConstantGrid.h,
+	  modules/grid/grid_tools/Grid_SortRaster.cpp,
+	  modules/grid/grid_tools/Makefile.am,
+	  modules/grid/grid_tools/grid_tools.vcproj,
+	  modules/grid/grid_tools/makefile.mingw,
+	  modules/grid/grid_tools/Grid_Orientation.cpp,
+	  modules/grid/grid_tools/Grid_Value_Reclassify.cpp,
+	  modules/grid/grid_tools/Grid_Value_Reclassify.h,
+	  modules/grid/grid_visualisation/Grid_Color_Blend.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Blend.h,
+	  modules/grid/grid_visualisation/Grid_Color_Rotate.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Rotate.h,
+	  modules/grid/grid_visualisation/Grid_Colors_Fit.cpp,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.cpp,
+	  modules/grid/grid_visualisation/MLB_Interface.cpp,
+	  modules/grid/grid_visualisation/MLB_Interface.h,
+	  modules/grid/grid_visualisation/grid_visualisation.dsp,
+	  modules/grid/grid_visualisation/makefile.linux,
+	  modules/grid/grid_visualisation/Grid_3D_Image.h,
+	  modules/grid/grid_visualisation/Grid_Colors_Fit.h,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.h,
+	  modules/grid/grid_visualisation/Makefile.am,
+	  modules/grid/grid_visualisation/grid_visualisation.vcproj,
+	  modules/grid/grid_visualisation/makefile.mingw,
+	  modules/grid/grid_visualisation/Grid_3D_Image.cpp,
+	  modules/shapes/Makefile.am,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.h,
+	  modules/shapes/shapes_grid/Grid_To_Contour.h,
+	  modules/shapes/shapes_grid/Grid_To_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points.h,
+	  modules/shapes/shapes_grid/Grid_To_Points_Random.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points_Random.h,
+	  modules/shapes/shapes_grid/makefile.linux,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Points.h,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.h,
+	  modules/shapes/shapes_grid/MLB_Interface.cpp,
+	  modules/shapes/shapes_grid/MLB_Interface.h,
+	  modules/shapes/shapes_grid/shapes_grid.dsp,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.cpp,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.h,
+	  modules/shapes/shapes_grid/Makefile.am,
+	  modules/shapes/shapes_grid/makefile.mingw,
+	  modules/shapes/shapes_grid/shapes_grid.vcproj,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.h,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Contour.cpp,
+	  modules/shapes/shapes_lines/MLB_Interface.cpp,
+	  modules/shapes/shapes_lines/MLB_Interface.h,
+	  modules/shapes/shapes_lines/makefile.linux,
+	  modules/shapes/shapes_lines/makefile.mingw,
+	  modules/shapes/shapes_lines/shapes_lines.vcproj,
+	  modules/shapes/shapes_lines/Lines_From_Polygons.cpp,
+	  modules/shapes/shapes_lines/Lines_From_Polygons.h,
+	  modules/shapes/shapes_lines/Makefile.am,
+	  modules/shapes/shapes_lines/shapes_lines.dsp,
+	  modules/shapes/shapes_lines_ex/Containers.h,
+	  modules/shapes/shapes_lines_ex/DPHull.h,
+	  modules/shapes/shapes_lines_ex/LineApproximator.h,
+	  modules/shapes/shapes_lines_ex/PathHull.h,
+	  modules/shapes/shapes_lines_ex/SimplifyShapes.cpp,
+	  modules/shapes/shapes_lines_ex/SimplifyShapes.h,
+	  modules/shapes/shapes_lines_ex/makefile.mingw,
+	  modules/shapes/shapes_lines_ex/MLB_Interface.cpp,
+	  modules/shapes/shapes_lines_ex/MLB_Interface.h,
+	  modules/shapes/shapes_lines_ex/Makefile.am,
+	  modules/shapes/shapes_lines_ex/makefile.linux,
+	  modules/shapes/shapes_lines_ex/shapes_lines_ex.dsp,
+	  modules/shapes/shapes_lines_ex/shapes_lines_ex.vcproj,
+	  modules/shapes/shapes_points/AddCoordinates.h,
+	  modules/shapes/shapes_points/CountPoints.cpp,
+	  modules/shapes/shapes_points/CountPoints.h,
+	  modules/shapes/shapes_points/CreatePointGrid.cpp,
+	  modules/shapes/shapes_points/CreatePointGrid.h,
+	  modules/shapes/shapes_points/DistanceMatrix.cpp,
+	  modules/shapes/shapes_points/DistanceMatrix.h,
+	  modules/shapes/shapes_points/FitNPointsToShape.cpp,
+	  modules/shapes/shapes_points/FitNPointsToShape.h,
+	  modules/shapes/shapes_points/AddCoordinates.cpp,
+	  modules/shapes/shapes_points/MLB_Interface.cpp,
+	  modules/shapes/shapes_points/MLB_Interface.h,
+	  modules/shapes/shapes_points/Makefile.am,
+	  modules/shapes/shapes_points/Points_From_Lines.cpp,
+	  modules/shapes/shapes_points/Points_From_Lines.h,
+	  modules/shapes/shapes_points/Points_From_Table.cpp,
+	  modules/shapes/shapes_points/Points_From_Table.h,
+	  modules/shapes/shapes_points/makefile.linux,
+	  modules/shapes/shapes_points/makefile.mingw,
+	  modules/shapes/shapes_points/shapes_points.dsp,
+	  modules/shapes/shapes_points/shapes_points.vcproj,
+	  modules/shapes/shapes_polygons/Polygon_Centroids.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Centroids.h,
+	  modules/shapes/shapes_polygons/Polygon_Geometrics.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Geometrics.h,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.h,
+	  modules/shapes/shapes_polygons/Polygons_From_Lines.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection_GPC.cpp,
+	  modules/shapes/shapes_polygons/MLB_Interface.h,
+	  modules/shapes/shapes_polygons/Makefile.am,
+	  modules/shapes/shapes_polygons/Polygon_Intersection_GPC.h,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.h,
+	  modules/shapes/shapes_polygons/Polygons_From_Lines.h,
+	  modules/shapes/shapes_polygons/makefile.linux,
+	  modules/shapes/shapes_polygons/makefile.mingw,
+	  modules/shapes/shapes_polygons/shapes_polygons.dsp,
+	  modules/shapes/shapes_polygons/MLB_Interface.cpp,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcproj,
+	  modules/shapes/shapes_tools/CreateChartLayer.h,
+	  modules/shapes/shapes_tools/GraticuleBuilder.cpp,
+	  modules/shapes/shapes_tools/GraticuleBuilder.h,
+	  modules/shapes/shapes_tools/makefile.linux,
+	  modules/shapes/shapes_tools/Intersection_GPC.c,
+	  modules/shapes/shapes_tools/Intersection_GPC.h,
+	  modules/shapes/shapes_tools/JoinTables.cpp,
+	  modules/shapes/shapes_tools/MLB_Interface.h,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.cpp,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.h,
+	  modules/shapes/shapes_tools/QueryBuilder.cpp,
+	  modules/shapes/shapes_tools/QueryBuilder.h,
+	  modules/shapes/shapes_tools/QueryParser.cpp,
+	  modules/shapes/shapes_tools/QueryParser.h,
+	  modules/shapes/shapes_tools/SearchInTable.cpp,
+	  modules/shapes/shapes_tools/SearchInTable.h,
+	  modules/shapes/shapes_tools/SelectByTheme.cpp,
+	  modules/shapes/shapes_tools/SelectByTheme.h,
+	  modules/shapes/shapes_tools/SeparateShapes.cpp,
+	  modules/shapes/shapes_tools/SeparateShapes.h,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.cpp,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.h,
+	  modules/shapes/shapes_tools/ShapeSelector.cpp,
+	  modules/shapes/shapes_tools/ShapeSelector.h,
+	  modules/shapes/shapes_tools/Shapes_Assign_Table.cpp,
+	  modules/shapes/shapes_tools/Shapes_Assign_Table.h,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.cpp,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.h,
+	  modules/shapes/shapes_tools/Shapes_Merge.h,
+	  modules/shapes/shapes_tools/Shapes_Report.cpp,
+	  modules/shapes/shapes_tools/Shapes_Report.h,
+	  modules/shapes/shapes_tools/Summarize.h,
+	  modules/shapes/shapes_tools/TransformShapes.cpp,
+	  modules/shapes/shapes_tools/TransformShapes.h,
+	  modules/shapes/shapes_tools/CreateChartLayer.cpp,
+	  modules/shapes/shapes_tools/CreateWebContent.h,
+	  modules/shapes/shapes_tools/Shapes_Merge.cpp,
+	  modules/shapes/shapes_tools/Summarize.cpp,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.cpp,
+	  modules/shapes/shapes_tools/makefile.mingw,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules/shapes/shapes_tools/CreateWebContent.cpp,
+	  modules/shapes/shapes_tools/JoinTables.h,
+	  modules/shapes/shapes_tools/MLB_Interface.cpp,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.h,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  modules/table/Makefile.am, modules/table/table_calculus/LMFit.h,
+	  modules/table/table_calculus/MLB_Interface.cpp,
+	  modules/table/table_calculus/MLB_Interface.h,
+	  modules/table/table_calculus/Table_Calculator.cpp,
+	  modules/table/table_calculus/Table_Calculator.h,
+	  modules/table/table_calculus/Table_CalculatorShapes.cpp,
+	  modules/table/table_calculus/Table_CalculatorShapes.h,
+	  modules/table/table_calculus/Table_Trend.cpp,
+	  modules/table/table_calculus/makefile.linux,
+	  modules/table/table_calculus/makefile.mingw,
+	  modules/table/table_calculus/table_calculus.dsp,
+	  modules/table/table_calculus/Fit.cpp,
+	  modules/table/table_calculus/Fit.h,
+	  modules/table/table_calculus/LMFit.cpp,
+	  modules/table/table_calculus/Makefile.am,
+	  modules/table/table_calculus/Table_Trend.h,
+	  modules/table/table_calculus/table_calculus.vcproj,
+	  modules/table/table_tools/Table_Create_Empty.cpp,
+	  modules/table/table_tools/Table_Create_Empty.h,
+	  modules/table/table_tools/Table_Enumerate.cpp,
+	  modules/table/table_tools/Table_Enumerate.h,
+	  modules/table/table_tools/Table_Rotate.cpp,
+	  modules/table/table_tools/Table_Rotate.h,
+	  modules/table/table_tools/makefile.linux,
+	  modules/table/table_tools/makefile.mingw,
+	  modules/table/table_tools/table_tools.dsp,
+	  modules/table/table_tools/MLB_Interface.cpp,
+	  modules/table/table_tools/MLB_Interface.h,
+	  modules/table/table_tools/Makefile.am,
+	  modules/table/table_tools/table_tools.vcproj,
+	  modules/tin/Makefile.am,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.h,
+	  modules/tin/tin_tools/TIN_Flow_Trace.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Trace.h,
+	  modules/tin/tin_tools/TIN_From_Grid.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid.h,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.h,
+	  modules/tin/tin_tools/TIN_From_Shapes.cpp,
+	  modules/tin/tin_tools/TIN_From_Shapes.h,
+	  modules/tin/tin_tools/TIN_Gradient.cpp,
+	  modules/tin/tin_tools/MLB_Interface.h,
+	  modules/tin/tin_tools/Makefile.am,
+	  modules/tin/tin_tools/TIN_Gradient.h,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.h,
+	  modules/tin/tin_tools/makefile.linux,
+	  modules/tin/tin_tools/makefile.mingw,
+	  modules/tin/tin_tools/tin_tools.dsp,
+	  modules/tin/tin_tools/MLB_Interface.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.cpp,
+	  modules/tin/tin_tools/tin_tools.vcproj,
+	  modules_contrib/Makefile.am, modules_contrib/modules_contrib.bat,
+	  modules_contrib/modules_contrib.dsw,
+	  modules_contrib/modules_contrib.linux,
+	  modules_contrib/contrib_t_wutzler/Makefile.am,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/DebugStream.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/DebugStream.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/GridCalcError.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/GridCalcError.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/MLB_Interface.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/NoDataValueError.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/NoDataValueError.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/Profiler.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/Profiler.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/makefile.mingw,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/rgbOverlay.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/rgbOverlay.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/tomaschTool.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/tomaschTool.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/MLB_Interface.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/Makefile.am,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.dsp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.vcproj,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/makefile.linux,
+	  modules_geostatistics/Makefile.am,
+	  modules_geostatistics/modules_geostatistics.bat,
+	  modules_geostatistics/modules_geostatistics.dsw,
+	  modules_geostatistics/modules_geostatistics.linux,
+	  modules_geostatistics/modules_geostatistics.sln,
+	  modules_geostatistics/geostatistics/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Statistics.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance_Radius.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance_Radius.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary_Global.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal_Global.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/MLB_Interface.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.h,
+	  modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.h,
+	  modules_geostatistics/geostatistics/geostatistics_points/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcproj,
+	  modules_io/Makefile.am, modules_io/modules_io.bat,
+	  modules_io/modules_io.dsw, modules_io/modules_io.linux,
+	  modules_io/modules_io.sln, modules_io/esri_e00/Makefile.am,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.h,
+	  modules_io/esri_e00/io_esri_e00/MLB_Interface.cpp,
+	  modules_io/esri_e00/io_esri_e00/MLB_Interface.h,
+	  modules_io/esri_e00/io_esri_e00/Makefile.am,
+	  modules_io/esri_e00/io_esri_e00/makefile.mingw,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.cpp,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.dsp,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.vcproj,
+	  modules_io/esri_e00/io_esri_e00/makefile.linux,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_conv.c,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_conv.h,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_error.c,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_error.h,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_port.h,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_vsi.h,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_vsisimple.c,
+	  modules_io/esri_e00/io_esri_e00/e00compr/e00compr.h,
+	  modules_io/esri_e00/io_esri_e00/e00compr/e00read.c,
+	  modules_io/esri_e00/io_esri_e00/e00compr/e00write.c,
+	  modules_io/gps/Makefile.am, modules_io/gps/io_gps/GPSBabel.cpp,
+	  modules_io/gps/io_gps/GPSBabel.h,
+	  modules_io/gps/io_gps/Makefile.am,
+	  modules_io/gps/io_gps/gpx2shp.cpp,
+	  modules_io/gps/io_gps/gpx2shp.h,
+	  modules_io/gps/io_gps/makefile.mingw,
+	  modules_io/gps/io_gps/MLB_Interface.cpp,
+	  modules_io/gps/io_gps/MLB_Interface.h,
+	  modules_io/gps/io_gps/io_gps.dsp,
+	  modules_io/gps/io_gps/io_gps.vcproj,
+	  modules_io/gps/io_gps/makefile.linux,
+	  modules_io/grid/Makefile.am, modules_io/grid/io_grid/mola.cpp,
+	  modules_io/grid/io_grid/bmp_export.h,
+	  modules_io/grid/io_grid/erdas_lan.cpp,
+	  modules_io/grid/io_grid/erdas_lan.h,
+	  modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  modules_io/grid/io_grid/esri_arcinfo.h,
+	  modules_io/grid/io_grid/grid_table.cpp,
+	  modules_io/grid/io_grid/grid_table.h,
+	  modules_io/grid/io_grid/mola.h, modules_io/grid/io_grid/raw.cpp,
+	  modules_io/grid/io_grid/raw.h,
+	  modules_io/grid/io_grid/srtm30.cpp,
+	  modules_io/grid/io_grid/srtm30.h,
+	  modules_io/grid/io_grid/MLB_Interface.h,
+	  modules_io/grid/io_grid/Makefile.am,
+	  modules_io/grid/io_grid/makefile.mingw,
+	  modules_io/grid/io_grid/surfer.cpp,
+	  modules_io/grid/io_grid/surfer.h,
+	  modules_io/grid/io_grid/usgs_srtm.cpp,
+	  modules_io/grid/io_grid/usgs_srtm.h,
+	  modules_io/grid/io_grid/xyz.cpp, modules_io/grid/io_grid/xyz.h,
+	  modules_io/grid/io_grid/MLB_Interface.cpp,
+	  modules_io/grid/io_grid/bmp_export.cpp,
+	  modules_io/grid/io_grid/io_grid.dsp,
+	  modules_io/grid/io_grid/io_grid.vcproj,
+	  modules_io/grid/io_grid/makefile.linux,
+	  modules_io/grid/io_grid_image/MLB_Interface.cpp,
+	  modules_io/grid/io_grid_image/MLB_Interface.h,
+	  modules_io/grid/io_grid_image/Makefile.am,
+	  modules_io/grid/io_grid_image/grid_export.cpp,
+	  modules_io/grid/io_grid_image/grid_export.h,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules_io/grid/io_grid_image/grid_import.h,
+	  modules_io/grid/io_grid_image/makefile.mingw,
+	  modules_io/grid/io_grid_image/specs_makefile.linux,
+	  modules_io/grid/io_grid_image/specs_makefile.mingw,
+	  modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  modules_io/grid/io_grid_image/io_grid_image.vcproj,
+	  modules_io/grid/io_grid_image/makefile.linux,
+	  modules_io/shapes/Makefile.am,
+	  modules_io/shapes/io_shapes/generate.cpp,
+	  modules_io/shapes/io_shapes/generate.h,
+	  modules_io/shapes/io_shapes/gstat.cpp,
+	  modules_io/shapes/io_shapes/gstat.h,
+	  modules_io/shapes/io_shapes/MLB_Interface.cpp,
+	  modules_io/shapes/io_shapes/MLB_Interface.h,
+	  modules_io/shapes/io_shapes/Makefile.am,
+	  modules_io/shapes/io_shapes/makefile.mingw,
+	  modules_io/shapes/io_shapes/surfer_bln.cpp,
+	  modules_io/shapes/io_shapes/surfer_bln.h,
+	  modules_io/shapes/io_shapes/xyz.cpp,
+	  modules_io/shapes/io_shapes/xyz.h,
+	  modules_io/shapes/io_shapes/io_shapes.dsp,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes/makefile.linux,
+	  modules_io/table/Makefile.am,
+	  modules_io/table/io_table_odbc/Get_Table.cpp,
+	  modules_io/table/io_table_odbc/MLB_Interface.cpp,
+	  modules_io/table/io_table_odbc/MLB_Interface.h,
+	  modules_io/table/io_table_odbc/Makefile.am,
+	  modules_io/table/io_table_odbc/Get_Table.h,
+	  modules_io/table/io_table_odbc/io_table_odbc.dsp,
+	  modules_io/table/io_table_odbc/io_table_odbc.vcproj,
+	  modules_io/table/io_table_odbc/makefile.linux,
+	  modules_io/table/io_table_odbc/makefile.mingw,
+	  modules_io/table/io_table_odbc/specs_makefile.linux,
+	  modules_io/table/io_table_odbc/specs_makefile.mingw,
+	  modules_lectures/Makefile.am,
+	  modules_lectures/modules_lectures.bat,
+	  modules_lectures/modules_lectures.dsw,
+	  modules_lectures/modules_lectures.linux,
+	  modules_lectures/modules_lectures.sln,
+	  modules_lectures/lectures/Makefile.am,
+	  modules_lectures/lectures/lectures_introduction/Exercise_01.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_02.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_03.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_04.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_04.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_05.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_06.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_06.h,
+	  modules_lectures/lectures/lectures_introduction/makefile.linux,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_10.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_02.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_10.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_11.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_11.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_12.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_13.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_14.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_01.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_14.h,
+	  modules_lectures/lectures/lectures_introduction/MLB_Interface.cpp,
+	  modules_lectures/lectures/lectures_introduction/MLB_Interface.h,
+	  modules_lectures/lectures/lectures_introduction/Makefile.am,
+	  modules_lectures/lectures/lectures_introduction/makefile.mingw,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_12.cpp,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.dsp,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.vcproj,
+	  modules_lectures/lectures/lectures_introduction/Exercise_03.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_05.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_13.cpp,
+	  modules_projection/Makefile.am,
+	  modules_projection/modules_projection.bat,
+	  modules_projection/modules_projection.dsw,
+	  modules_projection/modules_projection.linux,
+	  modules_projection/modules_projection.sln,
+	  modules_projection/pj_georeference/Makefile.am,
+	  modules_projection/pj_georeference/pj_georeference/makefile.linux,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.h,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Engine.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.h,
+	  modules_projection/pj_georeference/pj_georeference/MLB_Interface.h,
+	  modules_projection/pj_georeference/pj_georeference/Makefile.am,
+	  modules_projection/pj_georeference/pj_georeference/cminpak.h,
+	  modules_projection/pj_georeference/pj_georeference/dpmpar.h,
+	  modules_projection/pj_georeference/pj_georeference/enorm.c,
+	  modules_projection/pj_georeference/pj_georeference/fdjac2.c,
+	  modules_projection/pj_georeference/pj_georeference/lmdif.c,
+	  modules_projection/pj_georeference/pj_georeference/lmdif0.c,
+	  modules_projection/pj_georeference/pj_georeference/lmpar.c,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.dsp,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.vcproj,
+	  modules_projection/pj_georeference/pj_georeference/qrfac.c,
+	  modules_projection/pj_georeference/pj_georeference/qrsolv.c,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Engine.h,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Shapes.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Shapes.h,
+	  modules_projection/pj_georeference/pj_georeference/MLB_Interface.cpp,
+	  modules_projection/pj_georeference/pj_georeference/makefile.mingw,
+	  modules_projection/pj_geotrans/Makefile.am,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/MLB_Interface.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/MLB_Interface.h,
+	  modules_projection/pj_geotrans/pj_geotrans/makefile.linux,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.vcproj,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.h,
+	  modules_projection/pj_geotrans/pj_geotrans/Makefile.am,
+	  modules_projection/pj_geotrans/pj_geotrans/makefile.mingw,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.dsp,
+	  modules_projection/pj_geotrans/pj_geotrans/specs_makefile.mingw,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.h,
+	  modules_projection/pj_geotrans/pj_geotrans/specs_makefile.linux,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.h,
+	  modules_projection/pj_geotrans/pj_geotrans/data/Projection_GeoTRANS_Datum_3.dat,
+	  modules_projection/pj_geotrans/pj_geotrans/data/Projection_GeoTRANS_Datum_7.dat,
+	  modules_projection/pj_geotrans/pj_geotrans/data/Projection_GeoTRANS_Ellipsoid.dat:
+	  Initial revision
+
+2006-06-26 17:37  oconrad
+
+	* src/: modules_all.bat, modules_all.dsw, gpl.txt, saga.sln,
+	  Makefile.am, install.txt, saga.bat, saga.dsw, lgpl.txt,
+	  modules_all.linux, modules_all.sln, modules/Makefile.am,
+	  modules/modules.bat, modules/modules.dsw, modules/modules.linux,
+	  modules/modules.sln, modules/grid/Makefile.am,
+	  modules/grid/grid_analysis/Cost_Anisotropic.cpp,
+	  modules/grid/grid_analysis/Cost_Anisotropic.h,
+	  modules/grid/grid_analysis/Cost_Isotropic.h,
+	  modules/grid/grid_analysis/Cost_PolarToRect.cpp,
+	  modules/grid/grid_analysis/Cost_PolarToRect.h,
+	  modules/grid/grid_analysis/Cost_RectToPolar.h,
+	  modules/grid/grid_analysis/CoveredDistance.cpp,
+	  modules/grid/grid_analysis/CoveredDistance.h,
+	  modules/grid/grid_analysis/CrossClassification.cpp,
+	  modules/grid/grid_analysis/CrossClassification.h,
+	  modules/grid/grid_analysis/makefile.linux,
+	  modules/grid/grid_analysis/owa.h,
+	  modules/grid/grid_analysis/Fuzzify.cpp,
+	  modules/grid/grid_analysis/Fuzzify.h,
+	  modules/grid/grid_analysis/FuzzyAND.h,
+	  modules/grid/grid_analysis/FuzzyOR.cpp,
+	  modules/grid/grid_analysis/FuzzyOR.h,
+	  modules/grid/grid_analysis/Grid_AHP.h,
+	  modules/grid/grid_analysis/Grid_AggregationIndex.cpp,
+	  modules/grid/grid_analysis/Grid_AggregationIndex.h,
+	  modules/grid/grid_analysis/Grid_CVA.cpp,
+	  modules/grid/grid_analysis/Grid_CVA.h,
+	  modules/grid/grid_analysis/Grid_LayerOfMaximumValue.cpp,
+	  modules/grid/grid_analysis/Grid_LayerOfMaximumValue.h,
+	  modules/grid/grid_analysis/owa.cpp,
+	  modules/grid/grid_analysis/Cost_Isotropic.cpp,
+	  modules/grid/grid_analysis/Grid_Pattern.h,
+	  modules/grid/grid_analysis/Image_VI_Distance.cpp,
+	  modules/grid/grid_analysis/Image_VI_Distance.h,
+	  modules/grid/grid_analysis/Image_VI_Slope.cpp,
+	  modules/grid/grid_analysis/Image_VI_Slope.h,
+	  modules/grid/grid_analysis/LeastCostPathProfile.h,
+	  modules/grid/grid_analysis/MLB_Interface.h,
+	  modules/grid/grid_analysis/PointsEx.cpp,
+	  modules/grid/grid_analysis/PointsEx.h,
+	  modules/grid/grid_analysis/grid_analysis.dsp,
+	  modules/grid/grid_analysis/FuzzyAND.cpp,
+	  modules/grid/grid_analysis/Grid_AHP.cpp,
+	  modules/grid/grid_analysis/MLB_Interface.cpp,
+	  modules/grid/grid_analysis/Makefile.am,
+	  modules/grid/grid_analysis/grid_analysis.vcproj,
+	  modules/grid/grid_analysis/makefile.mingw,
+	  modules/grid/grid_analysis/Cost_RectToPolar.cpp,
+	  modules/grid/grid_analysis/Grid_Pattern.cpp,
+	  modules/grid/grid_analysis/LeastCostPathProfile.cpp,
+	  modules/grid/grid_calculus/Grid_Geometric_Figures.h,
+	  modules/grid/grid_calculus/Grid_Normalise.cpp,
+	  modules/grid/grid_calculus/Grid_Normalise.h,
+	  modules/grid/grid_calculus/Grid_Plotter.cpp,
+	  modules/grid/grid_calculus/Grid_Plotter.h,
+	  modules/grid/grid_calculus/Grid_Volume.h,
+	  modules/grid/grid_calculus/Grid_Random_Field.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Field.h,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.h,
+	  modules/grid/grid_calculus/Grid_Volume.cpp,
+	  modules/grid/grid_calculus/MLB_Interface.cpp,
+	  modules/grid/grid_calculus/MLB_Interface.h,
+	  modules/grid/grid_calculus/grid_calculus.dsp,
+	  modules/grid/grid_calculus/makefile.linux,
+	  modules/grid/grid_calculus/Grid_Calculator.cpp,
+	  modules/grid/grid_calculus/Grid_Calculator.h,
+	  modules/grid/grid_calculus/Grid_Geometric_Figures.cpp,
+	  modules/grid/grid_calculus/Grid_Random_Terrain.cpp,
+	  modules/grid/grid_calculus/Makefile.am,
+	  modules/grid/grid_calculus/grid_calculus.vcproj,
+	  modules/grid/grid_calculus/makefile.mingw,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.h,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp,
+	  modules/grid/grid_discretisation/Grid_Cluster_Analysis.h,
+	  modules/grid/grid_discretisation/Grid_FastSegments.cpp,
+	  modules/grid/grid_discretisation/makefile.linux,
+	  modules/grid/grid_discretisation/Grid_FastSegments.h,
+	  modules/grid/grid_discretisation/Grid_Segmentation.cpp,
+	  modules/grid/grid_discretisation/Makefile.am,
+	  modules/grid/grid_discretisation/grid_discretisation.dsp,
+	  modules/grid/grid_discretisation/grid_discretisation.vcproj,
+	  modules/grid/grid_discretisation/makefile.mingw,
+	  modules/grid/grid_discretisation/Grid_Segmentation.h,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.cpp,
+	  modules/grid/grid_discretisation/Grid_Skeletonize.h,
+	  modules/grid/grid_discretisation/MLB_Interface.h,
+	  modules/grid/grid_discretisation/Grid_Classify_Supervised.cpp,
+	  modules/grid/grid_discretisation/MLB_Interface.cpp,
+	  modules/grid/grid_filter/FilterClumps.cpp,
+	  modules/grid/grid_filter/FilterClumps.h,
+	  modules/grid/grid_filter/Filter_3x3.cpp,
+	  modules/grid/grid_filter/Filter_3x3.h,
+	  modules/grid/grid_filter/Filter_Gauss.cpp,
+	  modules/grid/grid_filter/Filter_Gauss.h,
+	  modules/grid/grid_filter/Filter_LoG.cpp,
+	  modules/grid/grid_filter/Filter_LoG.h,
+	  modules/grid/grid_filter/Filter_Multi_Dir_Lee.cpp,
+	  modules/grid/grid_filter/Filter_Multi_Dir_Lee.h,
+	  modules/grid/grid_filter/MLB_Interface.cpp,
+	  modules/grid/grid_filter/MLB_Interface.h,
+	  modules/grid/grid_filter/Pt.h,
+	  modules/grid/grid_filter/grid_filter.dsp,
+	  modules/grid/grid_filter/Filter.cpp,
+	  modules/grid/grid_filter/Filter.h,
+	  modules/grid/grid_filter/Makefile.am,
+	  modules/grid/grid_filter/grid_filter.vcproj,
+	  modules/grid/grid_filter/makefile.linux,
+	  modules/grid/grid_filter/makefile.mingw,
+	  modules/grid/grid_gridding/makefile.linux,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.h,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.cpp,
+	  modules/grid/grid_gridding/Interpolation_NearestNeighbour.h,
+	  modules/grid/grid_gridding/Interpolation_Shepard.cpp,
+	  modules/grid/grid_gridding/Interpolation_Shepard.h,
+	  modules/grid/grid_gridding/Interpolation_Triangulation.h,
+	  modules/grid/grid_gridding/MLB_Interface.cpp,
+	  modules/grid/grid_gridding/Interpolation.cpp,
+	  modules/grid/grid_gridding/MLB_Interface.h,
+	  modules/grid/grid_gridding/Shapes2Grid.cpp,
+	  modules/grid/grid_gridding/Shapes2Grid.h,
+	  modules/grid/grid_gridding/Interpolation.h,
+	  modules/grid/grid_gridding/Interpolation_Triangulation.cpp,
+	  modules/grid/grid_gridding/Makefile.am,
+	  modules/grid/grid_gridding/Shepard.cpp,
+	  modules/grid/grid_gridding/Shepard.h,
+	  modules/grid/grid_gridding/grid_gridding.dsp,
+	  modules/grid/grid_gridding/grid_gridding.vcproj,
+	  modules/grid/grid_gridding/makefile.mingw,
+	  modules/grid/grid_gridding/Interpolation_InverseDistance.cpp,
+	  modules/grid/grid_tools/Grid_Aggregate.cpp,
+	  modules/grid/grid_tools/Grid_Aggregate.h,
+	  modules/grid/grid_tools/Grid_Buffer.h,
+	  modules/grid/grid_tools/Grid_CombineGrids.cpp,
+	  modules/grid/grid_tools/Grid_CombineGrids.h,
+	  modules/grid/grid_tools/Grid_Merge.h,
+	  modules/grid/grid_tools/Grid_Completion.h,
+	  modules/grid/grid_tools/Grid_CropToData.cpp,
+	  modules/grid/grid_tools/Grid_CropToData.h,
+	  modules/grid/grid_tools/Grid_Cut.cpp,
+	  modules/grid/grid_tools/Grid_Cut.h,
+	  modules/grid/grid_tools/Grid_Fill.cpp,
+	  modules/grid/grid_tools/Grid_Fill.h,
+	  modules/grid/grid_tools/Grid_Gaps.cpp,
+	  modules/grid/grid_tools/Grid_Gaps.h,
+	  modules/grid/grid_tools/Grid_Gaps_OneCell.cpp,
+	  modules/grid/grid_tools/Grid_Gaps_OneCell.h,
+	  modules/grid/grid_tools/Grid_InvertNoData.cpp,
+	  modules/grid/grid_tools/Grid_InvertNoData.h,
+	  modules/grid/grid_tools/Grid_Merge.cpp,
+	  modules/grid/grid_tools/Grid_Orientation.h,
+	  modules/grid/grid_tools/Grid_Resample.cpp,
+	  modules/grid/grid_tools/makefile.linux,
+	  modules/grid/grid_tools/Grid_ConstantGrid.cpp,
+	  modules/grid/grid_tools/Grid_Resample.h,
+	  modules/grid/grid_tools/Grid_SortRaster.h,
+	  modules/grid/grid_tools/Grid_ThresholdBuffer.cpp,
+	  modules/grid/grid_tools/Grid_ThresholdBuffer.h,
+	  modules/grid/grid_tools/Grid_Value_Replace.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace.h,
+	  modules/grid/grid_tools/Grid_Value_Replace_Interactive.cpp,
+	  modules/grid/grid_tools/Grid_Value_Replace_Interactive.h,
+	  modules/grid/grid_tools/Grid_Value_Request.cpp,
+	  modules/grid/grid_tools/Grid_Value_Request.h,
+	  modules/grid/grid_tools/Grid_Value_Type.cpp,
+	  modules/grid/grid_tools/Grid_Value_Type.h,
+	  modules/grid/grid_tools/GridsFromTableAndGrid.cpp,
+	  modules/grid/grid_tools/GridsFromTableAndGrid.h,
+	  modules/grid/grid_tools/MLB_Interface.cpp,
+	  modules/grid/grid_tools/MLB_Interface.h,
+	  modules/grid/grid_tools/Pt.h,
+	  modules/grid/grid_tools/grid_tools.dsp,
+	  modules/grid/grid_tools/Grid_Buffer.cpp,
+	  modules/grid/grid_tools/Grid_Completion.cpp,
+	  modules/grid/grid_tools/Grid_ConstantGrid.h,
+	  modules/grid/grid_tools/Grid_SortRaster.cpp,
+	  modules/grid/grid_tools/Makefile.am,
+	  modules/grid/grid_tools/grid_tools.vcproj,
+	  modules/grid/grid_tools/makefile.mingw,
+	  modules/grid/grid_tools/Grid_Orientation.cpp,
+	  modules/grid/grid_tools/Grid_Value_Reclassify.cpp,
+	  modules/grid/grid_tools/Grid_Value_Reclassify.h,
+	  modules/grid/grid_visualisation/Grid_Color_Blend.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Blend.h,
+	  modules/grid/grid_visualisation/Grid_Color_Rotate.cpp,
+	  modules/grid/grid_visualisation/Grid_Color_Rotate.h,
+	  modules/grid/grid_visualisation/Grid_Colors_Fit.cpp,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.cpp,
+	  modules/grid/grid_visualisation/MLB_Interface.cpp,
+	  modules/grid/grid_visualisation/MLB_Interface.h,
+	  modules/grid/grid_visualisation/grid_visualisation.dsp,
+	  modules/grid/grid_visualisation/makefile.linux,
+	  modules/grid/grid_visualisation/Grid_3D_Image.h,
+	  modules/grid/grid_visualisation/Grid_Colors_Fit.h,
+	  modules/grid/grid_visualisation/Grid_RGB_Composite.h,
+	  modules/grid/grid_visualisation/Makefile.am,
+	  modules/grid/grid_visualisation/grid_visualisation.vcproj,
+	  modules/grid/grid_visualisation/makefile.mingw,
+	  modules/grid/grid_visualisation/Grid_3D_Image.cpp,
+	  modules/shapes/Makefile.am,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.h,
+	  modules/shapes/shapes_grid/Grid_To_Contour.h,
+	  modules/shapes/shapes_grid/Grid_To_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points.h,
+	  modules/shapes/shapes_grid/Grid_To_Points_Random.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Points_Random.h,
+	  modules/shapes/shapes_grid/makefile.linux,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Points.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Points.h,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.h,
+	  modules/shapes/shapes_grid/MLB_Interface.cpp,
+	  modules/shapes/shapes_grid/MLB_Interface.h,
+	  modules/shapes/shapes_grid/shapes_grid.dsp,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.cpp,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.cpp,
+	  modules/shapes/shapes_grid/Grid_Polygon_Clip.h,
+	  modules/shapes/shapes_grid/Makefile.am,
+	  modules/shapes/shapes_grid/makefile.mingw,
+	  modules/shapes/shapes_grid/shapes_grid.vcproj,
+	  modules/shapes/shapes_grid/Grid_Classes_To_Shapes.h,
+	  modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp,
+	  modules/shapes/shapes_grid/Grid_To_Contour.cpp,
+	  modules/shapes/shapes_lines/MLB_Interface.cpp,
+	  modules/shapes/shapes_lines/MLB_Interface.h,
+	  modules/shapes/shapes_lines/makefile.linux,
+	  modules/shapes/shapes_lines/makefile.mingw,
+	  modules/shapes/shapes_lines/shapes_lines.vcproj,
+	  modules/shapes/shapes_lines/Lines_From_Polygons.cpp,
+	  modules/shapes/shapes_lines/Lines_From_Polygons.h,
+	  modules/shapes/shapes_lines/Makefile.am,
+	  modules/shapes/shapes_lines/shapes_lines.dsp,
+	  modules/shapes/shapes_lines_ex/Containers.h,
+	  modules/shapes/shapes_lines_ex/DPHull.h,
+	  modules/shapes/shapes_lines_ex/LineApproximator.h,
+	  modules/shapes/shapes_lines_ex/PathHull.h,
+	  modules/shapes/shapes_lines_ex/SimplifyShapes.cpp,
+	  modules/shapes/shapes_lines_ex/SimplifyShapes.h,
+	  modules/shapes/shapes_lines_ex/makefile.mingw,
+	  modules/shapes/shapes_lines_ex/MLB_Interface.cpp,
+	  modules/shapes/shapes_lines_ex/MLB_Interface.h,
+	  modules/shapes/shapes_lines_ex/Makefile.am,
+	  modules/shapes/shapes_lines_ex/makefile.linux,
+	  modules/shapes/shapes_lines_ex/shapes_lines_ex.dsp,
+	  modules/shapes/shapes_lines_ex/shapes_lines_ex.vcproj,
+	  modules/shapes/shapes_points/AddCoordinates.h,
+	  modules/shapes/shapes_points/CountPoints.cpp,
+	  modules/shapes/shapes_points/CountPoints.h,
+	  modules/shapes/shapes_points/CreatePointGrid.cpp,
+	  modules/shapes/shapes_points/CreatePointGrid.h,
+	  modules/shapes/shapes_points/DistanceMatrix.cpp,
+	  modules/shapes/shapes_points/DistanceMatrix.h,
+	  modules/shapes/shapes_points/FitNPointsToShape.cpp,
+	  modules/shapes/shapes_points/FitNPointsToShape.h,
+	  modules/shapes/shapes_points/AddCoordinates.cpp,
+	  modules/shapes/shapes_points/MLB_Interface.cpp,
+	  modules/shapes/shapes_points/MLB_Interface.h,
+	  modules/shapes/shapes_points/Makefile.am,
+	  modules/shapes/shapes_points/Points_From_Lines.cpp,
+	  modules/shapes/shapes_points/Points_From_Lines.h,
+	  modules/shapes/shapes_points/Points_From_Table.cpp,
+	  modules/shapes/shapes_points/Points_From_Table.h,
+	  modules/shapes/shapes_points/makefile.linux,
+	  modules/shapes/shapes_points/makefile.mingw,
+	  modules/shapes/shapes_points/shapes_points.dsp,
+	  modules/shapes/shapes_points/shapes_points.vcproj,
+	  modules/shapes/shapes_polygons/Polygon_Centroids.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Centroids.h,
+	  modules/shapes/shapes_polygons/Polygon_Geometrics.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Geometrics.h,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection.h,
+	  modules/shapes/shapes_polygons/Polygons_From_Lines.cpp,
+	  modules/shapes/shapes_polygons/Polygon_Intersection_GPC.cpp,
+	  modules/shapes/shapes_polygons/MLB_Interface.h,
+	  modules/shapes/shapes_polygons/Makefile.am,
+	  modules/shapes/shapes_polygons/Polygon_Intersection_GPC.h,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.cpp,
+	  modules/shapes/shapes_polygons/Polygon_StatisticsFromPoints.h,
+	  modules/shapes/shapes_polygons/Polygons_From_Lines.h,
+	  modules/shapes/shapes_polygons/makefile.linux,
+	  modules/shapes/shapes_polygons/makefile.mingw,
+	  modules/shapes/shapes_polygons/shapes_polygons.dsp,
+	  modules/shapes/shapes_polygons/MLB_Interface.cpp,
+	  modules/shapes/shapes_polygons/shapes_polygons.vcproj,
+	  modules/shapes/shapes_tools/CreateChartLayer.h,
+	  modules/shapes/shapes_tools/GraticuleBuilder.cpp,
+	  modules/shapes/shapes_tools/GraticuleBuilder.h,
+	  modules/shapes/shapes_tools/makefile.linux,
+	  modules/shapes/shapes_tools/Intersection_GPC.c,
+	  modules/shapes/shapes_tools/Intersection_GPC.h,
+	  modules/shapes/shapes_tools/JoinTables.cpp,
+	  modules/shapes/shapes_tools/MLB_Interface.h,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.cpp,
+	  modules/shapes/shapes_tools/NewLayerFromSelectedShapes.h,
+	  modules/shapes/shapes_tools/QueryBuilder.cpp,
+	  modules/shapes/shapes_tools/QueryBuilder.h,
+	  modules/shapes/shapes_tools/QueryParser.cpp,
+	  modules/shapes/shapes_tools/QueryParser.h,
+	  modules/shapes/shapes_tools/SearchInTable.cpp,
+	  modules/shapes/shapes_tools/SearchInTable.h,
+	  modules/shapes/shapes_tools/SelectByTheme.cpp,
+	  modules/shapes/shapes_tools/SelectByTheme.h,
+	  modules/shapes/shapes_tools/SeparateShapes.cpp,
+	  modules/shapes/shapes_tools/SeparateShapes.h,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.cpp,
+	  modules/shapes/shapes_tools/ShapeSearchSelector.h,
+	  modules/shapes/shapes_tools/ShapeSelector.cpp,
+	  modules/shapes/shapes_tools/ShapeSelector.h,
+	  modules/shapes/shapes_tools/Shapes_Assign_Table.cpp,
+	  modules/shapes/shapes_tools/Shapes_Assign_Table.h,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.cpp,
+	  modules/shapes/shapes_tools/Shapes_Create_Empty.h,
+	  modules/shapes/shapes_tools/Shapes_Merge.h,
+	  modules/shapes/shapes_tools/Shapes_Report.cpp,
+	  modules/shapes/shapes_tools/Shapes_Report.h,
+	  modules/shapes/shapes_tools/Summarize.h,
+	  modules/shapes/shapes_tools/TransformShapes.cpp,
+	  modules/shapes/shapes_tools/TransformShapes.h,
+	  modules/shapes/shapes_tools/CreateChartLayer.cpp,
+	  modules/shapes/shapes_tools/CreateWebContent.h,
+	  modules/shapes/shapes_tools/Shapes_Merge.cpp,
+	  modules/shapes/shapes_tools/Summarize.cpp,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.cpp,
+	  modules/shapes/shapes_tools/makefile.mingw,
+	  modules/shapes/shapes_tools/shapes_tools.dsp,
+	  modules/shapes/shapes_tools/CreateWebContent.cpp,
+	  modules/shapes/shapes_tools/JoinTables.h,
+	  modules/shapes/shapes_tools/MLB_Interface.cpp,
+	  modules/shapes/shapes_tools/Makefile.am,
+	  modules/shapes/shapes_tools/SummaryPDFDocEngine.h,
+	  modules/shapes/shapes_tools/shapes_tools.vcproj,
+	  modules/table/Makefile.am, modules/table/table_calculus/LMFit.h,
+	  modules/table/table_calculus/MLB_Interface.cpp,
+	  modules/table/table_calculus/MLB_Interface.h,
+	  modules/table/table_calculus/Table_Calculator.cpp,
+	  modules/table/table_calculus/Table_Calculator.h,
+	  modules/table/table_calculus/Table_CalculatorShapes.cpp,
+	  modules/table/table_calculus/Table_CalculatorShapes.h,
+	  modules/table/table_calculus/Table_Trend.cpp,
+	  modules/table/table_calculus/makefile.linux,
+	  modules/table/table_calculus/makefile.mingw,
+	  modules/table/table_calculus/table_calculus.dsp,
+	  modules/table/table_calculus/Fit.cpp,
+	  modules/table/table_calculus/Fit.h,
+	  modules/table/table_calculus/LMFit.cpp,
+	  modules/table/table_calculus/Makefile.am,
+	  modules/table/table_calculus/Table_Trend.h,
+	  modules/table/table_calculus/table_calculus.vcproj,
+	  modules/table/table_tools/Table_Create_Empty.cpp,
+	  modules/table/table_tools/Table_Create_Empty.h,
+	  modules/table/table_tools/Table_Enumerate.cpp,
+	  modules/table/table_tools/Table_Enumerate.h,
+	  modules/table/table_tools/Table_Rotate.cpp,
+	  modules/table/table_tools/Table_Rotate.h,
+	  modules/table/table_tools/makefile.linux,
+	  modules/table/table_tools/makefile.mingw,
+	  modules/table/table_tools/table_tools.dsp,
+	  modules/table/table_tools/MLB_Interface.cpp,
+	  modules/table/table_tools/MLB_Interface.h,
+	  modules/table/table_tools/Makefile.am,
+	  modules/table/table_tools/table_tools.vcproj,
+	  modules/tin/Makefile.am,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Parallel.h,
+	  modules/tin/tin_tools/TIN_Flow_Trace.cpp,
+	  modules/tin/tin_tools/TIN_Flow_Trace.h,
+	  modules/tin/tin_tools/TIN_From_Grid.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid.h,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.h,
+	  modules/tin/tin_tools/TIN_From_Shapes.cpp,
+	  modules/tin/tin_tools/TIN_From_Shapes.h,
+	  modules/tin/tin_tools/TIN_Gradient.cpp,
+	  modules/tin/tin_tools/MLB_Interface.h,
+	  modules/tin/tin_tools/Makefile.am,
+	  modules/tin/tin_tools/TIN_Gradient.h,
+	  modules/tin/tin_tools/TIN_To_Shapes.cpp,
+	  modules/tin/tin_tools/TIN_To_Shapes.h,
+	  modules/tin/tin_tools/makefile.linux,
+	  modules/tin/tin_tools/makefile.mingw,
+	  modules/tin/tin_tools/tin_tools.dsp,
+	  modules/tin/tin_tools/MLB_Interface.cpp,
+	  modules/tin/tin_tools/TIN_From_Grid_Specific_Points.cpp,
+	  modules/tin/tin_tools/tin_tools.vcproj,
+	  modules_contrib/Makefile.am, modules_contrib/modules_contrib.bat,
+	  modules_contrib/modules_contrib.dsw,
+	  modules_contrib/modules_contrib.linux,
+	  modules_contrib/contrib_t_wutzler/Makefile.am,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/CompleteLinkage.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/DebugStream.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/DebugStream.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/GridCalcError.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/GridCalcError.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/MLB_Interface.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/NoDataValueError.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/NoDataValueError.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/Profiler.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/Profiler.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/makefile.mingw,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/rgbOverlay.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/rgbOverlay.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/tomaschTool.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/tomaschTool.h,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/MLB_Interface.cpp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/Makefile.am,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.dsp,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/contrib_t_wutzler.vcproj,
+	  modules_contrib/contrib_t_wutzler/contrib_t_wutzler/makefile.linux,
+	  modules_geostatistics/Makefile.am,
+	  modules_geostatistics/modules_geostatistics.bat,
+	  modules_geostatistics/modules_geostatistics.dsw,
+	  modules_geostatistics/modules_geostatistics.linux,
+	  modules_geostatistics/modules_geostatistics.sln,
+	  modules_geostatistics/geostatistics/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Residuals.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Statistics.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance_Radius.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_grid/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Variance_Radius.h,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/geostatistics_grid.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Zonal_Statistics.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary_Global.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal_Global.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Universal_Global.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Base.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Kriging_Ordinary.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/MLB_Interface.h,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_kriging/geostatistics_kriging.vcproj,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Semi_Variances.h,
+	  modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.cpp,
+	  modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.h,
+	  modules_geostatistics/geostatistics/geostatistics_points/Makefile.am,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.dsp,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.linux,
+	  modules_geostatistics/geostatistics/geostatistics_points/makefile.mingw,
+	  modules_geostatistics/geostatistics/geostatistics_points/geostatistics_points.vcproj,
+	  modules_io/Makefile.am, modules_io/modules_io.bat,
+	  modules_io/modules_io.dsw, modules_io/modules_io.linux,
+	  modules_io/modules_io.sln, modules_io/esri_e00/Makefile.am,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.h,
+	  modules_io/esri_e00/io_esri_e00/MLB_Interface.cpp,
+	  modules_io/esri_e00/io_esri_e00/MLB_Interface.h,
+	  modules_io/esri_e00/io_esri_e00/Makefile.am,
+	  modules_io/esri_e00/io_esri_e00/makefile.mingw,
+	  modules_io/esri_e00/io_esri_e00/ESRI_E00_Import.cpp,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.dsp,
+	  modules_io/esri_e00/io_esri_e00/io_esri_e00.vcproj,
+	  modules_io/esri_e00/io_esri_e00/makefile.linux,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_conv.c,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_conv.h,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_error.c,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_error.h,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_port.h,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_vsi.h,
+	  modules_io/esri_e00/io_esri_e00/e00compr/cpl_vsisimple.c,
+	  modules_io/esri_e00/io_esri_e00/e00compr/e00compr.h,
+	  modules_io/esri_e00/io_esri_e00/e00compr/e00read.c,
+	  modules_io/esri_e00/io_esri_e00/e00compr/e00write.c,
+	  modules_io/gps/Makefile.am, modules_io/gps/io_gps/GPSBabel.cpp,
+	  modules_io/gps/io_gps/GPSBabel.h,
+	  modules_io/gps/io_gps/Makefile.am,
+	  modules_io/gps/io_gps/gpx2shp.cpp,
+	  modules_io/gps/io_gps/gpx2shp.h,
+	  modules_io/gps/io_gps/makefile.mingw,
+	  modules_io/gps/io_gps/MLB_Interface.cpp,
+	  modules_io/gps/io_gps/MLB_Interface.h,
+	  modules_io/gps/io_gps/io_gps.dsp,
+	  modules_io/gps/io_gps/io_gps.vcproj,
+	  modules_io/gps/io_gps/makefile.linux,
+	  modules_io/grid/Makefile.am, modules_io/grid/io_grid/mola.cpp,
+	  modules_io/grid/io_grid/bmp_export.h,
+	  modules_io/grid/io_grid/erdas_lan.cpp,
+	  modules_io/grid/io_grid/erdas_lan.h,
+	  modules_io/grid/io_grid/esri_arcinfo.cpp,
+	  modules_io/grid/io_grid/esri_arcinfo.h,
+	  modules_io/grid/io_grid/grid_table.cpp,
+	  modules_io/grid/io_grid/grid_table.h,
+	  modules_io/grid/io_grid/mola.h, modules_io/grid/io_grid/raw.cpp,
+	  modules_io/grid/io_grid/raw.h,
+	  modules_io/grid/io_grid/srtm30.cpp,
+	  modules_io/grid/io_grid/srtm30.h,
+	  modules_io/grid/io_grid/MLB_Interface.h,
+	  modules_io/grid/io_grid/Makefile.am,
+	  modules_io/grid/io_grid/makefile.mingw,
+	  modules_io/grid/io_grid/surfer.cpp,
+	  modules_io/grid/io_grid/surfer.h,
+	  modules_io/grid/io_grid/usgs_srtm.cpp,
+	  modules_io/grid/io_grid/usgs_srtm.h,
+	  modules_io/grid/io_grid/xyz.cpp, modules_io/grid/io_grid/xyz.h,
+	  modules_io/grid/io_grid/MLB_Interface.cpp,
+	  modules_io/grid/io_grid/bmp_export.cpp,
+	  modules_io/grid/io_grid/io_grid.dsp,
+	  modules_io/grid/io_grid/io_grid.vcproj,
+	  modules_io/grid/io_grid/makefile.linux,
+	  modules_io/grid/io_grid_image/MLB_Interface.cpp,
+	  modules_io/grid/io_grid_image/MLB_Interface.h,
+	  modules_io/grid/io_grid_image/Makefile.am,
+	  modules_io/grid/io_grid_image/grid_export.cpp,
+	  modules_io/grid/io_grid_image/grid_export.h,
+	  modules_io/grid/io_grid_image/grid_import.cpp,
+	  modules_io/grid/io_grid_image/grid_import.h,
+	  modules_io/grid/io_grid_image/makefile.mingw,
+	  modules_io/grid/io_grid_image/specs_makefile.linux,
+	  modules_io/grid/io_grid_image/specs_makefile.mingw,
+	  modules_io/grid/io_grid_image/io_grid_image.dsp,
+	  modules_io/grid/io_grid_image/io_grid_image.vcproj,
+	  modules_io/grid/io_grid_image/makefile.linux,
+	  modules_io/shapes/Makefile.am,
+	  modules_io/shapes/io_shapes/generate.cpp,
+	  modules_io/shapes/io_shapes/generate.h,
+	  modules_io/shapes/io_shapes/gstat.cpp,
+	  modules_io/shapes/io_shapes/gstat.h,
+	  modules_io/shapes/io_shapes/MLB_Interface.cpp,
+	  modules_io/shapes/io_shapes/MLB_Interface.h,
+	  modules_io/shapes/io_shapes/Makefile.am,
+	  modules_io/shapes/io_shapes/makefile.mingw,
+	  modules_io/shapes/io_shapes/surfer_bln.cpp,
+	  modules_io/shapes/io_shapes/surfer_bln.h,
+	  modules_io/shapes/io_shapes/xyz.cpp,
+	  modules_io/shapes/io_shapes/xyz.h,
+	  modules_io/shapes/io_shapes/io_shapes.dsp,
+	  modules_io/shapes/io_shapes/io_shapes.vcproj,
+	  modules_io/shapes/io_shapes/makefile.linux,
+	  modules_io/table/Makefile.am,
+	  modules_io/table/io_table_odbc/Get_Table.cpp,
+	  modules_io/table/io_table_odbc/MLB_Interface.cpp,
+	  modules_io/table/io_table_odbc/MLB_Interface.h,
+	  modules_io/table/io_table_odbc/Makefile.am,
+	  modules_io/table/io_table_odbc/Get_Table.h,
+	  modules_io/table/io_table_odbc/io_table_odbc.dsp,
+	  modules_io/table/io_table_odbc/io_table_odbc.vcproj,
+	  modules_io/table/io_table_odbc/makefile.linux,
+	  modules_io/table/io_table_odbc/makefile.mingw,
+	  modules_io/table/io_table_odbc/specs_makefile.linux,
+	  modules_io/table/io_table_odbc/specs_makefile.mingw,
+	  modules_lectures/Makefile.am,
+	  modules_lectures/modules_lectures.bat,
+	  modules_lectures/modules_lectures.dsw,
+	  modules_lectures/modules_lectures.linux,
+	  modules_lectures/modules_lectures.sln,
+	  modules_lectures/lectures/Makefile.am,
+	  modules_lectures/lectures/lectures_introduction/Exercise_01.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_02.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_03.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_04.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_04.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_05.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_06.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_06.h,
+	  modules_lectures/lectures/lectures_introduction/makefile.linux,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_08.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_09.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_10.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_02.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_10.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_11.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_11.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_12.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_13.h,
+	  modules_lectures/lectures/lectures_introduction/Exercise_14.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_01.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_14.h,
+	  modules_lectures/lectures/lectures_introduction/MLB_Interface.cpp,
+	  modules_lectures/lectures/lectures_introduction/MLB_Interface.h,
+	  modules_lectures/lectures/lectures_introduction/Makefile.am,
+	  modules_lectures/lectures/lectures_introduction/makefile.mingw,
+	  modules_lectures/lectures/lectures_introduction/Exercise_07.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_12.cpp,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.dsp,
+	  modules_lectures/lectures/lectures_introduction/lectures_introduction.vcproj,
+	  modules_lectures/lectures/lectures_introduction/Exercise_03.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_05.cpp,
+	  modules_lectures/lectures/lectures_introduction/Exercise_13.cpp,
+	  modules_projection/Makefile.am,
+	  modules_projection/modules_projection.bat,
+	  modules_projection/modules_projection.dsw,
+	  modules_projection/modules_projection.linux,
+	  modules_projection/modules_projection.sln,
+	  modules_projection/pj_georeference/Makefile.am,
+	  modules_projection/pj_georeference/pj_georeference/makefile.linux,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.h,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Engine.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.h,
+	  modules_projection/pj_georeference/pj_georeference/MLB_Interface.h,
+	  modules_projection/pj_georeference/pj_georeference/Makefile.am,
+	  modules_projection/pj_georeference/pj_georeference/cminpak.h,
+	  modules_projection/pj_georeference/pj_georeference/dpmpar.h,
+	  modules_projection/pj_georeference/pj_georeference/enorm.c,
+	  modules_projection/pj_georeference/pj_georeference/fdjac2.c,
+	  modules_projection/pj_georeference/pj_georeference/lmdif.c,
+	  modules_projection/pj_georeference/pj_georeference/lmdif0.c,
+	  modules_projection/pj_georeference/pj_georeference/lmpar.c,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Grid.cpp,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.dsp,
+	  modules_projection/pj_georeference/pj_georeference/pj_georeference.vcproj,
+	  modules_projection/pj_georeference/pj_georeference/qrfac.c,
+	  modules_projection/pj_georeference/pj_georeference/qrsolv.c,
+	  modules_projection/pj_georeference/pj_georeference/Collect_Points.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Engine.h,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Shapes.cpp,
+	  modules_projection/pj_georeference/pj_georeference/Georef_Shapes.h,
+	  modules_projection/pj_georeference/pj_georeference/MLB_Interface.cpp,
+	  modules_projection/pj_georeference/pj_georeference/makefile.mingw,
+	  modules_projection/pj_geotrans/Makefile.am,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/MLB_Interface.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/MLB_Interface.h,
+	  modules_projection/pj_geotrans/pj_geotrans/makefile.linux,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.vcproj,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.h,
+	  modules_projection/pj_geotrans/pj_geotrans/Makefile.am,
+	  modules_projection/pj_geotrans/pj_geotrans/makefile.mingw,
+	  modules_projection/pj_geotrans/pj_geotrans/pj_geotrans.dsp,
+	  modules_projection/pj_geotrans/pj_geotrans/specs_makefile.mingw,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Base.cpp,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Grid.h,
+	  modules_projection/pj_geotrans/pj_geotrans/specs_makefile.linux,
+	  modules_projection/pj_geotrans/pj_geotrans/GEOTRANS_Shapes.h,
+	  modules_projection/pj_geotrans/pj_geotrans/data/Projection_GeoTRANS_Datum_3.dat,
+	  modules_projection/pj_geotrans/pj_geotrans/data/Projection_GeoTRANS_Datum_7.dat,
+	  modules_projection/pj_geotrans/pj_geotrans/data/Projection_GeoTRANS_Ellipsoid.dat:
+	  no message
+
diff --git a/INSTALL b/INSTALL
index 2550dab..7d1c323 100644
--- a/INSTALL
+++ b/INSTALL
@@ -4,8 +4,10 @@ Installation Instructions
 Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
-   This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
 
 Basic Installation
 ==================
@@ -13,7 +15,11 @@ Basic Installation
    Briefly, the shell commands `./configure; make; make install' should
 configure, build, and install this package.  The following
 more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
 
    The `configure' shell script attempts to guess correct values for
 various system-dependent variables used during compilation.  It uses
@@ -42,7 +48,7 @@ may remove or edit it.
 you want to change it or regenerate `configure' using a newer version
 of `autoconf'.
 
-The simplest way to compile this package is:
+   The simplest way to compile this package is:
 
   1. `cd' to the directory containing the package's source code and type
      `./configure' to configure the package for your system.
@@ -53,12 +59,22 @@ The simplest way to compile this package is:
   2. Type `make' to compile the package.
 
   3. Optionally, type `make check' to run any self-tests that come with
-     the package.
+     the package, generally using the just-built uninstalled binaries.
 
   4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
      source code directory by typing `make clean'.  To also remove the
      files that `configure' created (so you can compile the package for
      a different kind of computer), type `make distclean'.  There is
@@ -67,8 +83,15 @@ The simplest way to compile this package is:
      all sorts of other programs in order to regenerate files that came
      with the distribution.
 
-  6. Often, you can also type `make uninstall' to remove the installed
-     files again.
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
 
 Compilers and Options
 =====================
@@ -93,7 +116,8 @@ same time, by placing the object files for each architecture in their
 own directory.  To do this, you can use GNU `make'.  `cd' to the
 directory where you want the object files and executables to go and run
 the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
 
    With a non-GNU `make', it is safer to compile the package for one
 architecture at a time in the source code directory.  After you have
@@ -120,7 +144,8 @@ Installation Names
    By default, `make install' installs the package's commands under
 `/usr/local/bin', include files under `/usr/local/include', etc.  You
 can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
 
    You can specify separate installation prefixes for
 architecture-specific files and architecture-independent files.  If you
@@ -131,15 +156,46 @@ Documentation and other data files still use the regular prefix.
    In addition, if you use an unusual directory layout you can give
 options like `--bindir=DIR' to specify different values for particular
 kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
 
    If the package supports it, you can cause programs to be installed
 with an extra prefix or suffix on their names by giving `configure' the
 option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
 
-Optional Features
-=================
-
    Some packages pay attention to `--enable-FEATURE' options to
 `configure', where FEATURE indicates an optional part of the package.
 They may also pay attention to `--with-PACKAGE' options, where PACKAGE
@@ -152,6 +208,13 @@ find the X include and library files automatically, but if it doesn't,
 you can use the `configure' options `--x-includes=DIR' and
 `--x-libraries=DIR' to specify their locations.
 
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
 Particular systems
 ==================
 
@@ -288,7 +351,7 @@ operates.
      `configure' can determine that directory automatically.
 
 `--prefix=DIR'
-     Use DIR as the installation prefix.  *Note Installation Names::
+     Use DIR as the installation prefix.  *note Installation Names::
      for more details, including other options available for fine-tuning
      the installation locations.
 
diff --git a/Makefile.am b/Makefile.am
index 2afafc0..d556358 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -3,4 +3,4 @@ if DEBUG
 AM_CFLAGS = -g -DDEBUG
 AM_CXXFLAGS = -g -DDEBUG
 endif
-
+ACLOCAL_AMFLAGS = -I m4
diff --git a/Makefile.in b/Makefile.in
index 0d508e3..6140a33 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,
@@ -37,9 +37,15 @@ subdir = .
 DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \
 	ChangeLog INSTALL NEWS config.guess config.sub depcomp \
-	install-sh ltmain.sh missing
+	install-sh ltmain.sh missing py-compile
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -107,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -156,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -207,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -221,6 +246,7 @@ top_srcdir = @top_srcdir@
 SUBDIRS = . src
 @DEBUG_TRUE at AM_CFLAGS = -g -DDEBUG
 @DEBUG_TRUE at AM_CXXFLAGS = -g -DDEBUG
+ACLOCAL_AMFLAGS = -I m4
 all: all-recursive
 
 .SUFFIXES:
@@ -275,7 +301,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]*);; \
@@ -300,7 +326,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]*);; \
@@ -464,7 +490,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 {} {} \; \
@@ -508,17 +535,17 @@ dist dist-all: distdir
 distcheck: dist
 	case '$(DIST_ARCHIVES)' in \
 	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
-	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lzma*) \
-	  unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
 	*.tar.xz*) \
 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
 	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
diff --git a/aclocal.m4 b/aclocal.m4
index 6413c9b..c36d800 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,7958 +13,12 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],,
-[m4_warning([this file was generated for autoconf 2.63.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
+[m4_warning([this file was generated for autoconf 2.65.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
 
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-#
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-m4_define([_LT_COPYING], [dnl
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-])
-
-# serial 56 LT_INIT
-
-
-# LT_PREREQ(VERSION)
-# ------------------
-# Complain and exit if this libtool version is less that VERSION.
-m4_defun([LT_PREREQ],
-[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
-       [m4_default([$3],
-		   [m4_fatal([Libtool version $1 or higher is required],
-		             63)])],
-       [$2])])
-
-
-# _LT_CHECK_BUILDDIR
-# ------------------
-# Complain if the absolute build directory name contains unusual characters
-m4_defun([_LT_CHECK_BUILDDIR],
-[case `pwd` in
-  *\ * | *\	*)
-    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
-esac
-])
-
-
-# LT_INIT([OPTIONS])
-# ------------------
-AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
-AC_BEFORE([$0], [LT_LANG])dnl
-AC_BEFORE([$0], [LT_OUTPUT])dnl
-AC_BEFORE([$0], [LTDL_INIT])dnl
-m4_require([_LT_CHECK_BUILDDIR])dnl
-
-dnl Autoconf doesn't catch unexpanded LT_ macros by default:
-m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
-m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
-dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
-dnl unless we require an AC_DEFUNed macro:
-AC_REQUIRE([LTOPTIONS_VERSION])dnl
-AC_REQUIRE([LTSUGAR_VERSION])dnl
-AC_REQUIRE([LTVERSION_VERSION])dnl
-AC_REQUIRE([LTOBSOLETE_VERSION])dnl
-m4_require([_LT_PROG_LTMAIN])dnl
-
-dnl Parse OPTIONS
-_LT_SET_OPTIONS([$0], [$1])
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-_LT_SETUP
-
-# Only expand once:
-m4_define([LT_INIT])
-])# LT_INIT
-
-# Old names:
-AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
-AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
-dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
-m4_defun([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
-  case $cc_temp in
-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_FILEUTILS_DEFAULTS
-# ----------------------
-# It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
-m4_defun([_LT_FILEUTILS_DEFAULTS],
-[: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-])# _LT_FILEUTILS_DEFAULTS
-
-
-# _LT_SETUP
-# ---------
-m4_defun([_LT_SETUP],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-_LT_DECL([], [host_alias], [0], [The host system])dnl
-_LT_DECL([], [host], [0])dnl
-_LT_DECL([], [host_os], [0])dnl
-dnl
-_LT_DECL([], [build_alias], [0], [The build system])dnl
-_LT_DECL([], [build], [0])dnl
-_LT_DECL([], [build_os], [0])dnl
-dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-dnl
-AC_REQUIRE([AC_PROG_LN_S])dnl
-test -z "$LN_S" && LN_S="ln -s"
-_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
-dnl
-AC_REQUIRE([LT_CMD_MAX_LEN])dnl
-_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
-_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
-dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
-m4_require([_LT_CMD_RELOAD])dnl
-m4_require([_LT_CHECK_MAGIC_METHOD])dnl
-m4_require([_LT_CMD_OLD_ARCHIVE])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-
-_LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-])
-if test -n "${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-_LT_CHECK_OBJDIR
-
-m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    _LT_PATH_MAGIC
-  fi
-  ;;
-esac
-
-# Use C for the default configuration in the libtool script
-LT_SUPPORTED_TAG([CC])
-_LT_LANG_C_CONFIG
-_LT_LANG_DEFAULT_CONFIG
-_LT_CONFIG_COMMANDS
-])# _LT_SETUP
-
-
-# _LT_PROG_LTMAIN
-# ---------------
-# Note that this code is called both from `configure', and `config.status'
-# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
-# `config.status' has no value for ac_aux_dir unless we are using Automake,
-# so we pass a copy along to make sure it has a sensible value anyway.
-m4_defun([_LT_PROG_LTMAIN],
-[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
-_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
-ltmain="$ac_aux_dir/ltmain.sh"
-])# _LT_PROG_LTMAIN
-
-
-
-# So that we can recreate a full libtool script including additional
-# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
-# in macros and then make a single call at the end using the `libtool'
-# label.
-
-
-# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
-# ----------------------------------------
-# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL_INIT],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_INIT])
-
-
-# _LT_CONFIG_LIBTOOL([COMMANDS])
-# ------------------------------
-# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
-
-
-# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
-# -----------------------------------------------------
-m4_defun([_LT_CONFIG_SAVE_COMMANDS],
-[_LT_CONFIG_LIBTOOL([$1])
-_LT_CONFIG_LIBTOOL_INIT([$2])
-])
-
-
-# _LT_FORMAT_COMMENT([COMMENT])
-# -----------------------------
-# Add leading comment marks to the start of each line, and a trailing
-# full-stop to the whole comment if one is not present already.
-m4_define([_LT_FORMAT_COMMENT],
-[m4_ifval([$1], [
-m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
-              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
-)])
-
-
-
-
-
-# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
-# -------------------------------------------------------------------
-# CONFIGNAME is the name given to the value in the libtool script.
-# VARNAME is the (base) name used in the configure script.
-# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
-# VARNAME.  Any other value will be used directly.
-m4_define([_LT_DECL],
-[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
-    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
-	[m4_ifval([$1], [$1], [$2])])
-    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
-    m4_ifval([$4],
-	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
-    lt_dict_add_subkey([lt_decl_dict], [$2],
-	[tagged?], [m4_ifval([$5], [yes], [no])])])
-])
-
-
-# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
-# --------------------------------------------------------
-m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
-
-
-# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_tag_varnames],
-[_lt_decl_filter([tagged?], [yes], $@)])
-
-
-# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
-# ---------------------------------------------------------
-m4_define([_lt_decl_filter],
-[m4_case([$#],
-  [0], [m4_fatal([$0: too few arguments: $#])],
-  [1], [m4_fatal([$0: too few arguments: $#: $1])],
-  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
-  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
-  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
-])
-
-
-# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
-# --------------------------------------------------
-m4_define([lt_decl_quote_varnames],
-[_lt_decl_filter([value], [1], $@)])
-
-
-# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_dquote_varnames],
-[_lt_decl_filter([value], [2], $@)])
-
-
-# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_varnames_tagged],
-[m4_assert([$# <= 2])dnl
-_$0(m4_quote(m4_default([$1], [[, ]])),
-    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
-    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
-m4_define([_lt_decl_varnames_tagged],
-[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
-
-
-# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_all_varnames],
-[_$0(m4_quote(m4_default([$1], [[, ]])),
-     m4_if([$2], [],
-	   m4_quote(lt_decl_varnames),
-	m4_quote(m4_shift($@))))[]dnl
-])
-m4_define([_lt_decl_all_varnames],
-[lt_join($@, lt_decl_varnames_tagged([$1],
-			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
-])
-
-
-# _LT_CONFIG_STATUS_DECLARE([VARNAME])
-# ------------------------------------
-# Quote a variable value, and forward it to `config.status' so that its
-# declaration there will have the same value as in `configure'.  VARNAME
-# must have a single quote delimited value for this to work.
-m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
-
-
-# _LT_CONFIG_STATUS_DECLARATIONS
-# ------------------------------
-# We delimit libtool config variables with single quotes, so when
-# we write them to config.status, we have to be sure to quote all
-# embedded single quotes properly.  In configure, this macro expands
-# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
-#
-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
-m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
-    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAGS
-# ----------------
-# Output comment and list of tags supported by the script
-m4_defun([_LT_LIBTOOL_TAGS],
-[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
-available_tags="_LT_TAGS"dnl
-])
-
-
-# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
-# -----------------------------------
-# Extract the dictionary values for VARNAME (optionally with TAG) and
-# expand to a commented shell variable setting:
-#
-#    # Some comment about what VAR is for.
-#    visible_name=$lt_internal_name
-m4_define([_LT_LIBTOOL_DECLARE],
-[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
-					   [description])))[]dnl
-m4_pushdef([_libtool_name],
-    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
-m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
-    [0], [_libtool_name=[$]$1],
-    [1], [_libtool_name=$lt_[]$1],
-    [2], [_libtool_name=$lt_[]$1],
-    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
-m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
-])
-
-
-# _LT_LIBTOOL_CONFIG_VARS
-# -----------------------
-# Produce commented declarations of non-tagged libtool config variables
-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
-# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
-# section) are produced by _LT_LIBTOOL_TAG_VARS.
-m4_defun([_LT_LIBTOOL_CONFIG_VARS],
-[m4_foreach([_lt_var],
-    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAG_VARS(TAG)
-# -------------------------
-m4_define([_LT_LIBTOOL_TAG_VARS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
-
-
-# _LT_TAGVAR(VARNAME, [TAGNAME])
-# ------------------------------
-m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
-
-
-# _LT_CONFIG_COMMANDS
-# -------------------
-# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
-# variables for single and double quote escaping we saved from calls
-# to _LT_DECL, we can put quote escaped variables declarations
-# into `config.status', and then the shell code to quote escape them in
-# for loops in `config.status'.  Finally, any additional code accumulated
-# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
-m4_defun([_LT_CONFIG_COMMANDS],
-[AC_PROVIDE_IFELSE([LT_OUTPUT],
-	dnl If the libtool generation code has been placed in $CONFIG_LT,
-	dnl instead of duplicating it all over again into config.status,
-	dnl then we will have config.status run $CONFIG_LT later, so it
-	dnl needs to know what name is stored there:
-        [AC_CONFIG_COMMANDS([libtool],
-            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
-    dnl If the libtool generation code is destined for config.status,
-    dnl expand the accumulated commands and init code now:
-    [AC_CONFIG_COMMANDS([libtool],
-        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
-])#_LT_CONFIG_COMMANDS
-
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
-[
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-_LT_CONFIG_STATUS_DECLARATIONS
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# Quote evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Double-quote double-evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
-  ;;
-esac
-
-_LT_OUTPUT_LIBTOOL_INIT
-])
-
-
-# LT_OUTPUT
-# ---------
-# This macro allows early generation of the libtool script (before
-# AC_OUTPUT is called), incase it is used in configure for compilation
-# tests.
-AC_DEFUN([LT_OUTPUT],
-[: ${CONFIG_LT=./config.lt}
-AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
-exec AS_MESSAGE_LOG_FD>>config.log
-{
-  echo
-  AS_BOX([Running $as_me.])
-} >&AS_MESSAGE_LOG_FD
-
-lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
-for use in further configure time tests before the real libtool is
-generated.
-
-Usage: $[0] [[OPTIONS]]
-
-  -h, --help      print this help, then exit
-  -V, --version   print version number, then exit
-  -q, --quiet     do not print progress messages
-  -d, --debug     don't remove temporary files
-
-Report bugs to <bug-libtool at gnu.org>."
-
-lt_cl_version="\
-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
-configured by $[0], generated by m4_PACKAGE_STRING.
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.lt script is free software; the Free Software Foundation
-gives unlimited permision to copy, distribute and modify it."
-
-while test $[#] != 0
-do
-  case $[1] in
-    --version | --v* | -V )
-      echo "$lt_cl_version"; exit 0 ;;
-    --help | --h* | -h )
-      echo "$lt_cl_help"; exit 0 ;;
-    --debug | --d* | -d )
-      debug=: ;;
-    --quiet | --q* | --silent | --s* | -q )
-      lt_cl_silent=: ;;
-
-    -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
-
-    *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
-  esac
-  shift
-done
-
-if $lt_cl_silent; then
-  exec AS_MESSAGE_FD>/dev/null
-fi
-_LTEOF
-
-cat >>"$CONFIG_LT" <<_LTEOF
-_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AC_MSG_NOTICE([creating $ofile])
-_LT_OUTPUT_LIBTOOL_COMMANDS
-AS_EXIT(0)
-_LTEOF
-chmod +x "$CONFIG_LT"
-
-# configure is writing to config.log, but config.lt does its own redirection,
-# appending to config.log, which fails on DOS, as config.log is still kept
-# open by configure.  Here we exec the FD to /dev/null, effectively closing
-# config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
-  lt_cl_success=:
-  test "$silent" = yes &&
-    lt_config_lt_args="$lt_config_lt_args --quiet"
-  exec AS_MESSAGE_LOG_FD>/dev/null
-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-  exec AS_MESSAGE_LOG_FD>>config.log
-  $lt_cl_success || AS_EXIT(1)
-fi
-])# LT_OUTPUT
-
-
-# _LT_CONFIG(TAG)
-# ---------------
-# If TAG is the built-in tag, create an initial libtool script with a
-# default configuration from the untagged config vars.  Otherwise add code
-# to config.status for appending the configuration named by TAG from the
-# matching tagged config vars.
-m4_defun([_LT_CONFIG],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_CONFIG_SAVE_COMMANDS([
-  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
-  m4_if(_LT_TAG, [C], [
-    # See if we are running on zsh, and set the options which allow our
-    # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
-      setopt NO_GLOB_SUBST
-    fi
-
-    cfgfile="${ofile}T"
-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
-    $RM "$cfgfile"
-
-    cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-_LT_COPYING
-_LT_LIBTOOL_TAGS
-
-# ### BEGIN LIBTOOL CONFIG
-_LT_LIBTOOL_CONFIG_VARS
-_LT_LIBTOOL_TAG_VARS
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
-  case $host_os in
-  aix3*)
-    cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-_LT_EOF
-    ;;
-  esac
-
-  _LT_PROG_LTMAIN
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  _LT_PROG_XSI_SHELLFNS
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-],
-[cat <<_LT_EOF >> "$ofile"
-
-dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
-dnl in a comment (ie after a #).
-# ### BEGIN LIBTOOL TAG CONFIG: $1
-_LT_LIBTOOL_TAG_VARS(_LT_TAG)
-# ### END LIBTOOL TAG CONFIG: $1
-_LT_EOF
-])dnl /m4_if
-],
-[m4_if([$1], [], [
-    PACKAGE='$PACKAGE'
-    VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
-    RM='$RM'
-    ofile='$ofile'], [])
-])dnl /_LT_CONFIG_SAVE_COMMANDS
-])# _LT_CONFIG
-
-
-# LT_SUPPORTED_TAG(TAG)
-# ---------------------
-# Trace this macro to discover what tags are supported by the libtool
-# --tag option, using:
-#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
-AC_DEFUN([LT_SUPPORTED_TAG], [])
-
-
-# C support is built-in for now
-m4_define([_LT_LANG_C_enabled], [])
-m4_define([_LT_TAGS], [])
-
-
-# LT_LANG(LANG)
-# -------------
-# Enable libtool support for the given language if not already enabled.
-AC_DEFUN([LT_LANG],
-[AC_BEFORE([$0], [LT_OUTPUT])dnl
-m4_case([$1],
-  [C],			[_LT_LANG(C)],
-  [C++],		[_LT_LANG(CXX)],
-  [Java],		[_LT_LANG(GCJ)],
-  [Fortran 77],		[_LT_LANG(F77)],
-  [Fortran],		[_LT_LANG(FC)],
-  [Windows Resource],	[_LT_LANG(RC)],
-  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
-    [_LT_LANG($1)],
-    [m4_fatal([$0: unsupported language: "$1"])])])dnl
-])# LT_LANG
-
-
-# _LT_LANG(LANGNAME)
-# ------------------
-m4_defun([_LT_LANG],
-[m4_ifdef([_LT_LANG_]$1[_enabled], [],
-  [LT_SUPPORTED_TAG([$1])dnl
-  m4_append([_LT_TAGS], [$1 ])dnl
-  m4_define([_LT_LANG_]$1[_enabled], [])dnl
-  _LT_LANG_$1_CONFIG($1)])dnl
-])# _LT_LANG
-
-
-# _LT_LANG_DEFAULT_CONFIG
-# -----------------------
-m4_defun([_LT_LANG_DEFAULT_CONFIG],
-[AC_PROVIDE_IFELSE([AC_PROG_CXX],
-  [LT_LANG(CXX)],
-  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_F77],
-  [LT_LANG(F77)],
-  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_FC],
-  [LT_LANG(FC)],
-  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
-
-dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
-dnl pulling things in needlessly.
-AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-  [LT_LANG(GCJ)],
-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-    [LT_LANG(GCJ)],
-    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
-      [LT_LANG(GCJ)],
-      [m4_ifdef([AC_PROG_GCJ],
-	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([A][M_PROG_GCJ],
-	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([LT_PROG_GCJ],
-	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
-
-AC_PROVIDE_IFELSE([LT_PROG_RC],
-  [LT_LANG(RC)],
-  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
-])# _LT_LANG_DEFAULT_CONFIG
-
-# Obsolete macros:
-AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
-AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
-AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
-AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
-dnl AC_DEFUN([AC_LIBTOOL_F77], [])
-dnl AC_DEFUN([AC_LIBTOOL_FC], [])
-dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
-
-
-# _LT_TAG_COMPILER
-# ----------------
-m4_defun([_LT_TAG_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
-_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
-_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
-_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_TAG_COMPILER
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-m4_defun([_LT_COMPILER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-m4_defun([_LT_LINKER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# -------------------------
-m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
-  case $host_os in
-    rhapsody* | darwin*)
-    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
-    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-    AC_CHECK_TOOL([LIPO], [lipo], [:])
-    AC_CHECK_TOOL([OTOOL], [otool], [:])
-    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
-    _LT_DECL([], [DSYMUTIL], [1],
-      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
-    _LT_DECL([], [NMEDIT], [1],
-      [Tool to change global to local symbols on Mac OS X])
-    _LT_DECL([], [LIPO], [1],
-      [Tool to manipulate fat objects and archives on Mac OS X])
-    _LT_DECL([], [OTOOL], [1],
-      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
-    _LT_DECL([], [OTOOL64], [1],
-      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
-
-    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
-      [lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
-	# By default we will add the -single_module flag. You can override
-	# by either setting the environment variable LT_MULTI_MODULE
-	# non-empty at configure time, or by adding -multi_module to the
-	# link flags.
-	rm -rf libconftest.dylib*
-	echo "int foo(void){return 1;}" > conftest.c
-	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
-	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
-        _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
-	  lt_cv_apple_cc_single_mod=yes
-	else
-	  cat conftest.err >&AS_MESSAGE_LOG_FD
-	fi
-	rm -rf libconftest.dylib*
-	rm -f conftest.*
-      fi])
-    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
-      [lt_cv_ld_exported_symbols_list],
-      [lt_cv_ld_exported_symbols_list=no
-      save_LDFLAGS=$LDFLAGS
-      echo "_main" > conftest.sym
-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-	[lt_cv_ld_exported_symbols_list=yes],
-	[lt_cv_ld_exported_symbols_list=no])
-	LDFLAGS="$save_LDFLAGS"
-    ])
-    case $host_os in
-    rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[[012]]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-])
-
-
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
-# Checks for linker and compiler features on darwin
-m4_defun([_LT_DARWIN_LINKER_FEATURES],
-[
-  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_automatic, $1)=yes
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
-  _LT_TAGVAR(link_all_deplibs, $1)=yes
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-    m4_if([$1], [CXX],
-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
-    fi
-],[])
-  else
-  _LT_TAGVAR(ld_shlibs, $1)=no
-  fi
-])
-
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-m4_defun([_LT_SYS_MODULE_PATH_AIX],
-[m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_SYS_MODULE_PATH_AIX
-
-
-# _LT_SHELL_INIT(ARG)
-# -------------------
-m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-	 [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
-
-
-# _LT_PROG_ECHO_BACKSLASH
-# -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-[$]*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
-
-	  if test "$prev" != 'sed 50q "[$]0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(lt_ECHO)
-])
-_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
-    [An echo program that does not interpret backslashes])
-])# _LT_PROG_ECHO_BACKSLASH
-
-
-# _LT_ENABLE_LOCK
-# ---------------
-m4_defun([_LT_ENABLE_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
-  [AS_HELP_STRING([--disable-libtool-lock],
-    [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.$ac_objext` in
-      *ELF-32*)
-	HPUX_IA64_MODE="32"
-	;;
-      *ELF-64*)
-	HPUX_IA64_MODE="64"
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -melf32bsmip"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -melf32bmipn32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -melf64bmip"
-	;;
-      esac
-    else
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -32"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -n32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -64"
-	  ;;
-      esac
-    fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-      *32-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_i386_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_i386"
-	    ;;
-	  ppc64-*linux*|powerpc64-*linux*)
-	    LD="${LD-ld} -m elf32ppclinux"
-	    ;;
-	  s390x-*linux*)
-	    LD="${LD-ld} -m elf_s390"
-	    ;;
-	  sparc64-*linux*)
-	    LD="${LD-ld} -m elf32_sparc"
-	    ;;
-	esac
-	;;
-      *64-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_x86_64_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_x86_64"
-	    ;;
-	  ppc*-*linux*|powerpc*-*linux*)
-	    LD="${LD-ld} -m elf64ppc"
-	    ;;
-	  s390*-*linux*|s390*-*tpf*)
-	    LD="${LD-ld} -m elf64_s390"
-	    ;;
-	  sparc*-*linux*)
-	    LD="${LD-ld} -m elf64_sparc"
-	    ;;
-	esac
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-    [AC_LANG_PUSH(C)
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
-     AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-sparc*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)
-	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
-	  LD="${LD-ld} -64"
-	fi
-	;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-esac
-
-need_locks="$enable_libtool_lock"
-])# _LT_ENABLE_LOCK
-
-
-# _LT_CMD_OLD_ARCHIVE
-# -------------------
-m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
-
-AC_CHECK_TOOL(STRIP, strip, :)
-test -z "$STRIP" && STRIP=:
-_LT_DECL([], [STRIP], [1], [A symbol stripping program])
-
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-test -z "$RANLIB" && RANLIB=:
-_LT_DECL([], [RANLIB], [1],
-    [Commands used to install an old-style archive])
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-_LT_DECL([], [old_postinstall_cmds], [2])
-_LT_DECL([], [old_postuninstall_cmds], [2])
-_LT_TAGDECL([], [old_archive_cmds], [2],
-    [Commands used to build an old-style archive])
-])# _LT_CMD_OLD_ARCHIVE
-
-
-# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([_LT_COMPILER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       $2=yes
-     fi
-   fi
-   $RM conftest*
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$5], , :, [$5])
-else
-    m4_if([$6], , :, [$6])
-fi
-])# _LT_COMPILER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
-
-
-# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#                  [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------
-# Check whether the given linker option works
-AC_DEFUN([_LT_LINKER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $3"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         $2=yes
-       fi
-     else
-       $2=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$4], , :, [$4])
-else
-    m4_if([$5], , :, [$5])
-fi
-])# _LT_LINKER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
-
-
-# LT_CMD_MAX_LEN
-#---------------
-AC_DEFUN([LT_CMD_MAX_LEN],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
-  i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw* | cegcc*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # This has been around since 386BSD, at least.  Likely further.
-    if test -x /sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-    elif test -x /usr/sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-    else
-      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
-    fi
-    # And add a safety zone
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    ;;
-
-  interix*)
-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
-    lt_cv_sys_max_cmd_len=196608
-    ;;
-
-  osf*)
-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-    # nice to cause kernel panics so lets avoid the loop below.
-    # First set a reasonable default.
-    lt_cv_sys_max_cmd_len=16384
-    #
-    if test -x /sbin/sysconfig; then
-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
-      esac
-    fi
-    ;;
-  sco3.2v5*)
-    lt_cv_sys_max_cmd_len=102400
-    ;;
-  sysv5* | sco5v6* | sysv4.2uw2*)
-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-    if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
-    else
-      lt_cv_sys_max_cmd_len=32768
-    fi
-    ;;
-  *)
-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    else
-      # Make teststring a little bigger before we do anything with it.
-      # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
-        teststring=$teststring$teststring
-      done
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      # If test is not a shell built-in, we'll probably end up computing a
-      # maximum length that is only half of the actual maximum length, but
-      # we can't tell.
-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
-	      test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      # Only check the string length outside the loop.
-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
-      teststring=
-      # Add a significant safety factor because C++ compilers can tack on
-      # massive amounts of additional arguments before passing them to the
-      # linker.  It appears as though 1/2 is a usable value.
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    fi
-    ;;
-  esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
-  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
-  AC_MSG_RESULT(none)
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-_LT_DECL([], [max_cmd_len], [0],
-    [What is the maximum length of a command?])
-])# LT_CMD_MAX_LEN
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
-
-
-# _LT_HEADER_DLFCN
-# ----------------
-m4_defun([_LT_HEADER_DLFCN],
-[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
-])# _LT_HEADER_DLFCN
-
-
-# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ----------------------------------------------------------------
-m4_defun([_LT_TRY_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
-  [$4]
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL		RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL		DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL		0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW		DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW	DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW	0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}]
-_LT_EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) $1 ;;
-      x$lt_dlneed_uscore) $2 ;;
-      x$lt_dlunknown|x*) $3 ;;
-    esac
-  else :
-    # compilation failed
-    $3
-  fi
-fi
-rm -fr conftest*
-])# _LT_TRY_DLOPEN_SELF
-
-
-# LT_SYS_DLOPEN_SELF
-# ------------------
-AC_DEFUN([LT_SYS_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-    ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-    ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ])
-    ;;
-
-  *)
-    AC_CHECK_FUNC([shl_load],
-	  [lt_cv_dlopen="shl_load"],
-      [AC_CHECK_LIB([dld], [shl_load],
-	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
-	[AC_CHECK_FUNC([dlopen],
-	      [lt_cv_dlopen="dlopen"],
-	  [AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
-	    [AC_CHECK_LIB([svld], [dlopen],
-		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
-	      [AC_CHECK_LIB([dld], [dld_link],
-		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
-	      ])
-	    ])
-	  ])
-	])
-      ])
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    AC_CACHE_CHECK([whether a program can dlopen itself],
-	  lt_cv_dlopen_self, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
-	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
-    ])
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
-	  lt_cv_dlopen_self_static, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
-	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
-      ])
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-_LT_DECL([dlopen_support], [enable_dlopen], [0],
-	 [Whether dlopen is supported])
-_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
-	 [Whether dlopen of programs is supported])
-_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
-	 [Whether dlopen of statically linked programs is supported])
-])# LT_SYS_DLOPEN_SELF
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
-
-
-# _LT_COMPILER_C_O([TAGNAME])
-# ---------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler.
-# This macro does not hard code the compiler like AC_PROG_CC_C_O.
-m4_defun([_LT_COMPILER_C_O],
-[m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-     fi
-   fi
-   chmod u+w . 2>&AS_MESSAGE_LOG_FD
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-])
-_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
-	[Does compiler simultaneously support -c and -o options?])
-])# _LT_COMPILER_C_O
-
-
-# _LT_COMPILER_FILE_LOCKS([TAGNAME])
-# ----------------------------------
-# Check to see if we can do hard links to lock some files if needed
-m4_defun([_LT_COMPILER_FILE_LOCKS],
-[m4_require([_LT_ENABLE_LOCK])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_COMPILER_C_O([$1])
-
-hard_links="nottested"
-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  AC_MSG_CHECKING([if we can lock with hard links])
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  AC_MSG_RESULT([$hard_links])
-  if test "$hard_links" = no; then
-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
-])# _LT_COMPILER_FILE_LOCKS
-
-
-# _LT_CHECK_OBJDIR
-# ----------------
-m4_defun([_LT_CHECK_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-_LT_DECL([], [objdir], [0],
-         [The name of the directory that contains temporary libtool files])dnl
-m4_pattern_allow([LT_OBJDIR])dnl
-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
-])# _LT_CHECK_OBJDIR
-
-
-# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
-# --------------------------------------
-# Check hardcoding attributes.
-m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
-   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
-    # Linking always hardcodes the temporary library directory.
-    _LT_TAGVAR(hardcode_action, $1)=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    _LT_TAGVAR(hardcode_action, $1)=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  _LT_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-_LT_TAGDECL([], [hardcode_action], [0],
-    [How to hardcode a shared library path into an executable])
-])# _LT_LINKER_HARDCODE_LIBPATH
-
-
-# _LT_CMD_STRIPLIB
-# ----------------
-m4_defun([_LT_CMD_STRIPLIB],
-[m4_require([_LT_DECL_EGREP])
-striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-  darwin*)
-    if test -n "$STRIP" ; then
-      striplib="$STRIP -x"
-      old_striplib="$STRIP -S"
-      AC_MSG_RESULT([yes])
-    else
-      AC_MSG_RESULT([no])
-    fi
-    ;;
-  *)
-    AC_MSG_RESULT([no])
-    ;;
-  esac
-fi
-_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
-_LT_DECL([], [striplib], [1])
-])# _LT_CMD_STRIPLIB
-
-
-# _LT_SYS_DYNAMIC_LINKER([TAG])
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-m4_defun([_LT_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_OBJDUMP])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-m4_if([$1],
-	[], [
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-  # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
-  lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
-  for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
-      test -d "$lt_sys_path" && \
-	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
-    fi
-  done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
-  for (lt_i = NF; lt_i > 0; lt_i--) {
-    if ($lt_i != "" && $lt_i != ".") {
-      if ($lt_i == "..") {
-        lt_count++;
-      } else {
-        if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
-        } else {
-          lt_count--;
-        }
-      }
-    }
-  }
-  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
-  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[[4-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[[01]] | aix4.[[01]].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-	:
-      else
-	can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[[45]]*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-m4_if([$1], [],[
-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
-  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-interix[[3-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
-	else
-		version_type=irix
-	fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-       [shlibpath_overrides_runpath=yes])])
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-	;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-_LT_DECL([], [variables_saved_for_relink], [1],
-    [Variables whose values should be saved in libtool wrapper scripts and
-    restored at link time])
-_LT_DECL([], [need_lib_prefix], [0],
-    [Do we need the "lib" prefix for modules?])
-_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
-_LT_DECL([], [version_type], [0], [Library versioning type])
-_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
-_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
-_LT_DECL([], [shlibpath_overrides_runpath], [0],
-    [Is shlibpath searched before the hard-coded library search path?])
-_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
-_LT_DECL([], [library_names_spec], [1],
-    [[List of archive names.  First name is the real one, the rest are links.
-    The last name is the one that the linker finds with -lNAME]])
-_LT_DECL([], [soname_spec], [1],
-    [[The coded name of the library, if different from the real name]])
-_LT_DECL([], [postinstall_cmds], [2],
-    [Command to use after installation of a shared archive])
-_LT_DECL([], [postuninstall_cmds], [2],
-    [Command to use after uninstallation of a shared archive])
-_LT_DECL([], [finish_cmds], [2],
-    [Commands used to finish a libtool library installation in a directory])
-_LT_DECL([], [finish_eval], [1],
-    [[As "finish_cmds", except a single script fragment to be evaled but
-    not shown]])
-_LT_DECL([], [hardcode_into_libs], [0],
-    [Whether we should hardcode library paths into libraries])
-_LT_DECL([], [sys_lib_search_path_spec], [2],
-    [Compile-time system search path for libraries])
-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
-    [Run-time system search path for libraries])
-])# _LT_SYS_DYNAMIC_LINKER
-
-
-# _LT_PATH_TOOL_PREFIX(TOOL)
-# --------------------------
-# find a file program which can recognize shared library
-AC_DEFUN([_LT_PATH_TOOL_PREFIX],
-[m4_require([_LT_DECL_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] |  ?:[\\/]*])
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word.  This closes a longstanding sh security hole.
-  ac_dummy="m4_if([$2], , $PATH, [$2])"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$1; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
-      if test -n "$file_magic_test_file"; then
-	case $deplibs_check_method in
-	"file_magic "*)
-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-	    $EGREP "$file_magic_regex" > /dev/null; then
-	    :
-	  else
-	    cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool at gnu.org
-
-_LT_EOF
-	  fi ;;
-	esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  AC_MSG_RESULT($MAGIC_CMD)
-else
-  AC_MSG_RESULT(no)
-fi
-_LT_DECL([], [MAGIC_CMD], [0],
-	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
-])# _LT_PATH_TOOL_PREFIX
-
-# Old name:
-AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
-
-
-# _LT_PATH_MAGIC
-# --------------
-# find a file program which can recognize a shared library
-m4_defun([_LT_PATH_MAGIC],
-[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-  else
-    MAGIC_CMD=:
-  fi
-fi
-])# _LT_PATH_MAGIC
-
-
-# LT_PATH_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([LT_PATH_LD],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_ARG_WITH([gnu-ld],
-    [AS_HELP_STRING([--with-gnu-ld],
-	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
-    [with_gnu_ld=no])dnl
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by $CC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]]* | ?:[[\\/]]*)
-      re_direlt='/[[^/]][[^/]]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
-else
-  AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
-	;;
-      *)
-	test "$with_gnu_ld" != yes && break
-	;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
-else
-  AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-_LT_PATH_LD_GNU
-AC_SUBST([LD])
-
-_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
-])# LT_PATH_LD
-
-# Old names:
-AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
-AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_LD], [])
-dnl AC_DEFUN([AC_PROG_LD], [])
-
-
-# _LT_PATH_LD_GNU
-#- --------------
-m4_defun([_LT_PATH_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# _LT_PATH_LD_GNU
-
-
-# _LT_CMD_RELOAD
-# --------------
-# find reload flag for linker
-#   -- PORTME Some linkers may need a different reload flag.
-m4_defun([_LT_CMD_RELOAD],
-[AC_CACHE_CHECK([for $LD option to reload object files],
-  lt_cv_ld_reload_flag,
-  [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
-])# _LT_CMD_RELOAD
-
-
-# _LT_CHECK_MAGIC_METHOD
-# ----------------------
-# how to check for library dependencies
-#  -- PORTME fill in with the dynamic library characteristics
-m4_defun([_LT_CHECK_MAGIC_METHOD],
-[m4_require([_LT_DECL_EGREP])
-m4_require([_LT_DECL_OBJDUMP])
-AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi[[45]]*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
-  # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-    lt_cv_file_magic_cmd='func_win32_libid'
-  else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-cegcc)
-  # use the weaker test based on 'objdump'. See mingw*.
-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | dragonfly*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case $host_cpu in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-interix[[3-9]]*)
-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-*nto* | *qnx*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-rdos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.3*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  pc)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-tpf*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-_LT_DECL([], [deplibs_check_method], [1],
-    [Method to check whether dependent libraries are shared objects])
-_LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method == "file_magic"])
-])# _LT_CHECK_MAGIC_METHOD
-
-
-# LT_PATH_NM
-# ----------
-# find the pathname to a BSD- or MS-compatible name lister
-AC_DEFUN([LT_PATH_NM],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
-[if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	# Tru64's nm complains that /dev/null is an invalid object file
-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-	*/dev/null* | *'Invalid file or object type'*)
-	  lt_cv_path_NM="$tmp_nm -B"
-	  break
-	  ;;
-	*)
-	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-	  */dev/null*)
-	    lt_cv_path_NM="$tmp_nm -p"
-	    break
-	    ;;
-	  *)
-	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-	    continue # so that we can try to find one that supports BSD flags
-	    ;;
-	  esac
-	  ;;
-	esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi])
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
-else
-  # Didn't find any BSD compatible name lister, look for dumpbin.
-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
-  AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
-  fi
-fi
-test -z "$NM" && NM=nm
-AC_SUBST([NM])
-_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
-
-AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
-  [lt_cv_nm_interface="BSD nm"
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$ac_compile" 2>conftest.err)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
-  cat conftest.out >&AS_MESSAGE_LOG_FD
-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
-    lt_cv_nm_interface="MS dumpbin"
-  fi
-  rm -f conftest*])
-])# LT_PATH_NM
-
-# Old names:
-AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
-AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_NM], [])
-dnl AC_DEFUN([AC_PROG_NM], [])
-
-
-# LT_LIB_M
-# --------
-# check for math library
-AC_DEFUN([LT_LIB_M],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
-  # These system don't have libm, or don't need it
-  ;;
-*-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
-  ;;
-*)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
-  ;;
-esac
-AC_SUBST([LIBM])
-])# LT_LIB_M
-
-# Old name:
-AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_CHECK_LIBM], [])
-
-
-# _LT_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------
-m4_defun([_LT_COMPILER_NO_RTTI],
-[m4_require([_LT_TAG_COMPILER])dnl
-
-_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
-  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-    lt_cv_prog_compiler_rtti_exceptions,
-    [-fno-rtti -fno-exceptions], [],
-    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
-	[Compiler flag to turn off builtin functions])
-])# _LT_COMPILER_NO_RTTI
-
-
-# _LT_CMD_GLOBAL_SYMBOLS
-# ----------------------
-m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[[BCDT]]'
-  ;;
-cygwin* | mingw* | pw32* | cegcc*)
-  symcode='[[ABCDGISTW]]'
-  ;;
-hpux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDEGRST]]'
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[[BCDEGRST]]'
-  ;;
-osf*)
-  symcode='[[BCDEGQRST]]'
-  ;;
-solaris*)
-  symcode='[[BDRT]]'
-  ;;
-sco3.2v5*)
-  symcode='[[DT]]'
-  ;;
-sysv4.2uw2*)
-  symcode='[[DT]]'
-  ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
-  symcode='[[ABDT]]'
-  ;;
-sysv4)
-  symcode='[[DFNSTU]]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-  symxfrm="\\1 $ac_symprfx\\2 \\2"
-
-  # Write the raw and C identifiers.
-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
-    # Also find C++ and __fastcall symbols from MSVC++,
-    # which start with @ or ?.
-    lt_cv_sys_global_symbol_pipe="$AWK ['"\
-"     {last_section=section; section=\$ 3};"\
-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-"     \$ 0!~/External *\|/{next};"\
-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-"     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-"     ' prfx=^$ac_symprfx]"
-  else
-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-  fi
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
-  if AC_TRY_EVAL(ac_compile); then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-	mv -f "$nlist"T "$nlist"
-      else
-	rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
-	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
-	  cat <<_LT_EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
-	  # Now generate the symbol file.
-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
-	  cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols.  */
-const struct {
-  const char *name;
-  void       *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[[]] =
-{
-  { "@PROGRAM@", (void *) 0 },
-_LT_EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
-	  cat <<\_LT_EOF >> conftest.$ac_ext
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
-	  # Now try linking the two files.
-	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
-	  LIBS="conftstm.$ac_objext"
-	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
-	    pipe_works=yes
-	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
-	else
-	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
-	fi
-      else
-	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
-    fi
-  else
-    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
-    cat conftest.$ac_ext >&5
-  fi
-  rm -rf conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  AC_MSG_RESULT(failed)
-else
-  AC_MSG_RESULT(ok)
-fi
-
-_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
-    [Take the output of nm and produce a listing of raw symbols and C names])
-_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
-    [Transform the output of nm in a proper C declaration])
-_LT_DECL([global_symbol_to_c_name_address],
-    [lt_cv_sys_global_symbol_to_c_name_address], [1],
-    [Transform the output of nm in a C name address pair])
-_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
-    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
-    [Transform the output of nm in a C name address pair when lib prefix is needed])
-]) # _LT_CMD_GLOBAL_SYMBOLS
-
-
-# _LT_COMPILER_PIC([TAGNAME])
-# ---------------------------
-m4_defun([_LT_COMPILER_PIC],
-[m4_require([_LT_TAG_COMPILER])dnl
-_LT_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
-m4_if([$1], [CXX], [
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-      ;;
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-    *qnx* | *nto*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[[4-9]]*)
-	# All AIX code is PIC.
-	if test "$host_cpu" = ia64; then
-	  # AIX 5 now supports IA64 processor
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	else
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-	fi
-	;;
-      chorus*)
-	case $cc_basename in
-	cxch68*)
-	  # Green Hills C++ Compiler
-	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-	  ;;
-	esac
-	;;
-      dgux*)
-	case $cc_basename in
-	  ec++*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  ghcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      freebsd* | dragonfly*)
-	# FreeBSD uses GNU C++
-	;;
-      hpux9* | hpux10* | hpux11*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    if test "$host_cpu" != ia64; then
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	    fi
-	    ;;
-	  aCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    case $host_cpu in
-	    hppa*64*|ia64*)
-	      # +Z the default
-	      ;;
-	    *)
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	      ;;
-	    esac
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      interix*)
-	# This is c89, which is MS Visual C++ (no shared libs)
-	# Anyone wants to do a port?
-	;;
-      irix5* | irix6* | nonstopux*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    # CC pic flag -KPIC is the default.
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      linux* | k*bsd*-gnu)
-	case $cc_basename in
-	  KCC*)
-	    # KAI C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    ;;
-	  ecpc* )
-	    # old Intel C++ for x86_64 which still supported -KPIC.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  icpc* )
-	    # Intel C++, used to be incompatible with GCC.
-	    # ICC 10 doesn't accept -KPIC any more.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  pgCC* | pgcpp*)
-	    # Portland Group C++ compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  cxx*)
-	    # Compaq C++
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-      lynxos*)
-	;;
-      m88k*)
-	;;
-      mvs*)
-	case $cc_basename in
-	  cxx*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      netbsd*)
-	;;
-      *qnx* | *nto*)
-        # QNX uses GNU C++, but need to define -shared option too, otherwise
-        # it will coredump.
-        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-        ;;
-      osf3* | osf4* | osf5*)
-	case $cc_basename in
-	  KCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    ;;
-	  RCC*)
-	    # Rational C++ 2.4.1
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  cxx*)
-	    # Digital/Compaq C++
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      psos*)
-	;;
-      solaris*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	    ;;
-	  gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sunos4*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.x
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  lcc*)
-	    # Lucid
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	esac
-	;;
-      tandem*)
-	case $cc_basename in
-	  NCC*)
-	    # NonStop-UX NCC 3.20
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      vxworks*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-	;;
-    esac
-  fi
-],
-[
-  if test "$GCC" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      enable_shared=no
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      else
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC (with -KPIC) is the default.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    linux* | k*bsd*-gnu)
-      case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
-      ecc*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # icc used to be incompatible with GCC.
-      # ICC 10 doesn't accept -KPIC any more.
-      icc* | ifort*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # Lahey Fortran 8.1.
-      lf95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
-	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-	# which looks to be a dead project)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-        ;;
-      ccc*)
-        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-        # All Alpha code is PIC.
-        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-        ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	;;
-      *)
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)
-	  # Sun C 5.9
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
-	  ;;
-	esac
-	;;
-      esac
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # All OSF/1 code is PIC.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    rdos*)
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    unicos*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-    esac
-  fi
-])
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-    ;;
-  *)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
-    ;;
-esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-	[How to pass a linker flag through the compiler])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
-  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
-    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
-    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
-    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
-     "" | " "*) ;;
-     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-     esac],
-    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
-	[Additional compiler flags for building library objects])
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
-_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
-  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
-  $lt_tmp_static_flag,
-  [],
-  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
-_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
-	[Compiler flag to prevent dynamic linking])
-])# _LT_COMPILER_PIC
-
-
-# _LT_LINKER_SHLIBS([TAGNAME])
-# ----------------------------
-# See if the linker supports building shared libraries.
-m4_defun([_LT_LINKER_SHLIBS],
-[AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-m4_if([$1], [CXX], [
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix[[4-9]]*)
-    # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    else
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
-  cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  *)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-], [
-  runpath_var=
-  _LT_TAGVAR(allow_undefined_flag, $1)=
-  _LT_TAGVAR(always_export_symbols, $1)=no
-  _LT_TAGVAR(archive_cmds, $1)=
-  _LT_TAGVAR(archive_expsym_cmds, $1)=
-  _LT_TAGVAR(compiler_needs_object, $1)=no
-  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  _LT_TAGVAR(hardcode_automatic, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
-  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-  _LT_TAGVAR(hardcode_minus_L, $1)=no
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(inherit_rpath, $1)=no
-  _LT_TAGVAR(link_all_deplibs, $1)=unknown
-  _LT_TAGVAR(module_cmds, $1)=
-  _LT_TAGVAR(module_expsym_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-  _LT_TAGVAR(thread_safe_flag_spec, $1)=
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  _LT_TAGVAR(include_expsyms, $1)=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  _LT_TAGVAR(ld_shlibs, $1)=yes
-  if test "$with_gnu_ld" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # Set some defaults for GNU ld with shared library support. These
-    # are reset later if shared libraries are not supported. Putting them
-    # here allows them to be overridden if necessary.
-    runpath_var=LD_RUN_PATH
-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>&1` in
-      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-      *\ 2.11.*) ;; # other 2.11 versions
-      *) supports_anon_versioning=yes ;;
-    esac
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix[[3-9]]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-_LT_EOF
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	# support --undefined.  This deserves some investigation.  FIXME
-	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-      # as there is no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=no
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	  cp $export_symbols $output_objdir/$soname.def;
-	else
-	  echo EXPORTS > $output_objdir/$soname.def;
-	  cat $export_symbols >> $output_objdir/$soname.def;
-	fi~
-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    interix[[3-9]]*)
-      _LT_TAGVAR(hardcode_direct, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-      # Instead, shared libraries are loaded at an image base (0x10000000 by
-      # default) and relocated if they conflict, which is a slow very memory
-      # consuming and fragmenting process.  To avoid this, we pick a random,
-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      ;;
-
-    gnu* | linux* | tpf* | k*bsd*-gnu)
-      tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
-	case $cc_basename in
-	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
-	esac
-      fi
-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-	 && test "$tmp_diet" = no
-      then
-	tmp_addflag=
-	tmp_sharedflag='-shared'
-	case $cc_basename,$host_cpu in
-        pgcc*)				# Portland Group C compiler
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag -Mnomain' ;;
-	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
-	  tmp_addflag=' -i_dynamic' ;;
-	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
-	  tmp_addflag=' -i_dynamic -nofor_main' ;;
-	ifc* | ifort*)			# Intel Fortran compiler
-	  tmp_addflag=' -nofor_main' ;;
-	lf95*)				# Lahey Fortran 8.1
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-	  tmp_sharedflag='--shared' ;;
-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
-	  tmp_sharedflag='-qmkshrobj'
-	  tmp_addflag= ;;
-	esac
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)			# Sun C 5.9
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  _LT_TAGVAR(compiler_needs_object, $1)=yes
-	  tmp_sharedflag='-G' ;;
-	*Sun\ F*)			# Sun Fortran 8.3
-	  tmp_sharedflag='-G' ;;
-	esac
-	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-        if test "x$supports_anon_versioning" = xyes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	    echo "local: *; };" >> $output_objdir/$libname.ver~
-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-        fi
-
-	case $cc_basename in
-	xlf*)
-	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-	  if test "x$supports_anon_versioning" = xyes; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-	  fi
-	  ;;
-	esac
-      else
-        _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-	wlarc=
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-	;;
-	*)
-	  # For security reasons, it is highly recommended that you always
-	  # use absolute paths for naming shared libraries, and exclude the
-	  # DT_RUNPATH tag from executables and libraries.  But doing so
-	  # requires that you compile everything twice, which is a pain.
-	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-	  else
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	  fi
-	;;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-
-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
-      runpath_var=
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	_LT_TAGVAR(hardcode_direct, $1)=unsupported
-      fi
-      ;;
-
-    aix[[4-9]]*)
-      if test "$host_cpu" = ia64; then
-	# On IA64, the linker does run time linking by default, so we don't
-	# have to do anything special.
-	aix_use_runtimelinking=no
-	exp_sym_flag='-Bexport'
-	no_entry_flag=""
-      else
-	# If we're using GNU nm, then we don't want the "-C" option.
-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
-	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	else
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	fi
-	aix_use_runtimelinking=no
-
-	# Test if we are trying to use run time linking or normal
-	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
-	# need to do runtime linking.
-	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	  for ld_flag in $LDFLAGS; do
-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-	    aix_use_runtimelinking=yes
-	    break
-	  fi
-	  done
-	  ;;
-	esac
-
-	exp_sym_flag='-bexport'
-	no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      _LT_TAGVAR(archive_cmds, $1)=''
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-      if test "$GCC" = yes; then
-	case $host_os in aix4.[[012]]|aix4.[[012]].*)
-	# We only want to do this on AIX 4.2 and lower, the check
-	# below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	  # We have reworked collect2
-	  :
-	  else
-	  # We have old collect2
-	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	  # It fails to find uninstalled libraries when the uninstalled
-	  # path is not listed in the libpath.  Setting hardcode_minus_L
-	  # to unsupported forces relinking
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-	  ;;
-	esac
-	shared_flag='-shared'
-	if test "$aix_use_runtimelinking" = yes; then
-	  shared_flag="$shared_flag "'${wl}-G'
-	fi
-      else
-	# not using gcc
-	if test "$host_cpu" = ia64; then
-	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	# chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-	else
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag='${wl}-G'
-	  else
-	    shared_flag='${wl}-bM:SRE'
-	  fi
-	fi
-      fi
-
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
-	# Warning - without using the other runtime loading flags (-brtl),
-	# -berok will link without error, but may produce a broken library.
-	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-      else
-	if test "$host_cpu" = ia64; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an
-	 # empty executable.
-	 _LT_SYS_MODULE_PATH_AIX
-	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	  # Warning - without using the other run time loading flags,
-	  # -berok will link without error, but may produce a broken library.
-	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	  # This is similar to how AIX traditionally builds its shared libraries.
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    bsdi[[45]]*)
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      ;;
-
-    darwin* | rhapsody*)
-      _LT_DARWIN_LINKER_FEATURES($1)
-      ;;
-
-    dgux*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# hardcode_minus_L: Not really in the search PATH,
-	# but as the default location of the library.
-	_LT_TAGVAR(hardcode_minus_L, $1)=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      else
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	case $host_cpu in
-	hppa*64*|ia64*)
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  ;;
-	*)
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  ;;
-	esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	# Try to use the -exported_symbol ld option, if it does not
-	# work, assume that -exports_file does not work either and
-	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(int foo(void) {},
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-        )
-        LDFLAGS="$save_LDFLAGS"
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(inherit_rpath, $1)=yes
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *nto* | *qnx*)
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	else
-	  case $host_os in
-	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	     ;;
-	   *)
-	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	     ;;
-	  esac
-	fi
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    os2*)
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
-	# Both c and cxx compiler support -rpath directly
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-      else
-	case `$CC -V 2>&1` in
-	*"Compilers 5.0"*)
-	  wlarc=''
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
-	  ;;
-	*)
-	  wlarc='${wl}'
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-	  ;;
-	esac
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      case $host_os in
-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-      *)
-	# The compiler driver will combine and reorder linker options,
-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
-	# but is careful enough not to reorder.
-	# Supported since Solaris 2.6 (maybe 2.5.1?)
-	if test "$GCC" = yes; then
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-	else
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	fi
-	;;
-      esac
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-	# Use $CC to link under sequent, because it throws in some extra .o
-	# files that make .init and .fini sections work.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-	sni)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-	;;
-	siemens)
-	  ## LD is ld it makes a PLAMLIB
-	  ## CC just makes a GrossModule.
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-        ;;
-	motorola)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-	;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4.3*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	runpath_var=LD_RUN_PATH
-	hardcode_runpath_var=yes
-	_LT_TAGVAR(ld_shlibs, $1)=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
-      # link with -lc, and that would cause any symbols used from libc to
-      # always be unresolved, which means just about no library would
-      # ever link correctly.  If we're not using GNU ld we use -z text
-      # though, which does catch some bad symbols but isn't as heavy-handed
-      # as -z defs.
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    esac
-
-    if test x$host_vendor = xsni; then
-      case $host in
-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
-	;;
-      esac
-    fi
-  fi
-])
-AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
-
-_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
-_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
-_LT_DECL([], [extract_expsyms_cmds], [2],
-    [The commands to extract the exported symbol list from a shared archive])
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
-  # Assume -lc should be added
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $_LT_TAGVAR(archive_cmds, $1) in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-        _LT_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-        then
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
-    [Whether or not to add -lc for building shared libraries])
-_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
-    [enable_shared_with_static_runtimes], [0],
-    [Whether or not to disallow shared libs when runtime libs are static])
-_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
-    [Compiler flag to allow reflexive dlopens])
-_LT_TAGDECL([], [whole_archive_flag_spec], [1],
-    [Compiler flag to generate shared objects directly from archives])
-_LT_TAGDECL([], [compiler_needs_object], [1],
-    [Whether the compiler copes with passing no objects directly])
-_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
-    [Create an old-style archive from a shared archive])
-_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
-    [Create a temporary old-style archive to link instead of a shared archive])
-_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
-_LT_TAGDECL([], [archive_expsym_cmds], [2])
-_LT_TAGDECL([], [module_cmds], [2],
-    [Commands used to build a loadable module if different from building
-    a shared archive.])
-_LT_TAGDECL([], [module_expsym_cmds], [2])
-_LT_TAGDECL([], [with_gnu_ld], [1],
-    [Whether we are building with GNU ld or not])
-_LT_TAGDECL([], [allow_undefined_flag], [1],
-    [Flag that allows shared libraries with undefined symbols to be built])
-_LT_TAGDECL([], [no_undefined_flag], [1],
-    [Flag that enforces no undefined symbols])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
-    [Flag to hardcode $libdir into a binary during linking.
-    This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
-_LT_TAGDECL([], [hardcode_libdir_separator], [1],
-    [Whether we need a single "-rpath" flag with a separated argument])
-_LT_TAGDECL([], [hardcode_direct], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary])
-_LT_TAGDECL([], [hardcode_direct_absolute], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary and the resulting library dependency is
-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
-    library is relocated])
-_LT_TAGDECL([], [hardcode_minus_L], [0],
-    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
-    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_automatic], [0],
-    [Set to "yes" if building a shared library automatically hardcodes DIR
-    into the library and all subsequent libraries and executables linked
-    against it])
-_LT_TAGDECL([], [inherit_rpath], [0],
-    [Set to yes if linker adds runtime paths of dependent libraries
-    to runtime path list])
-_LT_TAGDECL([], [link_all_deplibs], [0],
-    [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
-_LT_TAGDECL([], [always_export_symbols], [0],
-    [Set to "yes" if exported symbols are required])
-_LT_TAGDECL([], [export_symbols_cmds], [2],
-    [The commands to list exported symbols])
-_LT_TAGDECL([], [exclude_expsyms], [1],
-    [Symbols that should not be listed in the preloaded symbols])
-_LT_TAGDECL([], [include_expsyms], [1],
-    [Symbols that must always be exported])
-_LT_TAGDECL([], [prelink_cmds], [2],
-    [Commands necessary for linking programs (against libraries) with templates])
-_LT_TAGDECL([], [file_list_spec], [1],
-    [Specify filename containing input files])
-dnl FIXME: Not yet implemented
-dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
-dnl    [Compiler flag to generate thread safe objects])
-])# _LT_LINKER_SHLIBS
-
-
-# _LT_LANG_C_CONFIG([TAG])
-# ------------------------
-# Ensure that the configuration variables for a C compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_C_CONFIG],
-[m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_TAG_COMPILER
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_SYS_DYNAMIC_LINKER($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-  LT_SYS_DLOPEN_SELF
-  _LT_CMD_STRIPLIB
-
-  # Report which library types will actually be built
-  AC_MSG_CHECKING([if libtool supports shared libraries])
-  AC_MSG_RESULT([$can_build_shared])
-
-  AC_MSG_CHECKING([whether to build shared libraries])
-  test "$can_build_shared" = "no" && enable_shared=no
-
-  # On AIX, shared libraries and static libraries use the same namespace, and
-  # are all built from PIC.
-  case $host_os in
-  aix3*)
-    test "$enable_shared" = yes && enable_static=no
-    if test -n "$RANLIB"; then
-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
-      postinstall_cmds='$RANLIB $lib'
-    fi
-    ;;
-
-  aix[[4-9]]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
-    fi
-    ;;
-  esac
-  AC_MSG_RESULT([$enable_shared])
-
-  AC_MSG_CHECKING([whether to build static libraries])
-  # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
-  AC_MSG_RESULT([$enable_static])
-
-  _LT_CONFIG($1)
-fi
-AC_LANG_POP
-CC="$lt_save_CC"
-])# _LT_LANG_C_CONFIG
-
-
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
-# _LT_LANG_CXX_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a C++ compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_LANG_PUSH(C++)
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(compiler_needs_object, $1)=no
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the CXX compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="int some_variable = 0;"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC=$CC
-  lt_save_LD=$LD
-  lt_save_GCC=$GCC
-  GCC=$GXX
-  lt_save_with_gnu_ld=$with_gnu_ld
-  lt_save_path_LD=$lt_cv_path_LD
-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-  else
-    $as_unset lt_cv_prog_gnu_ld
-  fi
-  if test -n "${lt_cv_path_LDCXX+set}"; then
-    lt_cv_path_LD=$lt_cv_path_LDCXX
-  else
-    $as_unset lt_cv_path_LD
-  fi
-  test -z "${LDCXX+set}" || LD=$LDCXX
-  CC=${CXX-"c++"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    # We don't want -fno-exception when compiling C++ code, so set the
-    # no_builtin_flag separately
-    if test "$GXX" = yes; then
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-    else
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-    fi
-
-    if test "$GXX" = yes; then
-      # Set up default GNU C++ configuration
-
-      LT_PATH_LD
-
-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
-      # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-        # If archive_cmds runs LD, not CC, wlarc should be empty
-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-        #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
-
-        # ancient GNU ld didn't support --whole-archive et. al.
-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
-	  $GREP 'no-whole-archive' > /dev/null; then
-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-        else
-          _LT_TAGVAR(whole_archive_flag_spec, $1)=
-        fi
-      else
-        with_gnu_ld=no
-        wlarc=
-
-        # A generic and very simple default shared library creation
-        # command for GNU C++ for the case where it uses the native
-        # linker, instead of GNU ld.  If possible, this setting should
-        # overridden to take advantage of the native linker features on
-        # the platform it is being used on.
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-      fi
-
-      # Commands to make compiler produce verbose output that lists
-      # what "hidden" libraries, object files and flags are used when
-      # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-    else
-      GXX=no
-      with_gnu_ld=no
-      wlarc=
-    fi
-
-    # PORTME: fill in a description of your system's C++ link characteristics
-    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-    _LT_TAGVAR(ld_shlibs, $1)=yes
-    case $host_os in
-      aix3*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-      aix[[4-9]]*)
-        if test "$host_cpu" = ia64; then
-          # On IA64, the linker does run time linking by default, so we don't
-          # have to do anything special.
-          aix_use_runtimelinking=no
-          exp_sym_flag='-Bexport'
-          no_entry_flag=""
-        else
-          aix_use_runtimelinking=no
-
-          # Test if we are trying to use run time linking or normal
-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
-          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	    for ld_flag in $LDFLAGS; do
-	      case $ld_flag in
-	      *-brtl*)
-	        aix_use_runtimelinking=yes
-	        break
-	        ;;
-	      esac
-	    done
-	    ;;
-          esac
-
-          exp_sym_flag='-bexport'
-          no_entry_flag='-bnoentry'
-        fi
-
-        # When large executables or shared objects are built, AIX ld can
-        # have problems creating the table of contents.  If linking a library
-        # or program results in "error TOC overflow" add -mminimal-toc to
-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-        _LT_TAGVAR(archive_cmds, $1)=''
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-        _LT_TAGVAR(link_all_deplibs, $1)=yes
-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-        if test "$GXX" = yes; then
-          case $host_os in aix4.[[012]]|aix4.[[012]].*)
-          # We only want to do this on AIX 4.2 and lower, the check
-          # below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	    # We have reworked collect2
-	    :
-	  else
-	    # We have old collect2
-	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	    # It fails to find uninstalled libraries when the uninstalled
-	    # path is not listed in the libpath.  Setting hardcode_minus_L
-	    # to unsupported forces relinking
-	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-          esac
-          shared_flag='-shared'
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag="$shared_flag "'${wl}-G'
-	  fi
-        else
-          # not using gcc
-          if test "$host_cpu" = ia64; then
-	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	  # chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-          else
-	    if test "$aix_use_runtimelinking" = yes; then
-	      shared_flag='${wl}-G'
-	    else
-	      shared_flag='${wl}-bM:SRE'
-	    fi
-          fi
-        fi
-
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-        # It seems that -bexpall does not export symbols beginning with
-        # underscore (_), so it is better to generate a list of symbols to
-	# export.
-        _LT_TAGVAR(always_export_symbols, $1)=yes
-        if test "$aix_use_runtimelinking" = yes; then
-          # Warning - without using the other runtime loading flags (-brtl),
-          # -berok will link without error, but may produce a broken library.
-          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-          # Determine the default libpath from the value encoded in an empty
-          # executable.
-          _LT_SYS_MODULE_PATH_AIX
-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-        else
-          if test "$host_cpu" = ia64; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-          else
-	    # Determine the default libpath from the value encoded in an
-	    # empty executable.
-	    _LT_SYS_MODULE_PATH_AIX
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	    # Warning - without using the other run time loading flags,
-	    # -berok will link without error, but may produce a broken library.
-	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	    # This is similar to how AIX traditionally builds its shared
-	    # libraries.
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-          fi
-        fi
-        ;;
-
-      beos*)
-	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	  # support --undefined.  This deserves some investigation.  FIXME
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      chorus*)
-        case $cc_basename in
-          *)
-	  # FIXME: insert proper C++ library support
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	  ;;
-        esac
-        ;;
-
-      cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-        # as there is no search path for DLLs.
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-        _LT_TAGVAR(always_export_symbols, $1)=no
-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          _LT_TAGVAR(ld_shlibs, $1)=no
-        fi
-        ;;
-      darwin* | rhapsody*)
-        _LT_DARWIN_LINKER_FEATURES($1)
-	;;
-
-      dgux*)
-        case $cc_basename in
-          ec++*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          ghcx*)
-	    # Green Hills C++ Compiler
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      freebsd[[12]]*)
-        # C++ shared libraries reported to be fairly broken before
-	# switch to ELF
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      freebsd-elf*)
-        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        ;;
-
-      freebsd* | dragonfly*)
-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-        # conventions
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-        ;;
-
-      gnu*)
-        ;;
-
-      hpux9*)
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-				             # but as the default
-				             # location of the library.
-
-        case $cc_basename in
-          CC*)
-            # FIXME: insert proper C++ library support
-            _LT_TAGVAR(ld_shlibs, $1)=no
-            ;;
-          aCC*)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            # Commands to make compiler produce verbose output that lists
-            # what "hidden" libraries, object files and flags are used when
-            # linking a shared library.
-            #
-            # There doesn't appear to be a way to prevent this compiler from
-            # explicitly linking system object files so we need to strip them
-            # from the output so that they don't get included in the library
-            # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-            ;;
-          *)
-            if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            else
-              # FIXME: insert proper C++ library support
-              _LT_TAGVAR(ld_shlibs, $1)=no
-            fi
-            ;;
-        esac
-        ;;
-
-      hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-          case $host_cpu in
-            hppa*64*|ia64*)
-              ;;
-            *)
-	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-              ;;
-          esac
-        fi
-        case $host_cpu in
-          hppa*64*|ia64*)
-            _LT_TAGVAR(hardcode_direct, $1)=no
-            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-            ;;
-          *)
-            _LT_TAGVAR(hardcode_direct, $1)=yes
-            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-					         # but as the default
-					         # location of the library.
-            ;;
-        esac
-
-        case $cc_basename in
-          CC*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          aCC*)
-	    case $host_cpu in
-	      hppa*64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      ia64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      *)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	    esac
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test $with_gnu_ld = no; then
-	        case $host_cpu in
-	          hppa*64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          ia64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          *)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	        esac
-	      fi
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      interix[[3-9]]*)
-	_LT_TAGVAR(hardcode_direct, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-	# Instead, shared libraries are loaded at an image base (0x10000000 by
-	# default) and relocated if they conflict, which is a slow very memory
-	# consuming and fragmenting process.  To avoid this, we pick a random,
-	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	;;
-      irix5* | irix6*)
-        case $cc_basename in
-          CC*)
-	    # SGI C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test "$with_gnu_ld" = no; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	      else
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
-	      fi
-	    fi
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-	    ;;
-        esac
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(inherit_rpath, $1)=yes
-        ;;
-
-      linux* | k*bsd*-gnu)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-	    ;;
-	  icpc* | ecpc* )
-	    # Intel C++
-	    with_gnu_ld=yes
-	    # version 8.0 and above of icpc choke on multiply defined symbols
-	    # if we add $predep_objects and $postdep_objects, however 7.1 and
-	    # earlier do not add the objects themselves.
-	    case `$CC -V 2>&1` in
-	      *"Version 7."*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	      *)  # Version 8.0 or newer
-	        tmp_idyn=
-	        case $host_cpu in
-		  ia64*) tmp_idyn=' -i_dynamic';;
-		esac
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	    esac
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	    ;;
-          pgCC* | pgcpp*)
-            # Portland Group C++ compiler
-	    case `$CC -V` in
-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
-	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
-	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
-		$RANLIB $oldlib'
-	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    *) # Version 6 will use weak symbols
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-            ;;
-	  cxx*)
-	    # Compaq C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
-	    runpath_var=LD_RUN_PATH
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  xl*)
-	    # IBM XL 8.0 on PPC, with GNU ld
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    if test "x$supports_anon_versioning" = xyes; then
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-		echo "local: *; };" >> $output_objdir/$libname.ver~
-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	    fi
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	      _LT_TAGVAR(compiler_needs_object, $1)=yes
-
-	      # Not sure whether something based on
-	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-	      # would be better.
-	      output_verbose_link_cmd='echo'
-
-	      # Archives containing C++ object files must be created using
-	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	      # necessary to make sure instantiated templates are included
-	      # in the archive.
-	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-
-      lynxos*)
-        # FIXME: insert proper C++ library support
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      m88k*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      mvs*)
-        case $cc_basename in
-          cxx*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	  *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	esac
-	;;
-
-      netbsd*)
-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-	  wlarc=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	fi
-	# Workaround some broken pre-1.5 toolchains
-	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-	;;
-
-      *nto* | *qnx*)
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-	;;
-
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      openbsd*)
-	if test -f /usr/libexec/ld.so; then
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-	  fi
-	  output_verbose_link_cmd=echo
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      osf3* | osf4* | osf5*)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Archives containing C++ object files must be created using
-	    # the KAI C++ compiler.
-	    case $host in
-	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
-	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
-	    esac
-	    ;;
-          RCC*)
-	    # Rational C++ 2.4.1
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          cxx*)
-	    case $host in
-	      osf3*)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-		;;
-	      *)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
-	          $RM $lib.exp'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-		;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  *)
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	      case $host in
-	        osf3*)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	        *)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	      esac
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	      # Commands to make compiler produce verbose output that lists
-	      # what "hidden" libraries, object files and flags are used when
-	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      psos*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      sunos4*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.x
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          lcc*)
-	    # Lucid
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      solaris*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
-	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	    case $host_os in
-	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-	      *)
-		# The compiler driver will combine and reorder linker options,
-		# but understands `-z linker_flag'.
-	        # Supported since Solaris 2.6 (maybe 2.5.1?)
-		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	        ;;
-	    esac
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-
-	    output_verbose_link_cmd='echo'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	    ;;
-          gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
-	    # The C++ compiler must be used to create the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    # GNU C++ compiler with Solaris linker
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      else
-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
-	        # platform.
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      fi
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-	      case $host_os in
-		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-		*)
-		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-		  ;;
-	      esac
-	    fi
-	    ;;
-        esac
-        ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      case $cc_basename in
-        CC*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-      esac
-      ;;
-
-      sysv5* | sco3.2v5* | sco5v6*)
-	# Note: We can NOT use -z defs as we might desire, because we do not
-	# link with -lc, and that would cause any symbols used from libc to
-	# always be unresolved, which means just about no library would
-	# ever link correctly.  If we're not using GNU ld we use -z text
-	# though, which does catch some bad symbols but isn't as heavy-handed
-	# as -z defs.
-	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-	_LT_TAGVAR(link_all_deplibs, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-	runpath_var='LD_RUN_PATH'
-
-	case $cc_basename in
-          CC*)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	  *)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	esac
-      ;;
-
-      tandem*)
-        case $cc_basename in
-          NCC*)
-	    # NonStop-UX NCC 3.20
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      vxworks*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      *)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-    esac
-
-    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-    _LT_TAGVAR(GCC, $1)="$GXX"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  CC=$lt_save_CC
-  LDCXX=$LD
-  LD=$lt_save_LD
-  GCC=$lt_save_GCC
-  with_gnu_ld=$lt_save_with_gnu_ld
-  lt_cv_path_LDCXX=$lt_cv_path_LD
-  lt_cv_path_LD=$lt_save_path_LD
-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
-
-AC_LANG_POP
-])# _LT_LANG_CXX_CONFIG
-
-
-# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
-# ---------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-# Dependencies to place before and after the object being linked:
-_LT_TAGVAR(predep_objects, $1)=
-_LT_TAGVAR(postdep_objects, $1)=
-_LT_TAGVAR(predeps, $1)=
-_LT_TAGVAR(postdeps, $1)=
-_LT_TAGVAR(compiler_lib_search_path, $1)=
-
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library.  It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
-int a;
-void foo (void) { a = 0; }
-_LT_EOF
-], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-_LT_EOF
-], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer*4 a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
-public class foo {
-  private int a;
-  public void bar (void) {
-    a = 0;
-  }
-};
-_LT_EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
-  # Parse the compiler output and extract the necessary
-  # objects, libraries and library flags.
-
-  # Sentinel used to keep track of whether or not we are before
-  # the conftest object file.
-  pre_test_object_deps_done=no
-
-  for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
-	 prev=$p
-	 continue
-       else
-	 prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
-	   # Internal compiler library paths should come after those
-	   # provided the user.  The postdeps already come after the
-	   # user supplied libs so there is no need to process them.
-	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-	   else
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
-	   fi
-	   ;;
-	 # The "-l" case would never come before the object being
-	 # linked, so don't bother handling this case.
-	 esac
-       else
-	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
-	 else
-	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
-	 fi
-       fi
-       ;;
-
-    *.$objext)
-       # This assumes that the test object file only shows up
-       # once in the compiler output.
-       if test "$p" = "conftest.$objext"; then
-	 pre_test_object_deps_done=yes
-	 continue
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
-	   _LT_TAGVAR(predep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
-	 fi
-       else
-	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
-	   _LT_TAGVAR(postdep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
-	 fi
-       fi
-       ;;
-
-    *) ;; # Ignore the rest.
-
-    esac
-  done
-
-  # Clean up.
-  rm -f a.out a.exe
-else
-  echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$RM -f confest.$objext
-
-# PORTME: override above test on systems where it is broken
-m4_if([$1], [CXX],
-[case $host_os in
-interix[[3-9]]*)
-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
-  # hack all around it, let's just trust "g++" to DTRT.
-  _LT_TAGVAR(predep_objects,$1)=
-  _LT_TAGVAR(postdep_objects,$1)=
-  _LT_TAGVAR(postdeps,$1)=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-])
-
-case " $_LT_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
-    [The directories searched by this compiler when creating a shared library])
-_LT_TAGDECL([], [predep_objects], [1],
-    [Dependencies to place before and after the objects being linked to
-    create a shared library])
-_LT_TAGDECL([], [postdep_objects], [1])
-_LT_TAGDECL([], [predeps], [1])
-_LT_TAGDECL([], [postdeps], [1])
-_LT_TAGDECL([], [compiler_lib_search_path], [1],
-    [The library search path used internally by the compiler when linking
-    a shared library])
-])# _LT_SYS_HIDDEN_LIBDEPS
-
-
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
-# _LT_LANG_F77_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a Fortran 77 compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the F77 compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_F77" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${F77-"f77"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-  GCC=$G77
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$G77"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_F77" != yes
-
-AC_LANG_POP
-])# _LT_LANG_F77_CONFIG
-
-
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
-# _LT_LANG_FC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for a Fortran compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for fc test sources.
-ac_ext=${ac_fc_srcext-f}
-
-# Object file extension for compiled fc test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the FC compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_FC" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${FC-"f95"}
-  compiler=$CC
-  GCC=$ac_cv_fc_compiler_gnu
-
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_FC" != yes
-
-AC_LANG_POP
-])# _LT_LANG_FC_CONFIG
-
-
-# _LT_LANG_GCJ_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for the GNU Java Compiler compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_GCJ_CONFIG],
-[AC_REQUIRE([LT_PROG_GCJ])dnl
-AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=yes
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-
-  _LT_CONFIG($1)
-fi
-
-AC_LANG_RESTORE
-
-GCC=$lt_save_GCC
-CC="$lt_save_CC"
-])# _LT_LANG_GCJ_CONFIG
-
-
-# _LT_LANG_RC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for the Windows resource compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_RC_CONFIG],
-[AC_REQUIRE([LT_PROG_RC])dnl
-AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=
-CC=${RC-"windres"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-if test -n "$compiler"; then
-  :
-  _LT_CONFIG($1)
-fi
-
-GCC=$lt_save_GCC
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# _LT_LANG_RC_CONFIG
-
-
-# LT_PROG_GCJ
-# -----------
-AC_DEFUN([LT_PROG_GCJ],
-[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
-  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
-    [AC_CHECK_TOOL(GCJ, gcj,)
-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-      AC_SUBST(GCJFLAGS)])])[]dnl
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
-
-
-# LT_PROG_RC
-# ----------
-AC_DEFUN([LT_PROG_RC],
-[AC_CHECK_TOOL(RC, windres,)
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_RC], [])
-
-
-# _LT_DECL_EGREP
-# --------------
-# If we don't have a new enough Autoconf to choose the best grep
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_EGREP],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_REQUIRE([AC_PROG_FGREP])dnl
-test -z "$GREP" && GREP=grep
-_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
-_LT_DECL([], [EGREP], [1], [An ERE matcher])
-_LT_DECL([], [FGREP], [1], [A literal string matcher])
-dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
-AC_SUBST([GREP])
-])
-
-
-# _LT_DECL_OBJDUMP
-# --------------
-# If we don't have a new enough Autoconf to choose the best objdump
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_OBJDUMP],
-[AC_CHECK_TOOL(OBJDUMP, objdump, false)
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
-AC_SUBST([OBJDUMP])
-])
-
-
-# _LT_DECL_SED
-# ------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible.  Prefer GNU sed if found.
-m4_defun([_LT_DECL_SED],
-[AC_PROG_SED
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
-_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
-    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
-])# _LT_DECL_SED
-
-m4_ifndef([AC_PROG_SED], [
-# NOTE: This macro has been submitted for inclusion into   #
-#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
-#  a released version of Autoconf we should remove this    #
-#  macro and use it instead.                               #
-
-m4_defun([AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for lt_ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
-        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
-      fi
-    done
-  done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-  test ! -f $lt_ac_sed && continue
-  cat /dev/null > conftest.in
-  lt_ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
-  # Check for GNU sed and select it if it is found.
-  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
-    lt_cv_path_SED=$lt_ac_sed
-    break
-  fi
-  while true; do
-    cat conftest.in conftest.in >conftest.tmp
-    mv conftest.tmp conftest.in
-    cp conftest.in conftest.nl
-    echo >>conftest.nl
-    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
-    cmp -s conftest.out conftest.nl || break
-    # 10000 chars as input seems more than enough
-    test $lt_ac_count -gt 10 && break
-    lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
-      lt_ac_max=$lt_ac_count
-      lt_cv_path_SED=$lt_ac_sed
-    fi
-  done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])#AC_PROG_SED
-])#m4_ifndef
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_SED], [])
-
-
-# _LT_CHECK_SHELL_FEATURES
-# ------------------------
-# Find out whether the shell is Bourne or XSI compatible,
-# or has some other useful features.
-m4_defun([_LT_CHECK_SHELL_FEATURES],
-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-AC_MSG_RESULT([$xsi_shell])
-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
-
-AC_MSG_CHECKING([whether the shell understands "+="])
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-AC_MSG_RESULT([$lt_shell_append])
-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  lt_unset=unset
-else
-  lt_unset=false
-fi
-_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-  lt_SP2NL='tr \040 \012'
-  lt_NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  lt_SP2NL='tr \100 \n'
-  lt_NL2SP='tr \r\n \100\100'
-  ;;
-esac
-_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
-_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
-])# _LT_CHECK_SHELL_FEATURES
-
-
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
-    ;;
-  esac
-])
-
-# Helper functions for option handling.                    -*- Autoconf -*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltoptions.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
-
-
-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
-# ------------------------------------------
-m4_define([_LT_MANGLE_OPTION],
-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
-
-
-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
-# ---------------------------------------
-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
-# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
-# saved as a flag.
-m4_define([_LT_SET_OPTION],
-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
-        _LT_MANGLE_DEFUN([$1], [$2]),
-    [m4_warning([Unknown $1 option `$2'])])[]dnl
-])
-
-
-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
-# ------------------------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-m4_define([_LT_IF_OPTION],
-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
-
-
-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
-# -------------------------------------------------------
-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
-# are set.
-m4_define([_LT_UNLESS_OPTIONS],
-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
-		      [m4_define([$0_found])])])[]dnl
-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
-])[]dnl
-])
-
-
-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
-# ----------------------------------------
-# OPTION-LIST is a space-separated list of Libtool options associated
-# with MACRO-NAME.  If any OPTION has a matching handler declared with
-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
-# the unknown option and exit.
-m4_defun([_LT_SET_OPTIONS],
-[# Set options
-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-    [_LT_SET_OPTION([$1], _LT_Option)])
-
-m4_if([$1],[LT_INIT],[
-  dnl
-  dnl Simply set some default values (i.e off) if boolean options were not
-  dnl specified:
-  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
-  ])
-  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
-  ])
-  dnl
-  dnl If no reference was made to various pairs of opposing options, then
-  dnl we run the default mode handler for the pair.  For example, if neither
-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
-  dnl archives by default:
-  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
-  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
-  		   [_LT_ENABLE_FAST_INSTALL])
-  ])
-])# _LT_SET_OPTIONS
-
-
-
-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
-# -----------------------------------------
-m4_define([_LT_MANGLE_DEFUN],
-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
-
-
-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
-# -----------------------------------------------
-m4_define([LT_OPTION_DEFINE],
-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
-])# LT_OPTION_DEFINE
-
-
-# dlopen
-# ------
-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
-])
-
-AU_DEFUN([AC_LIBTOOL_DLOPEN],
-[_LT_SET_OPTION([LT_INIT], [dlopen])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
-
-
-# win32-dll
-# ---------
-# Declare package support for building win32 dll's.
-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
-[enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-esac
-
-test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
-])# win32-dll
-
-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-_LT_SET_OPTION([LT_INIT], [win32-dll])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
-
-
-# _LT_ENABLE_SHARED([DEFAULT])
-# ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_SHARED],
-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([shared],
-    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
-
-    _LT_DECL([build_libtool_libs], [enable_shared], [0],
-	[Whether or not to build shared libraries])
-])# _LT_ENABLE_SHARED
-
-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
-])
-
-AC_DEFUN([AC_DISABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], [disable-shared])
-])
-
-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
-
-
-
-# _LT_ENABLE_STATIC([DEFAULT])
-# ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_STATIC],
-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([static],
-    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_static=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
-
-    _LT_DECL([build_old_libs], [enable_static], [0],
-	[Whether or not to build static libraries])
-])# _LT_ENABLE_STATIC
-
-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
-])
-
-AC_DEFUN([AC_DISABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], [disable-static])
-])
-
-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
-
-
-
-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
-# ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_FAST_INSTALL],
-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([fast-install],
-    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_fast_install=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
-
-_LT_DECL([fast_install], [enable_fast_install], [0],
-	 [Whether or not to optimize for fast installation])dnl
-])# _LT_ENABLE_FAST_INSTALL
-
-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
-
-# Old names:
-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
-])
-
-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
-
-
-# _LT_WITH_PIC([MODE])
-# --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
-# LT_INIT options.
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-m4_define([_LT_WITH_PIC],
-[AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
-	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
-
-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
-])# _LT_WITH_PIC
-
-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
-
-# Old name:
-AU_DEFUN([AC_LIBTOOL_PICMODE],
-[_LT_SET_OPTION([LT_INIT], [pic-only])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
-
-
-m4_define([_LTDL_MODE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
-		 [m4_define([_LTDL_MODE], [nonrecursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
-		 [m4_define([_LTDL_MODE], [recursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
-		 [m4_define([_LTDL_MODE], [subproject])])
-
-m4_define([_LTDL_TYPE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [installable],
-		 [m4_define([_LTDL_TYPE], [installable])])
-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
-		 [m4_define([_LTDL_TYPE], [convenience])])
-
-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltsugar.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
-
-
-# lt_join(SEP, ARG1, [ARG2...])
-# -----------------------------
-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
-# associated separator.
-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
-# versions in m4sugar had bugs.
-m4_define([lt_join],
-[m4_if([$#], [1], [],
-       [$#], [2], [[$2]],
-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
-m4_define([_lt_join],
-[m4_if([$#$2], [2], [],
-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
-
-
-# lt_car(LIST)
-# lt_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
-# These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
-m4_define([lt_car], [[$1]])
-m4_define([lt_cdr],
-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
-       [$#], 1, [],
-       [m4_dquote(m4_shift($@))])])
-m4_define([lt_unquote], $1)
-
-
-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
-# ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
-# Note that neither SEPARATOR nor STRING are expanded; they are appended
-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
-# than defined and empty).
-#
-# This macro is needed until we can rely on Autoconf 2.62, since earlier
-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
-m4_define([lt_append],
-[m4_define([$1],
-	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
-
-
-
-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
-# ----------------------------------------------------------
-# Produce a SEP delimited list of all paired combinations of elements of
-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
-# has the form PREFIXmINFIXSUFFIXn.
-# Needed until we can rely on m4_combine added in Autoconf 2.62.
-m4_define([lt_combine],
-[m4_if(m4_eval([$# > 3]), [1],
-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
-[[m4_foreach([_Lt_prefix], [$2],
-	     [m4_foreach([_Lt_suffix],
-		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
-	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
-
-
-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
-# -----------------------------------------------------------------------
-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
-m4_define([lt_if_append_uniq],
-[m4_ifdef([$1],
-	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
-		 [lt_append([$1], [$2], [$3])$4],
-		 [$5])],
-	  [lt_append([$1], [$2], [$3])$4])])
-
-
-# lt_dict_add(DICT, KEY, VALUE)
-# -----------------------------
-m4_define([lt_dict_add],
-[m4_define([$1($2)], [$3])])
-
-
-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
-# --------------------------------------------
-m4_define([lt_dict_add_subkey],
-[m4_define([$1($2:$3)], [$4])])
-
-
-# lt_dict_fetch(DICT, KEY, [SUBKEY])
-# ----------------------------------
-m4_define([lt_dict_fetch],
-[m4_ifval([$3],
-	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
-
-
-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
-# -----------------------------------------------------------------
-m4_define([lt_if_dict_fetch],
-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
-	[$5],
-    [$6])])
-
-
-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
-# --------------------------------------------------------------
-m4_define([lt_dict_filter],
-[m4_if([$5], [], [],
-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
-		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
-])
-
-# ltversion.m4 -- version numbers			-*- Autoconf -*-
-#
-#   Copyright (C) 2004 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# Generated from ltversion.in.
-
-# serial 3012 ltversion.m4
-# This file is part of GNU Libtool
-
-m4_define([LT_PACKAGE_VERSION], [2.2.6])
-m4_define([LT_PACKAGE_REVISION], [1.3012])
-
-AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6'
-macro_revision='1.3012'
-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
-_LT_DECL(, macro_revision, 0)
-])
-
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
-#
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 4 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else.  This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-
 # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
@@ -7980,7 +34,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.11'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11], [],
+m4_if([$1], [1.11.1], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -7996,7 +50,7 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11])dnl
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
@@ -8687,6 +741,211 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ---------------------------------------------------------------------------
+# Adds support for distributing Python modules and packages.  To
+# install modules, copy them to $(pythondir), using the python_PYTHON
+# automake variable.  To install a package with the same name as the
+# automake package, install to $(pkgpythondir), or use the
+# pkgpython_PYTHON automake variable.
+#
+# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
+# locations to install python extension modules (shared libraries).
+# Another macro is required to find the appropriate flags to compile
+# extension modules.
+#
+# If your package is configured with a different prefix to python,
+# users will have to add the install directory to the PYTHONPATH
+# environment variable, or create a .pth file (see the python
+# documentation for details).
+#
+# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will
+# cause an error if the version of python installed on the system
+# doesn't meet the requirement.  MINIMUM-VERSION should consist of
+# numbers and dots only.
+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
+
+])
+
+
+# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ---------------------------------------------------------------------------
+# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
+# Run ACTION-IF-FALSE otherwise.
+# This test uses sys.hexversion instead of the string equivalent (first
+# word of sys.version), in order to cope with versions such as 2.2c1.
+# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
+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])])
+
 # Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
@@ -8912,3 +1171,12 @@ AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
+m4_include([m4/ax_pkg_swig.m4])
+m4_include([m4/ax_python_devel.m4])
+m4_include([m4/ax_swig_enable_cxx.m4])
+m4_include([m4/ax_swig_python.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
diff --git a/config.guess b/config.guess
index 9521fc4..dc84c68 100755
--- a/config.guess
+++ b/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
 #   Free Software Foundation, Inc.
 
-timestamp='2009-04-27'
+timestamp='2009-11-20'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -27,16 +27,16 @@ timestamp='2009-04-27'
 # the same distribution terms that you use for the rest of that program.
 
 
-# Originally written by Per Bothner <per at bothner.com>.
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches at gnu.org> and include a ChangeLog
+# entry.
 #
 # This script attempts to guess a canonical system name similar to
 # config.sub.  If it succeeds, it prints the system name on stdout, and
 # exits with 0.  Otherwise, it exits with 1.
 #
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -139,16 +139,6 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-case "${UNAME_MACHINE}" in
-    i?86)
-	test -z "$VENDOR" && VENDOR=pc
-	;;
-    *)
-	test -z "$VENDOR" && VENDOR=unknown
-	;;
-esac
-test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse
-
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@@ -180,7 +170,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?
@@ -343,6 +333,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"
@@ -666,7 +659,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
@@ -817,12 +810,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)
@@ -832,6 +825,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
@@ -861,18 +857,32 @@ 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 \
 	    | grep -q __ARM_EABI__
 	then
-	    echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	    echo ${UNAME_MACHINE}-unknown-linux-gnu
 	else
-	    echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabi
+	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
 	fi
 	exit ;;
     avr32*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     cris:Linux:*:*)
 	echo cris-axis-linux-gnu
@@ -881,181 +891,91 @@ EOF
 	echo crisv32-axis-linux-gnu
 	exit ;;
     frv:Linux:*:*)
-    	echo frv-${VENDOR}-linux-gnu
+    	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}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	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}-${VENDOR}-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
-	    }'`"
-	test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; }
+	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-${VENDOR}-linux-gnu
-	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-${VENDOR}-linux-gnu
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-${VENDOR}-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}-${VENDOR}-linux-gnu${LIBC}
+	echo or32-unknown-linux-gnu
 	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
-	  PA7*) echo hppa1.1-${VENDOR}-linux-gnu ;;
-	  PA8*) echo hppa2.0-${VENDOR}-linux-gnu ;;
-	  *)    echo hppa-${VENDOR}-linux-gnu ;;
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
 	esac
 	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-${VENDOR}-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
 	exit ;;
     sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     vax:Linux:*:*)
 	echo ${UNAME_MACHINE}-dec-linux-gnu
 	exit ;;
     x86_64:Linux:*:*)
-	echo x86_64-${VENDOR}-linux-gnu
+	echo x86_64-unknown-linux-gnu
 	exit ;;
     xtensa*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+    	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}-${VENDOR}-linux-gnu"
-		;;
-	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-${VENDOR}-linux-gnuaout"
-		exit ;;
-	  "")
-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
-		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-${VENDOR}-linux-gnuoldld"
-		exit ;;
-	esac
-	# Determine whether the default compiler is a.out or elf
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#ifdef __ELF__
-	# ifdef __GLIBC__
-	#  if __GLIBC__ >= 2
-	LIBC=gnu
-	#  else
-	LIBC=gnulibc1
-	#  endif
-	# else
-	LIBC=gnulibc1
-	# endif
-	#else
-	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
-	LIBC=gnu
-	#else
-	LIBC=gnuaout
-	#endif
-	#endif
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^LIBC/{
-		s: ::g
-		p
-	    }'`"
-	test x"${LIBC}" != x && {
-		echo "${UNAME_MACHINE}-${VENDOR}-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
@@ -1076,16 +996,16 @@ EOF
 	echo ${UNAME_MACHINE}-pc-os2-emx
 	exit ;;
     i*86:XTS-300:*:STOP)
-	echo ${UNAME_MACHINE}-${VENDOR}-stop
+	echo ${UNAME_MACHINE}-unknown-stop
 	exit ;;
     i*86:atheos:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-atheos
+	echo ${UNAME_MACHINE}-unknown-atheos
 	exit ;;
     i*86:syllable:*:*)
 	echo ${UNAME_MACHINE}-pc-syllable
 	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-	echo i386-${VENDOR}-lynxos${UNAME_RELEASE}
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     i*86:*DOS:*:*)
 	echo ${UNAME_MACHINE}-pc-msdosdjgpp
@@ -1105,7 +1025,7 @@ EOF
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
 	esac
-	echo ${UNAME_MACHINE}-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
 	exit ;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
@@ -1144,7 +1064,7 @@ EOF
 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
 	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
 	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-${VENDOR}-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
 	fi
 	exit ;;
     mini*:CTIX:SYS*5:*)
@@ -1181,19 +1101,19 @@ EOF
 	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
 	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-${VENDOR}-lynxos${UNAME_RELEASE}
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     mc68030:UNIX_System_V:4.*:*)
 	echo m68k-atari-sysv4
 	exit ;;
     TSUNAMI:LynxOS:2.*:*)
-	echo sparc-${VENDOR}-lynxos${UNAME_RELEASE}
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     rs6000:LynxOS:2.*:*)
-	echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE}
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-	echo powerpc-${VENDOR}-lynxos${UNAME_RELEASE}
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     SM[BE]S:UNIX_SV:*:*)
 	echo mips-dde-sysv${UNAME_RELEASE}
@@ -1243,7 +1163,7 @@ EOF
 	if [ -d /usr/nec ]; then
 	        echo mips-nec-sysv${UNAME_RELEASE}
 	else
-	        echo mips-${VENDOR}-sysv${UNAME_RELEASE}
+	        echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
         exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
@@ -1285,6 +1205,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}
@@ -1324,13 +1254,13 @@ EOF
 	else
 	    UNAME_MACHINE="$cputype"
 	fi
-	echo ${UNAME_MACHINE}-${VENDOR}-plan9
+	echo ${UNAME_MACHINE}-unknown-plan9
 	exit ;;
     *:TOPS-10:*:*)
-	echo pdp10-${VENDOR}-tops10
+	echo pdp10-unknown-tops10
 	exit ;;
     *:TENEX:*:*)
-	echo pdp10-${VENDOR}-tenex
+	echo pdp10-unknown-tenex
 	exit ;;
     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
 	echo pdp10-dec-tops20
@@ -1339,16 +1269,16 @@ EOF
 	echo pdp10-xkl-tops20
 	exit ;;
     *:TOPS-20:*:*)
-	echo pdp10-${VENDOR}-tops20
+	echo pdp10-unknown-tops20
 	exit ;;
     *:ITS:*:*)
-	echo pdp10-${VENDOR}-its
+	echo pdp10-unknown-its
 	exit ;;
     SEI:*:*:SEIUX)
         echo mips-sei-seiux${UNAME_RELEASE}
 	exit ;;
     *:DragonFly:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     *:*VMS:*:*)
     	UNAME_MACHINE=`(uname -p) 2>/dev/null`
diff --git a/config.h.in b/config.h.in
deleted file mode 100644
index ab1120b..0000000
--- a/config.h.in
+++ /dev/null
@@ -1,150 +0,0 @@
-/* config.h.in.  Generated from configure.in by autoheader.  */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
-#undef HAVE_DOPRNT
-
-/* Define to 1 if you have the <float.h> header file. */
-#undef HAVE_FLOAT_H
-
-/* Define to 1 if you have the `floor' function. */
-#undef HAVE_FLOOR
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
-   to 0 otherwise. */
-#undef HAVE_MALLOC
-
-/* Define to 1 if you have the <malloc.h> header file. */
-#undef HAVE_MALLOC_H
-
-/* Define to 1 if you have the `memmove' function. */
-#undef HAVE_MEMMOVE
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the `memset' function. */
-#undef HAVE_MEMSET
-
-/* Define to 1 if you have the `modf' function. */
-#undef HAVE_MODF
-
-/* Define to 1 if you have the `pow' function. */
-#undef HAVE_POW
-
-/* Define to 1 if your system has a GNU libc compatible `realloc' function,
-   and to 0 otherwise. */
-#undef HAVE_REALLOC
-
-/* Define to 1 if you have the `sqrt' function. */
-#undef HAVE_SQRT
-
-/* Define to 1 if `stat' has the bug that it succeeds when given the
-   zero-length file name argument. */
-#undef HAVE_STAT_EMPTY_STRING_BUG
-
-/* Define to 1 if stdbool.h conforms to C99. */
-#undef HAVE_STDBOOL_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `strchr' function. */
-#undef HAVE_STRCHR
-
-/* Define to 1 if you have the `strdup' function. */
-#undef HAVE_STRDUP
-
-/* Define to 1 if you have the `strerror' function. */
-#undef HAVE_STRERROR
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strrchr' function. */
-#undef HAVE_STRRCHR
-
-/* Define to 1 if you have the `strstr' function. */
-#undef HAVE_STRSTR
-
-/* Define to 1 if you have the `strtol' function. */
-#undef HAVE_STRTOL
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the `vprintf' function. */
-#undef HAVE_VPRINTF
-
-/* Define to 1 if the system has the type `_Bool'. */
-#undef HAVE__BOOL
-
-/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
-   slash. */
-#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
-#undef LT_OBJDIR
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to 1 if your <sys/time.h> declares `struct tm'. */
-#undef TM_IN_SYS_TIME
-
-/* Version number of package */
-#undef VERSION
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
-   calls it, or to nothing if 'inline' is not supported under any name.  */
-#ifndef __cplusplus
-#undef inline
-#endif
-
-/* Define to rpl_malloc if the replacement function should be used. */
-#undef malloc
-
-/* Define to rpl_realloc if the replacement function should be used. */
-#undef realloc
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
diff --git a/config.sub b/config.sub
index a39437d..2a55a50 100755
--- a/config.sub
+++ b/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
 #   Free Software Foundation, Inc.
 
-timestamp='2009-04-17'
+timestamp='2009-11-20'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -32,13 +32,16 @@ timestamp='2009-04-17'
 
 
 # Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# diff and a properly formatted GNU ChangeLog entry.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
 # Otherwise, we print the canonical config type on stdout and succeed.
 
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
 # that are meaningful with *any* GNU software.
@@ -149,10 +152,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 +287,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 +295,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 +345,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,7 +373,7 @@ 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-* \
@@ -374,6 +382,7 @@ case $basic_machine in
 	| tahoe-* | thumb-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
 	| tron-* \
+	| ubicom32-* \
 	| v850-* | v850e-* | vax-* \
 	| we32k-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
@@ -467,6 +476,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 +732,9 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
+        microblaze)
+		basic_machine=microblaze-xilinx
+		;;
 	mingw32)
 		basic_machine=i386-pc
 		os=-mingw32
@@ -1240,6 +1256,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 +1279,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 +1302,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*)
@@ -1613,7 +1632,7 @@ case $basic_machine in
 			-sunos*)
 				vendor=sun
 				;;
-			-aix*)
+			-cnk*|-aix*)
 				vendor=ibm
 				;;
 			-beos*)
diff --git a/configure b/configure
index 1afd9fb..b49d051 100755
--- a/configure
+++ b/configure
@@ -1,20 +1,24 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63 for saga 2.0.5.
+# Generated by GNU Autoconf 2.65 for saga 2.0.6.
 #
 # Report bugs to <BUG-REPORT-ADDRESS>.
 #
+#
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+#
+#
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+## -------------------- ##
+## 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
+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
@@ -22,23 +26,15 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
 esac
-
 fi
 
 
-
-
-# PATH needs CR
-# 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_nl='
 '
 export as_nl
@@ -46,7 +42,13 @@ export as_nl
 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
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+# 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
@@ -57,7 +59,7 @@ else
     as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
     as_echo_n_body='eval
       arg=$1;
-      case $arg in
+      case $arg in #(
       *"$as_nl"*)
 	expr "X$arg" : "X\\(.*\\)$as_nl";
 	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
@@ -80,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
   }
 fi
 
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
 
 # IFS
 # We need space, tab and new line, in precisely that order.  Quoting is
@@ -96,15 +91,15 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in
+case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
 IFS=$as_save_IFS
 
      ;;
@@ -116,12 +111,16 @@ if test "x$as_myself" = x; then
 fi
 if test ! -f "$as_myself"; then
   $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  { (exit 1); exit 1; }
+  exit 1
 fi
 
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+# 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='> '
@@ -133,330 +132,300 @@ export LC_ALL
 LANGUAGE=C
 export LANGUAGE
 
-# Required to use basename.
-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
-
-
-# Name of the executable.
-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'`
-
 # CDPATH.
-$as_unset CDPATH
-
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 if test "x$CONFIG_SHELL" = x; then
-  if (eval ":") 2>/dev/null; then
-  as_have_required=yes
+  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
-  as_have_required=no
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
 fi
-
-  if test $as_have_required = yes &&	 (eval ":
-(as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
+"
+  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
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
+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
-  exitcode=1
-  echo positional parameters were not saved.
+  as_have_required=no
 fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
 
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=\$LINENO
-  as_lineno_2=\$LINENO
-  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
-  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
-  :
 else
-  as_candidate_shells=
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  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=.
-  case $as_dir in
+  as_found=:
+  case $as_dir in #(
 	 /*)
 	   for as_base in sh bash ksh sh5; do
-	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+	     # 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
 
 
-      for as_shell in $as_candidate_shells $SHELL; do
-	 # Try only shells that exist, to save several forks.
-	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		{ ("$as_shell") 2> /dev/null <<\_ASEOF
-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
-
-
-:
-_ASEOF
-}; then
-  CONFIG_SHELL=$as_shell
-	       as_have_required=yes
-	       if { "$as_shell" 2> /dev/null <<\_ASEOF
-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_func_return () {
-  (exit $1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
-
-exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
-  :
-else
-  exitcode=1
-  echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
-  break
-fi
-
-fi
-
-      done
-
-      if test "x$CONFIG_SHELL" != x; then
-  for as_var in BASH_ENV ENV
-	do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-	done
+      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 $as_have_required = no; then
-  echo This script requires a shell more modern than all the
-      echo shells that I found on your system.  Please install a
-      echo modern shell, or manually run the script under such a
-      echo shell if you do have one.
-      { (exit 1); exit 1; }
+    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 at gnu.org and BUG-REPORT-ADDRESS
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: 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 $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
 
-(eval "as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
+# 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 "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
 
-exitcode=0
-if as_func_success; then
-  :
+  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
-  exitcode=1
-  echo as_func_success failed.
-fi
+  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 $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) 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 as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
 
-if as_func_ret_success; then
-  :
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  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
+  fi
+  $as_echo "$as_me: error: $1" >&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
-  exitcode=1
-  echo as_func_ret_success failed.
+  as_expr=false
 fi
 
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
 fi
 
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
 else
-  exitcode=1
-  echo positional parameters were not saved.
+  as_dirname=false
 fi
 
-test \$exitcode = 0") || {
-  echo No shell found that supports shell functions.
-  echo Please tell bug-autoconf at gnu.org about your system,
-  echo including any error possibly output before this message.
-  echo This can help us improve future autoconf versions.
-  echo Configuration will now proceed without shell functions.
-}
-
+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_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
 
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  Blame Lee
-  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  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/=
@@ -473,8 +442,7 @@ test \$exitcode = 0") || {
       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
-   { (exit 1); exit 1; }; }
+    { $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
@@ -484,29 +452,18 @@ test \$exitcode = 0") || {
   exit
 }
 
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
 -n*)
-  case `echo 'x\c'` in
+  case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
 
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
@@ -536,7 +493,7 @@ 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=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
@@ -555,10 +512,10 @@ else
       if test -d "$1"; then
 	test -d "$1/.";
       else
-	case $1 in
+	case $1 in #(
 	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -573,7 +530,6 @@ 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}
 
@@ -722,7 +678,8 @@ fi
 
 
 
-exec 7<&0 </dev/null 6>&1
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
 
 # Name of the host.
 # hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
@@ -740,14 +697,14 @@ cross_compiling=no
 subdirs=
 MFLAGS=
 MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
 
 # Identity of this package.
 PACKAGE_NAME='saga'
 PACKAGE_TARNAME='saga'
-PACKAGE_VERSION='2.0.5'
-PACKAGE_STRING='saga 2.0.5'
+PACKAGE_VERSION='2.0.6'
+PACKAGE_STRING='saga 2.0.6'
 PACKAGE_BUGREPORT='BUG-REPORT-ADDRESS'
+PACKAGE_URL=''
 
 ac_unique_file="src/saga_core/saga_gui/wksp_data_menu_files.cpp"
 # Factoring default headers for most tests.
@@ -789,8 +746,36 @@ ac_includes_default="\
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
+AX_SWIG_PYTHON_CPPFLAGS
+AX_SWIG_PYTHON_OPT
+SWIG_LIB
+SWIG
+PYTHON_EXTRA_LDFLAGS
+PYTHON_EXTRA_LIBS
+PYTHON_SITE_PKG
+PYTHON_LDFLAGS
+PYTHON_CPPFLAGS
+pkgpyexecdir
+pyexecdir
+pkgpythondir
+pythondir
+PYTHON_PLATFORM
+PYTHON_EXEC_PREFIX
+PYTHON_PREFIX
+PYTHON_VERSION
+PYTHON
+SAGA_PYTHON_FALSE
+SAGA_PYTHON_TRUE
 DISABLELIBHARU
 HARU_LIB
+HAVE_HARU_FALSE
+HAVE_HARU_TRUE
+HAVE_VIGRA_FALSE
+HAVE_VIGRA_TRUE
+HAVE_LLAS_FALSE
+HAVE_LLAS_TRUE
+HAVE_CV_FALSE
+HAVE_CV_TRUE
 SAGA_UNICODE_FALSE
 SAGA_UNICODE_TRUE
 DEBUG_FALSE
@@ -901,6 +886,7 @@ bindir
 program_transform_name
 prefix
 exec_prefix
+PACKAGE_URL
 PACKAGE_BUGREPORT
 PACKAGE_STRING
 PACKAGE_VERSION
@@ -920,6 +906,7 @@ with_gnu_ld
 enable_libtool_lock
 enable_debug
 enable_unicode
+enable_python
 '
       ac_precious_vars='build_alias
 host_alias
@@ -933,7 +920,8 @@ CCC
 CC
 CFLAGS
 CPP
-CXXCPP'
+CXXCPP
+PYTHON_VERSION'
 
 
 # Initialize some variables set by options.
@@ -1042,8 +1030,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_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
-   { (exit 1); exit 1; }; }
+      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
@@ -1069,8 +1056,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_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
-   { (exit 1); exit 1; }; }
+      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
@@ -1274,8 +1260,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_echo "$as_me: error: invalid package name: $ac_useropt" >&2
-   { (exit 1); exit 1; }; }
+      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
@@ -1291,8 +1276,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_echo "$as_me: error: invalid package name: $ac_useropt" >&2
-   { (exit 1); exit 1; }; }
+      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
@@ -1322,17 +1306,17 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
+  -*) 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.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
+    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 ;;
 
@@ -1349,15 +1333,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { $as_echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "missing argument to $ac_option"
 fi
 
 if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
-    fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
-   { (exit 1); exit 1; }; } ;;
+    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1380,8 +1362,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; }
+  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'
@@ -1411,11 +1392,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_echo "$as_me: error: working directory cannot be determined" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "working directory cannot be determined"
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1454,13 +1433,11 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
+  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_echo "$as_me: error: $ac_msg" >&2
-   { (exit 1); exit 1; }; }
+	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
@@ -1486,7 +1463,7 @@ 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 saga 2.0.5 to adapt to many kinds of systems.
+\`configure' configures saga 2.0.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1556,7 +1533,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of saga 2.0.5:";;
+     short | recursive ) echo "Configuration of saga 2.0.6:";;
    esac
   cat <<\_ACEOF
 
@@ -1573,6 +1550,7 @@ Optional Features:
   --disable-libtool-lock  avoid locking (might break parallel builds)
   --enable-debug	  Turn on debugging
   --enable-unicode	  Build with unicode support (wx has to be built with unicode support, too)
+  --enable-python    Build python bindings for the saga api
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1587,12 +1565,16 @@ Some influential environment variables:
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
   LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
   CC          C compiler command
   CFLAGS      C compiler flags
   CPP         C preprocessor
   CXXCPP      C++ preprocessor
+  PYTHON_VERSION
+              The installed Python version to use, for example '2.3'. This
+              string will be appended to the Python interpreter canonical
+              name.
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -1660,22 +1642,554 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-saga configure 2.0.5
-generated by GNU Autoconf 2.63
+saga configure 2.0.6
+generated by GNU Autoconf 2.65
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 2009 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_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$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_compile LINENO
+# --------------------------
+# Try to compile conftest.$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_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$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 { as_var=$3; eval "test \"\${$as_var+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.$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; } >/dev/null && {
+	 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.$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 { as_var=$3; eval "test \"\${$as_var+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 <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $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.$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; } >/dev/null && {
+	 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.$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 { as_var=$3; eval "test \"\${$as_var+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 :
+  $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.$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;}
+( cat <<\_ASBOX
+## --------------------------------- ##
+## Report this to BUG-REPORT-ADDRESS ##
+## --------------------------------- ##
+_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 :
+  $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
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  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 :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=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
+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_type
 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 saga $as_me 2.0.5, which was
-generated by GNU Autoconf 2.63.  Invocation command line was
+It was created by saga $as_me 2.0.6, which was
+generated by GNU Autoconf 2.65.  Invocation command line was
 
   $ $0 $@
 
@@ -1711,8 +2225,8 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  $as_echo "PATH: $as_dir"
-done
+    $as_echo "PATH: $as_dir"
+  done
 IFS=$as_save_IFS
 
 } >&5
@@ -1749,9 +2263,9 @@ do
       ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
     2)
-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      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
@@ -1767,13 +2281,13 @@ do
 	  -* ) ac_must_keep_next=true ;;
 	esac
       fi
-      ac_configure_args="$ac_configure_args '$ac_arg'"
+      as_fn_append ac_configure_args " '$ac_arg'"
       ;;
     esac
   done
 done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+{ 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
@@ -1798,13 +2312,13 @@ _ASBOX
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+      *_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= ;; #(
-      *) $as_unset $ac_var ;;
+      *) { eval $ac_var=; unset $ac_var;} ;;
       esac ;;
     esac
   done
@@ -1876,39 +2390,41 @@ _ASBOX
     exit $exit_status
 ' 0
 for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+  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.
@@ -1926,8 +2442,8 @@ 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
-    { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+  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"
@@ -1935,10 +2451,10 @@ $as_echo "$as_me: loading site script $ac_site_file" >&6;}
 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
-    { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
+  # 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";;
@@ -1946,7 +2462,7 @@ $as_echo "$as_me: loading cache $cache_file" >&6;}
     esac
   fi
 else
-  { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
 $as_echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
@@ -1961,11 +2477,11 @@ for ac_var in $ac_precious_vars; do
   eval ac_new_val=\$ac_env_${ac_var}_value
   case $ac_old_set,$ac_new_set in
     set,)
-      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+      { $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:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+      { $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=: ;;
     ,);;
@@ -1975,17 +2491,17 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
 	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:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+	  { $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:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+	  { $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:$LINENO:   former value:  \`$ac_old_val'" >&5
+	{ $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:$LINENO:   current value: \`$ac_new_val'" >&5
+	{ $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
@@ -1997,43 +2513,20 @@ $as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
     esac
     case " $ac_configure_args " in
       *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
     esac
   fi
 done
 if $ac_cache_corrupted; then
-  { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+  { $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:$LINENO: error: changes in the environment can compromise the build" >&5
+  { $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_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
+  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'
@@ -2049,24 +2542,16 @@ am__api_version='1.11'
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; 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
+  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
 done
 if test -z "$ac_aux_dir"; then
-  { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
-$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
 fi
 
 # These three variables are undocumented and unsupported,
@@ -2092,10 +2577,10 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 # 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:$LINENO: checking for a BSD-compatible install" >&5
+{ $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
+if test "${ac_cv_path_install+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2103,11 +2588,11 @@ 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/* | \
+    # 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\\/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
   /usr/ucb/* ) ;;
   *)
     # OSF1 and SCO ODT 3.0 have their own names for install.
@@ -2144,7 +2629,7 @@ case $as_dir/ in
     ;;
 esac
 
-done
+  done
 IFS=$as_save_IFS
 
 rm -rf conftest.one conftest.two conftest.dir
@@ -2160,7 +2645,7 @@ fi
     INSTALL=$ac_install_sh
   fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
+{ $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}.
@@ -2171,7 +2656,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+{ $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
@@ -2182,15 +2667,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5
-$as_echo "$as_me: error: unsafe absolute working directory name" >&2;}
-   { (exit 1); exit 1; }; };;
+    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5
-$as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;}
-   { (exit 1); exit 1; }; };;
+    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -2212,11 +2693,8 @@ if (
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&5
-$as_echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&2;}
-   { (exit 1); exit 1; }; }
+      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
@@ -2225,13 +2703,10 @@ then
    # Ok.
    :
 else
-   { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
-Check your system clock" >&5
-$as_echo "$as_me: error: newly created file is older than distributed files!
-Check your system clock" >&2;}
-   { (exit 1); exit 1; }; }
+   as_fn_error "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
 fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
+{ $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"
@@ -2259,7 +2734,7 @@ if eval "$MISSING --run true"; then
   am_missing_run="$MISSING --run "
 else
   am_missing_run=
-  { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+  { $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
 
@@ -2280,9 +2755,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_STRIP+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2293,24 +2768,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 STRIP=$ac_cv_prog_STRIP
 if test -n "$STRIP"; then
-  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
 $as_echo "$STRIP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -2320,9 +2795,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2333,24 +2808,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_STRIP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
 $as_echo "$ac_ct_STRIP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -2359,7 +2834,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -2372,10 +2847,10 @@ fi
 fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 
-{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+{ $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
+  if test "${ac_cv_path_mkdir+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2383,7 +2858,7 @@ 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_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 #(
@@ -2395,11 +2870,12 @@ do
 	   esac
 	 done
        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
@@ -2407,11 +2883,10 @@ 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
-{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
 $as_echo "$MKDIR_P" >&6; }
 
 mkdir_p="$MKDIR_P"
@@ -2424,9 +2899,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_AWK+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2437,24 +2912,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 AWK=$ac_cv_prog_AWK
 if test -n "$AWK"; then
-  { $as_echo "$as_me:$LINENO: result: $AWK" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
 $as_echo "$AWK" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -2462,11 +2937,11 @@ fi
   test -n "$AWK" && break
 done
 
-{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+{ $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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2484,11 +2959,11 @@ esac
 rm -f conftest.make
 fi
 if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:$LINENO: result: yes" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
   SET_MAKE=
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
   SET_MAKE="MAKE=${MAKE-make}"
 fi
@@ -2508,9 +2983,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_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
-$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
   fi
 fi
 
@@ -2526,7 +2999,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='saga'
- VERSION='2.0.5'
+ VERSION='2.0.6'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2561,7 +3034,7 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 AMTAR=${AMTAR-"${am_missing_run}tar"}
 
 
-{ $as_echo "$as_me:$LINENO: checking how to create a ustar tar archive" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5
 $as_echo_n "checking how to create a ustar tar archive... " >&6; }
 # Loop over all known methods to create a tar archive until one works.
 _am_tools='gnutar plaintar pax cpio none'
@@ -2634,13 +3107,13 @@ do
 done
 rm -rf conftest.dir
 
-if test "${am_cv_prog_tar_ustar+set}" = set; then
+if test "${am_cv_prog_tar_ustar+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   am_cv_prog_tar_ustar=$_am_tool
 fi
 
-{ $as_echo "$as_me:$LINENO: result: $am_cv_prog_tar_ustar" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5
 $as_echo "$am_cv_prog_tar_ustar" >&6; }
 
 
@@ -2663,9 +3136,9 @@ if test -z "$CXX"; then
   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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_CXX+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CXX"; then
@@ -2676,24 +3149,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CXX=$ac_cv_prog_CXX
 if test -n "$CXX"; then
-  { $as_echo "$as_me:$LINENO: result: $CXX" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
 $as_echo "$CXX" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -2707,9 +3180,9 @@ if test -z "$CXX"; then
 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CXX"; then
@@ -2720,24 +3193,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_CXX" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
 $as_echo "$ac_ct_CXX" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -2750,7 +3223,7 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -2761,48 +3234,31 @@ fi
   fi
 fi
 # Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
 set X $ac_compile
 ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler --version >&5") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
+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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler -v >&5") 2>&5
+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=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler -V >&5") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2818,8 +3274,8 @@ 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:$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:
@@ -2835,17 +3291,17 @@ do
 done
 rm -f $ac_rmfiles
 
-if { (ac_try="$ac_link_default"
+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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
+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:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $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,
@@ -2862,7 +3318,7 @@ do
 	# certainly right.
 	break;;
     *.* )
-        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
 	then :; else
 	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
 	fi
@@ -2881,84 +3337,42 @@ test "$ac_cv_exeext" = no && ac_cv_exeext=
 else
   ac_file=''
 fi
-
-{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-if test -z "$ac_file"; then
-  $as_echo "$as_me: failed program was:" >&5
+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:$LINENO: error: in \`$ac_pwd':" >&5
+{ { $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:$LINENO: error: C++ compiler cannot create executables
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C++ compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }; }
+{ as_fn_set_status 77
+as_fn_error "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:$LINENO: checking whether the C++ compiler works" >&5
-$as_echo_n "checking whether the C++ compiler works... " >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot run C++ compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot run C++ compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
 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:$LINENO: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
+{ $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"
+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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
+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:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $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
@@ -2973,32 +3387,83 @@ for ac_file in conftest.exe conftest conftest.*; do
   esac
 done
 else
-  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+  { { $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:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }; }
+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
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+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
-{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then
+if test "${ac_cv_objext+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3010,17 +3475,17 @@ main ()
 }
 _ACEOF
 rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
+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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
+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:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $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
@@ -3033,31 +3498,23 @@ else
   $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+{ { $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:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }; }
+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:$LINENO: result: $ac_cv_objext" >&5
+{ $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:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+{ $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
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3071,37 +3528,16 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_compiler_gnu=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_compiler_gnu=no
+  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:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+{ $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
@@ -3110,20 +3546,16 @@ else
 fi
 ac_test_CXXFLAGS=${CXXFLAGS+set}
 ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+{ $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
+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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3134,35 +3566,11 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_cv_prog_cxx_g=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	CXXFLAGS=""
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3173,36 +3581,12 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_cxx_try_compile "$LINENO"; then :
 
-	ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
 	 CXXFLAGS="-g"
-	 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3213,42 +3597,17 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_cv_prog_cxx_g=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 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:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+{ $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
@@ -3282,7 +3641,7 @@ am__doit:
 .PHONY: am__doit
 END
 # If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+{ $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=
@@ -3310,12 +3669,12 @@ if test "$am__include" = "#"; then
 fi
 
 
-{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
+{ $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
+if test "${enable_dependency_tracking+set}" = set; then :
   enableval=$enable_dependency_tracking;
 fi
 
@@ -3335,9 +3694,9 @@ fi
 
 depcc="$CXX"  am_compiler_list=
 
-{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+{ $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
+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
@@ -3445,7 +3804,7 @@ else
 fi
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+{ $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
 
@@ -3468,9 +3827,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_CC+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3481,24 +3840,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
 $as_echo "$CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -3508,9 +3867,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3521,24 +3880,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
 $as_echo "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -3547,7 +3906,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -3561,9 +3920,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_CC+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3574,24 +3933,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
 $as_echo "$CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -3601,9 +3960,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_CC+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3615,18 +3974,18 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 if test $ac_prog_rejected = yes; then
@@ -3645,10 +4004,10 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
 $as_echo "$CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -3660,9 +4019,9 @@ if test -z "$CC"; then
   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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_CC+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3673,24 +4032,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
 $as_echo "$CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -3704,9 +4063,9 @@ if test -z "$CC"; then
 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3717,24 +4076,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
 $as_echo "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -3747,7 +4106,7 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -3758,62 +4117,42 @@ fi
 fi
 
 
-test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+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_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }; }
+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:$LINENO: checking for C compiler version" >&5
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
 set X $ac_compile
 ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
+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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler --version >&5") 2>&5
+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=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler -v >&5") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler -V >&5") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $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:$LINENO: checking whether we are using the GNU C compiler" >&5
+{ $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
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3827,37 +4166,16 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_compiler_gnu=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_compiler_gnu=no
+  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:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+{ $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
@@ -3866,20 +4184,16 @@ else
 fi
 ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+{ $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
+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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3890,35 +4204,11 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_g=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	CFLAGS=""
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3929,36 +4219,12 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_compile "$LINENO"; then :
 
-	ac_c_werror_flag=$ac_save_c_werror_flag
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
 	 CFLAGS="-g"
-	 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3969,42 +4235,17 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_g=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 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:$LINENO: result: $ac_cv_prog_cc_g" >&5
+{ $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
@@ -4021,18 +4262,14 @@ else
     CFLAGS=
   fi
 fi
-{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+{ $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
+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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
@@ -4089,32 +4326,9 @@ for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
 	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
-  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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+  if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_c89=$ac_arg
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext
   test "x$ac_cv_prog_cc_c89" != "xno" && break
 done
@@ -4125,17 +4339,19 @@ fi
 # AC_CACHE_VAL
 case "x$ac_cv_prog_cc_c89" in
   x)
-    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
 $as_echo "none needed" >&6; } ;;
   xno)
-    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+    { $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:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+    { $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'
@@ -4145,9 +4361,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 depcc="$CC"   am_compiler_list=
 
-{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+{ $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
+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
@@ -4255,7 +4471,7 @@ else
 fi
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+{ $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
 
@@ -4270,109 +4486,17 @@ else
 fi
 
 
-# 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:$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:$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'
 
 case `pwd` in
   *\ * | *\	*)
-    { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+    { $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.6'
-macro_revision='1.3012'
+macro_version='2.2.6b'
+macro_revision='1.3017'
 
 
 
@@ -4390,35 +4514,27 @@ ltmain="$ac_aux_dir/ltmain.sh"
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
-{ $as_echo "$as_me:$LINENO: checking build system type" >&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
+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_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-   { (exit 1); exit 1; }; }
+  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_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-$as_echo "$as_me: error: invalid value of canonical build" >&2;}
-   { (exit 1); exit 1; }; };;
+*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -4434,28 +4550,24 @@ IFS=$ac_save_IFS
 case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 
-{ $as_echo "$as_me:$LINENO: checking host system type" >&5
+{ $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
+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_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-$as_echo "$as_me: error: invalid value of canonical host" >&2;}
-   { (exit 1); exit 1; }; };;
+*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -4471,9 +4583,9 @@ IFS=$ac_save_IFS
 case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
-{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+{ $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
+if test "${ac_cv_path_SED+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -4481,7 +4593,7 @@ else
        ac_script="$ac_script$as_nl$ac_script"
      done
      echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
-     $as_unset ac_script || ac_script=
+     { 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
@@ -4490,7 +4602,7 @@ 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_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
@@ -4510,7 +4622,7 @@ case `"$ac_path_SED" --version 2>&1` in
     $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
-    ac_count=`expr $ac_count + 1`
+    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"
@@ -4525,19 +4637,17 @@ esac
       $ac_path_SED_found && break 3
     done
   done
-done
+  done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_SED"; then
-    { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5
-$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
+    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:$LINENO: result: $ac_cv_path_SED" >&5
+{ $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
@@ -4555,9 +4665,9 @@ Xsed="$SED -e 1s/^X//"
 
 
 
-{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+{ $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
+if test "${ac_cv_path_GREP+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -4568,7 +4678,7 @@ 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_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
@@ -4588,7 +4698,7 @@ case `"$ac_path_GREP" --version 2>&1` in
     $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
-    ac_count=`expr $ac_count + 1`
+    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"
@@ -4603,26 +4713,24 @@ esac
       $ac_path_GREP_found && break 3
     done
   done
-done
+  done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_GREP"; then
-    { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
+    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:$LINENO: result: $ac_cv_path_GREP" >&5
+{ $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:$LINENO: checking for egrep" >&5
+{ $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
+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
@@ -4636,7 +4744,7 @@ 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_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
@@ -4656,7 +4764,7 @@ case `"$ac_path_EGREP" --version 2>&1` in
     $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
-    ac_count=`expr $ac_count + 1`
+    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"
@@ -4671,12 +4779,10 @@ esac
       $ac_path_EGREP_found && break 3
     done
   done
-done
+  done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_EGREP"; then
-    { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
+    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
@@ -4684,14 +4790,14 @@ fi
 
    fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+{ $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:$LINENO: checking for fgrep" >&5
+{ $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
+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
@@ -4705,7 +4811,7 @@ 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_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
@@ -4725,7 +4831,7 @@ case `"$ac_path_FGREP" --version 2>&1` in
     $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
-    ac_count=`expr $ac_count + 1`
+    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"
@@ -4740,12 +4846,10 @@ esac
       $ac_path_FGREP_found && break 3
     done
   done
-done
+  done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_FGREP"; then
-    { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
+    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
@@ -4753,7 +4857,7 @@ fi
 
    fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5
+{ $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"
 
@@ -4779,7 +4883,7 @@ test -z "$GREP" && GREP=grep
 
 
 # Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
+if test "${with_gnu_ld+set}" = set; then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
 else
   with_gnu_ld=no
@@ -4788,7 +4892,7 @@ fi
 ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+  { $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*)
@@ -4818,13 +4922,13 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
     ;;
   esac
 elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
+  { $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:$LINENO: checking for non-GNU ld" >&5
+  { $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
+if test "${lt_cv_path_LD+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -4855,18 +4959,16 @@ fi
 
 LD="$lt_cv_path_LD"
 if test -n "$LD"; then
-  { $as_echo "$as_me:$LINENO: result: $LD" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&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
+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.
@@ -4879,7 +4981,7 @@ case `$LD -v 2>&1 </dev/null` in
   ;;
 esac
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
 $as_echo "$lt_cv_prog_gnu_ld" >&6; }
 with_gnu_ld=$lt_cv_prog_gnu_ld
 
@@ -4891,9 +4993,9 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
 
-{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+{ $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
+if test "${lt_cv_path_NM+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NM"; then
@@ -4940,7 +5042,7 @@ else
   : ${lt_cv_path_NM=no}
 fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+{ $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"
@@ -4951,9 +5053,9 @@ else
   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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DUMPBIN"; then
@@ -4964,24 +5066,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 DUMPBIN=$ac_cv_prog_DUMPBIN
 if test -n "$DUMPBIN"; then
-  { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
 $as_echo "$DUMPBIN" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -4995,9 +5097,9 @@ if test -z "$DUMPBIN"; then
 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DUMPBIN"; then
@@ -5008,24 +5110,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_DUMPBIN" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
 $as_echo "$ac_ct_DUMPBIN" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5038,7 +5140,7 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -5058,44 +5160,44 @@ test -z "$NM" && NM=nm
 
 
 
-{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+{ $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
+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:5068: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:5170: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5071: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:5173: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5074: output\"" >&5)
+  (eval echo "\"\$as_me:5176: 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:$LINENO: result: $lt_cv_nm_interface" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
 $as_echo "$lt_cv_nm_interface" >&6; }
 
-{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5
+{ $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:$LINENO: result: yes" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+  { $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:$LINENO: checking the maximum length of command line arguments" >&5
+{ $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
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
     i=0
@@ -5213,10 +5315,10 @@ else
 fi
 
 if test -n $lt_cv_sys_max_cmd_len ; then
-  { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+  { $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:$LINENO: result: none" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
 $as_echo "none" >&6; }
 fi
 max_cmd_len=$lt_cv_sys_max_cmd_len
@@ -5230,7 +5332,7 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
 : ${MV="mv -f"}
 : ${RM="rm -f"}
 
-{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+{ $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
@@ -5240,17 +5342,17 @@ xsi_shell=no
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
-{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
 $as_echo "$xsi_shell" >&6; }
 
 
-{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+{ $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:$LINENO: result: $lt_shell_append" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
 $as_echo "$lt_shell_append" >&6; }
 
 
@@ -5285,14 +5387,14 @@ esac
 
 
 
-{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+{ $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
+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:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+{ $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
@@ -5321,9 +5423,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJDUMP"; then
@@ -5334,24 +5436,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 OBJDUMP=$ac_cv_prog_OBJDUMP
 if test -n "$OBJDUMP"; then
-  { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
 $as_echo "$OBJDUMP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5361,9 +5463,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJDUMP"; then
@@ -5374,24 +5476,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_OBJDUMP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
 $as_echo "$ac_ct_OBJDUMP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5400,7 +5502,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -5420,9 +5522,9 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
 
 
 
-{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+{ $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
+if test "${lt_cv_deplibs_check_method+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_file_magic_cmd='$MAGIC_CMD'
@@ -5616,7 +5718,7 @@ tpf*)
 esac
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+{ $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
@@ -5636,9 +5738,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_AR+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AR"; then
@@ -5649,24 +5751,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 AR=$ac_cv_prog_AR
 if test -n "$AR"; then
-  { $as_echo "$as_me:$LINENO: result: $AR" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
 $as_echo "$AR" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5676,9 +5778,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AR"; then
@@ -5689,24 +5791,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_AR" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
 $as_echo "$ac_ct_AR" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5715,7 +5817,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -5741,9 +5843,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_STRIP+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -5754,24 +5856,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 STRIP=$ac_cv_prog_STRIP
 if test -n "$STRIP"; then
-  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
 $as_echo "$STRIP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5781,9 +5883,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -5794,24 +5896,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_STRIP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
 $as_echo "$ac_ct_STRIP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5820,7 +5922,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -5840,9 +5942,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -5853,24 +5955,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
 $as_echo "$RANLIB" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5880,9 +5982,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -5893,24 +5995,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_RANLIB" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
 $as_echo "$ac_ct_RANLIB" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5919,7 +6021,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -5997,9 +6099,9 @@ compiler=$CC
 
 
 # Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+{ $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
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -6115,18 +6217,18 @@ void nm_test_func(void){}
 int main(){nm_test_var='a';nm_test_func();return(0);}
 _LT_EOF
 
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $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:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+    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:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s "$nlist"; then
+  $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"
@@ -6179,11 +6281,11 @@ _LT_EOF
 	  lt_save_CFLAGS="$CFLAGS"
 	  LIBS="conftstm.$ac_objext"
 	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
-	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+  $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"
@@ -6217,10 +6319,10 @@ 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:$LINENO: result: failed" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
 $as_echo "failed" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: ok" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
 $as_echo "ok" >&6; }
 fi
 
@@ -6247,7 +6349,7 @@ fi
 
 
 # Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then
+if test "${enable_libtool_lock+set}" = set; then :
   enableval=$enable_libtool_lock;
 fi
 
@@ -6259,11 +6361,11 @@ case $host in
 ia64-*-hpux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $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"
@@ -6277,12 +6379,12 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 6280 "configure"' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  echo '#line 6382 "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:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $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*)
@@ -6316,11 +6418,11 @@ 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:$LINENO: \"$ac_compile\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $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
@@ -6369,9 +6471,9 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -belf"
-  { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+  { $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
+if test "${lt_cv_cc_needs_belf+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_ext=c
@@ -6380,11 +6482,7 @@ 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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -6395,38 +6493,13 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_c_try_link "$LINENO"; then :
   lt_cv_cc_needs_belf=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	lt_cv_cc_needs_belf=no
+  lt_cv_cc_needs_belf=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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'
@@ -6434,7 +6507,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+{ $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
@@ -6444,11 +6517,11 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
 sparc*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $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
@@ -6474,9 +6547,9 @@ need_locks="$enable_libtool_lock"
     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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DSYMUTIL"; then
@@ -6487,24 +6560,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 DSYMUTIL=$ac_cv_prog_DSYMUTIL
 if test -n "$DSYMUTIL"; then
-  { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
 $as_echo "$DSYMUTIL" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6514,9 +6587,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DSYMUTIL"; then
@@ -6527,24 +6600,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_DSYMUTIL" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
 $as_echo "$ac_ct_DSYMUTIL" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6553,7 +6626,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -6566,9 +6639,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_NMEDIT+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NMEDIT"; then
@@ -6579,24 +6652,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 NMEDIT=$ac_cv_prog_NMEDIT
 if test -n "$NMEDIT"; then
-  { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
 $as_echo "$NMEDIT" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6606,9 +6679,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_NMEDIT"; then
@@ -6619,24 +6692,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_NMEDIT" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
 $as_echo "$ac_ct_NMEDIT" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6645,7 +6718,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -6658,9 +6731,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_LIPO+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$LIPO"; then
@@ -6671,24 +6744,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 LIPO=$ac_cv_prog_LIPO
 if test -n "$LIPO"; then
-  { $as_echo "$as_me:$LINENO: result: $LIPO" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
 $as_echo "$LIPO" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6698,9 +6771,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_LIPO"; then
@@ -6711,24 +6784,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_LIPO" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
 $as_echo "$ac_ct_LIPO" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6737,7 +6810,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -6750,9 +6823,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_OTOOL+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL"; then
@@ -6763,24 +6836,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 OTOOL=$ac_cv_prog_OTOOL
 if test -n "$OTOOL"; then
-  { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
 $as_echo "$OTOOL" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6790,9 +6863,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL"; then
@@ -6803,24 +6876,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_OTOOL" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
 $as_echo "$ac_ct_OTOOL" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6829,7 +6902,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -6842,9 +6915,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_OTOOL64+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL64"; then
@@ -6855,24 +6928,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 OTOOL64=$ac_cv_prog_OTOOL64
 if test -n "$OTOOL64"; then
-  { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
 $as_echo "$OTOOL64" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6882,9 +6955,9 @@ 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL64"; then
@@ -6895,24 +6968,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_OTOOL64" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
 $as_echo "$ac_ct_OTOOL64" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6921,7 +6994,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -6957,9 +7030,9 @@ fi
 
 
 
-    { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
+    { $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
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
@@ -6984,22 +7057,18 @@ else
 	rm -f conftest.*
       fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
+{ $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:$LINENO: checking for -exported_symbols_list linker flag" >&5
+    { $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
+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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -7010,42 +7079,17 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_c_try_link "$LINENO"; then :
   lt_cv_ld_exported_symbols_list=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	lt_cv_ld_exported_symbols_list=no
+  lt_cv_ld_exported_symbols_list=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 	LDFLAGS="$save_LDFLAGS"
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
+{ $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])
@@ -7087,14 +7131,14 @@ 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:$LINENO: checking how to run the C preprocessor" >&5
+{ $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
+  if test "${ac_cv_prog_CPP+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -7109,11 +7153,7 @@ do
   # <limits.h> 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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -7122,78 +7162,34 @@ cat >>conftest.$ac_ext <<_ACEOF
 #endif
 		     Syntax error
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
+if $ac_preproc_ok; then :
   break
 fi
 
@@ -7205,7 +7201,7 @@ fi
 else
   ac_cv_prog_CPP=$CPP
 fi
-{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
+{ $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
@@ -7216,11 +7212,7 @@ do
   # <limits.h> 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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -7229,87 +7221,40 @@ cat >>conftest.$ac_ext <<_ACEOF
 #endif
 		     Syntax error
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
+if $ac_preproc_ok; then :
+
 else
-  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+  { { $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:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }; }
+as_fn_error "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -7319,16 +7264,12 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+{ $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
+if test "${ac_cv_header_stdc+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 #include <stdarg.h>
@@ -7343,48 +7284,23 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_header_stdc=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_header_stdc=no
+  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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <string.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -7394,18 +7310,14 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
+  $EGREP "free" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -7415,14 +7327,10 @@ 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
+  if test "$cross_compiling" = yes; then :
   :
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ctype.h>
 #include <stdlib.h>
@@ -7449,118 +7357,34 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-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
+if ac_fn_c_try_run "$LINENO"; then :
 
-( exit $ac_status )
-ac_cv_header_stdc=no
+else
+  ac_cv_header_stdc=no
 fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+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:$LINENO: result: $ac_cv_header_stdc" >&5
+{ $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
 
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
+$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`
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "$as_ac_Header=yes"
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-as_val=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-   if test "x$as_val" = x""yes; then
+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 :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -7570,62 +7394,13 @@ fi
 done
 
 
-
 for ac_header in dlfcn.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "$as_ac_Header=yes"
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-as_val=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-   if test "x$as_val" = x""yes; then
+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 `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_DLFCN_H 1
 _ACEOF
 
 fi
@@ -7648,9 +7423,9 @@ if test -z "$CXX"; then
   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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_CXX+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CXX"; then
@@ -7661,24 +7436,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CXX=$ac_cv_prog_CXX
 if test -n "$CXX"; then
-  { $as_echo "$as_me:$LINENO: result: $CXX" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
 $as_echo "$CXX" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7692,9 +7467,9 @@ if test -z "$CXX"; then
 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:$LINENO: checking for $ac_word" >&5
+{ $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
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CXX"; then
@@ -7705,24 +7480,24 @@ 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
+    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:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-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:$LINENO: result: $ac_ct_CXX" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
 $as_echo "$ac_ct_CXX" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7735,7 +7510,7 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $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
@@ -7746,53 +7521,36 @@ fi
   fi
 fi
 # Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
 set X $ac_compile
 ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler --version >&5") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
+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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler -v >&5") 2>&5
+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=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler -V >&5") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $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:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+{ $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
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -7806,37 +7564,16 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_compiler_gnu=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_compiler_gnu=no
+  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:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+{ $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
@@ -7845,20 +7582,16 @@ else
 fi
 ac_test_CXXFLAGS=${CXXFLAGS+set}
 ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+{ $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
+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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -7869,35 +7602,11 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_cv_prog_cxx_g=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	CXXFLAGS=""
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -7908,36 +7617,12 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_cxx_try_compile "$LINENO"; then :
 
-	ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
 	 CXXFLAGS="-g"
-	 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -7948,42 +7633,17 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_cv_prog_cxx_g=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 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:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+{ $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
@@ -8008,9 +7668,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 depcc="$CXX"  am_compiler_list=
 
-{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+{ $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
+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
@@ -8118,7 +7778,7 @@ else
 fi
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+{ $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
 
@@ -8141,10 +7801,10 @@ 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:$LINENO: checking how to run the C++ preprocessor" >&5
+{ $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
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CXXCPP needs to be expanded
@@ -8159,11 +7819,7 @@ do
   # <limits.h> 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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -8172,78 +7828,34 @@ cat >>conftest.$ac_ext <<_ACEOF
 #endif
 		     Syntax error
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_cxx_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_cxx_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
+if $ac_preproc_ok; then :
   break
 fi
 
@@ -8255,7 +7867,7 @@ fi
 else
   ac_cv_prog_CXXCPP=$CXXCPP
 fi
-{ $as_echo "$as_me:$LINENO: result: $CXXCPP" >&5
+{ $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
@@ -8266,11 +7878,7 @@ do
   # <limits.h> 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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -8279,81 +7887,37 @@ cat >>conftest.$ac_ext <<_ACEOF
 #endif
 		     Syntax error
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_cxx_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_cxx_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
+if $ac_preproc_ok; then :
+
 else
-  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+  { { $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
@@ -8383,7 +7947,7 @@ fi
 
 
             # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then
+if test "${enable_shared+set}" = set; then :
   enableval=$enable_shared; p=${PACKAGE-default}
     case $enableval in
     yes) enable_shared=yes ;;
@@ -8414,7 +7978,7 @@ fi
 
 
   # Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then
+if test "${enable_static+set}" = set; then :
   enableval=$enable_static; p=${PACKAGE-default}
     case $enableval in
     yes) enable_static=yes ;;
@@ -8446,7 +8010,7 @@ fi
 
 
 # Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then
+if test "${with_pic+set}" = set; then :
   withval=$with_pic; pic_mode="$withval"
 else
   pic_mode=default
@@ -8462,7 +8026,7 @@ test -z "$pic_mode" && pic_mode=default
 
 
   # Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then
+if test "${enable_fast_install+set}" = set; then :
   enableval=$enable_fast_install; p=${PACKAGE-default}
     case $enableval in
     yes) enable_fast_install=yes ;;
@@ -8543,9 +8107,9 @@ if test -n "${ZSH_VERSION+set}" ; then
    setopt NO_GLOB_SUBST
 fi
 
-{ $as_echo "$as_me:$LINENO: checking for objdir" >&5
+{ $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
+if test "${lt_cv_objdir+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f .libs 2>/dev/null
@@ -8558,7 +8122,7 @@ else
 fi
 rmdir .libs 2>/dev/null
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
 $as_echo "$lt_cv_objdir" >&6; }
 objdir=$lt_cv_objdir
 
@@ -8651,9 +8215,9 @@ 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:$LINENO: checking for ${ac_tool_prefix}file" >&5
+    { $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
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -8704,10 +8268,10 @@ fi
 
 MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
 if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
 $as_echo "$MAGIC_CMD" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -8717,9 +8281,9 @@ fi
 
 if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
-    { $as_echo "$as_me:$LINENO: checking for file" >&5
+    { $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
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -8770,10 +8334,10 @@ fi
 
 MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
 if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
 $as_echo "$MAGIC_CMD" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -8843,6 +8407,10 @@ _lt_linker_boilerplate=`cat conftest.err`
 $RM -r conftest*
 
 
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
 if test -n "$compiler"; then
 
 lt_prog_compiler_no_builtin_flag=
@@ -8850,9 +8418,9 @@ lt_prog_compiler_no_builtin_flag=
 if test "$GCC" = yes; then
   lt_prog_compiler_no_builtin_flag=' -fno-builtin'
 
-  { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+  { $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
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_rtti_exceptions=no
@@ -8868,11 +8436,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:8871: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8439: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8875: \$? = $ac_status" >&5
+   echo "$as_me:8443: \$? = $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.
@@ -8885,7 +8453,7 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+{ $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
@@ -8905,7 +8473,7 @@ fi
 lt_prog_compiler_pic=
 lt_prog_compiler_static=
 
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+{ $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
@@ -9177,7 +8745,7 @@ case $host_os in
     lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
 $as_echo "$lt_prog_compiler_pic" >&6; }
 
 
@@ -9189,9 +8757,9 @@ $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:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+  { $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
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works=no
@@ -9207,11 +8775,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:9210: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8778: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9214: \$? = $ac_status" >&5
+   echo "$as_me:8782: \$? = $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.
@@ -9224,7 +8792,7 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
+{ $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
@@ -9248,9 +8816,9 @@ 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:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+{ $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
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
@@ -9276,7 +8844,7 @@ else
    LDFLAGS="$save_LDFLAGS"
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
+{ $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
@@ -9291,9 +8859,9 @@ fi
 
 
 
-  { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+  { $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
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -9312,11 +8880,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:9315: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8883: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9319: \$? = $ac_status" >&5
+   echo "$as_me:8887: \$? = $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
@@ -9338,7 +8906,7 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
 $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
 
@@ -9346,9 +8914,9 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
 
 
-  { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+  { $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
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -9367,11 +8935,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:9370: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8938: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9374: \$? = $ac_status" >&5
+   echo "$as_me:8942: \$? = $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
@@ -9393,7 +8961,7 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
 $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
 
@@ -9402,7 +8970,7 @@ $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:$LINENO: checking if we can lock with hard links" >&5
+  { $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*
@@ -9410,10 +8978,10 @@ $as_echo_n "checking if we can lock with hard links... " >&6; }
   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:$LINENO: result: $hard_links" >&5
+  { $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:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+    { $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
@@ -9426,7 +8994,7 @@ fi
 
 
 
-  { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+  { $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=
@@ -9868,11 +9436,7 @@ _LT_EOF
 	allow_undefined_flag='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -9883,27 +9447,7 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_c_try_link "$LINENO"; then :
 
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
@@ -9917,16 +9461,9 @@ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpat
 if test -z "$aix_libpath"; then
   aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
 fi
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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"
@@ -9939,11 +9476,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
-	 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -9954,27 +9487,7 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_c_try_link "$LINENO"; then :
 
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
@@ -9988,16 +9501,9 @@ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpat
 if test -z "$aix_libpath"; then
   aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
 fi
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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"
@@ -10209,42 +9715,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	# implicitly export all symbols.
         save_LDFLAGS="$LDFLAGS"
         LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        cat >conftest.$ac_ext <<_ACEOF
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 int foo(void) {}
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+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'
 
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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'
@@ -10500,7 +9980,7 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
     fi
   fi
 
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
 $as_echo "$ld_shlibs" >&6; }
 test "$ld_shlibs" = no && can_build_shared=no
 
@@ -10537,16 +10017,16 @@ x|xyes)
       # 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:$LINENO: checking whether -lc should be explicitly linked in" >&5
+      { $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:$LINENO: \"$ac_compile\"") >&5
+      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } 2>conftest.err; then
+  $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
@@ -10560,11 +10040,11 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
         libname=conftest
         lt_save_allow_undefined_flag=$allow_undefined_flag
         allow_undefined_flag=
-        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+        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:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
         then
 	  archive_cmds_need_lc=no
         else
@@ -10575,7 +10055,7 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
         cat conftest.err 1>&5
       fi
       $RM conftest*
-      { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
 $as_echo "$archive_cmds_need_lc" >&6; }
       ;;
     esac
@@ -10739,7 +10219,7 @@ esac
 
 
 
-  { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+  { $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
@@ -11161,11 +10641,7 @@ linux* | k*bsd*-gnu)
   save_libdir=$libdir
   eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
        LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -11176,41 +10652,13 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
-  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
+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
-
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
   LDFLAGS=$save_LDFLAGS
   libdir=$save_libdir
 
@@ -11219,10 +10667,13 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
   # before this can be enabled.
   hardcode_into_libs=yes
 
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
   # 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"
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
   fi
 
   # We used to test for /lib/ld.so.1 and disable shared libraries on
@@ -11422,7 +10873,7 @@ uts4*)
   dynamic_linker=no
   ;;
 esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
 $as_echo "$dynamic_linker" >&6; }
 test "$dynamic_linker" = no && can_build_shared=no
 
@@ -11524,7 +10975,7 @@ fi
 
 
 
-  { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+  { $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" ||
@@ -11549,7 +11000,7 @@ else
   # directories.
   hardcode_action=unsupported
 fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
 $as_echo "$hardcode_action" >&6; }
 
 if test "$hardcode_action" = relink ||
@@ -11594,18 +11045,14 @@ else
 
   darwin*)
   # if libdl is installed we need to link against it
-    { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+    { $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
+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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -11623,43 +11070,18 @@ return dlopen ();
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_dl_dlopen=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_dl_dlopen=no
+  ac_cv_lib_dl_dlopen=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+{ $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
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
 
@@ -11672,106 +11094,18 @@ fi
     ;;
 
   *)
-    { $as_echo "$as_me:$LINENO: checking for shl_load" >&5
-$as_echo_n "checking for shl_load... " >&6; }
-if test "${ac_cv_func_shl_load+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define shl_load innocuous_shl_load
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char shl_load (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef shl_load
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_shl_load || defined __stub___shl_load
-choke me
-#endif
-
-int
-main ()
-{
-return shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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_cv_func_shl_load=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_shl_load=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-$as_echo "$ac_cv_func_shl_load" >&6; }
-if test "x$ac_cv_func_shl_load" = x""yes; then
+    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:$LINENO: checking for shl_load in -ldld" >&5
+  { $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
+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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -11789,145 +11123,32 @@ return shl_load ();
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_dld_shl_load=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_dld_shl_load=no
+  ac_cv_lib_dld_shl_load=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+{ $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
+if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
   lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
 else
-  { $as_echo "$as_me:$LINENO: checking for dlopen" >&5
-$as_echo_n "checking for dlopen... " >&6; }
-if test "${ac_cv_func_dlopen+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define dlopen innocuous_dlopen
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char dlopen (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef dlopen
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_dlopen || defined __stub___dlopen
-choke me
-#endif
-
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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_cv_func_dlopen=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_dlopen=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-$as_echo "$ac_cv_func_dlopen" >&6; }
-if test "x$ac_cv_func_dlopen" = x""yes; then
+  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:$LINENO: checking for dlopen in -ldl" >&5
+  { $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
+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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -11945,57 +11166,28 @@ return dlopen ();
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_dl_dlopen=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_dl_dlopen=no
+  ac_cv_lib_dl_dlopen=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+{ $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
+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:$LINENO: checking for dlopen in -lsvld" >&5
+  { $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
+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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -12013,57 +11205,28 @@ return dlopen ();
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_svld_dlopen=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_svld_dlopen=no
+  ac_cv_lib_svld_dlopen=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+{ $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
+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:$LINENO: checking for dld_link in -ldld" >&5
+  { $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
+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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -12081,43 +11244,18 @@ return dld_link ();
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_dld_dld_link=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_dld_dld_link=no
+  ac_cv_lib_dld_dld_link=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+{ $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
+if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
 fi
 
@@ -12156,9 +11294,9 @@ fi
     save_LIBS="$LIBS"
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
-    { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+    { $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
+if test "${lt_cv_dlopen_self+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   	  if test "$cross_compiling" = yes; then :
@@ -12167,7 +11305,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12170 "configure"
+#line 11308 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12226,11 +11364,11 @@ int main ()
   return status;
 }
 _LT_EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+  $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
@@ -12247,14 +11385,14 @@ rm -fr conftest*
 
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+{ $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:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+      { $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
+if test "${lt_cv_dlopen_self_static+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   	  if test "$cross_compiling" = yes; then :
@@ -12263,7 +11401,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12266 "configure"
+#line 11404 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12322,11 +11460,11 @@ int main ()
   return status;
 }
 _LT_EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+  $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
@@ -12343,7 +11481,7 @@ rm -fr conftest*
 
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
 $as_echo "$lt_cv_dlopen_self_static" >&6; }
     fi
 
@@ -12382,12 +11520,12 @@ fi
 
 striplib=
 old_striplib=
-{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+{ $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:$LINENO: result: yes" >&5
+  { $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
@@ -12396,15 +11534,15 @@ else
     if test -n "$STRIP" ; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
-      { $as_echo "$as_me:$LINENO: result: yes" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
     else
-      { $as_echo "$as_me:$LINENO: result: no" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
     fi
     ;;
   *)
-    { $as_echo "$as_me:$LINENO: result: no" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
     ;;
   esac
@@ -12422,12 +11560,12 @@ fi
 
 
   # Report which library types will actually be built
-  { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+  { $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:$LINENO: result: $can_build_shared" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
 $as_echo "$can_build_shared" >&6; }
 
-  { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+  { $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
 
@@ -12448,14 +11586,14 @@ $as_echo_n "checking whether to build shared libraries... " >&6; }
     fi
     ;;
   esac
-  { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
 $as_echo "$enable_shared" >&6; }
 
-  { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+  { $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:$LINENO: result: $enable_static" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
 $as_echo "$enable_static" >&6; }
 
 
@@ -12596,7 +11734,7 @@ cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
 
 
 # Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
+if test "${with_gnu_ld+set}" = set; then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
 else
   with_gnu_ld=no
@@ -12605,7 +11743,7 @@ fi
 ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+  { $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*)
@@ -12635,13 +11773,13 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
     ;;
   esac
 elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
+  { $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:$LINENO: checking for non-GNU ld" >&5
+  { $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
+if test "${lt_cv_path_LD+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -12672,18 +11810,16 @@ fi
 
 LD="$lt_cv_path_LD"
 if test -n "$LD"; then
-  { $as_echo "$as_me:$LINENO: result: $LD" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&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
+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.
@@ -12696,7 +11832,7 @@ case `$LD -v 2>&1 </dev/null` in
   ;;
 esac
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
 $as_echo "$lt_cv_prog_gnu_ld" >&6; }
 with_gnu_ld=$lt_cv_prog_gnu_ld
 
@@ -12751,7 +11887,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
     fi
 
     # PORTME: fill in a description of your system's C++ link characteristics
-    { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+    { $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
@@ -12852,11 +11988,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
           allow_undefined_flag_CXX='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -12867,27 +11999,7 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_cxx_try_link "$LINENO"; then :
 
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
@@ -12901,16 +12013,9 @@ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpat
 if test -z "$aix_libpath"; then
   aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
 fi
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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"
@@ -12924,11 +12029,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
           else
 	    # Determine the default libpath from the value encoded in an
 	    # empty executable.
-	    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -12939,27 +12040,7 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_cxx_try_link "$LINENO"; then :
 
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
@@ -12973,16 +12054,9 @@ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpat
 if test -z "$aix_libpath"; then
   aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
 fi
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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"
@@ -13726,7 +12800,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
     esac
 
-    { $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+    { $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
 
@@ -13754,11 +12828,11 @@ private:
 };
 _LT_EOF
 
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $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.
 
@@ -13939,7 +13013,7 @@ fi
 lt_prog_compiler_pic_CXX=
 lt_prog_compiler_static_CXX=
 
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+{ $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.
@@ -14256,7 +13330,7 @@ case $host_os in
     lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
 $as_echo "$lt_prog_compiler_pic_CXX" >&6; }
 
 
@@ -14265,9 +13339,9 @@ $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:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+  { $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
+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
@@ -14283,11 +13357,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:14286: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13360: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:14290: \$? = $ac_status" >&5
+   echo "$as_me:13364: \$? = $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.
@@ -14300,7 +13374,7 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+{ $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
@@ -14321,9 +13395,9 @@ 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:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+{ $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
+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
@@ -14349,7 +13423,7 @@ else
    LDFLAGS="$save_LDFLAGS"
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+{ $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
@@ -14361,9 +13435,9 @@ fi
 
 
 
-    { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+    { $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
+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
@@ -14382,11 +13456,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:14385: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13459: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14389: \$? = $ac_status" >&5
+   echo "$as_me:13463: \$? = $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
@@ -14408,14 +13482,14 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+{ $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:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+    { $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
+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
@@ -14434,11 +13508,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:14437: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13511: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:14441: \$? = $ac_status" >&5
+   echo "$as_me:13515: \$? = $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
@@ -14460,7 +13534,7 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+{ $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; }
 
 
@@ -14469,7 +13543,7 @@ $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:$LINENO: checking if we can lock with hard links" >&5
+  { $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*
@@ -14477,10 +13551,10 @@ $as_echo_n "checking if we can lock with hard links... " >&6; }
   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:$LINENO: result: $hard_links" >&5
+  { $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:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+    { $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
@@ -14490,7 +13564,7 @@ fi
 
 
 
-    { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+    { $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'
@@ -14516,7 +13590,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   esac
   exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
 
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+{ $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
 
@@ -14544,16 +13618,16 @@ x|xyes)
       # 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:$LINENO: checking whether -lc should be explicitly linked in" >&5
+      { $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:$LINENO: \"$ac_compile\"") >&5
+      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } 2>conftest.err; then
+  $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
@@ -14567,11 +13641,11 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
         libname=conftest
         lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
         allow_undefined_flag_CXX=
-        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+        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:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
         then
 	  archive_cmds_need_lc_CXX=no
         else
@@ -14582,7 +13656,7 @@ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
         cat conftest.err 1>&5
       fi
       $RM conftest*
-      { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
 $as_echo "$archive_cmds_need_lc_CXX" >&6; }
       ;;
     esac
@@ -14653,7 +13727,7 @@ esac
 
 
 
-    { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
 library_names_spec=
@@ -15023,11 +14097,7 @@ linux* | k*bsd*-gnu)
   save_libdir=$libdir
   eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
        LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -15038,41 +14108,13 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
-  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
+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
-
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
   LDFLAGS=$save_LDFLAGS
   libdir=$save_libdir
 
@@ -15081,10 +14123,13 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
   # before this can be enabled.
   hardcode_into_libs=yes
 
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
   # 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"
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
   fi
 
   # We used to test for /lib/ld.so.1 and disable shared libraries on
@@ -15284,7 +14329,7 @@ uts4*)
   dynamic_linker=no
   ;;
 esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
 $as_echo "$dynamic_linker" >&6; }
 test "$dynamic_linker" = no && can_build_shared=no
 
@@ -15335,7 +14380,7 @@ fi
 
 
 
-    { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+    { $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" ||
@@ -15360,7 +14405,7 @@ else
   # directories.
   hardcode_action_CXX=unsupported
 fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
 $as_echo "$hardcode_action_CXX" >&6; }
 
 if test "$hardcode_action_CXX" = relink ||
@@ -15420,18 +14465,379 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 # Checks for libraries.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cvGetRows in -lcv" >&5
+$as_echo_n "checking for cvGetRows in -lcv... " >&6; }
+if test "${ac_cv_lib_cv_cvGetRows+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcv  $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 cvGetRows ();
+int
+main ()
+{
+return cvGetRows ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_cv_cvGetRows=yes
+else
+  ac_cv_lib_cv_cvGetRows=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_cv_cvGetRows" >&5
+$as_echo "$ac_cv_lib_cv_cvGetRows" >&6; }
+if test "x$ac_cv_lib_cv_cvGetRows" = x""yes; then :
+  CVFOUND=1
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Set_Mercator_Coordinates in -lgeotrans" >&5
+$as_echo_n "checking for Set_Mercator_Coordinates in -lgeotrans... " >&6; }
+if test "${ac_cv_lib_geotrans_Set_Mercator_Coordinates+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgeotrans  $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 Set_Mercator_Coordinates ();
+int
+main ()
+{
+return Set_Mercator_Coordinates ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_geotrans_Set_Mercator_Coordinates=yes
+else
+  ac_cv_lib_geotrans_Set_Mercator_Coordinates=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_geotrans_Set_Mercator_Coordinates" >&5
+$as_echo "$ac_cv_lib_geotrans_Set_Mercator_Coordinates" >&6; }
+if test "x$ac_cv_lib_geotrans_Set_Mercator_Coordinates" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGEOTRANS 1
+_ACEOF
+
+  LIBS="-lgeotrans $LIBS"
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_execute in -lfftw3" >&5
+$as_echo_n "checking for fftw_execute in -lfftw3... " >&6; }
+if test "${ac_cv_lib_fftw3_fftw_execute+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfftw3  $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 fftw_execute ();
+int
+main ()
+{
+return fftw_execute ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_fftw3_fftw_execute=yes
+else
+  ac_cv_lib_fftw3_fftw_execute=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_fftw3_fftw_execute" >&5
+$as_echo "$ac_cv_lib_fftw3_fftw_execute" >&6; }
+if test "x$ac_cv_lib_fftw3_fftw_execute" = x""yes; then :
+  FFTWFOUND=1
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jas_calloc in -ljasper" >&5
+$as_echo_n "checking for jas_calloc in -ljasper... " >&6; }
+if test "${ac_cv_lib_jasper_jas_calloc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ljasper  $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 jas_calloc ();
+int
+main ()
+{
+return jas_calloc ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_jasper_jas_calloc=yes
+else
+  ac_cv_lib_jasper_jas_calloc=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_jasper_jas_calloc" >&5
+$as_echo "$ac_cv_lib_jasper_jas_calloc" >&6; }
+if test "x$ac_cv_lib_jasper_jas_calloc" = x""yes; then :
+  JASPERFOUND=1
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LAS_GetVersion in -llas" >&5
+$as_echo_n "checking for LAS_GetVersion in -llas... " >&6; }
+if test "${ac_cv_lib_las_LAS_GetVersion+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-llas  $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 LAS_GetVersion ();
+int
+main ()
+{
+return LAS_GetVersion ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_las_LAS_GetVersion=yes
+else
+  ac_cv_lib_las_LAS_GetVersion=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_las_LAS_GetVersion" >&5
+$as_echo "$ac_cv_lib_las_LAS_GetVersion" >&6; }
+if test "x$ac_cv_lib_las_LAS_GetVersion" = x""yes; then :
+  LASFOUND=1
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for HPDF_Pages_New in -lhpdf" >&5
+$as_echo_n "checking for HPDF_Pages_New in -lhpdf... " >&6; }
+if test "${ac_cv_lib_hpdf_HPDF_Pages_New+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lhpdf  $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 HPDF_Pages_New ();
+int
+main ()
+{
+return HPDF_Pages_New ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_hpdf_HPDF_Pages_New=yes
+else
+  ac_cv_lib_hpdf_HPDF_Pages_New=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_hpdf_HPDF_Pages_New" >&5
+$as_echo "$ac_cv_lib_hpdf_HPDF_Pages_New" >&6; }
+if test "x$ac_cv_lib_hpdf_HPDF_Pages_New" = x""yes; then :
+  HARUFOUND=1
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLFetch in -lodbc" >&5
+$as_echo_n "checking for SQLFetch in -lodbc... " >&6; }
+if test "${ac_cv_lib_odbc_SQLFetch+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lodbc ODBC \(libodbc\) library not found $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 SQLFetch ();
+int
+main ()
+{
+return SQLFetch ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_odbc_SQLFetch=yes
+else
+  ac_cv_lib_odbc_SQLFetch=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_odbc_SQLFetch" >&5
+$as_echo "$ac_cv_lib_odbc_SQLFetch" >&6; }
+if test "x$ac_cv_lib_odbc_SQLFetch" = x""yes; then :
+  ODBCFOUND=1
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pj_is_latlong in -lproj" >&5
+$as_echo_n "checking for pj_is_latlong in -lproj... " >&6; }
+if test "${ac_cv_lib_proj_pj_is_latlong+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lproj  $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 pj_is_latlong ();
+int
+main ()
+{
+return pj_is_latlong ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_proj_pj_is_latlong=yes
+else
+  ac_cv_lib_proj_pj_is_latlong=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_proj_pj_is_latlong" >&5
+$as_echo "$ac_cv_lib_proj_pj_is_latlong" >&6; }
+if test "x$ac_cv_lib_proj_pj_is_latlong" = x""yes; then :
+  PROJFOUND=1
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for VIGRA_RGBE_ReadPixels_Raw in -lvigraimpex" >&5
+$as_echo_n "checking for VIGRA_RGBE_ReadPixels_Raw in -lvigraimpex... " >&6; }
+if test "${ac_cv_lib_vigraimpex_VIGRA_RGBE_ReadPixels_Raw+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lvigraimpex  $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 VIGRA_RGBE_ReadPixels_Raw ();
+int
+main ()
+{
+return VIGRA_RGBE_ReadPixels_Raw ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_vigraimpex_VIGRA_RGBE_ReadPixels_Raw=yes
+else
+  ac_cv_lib_vigraimpex_VIGRA_RGBE_ReadPixels_Raw=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_vigraimpex_VIGRA_RGBE_ReadPixels_Raw" >&5
+$as_echo "$ac_cv_lib_vigraimpex_VIGRA_RGBE_ReadPixels_Raw" >&6; }
+if test "x$ac_cv_lib_vigraimpex_VIGRA_RGBE_ReadPixels_Raw" = x""yes; then :
+  VIGRAFOUND=1
+fi
+
 
 # Checks for header files.
-{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+{ $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
+if test "${ac_cv_header_stdc+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 #include <stdarg.h>
@@ -15446,48 +14852,23 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_header_stdc=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_header_stdc=no
+  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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <string.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -15497,18 +14878,14 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
+  $EGREP "free" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -15518,14 +14895,10 @@ 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
+  if test "$cross_compiling" = yes; then :
   :
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ctype.h>
 #include <stdlib.h>
@@ -15552,222 +14925,60 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-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
+if ac_fn_c_try_run "$LINENO"; then :
 
-( exit $ac_status )
-ac_cv_header_stdc=no
+else
+  ac_cv_header_stdc=no
 fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+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:$LINENO: result: $ac_cv_header_stdc" >&5
+{ $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
 
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
 
 fi
 
-
-
-
-
-
-
 for ac_header in float.h malloc.h memory.h stdlib.h string.h unistd.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
-$as_echo_n "checking $ac_header usability... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
-$as_echo_n "checking $ac_header presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-  ac_header_preproc=no
 fi
 
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to BUG-REPORT-ADDRESS ##
-## --------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+done
 
-fi
-as_val=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-   if test "x$as_val" = x""yes; then
+for ac_header in wchar.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default"
+if test "x$ac_cv_header_wchar_h" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_WCHAR_H 1
 _ACEOF
 
 fi
 
 done
 
+#todo: check for headers of the libraries above
 
 # Checks for typedefs, structures, and compiler characteristics.
-{ $as_echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
-if test "${ac_cv_header_stdbool_h+set}" = set; then
+if test "${ac_cv_header_stdbool_h+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 #include <stdbool.h>
@@ -15847,131 +15058,17 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_header_stdbool_h=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_header_stdbool_h=no
+  ac_cv_header_stdbool_h=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
 $as_echo "$ac_cv_header_stdbool_h" >&6; }
-{ $as_echo "$as_me:$LINENO: checking for _Bool" >&5
-$as_echo_n "checking for _Bool... " >&6; }
-if test "${ac_cv_type__Bool+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_type__Bool=no
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-if (sizeof (_Bool))
-       return 0;
-  ;
-  return 0;
-}
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-if (sizeof ((_Bool)))
-	  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type__Bool=yes
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5
-$as_echo "$ac_cv_type__Bool" >&6; }
-if test "x$ac_cv_type__Bool" = x""yes; then
+ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+if test "x$ac_cv_type__Bool" = x""yes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE__BOOL 1
@@ -15982,22 +15079,16 @@ fi
 
 if test $ac_cv_header_stdbool_h = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_STDBOOL_H 1
-_ACEOF
+$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then
+if test "${ac_cv_c_const+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -16057,56 +15148,29 @@ main ()
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_c_const=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_c_const=no
+  ac_cv_c_const=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
 $as_echo "$ac_cv_c_const" >&6; }
 if test $ac_cv_c_const = no; then
 
-cat >>confdefs.h <<\_ACEOF
-#define const /**/
-_ACEOF
+$as_echo "#define const /**/" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:$LINENO: checking for inline" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
 $as_echo_n "checking for inline... " >&6; }
-if test "${ac_cv_c_inline+set}" = set; then
+if test "${ac_cv_c_inline+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifndef __cplusplus
 typedef int foo_t;
@@ -16115,41 +15179,17 @@ $ac_kw foo_t foo () {return 0; }
 #endif
 
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_c_inline=$ac_kw
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   test "$ac_cv_c_inline" != no && break
 done
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
 $as_echo "$ac_cv_c_inline" >&6; }
 
-
 case $ac_cv_c_inline in
   inline | yes) ;;
   *)
@@ -16165,102 +15205,9 @@ _ACEOF
     ;;
 esac
 
-{ $as_echo "$as_me:$LINENO: checking for size_t" >&5
-$as_echo_n "checking for size_t... " >&6; }
-if test "${ac_cv_type_size_t+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_type_size_t=no
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-if (sizeof (size_t))
-       return 0;
-  ;
-  return 0;
-}
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-if (sizeof ((size_t)))
-	  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_size_t=yes
-fi
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = x""yes; then :
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
-$as_echo "$ac_cv_type_size_t" >&6; }
-if test "x$ac_cv_type_size_t" = x""yes; then
-  :
 else
 
 cat >>confdefs.h <<_ACEOF
@@ -16269,16 +15216,12 @@ _ACEOF
 
 fi
 
-{ $as_echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
-if test "${ac_cv_struct_tm+set}" = set; then
+if test "${ac_cv_struct_tm+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 #include <time.h>
@@ -16293,210 +15236,44 @@ struct tm tm;
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_struct_tm=time.h
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_struct_tm=sys/time.h
+  ac_cv_struct_tm=sys/time.h
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
 $as_echo "$ac_cv_struct_tm" >&6; }
 if test $ac_cv_struct_tm = sys/time.h; then
 
-cat >>confdefs.h <<\_ACEOF
-#define TM_IN_SYS_TIME 1
-_ACEOF
+$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h
 
 fi
 
 
 # Checks for library functions.
-
 for ac_header in stdlib.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
-$as_echo_n "checking $ac_header usability... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
-$as_echo_n "checking $ac_header presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to BUG-REPORT-ADDRESS ##
-## --------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-
-fi
-as_val=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-   if test "x$as_val" = x""yes; then
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_STDLIB_H 1
 _ACEOF
 
 fi
 
 done
 
-{ $as_echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
 $as_echo_n "checking for GNU libc compatible malloc... " >&6; }
-if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then
+if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   ac_cv_func_malloc_0_nonnull=no
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #if defined STDC_HEADERS || defined HAVE_STDLIB_H
 # include <stdlib.h>
@@ -16512,55 +15289,24 @@ return ! malloc (0);
   return 0;
 }
 _ACEOF
-rm -f 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   ac_cv_func_malloc_0_nonnull=yes
 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
-
-( exit $ac_status )
-ac_cv_func_malloc_0_nonnull=no
+  ac_cv_func_malloc_0_nonnull=no
 fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
-if test $ac_cv_func_malloc_0_nonnull = yes; then
+if test $ac_cv_func_malloc_0_nonnull = yes; then :
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MALLOC 1
-_ACEOF
+$as_echo "#define HAVE_MALLOC 1" >>confdefs.h
 
 else
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_MALLOC 0
-_ACEOF
+  $as_echo "#define HAVE_MALLOC 0" >>confdefs.h
 
    case " $LIBOBJS " in
   *" malloc.$ac_objext "* ) ;;
@@ -16569,27 +15315,20 @@ _ACEOF
 esac
 
 
-cat >>confdefs.h <<\_ACEOF
-#define malloc rpl_malloc
-_ACEOF
+$as_echo "#define malloc rpl_malloc" >>confdefs.h
 
 fi
 
 
-
-{ $as_echo "$as_me:$LINENO: checking for working memcmp" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5
 $as_echo_n "checking for working memcmp... " >&6; }
-if test "${ac_cv_func_memcmp_working+set}" = set; then
+if test "${ac_cv_func_memcmp_working+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   ac_cv_func_memcmp_working=no
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
@@ -16624,44 +15363,17 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   ac_cv_func_memcmp_working=yes
 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
-
-( exit $ac_status )
-ac_cv_func_memcmp_working=no
+  ac_cv_func_memcmp_working=no
 fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5
 $as_echo "$ac_cv_func_memcmp_working" >&6; }
 test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in
   *" memcmp.$ac_objext "* ) ;;
@@ -16670,170 +15382,27 @@ test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in
 esac
 
 
-
 for ac_header in stdlib.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
-$as_echo_n "checking $ac_header usability... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
-$as_echo_n "checking $ac_header presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to BUG-REPORT-ADDRESS ##
-## --------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-
-fi
-as_val=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-   if test "x$as_val" = x""yes; then
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_STDLIB_H 1
 _ACEOF
 
 fi
 
 done
 
-{ $as_echo "$as_me:$LINENO: checking for GNU libc compatible realloc" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5
 $as_echo_n "checking for GNU libc compatible realloc... " >&6; }
-if test "${ac_cv_func_realloc_0_nonnull+set}" = set; then
+if test "${ac_cv_func_realloc_0_nonnull+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   ac_cv_func_realloc_0_nonnull=no
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #if defined STDC_HEADERS || defined HAVE_STDLIB_H
 # include <stdlib.h>
@@ -16849,55 +15418,24 @@ return ! realloc (0, 0);
   return 0;
 }
 _ACEOF
-rm -f 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   ac_cv_func_realloc_0_nonnull=yes
 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
-
-( exit $ac_status )
-ac_cv_func_realloc_0_nonnull=no
+  ac_cv_func_realloc_0_nonnull=no
 fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_realloc_0_nonnull" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5
 $as_echo "$ac_cv_func_realloc_0_nonnull" >&6; }
-if test $ac_cv_func_realloc_0_nonnull = yes; then
+if test $ac_cv_func_realloc_0_nonnull = yes; then :
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_REALLOC 1
-_ACEOF
+$as_echo "#define HAVE_REALLOC 1" >>confdefs.h
 
 else
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_REALLOC 0
-_ACEOF
+  $as_echo "#define HAVE_REALLOC 0" >>confdefs.h
 
    case " $LIBOBJS " in
   *" realloc.$ac_objext "* ) ;;
@@ -16906,37 +15444,30 @@ _ACEOF
 esac
 
 
-cat >>confdefs.h <<\_ACEOF
-#define realloc rpl_realloc
-_ACEOF
+$as_echo "#define realloc rpl_realloc" >>confdefs.h
 
 fi
 
 
-
-{ $as_echo "$as_me:$LINENO: checking whether lstat dereferences a symlink specified with a trailing slash" >&5
-$as_echo_n "checking whether lstat dereferences a symlink specified with a trailing slash... " >&6; }
-if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
+$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
+if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f conftest.sym conftest.file
 echo >conftest.file
 if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   ac_cv_func_lstat_dereferences_slashed_symlink=no
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
 main ()
 {
 struct stat sbuf;
-     /* Linux will dereference the symlink and fail.
+     /* Linux will dereference the symlink and fail, as required by POSIX.
 	That is better in the sense that it means we will not
 	have to compile and use the lstat wrapper.  */
      return lstat ("conftest.sym/", &sbuf) == 0;
@@ -16944,42 +15475,15 @@ struct stat sbuf;
   return 0;
 }
 _ACEOF
-rm -f 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   ac_cv_func_lstat_dereferences_slashed_symlink=yes
 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
-
-( exit $ac_status )
-ac_cv_func_lstat_dereferences_slashed_symlink=no
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
 fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 else
   # If the `ln -s' command failed, then we probably don't even
   # have an lstat function.
@@ -16988,7 +15492,7 @@ fi
 rm -f conftest.sym conftest.file
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
 $as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; }
 
 test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
@@ -16998,7 +15502,7 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then
+if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then
   case " $LIBOBJS " in
   *" lstat.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS lstat.$ac_objext"
@@ -17007,19 +15511,15 @@ esac
 
 fi
 
-{ $as_echo "$as_me:$LINENO: checking whether stat accepts an empty string" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5
 $as_echo_n "checking whether stat accepts an empty string... " >&6; }
-if test "${ac_cv_func_stat_empty_string_bug+set}" = set; then
+if test "${ac_cv_func_stat_empty_string_bug+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   ac_cv_func_stat_empty_string_bug=yes
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
@@ -17031,44 +15531,17 @@ struct stat sbuf;
   return 0;
 }
 _ACEOF
-rm -f 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   ac_cv_func_stat_empty_string_bug=no
 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
-
-( exit $ac_status )
-ac_cv_func_stat_empty_string_bug=yes
+  ac_cv_func_stat_empty_string_bug=yes
 fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_stat_empty_string_bug" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5
 $as_echo "$ac_cv_func_stat_empty_string_bug" >&6; }
 if test $ac_cv_func_stat_empty_string_bug = yes; then
   case " $LIBOBJS " in
@@ -17084,19 +15557,15 @@ _ACEOF
 
 fi
 
-{ $as_echo "$as_me:$LINENO: checking for working strtod" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5
 $as_echo_n "checking for working strtod... " >&6; }
-if test "${ac_cv_func_strtod+set}" = set; then
+if test "${ac_cv_func_strtod+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   ac_cv_func_strtod=no
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 $ac_includes_default
@@ -17129,44 +15598,17 @@ main()
 }
 
 _ACEOF
-rm -f 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   ac_cv_func_strtod=yes
 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
-
-( exit $ac_status )
-ac_cv_func_strtod=no
+  ac_cv_func_strtod=no
 fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_strtod" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5
 $as_echo "$ac_cv_func_strtod" >&6; }
 if test $ac_cv_func_strtod = no; then
   case " $LIBOBJS " in
@@ -17175,105 +15617,20 @@ if test $ac_cv_func_strtod = no; then
  ;;
 esac
 
-{ $as_echo "$as_me:$LINENO: checking for pow" >&5
-$as_echo_n "checking for pow... " >&6; }
-if test "${ac_cv_func_pow+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define pow to an innocuous variant, in case <limits.h> declares pow.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define pow innocuous_pow
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char pow (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef pow
-
-/* 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 pow ();
-/* 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_pow || defined __stub___pow
-choke me
-#endif
-
-int
-main ()
-{
-return pow ();
-  ;
-  return 0;
-}
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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_cv_func_pow=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_pow=no
-fi
+ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow"
+if test "x$ac_cv_func_pow" = x""yes; then :
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_pow" >&5
-$as_echo "$ac_cv_func_pow" >&6; }
 
 if test $ac_cv_func_pow = no; then
-  { $as_echo "$as_me:$LINENO: checking for pow in -lm" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5
 $as_echo_n "checking for pow in -lm... " >&6; }
-if test "${ac_cv_lib_m_pow+set}" = set; then
+if test "${ac_cv_lib_m_pow+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lm  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -17291,46 +15648,21 @@ return pow ();
   return 0;
 }
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_m_pow=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_m_pow=no
+  ac_cv_lib_m_pow=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+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:$LINENO: result: $ac_cv_lib_m_pow" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5
 $as_echo "$ac_cv_lib_m_pow" >&6; }
-if test "x$ac_cv_lib_m_pow" = x""yes; then
+if test "x$ac_cv_lib_m_pow" = x""yes; then :
   POW_LIB=-lm
 else
-  { $as_echo "$as_me:$LINENO: WARNING: cannot find library containing definition of pow" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5
 $as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;}
 fi
 
@@ -17338,447 +15670,802 @@ fi
 
 fi
 
-
 for ac_func in vprintf
-do
-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
-$as_echo_n "checking for $ac_func... " >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+do :
+  ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf"
+if test "x$ac_cv_func_vprintf" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VPRINTF 1
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
 
-/* 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 $ac_func ();
-/* 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_$ac_func || defined __stub___$ac_func
-choke me
-#endif
+ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
+if test "x$ac_cv_func__doprnt" = x""yes; then :
 
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
-  eval "$as_ac_var=yes"
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h
 
-	eval "$as_ac_var=no"
 fi
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval 'as_val=${'$as_ac_var'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-as_val=`eval 'as_val=${'$as_ac_var'}
-		 $as_echo "$as_val"'`
-   if test "x$as_val" = x""yes; then
+done
+
+
+for ac_func in floor memmove memset modf pow sqrt strchr strdup strerror strrchr strstr strtol
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+eval as_val=\$$as_ac_var
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
-{ $as_echo "$as_me:$LINENO: checking for _doprnt" >&5
-$as_echo_n "checking for _doprnt... " >&6; }
-if test "${ac_cv_func__doprnt+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define _doprnt to an innocuous variant, in case <limits.h> declares _doprnt.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define _doprnt innocuous__doprnt
+fi
+done
 
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char _doprnt (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
 
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+# conditionals
+# Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then :
+  enableval=$enable_debug; case "${enableval}" in
+        yes) debug=true ;;
+        no)  debug=false ;;
+        *) as_fn_error "bad value ${enableval} for --enable-debug" "$LINENO" 5 ;;
+      esac
+else
+  debug=false
+fi
 
-#undef _doprnt
+       if test x$debug = xtrue; then
+  DEBUG_TRUE=
+  DEBUG_FALSE='#'
+else
+  DEBUG_TRUE='#'
+  DEBUG_FALSE=
+fi
 
-/* 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 _doprnt ();
-/* 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__doprnt || defined __stub____doprnt
-choke me
-#endif
 
-int
-main ()
-{
-return _doprnt ();
-  ;
-  return 0;
-}
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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_cv_func__doprnt=yes
+# Check whether --enable-unicode was given.
+if test "${enable_unicode+set}" = set; then :
+  enableval=$enable_unicode; case "${enableval}" in
+     	yes) unicode=true ;;
+	no)  unicode=false ;;
+	*) as_fn_error "bad value ${enableval} for --enable-unicode" "$LINENO" 5 ;;
+      esac
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func__doprnt=no
+  unicode=false
 fi
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+       if test "`wx-config --list | grep unicode`" != "" -a x$unicode = xtrue ; then
+  SAGA_UNICODE_TRUE=
+  SAGA_UNICODE_FALSE='#'
+else
+  SAGA_UNICODE_TRUE='#'
+  SAGA_UNICODE_FALSE=
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
-$as_echo "$ac_cv_func__doprnt" >&6; }
-if test "x$ac_cv_func__doprnt" = x""yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_DOPRNT 1
-_ACEOF
 
+
+#AM_CONDITIONAL(X86_64, test "`uname -m`" = "x86_64")
+     if test -n "$CVFOUND"; then
+  HAVE_CV_TRUE=
+  HAVE_CV_FALSE='#'
+else
+  HAVE_CV_TRUE='#'
+  HAVE_CV_FALSE=
 fi
 
+     if test -n "$LASFOUND"; then
+  HAVE_LLAS_TRUE=
+  HAVE_LLAS_FALSE='#'
+else
+  HAVE_LLAS_TRUE='#'
+  HAVE_LLAS_FALSE=
 fi
-done
 
+     if test -n "$VIGRAFOUND" -a -n "$FFTWFOUND"; then
+  HAVE_VIGRA_TRUE=
+  HAVE_VIGRA_FALSE='#'
+else
+  HAVE_VIGRA_TRUE='#'
+  HAVE_VIGRA_FALSE=
+fi
 
+     if test -n "$HARUFOUND"; then
+  HAVE_HARU_TRUE=
+  HAVE_HARU_FALSE='#'
+else
+  HAVE_HARU_TRUE='#'
+  HAVE_HARU_FALSE=
+fi
 
 
+  if test -n "$HARUFOUND" ; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result:         using lhpdf (libharu) from system libs." >&5
+$as_echo "        using lhpdf (libharu) from system libs." >&6; }
+    DISABLELIBHARU=""
+    HARU_LIB="-lhpdf"
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result:         libharu was not found, pdf creation will be disabled" >&5
+$as_echo "        libharu was not found, pdf creation will be disabled" >&6; }
+    DISABLELIBHARU="-D_SAGA_DONOTUSE_HARU"
+    HARU_LIB=""
+  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$python = xtrue; then
+  SAGA_PYTHON_TRUE=
+  SAGA_PYTHON_FALSE='#'
+else
+  SAGA_PYTHON_TRUE='#'
+  SAGA_PYTHON_FALSE=
+fi
 
+if test x$python = xtrue; then
 
 
 
 
-for ac_func in floor memmove memset modf pow sqrt strchr strdup strerror strrchr strstr strtol
+        # 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
-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
-$as_echo_n "checking for $ac_func... " >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  # 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
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* 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 $ac_func ();
-/* 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_$ac_func || defined __stub___$ac_func
-choke me
-#endif
+  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
 
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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
-  eval "$as_ac_var=yes"
+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: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_var'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-as_val=`eval 'as_val=${'$as_ac_var'}
-		 $as_echo "$as_val"'`
-   if test "x$as_val" = x""yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
 
-fi
+  test -n "$PYTHON" && break
 done
+test -n "$PYTHON" || PYTHON=":"
 
+    fi
+    am_display_PYTHON=python
 
-# conditionals
-# Check whether --enable-debug was given.
-if test "${enable_debug+set}" = set; then
-  enableval=$enable_debug; case "${enableval}" in
-        yes) debug=true ;;
-        no)  debug=false ;;
-        *) { { $as_echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug" >&5
-$as_echo "$as_me: error: bad value ${enableval} for --enable-debug" >&2;}
-   { (exit 1); exit 1; }; } ;;
-      esac
+
+  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
-  debug=false
+  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
 
-       if test x$debug = xtrue; then
-  DEBUG_TRUE=
-  DEBUG_FALSE='#'
+
+
+  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
-  DEBUG_TRUE='#'
-  DEBUG_FALSE=
+  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
 
 
-# Check whether --enable-unicode was given.
-if test "${enable_unicode+set}" = set; then
-  enableval=$enable_unicode; case "${enableval}" in
-     	yes) unicode=true ;;
-	no)  unicode=false ;;
-	*) { { $as_echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-unicode" >&5
-$as_echo "$as_me: error: bad value ${enableval} for --enable-unicode" >&2;}
-   { (exit 1); exit 1; }; } ;;
-      esac
+
+
+                { $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
-  unicode=false
+  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
 
-       if test "`wx-config --list | grep unicode`" != "" -a x$unicode = xtrue ; then
-  SAGA_UNICODE_TRUE=
-  SAGA_UNICODE_FALSE='#'
+
+
+  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
-  SAGA_UNICODE_TRUE='#'
-  SAGA_UNICODE_FALSE=
+  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
 
 
-#AM_CONDITIONAL(X86_64, test "`uname -m`" = "x86_64")
-{ $as_echo "$as_me:$LINENO: checking for HPDF_Pages_New in -lhpdf" >&5
-$as_echo_n "checking for HPDF_Pages_New in -lhpdf... " >&6; }
-if test "${ac_cv_lib_hpdf_HPDF_Pages_New+set}" = set; then
+
+  pkgpyexecdir=\${pyexecdir}/$PACKAGE
+
+
+
+  fi
+
+
+
+	#
+	# Allow the use of a (user set) custom python version
+	#
+
+
+	# Extract the first word of "python[$PYTHON_VERSION]", so it can be a program name with args.
+set dummy python$PYTHON_VERSION; 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
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lhpdf  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+  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
+
+
+	if test -z "$PYTHON"; then
+	   as_fn_error "Cannot find python$PYTHON_VERSION in your system path" "$LINENO" 5
+	   PYTHON_VERSION=""
+	fi
+
+	#
+	# Check for a version of Python >= 2.1.0
+	#
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a version of Python >= '2.1.0'" >&5
+$as_echo_n "checking for a version of Python >= '2.1.0'... " >&6; }
+	ac_supports_python_ver=`$PYTHON -c "import sys; \
+		ver = sys.version.split ()[0]; \
+		print (ver >= '2.1.0')"`
+	if test "$ac_supports_python_ver" != "True"; then
+		if test -z "$PYTHON_NOVERSIONCHECK"; then
+			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+			{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "
+This version of the AC_PYTHON_DEVEL macro
+doesn't work properly with versions of Python before
+2.1.0. You may need to re-run configure, setting the
+variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
+PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
+Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
+to something else than an empty string.
+
+See \`config.log' for more details." "$LINENO" 5; }
+		else
+			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: skip at user request" >&5
+$as_echo "skip at user request" >&6; }
+		fi
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	fi
+
+	#
+	# if the macro parameter ``version'' is set, honour it
+	#
+	if test -n ""; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a version of Python " >&5
+$as_echo_n "checking for a version of Python ... " >&6; }
+		ac_supports_python_ver=`$PYTHON -c "import sys; \
+			ver = sys.version.split ()[0]; \
+			print (ver )"`
+		if test "$ac_supports_python_ver" = "True"; 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" >&5
+$as_echo "no" >&6; }
+			as_fn_error "this package requires Python .
+If you have it installed, but it isn't the default Python
+interpreter in your system path, please pass the PYTHON_VERSION
+variable to configure. See \`\`configure --help'' for reference.
+" "$LINENO" 5
+			PYTHON_VERSION=""
+		fi
+	fi
+
+	#
+	# Check if you have distutils, else fail
+	#
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
+$as_echo_n "checking for the distutils Python package... " >&6; }
+	ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+	if test -z "$ac_distutils_result"; 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" >&5
+$as_echo "no" >&6; }
+		as_fn_error "cannot import Python module \"distutils\".
+Please check your Python installation. The error was:
+$ac_distutils_result" "$LINENO" 5
+		PYTHON_VERSION=""
+	fi
+
+	#
+	# Check for Python include path
+	#
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5
+$as_echo_n "checking for Python include path... " >&6; }
+	if test -z "$PYTHON_CPPFLAGS"; then
+		python_path=`$PYTHON -c "import distutils.sysconfig; \
+			print (distutils.sysconfig.get_python_inc ());"`
+		if test -n "${python_path}"; then
+			python_path="-I$python_path"
+		fi
+		PYTHON_CPPFLAGS=$python_path
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CPPFLAGS" >&5
+$as_echo "$PYTHON_CPPFLAGS" >&6; }
+
+
+	#
+	# Check for Python library path
+	#
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python library path" >&5
+$as_echo_n "checking for Python library path... " >&6; }
+	if test -z "$PYTHON_LDFLAGS"; then
+		# (makes two attempts to ensure we've got a version number
+		# from the interpreter)
+		ac_python_version=`cat<<EOD | $PYTHON -
+
+# join all versioning strings, on some systems
+# major/minor numbers could be in different list elements
+from distutils.sysconfig import *
+ret = ''
+for e in get_config_vars ('VERSION'):
+	if (e != None):
+		ret += e
+print (ret)
+EOD`
+
+		if test -z "$ac_python_version"; then
+			if test -n "$PYTHON_VERSION"; then
+				ac_python_version=$PYTHON_VERSION
+			else
+				ac_python_version=`$PYTHON -c "import sys; \
+					print (sys.version[:3])"`
+			fi
+		fi
+
+		# Make the versioning information available to the compiler
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_PYTHON "$ac_python_version"
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+
+
+		# First, the library directory:
+		ac_python_libdir=`cat<<EOD | $PYTHON -
+
+# There should be only one
+import distutils.sysconfig
+for e in distutils.sysconfig.get_config_vars ('LIBDIR'):
+	if e != None:
+		print (e)
+		break
+EOD`
+
+		# Before checking for libpythonX.Y, we need to know
+		# the extension the OS we're on uses for libraries
+		# (we take the first one, if there's more than one fix me!):
+		ac_python_soext=`$PYTHON -c \
+		  "import distutils.sysconfig; \
+		  print (distutils.sysconfig.get_config_vars('SO')[0])"`
+
+		# Now, for the library:
+		ac_python_soname=`$PYTHON -c \
+		  "import distutils.sysconfig; \
+		  print (distutils.sysconfig.get_config_vars('LDLIBRARY')[0])"`
+
+		# Strip away extension from the end to canonicalize its name:
+		ac_python_library=`echo "$ac_python_soname" | sed "s/${ac_python_soext}$//"`
+
+		# This small piece shamelessly adapted from PostgreSQL python macro;
+		# credits goes to momjian, I think. I'd like to put the right name
+		# in the credits, if someone can point me in the right direction... ?
+		#
+		if test -n "$ac_python_libdir" -a -n "$ac_python_library" \
+			-a x"$ac_python_library" != x"$ac_python_soname"
+		then
+			# use the official shared library
+			ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
+			PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library"
+		else
+			# old way: use libpython from python_configdir
+			ac_python_libdir=`$PYTHON -c \
+			  "from distutils.sysconfig import get_python_lib as f; \
+			  import os; \
+			  print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
+			PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version"
+		fi
+
+		if test -z "PYTHON_LDFLAGS"; then
+			as_fn_error "
+  Cannot determine location of your Python DSO. Please check it was installed with
+  dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand.
+			" "$LINENO" 5
+		fi
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_LDFLAGS" >&5
+$as_echo "$PYTHON_LDFLAGS" >&6; }
+
+
+	#
+	# Check for site packages
+	#
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python site-packages path" >&5
+$as_echo_n "checking for Python site-packages path... " >&6; }
+	if test -z "$PYTHON_SITE_PKG"; then
+		PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
+			print (distutils.sysconfig.get_python_lib(0,0));"`
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SITE_PKG" >&5
+$as_echo "$PYTHON_SITE_PKG" >&6; }
+
+
+	#
+	# libraries which must be linked in when embedding
+	#
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking python extra libraries" >&5
+$as_echo_n "checking python extra libraries... " >&6; }
+	if test -z "$PYTHON_EXTRA_LIBS"; then
+	   PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
+                conf = distutils.sysconfig.get_config_var; \
+                print (conf('LOCALMODLIBS') + ' ' + conf('LIBS'))"`
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EXTRA_LIBS" >&5
+$as_echo "$PYTHON_EXTRA_LIBS" >&6; }
+
+
+	#
+	# linking flags needed when embedding
+	#
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking python extra linking flags" >&5
+$as_echo_n "checking python extra linking flags... " >&6; }
+	if test -z "$PYTHON_EXTRA_LDFLAGS"; then
+		PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
+			conf = distutils.sysconfig.get_config_var; \
+			print (conf('LINKFORSHARED'))"`
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EXTRA_LDFLAGS" >&5
+$as_echo "$PYTHON_EXTRA_LDFLAGS" >&6; }
+
+
+	#
+	# final check to see if everything compiles alright
+	#
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking consistency of all components of python development environment" >&5
+$as_echo_n "checking consistency of all components of python development environment... " >&6; }
+	# save current global flags
+	ac_save_LIBS="$LIBS"
+	ac_save_CPPFLAGS="$CPPFLAGS"
+	LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS"
+	CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
+	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.  */
 
-/* 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 HPDF_Pages_New ();
+		#include <Python.h>
 int
 main ()
 {
-return HPDF_Pages_New ();
+Py_Initialize();
   ;
   return 0;
 }
+
 _ACEOF
-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:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 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_cv_lib_hpdf_HPDF_Pages_New=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  pythonexists=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_hpdf_HPDF_Pages_New=no
+  pythonexists=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
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+	# turn back to default flags
+	CPPFLAGS="$ac_save_CPPFLAGS"
+	LIBS="$ac_save_LIBS"
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pythonexists" >&5
+$as_echo "$pythonexists" >&6; }
+
+        if test ! "x$pythonexists" = "xyes"; then
+	   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "
+  Could not link test program to Python. Maybe the main Python library has been
+  installed in some non-standard library path. If so, pass it to configure,
+  via the LDFLAGS environment variable.
+  Example: ./configure LDFLAGS=\"-L/usr/non-standard-path/python/lib\"
+  ============================================================================
+   ERROR!
+   You probably have to install the development version of the Python package
+   for your distribution.  The exact name of this package varies among them.
+  ============================================================================
+
+See \`config.log' for more details." "$LINENO" 5; }
+	  PYTHON_VERSION=""
+	fi
+
+	#
+	# all done!
+	#
+
+
+
+        # Extract the first word of "swig", so it can be a program name with args.
+set dummy swig; 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_SWIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $SWIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_SWIG="$SWIG" # 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_SWIG="$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
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_hpdf_HPDF_Pages_New" >&5
-$as_echo "$ac_cv_lib_hpdf_HPDF_Pages_New" >&6; }
-if test "x$ac_cv_lib_hpdf_HPDF_Pages_New" = x""yes; then
-  HARUFOUND=1
+SWIG=$ac_cv_path_SWIG
+if test -n "$SWIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWIG" >&5
+$as_echo "$SWIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-  if test -n "$HARUFOUND" ; then
-    { $as_echo "$as_me:$LINENO: result:         using lhpdf (libharu) from system libs." >&5
-$as_echo "        using lhpdf (libharu) from system libs." >&6; }
-    DISABLELIBHARU=""
-    HARU_LIB="-lhpdf"
-  else
-    { $as_echo "$as_me:$LINENO: result:         libharu was not found, pdf creation will be disabled" >&5
-$as_echo "        libharu was not found, pdf creation will be disabled" >&6; }
-    DISABLELIBHARU="-D_SAGA_DONOTUSE_HARU"
-    HARU_LIB=""
-  fi
+
+        if test -z "$SWIG" ; then
+                :
+        elif test -n "1.3.17" ; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking SWIG version" >&5
+$as_echo_n "checking SWIG version... " >&6; }
+                swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`
+                { $as_echo "$as_me:${as_lineno-$LINENO}: result: $swig_version" >&5
+$as_echo "$swig_version" >&6; }
+                if test -n "$swig_version" ; then
+                        # Calculate the required version number components
+                        required=1.3.17
+                        required_major=`echo $required | sed 's/[^0-9].*//'`
+                        if test -z "$required_major" ; then
+                                required_major=0
+                        fi
+                        required=`echo $required | sed 's/[0-9]*[^0-9]//'`
+                        required_minor=`echo $required | sed 's/[^0-9].*//'`
+                        if test -z "$required_minor" ; then
+                                required_minor=0
+                        fi
+                        required=`echo $required | sed 's/[0-9]*[^0-9]//'`
+                        required_patch=`echo $required | sed 's/[^0-9].*//'`
+                        if test -z "$required_patch" ; then
+                                required_patch=0
+                        fi
+                        # Calculate the available version number components
+                        available=$swig_version
+                        available_major=`echo $available | sed 's/[^0-9].*//'`
+                        if test -z "$available_major" ; then
+                                available_major=0
+                        fi
+                        available=`echo $available | sed 's/[0-9]*[^0-9]//'`
+                        available_minor=`echo $available | sed 's/[^0-9].*//'`
+                        if test -z "$available_minor" ; then
+                                available_minor=0
+                        fi
+                        available=`echo $available | sed 's/[0-9]*[^0-9]//'`
+                        available_patch=`echo $available | sed 's/[^0-9].*//'`
+                        if test -z "$available_patch" ; then
+                                available_patch=0
+                        fi
+                        # Convert the version tuple into a single number for easier comparison.
+                        # Using base 100 should be safe since SWIG internally uses BCD values
+                        # to encode its version number.
+                        required_swig_vernum=`expr $required_major \* 10000 \
+                            \+ $required_minor \* 100 \+ $required_patch`
+                        available_swig_vernum=`expr $available_major \* 10000 \
+                            \+ $available_minor \* 100 \+ $available_patch`
+
+                        if test $available_swig_vernum -lt $required_swig_vernum; then
+                                { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SWIG version >= 1.3.17 is required.  You have $swig_version." >&5
+$as_echo "$as_me: WARNING: SWIG version >= 1.3.17 is required.  You have $swig_version." >&2;}
+                                SWIG=''
+
+                        else
+                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SWIG library" >&5
+$as_echo_n "checking for SWIG library... " >&6; }
+                                SWIG_LIB=`$SWIG -swiglib`
+                                { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWIG_LIB" >&5
+$as_echo "$SWIG_LIB" >&6; }
+
+                        fi
+                else
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine SWIG version" >&5
+$as_echo "$as_me: WARNING: cannot determine SWIG version" >&2;}
+                        SWIG=''
+
+                fi
+        fi
+
 
 
 
 
+        SWIG="$SWIG -c++"
 
+
+
+
+        test "x" != "xno" || swig_shadow=" -noproxy"
+        AX_SWIG_PYTHON_OPT=-python$swig_shadow
+
+        AX_SWIG_PYTHON_CPPFLAGS=$PYTHON_CPPFLAGS
+
+
+fi
 #AC_CONFIG_FILES([Makefile])
-ac_config_files="$ac_config_files Makefile src/Makefile src/saga_core/Makefile src/saga_core/saga_api/Makefile src/saga_core/saga_gdi/Makefile src/saga_core/saga_odbc/Makefile src/saga_core/saga_cmd/Makefile src/saga_core/saga_cmd/man/Makefile src/saga_core/saga_gui/Makefile src/saga_core/saga_gui/man/Makefile src/modules/Makefile src/modules/grid/Makefile src/modules/grid/grid_analysis/Makefile src/modules/grid/grid_calculus/Makefile src/modules/grid/grid_calculus_bsl/Makefile src/modules/grid/grid_discretisation/Makefile src/modules/grid/grid_filter/Makefile src/modules/grid/grid_gridding/Makefile src/modules/grid/grid_spline/Makefile src/modules/grid/grid_tools/Makefile src/modules/grid/grid_visualisation/Makefile src/modules/pointcloud/Makefile src/modules/pointcloud/pointcloud_tools/Makefile src/modules/pointcloud/pointcloud_viewer/Makefile src/modules/shapes/Makefile src/modules/shapes/shapes_grid/Makefile src/modules/shapes/shapes_lines/Makefile src/modules/shapes/shapes_points/Makefile src/modules/shapes/shapes_polygons/Makefile src/modules/shapes/shapes_tools/Makefile src/modules/shapes/shapes_transect/Makefile src/modules/table/Makefile src/modules/table/table_calculus/Makefile src/modules/table/table_tools/Makefile src/modules/tin/Makefile src/modules/tin/tin_tools/Makefile src/modules_contrib/Makefile src/modules_contrib/contrib_a_perego/Makefile src/modules_contrib/contrib_a_perego/contrib_a_perego/Makefile src/modules_contrib/contrib_s_liersch/Makefile src/modules_contrib/contrib_s_liersch/ihacres/Makefile src/modules_geostatistics/Makefile src/modules_geostatistics/geostatistics/Makefile src/modules_geostatistics/geostatistics/geostatistics_points/Makefile src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile src/modules_geostatistics/geostatistics/geostatistics_kriging/Makefile src/modules_geostatistics/geostatistics/geostatistics_regression/Makefile src/modules_io/Makefile src/modules_io/esri_e00/Makefile src/modules_io/esri_e00/io_esri_e00/Makefile src/modules_io/db/Makefile src/modules_io/db/io_odbc/Makefile src/modules_io/gdal/Makefile src/modules_io/gdal/io_gdal/Makefile src/modules_io/grid/Makefile src/modules_io/grid/io_grid/Makefile src/modules_io/grid/io_grid_image/Makefile src/modules_io/grid/io_grid_grib2/Makefile src/modules_io/gps/Makefile src/modules_io/gps/io_gps/Makefile src/modules_io/shapes/Makefile src/modules_io/shapes/io_shapes/Makefile src/modules_io/shapes/io_shapes_dxf/Makefile src/modules_io/table/Makefile src/modules_io/table/io_table/Makefile src/modules_lectures/Makefile src/modules_lectures/lectures/Makefile src/modules_lectures/lectures/lectures_introduction/Makefile src/modules_projection/Makefile src/modules_projection/pj_georeference/Makefile src/modules_projection/pj_georeference/pj_georeference/Makefile src/modules_projection/pj_proj4/Makefile src/modules_projection/pj_proj4/pj_proj4/Makefile src/modules_recreations/Makefile src/modules_recreations/recreations/Makefile src/modules_recreations/recreations/recreations_fractals/Makefile src/modules_recreations/recreations/recreations_games/Makefile src/modules_simulation/Makefile src/modules_simulation/hydrology/Makefile src/modules_simulation/hydrology/sim_hydrology/Makefile src/modules_simulation/cellular_automata/Makefile src/modules_simulation/cellular_automata/sim_cellular_automata/Makefile src/modules_simulation/ecosystems/Makefile src/modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile src/modules_simulation/fire/Makefile src/modules_simulation/fire/sim_fire_spreading/Makefile src/modules_terrain_analysis/Makefile src/modules_terrain_analysis/terrain_analysis/Makefile src/modules_terrain_analysis/terrain_analysis/ta_channels/Makefile src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile src/modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile"
+ac_config_files="$ac_config_files Makefile src/Makefile src/saga_core/Makefile src/saga_core/saga_api/Makefile src/saga_core/saga_gdi/Makefile src/saga_core/saga_odbc/Makefile src/saga_core/saga_cmd/Makefile src/saga_core/saga_cmd/man/Makefile src/saga_core/saga_gui/Makefile src/saga_core/saga_gui/man/Makefile src/modules/Makefile src/modules/grid/Makefile src/modules/grid/grid_analysis/Makefile src/modules/grid/grid_calculus/Makefile src/modules/grid/grid_calculus_bsl/Makefile src/modules/grid/grid_discretisation/Makefile src/modules/grid/grid_filter/Makefile src/modules/grid/grid_gridding/Makefile src/modules/grid/grid_spline/Makefile src/modules/grid/grid_tools/Makefile src/modules/grid/grid_visualisation/Makefile src/modules/pointcloud/Makefile src/modules/pointcloud/pointcloud_tools/Makefile src/modules/pointcloud/pointcloud_viewer/Makefile src/modules/shapes/Makefile src/modules/shapes/shapes_grid/Makefile src/modules/shapes/shapes_lines/Makefile src/modules/shapes/shapes_points/Makefile src/modules/shapes/shapes_polygons/Makefile src/modules/shapes/shapes_tools/Makefile src/modules/shapes/shapes_transect/Makefile src/modules/table/Makefile src/modules/table/table_calculus/Makefile src/modules/table/table_tools/Makefile src/modules/tin/Makefile src/modules/tin/tin_tools/Makefile src/modules_contrib/Makefile src/modules_contrib/contrib_a_perego/Makefile src/modules_contrib/contrib_a_perego/contrib_a_perego/Makefile src/modules_contrib/contrib_s_liersch/Makefile src/modules_contrib/contrib_s_liersch/ihacres/Makefile src/modules_geostatistics/Makefile src/modules_geostatistics/geostatistics/Makefile src/modules_geostatistics/geostatistics/geostatistics_points/Makefile src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile src/modules_geostatistics/geostatistics/geostatistics_kriging/Makefile src/modules_geostatistics/geostatistics/geostatistics_regression/Makefile src/modules_images/Makefile src/modules_images/modules_imagery/imagery_segmentation/Makefile src/modules_images/modules_imagery/Makefile src/modules_images/modules_opencv/Makefile src/modules_images/modules_opencv/opencv/Makefile src/modules_images/modules_vigra/Makefile src/modules_images/modules_vigra/vigra/Makefile src/modules_io/Makefile src/modules_io/esri_e00/Makefile src/modules_io/esri_e00/io_esri_e00/Makefile src/modules_io/db/Makefile src/modules_io/db/io_odbc/Makefile src/modules_io/docs/Makefile src/modules_io/docs/docs_html/Makefile src/modules_io/docs/docs_pdf/Makefile src/modules_io/gdal/Makefile src/modules_io/gdal/io_gdal/Makefile src/modules_io/grid/Makefile src/modules_io/grid/io_grid/Makefile src/modules_io/grid/io_grid_image/Makefile src/modules_io/grid/io_grid_grib2/Makefile src/modules_io/gps/Makefile src/modules_io/gps/io_gps/Makefile src/modules_io/shapes/Makefile src/modules_io/shapes/io_shapes/Makefile src/modules_io/shapes/io_shapes_dxf/Makefile src/modules_io/shapes/io_shapes_las/Makefile src/modules_io/table/Makefile src/modules_io/table/io_table/Makefile src/modules_lectures/Makefile src/modules_lectures/lectures/Makefile src/modules_lectures/lectures/lectures_introduction/Makefile src/modules_projection/Makefile src/modules_projection/pj_georeference/Makefile src/modules_projection/pj_georeference/pj_georeference/Makefile src/modules_projection/pj_proj4/Makefile src/modules_projection/pj_proj4/pj_proj4/Makefile src/modules_recreations/Makefile src/modules_recreations/recreations/Makefile src/modules_recreations/recreations/recreations_fractals/Makefile src/modules_recreations/recreations/recreations_games/Makefile src/modules_simulation/Makefile src/modules_simulation/hydrology/Makefile src/modules_simulation/hydrology/sim_hydrology/Makefile src/modules_simulation/cellular_automata/Makefile src/modules_simulation/cellular_automata/sim_cellular_automata/Makefile src/modules_simulation/ecosystems/Makefile src/modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile src/modules_simulation/fire/Makefile src/modules_simulation/fire/sim_fire_spreading/Makefile src/modules_terrain_analysis/Makefile src/modules_terrain_analysis/terrain_analysis/Makefile src/modules_terrain_analysis/terrain_analysis/ta_channels/Makefile src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile src/modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -17807,13 +16494,13 @@ _ACEOF
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+      *_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= ;; #(
-      *) $as_unset $ac_var ;;
+      *) { eval $ac_var=; unset $ac_var;} ;;
       esac ;;
     esac
   done
@@ -17821,8 +16508,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
   (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 \).
+      # `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"
@@ -17845,11 +16532,11 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 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:$LINENO: updating cache $cache_file" >&5
+      { $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:$LINENO: not updating unwritable cache $cache_file" >&5
+    { $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
@@ -17905,8 +16592,8 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   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.
-  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
 done
 LIBOBJS=$ac_libobjs
 
@@ -17922,55 +16609,58 @@ else
 fi
 
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "conditional \"AMDEP\" 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_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
+  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__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
+  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_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${DEBUG_TRUE}" && test -z "${DEBUG_FALSE}"; then
-  { { $as_echo "$as_me:$LINENO: error: conditional \"DEBUG\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"DEBUG\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "conditional \"DEBUG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${SAGA_UNICODE_TRUE}" && test -z "${SAGA_UNICODE_FALSE}"; then
-  { { $as_echo "$as_me:$LINENO: error: conditional \"SAGA_UNICODE\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"SAGA_UNICODE\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "conditional \"SAGA_UNICODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CV_TRUE}" && test -z "${HAVE_CV_FALSE}"; then
+  as_fn_error "conditional \"HAVE_CV\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_LLAS_TRUE}" && test -z "${HAVE_LLAS_FALSE}"; then
+  as_fn_error "conditional \"HAVE_LLAS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_VIGRA_TRUE}" && test -z "${HAVE_VIGRA_FALSE}"; then
+  as_fn_error "conditional \"HAVE_VIGRA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_HARU_TRUE}" && test -z "${HAVE_HARU_FALSE}"; then
+  as_fn_error "conditional \"HAVE_HARU\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${SAGA_PYTHON_TRUE}" && test -z "${SAGA_PYTHON_FALSE}"; then
+  as_fn_error "conditional \"SAGA_PYTHON\" 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:$LINENO: creating $CONFIG_STATUS" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+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.
@@ -17980,17 +16670,18 @@ cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 debug=false
 ac_cs_recheck=false
 ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+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
+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
@@ -17998,23 +16689,15 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
 esac
-
 fi
 
 
-
-
-# PATH needs CR
-# 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_nl='
 '
 export as_nl
@@ -18022,7 +16705,13 @@ export as_nl
 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
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+# 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
@@ -18033,7 +16722,7 @@ else
     as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
     as_echo_n_body='eval
       arg=$1;
-      case $arg in
+      case $arg in #(
       *"$as_nl"*)
 	expr "X$arg" : "X\\(.*\\)$as_nl";
 	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
@@ -18056,13 +16745,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
   }
 fi
 
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
 
 # IFS
 # We need space, tab and new line, in precisely that order.  Quoting is
@@ -18072,15 +16754,15 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in
+case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
 IFS=$as_save_IFS
 
      ;;
@@ -18092,12 +16774,16 @@ if test "x$as_myself" = x; then
 fi
 if test ! -f "$as_myself"; then
   $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  { (exit 1); exit 1; }
+  exit 1
 fi
 
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+# 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='> '
@@ -18109,7 +16795,89 @@ export LC_ALL
 LANGUAGE=C
 export LANGUAGE
 
-# Required to use basename.
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  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
+  fi
+  $as_echo "$as_me: error: $1" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? 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 $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) 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
@@ -18123,8 +16891,12 @@ 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
 
-# Name of the executable.
 as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
 	 X"$0" : 'X\(//\)$' \| \
@@ -18144,76 +16916,25 @@ $as_echo X/"$0" |
 	  }
 	  s/.*/./; q'`
 
-# CDPATH.
-$as_unset CDPATH
-
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  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
-   { (exit 1); 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
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
+# 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
+case `echo -n x` in #(((((
 -n*)
-  case `echo 'x\c'` in
+  case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
 
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
@@ -18242,8 +16963,56 @@ fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  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=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
@@ -18262,10 +17031,10 @@ else
       if test -d "$1"; then
 	test -d "$1/.";
       else
-	case $1 in
+	case $1 in #(
 	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -18280,13 +17049,19 @@ 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
 
-# Save the log message, to keep $[0] and so on meaningful, and to
+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 saga $as_me 2.0.5, which was
-generated by GNU Autoconf 2.63.  Invocation command line was
+This file was extended by saga $as_me 2.0.6, which was
+generated by GNU Autoconf 2.65.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -18314,13 +17089,15 @@ _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
+\`$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]... [FILE]...
+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
@@ -18334,16 +17111,17 @@ $config_files
 Configuration commands:
 $config_commands
 
-Report bugs to <bug-autoconf at gnu.org>."
+Report bugs to <BUG-REPORT-ADDRESS>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-saga config.status 2.0.5
-configured by $0, generated by GNU Autoconf 2.63,
-  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+saga config.status 2.0.6
+configured by $0, generated by GNU Autoconf 2.65,
+  with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2008 Free Software Foundation, Inc.
+Copyright (C) 2009 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -18379,6 +17157,8 @@ 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 )
@@ -18386,7 +17166,7 @@ do
     case $ac_optarg in
     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
-    CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
   --he | --h |  --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
@@ -18395,11 +17175,10 @@ do
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) { $as_echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; } ;;
+  -*) as_fn_error "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
 
-  *) ac_config_targets="$ac_config_targets $1"
+  *) as_fn_append ac_config_targets " $1"
      ac_need_defaults=false ;;
 
   esac
@@ -18850,11 +17629,21 @@ do
     "src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile" ;;
     "src/modules_geostatistics/geostatistics/geostatistics_kriging/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_geostatistics/geostatistics/geostatistics_kriging/Makefile" ;;
     "src/modules_geostatistics/geostatistics/geostatistics_regression/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_geostatistics/geostatistics/geostatistics_regression/Makefile" ;;
+    "src/modules_images/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_images/Makefile" ;;
+    "src/modules_images/modules_imagery/imagery_segmentation/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_images/modules_imagery/imagery_segmentation/Makefile" ;;
+    "src/modules_images/modules_imagery/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_images/modules_imagery/Makefile" ;;
+    "src/modules_images/modules_opencv/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_images/modules_opencv/Makefile" ;;
+    "src/modules_images/modules_opencv/opencv/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_images/modules_opencv/opencv/Makefile" ;;
+    "src/modules_images/modules_vigra/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_images/modules_vigra/Makefile" ;;
+    "src/modules_images/modules_vigra/vigra/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_images/modules_vigra/vigra/Makefile" ;;
     "src/modules_io/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/Makefile" ;;
     "src/modules_io/esri_e00/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/esri_e00/Makefile" ;;
     "src/modules_io/esri_e00/io_esri_e00/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/esri_e00/io_esri_e00/Makefile" ;;
     "src/modules_io/db/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/db/Makefile" ;;
     "src/modules_io/db/io_odbc/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/db/io_odbc/Makefile" ;;
+    "src/modules_io/docs/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/docs/Makefile" ;;
+    "src/modules_io/docs/docs_html/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/docs/docs_html/Makefile" ;;
+    "src/modules_io/docs/docs_pdf/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/docs/docs_pdf/Makefile" ;;
     "src/modules_io/gdal/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/gdal/Makefile" ;;
     "src/modules_io/gdal/io_gdal/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/gdal/io_gdal/Makefile" ;;
     "src/modules_io/grid/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/grid/Makefile" ;;
@@ -18866,6 +17655,7 @@ do
     "src/modules_io/shapes/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/shapes/Makefile" ;;
     "src/modules_io/shapes/io_shapes/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/shapes/io_shapes/Makefile" ;;
     "src/modules_io/shapes/io_shapes_dxf/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/shapes/io_shapes_dxf/Makefile" ;;
+    "src/modules_io/shapes/io_shapes_las/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/shapes/io_shapes_las/Makefile" ;;
     "src/modules_io/table/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/table/Makefile" ;;
     "src/modules_io/table/io_table/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_io/table/io_table/Makefile" ;;
     "src/modules_lectures/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_lectures/Makefile" ;;
@@ -18892,16 +17682,13 @@ do
     "src/modules_terrain_analysis/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_terrain_analysis/Makefile" ;;
     "src/modules_terrain_analysis/terrain_analysis/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_terrain_analysis/terrain_analysis/Makefile" ;;
     "src/modules_terrain_analysis/terrain_analysis/ta_channels/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_terrain_analysis/terrain_analysis/ta_channels/Makefile" ;;
-    "src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile" ;;
     "src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile" ;;
     "src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile" ;;
     "src/modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile" ;;
     "src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile" ;;
     "src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile" ;;
 
-  *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
+  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
@@ -18927,7 +17714,7 @@ $debug ||
   trap 'exit_status=$?
   { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
 ' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
+  trap 'as_fn_exit 1' 1 2 13 15
 }
 # Create a (secure) tmp directory for tmp files.
 
@@ -18938,11 +17725,7 @@ $debug ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} ||
-{
-   $as_echo "$as_me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
+} || 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.
@@ -18950,10 +17733,16 @@ $debug ||
 if test -n "$CONFIG_FILES"; then
 
 
-ac_cr='
'
+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 2>/dev/null`
 if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
+  ac_cs_awk_cr='\r'
 else
   ac_cs_awk_cr=$ac_cr
 fi
@@ -18967,24 +17756,18 @@ _ACEOF
   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
   echo "_ACEOF"
 } >conf$$subs.sh ||
-  { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
+  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_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
+    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_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -19006,7 +17789,7 @@ s/'"$ac_delim"'$//
 t delim
 :nl
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more1
 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
 p
@@ -19020,7 +17803,7 @@ s/.\{148\}//
 t nl
 :delim
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more2
 s/["\\]/\\&/g; s/^/"/; s/$/"/
 p
@@ -19073,9 +17856,7 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
 else
   cat
 fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
-$as_echo "$as_me: error: could not setup config files machinery" >&2;}
-   { (exit 1); exit 1; }; }
+  || as_fn_error "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
 # VPATH may cause trouble with some makes, so we remove $(srcdir),
@@ -19106,9 +17887,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
-$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
-   { (exit 1); exit 1; }; };;
+  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -19136,12 +17915,10 @@ $as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
-   { (exit 1); exit 1; }; };;
+	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      ac_file_inputs="$ac_file_inputs '$ac_f'"
+      as_fn_append ac_file_inputs " '$ac_f'"
     done
 
     # Let's still pretend it is `configure' which instantiates (i.e., don't
@@ -19152,7 +17929,7 @@ $as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
 	`' by configure.'
     if test x"$ac_file" != x-; then
       configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
+      { $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.
@@ -19165,9 +17942,7 @@ $as_echo "$as_me: creating $ac_file" >&6;}
 
     case $ac_tag in
     *:-:* | *:-) cat >"$tmp/stdin" \
-      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
-   { (exit 1); exit 1; }; } ;;
+      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -19195,47 +17970,7 @@ $as_echo X"$ac_file" |
 	    q
 	  }
 	  s/.*/./; q'`
-  { as_dir="$ac_dir"
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
-    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_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
-   { (exit 1); exit 1; }; }; }
+  as_dir="$ac_dir"; as_fn_mkdir_p
   ac_builddir=.
 
 case "$ac_dir" in
@@ -19292,7 +18027,6 @@ 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
@@ -19302,12 +18036,11 @@ ac_sed_dataroot='
 /@docdir@/p
 /@infodir@/p
 /@localedir@/p
-/@mandir@/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:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+  { $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
@@ -19317,7 +18050,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
   s&@infodir@&$infodir&g
   s&@localedir@&$localedir&g
   s&@mandir@&$mandir&g
-    s&\\\${datarootdir}&$datarootdir&g' ;;
+  s&\\\${datarootdir}&$datarootdir&g' ;;
 esac
 _ACEOF
 
@@ -19346,14 +18079,12 @@ 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_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
-   { (exit 1); exit 1; }; }
+  || 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:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+  { $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;}
@@ -19363,13 +18094,11 @@ which seems to be undefined.  Please make sure it is defined." >&2;}
   -) cat "$tmp/out" && rm -f "$tmp/out";;
   *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
   esac \
-  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
-   { (exit 1); exit 1; }; }
+  || as_fn_error "could not create $ac_file" "$LINENO" 5
  ;;
 
 
-  :C)  { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
 $as_echo "$as_me: executing $ac_file commands" >&6;}
  ;;
   esac
@@ -19464,47 +18193,7 @@ $as_echo X"$file" |
 	    q
 	  }
 	  s/.*/./; q'`
-      { as_dir=$dirpart/$fdir
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
-    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_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
-   { (exit 1); exit 1; }; }; }
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
       # echo "creating $dirpart/$file"
       echo '# dummy' > "$dirpart/$file"
     done
@@ -20318,15 +19007,12 @@ _LT_EOF
 done # for ac_tag
 
 
-{ (exit 0); exit 0; }
+as_fn_exit 0
 _ACEOF
-chmod +x $CONFIG_STATUS
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -20347,10 +19033,10 @@ 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 || { (exit 1); exit 1; }
+  $ac_cs_success || as_fn_exit $?
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+  { $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/configure.in b/configure.in
index 59a5082..07a4e16 100755
--- a/configure.in
+++ b/configure.in
@@ -1,9 +1,9 @@
-# $Id: configure.in,v 1.27 2010/07/22 12:47:12 johanvdw Exp $
+# $Id: configure.in,v 1.38 2010/11/09 22:12:00 johanvdw Exp $
 #                                               -*- Autoconf -*-
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT(saga, 2.0.5, BUG-REPORT-ADDRESS)
+AC_INIT(saga, 2.0.6, BUG-REPORT-ADDRESS)
 AC_CONFIG_SRCDIR([src/saga_core/saga_gui/wksp_data_menu_files.cpp])
 #AC_CONFIG_HEADER([config.h])
 #AM_INIT_AUTOMAKE(saga, 2.0beta)
@@ -16,10 +16,21 @@ AC_PROG_INSTALL
 AC_PROG_LIBTOOL
 
 # Checks for libraries.
+AC_CHECK_LIB([cv], [cvGetRows], CVFOUND=1,,)
+AC_CHECK_LIB([geotrans], [Set_Mercator_Coordinates])
+AC_CHECK_LIB([fftw3],[fftw_execute],FFTWFOUND=1,)
+AC_CHECK_LIB([jasper], [jas_calloc],JASPERFOUND=1,,)
+AC_CHECK_LIB([las], [LAS_GetVersion], LASFOUND=1,,)
+AC_CHECK_LIB(hpdf, HPDF_Pages_New, HARUFOUND=1,,)
+AC_CHECK_LIB([odbc], [SQLFetch], ODBCFOUND=1,,[ODBC \(libodbc\) library not found])
+AC_CHECK_LIB([proj], [pj_is_latlong], PROJFOUND=1,,)
+AC_CHECK_LIB([vigraimpex], [VIGRA_RGBE_ReadPixels_Raw],VIGRAFOUND=1,)
 
 # Checks for header files.
 AC_HEADER_STDC
 AC_CHECK_HEADERS([float.h malloc.h memory.h stdlib.h string.h unistd.h])
+AC_CHECK_HEADERS([wchar.h])
+#todo: check for headers of the libraries above
 
 # Checks for typedefs, structures, and compiler characteristics.
 AC_HEADER_STDBOOL
@@ -56,8 +67,13 @@ AC_ARG_ENABLE(unicode,
       esac],[unicode=false])
       AM_CONDITIONAL(SAGA_UNICODE, test "`wx-config --list | grep unicode`" != "" -a x$unicode = xtrue )
 
+
 #AM_CONDITIONAL(X86_64, test "`uname -m`" = "x86_64")
-AC_CHECK_LIB(hpdf, HPDF_Pages_New, HARUFOUND=1,,)
+    AM_CONDITIONAL(HAVE_CV, test -n "$CVFOUND")
+    AM_CONDITIONAL(HAVE_LLAS, test -n "$LASFOUND")
+    AM_CONDITIONAL(HAVE_VIGRA, test -n "$VIGRAFOUND" -a -n "$FFTWFOUND")
+    AM_CONDITIONAL(HAVE_HARU, test -n "$HARUFOUND")
+
   if test -n "$HARUFOUND" ; then 
     AC_MSG_RESULT([        using lhpdf (libharu) from system libs.])
     DISABLELIBHARU=""
@@ -71,7 +87,23 @@ AC_CHECK_LIB(hpdf, HPDF_Pages_New, HARUFOUND=1,,)
 AC_SUBST(HARU_LIB)
 AC_SUBST(DISABLELIBHARU)
 
+AC_CONFIG_MACRO_DIR([m4])
+AC_ARG_ENABLE(python,
+    [  --enable-python    Build python bindings for the saga api],
+     [case "${enableval}" in
+        yes) python=true ;;
+        no)  python=false ;;
+        *) AC_MSG_ERROR(bad value ${enableval} for --enable-python) ;;
+      esac],[python=false])
+      AM_CONDITIONAL(SAGA_PYTHON, test x$python = xtrue)
+if test x$python = xtrue; then
+AM_PATH_PYTHON
+AX_PYTHON_DEVEL([])
 
+AX_PKG_SWIG(1.3.17,[],[])
+AX_SWIG_ENABLE_CXX
+AX_SWIG_PYTHON
+fi
 #AC_CONFIG_FILES([Makefile])
 AC_OUTPUT(Makefile \
 	src/Makefile \
@@ -103,7 +135,7 @@ AC_OUTPUT(Makefile \
 	src/modules/shapes/shapes_points/Makefile \
 	src/modules/shapes/shapes_polygons/Makefile \
 	src/modules/shapes/shapes_tools/Makefile \
-        src/modules/shapes/shapes_transect/Makefile \
+	src/modules/shapes/shapes_transect/Makefile \
 	src/modules/table/Makefile \
 	src/modules/table/table_calculus/Makefile \
 	src/modules/table/table_tools/Makefile \
@@ -120,11 +152,21 @@ AC_OUTPUT(Makefile \
 	src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile \
 	src/modules_geostatistics/geostatistics/geostatistics_kriging/Makefile \
 	src/modules_geostatistics/geostatistics/geostatistics_regression/Makefile \
+    src/modules_images/Makefile \
+    src/modules_images/modules_imagery/imagery_segmentation/Makefile \
+    src/modules_images/modules_imagery/Makefile \
+    src/modules_images/modules_opencv/Makefile \
+    src/modules_images/modules_opencv/opencv/Makefile \
+    src/modules_images/modules_vigra/Makefile \
+    src/modules_images/modules_vigra/vigra/Makefile \
 	src/modules_io/Makefile \
 	src/modules_io/esri_e00/Makefile \
 	src/modules_io/esri_e00/io_esri_e00/Makefile \
 	src/modules_io/db/Makefile \
 	src/modules_io/db/io_odbc/Makefile \
+	src/modules_io/docs/Makefile \
+	src/modules_io/docs/docs_html/Makefile \
+	src/modules_io/docs/docs_pdf/Makefile \
 	src/modules_io/gdal/Makefile \
 	src/modules_io/gdal/io_gdal/Makefile \
 	src/modules_io/grid/Makefile \
@@ -136,6 +178,7 @@ AC_OUTPUT(Makefile \
 	src/modules_io/shapes/Makefile \
 	src/modules_io/shapes/io_shapes/Makefile \
 	src/modules_io/shapes/io_shapes_dxf/Makefile \
+	src/modules_io/shapes/io_shapes_las/Makefile \
 	src/modules_io/table/Makefile \
 	src/modules_io/table/io_table/Makefile \
 	src/modules_lectures/Makefile \
@@ -162,7 +205,6 @@ AC_OUTPUT(Makefile \
 	src/modules_terrain_analysis/Makefile \
 	src/modules_terrain_analysis/terrain_analysis/Makefile \
 	src/modules_terrain_analysis/terrain_analysis/ta_channels/Makefile \
-	src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile \
 	src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile \
 	src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile \
 	src/modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile \
diff --git a/ltmain.sh b/ltmain.sh
index b36c4ad..a72f2fd 100755
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,6 +1,6 @@
 # Generated from ltmain.m4sh.
 
-# ltmain.sh (GNU libtool) 2.2.6
+# ltmain.sh (GNU libtool) 2.2.6b
 # Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
@@ -65,7 +65,7 @@
 #       compiler:		$LTCC
 #       compiler flags:		$LTCFLAGS
 #       linker:		$LD (gnu? $with_gnu_ld)
-#       $progname:		(GNU libtool) 2.2.6
+#       $progname:		(GNU libtool) 2.2.6b
 #       automake:		$automake_version
 #       autoconf:		$autoconf_version
 #
@@ -73,9 +73,9 @@
 
 PROGRAM=ltmain.sh
 PACKAGE=libtool
-VERSION=2.2.6
+VERSION=2.2.6b
 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
@@ -116,15 +116,15 @@ $lt_unset CDPATH
 
 : ${CP="cp -f"}
 : ${ECHO="echo"}
-: ${EGREP="/usr/bin/grep -E"}
-: ${FGREP="/usr/bin/grep -F"}
-: ${GREP="/usr/bin/grep"}
+: ${EGREP="/bin/grep -E"}
+: ${FGREP="/bin/grep -F"}
+: ${GREP="/bin/grep"}
 : ${LN_S="ln -s"}
 : ${MAKE="make"}
 : ${MKDIR="mkdir"}
 : ${MV="mv -f"}
 : ${RM="rm -f"}
-: ${SED="/opt/local/bin/gsed"}
+: ${SED="/bin/sed"}
 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
 : ${Xsed="$SED -e 1s/^X//"}
 
diff --git a/m4/ax_pkg_swig.m4 b/m4/ax_pkg_swig.m4
new file mode 100644
index 0000000..81226fb
--- /dev/null
+++ b/m4/ax_pkg_swig.m4
@@ -0,0 +1,133 @@
+# ===========================================================================
+#        http://www.gnu.org/software/autoconf-archive/ax_pkg_swig.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PKG_SWIG([major.minor.micro], [action-if-found], [action-if-not-found])
+#
+# DESCRIPTION
+#
+#   This macro searches for a SWIG installation on your system. If found,
+#   then SWIG is AC_SUBST'd; if not found, then $SWIG is empty.  If SWIG is
+#   found, then SWIG_LIB is set to the SWIG library path, and AC_SUBST'd.
+#
+#   You can use the optional first argument to check if the version of the
+#   available SWIG is greater than or equal to the value of the argument. It
+#   should have the format: N[.N[.N]] (N is a number between 0 and 999. Only
+#   the first N is mandatory.) If the version argument is given (e.g.
+#   1.3.17), AX_PKG_SWIG checks that the swig package is this version number
+#   or higher.
+#
+#   As usual, action-if-found is executed if SWIG is found, otherwise
+#   action-if-not-found is executed.
+#
+#   In configure.in, use as:
+#
+#     AX_PKG_SWIG(1.3.17, [], [ AC_MSG_ERROR([SWIG is required to build..]) ])
+#     AX_SWIG_ENABLE_CXX
+#     AX_SWIG_MULTI_MODULE_SUPPORT
+#     AX_SWIG_PYTHON
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Sebastian Huber <sebastian-huber at web.de>
+#   Copyright (c) 2008 Alan W. Irwin <irwin at beluga.phys.uvic.ca>
+#   Copyright (c) 2008 Rafael Laboissiere <rafael at laboissiere.net>
+#   Copyright (c) 2008 Andrew Collier <colliera at ukzn.ac.za>
+#
+#   This program 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.
+#
+#   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 General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 7
+
+AC_DEFUN([AX_PKG_SWIG],[
+        AC_PATH_PROG([SWIG],[swig])
+        if test -z "$SWIG" ; then
+                m4_ifval([$3],[$3],[:])
+        elif test -n "$1" ; then
+                AC_MSG_CHECKING([SWIG version])
+                [swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`]
+                AC_MSG_RESULT([$swig_version])
+                if test -n "$swig_version" ; then
+                        # Calculate the required version number components
+                        [required=$1]
+                        [required_major=`echo $required | sed 's/[^0-9].*//'`]
+                        if test -z "$required_major" ; then
+                                [required_major=0]
+                        fi
+                        [required=`echo $required | sed 's/[0-9]*[^0-9]//'`]
+                        [required_minor=`echo $required | sed 's/[^0-9].*//'`]
+                        if test -z "$required_minor" ; then
+                                [required_minor=0]
+                        fi
+                        [required=`echo $required | sed 's/[0-9]*[^0-9]//'`]
+                        [required_patch=`echo $required | sed 's/[^0-9].*//'`]
+                        if test -z "$required_patch" ; then
+                                [required_patch=0]
+                        fi
+                        # Calculate the available version number components
+                        [available=$swig_version]
+                        [available_major=`echo $available | sed 's/[^0-9].*//'`]
+                        if test -z "$available_major" ; then
+                                [available_major=0]
+                        fi
+                        [available=`echo $available | sed 's/[0-9]*[^0-9]//'`]
+                        [available_minor=`echo $available | sed 's/[^0-9].*//'`]
+                        if test -z "$available_minor" ; then
+                                [available_minor=0]
+                        fi
+                        [available=`echo $available | sed 's/[0-9]*[^0-9]//'`]
+                        [available_patch=`echo $available | sed 's/[^0-9].*//'`]
+                        if test -z "$available_patch" ; then
+                                [available_patch=0]
+                        fi
+                        # Convert the version tuple into a single number for easier comparison.
+                        # Using base 100 should be safe since SWIG internally uses BCD values
+                        # to encode its version number.
+                        required_swig_vernum=`expr $required_major \* 10000 \
+                            \+ $required_minor \* 100 \+ $required_patch`
+                        available_swig_vernum=`expr $available_major \* 10000 \
+                            \+ $available_minor \* 100 \+ $available_patch`
+
+                        if test $available_swig_vernum -lt $required_swig_vernum; then
+                                AC_MSG_WARN([SWIG version >= $1 is required.  You have $swig_version.])
+                                SWIG=''
+                                m4_ifval([$3],[$3],[])
+                        else
+                                AC_MSG_CHECKING([for SWIG library])
+                                SWIG_LIB=`$SWIG -swiglib`
+                                AC_MSG_RESULT([$SWIG_LIB])
+                                m4_ifval([$2],[$2],[])
+                        fi
+                else
+                        AC_MSG_WARN([cannot determine SWIG version])
+                        SWIG=''
+                        m4_ifval([$3],[$3],[])
+                fi
+        fi
+        AC_SUBST([SWIG_LIB])
+])
diff --git a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4
new file mode 100644
index 0000000..a62b860
--- /dev/null
+++ b/m4/ax_python_devel.m4
@@ -0,0 +1,325 @@
+# ===========================================================================
+#      http://www.gnu.org/software/autoconf-archive/ax_python_devel.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PYTHON_DEVEL([version])
+#
+# DESCRIPTION
+#
+#   Note: Defines as a precious variable "PYTHON_VERSION". Don't override it
+#   in your configure.ac.
+#
+#   This macro checks for Python and tries to get the include path to
+#   'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS)
+#   output variables. It also exports $(PYTHON_EXTRA_LIBS) and
+#   $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
+#
+#   You can search for some particular version of Python by passing a
+#   parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please
+#   note that you *have* to pass also an operator along with the version to
+#   match, and pay special attention to the single quotes surrounding the
+#   version number. Don't use "PYTHON_VERSION" for this: that environment
+#   variable is declared as precious and thus reserved for the end-user.
+#
+#   This macro should work for all versions of Python >= 2.1.0. As an end
+#   user, you can disable the check for the python version by setting the
+#   PYTHON_NOVERSIONCHECK environment variable to something else than the
+#   empty string.
+#
+#   If you need to use this macro for an older Python version, please
+#   contact the authors. We're always open for feedback.
+#
+# LICENSE
+#
+#   Copyright (c) 2009 Sebastian Huber <sebastian-huber at web.de>
+#   Copyright (c) 2009 Alan W. Irwin <irwin at beluga.phys.uvic.ca>
+#   Copyright (c) 2009 Rafael Laboissiere <rafael at laboissiere.net>
+#   Copyright (c) 2009 Andrew Collier <colliera at ukzn.ac.za>
+#   Copyright (c) 2009 Matteo Settenvini <matteo at member.fsf.org>
+#   Copyright (c) 2009 Horst Knorr <hk_classes at knoda.org>
+#
+#   This program 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 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 General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 8
+
+AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
+AC_DEFUN([AX_PYTHON_DEVEL],[
+	#
+	# Allow the use of a (user set) custom python version
+	#
+	AC_ARG_VAR([PYTHON_VERSION],[The installed Python
+		version to use, for example '2.3'. This string
+		will be appended to the Python interpreter
+		canonical name.])
+
+	AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
+	if test -z "$PYTHON"; then
+	   AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
+	   PYTHON_VERSION=""
+	fi
+
+	#
+	# Check for a version of Python >= 2.1.0
+	#
+	AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
+	ac_supports_python_ver=`$PYTHON -c "import sys; \
+		ver = sys.version.split ()[[0]]; \
+		print (ver >= '2.1.0')"`
+	if test "$ac_supports_python_ver" != "True"; then
+		if test -z "$PYTHON_NOVERSIONCHECK"; then
+			AC_MSG_RESULT([no])
+			AC_MSG_FAILURE([
+This version of the AC@&t at _PYTHON_DEVEL macro
+doesn't work properly with versions of Python before
+2.1.0. You may need to re-run configure, setting the
+variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
+PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
+Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
+to something else than an empty string.
+])
+		else
+			AC_MSG_RESULT([skip at user request])
+		fi
+	else
+		AC_MSG_RESULT([yes])
+	fi
+
+	#
+	# if the macro parameter ``version'' is set, honour it
+	#
+	if test -n "$1"; then
+		AC_MSG_CHECKING([for a version of Python $1])
+		ac_supports_python_ver=`$PYTHON -c "import sys; \
+			ver = sys.version.split ()[[0]]; \
+			print (ver $1)"`
+		if test "$ac_supports_python_ver" = "True"; then
+		   AC_MSG_RESULT([yes])
+		else
+			AC_MSG_RESULT([no])
+			AC_MSG_ERROR([this package requires Python $1.
+If you have it installed, but it isn't the default Python
+interpreter in your system path, please pass the PYTHON_VERSION
+variable to configure. See ``configure --help'' for reference.
+])
+			PYTHON_VERSION=""
+		fi
+	fi
+
+	#
+	# Check if you have distutils, else fail
+	#
+	AC_MSG_CHECKING([for the distutils Python package])
+	ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+	if test -z "$ac_distutils_result"; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		AC_MSG_ERROR([cannot import Python module "distutils".
+Please check your Python installation. The error was:
+$ac_distutils_result])
+		PYTHON_VERSION=""
+	fi
+
+	#
+	# Check for Python include path
+	#
+	AC_MSG_CHECKING([for Python include path])
+	if test -z "$PYTHON_CPPFLAGS"; then
+		python_path=`$PYTHON -c "import distutils.sysconfig; \
+			print (distutils.sysconfig.get_python_inc ());"`
+		if test -n "${python_path}"; then
+			python_path="-I$python_path"
+		fi
+		PYTHON_CPPFLAGS=$python_path
+	fi
+	AC_MSG_RESULT([$PYTHON_CPPFLAGS])
+	AC_SUBST([PYTHON_CPPFLAGS])
+
+	#
+	# Check for Python library path
+	#
+	AC_MSG_CHECKING([for Python library path])
+	if test -z "$PYTHON_LDFLAGS"; then
+		# (makes two attempts to ensure we've got a version number
+		# from the interpreter)
+		ac_python_version=`cat<<EOD | $PYTHON -
+
+# join all versioning strings, on some systems
+# major/minor numbers could be in different list elements
+from distutils.sysconfig import *
+ret = ''
+for e in get_config_vars ('VERSION'):
+	if (e != None):
+		ret += e
+print (ret)
+EOD`
+
+		if test -z "$ac_python_version"; then
+			if test -n "$PYTHON_VERSION"; then
+				ac_python_version=$PYTHON_VERSION
+			else
+				ac_python_version=`$PYTHON -c "import sys; \
+					print (sys.version[[:3]])"`
+			fi
+		fi
+
+		# Make the versioning information available to the compiler
+		AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"],
+                                   [If available, contains the Python version number currently in use.])
+
+		# First, the library directory:
+		ac_python_libdir=`cat<<EOD | $PYTHON -
+
+# There should be only one
+import distutils.sysconfig
+for e in distutils.sysconfig.get_config_vars ('LIBDIR'):
+	if e != None:
+		print (e)
+		break
+EOD`
+
+		# Before checking for libpythonX.Y, we need to know
+		# the extension the OS we're on uses for libraries
+		# (we take the first one, if there's more than one fix me!):
+		ac_python_soext=`$PYTHON -c \
+		  "import distutils.sysconfig; \
+		  print (distutils.sysconfig.get_config_vars('SO')[[0]])"`
+
+		# Now, for the library:
+		ac_python_soname=`$PYTHON -c \
+		  "import distutils.sysconfig; \
+		  print (distutils.sysconfig.get_config_vars('LDLIBRARY')[[0]])"`
+
+		# Strip away extension from the end to canonicalize its name:
+		ac_python_library=`echo "$ac_python_soname" | sed "s/${ac_python_soext}$//"`
+
+		# This small piece shamelessly adapted from PostgreSQL python macro;
+		# credits goes to momjian, I think. I'd like to put the right name
+		# in the credits, if someone can point me in the right direction... ?
+		#
+		if test -n "$ac_python_libdir" -a -n "$ac_python_library" \
+			-a x"$ac_python_library" != x"$ac_python_soname"
+		then
+			# use the official shared library
+			ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
+			PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library"
+		else
+			# old way: use libpython from python_configdir
+			ac_python_libdir=`$PYTHON -c \
+			  "from distutils.sysconfig import get_python_lib as f; \
+			  import os; \
+			  print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
+			PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version"
+		fi
+
+		if test -z "PYTHON_LDFLAGS"; then
+			AC_MSG_ERROR([
+  Cannot determine location of your Python DSO. Please check it was installed with
+  dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand.
+			])
+		fi
+	fi
+	AC_MSG_RESULT([$PYTHON_LDFLAGS])
+	AC_SUBST([PYTHON_LDFLAGS])
+
+	#
+	# Check for site packages
+	#
+	AC_MSG_CHECKING([for Python site-packages path])
+	if test -z "$PYTHON_SITE_PKG"; then
+		PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
+			print (distutils.sysconfig.get_python_lib(0,0));"`
+	fi
+	AC_MSG_RESULT([$PYTHON_SITE_PKG])
+	AC_SUBST([PYTHON_SITE_PKG])
+
+	#
+	# libraries which must be linked in when embedding
+	#
+	AC_MSG_CHECKING(python extra libraries)
+	if test -z "$PYTHON_EXTRA_LIBS"; then
+	   PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
+                conf = distutils.sysconfig.get_config_var; \
+                print (conf('LOCALMODLIBS') + ' ' + conf('LIBS'))"`
+	fi
+	AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
+	AC_SUBST(PYTHON_EXTRA_LIBS)
+
+	#
+	# linking flags needed when embedding
+	#
+	AC_MSG_CHECKING(python extra linking flags)
+	if test -z "$PYTHON_EXTRA_LDFLAGS"; then
+		PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
+			conf = distutils.sysconfig.get_config_var; \
+			print (conf('LINKFORSHARED'))"`
+	fi
+	AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
+	AC_SUBST(PYTHON_EXTRA_LDFLAGS)
+
+	#
+	# final check to see if everything compiles alright
+	#
+	AC_MSG_CHECKING([consistency of all components of python development environment])
+	# save current global flags
+	ac_save_LIBS="$LIBS"
+	ac_save_CPPFLAGS="$CPPFLAGS"
+	LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS"
+	CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
+	AC_LANG_PUSH([C])
+	AC_LINK_IFELSE([
+		AC_LANG_PROGRAM([[#include <Python.h>]],
+				[[Py_Initialize();]])
+		],[pythonexists=yes],[pythonexists=no])
+	AC_LANG_POP([C])
+	# turn back to default flags
+	CPPFLAGS="$ac_save_CPPFLAGS"
+	LIBS="$ac_save_LIBS"
+
+	AC_MSG_RESULT([$pythonexists])
+
+        if test ! "x$pythonexists" = "xyes"; then
+	   AC_MSG_FAILURE([
+  Could not link test program to Python. Maybe the main Python library has been
+  installed in some non-standard library path. If so, pass it to configure,
+  via the LDFLAGS environment variable.
+  Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
+  ============================================================================
+   ERROR!
+   You probably have to install the development version of the Python package
+   for your distribution.  The exact name of this package varies among them.
+  ============================================================================
+	   ])
+	  PYTHON_VERSION=""
+	fi
+
+	#
+	# all done!
+	#
+])
diff --git a/m4/ax_swig_enable_cxx.m4 b/m4/ax_swig_enable_cxx.m4
new file mode 100644
index 0000000..348c15d
--- /dev/null
+++ b/m4/ax_swig_enable_cxx.m4
@@ -0,0 +1,53 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_swig_enable_cxx.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_SWIG_ENABLE_CXX
+#
+# DESCRIPTION
+#
+#   Enable SWIG C++ support. This affects all invocations of $(SWIG).
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Sebastian Huber <sebastian-huber at web.de>
+#   Copyright (c) 2008 Alan W. Irwin <irwin at beluga.phys.uvic.ca>
+#   Copyright (c) 2008 Rafael Laboissiere <rafael at laboissiere.net>
+#   Copyright (c) 2008 Andrew Collier <colliera at ukzn.ac.za>
+#
+#   This program 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.
+#
+#   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 General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 6
+
+AU_ALIAS([SWIG_ENABLE_CXX], [AX_SWIG_ENABLE_CXX])
+AC_DEFUN([AX_SWIG_ENABLE_CXX],[
+        AC_REQUIRE([AX_PKG_SWIG])
+        AC_REQUIRE([AC_PROG_CXX])
+        SWIG="$SWIG -c++"
+])
diff --git a/m4/ax_swig_python.m4 b/m4/ax_swig_python.m4
new file mode 100644
index 0000000..8fd3df5
--- /dev/null
+++ b/m4/ax_swig_python.m4
@@ -0,0 +1,64 @@
+# ===========================================================================
+#      http://www.gnu.org/software/autoconf-archive/ax_swig_python.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_SWIG_PYTHON([use-shadow-classes = {no, yes}])
+#
+# DESCRIPTION
+#
+#   Checks for Python and provides the $(AX_SWIG_PYTHON_CPPFLAGS), and
+#   $(AX_SWIG_PYTHON_OPT) output variables.
+#
+#   $(AX_SWIG_PYTHON_OPT) contains all necessary SWIG options to generate
+#   code for Python. Shadow classes are enabled unless the value of the
+#   optional first argument is exactly 'no'. If you need multi module
+#   support (provided by the AX_SWIG_MULTI_MODULE_SUPPORT macro) use
+#   $(AX_SWIG_PYTHON_LIBS) to link against the appropriate library. It
+#   contains the SWIG Python runtime library that is needed by the type
+#   check system for example.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Sebastian Huber <sebastian-huber at web.de>
+#   Copyright (c) 2008 Alan W. Irwin <irwin at beluga.phys.uvic.ca>
+#   Copyright (c) 2008 Rafael Laboissiere <rafael at laboissiere.net>
+#   Copyright (c) 2008 Andrew Collier <colliera at ukzn.ac.za>
+#
+#   This program 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.
+#
+#   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 General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 7
+
+AU_ALIAS([SWIG_PYTHON], [AX_SWIG_PYTHON])
+AC_DEFUN([AX_SWIG_PYTHON],[
+        AC_REQUIRE([AX_PKG_SWIG])
+        AC_REQUIRE([AX_PYTHON_DEVEL])
+        test "x$1" != "xno" || swig_shadow=" -noproxy"
+        AC_SUBST([AX_SWIG_PYTHON_OPT],[-python$swig_shadow])
+        AC_SUBST([AX_SWIG_PYTHON_CPPFLAGS],[$PYTHON_CPPFLAGS])
+])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644
index 0000000..671cde1
--- /dev/null
+++ b/m4/libtool.m4
@@ -0,0 +1,7360 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+		   [m4_fatal([Libtool version $1 or higher is required],
+		             63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\	*)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+	[m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+	[tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+	   m4_quote(lt_decl_varnames),
+	m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+					   [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+	dnl If the libtool generation code has been placed in $CONFIG_LT,
+	dnl instead of duplicating it all over again into config.status,
+	dnl then we will have config.status run $CONFIG_LT later, so it
+	dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+  ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool at gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec AS_MESSAGE_LOG_FD>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec AS_MESSAGE_LOG_FD>>config.log
+  $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_XSI_SHELLFNS
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],			[_LT_LANG(C)],
+  [C++],		[_LT_LANG(CXX)],
+  [Java],		[_LT_LANG(GCJ)],
+  [Fortran 77],		[_LT_LANG(F77)],
+  [Fortran],		[_LT_LANG(FC)],
+  [Windows Resource],	[_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+	[lt_cv_ld_exported_symbols_list=yes],
+	[lt_cv_ld_exported_symbols_list=no])
+	LDFLAGS="$save_LDFLAGS"
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[[012]]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+	 [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+[$]*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+	   test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	  # Cool, printf works
+	  :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	     test "X$echo_testing_string" = 'X\t' &&
+	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	     test "X$echo_testing_string" = "X$echo_test_string"; then
+	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	  export CONFIG_SHELL
+	  SHELL="$CONFIG_SHELL"
+	  export SHELL
+	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	     test "X$echo_testing_string" = 'X\t' &&
+	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	     test "X$echo_testing_string" = "X$echo_test_string"; then
+	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        else
+	  # maybe with a smaller string...
+	  prev=:
+
+	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+	    then
+	      break
+	    fi
+	    prev="$cmd"
+	  done
+
+	  if test "$prev" != 'sed 50q "[$]0"'; then
+	    echo_test_string=`eval $prev`
+	    export echo_test_string
+	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+	  else
+	    # Oops.  We lost completely, so just stick with echo.
+	    ECHO=echo
+	  fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+    [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+	  lt_cv_dlopen_self_static, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+	 [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+	 [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+	 [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+	[Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+	[], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+       [shlibpath_overrides_runpath=yes])])
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+  # 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="$sys_lib_dlsearch_path_spec $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'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+	[Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  xlc* | xlC*)
+	    # IBM XL 8.0 on PPC
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl*)
+	# IBM XL C 8.0/Fortran 10.1 on PPC
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)
+	  # Sun C 5.9
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  ;;
+	*Sun\ F*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+	[Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+	[Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw* | cegcc*)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+	  tmp_sharedflag='--shared' ;;
+	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 _LT_SYS_MODULE_PATH_AIX
+	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  # Exported symbols can be pulled into shared objects from archives
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	*)
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        AC_LINK_IFELSE(int foo(void) {},
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+        )
+        LDFLAGS="$save_LDFLAGS"
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	     ;;
+	   *)
+	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+        _LT_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+        then
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+    [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## 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_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    _LT_SYS_MODULE_PATH_AIX
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+        # as there is no search path for DLLs.
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+        _LT_TAGVAR(always_export_symbols, $1)=no
+        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    cp $export_symbols $output_objdir/$soname.def;
+          else
+	    echo EXPORTS > $output_objdir/$soname.def;
+	    cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          _LT_TAGVAR(ld_shlibs, $1)=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+	_LT_TAGVAR(hardcode_direct, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	      fi
+	    fi
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+	    ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$RANLIB $oldlib'
+	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 will use weak symbols
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+	  xl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='echo'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=echo
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+		;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	    case $host_os in
+	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+	    output_verbose_link_cmd='echo'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      fi
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+		*)
+		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+	_LT_TAGVAR(link_all_deplibs, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	  *)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+	   _LT_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+	   _LT_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${F77-"f77"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${FC-"f95"}
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## 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_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]+=\$[2]"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+    ;;
+  esac
+])
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644
index 0000000..34151a3
--- /dev/null
+++ b/m4/ltoptions.m4
@@ -0,0 +1,368 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+		      [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+  		   [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+	[Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+	[Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+	 [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+		 [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+		 [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+		 [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+		 [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+		 [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644
index 0000000..9000a05
--- /dev/null
+++ b/m4/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+	     [m4_foreach([_Lt_suffix],
+		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [lt_append([$1], [$2], [$3])$4],
+		 [$5])],
+	  [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+	[$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644
index 0000000..f3c5309
--- /dev/null
+++ b/m4/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers			-*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# Generated from ltversion.in.
+
+# serial 3017 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3017])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6b'
+macro_revision='1.3017'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644
index 0000000..637bb20
--- /dev/null
+++ b/m4/lt~obsolete.m4
@@ -0,0 +1,92 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
diff --git a/py-compile b/py-compile
new file mode 100755
index 0000000..3f9d05b
--- /dev/null
+++ b/py-compile
@@ -0,0 +1,146 @@
+#!/bin/sh
+# py-compile - Compile a Python program
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009 Free Software
+# Foundation, Inc.
+
+# This program 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, 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 General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+if [ -z "$PYTHON" ]; then
+  PYTHON=python
+fi
+
+basedir=
+destdir=
+files=
+while test $# -ne 0; do
+  case "$1" in
+    --basedir)
+      basedir=$2
+      if test -z "$basedir"; then
+        echo "$0: Missing argument to --basedir." 1>&2
+        exit 1
+      fi
+      shift
+      ;;
+    --destdir)
+      destdir=$2
+      if test -z "$destdir"; then
+        echo "$0: Missing argument to --destdir." 1>&2
+        exit 1
+      fi
+      shift
+      ;;
+    -h|--h*)
+      cat <<\EOF
+Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..."
+
+Byte compile some python scripts FILES.  Use --destdir to specify any
+leading directory path to the FILES that you don't want to include in the
+byte compiled file.  Specify --basedir for any additional path information you
+do want to be shown in the byte compiled file.
+
+Example:
+  py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+      exit $?
+      ;;
+    -v|--v*)
+      echo "py-compile $scriptversion"
+      exit $?
+      ;;
+    *)
+      files="$files $1"
+      ;;
+  esac
+  shift
+done
+
+if test -z "$files"; then
+    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2
+    exit 1
+fi
+
+# if basedir was given, then it should be prepended to filenames before
+# byte compilation.
+if [ -z "$basedir" ]; then
+    pathtrans="path = file"
+else
+    pathtrans="path = os.path.join('$basedir', file)"
+fi
+
+# if destdir was given, then it needs to be prepended to the filename to
+# byte compile but not go into the compiled file.
+if [ -z "$destdir" ]; then
+    filetrans="filepath = path"
+else
+    filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)"
+fi
+
+$PYTHON -c "
+import sys, os, py_compile
+
+files = '''$files'''
+
+sys.stdout.write('Byte-compiling python modules...\n')
+for file in files.split():
+    $pathtrans
+    $filetrans
+    if not os.path.exists(filepath) or not (len(filepath) >= 3
+                                            and filepath[-3:] == '.py'):
+	    continue
+    sys.stdout.write(file)
+    sys.stdout.flush()
+    py_compile.compile(filepath, filepath + 'c', path)
+sys.stdout.write('\n')" || exit $?
+
+# this will fail for python < 1.5, but that doesn't matter ...
+$PYTHON -O -c "
+import sys, os, py_compile
+
+files = '''$files'''
+sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n')
+for file in files.split():
+    $pathtrans
+    $filetrans
+    if not os.path.exists(filepath) or not (len(filepath) >= 3
+                                            and filepath[-3:] == '.py'):
+	    continue
+    sys.stdout.write(file)
+    sys.stdout.flush()
+    py_compile.compile(filepath, filepath + 'o', path)
+sys.stdout.write('\n')" 2>/dev/null || :
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/src/Makefile.am b/src/Makefile.am
index d387c96..56763e3 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1 +1 @@
-SUBDIRS = saga_core modules modules_contrib modules_geostatistics modules_io modules_projection modules_recreations modules_simulation modules_terrain_analysis modules_lectures
+SUBDIRS = saga_core modules modules_contrib modules_geostatistics modules_images modules_io modules_projection modules_recreations modules_simulation modules_terrain_analysis modules_lectures
diff --git a/src/Makefile.in b/src/Makefile.in
index 99e13ea..b8d7ffa 100644
--- a/src/Makefile.in
+++ b/src/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -203,7 +228,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = saga_core modules modules_contrib modules_geostatistics modules_io modules_projection modules_recreations modules_simulation modules_terrain_analysis modules_lectures
+SUBDIRS = saga_core modules modules_contrib modules_geostatistics modules_images modules_io modules_projection modules_recreations modules_simulation modules_terrain_analysis modules_lectures
 all: all-recursive
 
 .SUFFIXES:
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules/Makefile.in b/src/modules/Makefile.in
index 5d487c4..4963e18 100644
--- a/src/modules/Makefile.in
+++ b/src/modules/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules/grid/Makefile.in b/src/modules/grid/Makefile.in
index e8249f4..c6dfc24 100644
--- a/src/modules/grid/Makefile.in
+++ b/src/modules/grid/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules/grid
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules/grid/grid_analysis/Cost_PolarToRect.cpp b/src/modules/grid/grid_analysis/Cost_PolarToRect.cpp
index 3b94b3d..c4453b0 100644
--- a/src/modules/grid/grid_analysis/Cost_PolarToRect.cpp
+++ b/src/modules/grid/grid_analysis/Cost_PolarToRect.cpp
@@ -1,90 +1,94 @@
-/*******************************************************************************
-    Cost_PolarToRect.cpp
-    Copyright (C) Victor Olaya
-    
-    This program 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.
-
-    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 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 "Cost_PolarToRect.h"
-
-
-CCost_PolarToRect::CCost_PolarToRect(void){
-
-	Set_Name		(_TL("Polar To Rect"));
-	Set_Author		(_TL("Copyrights (c) 2004 by Victor Olaya"));
-	Set_Description	(_TW(
-		"(c) 2004 by Victor Olaya. Polar to Rect conversion for paired Vector data."));
-
-	Parameters.Add_Grid(NULL, 
-						"ANGLE", 
-						_TL("Angle. In radians"), 
-						_TL(""), 
-						PARAMETER_INPUT);
-
-	Parameters.Add_Grid(NULL, 
-						"MAGNITUDE", 
-						_TL("Magnitude"), 
-						_TL(""), 
-						PARAMETER_INPUT);
-	
-	Parameters.Add_Grid(NULL, 
-						"X", 
-						_TL("X Component"), 
-						_TL(""), 
-						PARAMETER_OUTPUT, 
-						true, 
-						SG_DATATYPE_Double);
-	
-	Parameters.Add_Grid(NULL, 
-						"Y", 
-						_TL("Y Component"), 
-						_TL(""), 
-						PARAMETER_OUTPUT, 
-						true, 
-						SG_DATATYPE_Double);
-
-}//constructor
-
-
-CCost_PolarToRect::~CCost_PolarToRect(void)
-{}
-
-bool CCost_PolarToRect::On_Execute(void){
-	
-	double dX,dY;
-	double dMagnitude, dAngle;
-	
-	CSG_Grid* pAngle = Parameters("ANGLE")->asGrid(); 
-	CSG_Grid* pMagnitude = Parameters("MAGNITUDE")->asGrid(); 
-	CSG_Grid* pX = Parameters("X")->asGrid(); 
-	CSG_Grid* pY = Parameters("Y")->asGrid(); 
-
-	pX->Assign(0.0);
-	pY->Assign(0.0);
-	
-    for(int y=0; y<Get_NY() && Set_Progress(y); y++){		
-		for(int x=0; x<Get_NX(); x++){
-			dAngle = pAngle->asDouble(x,y);
-			dMagnitude = pMagnitude->asDouble(x,y);
-			dX = cos(dAngle)*dMagnitude;
-			dY = sin(dAngle)*dMagnitude;			
-			pX->Set_Value(x,y,dX);
-			pY->Set_Value(x,y,dY);
-        }// for
-    }// for
-
-	return true;
-
-}//method
+/*******************************************************************************
+    Cost_PolarToRect.cpp
+    Copyright (C) Victor Olaya
+    
+    This program 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.
+
+    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 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 "Cost_PolarToRect.h"
+
+
+CCost_PolarToRect::CCost_PolarToRect(void){
+
+	Set_Name		(_TL("Polar To Rect"));
+	Set_Author		(_TL("Copyrights (c) 2004 by Victor Olaya"));
+	Set_Description	(_TW(
+		"(c) 2004 by Victor Olaya. Polar to Rect conversion for paired Vector data."));
+
+	Parameters.Add_Grid(NULL, 
+						"ANGLE", 
+						_TL("Angle. In radians"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"MAGNITUDE", 
+						_TL("Magnitude"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+	
+	Parameters.Add_Grid(NULL, 
+						"X", 
+						_TL("X Component"), 
+						_TL(""), 
+						PARAMETER_OUTPUT, 
+						true, 
+						SG_DATATYPE_Double);
+	
+	Parameters.Add_Grid(NULL, 
+						"Y", 
+						_TL("Y Component"), 
+						_TL(""), 
+						PARAMETER_OUTPUT, 
+						true, 
+						SG_DATATYPE_Double);
+
+}//constructor
+
+
+CCost_PolarToRect::~CCost_PolarToRect(void)
+{}
+
+bool CCost_PolarToRect::On_Execute(void){
+	
+	double dX,dY;
+	double dMagnitude, dAngle;
+	
+	CSG_Grid* pAngle = Parameters("ANGLE")->asGrid(); 
+	CSG_Grid* pMagnitude = Parameters("MAGNITUDE")->asGrid(); 
+	CSG_Grid* pX = Parameters("X")->asGrid(); 
+	CSG_Grid* pY = Parameters("Y")->asGrid(); 
+
+	
+    for(int y=0; y<Get_NY() && Set_Progress(y); y++){		
+		for(int x=0; x<Get_NX(); x++){
+			if( pAngle->is_NoData(x, y) || pMagnitude->is_NoData(x, y) )
+			{
+				pX->Set_NoData(x, y);
+				pY->Set_NoData(x, y);
+				continue;
+			}
+			dAngle = pAngle->asDouble(x,y);
+			dMagnitude = pMagnitude->asDouble(x,y);
+			dX = cos(dAngle)*dMagnitude;
+			dY = sin(dAngle)*dMagnitude;			
+			pX->Set_Value(x,y,dX);
+			pY->Set_Value(x,y,dY);
+        }// for
+    }// for
+
+	return true;
+
+}//method
diff --git a/src/modules/grid/grid_analysis/Cost_RectToPolar.cpp b/src/modules/grid/grid_analysis/Cost_RectToPolar.cpp
index b7f7373..761a26f 100644
--- a/src/modules/grid/grid_analysis/Cost_RectToPolar.cpp
+++ b/src/modules/grid/grid_analysis/Cost_RectToPolar.cpp
@@ -23,9 +23,16 @@
 CCost_RectToPolar::CCost_RectToPolar(void){
 
 	Set_Name(_TL("Rect To Polar"));
-	Set_Author(_TL("Copyrights (c) 2004-2009 by Victor Olaya, Volker Wichmann"));
-	Set_Description	(_TW(
-		"(c) 2004 by Victor Olaya. Rect to Polar conversion for paired Vector data."));
+	Set_Author(_TL("Victor Olaya & Volker Wichmann (c) 2004-2010"));
+	Set_Description(_TW(
+					"Rect to polar conversion for paired vector data.\n"
+					"The module supports two conventions on how to measure and "
+					"output the angle of direction:\n"
+					"(a) mathematical: angle is output in radians, whereby "
+					"east is zero, and the angle increases counterclockwise\n"
+					"(b) geographical: angle is output in degrees, whereby "
+					"north is zero, and the angle increases clockwise\n\n")
+	);
 
 	Parameters.Add_Grid(NULL, 
 						"X", 
@@ -38,10 +45,19 @@ CCost_RectToPolar::CCost_RectToPolar(void){
 						_TL("Y Component"), 
 						_TL(""), 
 						PARAMETER_INPUT);
+
+	Parameters.Add_Choice(
+		NULL	, "METHOD_ANGLE"	, _TL("Method Angle"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("mathematical"),
+			_TL("geographical")
+		), 0
+	);
 	
 	Parameters.Add_Grid(NULL, 
 						"ANGLE", 
-						_TL("Angle. In radians"), 
+						_TL("Angle"), 
 						_TL(""), 
 						PARAMETER_OUTPUT, 
 						true, 
@@ -63,15 +79,16 @@ CCost_RectToPolar::~CCost_RectToPolar(void)
 
 bool CCost_RectToPolar::On_Execute(void){
 	
-	double dX,dY;
-	double dMagnitude, dAngle;
-	double PI = 3.141592;
+	int		method;
+	double	dX,dY;
+	double	dMagnitude, dAngle;
 	
 	CSG_Grid* pAngle = Parameters("ANGLE")->asGrid(); 
 	CSG_Grid* pMagnitude = Parameters("MAGNITUDE")->asGrid(); 
 	CSG_Grid* pX = Parameters("X")->asGrid(); 
 	CSG_Grid* pY = Parameters("Y")->asGrid(); 
-	
+	method = Parameters("METHOD_ANGLE")->asInt();
+
     for(int y=0; y<Get_NY() && Set_Progress(y); y++){		
 		for(int x=0; x<Get_NX(); x++){
 			if (pX->is_NoData(x, y) || pY->is_NoData(x, y))
@@ -84,28 +101,35 @@ bool CCost_RectToPolar::On_Execute(void){
 			dX = pX->asDouble(x,y);
 			dY = pY->asDouble(x,y);
 
-			if (dX == 0.0)
+			dMagnitude =sqrt(dX*dX+dY*dY);
+
+			if( dX > 0.0 && dY < 0.0 )
 			{
-				pMagnitude->Set_NoData(x, y);
-				pAngle->Set_NoData(x, y);
-				continue;
+				dAngle = atan(dY/dX) + M_PI_360;
+			}
+			else if( dX > 0.0 && y >= 0.0 )
+			{
+				dAngle = atan((double)dY/dX);
+			}
+			else if( dX == 0.0 && dY > 0.0 )
+			{
+				dAngle = M_PI_090;
+			}
+			else if( dX == 0.0 && dY == 0.0 )
+			{
+				dAngle = pMagnitude->Get_NoData_Value();
+			}
+			else if( dX == 0.0 && dY < 0.0 )
+			{
+				dAngle = M_PI_270;
+			}
+			else if( dX < 0.0 )
+			{
+				dAngle = atan((double)dY/dX) + M_PI;
 			}
 
-			dMagnitude =sqrt(dX*dX+dY*dY);
-			dAngle = atan((double)dY/dX);	
-			if (dX*dY>0){
-				if (dY<0 && dX<0){
-					dAngle+=PI;
-				}//if
-			}//if
-			else {
-				if (dY<0){
-					dAngle = 2*PI-dAngle;
-				}//if
-				else{
-					dAngle = PI-dAngle;
-				}//else
-			}//else
+			if( method == 1 && dX != 0.0 && dY != 0.0 )
+				dAngle = fmod((450.0 - dAngle * M_RAD_TO_DEG), 360);
 
 			pMagnitude->Set_Value(x,y,dMagnitude);
 			pAngle->Set_Value(x,y,dAngle);
diff --git a/src/modules/grid/grid_analysis/Fuzzify.cpp b/src/modules/grid/grid_analysis/Fuzzify.cpp
index 8e4784c..81dec79 100644
--- a/src/modules/grid/grid_analysis/Fuzzify.cpp
+++ b/src/modules/grid/grid_analysis/Fuzzify.cpp
@@ -17,133 +17,250 @@
     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *******************************************************************************/
 
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
 #include "Fuzzify.h"
 
-#define PI2 1.57079632
-
-CFuzzify::CFuzzify(void){
-
-	Parameters.Set_Name(_TL("Fuzzify"));
-	Parameters.Set_Description(_TW(
-		"(c) 2004 by Victor Olaya. Prepares a grid for fuzzy logic analysis"));
-
-	Parameters.Add_Grid(NULL,
-						"INPUT",
-						_TL("Input Grid"),
-						_TL(""),
-						PARAMETER_INPUT);
-
-	Parameters.Add_Value(NULL,
-						"POINTA",
-						_TL("Control Point A"),
-						_TL("Control Point A"),
-						PARAMETER_TYPE_Double,
-						10);
-
-	Parameters.Add_Value(NULL,
-						"POINTB",
-						_TL("Control Point B"),
-						_TL("Control Point B"),
-						PARAMETER_TYPE_Double,
-						10);
-
-	Parameters.Add_Value(NULL,
-						"POINTC",
-						_TL("Control Point C"),
-						_TL("Control Point C"),
-						PARAMETER_TYPE_Double,
-						10);
-
-	Parameters.Add_Value(NULL,
-						"POINTD",
-						_TL("Control Point D"),
-						_TL("Control Point D"),
-						PARAMETER_TYPE_Double,
-						10);
-
-	Parameters.Add_Choice(NULL, 
-						"TYPE", 
-						_TL("Membership function type"), 
-						_TL(""), 
-						CSG_String::Format(SG_T("%s|%s|%s|"),
-							_TL("Linear"),
-							_TL("Sigmoidal"),
-							_TL("j-shaped")
-						),
-						0);
-
-	Parameters.Add_Grid(NULL,
-						"OUTPUT",
-						_TL("Output Grid"),
-						_TL(""),
-						PARAMETER_OUTPUT);
-
-}//constructor
-
-
-CFuzzify::~CFuzzify(void){}
-
-bool CFuzzify::On_Execute(void){
-
-	int x,y;
-	CSG_Grid* pInput = Parameters("INPUT")->asGrid();
-	CSG_Grid* pOutput = Parameters("OUTPUT")->asGrid();
-	double dPtA = Parameters("POINTA")->asDouble();
-	double dPtB = Parameters("POINTB")->asDouble();
-	double dPtC = Parameters("POINTC")->asDouble();
-	double dPtD = Parameters("POINTD")->asDouble();
-	int iType = Parameters("TYPE")->asInt();
-	double dValue;
-	double dX, dW;
-	CSG_Colors	Colors;
-
-	if (dPtA>dPtB || dPtB>dPtC || dPtC>dPtD){
-		Message_Add(_TL("** ERROR : Invalid control points ** \n"));
-		return false;
-	}//if
-
-	Colors.Set_Ramp(SG_GET_RGB(0, 0, 0),SG_GET_RGB(255, 255, 255));
-	DataObject_Set_Colors(pOutput, Colors);
-	pOutput->Set_Name(_TL("Fuzzified"));
-
-	for(y=0; y<Get_NY() && Set_Progress(y); y++){
-		for(x=0; x<Get_NX(); x++){
-			if (!pInput->is_NoData(x,y)){
-				dValue = pInput->asDouble(x,y);
-				if (dValue <= dPtA || dValue >= dPtD){
-					pOutput->Set_Value(x,y,0);
-				}//if
-				else if (dValue >= dPtB && dValue <= dPtC){
-					pOutput->Set_Value(x,y,1);
-				}//if
-				else{
-					if (dValue < dPtB){
-						dX = dValue - dPtA;
-						dW = dPtB - dPtA;
-					}//if
-					else{
-						dX = dPtD - dValue;
-						dW = dPtD - dPtC;
-					}//else
-					switch (iType){
-					case 0:
-						pOutput->Set_Value(x, y, dX / dW);
-						break;
-					case 1:
-						pOutput->Set_Value(x, y, pow(sin(dX / dW * PI2), 2));
-						break;
-					case 2:
-						pOutput->Set_Value(x, y, 1. / (1+pow((dW-dX) / dW,2)));
-						break;
-					}//switch
-				}//else
-			}//if
-			else{
-				pOutput->Set_NoData(x,y);
-			}//else
-		}//for
-	}//for
-
-	return true;
-
-}//method
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CFuzzify::CFuzzify(void)
+{
+	Set_Name		(_TL("Fuzzify"));
+
+	Set_Author		(SG_T("Victor Olaya (c) 2004"));
+
+	Set_Description	(_TW(
+		"Translates grid values into fuzzy set membership as preparation for fuzzy logic analysis."
+	));
+
+	//-----------------------------------------------------
+	Parameters.Add_Grid(
+		NULL	, "INPUT"	, _TL("Grid"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "OUTPUT"	, _TL("Fuzzified Grid"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	CSG_Parameter	*pNode	= Parameters.Add_Node(
+		NULL	, "NODE_PTS", _TL("Control Points"),
+		_TL("")
+	);
+
+	Parameters.Add_Value(
+		pNode	, "A"		, _TL("A"),
+		_TL("Values lower than A will be set to 0."),
+		PARAMETER_TYPE_Double, 10
+	);
+
+	Parameters.Add_Value(
+		pNode	, "B"		, _TL("B"),
+		_TL("Values between A and B increase from 0 to 1, values between B and C will be set to 1."),
+		PARAMETER_TYPE_Double, 10
+	);
+
+	Parameters.Add_Value(
+		pNode	, "C"		, _TL("C"),
+		_TL("Values between B and C will be set to 1, values between C and D decrease from 1 to 0."),
+		PARAMETER_TYPE_Double, 10
+	);
+
+	Parameters.Add_Value(
+		pNode	, "D"		, _TL("D"),
+		_TL("Values greater than D will be set to 0."),
+		PARAMETER_TYPE_Double, 10
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "TYPE"	, _TL("Membership Function Type"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			_TL("linear"),
+			_TL("sigmoidal"),
+			_TL("j-shaped")
+		), 0
+	);
+
+	Parameters.Add_Value(
+		NULL	, "AUTOFIT"	, _TL("Adjust to Grid"),
+		_TL("Automatically adjust control points to grid's data range"),
+		PARAMETER_TYPE_Bool, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CFuzzify::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("INPUT"))
+	||	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("AUTOFIT")) )
+	{
+		if( pParameters->Get_Parameter("AUTOFIT")->asBool() )
+		{
+			CSG_Grid	*pGrid	= pParameters->Get_Parameter("INPUT")->asGrid();
+
+			pParameters->Get_Parameter("A")->Set_Value(pGrid->Get_ZMin());
+			pParameters->Get_Parameter("B")->Set_Value(pGrid->Get_ZMin() + 0.3 * pGrid->Get_ZRange());
+			pParameters->Get_Parameter("C")->Set_Value(pGrid->Get_ZMax() - 0.3 * pGrid->Get_ZRange());
+			pParameters->Get_Parameter("D")->Set_Value(pGrid->Get_ZMax());
+		}
+	}
+
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("A")) )
+	{
+		if( pParameter->asDouble() > pParameters->Get_Parameter("B")->asDouble() )
+		{
+			pParameter->Set_Value(pParameters->Get_Parameter("B")->asDouble());
+		}
+	}
+
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("B")) )
+	{
+		if( pParameter->asDouble() < pParameters->Get_Parameter("A")->asDouble() )
+		{
+			pParameter->Set_Value(pParameters->Get_Parameter("A")->asDouble());
+		}
+		else if( pParameter->asDouble() > pParameters->Get_Parameter("C")->asDouble() )
+		{
+			pParameter->Set_Value(pParameters->Get_Parameter("C")->asDouble());
+		}
+	}
+
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("C")) )
+	{
+		if( pParameter->asDouble() < pParameters->Get_Parameter("B")->asDouble() )
+		{
+			pParameter->Set_Value(pParameters->Get_Parameter("B")->asDouble());
+		}
+		else if( pParameter->asDouble() > pParameters->Get_Parameter("D")->asDouble() )
+		{
+			pParameter->Set_Value(pParameters->Get_Parameter("D")->asDouble());
+		}
+	}
+
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("D")) )
+	{
+		if( pParameter->asDouble() < pParameters->Get_Parameter("C")->asDouble() )
+		{
+			pParameter->Set_Value(pParameters->Get_Parameter("C")->asDouble());
+		}
+	}
+
+	return( 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CFuzzify::On_Execute(void)
+{
+	int			Type;
+	double		A, B, C, D;
+	CSG_Grid	*pInput, *pOutput;
+
+	//-----------------------------------------------------
+	pInput	= Parameters("INPUT")	->asGrid();
+	pOutput	= Parameters("OUTPUT")	->asGrid();
+	Type	= Parameters("TYPE")	->asInt();
+	A		= Parameters("A")		->asDouble();
+	B		= Parameters("B")		->asDouble();
+	C		= Parameters("C")		->asDouble();
+	D		= Parameters("D")		->asDouble();
+
+	if( A > B || B > C || C > D )
+	{
+		Error_Set(_TL("invalid control points"));
+
+		return( false );
+	}
+
+	pOutput->Set_Name(CSG_String::Format(SG_T("%s [%s]"), pInput->Get_Name(), _TL("Fuzzified")));
+
+	DataObject_Set_Colors(pOutput, 100, SG_COLORS_BLACK_WHITE);
+
+	//-----------------------------------------------------
+	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
+	{
+		for(int x=0; x<Get_NX(); x++)
+		{
+			if( pInput->is_InGrid(x, y) )
+			{
+				double	Value	= pInput->asDouble(x, y);
+
+				if( Value <= A || Value >= D )
+				{
+					Value	= 0.0;
+				}
+				else if( Value >= B && Value <= C )
+				{
+					Value	= 1.0;
+				}
+				else
+				{
+					double	dX, dW;
+
+					if( Value < B )
+					{
+						dX	= Value - A;
+						dW	= B     - A;
+					}
+					else
+					{
+						dX	= D - Value;
+						dW	= D - C;
+					}
+
+					switch( Type )
+					{
+					case 0:	Value	= dX / dW;									break;
+					case 1:	Value	= pow(sin(dX / dW * M_PI_090), 2.0);		break;
+					case 2:	Value	= 1.0 / (1.0 + pow((dW - dX) / dW, 2.0));	break;
+					}
+				}
+
+				pOutput->Set_Value(x, y, Value);
+			}
+			else
+			{
+				pOutput->Set_NoData(x, y);
+			}
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules/grid/grid_analysis/Fuzzify.h b/src/modules/grid/grid_analysis/Fuzzify.h
index 8073a54..f95dd39 100644
--- a/src/modules/grid/grid_analysis/Fuzzify.h
+++ b/src/modules/grid/grid_analysis/Fuzzify.h
@@ -17,23 +17,55 @@
     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *******************************************************************************/ 
 
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
 
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__Fuzzify_H
+#define HEADER_INCLUDED__Fuzzify_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
 #include "MLB_Interface.h"
 
-class CFuzzify : public CSG_Module_Grid {
 
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CFuzzify : public CSG_Module_Grid
+{
 public:
 	CFuzzify(void);
-	virtual ~CFuzzify(void);
-
-	virtual const SG_Char *	Get_MenuPath	(void)	{	return( _TL("R:Fuzzy Logic") );	}
 
-private:
+	virtual const SG_Char *	Get_MenuPath			(void)	{	return( _TL("R:Fuzzy Logic") );	}
 
 protected:
-	virtual bool On_Execute(void);
 
-};
\ No newline at end of file
+	virtual int				On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+	virtual bool			On_Execute				(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // HEADER_INCLUDED__Fuzzify_H
diff --git a/src/modules/grid/grid_analysis/FuzzyAND.cpp b/src/modules/grid/grid_analysis/FuzzyAND.cpp
index 53afc70..5e847e8 100644
--- a/src/modules/grid/grid_analysis/FuzzyAND.cpp
+++ b/src/modules/grid/grid_analysis/FuzzyAND.cpp
@@ -70,9 +70,9 @@
 //---------------------------------------------------------
 CFuzzyAND::CFuzzyAND(void)
 {
-	Set_Name		(_TL("Fuzzy intersection grid"));
+	Set_Name		(_TL("Fuzzy Intersection"));
 
-	Set_Author		(_TL("Copyrights (c) 2004 by Antonio Boggia and Gianluca Massei"));
+	Set_Author		(SG_T("Antonio Boggia and Gianluca Massei (c) 2004"));
 
 	Set_Description	(_TW(
 		"Calculates the intersection (min operator) for each grid cell of the selected grids.\n "
@@ -93,10 +93,6 @@ CFuzzyAND::CFuzzyAND(void)
 	);
 }
 
-//---------------------------------------------------------
-CFuzzyAND::~CFuzzyAND(void)
-{}
-
 
 ///////////////////////////////////////////////////////////
 //														 //
@@ -107,50 +103,53 @@ CFuzzyAND::~CFuzzyAND(void)
 //---------------------------------------------------------
 bool CFuzzyAND::On_Execute(void)
 {
-	int				iGrid, nGrids, x, y;//id Grid, cellsnumber , ,
-	double			zMin, ValTemp; // variabile per costrire il grid, variabile temp di confronto
-	CSG_Grid			*pAND;
-	CSG_Parameter_Grid_List	*pParm_Grids;
+	CSG_Grid				*pAND;
+	CSG_Parameter_Grid_List	*pGrids;
 
 	//-----------------------------------------------------
-	// Get user inputs from the 'Parameters' object...
+	pGrids	= Parameters("GRIDS")	->asGridList();
+	pAND	= Parameters("AND")		->asGrid();
 
-	pParm_Grids	= Parameters("GRIDS")	->asGridList();
-	pAND		= Parameters("AND")		->asGrid();
-	nGrids		= pParm_Grids			->Get_Count();
+	//-----------------------------------------------------
+	if( pGrids->Get_Count() < 1 )
+	{
+		return( false );
+	}
 
 	//-----------------------------------------------------
-	if( nGrids > 1 )
+	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
 	{
-		for(y=0; y<Get_NY() && Set_Progress(y); y++)
+		for(int x=0; x<Get_NX(); x++)
 		{
-			for(x=0; x<Get_NX(); x++)
-			{
-				//zMin = ValTemp	=  0;
-				zMin	= pParm_Grids->asGrid(0)->asDouble(0, 0);// set initial value of zMin
+			bool	bNoData	= pGrids->asGrid(0)->is_NoData(x, y);
+			double	zMin	= pGrids->asGrid(0)->asDouble (x, y);
 
-				for(iGrid=0; iGrid<nGrids; iGrid++)
+			for(int i=1; i<pGrids->Get_Count() && !bNoData; i++)
+			{
+				if( !(bNoData = pGrids->asGrid(i)->is_NoData(x, y)) )
 				{
-					ValTemp	= pParm_Grids->asGrid(iGrid)->asDouble(x, y);
+					double	iz	= pGrids->asGrid(i)->asDouble(x, y);
 					
-					if  (zMin > ValTemp)
+					if( zMin > iz )
 					{
-						zMin = ValTemp; //intersection loop
+						zMin	= iz;
 					}
-					else zMin=zMin ;
 				}
+			}
 
+			if( bNoData )
+			{
+				pAND->Set_NoData(x, y);
+			}
+			else
+			{
 				pAND->Set_Value(x, y, zMin); 
 			}
 		}
 	}
-	else if( nGrids > 0 )
-	{
-		pAND->Assign(pParm_Grids->asGrid(0));
-	}
 
 	//-----------------------------------------------------
-	return( nGrids > 0 );
+	return( true );
 }
 
 
diff --git a/src/modules/grid/grid_analysis/FuzzyAND.h b/src/modules/grid/grid_analysis/FuzzyAND.h
index 92edb09..c9381ec 100644
--- a/src/modules/grid/grid_analysis/FuzzyAND.h
+++ b/src/modules/grid/grid_analysis/FuzzyAND.h
@@ -50,37 +50,54 @@
 
 //---------------------------------------------------------
 
-
 ///////////////////////////////////////////////////////////
 //														 //
-//                                                       //												
+//                                                       //
 //														 //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-#if !defined(AFX_FuzzyAND_H__4147D540_3A5F_11D6_92B0_0050BA1B4192__INCLUDED_)
-#define AFX_FuzzyAND_H__4147D540_3A5F_11D6_92B0_0050BA1B4192__INCLUDED_
+#ifndef HEADER_INCLUDED__FuzzyAND_H
+#define HEADER_INCLUDED__FuzzyAND_H
+
 
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
 #include "MLB_Interface.h"
 
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
 //---------------------------------------------------------
 class CFuzzyAND : public CSG_Module_Grid  
 {
 public:
 	CFuzzyAND(void);
-	virtual ~CFuzzyAND(void);
 
 	virtual const SG_Char *	Get_MenuPath	(void)	{	return( _TL("R:Fuzzy Logic") );	}
 
+
 protected:
 
-	virtual bool			On_Execute(void);
+	virtual bool			On_Execute		(void);
 
 };
 
-#endif // !defined(AFX_FuzzyAND_H__4147D540_3A5F_11D6_92B0_0050BA1B4192__INCLUDED_)
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // HEADER_INCLUDED__FuzzyAND_H
diff --git a/src/modules/grid/grid_analysis/FuzzyOR.cpp b/src/modules/grid/grid_analysis/FuzzyOR.cpp
index 5010c3f..2cdf667 100644
--- a/src/modules/grid/grid_analysis/FuzzyOR.cpp
+++ b/src/modules/grid/grid_analysis/FuzzyOR.cpp
@@ -72,7 +72,7 @@ CFuzzyOR::CFuzzyOR(void)
 {
 	Set_Name		(_TL("Fuzzy union grid"));
 
-	Set_Author		(_TL("Copyrights (c) 2004 by Antonio Boggia and Gianluca Massei"));
+	Set_Author		(SG_T("Antonio Boggia and Gianluca Massei (c) 2004"));
 
 	Set_Description	(_TW(
 		"Calculates the union (max operator) for each grid cell of the selected grids.\n "
@@ -93,10 +93,6 @@ CFuzzyOR::CFuzzyOR(void)
 	);
 }
 
-//---------------------------------------------------------
-CFuzzyOR::~CFuzzyOR(void)
-{}
-
 
 ///////////////////////////////////////////////////////////
 //														 //
@@ -107,50 +103,53 @@ CFuzzyOR::~CFuzzyOR(void)
 //---------------------------------------------------------
 bool CFuzzyOR::On_Execute(void)
 {
-	int				iGrid, nGrids, x, y;//id Grid, cellsnumber , ,
-	double			zMax, ValTemp; // variabile per costrire il grid, variabile temp di confronto
-	CSG_Grid			*pOR;
-	CSG_Parameter_Grid_List	*pParm_Grids;
+	CSG_Grid				*pOR;
+	CSG_Parameter_Grid_List	*pGrids;
 
 	//-----------------------------------------------------
-	// Get user inputs from the 'Parameters' object...
+	pGrids	= Parameters("GRIDS")	->asGridList();
+	pOR		= Parameters("OR")		->asGrid();
 
-	pParm_Grids	= (CSG_Parameter_Grid_List *)Parameters("GRIDS")->Get_Data();
-	pOR			= Parameters("OR")->asGrid();
-	nGrids		= pParm_Grids->Get_Count();
+	//-----------------------------------------------------
+	if( pGrids->Get_Count() < 1 )
+	{
+		return( false );
+	}
 
 	//-----------------------------------------------------
-	if( nGrids > 1 )
+	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
 	{
-		for(y=0; y<Get_NY() && Set_Progress(y); y++)
+		for(int x=0; x<Get_NX(); x++)
 		{
-			for(x=0; x<Get_NX(); x++)
-			{
-				//zMax = ValTemp	=  0;
-				zMax	= pParm_Grids->asGrid(0)->asDouble(0, 0);// set initial value of zMax
+			bool	bNoData	= pGrids->asGrid(0)->is_NoData(x, y);
+			double	zMax	= pGrids->asGrid(0)->asDouble (x, y);
 
-				for(iGrid=0; iGrid<nGrids; iGrid++)
+			for(int i=1; i<pGrids->Get_Count() && !bNoData; i++)
+			{
+				if( !(bNoData = pGrids->asGrid(i)->is_NoData(x, y)) )
 				{
-					ValTemp	= pParm_Grids->asGrid(iGrid)->asDouble(x, y);
+					double	iz	= pGrids->asGrid(i)->asDouble(x, y);
 					
-					if  (zMax < ValTemp)
+					if( zMax < iz )
 					{
-						zMax = ValTemp; //union loop
+						zMax	= iz;
 					}
-					else zMax=zMax ;
 				}
+			}
 
-				pOR->Set_Value(x, y, zMax);
+			if( bNoData )
+			{
+				pOR->Set_NoData(x, y);
+			}
+			else
+			{
+				pOR->Set_Value(x, y, zMax); 
 			}
 		}
 	}
-	else if( nGrids > 0 )
-	{
-		pOR->Assign(pParm_Grids->asGrid(0));
-	}
 
 	//-----------------------------------------------------
-	return( nGrids > 0 );
+	return( true );
 }
 
 
diff --git a/src/modules/grid/grid_analysis/FuzzyOR.h b/src/modules/grid/grid_analysis/FuzzyOR.h
index 4fc266f..c74df07 100644
--- a/src/modules/grid/grid_analysis/FuzzyOR.h
+++ b/src/modules/grid/grid_analysis/FuzzyOR.h
@@ -50,38 +50,54 @@
 
 //---------------------------------------------------------
 
-
 ///////////////////////////////////////////////////////////
 //														 //
-//                                                       //												
+//                                                       //
 //														 //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-#if !defined(AFX_FuzzyOR_H__4147D540_3A5F_11D6_92B0_0050BA1B4192__INCLUDED_)
-#define AFX_FuzzyOR_H__4147D540_3A5F_11D6_92B0_0050BA1B4192__INCLUDED_
+#ifndef HEADER_INCLUDED__FuzzyOR_H
+#define HEADER_INCLUDED__FuzzyOR_H
+
 
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
 #include "MLB_Interface.h"
 
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
 //---------------------------------------------------------
 class CFuzzyOR : public CSG_Module_Grid  
 {
 public:
 	CFuzzyOR(void);
-	virtual ~CFuzzyOR(void);
 
 	virtual const SG_Char *	Get_MenuPath	(void)	{	return( _TL("R:Fuzzy Logic") );	}
 
 
 protected:
 
-	virtual bool			On_Execute(void);
+	virtual bool			On_Execute		(void);
 
 };
 
-#endif // !defined(AFX_FuzzyOR_H__4147D540_3A5F_11D6_92B0_0050BA1B4192__INCLUDED_)
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // HEADER_INCLUDED__FuzzyOR_H
diff --git a/src/modules/grid/grid_analysis/Grid_Pattern.cpp b/src/modules/grid/grid_analysis/Grid_Pattern.cpp
index 1b7e2be..126fe22 100644
--- a/src/modules/grid/grid_analysis/Grid_Pattern.cpp
+++ b/src/modules/grid/grid_analysis/Grid_Pattern.cpp
@@ -138,7 +138,7 @@ bool CGrid_Pattern::On_Execute(void){
 
 int CGrid_Pattern::getNumberOfClasses(int iX, int iY){
 
-	int *iValues = new int[9];
+	int iValues[9];
 	int iNumClasses =0;
 	int i,j,k;
 	int iValue;
diff --git a/src/modules/grid/grid_analysis/LeastCostPathProfile_Points.cpp b/src/modules/grid/grid_analysis/LeastCostPathProfile_Points.cpp
new file mode 100644
index 0000000..04e7793
--- /dev/null
+++ b/src/modules/grid/grid_analysis/LeastCostPathProfile_Points.cpp
@@ -0,0 +1,322 @@
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     grid_analysis                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//            LeastCostPathProfile_Points.cpp            //
+//                                                       //
+//              Copyright (C) 2004-2010 by               //
+//      Olaf Conrad, Victor Olaya & Volker Wichmann      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     wichmann at laserdata                     //
+//                                                       //
+//    contact:    Volker Wichmann                        //
+//                LASERDATA GmbH                         //
+//                Management and analysis of             //
+//                laserscanning data                     //
+//                Innsbruck, Austria                     //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "LeastCostPathProfile_Points.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define VALUE_OFFSET	5
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CLeastCostPathProfile_Points::CLeastCostPathProfile_Points(void)
+{
+	Set_Name(_TL("Least Cost Paths"));
+
+	Set_Author(_TL("Olaf Conrad, Victor Olaya & Volker Wichmann (c) 2004-2010"));
+
+	Parameters.Set_Description(_TW(
+		"This module allows to compute least cost path profile(s). It takes an "
+		"accumulated cost surface grid and a point shapefile as input. Each "
+		"point in the shapefile represents a source for which the least cost path "
+		"is calculated.\n"
+		"In case the point shapefile has more than one source point "
+		"defined, a separate least cost path is calculated for each point. "
+		"The module outputs a point and a line shapefile for each least cost path.\n "
+		"The module allows for optional input grids. The cell values of these grids "
+		"along the least cost path are written to the outputs as additional table fields.\n\n")
+	);
+
+	Parameters.Add_Shapes(
+		NULL, "SOURCE"	,
+		_TL("Source Point(s)"),
+		_TL("Point shapefile with source point(s)"),
+		PARAMETER_INPUT, SHAPE_TYPE_Point
+	);
+
+	Parameters.Add_Grid(
+		NULL, "DEM"		, 
+		_TL("Accumulated cost"),
+		_TL("Accumulated cost surface"),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid_List(
+		NULL, 
+		"VALUES", 
+		_TL("Values"),
+		_TL("Allows to write cell values from additional grids to the output"),
+		PARAMETER_INPUT_OPTIONAL
+	);
+
+	Parameters.Add_Shapes_List(
+		NULL, 
+		"POINTS", 
+		_TL("Profile (points)"),
+		_TL("Least cost path profile points"),
+		PARAMETER_OUTPUT, SHAPE_TYPE_Point
+	);
+
+	Parameters.Add_Shapes_List(
+		NULL, 
+		"LINE", 
+		_TL("Profile (lines)"),
+		_TL("Least cost path profile line"),
+		PARAMETER_OUTPUT, SHAPE_TYPE_Line
+	);
+}
+
+//---------------------------------------------------------
+CLeastCostPathProfile_Points::~CLeastCostPathProfile_Points(void)
+{}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CLeastCostPathProfile_Points::On_Execute(void)
+{
+	int							x, y;
+	CSG_Shape					*pShape;
+	CSG_Shapes					*pSources;
+	CSG_Shapes					*pPoints, *pLine;
+	CSG_Parameter_Shapes_List	*pShapesPoints, *pShapesLine;
+
+	pSources		= Parameters("SOURCE")	->asShapes();
+	m_pDEM			= Parameters("DEM")		->asGrid();
+	m_pValues		= Parameters("VALUES")	->asGridList();
+	pShapesPoints	= Parameters("POINTS")	->asShapesList();
+	pShapesLine		= Parameters("LINE")	->asShapesList();
+
+	//-----------------------------------------------------
+	pShapesPoints	->Del_Items();
+	pShapesLine		->Del_Items();
+
+
+	//-----------------------------------------------------
+	for( int i=0; i<pSources->Get_Count(); i++ )
+	{
+		pShape		= pSources->Get_Shape(i);
+
+		if( Get_System()->Get_World_to_Grid(x, y, pShape->Get_Point(0)) && m_pDEM->is_InGrid(x, y) )
+		{
+
+			//-----------------------------------------------------
+			pPoints			= SG_Create_Shapes(SHAPE_TYPE_Point, CSG_String::Format(_TL("Profile_Points_[%s]_%d"), m_pDEM->Get_Name(), i+1));
+			pPoints			->Add_Field("ID"	, SG_DATATYPE_Int);
+			pPoints			->Add_Field("D"		, SG_DATATYPE_Double);
+			pPoints			->Add_Field("X"		, SG_DATATYPE_Double);
+			pPoints			->Add_Field("Y"		, SG_DATATYPE_Double);
+			pPoints			->Add_Field("Z"		, SG_DATATYPE_Double);
+
+			for( int j=0; j<m_pValues->Get_Count(); j++)
+			{
+				pPoints->Add_Field(m_pValues->asGrid(j)->Get_Name(), SG_DATATYPE_Double);
+			}
+
+			//-----------------------------------------------------
+			pLine			= SG_Create_Shapes(SHAPE_TYPE_Line, CSG_String::Format(_TL("Profile_Line_[%s]_%d"), m_pDEM->Get_Name(), i+1));
+			pLine			->Add_Field("ID", SG_DATATYPE_Int);
+			pLine			->Add_Shape()->Set_Value(0, 1);
+
+
+			Set_Profile(x, y, pPoints, pLine);
+
+			//-----------------------------------------------------
+			if( pPoints->Get_Count() > 0 )
+			{
+				pShapesPoints->Add_Item(pPoints);
+				pShapesLine->Add_Item(pLine);
+			}
+			else
+			{
+				delete(pPoints);
+				delete(pLine);
+			}
+		}
+	}
+
+	return( pShapesPoints->Get_Count() > 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CLeastCostPathProfile_Points::Set_Profile(int iX, int iY, CSG_Shapes *pPoints, CSG_Shapes *pLine)
+{
+	int		iNextX, iNextY;
+
+	iNextX	= iX;
+	iNextY	= iY;
+	do
+	{
+		iX	= iNextX;
+		iY	= iNextY;
+		getNextCell(m_pDEM, iX, iY, iNextX, iNextY);
+	}
+	while( Add_Point(iX, iY, pPoints, pLine) && (iX != iNextX || iY != iNextY) );
+}
+
+
+//---------------------------------------------------------
+void CLeastCostPathProfile_Points::getNextCell(CSG_Grid *g,	int iX,	int iY,	int &iNextX, int &iNextY)
+{
+    float	fMaxSlope	= 0;
+    float	fSlope		= 0;
+
+    if( iX<1 || iX>=g->Get_NX()-1 || iY<1 || iY>=g->Get_NY()-1 || g->is_NoData(iX,iY) )
+	{
+        iNextX = iX;
+		iNextY = iY;
+		return;
+    }
+
+    for( int i=-1; i<2; i++ )
+	{
+        for( int j=-1; j<2; j++)
+		{                	
+            if( !g->is_NoData(iX+i,iY+j) )
+			{
+				fSlope = g->asFloat(iX+i,iY+j) - g->asFloat(iX,iY);                                				
+				if( fSlope <= fMaxSlope )
+				{
+					iNextX		= iX + i;
+					iNextY		= iY + j;                        
+                    fMaxSlope	= fSlope;
+                }
+            }                    
+        }
+    }
+
+	return;
+}
+
+//---------------------------------------------------------
+bool CLeastCostPathProfile_Points::Add_Point(int x, int y, CSG_Shapes *pPoints, CSG_Shapes *pLine)
+{
+	int			i;
+	double		Distance;
+	TSG_Point	Point;
+	CSG_Shape	*pPoint, *pLast;
+
+	if( m_pDEM->is_InGrid(x, y) )
+	{
+		Point	= Get_System()->Get_Grid_to_World(x, y);
+
+		if( pPoints->Get_Count() == 0 )
+		{
+			Distance	= 0.0;
+		}
+		else
+		{
+			pLast		= pPoints->Get_Shape(pPoints->Get_Count() - 1);
+			Distance	= SG_Get_Distance(Point, pLast->Get_Point(0));
+			Distance	+= pLast->asDouble(1);
+		}
+
+		pPoint	= pPoints->Add_Shape();
+		pPoint->Add_Point(Point);
+
+		pPoint->Set_Value(0, pPoints->Get_Count());
+		pPoint->Set_Value(1, Distance);
+		pPoint->Set_Value(2, Point.x);
+		pPoint->Set_Value(3, Point.y);
+		pPoint->Set_Value(4, m_pDEM->asDouble(x, y));
+
+		for( i=0; i<m_pValues->Get_Count(); i++ )
+		{
+			pPoint->Set_Value(VALUE_OFFSET + i, m_pValues->asGrid(i)->asDouble(x, y, true));
+		}
+
+		pLine->Get_Shape(0)->Add_Point(Point);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules/grid/grid_analysis/LeastCostPathProfile_Points.h b/src/modules/grid/grid_analysis/LeastCostPathProfile_Points.h
new file mode 100644
index 0000000..954df69
--- /dev/null
+++ b/src/modules/grid/grid_analysis/LeastCostPathProfile_Points.h
@@ -0,0 +1,109 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     grid_analysis                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//             LeastCostPathProfile_Points.h             //
+//                                                       //
+//              Copyright (C) 2004-2010 by               //
+//      Olaf Conrad, Victor Olaya & Volker Wichmann      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     wichmann at laserdata                     //
+//                                                       //
+//    contact:    Volker Wichmann                        //
+//                LASERDATA GmbH                         //
+//                Management and analysis of             //
+//                laserscanning data                     //
+//                Innsbruck, Austria                     //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__LeastCostPathProfile_Points_H
+#define HEADER_INCLUDED__LeastCostPathProfile_Points_H
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CLeastCostPathProfile_Points : public CSG_Module_Grid
+{
+public:
+	CLeastCostPathProfile_Points(void);
+	virtual ~CLeastCostPathProfile_Points(void);
+
+	virtual const SG_Char *	Get_MenuPath	(void)	{	return( _TL("R:Cost Analysis") );	}
+
+protected:
+
+	virtual bool				On_Execute(void);
+
+
+private:
+
+	CSG_Grid					*m_pDEM;
+
+	CSG_Parameter_Grid_List		*m_pValues;
+
+
+	void						Set_Profile(int x, int y, CSG_Shapes *pPoints, CSG_Shapes *pLine);
+
+	bool						Add_Point(int x, int y, CSG_Shapes *pPoints, CSG_Shapes *pLine);
+
+	void						getNextCell(CSG_Grid *g, int iX, int iY, int &iNextX, int &iNextY);
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__LeastCostPathProfile_Points_H
diff --git a/src/modules/grid/grid_analysis/MLB_Interface.cpp b/src/modules/grid/grid_analysis/MLB_Interface.cpp
index f167b99..af975d4 100644
--- a/src/modules/grid/grid_analysis/MLB_Interface.cpp
+++ b/src/modules/grid/grid_analysis/MLB_Interface.cpp
@@ -1,164 +1,166 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                      grid analysis                     //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                   MLB_Interface.cpp                   //
-//                                                       //
-//                 Copyright (C) 2004 by                 //
-//                     Victor Olaya                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     volaya at ya.com                          //
-//                                                       //
-//    contact:    Victor Olaya Ferrero                   //
-//                Madrid                                 //
-//                Spain                                  //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//			The Module Link Library Interface			 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-// 1. Include the appropriate SAGA-API header...
-
-#include "MLB_Interface.h"
-
-
-//---------------------------------------------------------
-// 2. Place general module library informations here...
-
-const SG_Char * Get_Info(int i)
-{
-	switch( i )
-	{
-	case MLB_INFO_Name:	default:
-		return( _TL("Grid - Analysis") );
-
-	case MLB_INFO_Author:
-		return( _TL("Various authors.") );
-
-	case MLB_INFO_Description:
-		return( _TL("Some Grid Analysis Tools.") );
-
-	case MLB_INFO_Version:
-		return( SG_T("1.0") );
-
-	case MLB_INFO_Menu_Path:
-		return( _TL("Grid|Analysis") );
-	}
-}
-
-
-//---------------------------------------------------------
-// 3. Include the headers of your modules here...
-
-#include "Grid_CVA.h"
-#include "CoveredDistance.h"
-#include "Grid_Pattern.h"
-#include "CrossClassification.h"
-#include "Grid_LayerOfMaximumValue.h"
-#include "Grid_AggregationIndex.h"
-#include "Grid_AHP.h"
-#include "owa.h"
-
-#include "Cost_Isotropic.h"
-#include "Cost_Anisotropic.h"
-#include "Cost_PolarToRect.h"
-#include "Cost_RectToPolar.h"
-#include "LeastCostPathProfile.h"
-
-#include "Image_VI_Distance.h"
-#include "Image_VI_Slope.h"
-
-#include "FuzzyAND.h"
-#include "FuzzyOR.h"
-#include "Fuzzify.h"
-
-#include "Soil_Texture.h"
-
-#include "fragmentation_standard.h"
-#include "fragmentation_resampling.h"
-#include "fragmentation_classify.h"
-
-
-//---------------------------------------------------------
-// 4. Allow your modules to be created here...
-
-CSG_Module *		Create_Module(int i)
-{
-	switch( i )
-	{
-	case 0:		return( new CCost_Isotropic );
-	case 1:		return( new CCost_Anisotropic );
-	case 2:		return( new CCost_PolarToRect );
-	case 3:		return( new CCost_RectToPolar );
-	case 4:		return( new CLeastCostPathProfile );
-	case 5:		return( new CImage_VI_Distance );
-	case 6:		return( new CImage_VI_Slope );
-	case 7:		return( new CFuzzyAND );
-	case 8:		return( new CFuzzyOR );
-	case 9:		return( new CFuzzify );
-	case 10:	return( new CGrid_CVA );
-	case 11:	return( new CCoveredDistance );
-	case 12:	return( new CGrid_Pattern );
-	case 13:	return( new CLayerOfMaximumValue );
-	case 14:	return( new CAHP );
-	case 15:	return( new COWA );
-	case 16:	return( new CAggregationIndex );
-	case 17:	return( new CCrossClassification );
-	case 18:	return( new CSoil_Texture );
-	case 19:	return( new CFragmentation_Standard );
-	case 20:	return( new CFragmentation_Resampling );
-	case 21:	return( new CFragmentation_Classify );
-	}
-
-	return( NULL );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-//{{AFX_SAGA
-
-	MLB_INTERFACE
-
-//}}AFX_SAGA
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                      grid analysis                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   MLB_Interface.cpp                   //
+//                                                       //
+//                 Copyright (C) 2004 by                 //
+//                     Victor Olaya                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     volaya at ya.com                          //
+//                                                       //
+//    contact:    Victor Olaya Ferrero                   //
+//                Madrid                                 //
+//                Spain                                  //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//			The Module Link Library Interface			 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+// 1. Include the appropriate SAGA-API header...
+
+#include "MLB_Interface.h"
+
+
+//---------------------------------------------------------
+// 2. Place general module library informations here...
+
+const SG_Char * Get_Info(int i)
+{
+	switch( i )
+	{
+	case MLB_INFO_Name:	default:
+		return( _TL("Grid - Analysis") );
+
+	case MLB_INFO_Author:
+		return( _TL("Various authors.") );
+
+	case MLB_INFO_Description:
+		return( _TL("Some Grid Analysis Tools.") );
+
+	case MLB_INFO_Version:
+		return( SG_T("1.0") );
+
+	case MLB_INFO_Menu_Path:
+		return( _TL("Grid|Analysis") );
+	}
+}
+
+
+//---------------------------------------------------------
+// 3. Include the headers of your modules here...
+
+#include "Grid_CVA.h"
+#include "CoveredDistance.h"
+#include "Grid_Pattern.h"
+#include "CrossClassification.h"
+#include "Grid_LayerOfMaximumValue.h"
+#include "Grid_AggregationIndex.h"
+#include "Grid_AHP.h"
+#include "owa.h"
+
+#include "Cost_Isotropic.h"
+#include "Cost_Anisotropic.h"
+#include "Cost_PolarToRect.h"
+#include "Cost_RectToPolar.h"
+#include "LeastCostPathProfile.h"
+#include "LeastCostPathProfile_Points.h"
+
+#include "Image_VI_Distance.h"
+#include "Image_VI_Slope.h"
+
+#include "FuzzyAND.h"
+#include "FuzzyOR.h"
+#include "Fuzzify.h"
+
+#include "Soil_Texture.h"
+
+#include "fragmentation_standard.h"
+#include "fragmentation_resampling.h"
+#include "fragmentation_classify.h"
+
+
+//---------------------------------------------------------
+// 4. Allow your modules to be created here...
+
+CSG_Module *		Create_Module(int i)
+{
+	switch( i )
+	{
+	case 0:		return( new CCost_Isotropic );
+	case 1:		return( new CCost_Anisotropic );
+	case 2:		return( new CCost_PolarToRect );
+	case 3:		return( new CCost_RectToPolar );
+	case 4:		return( new CLeastCostPathProfile );
+	case 5:		return( new CImage_VI_Distance );
+	case 6:		return( new CImage_VI_Slope );
+	case 7:		return( new CFuzzyAND );
+	case 8:		return( new CFuzzyOR );
+	case 9:		return( new CFuzzify );
+	case 10:	return( new CGrid_CVA );
+	case 11:	return( new CCoveredDistance );
+	case 12:	return( new CGrid_Pattern );
+	case 13:	return( new CLayerOfMaximumValue );
+	case 14:	return( new CAHP );
+	case 15:	return( new COWA );
+	case 16:	return( new CAggregationIndex );
+	case 17:	return( new CCrossClassification );
+	case 18:	return( new CSoil_Texture );
+	case 19:	return( new CFragmentation_Standard );
+	case 20:	return( new CFragmentation_Resampling );
+	case 21:	return( new CFragmentation_Classify );
+	case 22:	return( new CLeastCostPathProfile_Points );
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+//{{AFX_SAGA
+
+	MLB_INTERFACE
+
+//}}AFX_SAGA
diff --git a/src/modules/grid/grid_analysis/Makefile.am b/src/modules/grid/grid_analysis/Makefile.am
index c2fef8d..f5425d2 100644
--- a/src/modules/grid/grid_analysis/Makefile.am
+++ b/src/modules/grid/grid_analysis/Makefile.am
@@ -1,68 +1,70 @@
-#
-# $Id: Makefile.am,v 1.9 2010/07/08 14:11:49 johanvdw Exp $
-#
-if DEBUG
-DBGFLAGS = -g -DDEBUG
-endif
-if SAGA_UNICODE
-UC_DEFS = -D_SAGA_UNICODE
-endif
-DEF_SAGA           = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
-CXX_INCS           = -I$(top_srcdir)/src/saga_core
-AM_CXXFLAGS        = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
-AM_LDFLAGS         = -fPIC -shared -avoid-version 
-pkglib_LTLIBRARIES = libgrid_analysis.la
-libgrid_analysis_la_SOURCES =\
-Cost_Anisotropic.cpp\
-Cost_Isotropic.cpp\
-Cost_PolarToRect.cpp\
-Cost_RectToPolar.cpp\
-CoveredDistance.cpp\
-CrossClassification.cpp\
-fragmentation_base.cpp\
-fragmentation_classify.cpp\
-fragmentation_resampling.cpp\
-fragmentation_standard.cpp\
-Fuzzify.cpp\
-FuzzyAND.cpp\
-FuzzyOR.cpp\
-Grid_AggregationIndex.cpp\
-Grid_AHP.cpp\
-Grid_CVA.cpp\
-Grid_LayerOfMaximumValue.cpp\
-Grid_Pattern.cpp\
-Image_VI_Distance.cpp\
-Image_VI_Slope.cpp\
-LeastCostPathProfile.cpp\
-MLB_Interface.cpp\
-owa.cpp\
-PointsEx.cpp\
-Soil_Texture.cpp\
-Cost_Anisotropic.h\
-Cost_Isotropic.h\
-Cost_PolarToRect.h\
-Cost_RectToPolar.h\
-CoveredDistance.h\
-CrossClassification.h\
-fragmentation_base.h\
-fragmentation_classify.h\
-fragmentation_resampling.h\
-fragmentation_standard.h\
-Fuzzify.h\
-FuzzyAND.h\
-FuzzyOR.h\
-Grid_AggregationIndex.h\
-Grid_AHP.h\
-Grid_CVA.h\
-Grid_LayerOfMaximumValue.h\
-Grid_Pattern.h\
-Image_VI_Distance.h\
-Image_VI_Slope.h\
-LeastCostPathProfile.h\
-MLB_Interface.h\
-owa.h\
-PointsEx.h\
-Soil_Texture.h
-
-libgrid_analysis_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la $(ADD_MLBS)
-
+#
+# $Id: Makefile.am,v 1.10 2010/09/11 00:07:46 reklov_w Exp $
+#
+if DEBUG
+DBGFLAGS = -g -DDEBUG
+endif
+if SAGA_UNICODE
+UC_DEFS = -D_SAGA_UNICODE
+endif
+DEF_SAGA           = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+CXX_INCS           = -I$(top_srcdir)/src/saga_core
+AM_CXXFLAGS        = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+AM_LDFLAGS         = -fPIC -shared -avoid-version 
+pkglib_LTLIBRARIES = libgrid_analysis.la
+libgrid_analysis_la_SOURCES =\
+Cost_Anisotropic.cpp\
+Cost_Isotropic.cpp\
+Cost_PolarToRect.cpp\
+Cost_RectToPolar.cpp\
+CoveredDistance.cpp\
+CrossClassification.cpp\
+fragmentation_base.cpp\
+fragmentation_classify.cpp\
+fragmentation_resampling.cpp\
+fragmentation_standard.cpp\
+Fuzzify.cpp\
+FuzzyAND.cpp\
+FuzzyOR.cpp\
+Grid_AggregationIndex.cpp\
+Grid_AHP.cpp\
+Grid_CVA.cpp\
+Grid_LayerOfMaximumValue.cpp\
+Grid_Pattern.cpp\
+Image_VI_Distance.cpp\
+Image_VI_Slope.cpp\
+LeastCostPathProfile.cpp\
+LeastCostPathProfile_Points.cpp\
+MLB_Interface.cpp\
+owa.cpp\
+PointsEx.cpp\
+Soil_Texture.cpp\
+Cost_Anisotropic.h\
+Cost_Isotropic.h\
+Cost_PolarToRect.h\
+Cost_RectToPolar.h\
+CoveredDistance.h\
+CrossClassification.h\
+fragmentation_base.h\
+fragmentation_classify.h\
+fragmentation_resampling.h\
+fragmentation_standard.h\
+Fuzzify.h\
+FuzzyAND.h\
+FuzzyOR.h\
+Grid_AggregationIndex.h\
+Grid_AHP.h\
+Grid_CVA.h\
+Grid_LayerOfMaximumValue.h\
+Grid_Pattern.h\
+Image_VI_Distance.h\
+Image_VI_Slope.h\
+LeastCostPathProfile.h\
+LeastCostPathProfile_Points.h\
+MLB_Interface.h\
+owa.h\
+PointsEx.h\
+Soil_Texture.h
+
+libgrid_analysis_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la $(ADD_MLBS)
+
diff --git a/src/modules/grid/grid_analysis/Makefile.in b/src/modules/grid/grid_analysis/Makefile.in
index c46532b..07fe59f 100644
--- a/src/modules/grid/grid_analysis/Makefile.in
+++ b/src/modules/grid/grid_analysis/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/grid/grid_analysis
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -76,7 +82,8 @@ am_libgrid_analysis_la_OBJECTS = Cost_Anisotropic.lo Cost_Isotropic.lo \
 	Grid_AggregationIndex.lo Grid_AHP.lo Grid_CVA.lo \
 	Grid_LayerOfMaximumValue.lo Grid_Pattern.lo \
 	Image_VI_Distance.lo Image_VI_Slope.lo LeastCostPathProfile.lo \
-	MLB_Interface.lo owa.lo PointsEx.lo Soil_Texture.lo
+	LeastCostPathProfile_Points.lo MLB_Interface.lo owa.lo \
+	PointsEx.lo Soil_Texture.lo
 libgrid_analysis_la_OBJECTS = $(am_libgrid_analysis_la_OBJECTS)
 DEFAULT_INCLUDES = -I. at am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -112,6 +119,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -161,14 +170,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -212,9 +234,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -225,7 +251,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.9 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.10 2010/09/11 00:07:46 reklov_w Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_TRUE at UC_DEFS = -D_SAGA_UNICODE
@@ -256,6 +282,7 @@ Grid_Pattern.cpp\
 Image_VI_Distance.cpp\
 Image_VI_Slope.cpp\
 LeastCostPathProfile.cpp\
+LeastCostPathProfile_Points.cpp\
 MLB_Interface.cpp\
 owa.cpp\
 PointsEx.cpp\
@@ -281,6 +308,7 @@ Grid_Pattern.h\
 Image_VI_Distance.h\
 Image_VI_Slope.h\
 LeastCostPathProfile.h\
+LeastCostPathProfile_Points.h\
 MLB_Interface.h\
 owa.h\
 PointsEx.h\
@@ -378,6 +406,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Image_VI_Distance.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Image_VI_Slope.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/LeastCostPathProfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/LeastCostPathProfile_Points.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PointsEx.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Soil_Texture.Plo at am__quote@
diff --git a/src/modules/grid/grid_calculus/Grid_Calculator.cpp b/src/modules/grid/grid_calculus/Grid_Calculator.cpp
index 70f4d02..fe9bbd8 100644
--- a/src/modules/grid/grid_calculus/Grid_Calculator.cpp
+++ b/src/modules/grid/grid_calculus/Grid_Calculator.cpp
@@ -104,21 +104,55 @@ CGrid_Calculator::CGrid_Calculator(void)
 
 	//-----------------------------------------------------
 	Parameters.Add_Grid_List(
-		NULL, "GRIDS"	, _TL("Grids"),
+		NULL	, "GRIDS"	, _TL("Grids"),
 		_TL(""), PARAMETER_INPUT
 	);
 
 	Parameters.Add_Grid(
-		NULL, "RESULT"	, _TL("Result"),
+		NULL	, "RESULT"	, _TL("Result"),
 		_TL(""),
 		PARAMETER_OUTPUT
 	);
 	
 	Parameters.Add_String(
-		NULL, "FORMULA"	, _TL("Formula"),
+		NULL	, "FORMULA"	, _TL("Formula"),
 		_TL(""),
 		SG_T("(a - b) / (a + b)")
 	);
+
+	CSG_Parameter	*pNode	= Parameters.Add_String(
+		NULL	, "NAME"	, _TL("Name"),
+		_TL(""),
+		_TL("Calculation")
+	);
+
+	Parameters.Add_Value(
+		pNode	, "FNAME"	, _TL("Take Formula"),
+		_TL(""),
+		PARAMETER_TYPE_Bool, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CGrid_Calculator::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("FORMULA"))
+	||	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("FNAME")) )
+	{
+		if( pParameters->Get_Parameter("FNAME")->asBool() )
+		{
+			pParameters->Get_Parameter("NAME")->Set_Value(CSG_String::Format(SG_T("%s [%s]"), _TL("Calculation"), pParameters->Get_Parameter("FORMULA")->asString()));
+		}
+	}
+
+	return( 0 );
 }
 
 
@@ -143,7 +177,7 @@ bool CGrid_Calculator::On_Execute(void)
 	//-----------------------------------------------------
 	if( pGrids->Get_Count() <= 0 )
 	{
-		Message_Add(_TL("No grid in list"));
+		Error_Set(_TL("no grid in list"));
 
 		return( false );
 	}
@@ -171,13 +205,13 @@ bool CGrid_Calculator::On_Execute(void)
 			}
 		}
 
-		Message_Add(s, false);
+		Error_Set(s);
 
 		return( false );
 	}
 
 	//-----------------------------------------------------
-	pResult->Set_Name(Formula.Get_Formula());
+	pResult->Set_Name(Parameters("NAME")->asString());
 
 	Values	= new double[pGrids->Get_Count()];
 
diff --git a/src/modules/grid/grid_calculus/Grid_Calculator.h b/src/modules/grid/grid_calculus/Grid_Calculator.h
index 52e8d8d..7785eae 100644
--- a/src/modules/grid/grid_calculus/Grid_Calculator.h
+++ b/src/modules/grid/grid_calculus/Grid_Calculator.h
@@ -80,7 +80,9 @@ public:
 
 protected:
 
-	virtual bool	On_Execute	(void);
+	virtual int		On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+	virtual bool	On_Execute				(void);
 
 };
 
diff --git a/src/modules/grid/grid_calculus/MLB_Interface.cpp b/src/modules/grid/grid_calculus/MLB_Interface.cpp
index 3798fa3..ae02996 100644
--- a/src/modules/grid/grid_calculus/MLB_Interface.cpp
+++ b/src/modules/grid/grid_calculus/MLB_Interface.cpp
@@ -116,6 +116,8 @@ CSG_Module *		Create_Module(int i)
 	case 5:		return( new CGrid_Geometric_Figures );
 	case 6:		return( new CGrid_Random_Terrain );
 	case 7:		return( new CGrid_Random_Field );
+	case 8:		return( new CGrids_Sum );
+	case 9:		return( new CGrids_Product );
 	}
 
 	return( NULL );
diff --git a/src/modules/grid/grid_calculus/Makefile.in b/src/modules/grid/grid_calculus/Makefile.in
index 4c3760c..e22b6af 100644
--- a/src/modules/grid/grid_calculus/Makefile.in
+++ b/src/modules/grid/grid_calculus/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/grid/grid_calculus
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -107,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -156,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -207,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/grid/grid_calculus/grid_difference.cpp b/src/modules/grid/grid_calculus/grid_difference.cpp
index 8a5b47a..46b8a20 100644
--- a/src/modules/grid/grid_calculus/grid_difference.cpp
+++ b/src/modules/grid/grid_calculus/grid_difference.cpp
@@ -98,8 +98,6 @@ CGrid_Difference::CGrid_Difference(void)
 
 ///////////////////////////////////////////////////////////
 //														 //
-//														 //
-//														 //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
@@ -142,3 +140,181 @@ bool CGrid_Difference::On_Execute(void)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
+CGrids_Sum::CGrids_Sum(void)
+{
+	Set_Name		(_TL("Grids Sum"));
+
+	Set_Author		(SG_T("O. Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		"Cellwise addition of grid values."
+	));
+
+	Parameters.Add_Grid_List(
+		NULL	, "GRIDS"	, _TL("Grids"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "RESULT"	, _TL("Product"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CGrids_Sum::On_Execute(void)
+{
+	CSG_Grid				*pResult;
+	CSG_Parameter_Grid_List	*pGrids;
+
+	//-----------------------------------------------------
+	pGrids	= Parameters("GRIDS")	->asGridList();
+	pResult	= Parameters("RESULT")	->asGrid();
+
+	//-----------------------------------------------------
+	if( pGrids->Get_Count() < 1 )
+	{
+		Error_Set(_TL("no grid in list"));
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
+	{
+		for(int x=0; x<Get_NX(); x++)
+		{
+			int		n	= 0;
+			double	d	= 0.0;
+
+			for(int i=0; i<pGrids->Get_Count(); i++)
+			{
+				if( pGrids->asGrid(i)->is_InGrid(x, y) )
+				{
+					n	++;
+					d	+= pGrids->asGrid(i)->asDouble(x, y);
+				}
+			}
+
+			if( n > 0 )
+			{
+				pResult->Set_Value(x, y, d);
+			}
+			else
+			{
+				pResult->Set_NoData(x, y);
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CGrids_Product::CGrids_Product(void)
+{
+	Set_Name		(_TL("Grids Product"));
+
+	Set_Author		(SG_T("O. Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		"Cellwise multiplication of grid values."
+	));
+
+	Parameters.Add_Grid_List(
+		NULL	, "GRIDS"	, _TL("Grids"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "RESULT"	, _TL("Product"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CGrids_Product::On_Execute(void)
+{
+	CSG_Grid				*pResult;
+	CSG_Parameter_Grid_List	*pGrids;
+
+	//-----------------------------------------------------
+	pGrids	= Parameters("GRIDS")	->asGridList();
+	pResult	= Parameters("RESULT")	->asGrid();
+
+	//-----------------------------------------------------
+	if( pGrids->Get_Count() < 1 )
+	{
+		Error_Set(_TL("no grid in list"));
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
+	{
+		for(int x=0; x<Get_NX(); x++)
+		{
+			int		n	= 0;
+			double	d	= 0.0;
+
+			for(int i=0; i<pGrids->Get_Count(); i++)
+			{
+				if( pGrids->asGrid(i)->is_InGrid(x, y) )
+				{
+					if( n++ < 1 )
+					{
+						d 	 = pGrids->asGrid(i)->asDouble(x, y);
+					}
+					else
+					{
+						d	*= pGrids->asGrid(i)->asDouble(x, y);
+					}
+				}
+			}
+
+			if( n > 0 )
+			{
+				pResult->Set_Value(x, y, d);
+			}
+			else
+			{
+				pResult->Set_NoData(x, y);
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules/grid/grid_calculus/grid_difference.h b/src/modules/grid/grid_calculus/grid_difference.h
index b3d0c4c..7d4d7bf 100644
--- a/src/modules/grid/grid_calculus/grid_difference.h
+++ b/src/modules/grid/grid_calculus/grid_difference.h
@@ -97,4 +97,44 @@ protected:
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
+class CGrids_Sum : public CSG_Module_Grid  
+{
+public:
+	CGrids_Sum(void);
+
+
+protected:
+
+	virtual bool			On_Execute	(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CGrids_Product : public CSG_Module_Grid  
+{
+public:
+	CGrids_Product(void);
+
+
+protected:
+
+	virtual bool			On_Execute	(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
 #endif // #ifndef HEADER_INCLUDED__Grid_Difference_H
diff --git a/src/modules/grid/grid_calculus_bsl/Makefile.in b/src/modules/grid/grid_calculus_bsl/Makefile.in
index ac7d4f5..8344b13 100644
--- a/src/modules/grid/grid_calculus_bsl/Makefile.in
+++ b/src/modules/grid/grid_calculus_bsl/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/grid/grid_calculus_bsl
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -109,6 +115,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -158,14 +166,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -209,9 +230,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp b/src/modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp
index 2e57735..53a9761 100644
--- a/src/modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp
+++ b/src/modules/grid/grid_discretisation/Grid_Cluster_Analysis.cpp
@@ -71,15 +71,13 @@
 CGrid_Cluster_Analysis::CGrid_Cluster_Analysis(void)
 {
 	//-----------------------------------------------------
-	// 1. Info...
-
 	Set_Name		(_TL("Cluster Analysis for Grids"));
 
-	Set_Author		(SG_T("(c) 2001 by O.Conrad"));
+	Set_Author		(SG_T("O.Conrad (c) 2001"));
 
 	Set_Description	(_TW(		
 		"Cluster Analysis for grids.\n\nReferences:\n\n"
-
+		                                                                                                                                                                                                                  
 		"Iterative Minimum Distance:\n"
 		"- Forgy, E. (1965):\n"
 		"  'Cluster Analysis of multivariate data: efficiency vs. interpretability of classifications',\n"
@@ -91,18 +89,15 @@ CGrid_Cluster_Analysis::CGrid_Cluster_Analysis(void)
 		"  J. Theoretical Biology, 15:103-144\n\n"
 	));
 
-
 	//-----------------------------------------------------
-	// 2. Grids...
-
 	Parameters.Add_Grid_List(
-		NULL	, "INPUT"		, _TL("Grids"),
+		NULL	, "GRIDS"		, _TL("Grids"),
 		_TL(""),
 		PARAMETER_INPUT
 	);
 
 	Parameters.Add_Grid(
-		NULL	, "RESULT"		, _TL("Clusters"),
+		NULL	, "CLUSTER"		, _TL("Clusters"),
 		_TL(""),
 		PARAMETER_OUTPUT, true, SG_DATATYPE_Int
 	);
@@ -113,10 +108,6 @@ CGrid_Cluster_Analysis::CGrid_Cluster_Analysis(void)
 		PARAMETER_OUTPUT
 	);
 
-
-	//-----------------------------------------------------
-	// 3. General Parameters...
-
 	Parameters.Add_Choice(
 		NULL	, "METHOD"		, _TL("Method"),
 		_TL(""),
@@ -124,7 +115,7 @@ CGrid_Cluster_Analysis::CGrid_Cluster_Analysis(void)
 			_TL("Iterative Minimum Distance (Forgy 1965)"),
 			_TL("Hill-Climbing (Rubin 1967)"),
 			_TL("Combined Minimum Distance / Hillclimbing") 
-		),1
+		), 1
 	);
 
 	Parameters.Add_Value(
@@ -136,20 +127,15 @@ CGrid_Cluster_Analysis::CGrid_Cluster_Analysis(void)
 	Parameters.Add_Value(
 		NULL	, "NORMALISE"	, _TL("Normalise"),
 		_TL("Automatically normalise grids by standard deviation before clustering."),
-		PARAMETER_TYPE_Bool, true
+		PARAMETER_TYPE_Bool, false
 	);
 
-	Parameters.Add_Value(
-		NULL	, "UPDATEVIEW"	, _TL("Update View"),
-		_TL("Update cluster view while clustering."),
-		PARAMETER_TYPE_Bool, true
-	);
+	//-----------------------------------------------------
+	CSG_Parameter	*pNode	=
+	Parameters.Add_Value(NULL	, "OLDVERSION", _TL("Old Version"), _TL("slower but memory saving"), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode	, "UPDATEVIEW", _TL("Update View"), _TL(""), PARAMETER_TYPE_Bool, true);
 }
 
-//---------------------------------------------------------
-CGrid_Cluster_Analysis::~CGrid_Cluster_Analysis(void)
-{}
-
 
 ///////////////////////////////////////////////////////////
 //														 //
@@ -160,143 +146,188 @@ CGrid_Cluster_Analysis::~CGrid_Cluster_Analysis(void)
 //---------------------------------------------------------
 bool CGrid_Cluster_Analysis::On_Execute(void)
 {
-	int						i, j, nCluster;
-	long					nElements;
-	double					SP;
+	if( Parameters("OLDVERSION")->asBool() )	{	return( _On_Execute() );	}
+
+	//-----------------------------------------------------
+	bool					bNormalize;
+	int						iFeature, iElement, nElements;
+	CSG_Cluster_Analysis	Analysis;
+	CSG_Grid				*pCluster;
 	CSG_Parameter_Grid_List	*pGrids;
 
 	//-----------------------------------------------------
-	pGrids		= Parameters("INPUT")	->asGridList();
-	nGrids		= pGrids->Get_Count();
+	pGrids		= Parameters("GRIDS")		->asGridList();
+	pCluster	= Parameters("CLUSTER")		->asGrid();
+	bNormalize	= Parameters("NORMALISE")	->asBool();
 
-	pCluster	= Parameters("RESULT")	->asGrid();
-	nCluster	= Parameters("NCLUSTER")->asInt();
+	if( !Analysis.Create(pGrids->Get_Count()) )
+	{
+		return( false );
+	}
 
 	//-----------------------------------------------------
-	if( nGrids > 0 )
+	pCluster->Set_NoData_Value(-1.0);
+
+	for(iElement=0, nElements=0; iElement<Get_NCells() && Set_Progress_NCells(iElement); iElement++)
 	{
-		Grids		= (CSG_Grid **)SG_Malloc(nGrids * sizeof(CSG_Grid *));
+		bool	bNoData		= false;
 
-		if( Parameters("NORMALISE")->asBool() )
+		for(iFeature=0; iFeature<pGrids->Get_Count() && !bNoData; iFeature++)
 		{
-			for(i=0; i<nGrids; i++)
+			if( pGrids->asGrid(iFeature)->is_NoData(iElement) )
 			{
-				Grids[i]	= SG_Create_Grid(pGrids->asGrid(i), SG_DATATYPE_Float);
-				Grids[i]->Assign(pGrids->asGrid(i));
-				Grids[i]->Normalise();
+				bNoData	= true;
 			}
 		}
+
+		if( bNoData || !Analysis.Add_Element() )
+		{
+			pCluster->Set_Value(iElement, -1);
+		}
 		else
 		{
-			for(i=0; i<nGrids; i++)
+			pCluster->Set_Value(iElement, 0);
+
+			for(iFeature=0; iFeature<pGrids->Get_Count(); iFeature++)
 			{
-				Grids[i]	= pGrids->asGrid(i);
+				double	d	= pGrids->asGrid(iFeature)->asDouble(iElement);
+
+				if( bNormalize )
+				{
+					d	= (d - pGrids->asGrid(iFeature)->Get_ArithMean()) / pGrids->asGrid(iFeature)->Get_StdDev();
+				}
+
+				Analysis.Set_Feature(nElements, iFeature, d);
 			}
+
+			nElements++;
 		}
+	}
+
+	if( nElements <= 1 )
+	{
+		return( false );
+	}
 
-		pCluster->Set_NoData_Value(-1.0);
-		pCluster->Assign_NoData();
+	//-----------------------------------------------------
+	bool	bResult	= Analysis.Execute(Parameters("METHOD")->asInt(), Parameters("NCLUSTER")->asInt());
 
-		nMembers	= (int     *)SG_Malloc(nCluster * sizeof(int));
-		Variances	= (double  *)SG_Malloc(nCluster * sizeof(double));
-		Centroids	= (double **)SG_Malloc(nCluster * sizeof(double *));
+	for(iElement=0, nElements=0; iElement<Get_NCells(); iElement++)
+	{
+		Set_Progress_NCells(iElement);
 
-		for(i=0; i<nCluster; i++)
+		if( !pCluster->is_NoData(iElement) )
 		{
-			Centroids[i]	= (double  *)SG_Malloc(nGrids * sizeof(double));
+			pCluster->Set_Value(iElement, Analysis.Get_Cluster(nElements++));
 		}
+	}
 
-		//-------------------------------------------------
-		nElements	= Get_NCells();
+	Save_Statistics(pGrids, bNormalize, Analysis);
 
-		switch( Parameters("METHOD")->asInt() )
-		{
-		case 0:
-			SP	= MinimumDistance	(nElements, nCluster);
-			break;
+	Save_LUT(pCluster, Analysis.Get_nClusters());
 
-		case 1:
-			SP	= HillClimbing		(nElements, nCluster);
-			break;
+	return( bResult );
+}
 
-		case 2:
-			SP	= MinimumDistance	(nElements, nCluster);
 
-			nElements	= Get_NCells();	// may have been diminished because of no data values...
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
 
-			SP	= HillClimbing		(nElements, nCluster);
-			break;
-		}
+//---------------------------------------------------------
+void CGrid_Cluster_Analysis::Save_Statistics(CSG_Parameter_Grid_List *pGrids, bool bNormalize, const CSG_Cluster_Analysis &Analysis)
+{
+	int					iCluster, iFeature;
+	CSG_String			s;
+	CSG_Table_Record	*pRecord;
+	CSG_Table			*pTable;
 
-		//-------------------------------------------------
-		if( Parameters("NORMALISE")->asBool() )
-		{
-			for(i=0; i<nGrids; i++)
-			{
-				delete(Grids[i]);
+	pTable	= Parameters("STATISTICS")->asTable();
 
-				Grids[i]	= pGrids->asGrid(i);
-			}
+	pTable->Destroy();
+	pTable->Set_Name(_TL("Cluster Analysis"));
 
-			for(i=0; i<nGrids; i++)
-			{
-				for(j=0; j<nCluster; j++)
-				{
-					Centroids[j][i]	= sqrt(Grids[i]->Get_Variance()) * Centroids[j][i] + Grids[i]->Get_ArithMean();
-				}
-			}
-		}
+	pTable->Add_Field(_TL("ClusterID")	, SG_DATATYPE_Int);
+	pTable->Add_Field(_TL("Elements")	, SG_DATATYPE_Int);
+	pTable->Add_Field(_TL("Std.Dev.")	, SG_DATATYPE_Double);
+
+	s.Printf(SG_T("\n%s:\t%ld \n%s:\t%d \n%s:\t%d \n%s:\t%f\n\n%s\t%s\t%s"),
+		_TL("Number of Elements")		, Analysis.Get_nElements(),
+		_TL("Number of Variables")		, Analysis.Get_nFeatures(),
+		_TL("Number of Clusters")		, Analysis.Get_nClusters(),
+		_TL("Value of Target Function")	, Analysis.Get_SP(),
+		_TL("Cluster"), _TL("Elements"), _TL("Std.Dev.")
+	);
 
-		Write_Result(Parameters("STATISTICS")->asTable(), nElements, nCluster, SP);
+	for(iFeature=0; iFeature<Analysis.Get_nFeatures(); iFeature++)
+	{
+		s	+= CSG_String::Format(SG_T("\t%s"), pGrids->asGrid(iFeature)->Get_Name());
 
-		//-------------------------------------------------
-		CSG_Parameters	Parms;
+		pTable->Add_Field(pGrids->asGrid(iFeature)->Get_Name(), SG_DATATYPE_Double);
+	}
 
-		if( DataObject_Get_Parameters(pCluster, Parms) && Parms("COLORS_TYPE") && Parms("LUT") )
-		{
-			CSG_Table_Record	*pClass;
-			CSG_Table			*pLUT	= Parms("LUT")->asTable();
+	Message_Add(s);
 
-			for(i=0; i<nCluster; i++)
-			{
-				if( (pClass = pLUT->Get_Record(i)) == NULL )
-				{
-					pClass	= pLUT->Add_Record();
-					pClass->Set_Value(0, SG_GET_RGB(rand() * 255.0 / RAND_MAX, rand() * 255.0 / RAND_MAX, rand() * 255.0 / RAND_MAX));
-				}
+	for(iCluster=0; iCluster<Analysis.Get_nClusters(); iCluster++)
+	{
+		s.Printf(SG_T("\n%d\t%d\t%f"), iCluster, Analysis.Get_nMembers(iCluster), sqrt(Analysis.Get_Variance(iCluster)));
 
-				pClass->Set_Value(1, CSG_String::Format(SG_T("%s %d"), _TL("Class"), i + 1));
-				pClass->Set_Value(2, CSG_String::Format(SG_T("%s %d"), _TL("Class"), i + 1));
-				pClass->Set_Value(3, i + 1);
-				pClass->Set_Value(4, i + 1);
-			}
+		pRecord	= pTable->Add_Record();
+		pRecord->Set_Value(0, iCluster);
+		pRecord->Set_Value(1, Analysis.Get_nMembers(iCluster));
+		pRecord->Set_Value(2, sqrt(Analysis.Get_Variance(iCluster)));
+
+		for(iFeature=0; iFeature<Analysis.Get_nFeatures(); iFeature++)
+		{
+			double	Centroid	= Analysis.Get_Centroid(iCluster, iFeature);
 
-			while( pLUT->Get_Record_Count() > nCluster )
+			if( bNormalize )
 			{
-				pLUT->Del_Record(pLUT->Get_Record_Count() - 1);
+				Centroid	= pGrids->asGrid(iFeature)->Get_ArithMean() + Centroid * pGrids->asGrid(iFeature)->Get_StdDev();
 			}
 
-			Parms("COLORS_TYPE")->Set_Value(1);	// Color Classification Type: Lookup Table
+			s	+= CSG_String::Format(SG_T("\t%f"), Centroid);
 
-			DataObject_Set_Parameters(pCluster, Parms);
+			pRecord->Set_Value(iFeature + 3, Centroid);
 		}
 
-		//-------------------------------------------------
-		for(i=0; i<nCluster; i++)
+		Message_Add(s, false);
+	}
+}
+
+//---------------------------------------------------------
+void CGrid_Cluster_Analysis::Save_LUT(CSG_Grid *pCluster, int nClusters)
+{
+	CSG_Parameters	Parms;
+
+	if( DataObject_Get_Parameters(pCluster, Parms) && Parms("COLORS_TYPE") && Parms("LUT") )
+	{
+		CSG_Table_Record	*pClass;
+		CSG_Table			*pLUT	= Parms("LUT")->asTable();
+
+		for(int iCluster=0; iCluster<nClusters; iCluster++)
 		{
-			SG_Free(Centroids[i]);
+			if( (pClass = pLUT->Get_Record(iCluster)) == NULL )
+			{
+				pClass	= pLUT->Add_Record();
+				pClass->Set_Value(0, SG_GET_RGB(rand() * 255.0 / RAND_MAX, rand() * 255.0 / RAND_MAX, rand() * 255.0 / RAND_MAX));
+			}
+
+			pClass->Set_Value(1, CSG_String::Format(SG_T("%s %d"), _TL("Class"), iCluster + 1));
+			pClass->Set_Value(2, CSG_String::Format(SG_T("%s %d"), _TL("Class"), iCluster + 1));
+			pClass->Set_Value(3, iCluster);
+			pClass->Set_Value(4, iCluster);
 		}
 
-		SG_Free(Centroids);
-		SG_Free(Variances);
-		SG_Free(nMembers);
+		while( pLUT->Get_Record_Count() > nClusters )
+		{
+			pLUT->Del_Record(pLUT->Get_Record_Count() - 1);
+		}
 
-		SG_Free(Grids);
+		Parms("COLORS_TYPE")->Set_Value(1);	// Color Classification Type: Lookup Table
 
-		return( true );
+		DataObject_Set_Parameters(pCluster, Parms);
 	}
-
-	return( false );
 }
 
 
@@ -304,83 +335,178 @@ bool CGrid_Cluster_Analysis::On_Execute(void)
 //														 //
 //														 //
 //														 //
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+//														 //
+//				Deprecated Old Version					 //
+//														 //
+///////////////////////////////////////////////////////////
+//														 //
+//				slow, but safes memory !				 //
+//														 //
+//														 //
+//														 //
+//														 //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-void CGrid_Cluster_Analysis::Write_Result(CSG_Table *pTable, long nElements, int nCluster, double SP)
+bool CGrid_Cluster_Analysis::_On_Execute(void)
 {
-	int				i, j;
-	CSG_String		s;
+	int						i, j, *nMembers, nCluster, nElements;
+	double					*Variances, **Centroids, SP;
+	CSG_Grid				**Grids, *pCluster;
+	CSG_Parameter_Grid_List	*pGrids;
+
+	//-----------------------------------------------------
+	pGrids		= Parameters("GRIDS")	->asGridList();
+	pCluster	= Parameters("CLUSTER")	->asGrid();
+	nCluster	= Parameters("NCLUSTER")->asInt();
+
+	if( pGrids->Get_Count() <= 1 )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	Grids		= (CSG_Grid **)SG_Malloc(pGrids->Get_Count() * sizeof(CSG_Grid *));
+
+	if( Parameters("NORMALISE")->asBool() )
+	{
+		for(i=0; i<pGrids->Get_Count(); i++)
+		{
+			Grids[i]	= SG_Create_Grid(pGrids->asGrid(i), SG_DATATYPE_Float);
+			Grids[i]	->Assign(pGrids->asGrid(i));
+			Grids[i]	->Normalise();
+		}
+	}
+	else
+	{
+		for(i=0; i<pGrids->Get_Count(); i++)
+		{
+			Grids[i]	= pGrids->asGrid(i);
+		}
+	}
+
+	pCluster->Set_NoData_Value(-1.0);
+	pCluster->Assign_NoData();
+
+	nMembers	= (int     *)SG_Malloc(nCluster * sizeof(int));
+	Variances	= (double  *)SG_Malloc(nCluster * sizeof(double));
+	Centroids	= (double **)SG_Malloc(nCluster * sizeof(double *));
+
+	for(i=0; i<nCluster; i++)
+	{
+		Centroids[i]	= (double  *)SG_Malloc(pGrids->Get_Count() * sizeof(double));
+	}
+
+	//-------------------------------------------------
+	switch( Parameters("METHOD")->asInt() )
+	{
+	case 0:		SP	= _MinimumDistance	(Grids, pGrids->Get_Count(), pCluster, nCluster, nMembers, Variances, Centroids, nElements = Get_NCells());	break;
+	case 1:		SP	= _HillClimbing		(Grids, pGrids->Get_Count(), pCluster, nCluster, nMembers, Variances, Centroids, nElements = Get_NCells());	break;
+	case 2:		SP	= _MinimumDistance	(Grids, pGrids->Get_Count(), pCluster, nCluster, nMembers, Variances, Centroids, nElements = Get_NCells());
+				SP	= _HillClimbing		(Grids, pGrids->Get_Count(), pCluster, nCluster, nMembers, Variances, Centroids, nElements = Get_NCells());	break;
+	}
+
+	//-------------------------------------------------
+	if( Parameters("NORMALISE")->asBool() )
+	{
+		for(i=0; i<pGrids->Get_Count(); i++)
+		{
+			delete(Grids[i]);
+
+			for(j=0; j<nCluster; j++)
+			{
+				Centroids[j][i]	= pGrids->asGrid(i)->Get_StdDev() * Centroids[j][i] + pGrids->asGrid(i)->Get_ArithMean();
+			}
+		}
+	}
+
+	//-------------------------------------------------
+	Save_LUT(pCluster, nCluster);
+
+	//-------------------------------------------------
+	int					iCluster, iFeature;
+	CSG_String			s;
 	CSG_Table_Record	*pRecord;
+	CSG_Table			*pTable;
+
+	pTable	= Parameters("STATISTICS")->asTable();
 
 	pTable->Destroy();
 	pTable->Set_Name(_TL("Cluster Analysis"));
 
 	pTable->Add_Field(_TL("ClusterID")	, SG_DATATYPE_Int);
 	pTable->Add_Field(_TL("Elements")	, SG_DATATYPE_Int);
-	pTable->Add_Field(_TL("Variance")	, SG_DATATYPE_Double);
-
-	s.Printf(SG_T("\n%s:\t%ld \n%s:\t%d \n%s:\t%d \n%s:\t%f"),
-		_TL("Number of Elements")			, nElements,
-		_TL("\nNumber of Variables")		, nGrids,
-		_TL("\nNumber of Clusters")			, nCluster,
-		_TL("\nValue of Target Function")	, SP
+	pTable->Add_Field(_TL("Std.Dev.")	, SG_DATATYPE_Double);
+
+	s.Printf(SG_T("\n%s:\t%ld \n%s:\t%d \n%s:\t%d \n%s:\t%f\n\n%s\t%s\t%s"),
+		_TL("Number of Elements")		, nElements,
+		_TL("Number of Variables")		, pGrids->Get_Count(),
+		_TL("Number of Clusters")		, nCluster,
+		_TL("Value of Target Function")	, SP,
+		_TL("Cluster"), _TL("Elements"), _TL("Std.Dev.")
 	);
 
-	s.Append(CSG_String::Format(SG_T("%s\t%s\t%s"), _TL("Cluster"), _TL("Elements"), _TL("Variance")));
-
-	for(j=0; j<nGrids; j++)
+	for(iFeature=0; iFeature<pGrids->Get_Count(); iFeature++)
 	{
-		s.Append(CSG_String::Format(SG_T("\t%02d_%s"), j + 1, Grids[j]->Get_Name()));
-		pTable->Add_Field(Grids[j]->Get_Name(), SG_DATATYPE_Double);
+		s	+= CSG_String::Format(SG_T("\t%s"), pGrids->asGrid(iFeature)->Get_Name());
+
+		pTable->Add_Field(pGrids->asGrid(iFeature)->Get_Name(), SG_DATATYPE_Double);
 	}
 
 	Message_Add(s);
 
-	for(i=0; i<nCluster; i++)
+	for(iCluster=0; iCluster<nCluster; iCluster++)
 	{
-		s.Printf(SG_T("%d\t%d\t%f"), i, nMembers[i], Variances[i]);
+		s.Printf(SG_T("\n%d\t%d\t%f"), iCluster, nMembers[iCluster], sqrt(Variances[iCluster]));
 
 		pRecord	= pTable->Add_Record();
-		pRecord->Set_Value(0, i);
-		pRecord->Set_Value(1, nMembers[i]);
-		pRecord->Set_Value(2, Variances[i]);
+		pRecord->Set_Value(0, iCluster);
+		pRecord->Set_Value(1, nMembers[iCluster]);
+		pRecord->Set_Value(2, sqrt(Variances[iCluster]));
 
-		for(j=0; j<nGrids; j++)
+		for(iFeature=0; iFeature<pGrids->Get_Count(); iFeature++)
 		{
-			s.Append(CSG_String::Format(SG_T("\t%f"), Centroids[i][j]));
+			double	Centroid	= Centroids[iCluster][iFeature];
+
+			if( Parameters("NORMALISE")->asBool() )
+			{
+				Centroid	= pGrids->asGrid(iFeature)->Get_ArithMean() + Centroid * pGrids->asGrid(iFeature)->Get_StdDev();
+			}
+
+			s	+= CSG_String::Format(SG_T("\t%f"), Centroid);
 
-			pRecord->Set_Value(j + 3, Centroids[i][j]);
+			pRecord->Set_Value(iFeature + 3, Centroid);
 		}
 
-		Message_Add(s);
+		Message_Add(s, false);
 	}
-}
 
+	//-------------------------------------------------
+	for(i=0; i<nCluster; i++)
+	{
+		SG_Free(Centroids[i]);
+	}
 
-///////////////////////////////////////////////////////////
-//														 //
-//					Minimum Distance					 //
-//														 //
-///////////////////////////////////////////////////////////
+	SG_Free(Centroids);
+	SG_Free(Variances);
+	SG_Free(nMembers);
+	SG_Free(Grids);
 
-//---------------------------------------------------------
-// (nElements)-Array -> Bei Eingabe Startgruppierung oder 0.
-// Bei Ausgabe Gruppierung: >Das ite Element ist im Cluster Cluster(i).
+	return( true );
+}
 
-double CGrid_Cluster_Analysis::MinimumDistance(long &nElements, int nCluster)
+//---------------------------------------------------------
+double CGrid_Cluster_Analysis::_MinimumDistance(CSG_Grid **Grids, int nGrids, CSG_Grid *pCluster, int nCluster, int *nMembers, double *Variances, double **Centroids, int &nElements)
 {
-	//-----------------------------------------------------
-	// Variablen...
-
 	bool	bContinue;
 	int		iElement, iGrid, iCluster, nClusterElements, nShifts, minCluster, nPasses;
 	double	d, Variance, minVariance, SP, SP_Last	= -1;
 
-
 	//-----------------------------------------------------
-	// Anfangspartition (Standard falls nicht vorgegeben
-
 	for(iElement=0, nClusterElements=0; iElement<nElements; iElement++)
 	{
 		for(iGrid=0, bContinue=true; iGrid<nGrids && bContinue; iGrid++)
@@ -411,13 +537,9 @@ double CGrid_Cluster_Analysis::MinimumDistance(long &nElements, int nCluster)
 		DataObject_Update(pCluster, 0, nCluster, true);
 	}
 
-
 	//-----------------------------------------------------
-	// Hauptschleife der Iteration
-
 	for(nPasses=1, bContinue=true; bContinue && Process_Get_Okay(false); nPasses++)
 	{
-		//-------------------------------------------------
 		for(iCluster=0; iCluster<nCluster; iCluster++)
 		{
 			Variances[iCluster]	= 0;
@@ -455,20 +577,12 @@ double CGrid_Cluster_Analysis::MinimumDistance(long &nElements, int nCluster)
 			}
 		}
 
-
 		//-------------------------------------------------
-		// Sift and Shift..
-
 		SP		= 0;
 		nShifts	= 0;
 
 		for(iElement=0; iElement<nElements && bContinue; iElement++)
 		{
-			if( !(iElement % (nElements / 100)) && !Set_Progress(iElement, nElements) )
-			{
-				bContinue	= false;
-			}
-
 			if( pCluster->asInt(iElement) >= 0 )
 			{
 				minVariance	= -1;
@@ -501,9 +615,7 @@ double CGrid_Cluster_Analysis::MinimumDistance(long &nElements, int nCluster)
 			}
 		}
 
-
 		//-------------------------------------------------
-
 		if( nShifts == 0 || (SP_Last >= 0 && SP >= SP_Last) )
 		{
 			bContinue	= false;
@@ -527,26 +639,14 @@ double CGrid_Cluster_Analysis::MinimumDistance(long &nElements, int nCluster)
 	return( SP );
 }
 
-
-///////////////////////////////////////////////////////////
-//														 //
-//					Hill-Climbing						 //
-//														 //
-///////////////////////////////////////////////////////////
-
 //---------------------------------------------------------
-double CGrid_Cluster_Analysis::HillClimbing(long &nElements, int nCluster)
+double CGrid_Cluster_Analysis::_HillClimbing(CSG_Grid **Grids, int nGrids, CSG_Grid *pCluster, int nCluster, int *nMembers, double *Variances, double **Centroids, int &nElements)
 {
-	//-----------------------------------------------------
-	// Variablen...
-
 	bool	bContinue;
 	int		iElement, iGrid, iCluster, jCluster, kCluster, nClusterElements, noShift, nPasses;
 	double	d, e, n_iK, n_jK, V, VMin, V1, V2, SP, SP_Last	= -1;
 
-
 	//-----------------------------------------------------
-
 	for(iCluster=0; iCluster<nCluster; iCluster++)
 	{
 		Variances[iCluster]	= 0;
@@ -558,10 +658,7 @@ double CGrid_Cluster_Analysis::HillClimbing(long &nElements, int nCluster)
 		}
 	}
 
-
 	//-----------------------------------------------------
-	// Anfangspartition (Standard falls nicht vorgegeben)
-
 	for(iElement=0, nClusterElements=0; iElement<nElements; iElement++)
 	{
 		for(iGrid=0, bContinue=true; iGrid<nGrids && bContinue; iGrid++)
@@ -602,9 +699,7 @@ double CGrid_Cluster_Analysis::HillClimbing(long &nElements, int nCluster)
 		}
 	}
 
-
 	//-----------------------------------------------------
-
 	SP	= 0.0;
 
 	for(iCluster=0; iCluster<nCluster; iCluster++)
@@ -628,22 +723,13 @@ double CGrid_Cluster_Analysis::HillClimbing(long &nElements, int nCluster)
 		DataObject_Update(pCluster, 0, nCluster, true);
 	}
 
-
 	//-----------------------------------------------------
-	// Hauptschleife der Iteration
-
 	noShift		= 0;
 
 	for(nPasses=1, bContinue=true; bContinue && Process_Get_Okay(false); nPasses++)
 	{
-		//-------------------------------------------------
 		for(iElement=0; iElement<nElements && bContinue; iElement++)
 		{
-			if( !(iElement % (nElements / 100)) && !Set_Progress(iElement, nElements) )
-			{
-				bContinue	= false;
-			}
-
 			if( pCluster->asInt(iElement) >= 0 )
 			{
 				if( noShift++ >= nElements )
@@ -653,7 +739,7 @@ double CGrid_Cluster_Analysis::HillClimbing(long &nElements, int nCluster)
 				else
 				{
 
-					//---------------------------------------------
+					//-------------------------------------
 					iCluster	= pCluster->asInt(iElement);
 
 					if( nMembers[iCluster] > 1 )
@@ -670,9 +756,7 @@ double CGrid_Cluster_Analysis::HillClimbing(long &nElements, int nCluster)
 						V1		= V * n_iK / (n_iK - 1.0);
 						VMin	= -1.0;
 
-						//-----------------------------------------
-						// Bestimme Gruppe iCluster mit evtl. groesster Verbesserung...
-
+						//---------------------------------
 						for(jCluster=0; jCluster<nCluster; jCluster++)
 						{
 							if( jCluster != iCluster )
@@ -696,10 +780,7 @@ double CGrid_Cluster_Analysis::HillClimbing(long &nElements, int nCluster)
 							}
 						}
 
-
-						//-----------------------------------------
-						// Gruppenwechsel und Neuberechnung der Gruppencentroide...
-
+						//---------------------------------
 						if( VMin >= 0 && VMin < V1 )
 						{
 							noShift				= 0;
diff --git a/src/modules/grid/grid_discretisation/Grid_Cluster_Analysis.h b/src/modules/grid/grid_discretisation/Grid_Cluster_Analysis.h
index 4151e4a..9fd0578 100644
--- a/src/modules/grid/grid_discretisation/Grid_Cluster_Analysis.h
+++ b/src/modules/grid/grid_discretisation/Grid_Cluster_Analysis.h
@@ -76,30 +76,33 @@ class CGrid_Cluster_Analysis : public CSG_Module_Grid
 {
 public:
 	CGrid_Cluster_Analysis(void);
-	virtual ~CGrid_Cluster_Analysis(void);
 
-	virtual const SG_Char *	Get_MenuPath	(void)	{	return( _TL("R:Classification") );	}
+	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("R:Classification") );	}
 
 
 protected:
 
-	virtual bool			On_Execute		(void);
+	virtual bool			On_Execute			(void);
 
 
 private:
 
-	int						nGrids, *nMembers;
+	void					Save_Statistics		(CSG_Parameter_Grid_List *pGrids, bool bNormalize, const CSG_Cluster_Analysis &Analysis);
+	void					Save_LUT			(CSG_Grid *pCluster, int nClusters);
 
-	double					**Centroids, *Variances;
 
-	CSG_Grid					**Grids, *pCluster;
+	bool					_On_Execute			(void);
+	double					_MinimumDistance	(CSG_Grid **Grids, int nGrids, CSG_Grid *pCluster, int nCluster, int *nMembers, double *Variances, double **Centroids, int &nElements);
+	double					_HillClimbing		(CSG_Grid **Grids, int nGrids, CSG_Grid *pCluster, int nCluster, int *nMembers, double *Variances, double **Centroids, int &nElements);
 
+};
 
-	void					Write_Result	(CSG_Table *pTable, long nElements, int nCluster, double SP);
-
-	double					MinimumDistance	(long &nElements, int nCluster);
-	double					HillClimbing	(long &nElements, int nCluster);
 
-};
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
 
+//---------------------------------------------------------
 #endif // #ifndef HEADER_INCLUDED__Grid_Cluster_Analysis_H
diff --git a/src/modules/grid/grid_discretisation/Makefile.in b/src/modules/grid/grid_discretisation/Makefile.in
index daf3774..ae5ec2f 100644
--- a/src/modules/grid/grid_discretisation/Makefile.in
+++ b/src/modules/grid/grid_discretisation/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/grid/grid_discretisation
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -108,6 +114,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -157,14 +165,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -208,9 +229,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/grid/grid_filter/Filter.cpp b/src/modules/grid/grid_filter/Filter.cpp
index 62d100b..4632eff 100644
--- a/src/modules/grid/grid_filter/Filter.cpp
+++ b/src/modules/grid/grid_filter/Filter.cpp
@@ -75,10 +75,10 @@ CFilter::CFilter(void)
 
 	Set_Name		(_TL("Simple Filter"));
 
-	Set_Author		(SG_T("(c) 2003 by O.Conrad"));
+	Set_Author		(SG_T("O.Conrad (c) 2003"));
 
 	Set_Description	(_TW(
-		"Filter for Grids"
+		"Simple standard filters for grids."
 	));
 
 
@@ -123,10 +123,6 @@ CFilter::CFilter(void)
 	);
 }
 
-//---------------------------------------------------------
-CFilter::~CFilter(void)
-{}
-
 
 ///////////////////////////////////////////////////////////
 //														 //
@@ -137,7 +133,7 @@ CFilter::~CFilter(void)
 //---------------------------------------------------------
 bool CFilter::On_Execute(void)
 {
-	int			x, y, Mode, Radius, Method;
+	int			Mode, Radius, Method;
 	double		Mean;
 	CSG_Grid	*pResult;
 
@@ -148,31 +144,30 @@ bool CFilter::On_Execute(void)
 	Mode		= Parameters("MODE")	->asInt();
 	Method		= Parameters("METHOD")	->asInt();
 
+	switch( Mode )
+	{
+	case 0:								break;
+	case 1:	m_Radius.Create(Radius);	break;
+	}
+
+	//-----------------------------------------------------
 	if( !pResult || pResult == m_pInput )
 	{
 		pResult	= SG_Create_Grid(m_pInput);
-
-		Parameters("RESULT")->Set_Value(m_pInput);
 	}
-
-	pResult->Set_NoData_Value(m_pInput->Get_NoData_Value());
-
-	switch( Mode )
+	else
 	{
-	case 0:								break;
-	case 1:	m_Radius.Create(Radius);	break;
+		pResult->Set_Name(CSG_String::Format(SG_T("%s [%s]"), m_pInput->Get_Name(), _TL("Filter")));
+
+		pResult->Set_NoData_Value(m_pInput->Get_NoData_Value());
 	}
 
 	//-----------------------------------------------------
-	for(y=0; y<Get_NY() && Set_Progress(y); y++)
+	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
 	{
-		for(x=0; x<Get_NX(); x++)
+		for(int x=0; x<Get_NX(); x++)
 		{
-			if( !m_pInput->is_InGrid(x, y) )
-			{
-				pResult->Set_NoData(x, y);
-			}
-			else
+			if( m_pInput->is_InGrid(x, y) )
 			{
 				switch( Mode )
 				{
@@ -195,11 +190,15 @@ bool CFilter::On_Execute(void)
 					break;
 				}
 			}
+			else
+			{
+				pResult->Set_NoData(x, y);
+			}
 		}
 	}
 
 	//-----------------------------------------------------
-	if( m_pInput == Parameters("RESULT")->asGrid() )
+	if( !Parameters("RESULT")->asGrid() || Parameters("RESULT")->asGrid() == m_pInput )
 	{
 		m_pInput->Assign(pResult);
 
diff --git a/src/modules/grid/grid_filter/Filter.h b/src/modules/grid/grid_filter/Filter.h
index 2faf82d..a140ff7 100644
--- a/src/modules/grid/grid_filter/Filter.h
+++ b/src/modules/grid/grid_filter/Filter.h
@@ -62,16 +62,27 @@
 #define HEADER_INCLUDED__Filter_H
 
 
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
 #include "MLB_Interface.h"
 
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
 //---------------------------------------------------------
 class CFilter : public CSG_Module_Grid
 {
 public:
 	CFilter(void);
-	virtual ~CFilter(void);
 
 
 protected:
@@ -91,5 +102,12 @@ private:
 
 };
 
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
 //---------------------------------------------------------
 #endif // #ifndef HEADER_INCLUDED__Filter_H
diff --git a/src/modules/grid/grid_filter/Filter_3x3.cpp b/src/modules/grid/grid_filter/Filter_3x3.cpp
index bbd8a6e..5f444ed 100644
--- a/src/modules/grid/grid_filter/Filter_3x3.cpp
+++ b/src/modules/grid/grid_filter/Filter_3x3.cpp
@@ -71,27 +71,34 @@
 CFilter_3x3::CFilter_3x3(void)
 {
 	//-----------------------------------------------------
-	Set_Name		(_TL("User Defined Filter (3x3)"));
+	Set_Name		(_TL("User Defined Filter"));
 
-	Set_Author		(SG_T("(c) 2001 by O.Conrad"));
+	Set_Author		(SG_T("O.Conrad (c) 2001"));
 
 	Set_Description	(_TW(
-		"User defined 3x3 sub-window filter. The filter is entered as a table with 3 rows and 3 columns."
+		"User defined filter matrix. The filter can be chosen from loaded tables. "
+		"If not specified a fixed table with 3 rows (and 3 columns) will be used. "
 	));
 
 	//-----------------------------------------------------
 	Parameters.Add_Grid(
-		NULL, "INPUT"	, _TL("Grid"),
+		NULL, "INPUT"		, _TL("Grid"),
 		_TL(""),
 		PARAMETER_INPUT
 	);
 
 	Parameters.Add_Grid(
-		NULL, "RESULT"	, _TL("Filtered Grid"),
+		NULL, "RESULT"		, _TL("Filtered Grid"),
 		_TL(""),
 		PARAMETER_OUTPUT
 	);
 
+	Parameters.Add_Table(
+		NULL, "FILTER"		, _TL("Filter Matrix"),
+		_TL(""),
+		PARAMETER_INPUT_OPTIONAL
+	);
+
 	//-----------------------------------------------------
 	CSG_Table	Filter;
 
@@ -100,31 +107,20 @@ CFilter_3x3::CFilter_3x3(void)
 	Filter.Add_Field("3", SG_DATATYPE_Double);
 
 	Filter.Add_Record();
-	Filter[0][0]	= 0.25;
-	Filter[0][1]	= 0.5;
-	Filter[0][2]	= 0.25;
-
 	Filter.Add_Record();
-	Filter[1][0]	= 0.5;
-	Filter[1][1]	=-1.0;
-	Filter[1][2]	= 0.5;
-
 	Filter.Add_Record();
-	Filter[2][0]	= 0.25;
-	Filter[2][1]	= 0.5;
-	Filter[2][2]	= 0.25;
+
+	Filter[0][0]	= 0.25;	Filter[0][1]	= 0.5;	Filter[0][2]	= 0.25;
+	Filter[1][0]	= 0.50;	Filter[1][1]	=-1.0;	Filter[1][2]	= 0.50;
+	Filter[2][0]	= 0.25;	Filter[2][1]	= 0.5;	Filter[2][2]	= 0.25;
 
 	Parameters.Add_FixedTable(
-		NULL, "FILTER"	, _TL("Filter Matrix"),
+		NULL, "FILTER_3X3"	, _TL("Default Filter Matrix (3x3)"),
 		_TL(""),
 		&Filter
 	);
 }
 
-//---------------------------------------------------------
-CFilter_3x3::~CFilter_3x3(void)
-{}
-
 
 ///////////////////////////////////////////////////////////
 //														 //
@@ -135,54 +131,73 @@ CFilter_3x3::~CFilter_3x3(void)
 //---------------------------------------------------------
 bool CFilter_3x3::On_Execute(void)
 {
-	int				x, y, ix, iy, dx, dy, fx, fy, fdx, fdy;
-	double			Sum, nSum, **f;
-	CSG_Grid			*pInput, *pResult;
-	CSG_Table			*pFilter;
-	CSG_Table_Record	*pRecord;
+	int			x, y, ix, iy, jx, jy, dx, dy;
+	double		Sum, nSum;
+	CSG_Matrix	Filter;
+	CSG_Grid	*pInput, *pResult;
+	CSG_Table	*pFilter;
 
 	//-----------------------------------------------------
-	pInput	= Parameters("INPUT")->asGrid();
-	pResult	= Parameters("RESULT")->asGrid();
+	pInput	= Parameters("INPUT")		->asGrid();
+	pResult	= Parameters("RESULT")		->asGrid();
 
-	//-----------------------------------------------------
-	pFilter	= Parameters("FILTER")->asTable();
+	pFilter	= Parameters("FILTER")		->asTable()
+			? Parameters("FILTER")		->asTable()
+			: Parameters("FILTER_3X3")	->asTable();
 
-	fdx		= pFilter->Get_Field_Count();
-	fdy		= pFilter->Get_Record_Count();
-	dx		= (fdx - 1) / 2;
-	dy		= (fdy - 1) / 2;
+	if( pFilter->Get_Count() < 1 || pFilter->Get_Field_Count() < 1 )
+	{
+		Error_Set(_TL("invalid filter matrix"));
 
-	f		= (double **)SG_Malloc(fdy * sizeof(double *));
-	f[0]	= (double  *)SG_Malloc(fdy * fdx * sizeof(double));
+		return( false );
+	}
 
-	for(fy=0; fy<fdy; fy++)
-	{
-		f[fy]	= f[0] + fy * fdx;
+	//-----------------------------------------------------
+	Filter.Create(pFilter->Get_Field_Count(), pFilter->Get_Count());
 
-		pRecord	= pFilter->Get_Record(fy);
+	for(iy=0; iy<Filter.Get_NY(); iy++)
+	{
+		CSG_Table_Record	*pRecord	= pFilter->Get_Record(iy);
 
-		for(fx=0; fx<fdx; fx++)
+		for(ix=0; ix<Filter.Get_NX(); ix++)
 		{
-			f[fy][fx]	= pRecord->asDouble(fx);
+			Filter[iy][ix]	= pRecord->asDouble(ix);
 		}
 	}
 
+	dx		= Filter.Get_NX() / 2;
+	dy		= Filter.Get_NY() / 2;
+
+	//-----------------------------------------------------
+	if( !pResult || pResult == pInput )
+	{
+		pResult	= SG_Create_Grid(pInput);
+	}
+	else
+	{
+		pResult->Set_Name(CSG_String::Format(SG_T("%s [%s]"), pInput->Get_Name(), _TL("Filter")));
+
+		pResult->Set_NoData_Value(pInput->Get_NoData_Value());
+	}
+
 	//-----------------------------------------------------
 	for(y=0; y<Get_NY() && Set_Progress(y); y++)
 	{
 		for(x=0; x<Get_NX(); x++)
 		{
-			Sum		= nSum	= 0.0;
+			Sum	= nSum	= 0.0;
 
-			for(fy=0, iy=y-dy; fy<fdy; fy++, iy++)
+			if( pInput->is_InGrid(x, y) )
 			{
-				for(fx=0, ix=x-dx; fx<fdx; fx++, ix++)
+				for(iy=0, jy=y-dy; iy<Filter.Get_NY(); iy++, jy++)
 				{
-					if( pInput->is_InGrid(ix, iy) )
+					for(ix=0, jx=x-dx; ix<Filter.Get_NX(); ix++, jx++)
 					{
-						Sum		+= f[fy][fx] * pInput->asDouble(ix, iy);
-						nSum	+= fabs(f[fy][fx]);
+						if( pInput->is_InGrid(jx, jy) )
+						{
+							Sum		+= Filter[iy][ix] * pInput->asDouble(jx, jy);
+							nSum	+= fabs(Filter[iy][ix]);
+						}
 					}
 				}
 			}
@@ -199,8 +214,12 @@ bool CFilter_3x3::On_Execute(void)
 	}
 
 	//-----------------------------------------------------
-	SG_Free(f[0]);
-	SG_Free(f);
+	if( !Parameters("RESULT")->asGrid() || Parameters("RESULT")->asGrid() == pInput )
+	{
+		pInput->Assign(pResult);
+
+		delete(pResult);
+	}
 
 	return( true );
 }
diff --git a/src/modules/grid/grid_filter/Filter_3x3.h b/src/modules/grid/grid_filter/Filter_3x3.h
index 75ad3fb..1f04e81 100644
--- a/src/modules/grid/grid_filter/Filter_3x3.h
+++ b/src/modules/grid/grid_filter/Filter_3x3.h
@@ -76,7 +76,6 @@ class CFilter_3x3 : public CSG_Module_Grid
 {
 public:
 	CFilter_3x3(void);
-	virtual ~CFilter_3x3(void);
 
 
 protected:
diff --git a/src/modules/grid/grid_filter/Filter_Gauss.cpp b/src/modules/grid/grid_filter/Filter_Gauss.cpp
index f1ddea2..2860129 100644
--- a/src/modules/grid/grid_filter/Filter_Gauss.cpp
+++ b/src/modules/grid/grid_filter/Filter_Gauss.cpp
@@ -136,7 +136,7 @@ CFilter_Gauss::~CFilter_Gauss(void)
 //---------------------------------------------------------
 bool CFilter_Gauss::On_Execute(void)
 {
-	int			x, y, Mode, Radius;
+	int			Mode, Radius;
 	double		Sigma;
 	CSG_Grid	*pResult;
 
@@ -147,31 +147,38 @@ bool CFilter_Gauss::On_Execute(void)
 	Mode		= Parameters("MODE")	->asInt();
 	Sigma		= Parameters("SIGMA")	->asDouble();
 
-	if( !pResult || pResult == m_pInput )
-	{
-		pResult	= SG_Create_Grid(m_pInput);
-
-		Parameters("RESULT")->Set_Value(m_pInput);
-	}
-
-	pResult->Set_NoData_Value(m_pInput->Get_NoData_Value());
-
 	//-----------------------------------------------------
 	if( Initialise(Radius, Sigma, Mode) )
 	{
-		for(y=0; y<Get_NY() && Set_Progress(y); y++)
+		if( !pResult || pResult == m_pInput )
+		{
+			pResult	= SG_Create_Grid(m_pInput);
+		}
+		else
 		{
-			for(x=0; x<Get_NX(); x++)
+			pResult->Set_Name(CSG_String::Format(SG_T("%s [%s]"), m_pInput->Get_Name(), _TL("Gaussian Filter")));
+
+			pResult->Set_NoData_Value(m_pInput->Get_NoData_Value());
+		}
+
+		//-------------------------------------------------
+		for(int y=0; y<Get_NY() && Set_Progress(y); y++)
+		{
+			for(int x=0; x<Get_NX(); x++)
 			{
 				if( m_pInput->is_InGrid(x, y) )
 				{
 					pResult->Set_Value(x, y, Get_Mean(x, y));
 				}
+				else
+				{
+					pResult->Set_NoData(x, y);
+				}
 			}
 		}
 
 		//-------------------------------------------------
-		if( m_pInput == Parameters("RESULT")->asGrid() )
+		if( !Parameters("RESULT")->asGrid() || Parameters("RESULT")->asGrid() == m_pInput )
 		{
 			m_pInput->Assign(pResult);
 
diff --git a/src/modules/grid/grid_filter/Filter_LoG.cpp b/src/modules/grid/grid_filter/Filter_LoG.cpp
index 66ae867..e1379e5 100644
--- a/src/modules/grid/grid_filter/Filter_LoG.cpp
+++ b/src/modules/grid/grid_filter/Filter_LoG.cpp
@@ -82,13 +82,24 @@ CFilter_LoG::CFilter_LoG(void)
 		 "\n"
 		 "Standard kernel 1 (3x3):\n"
 		 " 0 | -1 |  0\n"
+		 "-- + -- + --\n"
 		 "-1 |  4 | -1\n"
+		 "-- + -- + --\n"
 		 " 0 | -1 |  0\n"
 		 "\n"
 		 "Standard kernel 2 (3x3):\n"
 		 "-1 | -1 | -1\n"
+		 "-- + -- + --\n"
 		 "-1 |  8 | -1\n"
-		 " 0 | -1 |  0\n"
+		 "-- + -- + --\n"
+		 "-1 | -1 | -1\n"
+		 "\n"
+		 "Standard kernel 3 (3x3):\n"
+		 "-1 | -2 | -1\n"
+		 "-- + -- + --\n"
+		 "-2 | 12 | -2\n"
+		 "-- + -- + --\n"
+		 "-1 | -2 | -1\n"
 		 "\n"
 	));
 
@@ -111,14 +122,15 @@ CFilter_LoG::CFilter_LoG(void)
 	Parameters.Add_Choice(
 		NULL	, "METHOD"		, _TL("Method"),
 		_TL(""),
-		CSG_String::Format(SG_T("%s|%s|%s|"),
-			_TL("Standard Kernel 1"),
-			_TL("Standard Kernel 2"),
-			_TL("User defined")
-		), 2
+		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
+			_TL("standard kernel 1"),
+			_TL("standard kernel 2"),
+			_TL("Standard kernel 3"),
+			_TL("user defined kernel")
+		), 3
 	);
 
-	CSG_Parameter	*pNode	= Parameters.Add_Node(NULL, "NODE_USER", _TL("User defined"), _TL(""));
+	CSG_Parameter	*pNode	= Parameters.Add_Node(NULL, "NODE_USER", _TL("User Defined Kernel"), _TL(""));
 
 	Parameters.Add_Value(
 		pNode	, "SIGMA"		, _TL("Standard Deviation (Percent of Radius)"),
@@ -136,16 +148,12 @@ CFilter_LoG::CFilter_LoG(void)
 		pNode	, "MODE"		, _TL("Search Mode"),
 		_TL(""),
 		CSG_String::Format(SG_T("%s|%s|"),
-			_TL("Square"),
-			_TL("Circle")
+			_TL("square"),
+			_TL("circle")
 		), 1
 	);
 }
 
-//---------------------------------------------------------
-CFilter_LoG::~CFilter_LoG(void)
-{}
-
 
 ///////////////////////////////////////////////////////////
 //														 //
@@ -156,23 +164,25 @@ CFilter_LoG::~CFilter_LoG(void)
 //---------------------------------------------------------
 bool CFilter_LoG::On_Execute(void)
 {
-	int			Radius;
 	CSG_Grid	*pResult;
 
 	//-----------------------------------------------------
 	m_pInput	= Parameters("INPUT")	->asGrid();
 	pResult		= Parameters("RESULT")	->asGrid();
-	Radius		= Parameters("RADIUS")	->asInt();
 
 	//-----------------------------------------------------
-	if( Initialise(Parameters("METHOD")->asInt(), Radius, Parameters("SIGMA")->asDouble(), Parameters("MODE")->asInt() == 1) )
+	if( Initialise() )
 	{
 		if( !pResult || pResult == m_pInput )
 		{
 			pResult	= SG_Create_Grid(m_pInput);
 		}
+		else
+		{
+			pResult->Set_Name(CSG_String::Format(SG_T("%s [%s]"), m_pInput->Get_Name(), _TL("Laplace Filter")));
 
-		DataObject_Set_Colors(pResult, 100, SG_COLORS_BLACK_WHITE);
+			pResult->Set_NoData_Value(m_pInput->Get_NoData_Value());
+		}
 
 		//-------------------------------------------------
 		for(int y=0; y<Get_NY() && Set_Progress(y); y++)
@@ -181,7 +191,7 @@ bool CFilter_LoG::On_Execute(void)
 			{
 				if( m_pInput->is_InGrid(x, y) )
 				{
-					pResult->Set_Value(x, y, Get_Mean(x, y, Radius));
+					pResult->Set_Value(x, y, Get_Value(x, y));
 				}
 				else
 				{
@@ -196,8 +206,12 @@ bool CFilter_LoG::On_Execute(void)
 			m_pInput->Assign(pResult);
 
 			delete(pResult);
+
+			pResult	= m_pInput;
 		}
 
+		DataObject_Set_Colors(pResult, 100, SG_COLORS_BLACK_WHITE);
+
 		m_Kernel.Destroy();
 
 		return( true );
@@ -215,73 +229,73 @@ bool CFilter_LoG::On_Execute(void)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-bool CFilter_LoG::Initialise(int Method, int &Radius, double Sigma, bool bCircle)
+bool CFilter_LoG::Initialise(void)
 {
+	int		Method		= Parameters("METHOD")	->asInt();
+	bool	bCircle		= Parameters("MODE")	->asInt() == 1;
+	double	Sigma		= Parameters("SIGMA")	->asDouble();
+
 	switch( Method )
 	{
 	case 0:
+		m_Radius	= 1;
 		m_Kernel.Create(SG_DATATYPE_Double, 3, 3);
 		m_Kernel.Set_Value(0, 0,  0);	m_Kernel.Set_Value(0, 1, -1);	m_Kernel.Set_Value(0, 2,  0);
 		m_Kernel.Set_Value(1, 0, -1);	m_Kernel.Set_Value(1, 1,  4);	m_Kernel.Set_Value(1, 2, -1);
 		m_Kernel.Set_Value(2, 0,  0);	m_Kernel.Set_Value(2, 1, -1);	m_Kernel.Set_Value(2, 2,  0);
-		Radius	= 1;
-		return( true );
+		break;
 
 	case 1:
+		m_Radius	= 1;
 		m_Kernel.Create(SG_DATATYPE_Double, 3, 3);
 		m_Kernel.Set_Value(0, 0, -1);	m_Kernel.Set_Value(0, 1, -1);	m_Kernel.Set_Value(0, 2, -1);
 		m_Kernel.Set_Value(1, 0, -1);	m_Kernel.Set_Value(1, 1,  8);	m_Kernel.Set_Value(1, 2, -1);
 		m_Kernel.Set_Value(2, 0, -1);	m_Kernel.Set_Value(2, 1, -1);	m_Kernel.Set_Value(2, 2, -1);
-		Radius	= 1;
-		return( true );
+		break;
 
-	case 2:	default:
-		if( Sigma > 0.0 )
-		{
-			m_Kernel.Create(SG_DATATYPE_Double, 1 + 2 * Radius, 1 + 2 * Radius);
+	case 2:
+		m_Radius	= 1;
+		m_Kernel.Create(SG_DATATYPE_Double, 3, 3);
+		m_Kernel.Set_Value(0, 0, -1);	m_Kernel.Set_Value(0, 1, -2);	m_Kernel.Set_Value(0, 2, -1);
+		m_Kernel.Set_Value(1, 0, -2);	m_Kernel.Set_Value(1, 1, 12);	m_Kernel.Set_Value(1, 2, -2);
+		m_Kernel.Set_Value(2, 0, -1);	m_Kernel.Set_Value(2, 1, -2);	m_Kernel.Set_Value(2, 2, -1);
+		break;
 
-			Sigma	= SG_Get_Square(Radius * Sigma * 0.01);
+	case 3:	default:
+		m_Radius	= Parameters("RADIUS")->asInt();
 
-		//	double	min		= 999999;
-		//	double	max		= 0;
+		if( Sigma <= 0.0 )
+		{
+			return( false );
+		}
 
-			for(int y=-Radius, iy=0; y<=Radius; y++, iy++)
-			{
-				for(int x=-Radius, ix=0; x<=Radius; x++, ix++)
-				{
-					double	d	= x * x + y * y;
+		m_Kernel.Create(SG_DATATYPE_Double, 1 + 2 * m_Radius, 1 + 2 * m_Radius);
 
-					if( bCircle && d > Radius*Radius )
-					{
-						d	= 0.0;
-					}
-					else
-					{
-						d	= 1.0 / (M_PI * Sigma*Sigma) * (1.0 - d / (2.0 * Sigma)) * exp(-d / (2.0 * Sigma));
-					}
+		Sigma	= SG_Get_Square(m_Radius * Sigma * 0.01);
 
-					m_Kernel.Set_Value(ix, iy, d);
+		for(int y=-m_Radius, iy=0; y<=m_Radius; y++, iy++)
+		{
+			for(int x=-m_Radius, ix=0; x<=m_Radius; x++, ix++)
+			{
+				double	d	= x * x + y * y;
 
-		//			if( min > k )	min	= k;
-		//			if( max < k )	max	= k;
+				if( bCircle && d > m_Radius*m_Radius )
+				{
+					m_Kernel.Set_NoData(ix, iy);
+				}
+				else
+				{
+					m_Kernel.Set_Value(ix, iy, 1.0 / (M_PI * Sigma*Sigma) * (1.0 - d / (2.0 * Sigma)) * exp(-d / (2.0 * Sigma)));
 				}
 			}
+		}
 
-		//	this->DataObject_Add(SG_Create_Grid(m_Kernel));
-
-			m_Kernel	+= -m_Kernel.Get_ArithMean();
-
-		//	if( min / max > 0.367 / 2.0 )
-		//	{
-		//		Message_Add("Warning: Radius is to small for your Standard Deviation");
-		//		return( false );
-		//	}
+		m_Kernel	+= -m_Kernel.Get_ArithMean();
 
-			return( true );
-		}
+		break;
 	}
 
-	return( false );
+	return( true );
 }
 
 
@@ -292,29 +306,24 @@ bool CFilter_LoG::Initialise(int Method, int &Radius, double Sigma, bool bCircle
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-double CFilter_LoG::Get_Mean(int x, int y, int Radius)
+double CFilter_LoG::Get_Value(int x, int y)
 {
-	double	s, n, k;
-
-	//-----------------------------------------------------
-	s	= 0.0;
-	n	= 0.0;
+	double	s	= 0.0;
 
 	//-----------------------------------------------------
-	for(int ky=0, iy=y-Radius; ky<m_Kernel.Get_NY(); ky++, iy++)
-	{
-		for(int kx=0, ix=x-Radius; kx<m_Kernel.Get_NX(); kx++, ix++)
+	for(int ky=0, iy=y-m_Radius; ky<m_Kernel.Get_NY(); ky++, iy++)
+ 	{
+		for(int kx=0, ix=x-m_Radius; kx<m_Kernel.Get_NX(); kx++, ix++)
 		{
-			if( m_pInput->is_InGrid(ix, iy) && (k = m_Kernel.asDouble(kx, ky)) != 0.0 )
+			if( !m_Kernel.is_NoData(kx, ky) )
 			{
-				s	+= k * m_pInput->asDouble(ix, iy);
-				n	+= fabs(k);
+				s	+= m_Kernel.asDouble(kx, ky) * (m_pInput->is_InGrid(ix, iy) ? m_pInput->asDouble(ix, iy) : m_pInput->asDouble(x, y));
 			}
 		}
 	}
 
 	//-----------------------------------------------------
-	return( n > 0.0 ? s / n : 0.0 );
+	return( s );
 }
 
 
diff --git a/src/modules/grid/grid_filter/Filter_LoG.h b/src/modules/grid/grid_filter/Filter_LoG.h
index 2e5de18..6ce40c1 100644
--- a/src/modules/grid/grid_filter/Filter_LoG.h
+++ b/src/modules/grid/grid_filter/Filter_LoG.h
@@ -83,7 +83,6 @@ class CFilter_LoG : public CSG_Module_Grid
 {
 public:
 	CFilter_LoG(void);
-	virtual ~CFilter_LoG(void);
 	
 
 protected:
@@ -93,12 +92,14 @@ protected:
 
 private:
 
+	int					m_Radius;
+
 	CSG_Grid			*m_pInput, m_Kernel;
 
 
-	bool				Initialise		(int Method, int &Radius, double Sigma, bool bCircle);
-	
-	double				Get_Mean		(int x, int y, int Radius);
+	bool				Initialise		(void);
+
+	double				Get_Value		(int x, int y);
 
 };
 
diff --git a/src/modules/grid/grid_filter/Filter_Majority.cpp b/src/modules/grid/grid_filter/Filter_Majority.cpp
index 46cd33b..99388ca 100644
--- a/src/modules/grid/grid_filter/Filter_Majority.cpp
+++ b/src/modules/grid/grid_filter/Filter_Majority.cpp
@@ -66,83 +66,6 @@
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-void CMajority::Create(int nBuffer)
-{
-	m_nValues	= 0;
-	m_nBuffer	= nBuffer;
-
-	if( m_nBuffer > 0 )
-	{
-		m_Values	= (double *)SG_Malloc(m_nBuffer * sizeof(double));
-		m_Count		= (int    *)SG_Malloc(m_nBuffer * sizeof(int));
-	}
-}
-
-//---------------------------------------------------------
-void CMajority::Destroy(void)
-{
-	if( m_nBuffer > 0 )
-	{
-		SG_Free(m_Values);
-		SG_Free(m_Count);
-	}
-
-	m_nBuffer	= 0;
-	m_nValues	= 0;
-}
-
-//---------------------------------------------------------
-void CMajority::Add_Value(double Value)
-{
-	for(int i=0; i<m_nValues; i++)
-	{
-		if( m_Values[i] == Value )
-		{
-			m_Count[i]++;
-
-			return;
-		}
-	}
-
-	if( m_nValues < m_nBuffer )
-	{
-		m_Values[m_nValues]	= Value;
-		m_Count [m_nValues]	= 1;
-		m_nValues++;
-	}
-}
-
-//---------------------------------------------------------
-bool CMajority::Get_Majority(int &Count, double &Value)
-{
-	if( m_nValues > 0 )
-	{
-		Value	= m_Values[0];
-		Count	= m_Count [0];
-
-		for(int i=1; i<m_nValues; i++)
-		{
-			if( m_Count[i] > Count )
-			{
-				Value	= m_Values[i];
-				Count	= m_Count [i];
-			}
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
 CFilter_Majority::CFilter_Majority(void)
 {
 	//-----------------------------------------------------
@@ -213,16 +136,6 @@ bool CFilter_Majority::On_Execute(void)
 	m_Radius	= Parameters("RADIUS")	->asInt();
 
 	//-----------------------------------------------------
-	if( !pResult || pResult == m_pInput )
-	{
-		pResult	= SG_Create_Grid(m_pInput);
-
-		Parameters("RESULT")->Set_Value(m_pInput);
-	}
-
-	pResult->Set_NoData_Value(m_pInput->Get_NoData_Value());
-
-	//-----------------------------------------------------
 	m_Kernel.Create(SG_DATATYPE_Byte, 1 + 2 * m_Radius, 1 + 2 * m_Radius);
 	m_Kernel.Set_NoData_Value(0.0);
 	m_Kernel.Assign(1.0);
@@ -242,39 +155,47 @@ bool CFilter_Majority::On_Execute(void)
 		}
 	}
 
-	m_Majority.Create(m_Kernel.Get_NCells());
+	m_Majority.Create();
 
 	m_Threshold	= m_Kernel.Get_NoData_Count();
 
 	m_Threshold	= 1 + (int)(0.01 * Parameters("THRESHOLD")->asDouble() * (1 + m_Kernel.Get_NCells() - m_Kernel.Get_NoData_Count()));
 
 	//-----------------------------------------------------
+	if( !pResult || pResult == m_pInput )
+	{
+		pResult	= SG_Create_Grid(m_pInput);
+	}
+	else
+	{
+		pResult->Set_Name(CSG_String::Format(SG_T("%s [%s]"), m_pInput->Get_Name(), _TL("Majority Filter")));
+
+		pResult->Set_NoData_Value(m_pInput->Get_NoData_Value());
+	}
+
+	//-----------------------------------------------------
 	for(y=0; y<Get_NY() && Set_Progress(y); y++)
 	{
 		for(x=0; x<Get_NX(); x++)
 		{
-			if( m_pInput->is_NoData(x, y) )
+			if( m_pInput->is_InGrid(x, y) )
 			{
-				pResult->Set_NoData(x, y);
+				pResult->Set_Value(x, y, Get_Majority(x, y));
 			}
 			else
 			{
-				pResult->Set_Value(x, y, Get_Majority(x, y));
+				pResult->Set_NoData(x, y);
 			}
 		}
 	}
 
 	//-----------------------------------------------------
-	if( m_pInput == Parameters("RESULT")->asGrid() )
+	if( !Parameters("RESULT")->asGrid() || Parameters("RESULT")->asGrid() == m_pInput )
 	{
 		m_pInput->Assign(pResult);
 
 		delete(pResult);
 	}
-	else
-	{
-		pResult->Set_Name(CSG_String::Format(SG_T("%s [%s]"), m_pInput->Get_Name(), _TL("Majority Filtered")));
-	}
 
 	m_Kernel	.Destroy();
 	m_Majority	.Destroy();
@@ -310,7 +231,7 @@ double CFilter_Majority::Get_Majority(int x, int y)
 	int		Count;
 	double	Value;
 
-	m_Majority.Get_Majority(Count, Value);
+	m_Majority.Get_Majority(Value, Count);
 
 	return( Count > m_Threshold ? Value : m_pInput->asDouble(x, y) );
 }
diff --git a/src/modules/grid/grid_filter/Filter_Majority.h b/src/modules/grid/grid_filter/Filter_Majority.h
index 91ce0a5..fc332b2 100644
--- a/src/modules/grid/grid_filter/Filter_Majority.h
+++ b/src/modules/grid/grid_filter/Filter_Majority.h
@@ -77,36 +77,6 @@
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-class CMajority
-{
-public:
-	CMajority(void)		{	m_nBuffer	= 0;	}
-	~CMajority(void)	{	Destroy();	}
-
-	void			Create					(int nBuffer);
-	void			Destroy					(void);
-
-	void			Reset					(void)	{	m_nValues	= 0;	}
-
-	void			Add_Value				(double Value);
-
-	bool			Get_Majority			(int &Count, double &Value);
-
-
-private:
-
-	int				m_nValues, m_nBuffer, *m_Count;
-
-	double			*m_Values;
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
 class CFilter_Majority : public CSG_Module_Grid
 {
 public:
@@ -124,7 +94,7 @@ private:
 
 	CSG_Grid				m_Kernel, *m_pInput;
 
-	CMajority				m_Majority;
+	CSG_Class_Statistics	m_Majority;
 
 
 	double					Get_Majority	(int x, int y);
diff --git a/src/modules/grid/grid_filter/Filter_Terrain_SlopeBased.cpp b/src/modules/grid/grid_filter/Filter_Terrain_SlopeBased.cpp
index c709dd8..674d0ea 100644
--- a/src/modules/grid/grid_filter/Filter_Terrain_SlopeBased.cpp
+++ b/src/modules/grid/grid_filter/Filter_Terrain_SlopeBased.cpp
@@ -205,8 +205,7 @@ bool CFilter_Terrain_SlopeBased::On_Execute(void)
 
 		for( iPoint=0; iPoint<gridRadius.Get_nPoints(); iPoint++ )
 		{
-			gridRadius.Get_Point(iPoint, x, y, ix, iy);
-			dz = sqrt( pow((x - ix)*pInput->Get_Cellsize(), 2) + pow((y - iy)*pInput->Get_Cellsize(), 2) ) * tslope;
+			dz = gridRadius.Get_Point(iPoint, x, y, ix, iy) * tslope;
 			dzKernel.push_back(dz);
 		}
 		
@@ -222,18 +221,15 @@ bool CFilter_Terrain_SlopeBased::On_Execute(void)
 						sum	= sumsq	= 0.0;
 						n	= 0;
 
-						for( iPoint=0; iPoint<gridRadius.Get_nPoints(); iPoint++ )
+						for( iPoint=1; iPoint<gridRadius.Get_nPoints(); iPoint++ )
 						{
 							gridRadius.Get_Point(iPoint, x, y, ix, iy);
 
 							if( pGround->is_InGrid(ix, iy, true) )
 							{
-								if( x != ix && y != iy )
-								{
-									n++;
-									sum		+= pGround->asDouble(ix, iy);
-									sumsq	+= pGround->asDouble(ix, iy) * pGround->asDouble(ix, iy);
-								}
+								n++;
+								sum		+= pGround->asDouble(ix, iy);
+								sumsq	+= pGround->asDouble(ix, iy) * pGround->asDouble(ix, iy);
 							}
 						}
 						
@@ -249,19 +245,16 @@ bool CFilter_Terrain_SlopeBased::On_Execute(void)
 					// calc erosion
 					min_z	= 999999.0;
 
-					for( iPoint=0; iPoint<gridRadius.Get_nPoints(); iPoint++ )
+					for( iPoint=1; iPoint<gridRadius.Get_nPoints(); iPoint++ )
 					{
 						gridRadius.Get_Point(iPoint, x, y, ix, iy);
 
 						if( pGround->is_InGrid(ix, iy, true) )
 						{
-							if( x != ix && y != iy )
-							{
-								ie = pGround->asDouble(ix, iy) + dzKernel[iPoint] + confInter;
+							ie = pGround->asDouble(ix, iy) + dzKernel[iPoint] + confInter;
 
-								if( ie < min_z )
-									min_z = ie;
-							}
+							if( ie < min_z )
+								min_z = ie;
 						}
 					}
 
diff --git a/src/modules/grid/grid_filter/Makefile.in b/src/modules/grid/grid_filter/Makefile.in
index 2b6fa2f..d3f1ca1 100644
--- a/src/modules/grid/grid_filter/Makefile.in
+++ b/src/modules/grid/grid_filter/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/grid/grid_filter
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -106,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/grid/grid_gridding/MLB_Interface.cpp b/src/modules/grid/grid_gridding/MLB_Interface.cpp
index 9edc9ae..74add78 100644
--- a/src/modules/grid/grid_gridding/MLB_Interface.cpp
+++ b/src/modules/grid/grid_gridding/MLB_Interface.cpp
@@ -74,7 +74,7 @@ const SG_Char * Get_Info(int i)
 		return( _TL("Grid - Gridding") );
 
 	case MLB_INFO_Author:
-		return( _TL("O. Conrad (c) 2002-8") );
+		return( _TL("O. Conrad (c) 2002-10") );
 
 	case MLB_INFO_Description:
 		return( _TL("Tools for the gridding of points and other vector data.") );
@@ -97,6 +97,7 @@ const SG_Char * Get_Info(int i)
 #include "Interpolation_Shepard.h"
 #include "Interpolation_Triangulation.h"
 #include "Shapes2Grid.h"
+#include "kernel_density.h"
 
 
 //---------------------------------------------------------
@@ -112,6 +113,7 @@ CSG_Module *		Create_Module(int i)
 	case 3:	return( new CInterpolation_NaturalNeighbour );
 	case 4:	return( new CInterpolation_Shepard );
 	case 5:	return( new CInterpolation_Triangulation );
+	case 6:	return( new CKernel_Density );
 	}
 
 	return( NULL );
diff --git a/src/modules/grid/grid_gridding/Makefile.am b/src/modules/grid/grid_gridding/Makefile.am
index 6a69dfa..88aed2b 100644
--- a/src/modules/grid/grid_gridding/Makefile.am
+++ b/src/modules/grid/grid_gridding/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.7 2010/07/08 14:11:48 johanvdw Exp $
+# $Id: Makefile.am,v 1.8 2010/10/29 15:43:25 oconrad Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
@@ -22,6 +22,7 @@ Interpolation_NaturalNeighbour.cpp\
 Interpolation_NearestNeighbour.cpp\
 Interpolation_Shepard.cpp\
 Interpolation_Triangulation.cpp\
+kernel_density.cpp\
 MLB_Interface.cpp\
 Shapes2Grid.cpp\
 Shepard.cpp\
@@ -39,6 +40,7 @@ Interpolation_NaturalNeighbour.h\
 Interpolation_NearestNeighbour.h\
 Interpolation_Shepard.h\
 Interpolation_Triangulation.h\
+kernel_density.h\
 MLB_Interface.h\
 Shapes2Grid.h\
 Shepard.h\
diff --git a/src/modules/grid/grid_gridding/Makefile.in b/src/modules/grid/grid_gridding/Makefile.in
index 036283f..33f2a39 100644
--- a/src/modules/grid/grid_gridding/Makefile.in
+++ b/src/modules/grid/grid_gridding/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/grid/grid_gridding
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -72,9 +78,9 @@ am_libgrid_gridding_la_OBJECTS = Interpolation.lo \
 	Interpolation_InverseDistance.lo \
 	Interpolation_NaturalNeighbour.lo \
 	Interpolation_NearestNeighbour.lo Interpolation_Shepard.lo \
-	Interpolation_Triangulation.lo MLB_Interface.lo Shapes2Grid.lo \
-	Shepard.lo delaunay.lo hash.lo istack.lo lpi.lo nnai.lo \
-	nncommon.lo nnpi.lo triangle.lo
+	Interpolation_Triangulation.lo kernel_density.lo \
+	MLB_Interface.lo Shapes2Grid.lo Shepard.lo delaunay.lo hash.lo \
+	istack.lo lpi.lo nnai.lo nncommon.lo nnpi.lo triangle.lo
 libgrid_gridding_la_OBJECTS = $(am_libgrid_gridding_la_OBJECTS)
 DEFAULT_INCLUDES = -I. at am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -110,6 +116,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -159,14 +167,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -210,9 +231,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -223,7 +248,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.7 2010/07/08 14:11:48 johanvdw Exp $
+# $Id: Makefile.am,v 1.8 2010/10/29 15:43:25 oconrad Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_TRUE at DEP_DEFS = -D_SAGA_UNICODE
@@ -240,6 +265,7 @@ Interpolation_NaturalNeighbour.cpp\
 Interpolation_NearestNeighbour.cpp\
 Interpolation_Shepard.cpp\
 Interpolation_Triangulation.cpp\
+kernel_density.cpp\
 MLB_Interface.cpp\
 Shapes2Grid.cpp\
 Shepard.cpp\
@@ -257,6 +283,7 @@ Interpolation_NaturalNeighbour.h\
 Interpolation_NearestNeighbour.h\
 Interpolation_Shepard.h\
 Interpolation_Triangulation.h\
+kernel_density.h\
 MLB_Interface.h\
 Shapes2Grid.h\
 Shepard.h\
@@ -355,6 +382,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/delaunay.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hash.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/istack.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/kernel_density.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lpi.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nnai.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nncommon.Plo at am__quote@
diff --git a/src/modules/grid/grid_gridding/kernel_density.cpp b/src/modules/grid/grid_gridding/kernel_density.cpp
new file mode 100644
index 0000000..3bfc719
--- /dev/null
+++ b/src/modules/grid/grid_gridding/kernel_density.cpp
@@ -0,0 +1,308 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     Grid_Gridding                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   kernel_density.cpp                  //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "kernel_density.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define X_WORLD_TO_GRID(X)	(((X) - m_pGrid->Get_XMin()) / m_pGrid->Get_Cellsize())
+#define Y_WORLD_TO_GRID(Y)	(((Y) - m_pGrid->Get_YMin()) / m_pGrid->Get_Cellsize())
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CKernel_Density::CKernel_Density(void)
+{
+	CSG_Parameter	*pNode;
+
+	//-----------------------------------------------------
+	Set_Name		(_TL("Kernel Density Estimation"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		"Kernel density estimation. If any point is currently in selection only selected points are taken into account.\n"
+		"\n"
+		"References:\n"
+		"- Fotheringham, A.S., Brunsdon, C., Charlton, M. (2000): Quantitative Geography. Sage. 270p.\n"
+		"- Lloyd, C.D. (2010): Spatial data analysis - An introduction for GIS users. Oxford. 206p.\n"
+	));
+
+
+	//-----------------------------------------------------
+	pNode	= Parameters.Add_Shapes(
+		NULL	, "POINTS"		, _TL("Points"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Table_Field(
+		pNode	, "POPULATION"	, _TL("Population"),
+		_TL(""),
+		true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "RADIUS"		, _TL("Radius"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 1.0, 0.0, true
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "KERNEL"		, _TL("Kernel"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("quartic kernel"),
+			_TL("gaussian kernel")
+		), 0
+	);
+
+	//-----------------------------------------------------
+	Parameters.Add_Choice(
+		NULL	, "TARGET"		, _TL("Target Grid"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("user defined"),
+			_TL("grid")
+		), 0
+	);
+
+	m_Grid_Target.Add_Parameters_User(Add_Parameters("USER", _TL("User Defined Grid")	, _TL("")));
+	m_Grid_Target.Add_Parameters_Grid(Add_Parameters("GRID", _TL("Choose Grid")			, _TL("")));
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CKernel_Density::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	return( m_Grid_Target.On_User_Changed(pParameters, pParameter) ? 1 : 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CKernel_Density::On_Execute(void)
+{
+	int			Population;
+	double		Radius;
+	CSG_Shapes	*pPoints;
+
+	//-----------------------------------------------------
+	pPoints		= Parameters("POINTS")		->asShapes();
+	Population	= Parameters("POPULATION")	->asInt();
+	Radius		= Parameters("RADIUS")		->asDouble();
+	m_Kernel	= Parameters("KERNEL")		->asInt();
+
+	if( Population < 0 || Population >= pPoints->Get_Field_Count() || pPoints->Get_Field_Type(Population) == SG_DATATYPE_String )
+	{
+		Population	= -1;
+	}
+
+	//-----------------------------------------------------
+	m_pGrid		= NULL;
+
+	switch( Parameters("TARGET")->asInt() )
+	{
+	case 0:	// user defined...
+		{
+			CSG_Rect	Extent(pPoints->Get_Extent());
+
+			Extent.Inflate(Radius, false);
+
+			if( m_Grid_Target.Init_User(Extent) && Dlg_Parameters("USER") )
+			{
+				m_pGrid	= m_Grid_Target.Get_User();
+			}
+		}
+		break;
+
+	case 1:	// grid...
+		if( Dlg_Parameters("GRID") )
+		{
+			m_pGrid	= m_Grid_Target.Get_Grid();
+		}
+		break;
+	}
+
+	if( m_pGrid == NULL )
+	{
+		return( false );
+	}
+
+	//-------------------------------------------------
+	m_pGrid->Set_Name(CSG_String::Format(SG_T("%s [%s]"), pPoints->Get_Name(), _TL("Kernel Density")));
+	m_pGrid->Set_NoData_Value(0.0);
+	m_pGrid->Assign(0.0);
+
+	DataObject_Set_Colors(m_pGrid, 100, SG_COLORS_BLACK_WHITE, true);
+
+	m_dRadius	= Radius / m_pGrid->Get_Cellsize();
+	m_iRadius	= 1 + (int)m_dRadius;
+
+	//-----------------------------------------------------
+	if( pPoints->Get_Selection_Count() > 0 )
+	{
+		for(int iPoint=0; iPoint<pPoints->Get_Selection_Count() && Set_Progress(iPoint, pPoints->Get_Selection_Count()); iPoint++)
+		{
+			CSG_Shape	*pPoint	= pPoints->Get_Selection(iPoint);
+
+			Set_Kernel(pPoint->Get_Point(0), Population < 0 ? 1.0 : pPoint->asDouble(Population));
+		}
+	}
+	else
+	{
+		for(int iPoint=0; iPoint<pPoints->Get_Count() && Set_Progress(iPoint, pPoints->Get_Count()); iPoint++)
+		{
+			CSG_Shape	*pPoint	= pPoints->Get_Shape(iPoint);
+
+			Set_Kernel(pPoint->Get_Point(0), Population < 0 ? 1.0 : pPoint->asDouble(Population));
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CKernel_Density::Set_Kernel(const TSG_Point &Point, double Population)
+{
+	double	x	= (Point.x - m_pGrid->Get_XMin()) / m_pGrid->Get_Cellsize();
+	double	y	= (Point.y - m_pGrid->Get_YMin()) / m_pGrid->Get_Cellsize();
+
+	for(int iy=(int)y-m_iRadius; iy<=y+m_iRadius; iy++)
+	{
+		if( iy >= 0 && iy < m_pGrid->Get_NY() )
+		{
+			for(int ix=(int)x-m_iRadius; ix<=x+m_iRadius; ix++)
+			{
+				if( ix >= 0 && ix < m_pGrid->Get_NX() )
+				{
+					m_pGrid->Add_Value(ix, iy, Population * Get_Kernel(x - ix, y - iy));
+				}
+			}
+		}
+	}
+}
+
+//---------------------------------------------------------
+inline double CKernel_Density::Get_Kernel(double dx, double dy)
+{
+	double	d	= SG_Get_Length(dx, dy);
+
+	if( d >= m_dRadius )
+	{
+		return( 0.0 );
+	}
+
+	d	/= m_dRadius;
+
+	switch( m_Kernel )
+	{
+	default:
+	case 0:	// quartic kernel
+		return( (3.0 / (M_PI * m_dRadius*m_dRadius)) * SG_Get_Square(1.0 - d*d) );
+
+	case 1:	// gaussian kernel
+		d	*= 2.0;
+		return( exp(-0.5 * d*d) );
+
+	case 2:	// exponential
+		d	*= 2.0;
+		return( exp(-d) );
+
+	case 3:	// inverse distance
+		return( pow(1.0 + d, -1.0) );
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules/grid/grid_gridding/kernel_density.h b/src/modules/grid/grid_gridding/kernel_density.h
new file mode 100644
index 0000000..e88aba1
--- /dev/null
+++ b/src/modules/grid/grid_gridding/kernel_density.h
@@ -0,0 +1,118 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     Grid_Gridding                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    kernel_density.h                   //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__kernel_density_H
+#define HEADER_INCLUDED__kernel_density_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CKernel_Density : public CSG_Module  
+{
+public:
+	CKernel_Density(void);
+
+
+protected:
+
+	virtual bool				On_Execute				(void);
+
+	virtual int					On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+
+private:
+
+	int							m_iRadius, m_Kernel;
+
+	double						m_dRadius;
+
+	CSG_Parameters_Grid_Target	m_Grid_Target;
+
+	CSG_Grid					*m_pGrid;
+
+
+	void						Set_Kernel				(const TSG_Point &Point, double Population);
+
+	double						Get_Kernel				(double dx, double dy);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__kernel_density_H
diff --git a/src/modules/grid/grid_gridding/nn/triangle.c b/src/modules/grid/grid_gridding/nn/triangle.c
new file mode 100644
index 0000000..b0a2fd9
--- /dev/null
+++ b/src/modules/grid/grid_gridding/nn/triangle.c
@@ -0,0 +1,16009 @@
+/*****************************************************************************/
+/*                                                                           */
+/*      888888888        ,o,                          / 888                  */
+/*         888    88o88o  "    o8888o  88o8888o o88888o 888  o88888o         */
+/*         888    888    888       88b 888  888 888 888 888 d888  88b        */
+/*         888    888    888  o88^o888 888  888 "88888" 888 8888oo888        */
+/*         888    888    888 C888  888 888  888  /      888 q888             */
+/*         888    888    888  "88o^888 888  888 Cb      888  "88oooo"        */
+/*                                              "8oo8D                       */
+/*                                                                           */
+/*  A Two-Dimensional Quality Mesh Generator and Delaunay Triangulator.      */
+/*  (triangle.c)                                                             */
+/*                                                                           */
+/*  Version 1.6                                                              */
+/*  July 28, 2005                                                            */
+/*                                                                           */
+/*  Copyright 1993, 1995, 1997, 1998, 2002, 2005                             */
+/*  Jonathan Richard Shewchuk                                                */
+/*  2360 Woolsey #H                                                          */
+/*  Berkeley, California  94705-1927                                         */
+/*  jrs at cs.berkeley.edu                                                      */
+/*                                                                           */
+/*  This program may be freely redistributed under the condition that the    */
+/*    copyright notices (including this entire header and the copyright      */
+/*    notice printed when the `-h' switch is selected) are not removed, and  */
+/*    no compensation is received.  Private, research, and institutional     */
+/*    use is free.  You may distribute modified versions of this code UNDER  */
+/*    THE CONDITION THAT THIS CODE AND ANY MODIFICATIONS MADE TO IT IN THE   */
+/*    SAME FILE REMAIN UNDER COPYRIGHT OF THE ORIGINAL AUTHOR, BOTH SOURCE   */
+/*    AND OBJECT CODE ARE MADE FREELY AVAILABLE WITHOUT CHARGE, AND CLEAR    */
+/*    NOTICE IS GIVEN OF THE MODIFICATIONS.  Distribution of this code as    */
+/*    part of a commercial system is permissible ONLY BY DIRECT ARRANGEMENT  */
+/*    WITH THE AUTHOR.  (If you are not directly supplying this code to a    */
+/*    customer, and you are instead telling them how they can obtain it for  */
+/*    free, then you are not required to make any arrangement with me.)      */
+/*                                                                           */
+/*  Hypertext instructions for Triangle are available on the Web at          */
+/*                                                                           */
+/*      http://www.cs.cmu.edu/~quake/triangle.html                           */
+/*                                                                           */
+/*  Disclaimer:  Neither I nor Carnegie Mellon warrant this code in any way  */
+/*    whatsoever.  This code is provided "as-is".  Use at your own risk.     */
+/*                                                                           */
+/*  Some of the references listed below are marked with an asterisk.  [*]    */
+/*    These references are available for downloading from the Web page       */
+/*                                                                           */
+/*      http://www.cs.cmu.edu/~quake/triangle.research.html                  */
+/*                                                                           */
+/*  Three papers discussing aspects of Triangle are available.  A short      */
+/*    overview appears in "Triangle:  Engineering a 2D Quality Mesh          */
+/*    Generator and Delaunay Triangulator," in Applied Computational         */
+/*    Geometry:  Towards Geometric Engineering, Ming C. Lin and Dinesh       */
+/*    Manocha, editors, Lecture Notes in Computer Science volume 1148,       */
+/*    pages 203-222, Springer-Verlag, Berlin, May 1996 (from the First ACM   */
+/*    Workshop on Applied Computational Geometry).  [*]                      */
+/*                                                                           */
+/*    The algorithms are discussed in the greatest detail in "Delaunay       */
+/*    Refinement Algorithms for Triangular Mesh Generation," Computational   */
+/*    Geometry:  Theory and Applications 22(1-3):21-74, May 2002.  [*]       */
+/*                                                                           */
+/*    More detail about the data structures may be found in my dissertation: */
+/*    "Delaunay Refinement Mesh Generation," Ph.D. thesis, Technical Report  */
+/*    CMU-CS-97-137, School of Computer Science, Carnegie Mellon University, */
+/*    Pittsburgh, Pennsylvania, 18 May 1997.  [*]                            */
+/*                                                                           */
+/*  Triangle was created as part of the Quake Project in the School of       */
+/*    Computer Science at Carnegie Mellon University.  For further           */
+/*    information, see Hesheng Bao, Jacobo Bielak, Omar Ghattas, Loukas F.   */
+/*    Kallivokas, David R. O'Hallaron, Jonathan R. Shewchuk, and Jifeng Xu,  */
+/*    "Large-scale Simulation of Elastic Wave Propagation in Heterogeneous   */
+/*    Media on Parallel Computers," Computer Methods in Applied Mechanics    */
+/*    and Engineering 152(1-2):85-102, 22 January 1998.                      */
+/*                                                                           */
+/*  Triangle's Delaunay refinement algorithm for quality mesh generation is  */
+/*    a hybrid of one due to Jim Ruppert, "A Delaunay Refinement Algorithm   */
+/*    for Quality 2-Dimensional Mesh Generation," Journal of Algorithms      */
+/*    18(3):548-585, May 1995 [*], and one due to L. Paul Chew, "Guaranteed- */
+/*    Quality Mesh Generation for Curved Surfaces," Proceedings of the Ninth */
+/*    Annual Symposium on Computational Geometry (San Diego, California),    */
+/*    pages 274-280, Association for Computing Machinery, May 1993,          */
+/*    http://portal.acm.org/citation.cfm?id=161150 .                         */
+/*                                                                           */
+/*  The Delaunay refinement algorithm has been modified so that it meshes    */
+/*    domains with small input angles well, as described in Gary L. Miller,  */
+/*    Steven E. Pav, and Noel J. Walkington, "When and Why Ruppert's         */
+/*    Algorithm Works," Twelfth International Meshing Roundtable, pages      */
+/*    91-102, Sandia National Laboratories, September 2003.  [*]             */
+/*                                                                           */
+/*  My implementation of the divide-and-conquer and incremental Delaunay     */
+/*    triangulation algorithms follows closely the presentation of Guibas    */
+/*    and Stolfi, even though I use a triangle-based data structure instead  */
+/*    of their quad-edge data structure.  (In fact, I originally implemented */
+/*    Triangle using the quad-edge data structure, but the switch to a       */
+/*    triangle-based data structure sped Triangle by a factor of two.)  The  */
+/*    mesh manipulation primitives and the two aforementioned Delaunay       */
+/*    triangulation algorithms are described by Leonidas J. Guibas and Jorge */
+/*    Stolfi, "Primitives for the Manipulation of General Subdivisions and   */
+/*    the Computation of Voronoi Diagrams," ACM Transactions on Graphics     */
+/*    4(2):74-123, April 1985, http://portal.acm.org/citation.cfm?id=282923 .*/
+/*                                                                           */
+/*  Their O(n log n) divide-and-conquer algorithm is adapted from Der-Tsai   */
+/*    Lee and Bruce J. Schachter, "Two Algorithms for Constructing the       */
+/*    Delaunay Triangulation," International Journal of Computer and         */
+/*    Information Science 9(3):219-242, 1980.  Triangle's improvement of the */
+/*    divide-and-conquer algorithm by alternating between vertical and       */
+/*    horizontal cuts was introduced by Rex A. Dwyer, "A Faster Divide-and-  */
+/*    Conquer Algorithm for Constructing Delaunay Triangulations,"           */
+/*    Algorithmica 2(2):137-151, 1987.                                       */
+/*                                                                           */
+/*  The incremental insertion algorithm was first proposed by C. L. Lawson,  */
+/*    "Software for C1 Surface Interpolation," in Mathematical Software III, */
+/*    John R. Rice, editor, Academic Press, New York, pp. 161-194, 1977.     */
+/*    For point location, I use the algorithm of Ernst P. Mucke, Isaac       */
+/*    Saias, and Binhai Zhu, "Fast Randomized Point Location Without         */
+/*    Preprocessing in Two- and Three-Dimensional Delaunay Triangulations,"  */
+/*    Proceedings of the Twelfth Annual Symposium on Computational Geometry, */
+/*    ACM, May 1996.  [*]  If I were to randomize the order of vertex        */
+/*    insertion (I currently don't bother), their result combined with the   */
+/*    result of Kenneth L. Clarkson and Peter W. Shor, "Applications of      */
+/*    Random Sampling in Computational Geometry II," Discrete &              */
+/*    Computational Geometry 4(1):387-421, 1989, would yield an expected     */
+/*    O(n^{4/3}) bound on running time.                                      */
+/*                                                                           */
+/*  The O(n log n) sweepline Delaunay triangulation algorithm is taken from  */
+/*    Steven Fortune, "A Sweepline Algorithm for Voronoi Diagrams",          */
+/*    Algorithmica 2(2):153-174, 1987.  A random sample of edges on the      */
+/*    boundary of the triangulation are maintained in a splay tree for the   */
+/*    purpose of point location.  Splay trees are described by Daniel        */
+/*    Dominic Sleator and Robert Endre Tarjan, "Self-Adjusting Binary Search */
+/*    Trees," Journal of the ACM 32(3):652-686, July 1985,                   */
+/*    http://portal.acm.org/citation.cfm?id=3835 .                           */
+/*                                                                           */
+/*  The algorithms for exact computation of the signs of determinants are    */
+/*    described in Jonathan Richard Shewchuk, "Adaptive Precision Floating-  */
+/*    Point Arithmetic and Fast Robust Geometric Predicates," Discrete &     */
+/*    Computational Geometry 18(3):305-363, October 1997.  (Also available   */
+/*    as Technical Report CMU-CS-96-140, School of Computer Science,         */
+/*    Carnegie Mellon University, Pittsburgh, Pennsylvania, May 1996.)  [*]  */
+/*    An abbreviated version appears as Jonathan Richard Shewchuk, "Robust   */
+/*    Adaptive Floating-Point Geometric Predicates," Proceedings of the      */
+/*    Twelfth Annual Symposium on Computational Geometry, ACM, May 1996. [*] */
+/*    Many of the ideas for my exact arithmetic routines originate with      */
+/*    Douglas M. Priest, "Algorithms for Arbitrary Precision Floating Point  */
+/*    Arithmetic," Tenth Symposium on Computer Arithmetic, pp. 132-143, IEEE */
+/*    Computer Society Press, 1991.  [*]  Many of the ideas for the correct  */
+/*    evaluation of the signs of determinants are taken from Steven Fortune  */
+/*    and Christopher J. Van Wyk, "Efficient Exact Arithmetic for Computa-   */
+/*    tional Geometry," Proceedings of the Ninth Annual Symposium on         */
+/*    Computational Geometry, ACM, pp. 163-172, May 1993, and from Steven    */
+/*    Fortune, "Numerical Stability of Algorithms for 2D Delaunay Triangu-   */
+/*    lations," International Journal of Computational Geometry & Applica-   */
+/*    tions 5(1-2):193-213, March-June 1995.                                 */
+/*                                                                           */
+/*  The method of inserting new vertices off-center (not precisely at the    */
+/*    circumcenter of every poor-quality triangle) is from Alper Ungor,      */
+/*    "Off-centers:  A New Type of Steiner Points for Computing Size-Optimal */
+/*    Quality-Guaranteed Delaunay Triangulations," Proceedings of LATIN      */
+/*    2004 (Buenos Aires, Argentina), April 2004.                            */
+/*                                                                           */
+/*  For definitions of and results involving Delaunay triangulations,        */
+/*    constrained and conforming versions thereof, and other aspects of      */
+/*    triangular mesh generation, see the excellent survey by Marshall Bern  */
+/*    and David Eppstein, "Mesh Generation and Optimal Triangulation," in    */
+/*    Computing and Euclidean Geometry, Ding-Zhu Du and Frank Hwang,         */
+/*    editors, World Scientific, Singapore, pp. 23-90, 1992.  [*]            */
+/*                                                                           */
+/*  The time for incrementally adding PSLG (planar straight line graph)      */
+/*    segments to create a constrained Delaunay triangulation is probably    */
+/*    O(t^2) per segment in the worst case and O(t) per segment in the       */
+/*    common case, where t is the number of triangles that intersect the     */
+/*    segment before it is inserted.  This doesn't count point location,     */
+/*    which can be much more expensive.  I could improve this to O(d log d)  */
+/*    time, but d is usually quite small, so it's not worth the bother.      */
+/*    (This note does not apply when the -s switch is used, invoking a       */
+/*    different method is used to insert segments.)                          */
+/*                                                                           */
+/*  The time for deleting a vertex from a Delaunay triangulation is O(d^2)   */
+/*    in the worst case and O(d) in the common case, where d is the degree   */
+/*    of the vertex being deleted.  I could improve this to O(d log d) time, */
+/*    but d is usually quite small, so it's not worth the bother.            */
+/*                                                                           */
+/*  Ruppert's Delaunay refinement algorithm typically generates triangles    */
+/*    at a linear rate (constant time per triangle) after the initial        */
+/*    triangulation is formed.  There may be pathological cases where        */
+/*    quadratic time is required, but these never arise in practice.         */
+/*                                                                           */
+/*  The geometric predicates (circumcenter calculations, segment             */
+/*    intersection formulae, etc.) appear in my "Lecture Notes on Geometric  */
+/*    Robustness" at http://www.cs.berkeley.edu/~jrs/mesh .                  */
+/*                                                                           */
+/*  If you make any improvements to this code, please please please let me   */
+/*    know, so that I may obtain the improvements.  Even if you don't change */
+/*    the code, I'd still love to hear what it's being used for.             */
+/*                                                                           */
+/*****************************************************************************/
+
+/* For single precision (which will save some memory and reduce paging),     */
+/*   define the symbol SINGLE by using the -DSINGLE compiler switch or by    */
+/*   writing "#define SINGLE" below.                                         */
+/*                                                                           */
+/* For double precision (which will allow you to refine meshes to a smaller  */
+/*   edge length), leave SINGLE undefined.                                   */
+/*                                                                           */
+/* Double precision uses more memory, but improves the resolution of the     */
+/*   meshes you can generate with Triangle.  It also reduces the likelihood  */
+/*   of a floating exception due to overflow.  Finally, it is much faster    */
+/*   than single precision on 64-bit architectures like the DEC Alpha.  I    */
+/*   recommend double precision unless you want to generate a mesh for which */
+/*   you do not have enough memory.                                          */
+
+/* #define SINGLE */
+
+#ifdef SINGLE
+#define REAL float
+#else /* not SINGLE */
+#define REAL double
+#endif /* not SINGLE */
+
+/* If yours is not a Unix system, define the NO_TIMER compiler switch to     */
+/*   remove the Unix-specific timing code.                                   */
+
+#define NO_TIMER
+
+/* To insert lots of self-checks for internal errors, define the SELF_CHECK  */
+/*   symbol.  This will slow down the program significantly.  It is best to  */
+/*   define the symbol using the -DSELF_CHECK compiler switch, but you could */
+/*   write "#define SELF_CHECK" below.  If you are modifying this code, I    */
+/*   recommend you turn self-checks on until your work is debugged.          */
+
+/* #define SELF_CHECK */
+
+/* To compile Triangle as a callable object library (triangle.o), define the */
+/*   TRILIBRARY symbol.  Read the file triangle.h for details on how to call */
+/*   the procedure triangulate() that results.                               */
+
+#define TRILIBRARY
+
+/* It is possible to generate a smaller version of Triangle using one or     */
+/*   both of the following symbols.  Define the REDUCED symbol to eliminate  */
+/*   all features that are primarily of research interest; specifically, the */
+/*   -i, -F, -s, and -C switches.  Define the CDT_ONLY symbol to eliminate   */
+/*   all meshing algorithms above and beyond constrained Delaunay            */
+/*   triangulation; specifically, the -r, -q, -a, -u, -D, -S, and -s         */
+/*   switches.  These reductions are most likely to be useful when           */
+/*   generating an object library (triangle.o) by defining the TRILIBRARY    */
+/*   symbol.                                                                 */
+
+/* #define REDUCED */
+/* #define CDT_ONLY */
+
+/* On some machines, my exact arithmetic routines might be defeated by the   */
+/*   use of internal extended precision floating-point registers.  The best  */
+/*   way to solve this problem is to set the floating-point registers to use */
+/*   single or double precision internally.  On 80x86 processors, this may   */
+/*   be accomplished by setting the CPU86 symbol for the Microsoft C         */
+/*   compiler, or the LINUX symbol for the gcc compiler running on Linux.    */
+/*                                                                           */
+/* An inferior solution is to declare certain values as `volatile', thus     */
+/*   forcing them to be stored to memory and rounded off.  Unfortunately,    */
+/*   this solution might slow Triangle down quite a bit.  To use volatile    */
+/*   values, write "#define INEXACT volatile" below.  Normally, however,     */
+/*   INEXACT should be defined to be nothing.  ("#define INEXACT".)          */
+/*                                                                           */
+/* For more discussion, see http://www.cs.cmu.edu/~quake/robust.pc.html .    */
+/*   For yet more discussion, see Section 5 of my paper, "Adaptive Precision */
+/*   Floating-Point Arithmetic and Fast Robust Geometric Predicates" (also   */
+/*   available as Section 6.6 of my dissertation).                           */
+
+/* #define CPU86 */
+/* #define LINUX */
+
+#define INEXACT /* Nothing */
+/* #define INEXACT volatile */
+
+/* Maximum number of characters in a file name (including the null).         */
+
+#define FILENAMESIZE 2048
+
+/* Maximum number of characters in a line read from a file (including the    */
+/*   null).                                                                  */
+
+#define INPUTLINESIZE 1024
+
+/* For efficiency, a variety of data structures are allocated in bulk.  The  */
+/*   following constants determine how many of each structure is allocated   */
+/*   at once.                                                                */
+
+#define TRIPERBLOCK 4092           /* Number of triangles allocated at once. */
+#define SUBSEGPERBLOCK 508       /* Number of subsegments allocated at once. */
+#define VERTEXPERBLOCK 4092         /* Number of vertices allocated at once. */
+#define VIRUSPERBLOCK 1020   /* Number of virus triangles allocated at once. */
+/* Number of encroached subsegments allocated at once. */
+#define BADSUBSEGPERBLOCK 252
+/* Number of skinny triangles allocated at once. */
+#define BADTRIPERBLOCK 4092
+/* Number of flipped triangles allocated at once. */
+#define FLIPSTACKERPERBLOCK 252
+/* Number of splay tree nodes allocated at once. */
+#define SPLAYNODEPERBLOCK 508
+
+/* The vertex types.   A DEADVERTEX has been deleted entirely.  An           */
+/*   UNDEADVERTEX is not part of the mesh, but is written to the output      */
+/*   .node file and affects the node indexing in the other output files.     */
+
+#define INPUTVERTEX 0
+#define SEGMENTVERTEX 1
+#define FREEVERTEX 2
+#define DEADVERTEX -32768
+#define UNDEADVERTEX -32767
+
+/* The next line is used to outsmart some very stupid compilers.  If your    */
+/*   compiler is smarter, feel free to replace the "int" with "void".        */
+/*   Not that it matters.                                                    */
+
+#define VOID void
+
+/* Two constants for algorithms based on random sampling.  Both constants    */
+/*   have been chosen empirically to optimize their respective algorithms.   */
+
+/* Used for the point location scheme of Mucke, Saias, and Zhu, to decide    */
+/*   how large a random sample of triangles to inspect.                      */
+
+#define SAMPLEFACTOR 11
+
+/* Used in Fortune's sweepline Delaunay algorithm to determine what fraction */
+/*   of boundary edges should be maintained in the splay tree for point      */
+/*   location on the front.                                                  */
+
+#define SAMPLERATE 10
+
+/* A number that speaks for itself, every kissable digit.                    */
+
+#define PI 3.141592653589793238462643383279502884197169399375105820974944592308
+
+/* Another fave.                                                             */
+
+#define SQUAREROOTTWO 1.4142135623730950488016887242096980785696718753769480732
+
+/* And here's one for those of you who are intimidated by math.              */
+
+#define ONETHIRD 0.333333333333333333333333333333333333333333333333333333333333
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#ifndef NO_TIMER
+#include <sys/time.h>
+#endif /* not NO_TIMER */
+#ifdef CPU86
+#include <float.h>
+#endif /* CPU86 */
+#ifdef LINUX
+#include <fpu_control.h>
+#endif /* LINUX */
+#ifdef TRILIBRARY
+#include "triangle.h"
+#endif /* TRILIBRARY */
+
+/* A few forward declarations.                                               */
+
+#ifndef TRILIBRARY
+char *readline();
+char *findfield();
+#endif /* not TRILIBRARY */
+
+/* Labels that signify the result of point location.  The result of a        */
+/*   search indicates that the point falls in the interior of a triangle, on */
+/*   an edge, on a vertex, or outside the mesh.                              */
+
+enum locateresult {INTRIANGLE, ONEDGE, ONVERTEX, OUTSIDE};
+
+/* Labels that signify the result of vertex insertion.  The result indicates */
+/*   that the vertex was inserted with complete success, was inserted but    */
+/*   encroaches upon a subsegment, was not inserted because it lies on a     */
+/*   segment, or was not inserted because another vertex occupies the same   */
+/*   location.                                                               */
+
+enum insertvertexresult {SUCCESSFULVERTEX, ENCROACHINGVERTEX, VIOLATINGVERTEX,
+                         DUPLICATEVERTEX};
+
+/* Labels that signify the result of direction finding.  The result          */
+/*   indicates that a segment connecting the two query points falls within   */
+/*   the direction triangle, along the left edge of the direction triangle,  */
+/*   or along the right edge of the direction triangle.                      */
+
+enum finddirectionresult {WITHIN, LEFTCOLLINEAR, RIGHTCOLLINEAR};
+
+/*****************************************************************************/
+/*                                                                           */
+/*  The basic mesh data structures                                           */
+/*                                                                           */
+/*  There are three:  vertices, triangles, and subsegments (abbreviated      */
+/*  `subseg').  These three data structures, linked by pointers, comprise    */
+/*  the mesh.  A vertex simply represents a mesh vertex and its properties.  */
+/*  A triangle is a triangle.  A subsegment is a special data structure used */
+/*  to represent an impenetrable edge of the mesh (perhaps on the outer      */
+/*  boundary, on the boundary of a hole, or part of an internal boundary     */
+/*  separating two triangulated regions).  Subsegments represent boundaries, */
+/*  defined by the user, that triangles may not lie across.                  */
+/*                                                                           */
+/*  A triangle consists of a list of three vertices, a list of three         */
+/*  adjoining triangles, a list of three adjoining subsegments (when         */
+/*  segments exist), an arbitrary number of optional user-defined            */
+/*  floating-point attributes, and an optional area constraint.  The latter  */
+/*  is an upper bound on the permissible area of each triangle in a region,  */
+/*  used for mesh refinement.                                                */
+/*                                                                           */
+/*  For a triangle on a boundary of the mesh, some or all of the neighboring */
+/*  triangles may not be present.  For a triangle in the interior of the     */
+/*  mesh, often no neighboring subsegments are present.  Such absent         */
+/*  triangles and subsegments are never represented by NULL pointers; they   */
+/*  are represented by two special records:  `dummytri', the triangle that   */
+/*  fills "outer space", and `dummysub', the omnipresent subsegment.         */
+/*  `dummytri' and `dummysub' are used for several reasons; for instance,    */
+/*  they can be dereferenced and their contents examined without violating   */
+/*  protected memory.                                                        */
+/*                                                                           */
+/*  However, it is important to understand that a triangle includes other    */
+/*  information as well.  The pointers to adjoining vertices, triangles, and */
+/*  subsegments are ordered in a way that indicates their geometric relation */
+/*  to each other.  Furthermore, each of these pointers contains orientation */
+/*  information.  Each pointer to an adjoining triangle indicates which face */
+/*  of that triangle is contacted.  Similarly, each pointer to an adjoining  */
+/*  subsegment indicates which side of that subsegment is contacted, and how */
+/*  the subsegment is oriented relative to the triangle.                     */
+/*                                                                           */
+/*  The data structure representing a subsegment may be thought to be        */
+/*  abutting the edge of one or two triangle data structures:  either        */
+/*  sandwiched between two triangles, or resting against one triangle on an  */
+/*  exterior boundary or hole boundary.                                      */
+/*                                                                           */
+/*  A subsegment consists of a list of four vertices--the vertices of the    */
+/*  subsegment, and the vertices of the segment it is a part of--a list of   */
+/*  two adjoining subsegments, and a list of two adjoining triangles.  One   */
+/*  of the two adjoining triangles may not be present (though there should   */
+/*  always be one), and neighboring subsegments might not be present.        */
+/*  Subsegments also store a user-defined integer "boundary marker".         */
+/*  Typically, this integer is used to indicate what boundary conditions are */
+/*  to be applied at that location in a finite element simulation.           */
+/*                                                                           */
+/*  Like triangles, subsegments maintain information about the relative      */
+/*  orientation of neighboring objects.                                      */
+/*                                                                           */
+/*  Vertices are relatively simple.  A vertex is a list of floating-point    */
+/*  numbers, starting with the x, and y coordinates, followed by an          */
+/*  arbitrary number of optional user-defined floating-point attributes,     */
+/*  followed by an integer boundary marker.  During the segment insertion    */
+/*  phase, there is also a pointer from each vertex to a triangle that may   */
+/*  contain it.  Each pointer is not always correct, but when one is, it     */
+/*  speeds up segment insertion.  These pointers are assigned values once    */
+/*  at the beginning of the segment insertion phase, and are not used or     */
+/*  updated except during this phase.  Edge flipping during segment          */
+/*  insertion will render some of them incorrect.  Hence, don't rely upon    */
+/*  them for anything.                                                       */
+/*                                                                           */
+/*  Other than the exception mentioned above, vertices have no information   */
+/*  about what triangles, subfacets, or subsegments they are linked to.      */
+/*                                                                           */
+/*****************************************************************************/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  Handles                                                                  */
+/*                                                                           */
+/*  The oriented triangle (`otri') and oriented subsegment (`osub') data     */
+/*  structures defined below do not themselves store any part of the mesh.   */
+/*  The mesh itself is made of `triangle's, `subseg's, and `vertex's.        */
+/*                                                                           */
+/*  Oriented triangles and oriented subsegments will usually be referred to  */
+/*  as "handles."  A handle is essentially a pointer into the mesh; it       */
+/*  allows you to "hold" one particular part of the mesh.  Handles are used  */
+/*  to specify the regions in which one is traversing and modifying the mesh.*/
+/*  A single `triangle' may be held by many handles, or none at all.  (The   */
+/*  latter case is not a memory leak, because the triangle is still          */
+/*  connected to other triangles in the mesh.)                               */
+/*                                                                           */
+/*  An `otri' is a handle that holds a triangle.  It holds a specific edge   */
+/*  of the triangle.  An `osub' is a handle that holds a subsegment.  It     */
+/*  holds either the left or right side of the subsegment.                   */
+/*                                                                           */
+/*  Navigation about the mesh is accomplished through a set of mesh          */
+/*  manipulation primitives, further below.  Many of these primitives take   */
+/*  a handle and produce a new handle that holds the mesh near the first     */
+/*  handle.  Other primitives take two handles and glue the corresponding    */
+/*  parts of the mesh together.  The orientation of the handles is           */
+/*  important.  For instance, when two triangles are glued together by the   */
+/*  bond() primitive, they are glued at the edges on which the handles lie.  */
+/*                                                                           */
+/*  Because vertices have no information about which triangles they are      */
+/*  attached to, I commonly represent a vertex by use of a handle whose      */
+/*  origin is the vertex.  A single handle can simultaneously represent a    */
+/*  triangle, an edge, and a vertex.                                         */
+/*                                                                           */
+/*****************************************************************************/
+
+/* The triangle data structure.  Each triangle contains three pointers to    */
+/*   adjoining triangles, plus three pointers to vertices, plus three        */
+/*   pointers to subsegments (declared below; these pointers are usually     */
+/*   `dummysub').  It may or may not also contain user-defined attributes    */
+/*   and/or a floating-point "area constraint."  It may also contain extra   */
+/*   pointers for nodes, when the user asks for high-order elements.         */
+/*   Because the size and structure of a `triangle' is not decided until     */
+/*   runtime, I haven't simply declared the type `triangle' as a struct.     */
+
+typedef REAL **triangle;            /* Really:  typedef triangle *triangle   */
+
+/* An oriented triangle:  includes a pointer to a triangle and orientation.  */
+/*   The orientation denotes an edge of the triangle.  Hence, there are      */
+/*   three possible orientations.  By convention, each edge always points    */
+/*   counterclockwise about the corresponding triangle.                      */
+
+struct otri {
+  triangle *tri;
+  int orient;                                         /* Ranges from 0 to 2. */
+};
+
+/* The subsegment data structure.  Each subsegment contains two pointers to  */
+/*   adjoining subsegments, plus four pointers to vertices, plus two         */
+/*   pointers to adjoining triangles, plus one boundary marker, plus one     */
+/*   segment number.                                                         */
+
+typedef REAL **subseg;                  /* Really:  typedef subseg *subseg   */
+
+/* An oriented subsegment:  includes a pointer to a subsegment and an        */
+/*   orientation.  The orientation denotes a side of the edge.  Hence, there */
+/*   are two possible orientations.  By convention, the edge is always       */
+/*   directed so that the "side" denoted is the right side of the edge.      */
+
+struct osub {
+  subseg *ss;
+  int ssorient;                                       /* Ranges from 0 to 1. */
+};
+
+/* The vertex data structure.  Each vertex is actually an array of REALs.    */
+/*   The number of REALs is unknown until runtime.  An integer boundary      */
+/*   marker, and sometimes a pointer to a triangle, is appended after the    */
+/*   REALs.                                                                  */
+
+typedef REAL *vertex;
+
+/* A queue used to store encroached subsegments.  Each subsegment's vertices */
+/*   are stored so that we can check whether a subsegment is still the same. */
+
+struct badsubseg {
+  subseg encsubseg;                             /* An encroached subsegment. */
+  vertex subsegorg, subsegdest;                         /* Its two vertices. */
+};
+
+/* A queue used to store bad triangles.  The key is the square of the cosine */
+/*   of the smallest angle of the triangle.  Each triangle's vertices are    */
+/*   stored so that one can check whether a triangle is still the same.      */
+
+struct badtriang {
+  triangle poortri;                       /* A skinny or too-large triangle. */
+  REAL key;                             /* cos^2 of smallest (apical) angle. */
+  vertex triangorg, triangdest, triangapex;           /* Its three vertices. */
+  struct badtriang *nexttriang;             /* Pointer to next bad triangle. */
+};
+
+/* A stack of triangles flipped during the most recent vertex insertion.     */
+/*   The stack is used to undo the vertex insertion if the vertex encroaches */
+/*   upon a subsegment.                                                      */
+
+struct flipstacker {
+  triangle flippedtri;                       /* A recently flipped triangle. */
+  struct flipstacker *prevflip;               /* Previous flip in the stack. */
+};
+
+/* A node in a heap used to store events for the sweepline Delaunay          */
+/*   algorithm.  Nodes do not point directly to their parents or children in */
+/*   the heap.  Instead, each node knows its position in the heap, and can   */
+/*   look up its parent and children in a separate array.  The `eventptr'    */
+/*   points either to a `vertex' or to a triangle (in encoded format, so     */
+/*   that an orientation is included).  In the latter case, the origin of    */
+/*   the oriented triangle is the apex of a "circle event" of the sweepline  */
+/*   algorithm.  To distinguish site events from circle events, all circle   */
+/*   events are given an invalid (smaller than `xmin') x-coordinate `xkey'.  */
+
+struct event {
+  REAL xkey, ykey;                              /* Coordinates of the event. */
+  VOID *eventptr;      /* Can be a vertex or the location of a circle event. */
+  int heapposition;              /* Marks this event's position in the heap. */
+};
+
+/* A node in the splay tree.  Each node holds an oriented ghost triangle     */
+/*   that represents a boundary edge of the growing triangulation.  When a   */
+/*   circle event covers two boundary edges with a triangle, so that they    */
+/*   are no longer boundary edges, those edges are not immediately deleted   */
+/*   from the tree; rather, they are lazily deleted when they are next       */
+/*   encountered.  (Since only a random sample of boundary edges are kept    */
+/*   in the tree, lazy deletion is faster.)  `keydest' is used to verify     */
+/*   that a triangle is still the same as when it entered the splay tree; if */
+/*   it has been rotated (due to a circle event), it no longer represents a  */
+/*   boundary edge and should be deleted.                                    */
+
+struct splaynode {
+  struct otri keyedge;                     /* Lprev of an edge on the front. */
+  vertex keydest;           /* Used to verify that splay node is still live. */
+  struct splaynode *lchild, *rchild;              /* Children in splay tree. */
+};
+
+/* A type used to allocate memory.  firstblock is the first block of items.  */
+/*   nowblock is the block from which items are currently being allocated.   */
+/*   nextitem points to the next slab of free memory for an item.            */
+/*   deaditemstack is the head of a linked list (stack) of deallocated items */
+/*   that can be recycled.  unallocateditems is the number of items that     */
+/*   remain to be allocated from nowblock.                                   */
+/*                                                                           */
+/* Traversal is the process of walking through the entire list of items, and */
+/*   is separate from allocation.  Note that a traversal will visit items on */
+/*   the "deaditemstack" stack as well as live items.  pathblock points to   */
+/*   the block currently being traversed.  pathitem points to the next item  */
+/*   to be traversed.  pathitemsleft is the number of items that remain to   */
+/*   be traversed in pathblock.                                              */
+/*                                                                           */
+/* alignbytes determines how new records should be aligned in memory.        */
+/*   itembytes is the length of a record in bytes (after rounding up).       */
+/*   itemsperblock is the number of items allocated at once in a single      */
+/*   block.  itemsfirstblock is the number of items in the first block,      */
+/*   which can vary from the others.  items is the number of currently       */
+/*   allocated items.  maxitems is the maximum number of items that have     */
+/*   been allocated at once; it is the current number of items plus the      */
+/*   number of records kept on deaditemstack.                                */
+
+struct memorypool {
+  VOID **firstblock, **nowblock;
+  VOID *nextitem;
+  VOID *deaditemstack;
+  VOID **pathblock;
+  VOID *pathitem;
+  int alignbytes;
+  int itembytes;
+  int itemsperblock;
+  int itemsfirstblock;
+  long items, maxitems;
+  int unallocateditems;
+  int pathitemsleft;
+};
+
+
+/* Global constants.                                                         */
+
+REAL splitter;       /* Used to split REAL factors for exact multiplication. */
+REAL epsilon;                             /* Floating-point machine epsilon. */
+REAL resulterrbound;
+REAL ccwerrboundA, ccwerrboundB, ccwerrboundC;
+REAL iccerrboundA, iccerrboundB, iccerrboundC;
+REAL o3derrboundA, o3derrboundB, o3derrboundC;
+
+/* Random number seed is not constant, but I've made it global anyway.       */
+
+unsigned long randomseed;                     /* Current random number seed. */
+
+
+/* Mesh data structure.  Triangle operates on only one mesh, but the mesh    */
+/*   structure is used (instead of global variables) to allow reentrancy.    */
+
+struct mesh {
+
+/* Variables used to allocate memory for triangles, subsegments, vertices,   */
+/*   viri (triangles being eaten), encroached segments, bad (skinny or too   */
+/*   large) triangles, and splay tree nodes.                                 */
+
+  struct memorypool triangles;
+  struct memorypool subsegs;
+  struct memorypool vertices;
+  struct memorypool viri;
+  struct memorypool badsubsegs;
+  struct memorypool badtriangles;
+  struct memorypool flipstackers;
+  struct memorypool splaynodes;
+
+/* Variables that maintain the bad triangle queues.  The queues are          */
+/*   ordered from 4095 (highest priority) to 0 (lowest priority).            */
+
+  struct badtriang *queuefront[4096];
+  struct badtriang *queuetail[4096];
+  int nextnonemptyq[4096];
+  int firstnonemptyq;
+
+/* Variable that maintains the stack of recently flipped triangles.          */
+
+  struct flipstacker *lastflip;
+
+/* Other variables. */
+
+  REAL xmin, xmax, ymin, ymax;                            /* x and y bounds. */
+  REAL xminextreme;      /* Nonexistent x value used as a flag in sweepline. */
+  int invertices;                               /* Number of input vertices. */
+  int inelements;                              /* Number of input triangles. */
+  int insegments;                               /* Number of input segments. */
+  int holes;                                       /* Number of input holes. */
+  int regions;                                   /* Number of input regions. */
+  int undeads;    /* Number of input vertices that don't appear in the mesh. */
+  long edges;                                     /* Number of output edges. */
+  int mesh_dim;                                /* Dimension (ought to be 2). */
+  int nextras;                           /* Number of attributes per vertex. */
+  int eextras;                         /* Number of attributes per triangle. */
+  long hullsize;                          /* Number of edges in convex hull. */
+  int steinerleft;                 /* Number of Steiner points not yet used. */
+  int vertexmarkindex;         /* Index to find boundary marker of a vertex. */
+  int vertex2triindex;     /* Index to find a triangle adjacent to a vertex. */
+  int highorderindex;  /* Index to find extra nodes for high-order elements. */
+  int elemattribindex;            /* Index to find attributes of a triangle. */
+  int areaboundindex;             /* Index to find area bound of a triangle. */
+  int checksegments;         /* Are there segments in the triangulation yet? */
+  int checkquality;                  /* Has quality triangulation begun yet? */
+  int readnodefile;                           /* Has a .node file been read? */
+  long samples;              /* Number of random samples for point location. */
+
+  long incirclecount;                 /* Number of incircle tests performed. */
+  long counterclockcount;     /* Number of counterclockwise tests performed. */
+  long orient3dcount;           /* Number of 3D orientation tests performed. */
+  long hyperbolacount;      /* Number of right-of-hyperbola tests performed. */
+  long circumcentercount;  /* Number of circumcenter calculations performed. */
+  long circletopcount;       /* Number of circle top calculations performed. */
+
+/* Triangular bounding box vertices.                                         */
+
+  vertex infvertex1, infvertex2, infvertex3;
+
+/* Pointer to the `triangle' that occupies all of "outer space."             */
+
+  triangle *dummytri;
+  triangle *dummytribase;    /* Keep base address so we can free() it later. */
+
+/* Pointer to the omnipresent subsegment.  Referenced by any triangle or     */
+/*   subsegment that isn't really connected to a subsegment at that          */
+/*   location.                                                               */
+
+  subseg *dummysub;
+  subseg *dummysubbase;      /* Keep base address so we can free() it later. */
+
+/* Pointer to a recently visited triangle.  Improves point location if       */
+/*   proximate vertices are inserted sequentially.                           */
+
+  struct otri recenttri;
+
+};                                                  /* End of `struct mesh'. */
+
+
+/* Data structure for command line switches and file names.  This structure  */
+/*   is used (instead of global variables) to allow reentrancy.              */
+
+struct behavior {
+
+/* Switches for the triangulator.                                            */
+/*   poly: -p switch.  refine: -r switch.                                    */
+/*   quality: -q switch.                                                     */
+/*     minangle: minimum angle bound, specified after -q switch.             */
+/*     goodangle: cosine squared of minangle.                                */
+/*     offconstant: constant used to place off-center Steiner points.        */
+/*   vararea: -a switch without number.                                      */
+/*   fixedarea: -a switch with number.                                       */
+/*     maxarea: maximum area bound, specified after -a switch.               */
+/*   usertest: -u switch.                                                    */
+/*   regionattrib: -A switch.  convex: -c switch.                            */
+/*   weighted: 1 for -w switch, 2 for -W switch.  jettison: -j switch        */
+/*   firstnumber: inverse of -z switch.  All items are numbered starting     */
+/*     from `firstnumber'.                                                   */
+/*   edgesout: -e switch.  voronoi: -v switch.                               */
+/*   neighbors: -n switch.  geomview: -g switch.                             */
+/*   nobound: -B switch.  nopolywritten: -P switch.                          */
+/*   nonodewritten: -N switch.  noelewritten: -E switch.                     */
+/*   noiterationnum: -I switch.  noholes: -O switch.                         */
+/*   noexact: -X switch.                                                     */
+/*   order: element order, specified after -o switch.                        */
+/*   nobisect: count of how often -Y switch is selected.                     */
+/*   steiner: maximum number of Steiner points, specified after -S switch.   */
+/*   incremental: -i switch.  sweepline: -F switch.                          */
+/*   dwyer: inverse of -l switch.                                            */
+/*   splitseg: -s switch.                                                    */
+/*   conformdel: -D switch.  docheck: -C switch.                             */
+/*   quiet: -Q switch.  verbose: count of how often -V switch is selected.   */
+/*   usesegments: -p, -r, -q, or -c switch; determines whether segments are  */
+/*     used at all.                                                          */
+/*                                                                           */
+/* Read the instructions to find out the meaning of these switches.          */
+
+  int poly, refine, quality, vararea, fixedarea, usertest;
+  int regionattrib, convex, weighted, jettison;
+  int firstnumber;
+  int edgesout, voronoi, neighbors, geomview;
+  int nobound, nopolywritten, nonodewritten, noelewritten, noiterationnum;
+  int noholes, noexact, conformdel;
+  int incremental, sweepline, dwyer;
+  int splitseg;
+  int docheck;
+  int quiet, verbose;
+  int usesegments;
+  int order;
+  int nobisect;
+  int steiner;
+  REAL minangle, goodangle, offconstant;
+  REAL maxarea;
+
+/* Variables for file names.                                                 */
+
+#ifndef TRILIBRARY
+  char innodefilename[FILENAMESIZE];
+  char inelefilename[FILENAMESIZE];
+  char inpolyfilename[FILENAMESIZE];
+  char areafilename[FILENAMESIZE];
+  char outnodefilename[FILENAMESIZE];
+  char outelefilename[FILENAMESIZE];
+  char outpolyfilename[FILENAMESIZE];
+  char edgefilename[FILENAMESIZE];
+  char vnodefilename[FILENAMESIZE];
+  char vedgefilename[FILENAMESIZE];
+  char neighborfilename[FILENAMESIZE];
+  char offfilename[FILENAMESIZE];
+#endif /* not TRILIBRARY */
+
+};                                              /* End of `struct behavior'. */
+
+
+/*****************************************************************************/
+/*                                                                           */
+/*  Mesh manipulation primitives.  Each triangle contains three pointers to  */
+/*  other triangles, with orientations.  Each pointer points not to the      */
+/*  first byte of a triangle, but to one of the first three bytes of a       */
+/*  triangle.  It is necessary to extract both the triangle itself and the   */
+/*  orientation.  To save memory, I keep both pieces of information in one   */
+/*  pointer.  To make this possible, I assume that all triangles are aligned */
+/*  to four-byte boundaries.  The decode() routine below decodes a pointer,  */
+/*  extracting an orientation (in the range 0 to 2) and a pointer to the     */
+/*  beginning of a triangle.  The encode() routine compresses a pointer to a */
+/*  triangle and an orientation into a single pointer.  My assumptions that  */
+/*  triangles are four-byte-aligned and that the `unsigned long' type is     */
+/*  long enough to hold a pointer are two of the few kludges in this program.*/
+/*                                                                           */
+/*  Subsegments are manipulated similarly.  A pointer to a subsegment        */
+/*  carries both an address and an orientation in the range 0 to 1.          */
+/*                                                                           */
+/*  The other primitives take an oriented triangle or oriented subsegment,   */
+/*  and return an oriented triangle or oriented subsegment or vertex; or     */
+/*  they change the connections in the data structure.                       */
+/*                                                                           */
+/*  Below, triangles and subsegments are denoted by their vertices.  The     */
+/*  triangle abc has origin (org) a, destination (dest) b, and apex (apex)   */
+/*  c.  These vertices occur in counterclockwise order about the triangle.   */
+/*  The handle abc may simultaneously denote vertex a, edge ab, and triangle */
+/*  abc.                                                                     */
+/*                                                                           */
+/*  Similarly, the subsegment ab has origin (sorg) a and destination (sdest) */
+/*  b.  If ab is thought to be directed upward (with b directly above a),    */
+/*  then the handle ab is thought to grasp the right side of ab, and may     */
+/*  simultaneously denote vertex a and edge ab.                              */
+/*                                                                           */
+/*  An asterisk (*) denotes a vertex whose identity is unknown.              */
+/*                                                                           */
+/*  Given this notation, a partial list of mesh manipulation primitives      */
+/*  follows.                                                                 */
+/*                                                                           */
+/*                                                                           */
+/*  For triangles:                                                           */
+/*                                                                           */
+/*  sym:  Find the abutting triangle; same edge.                             */
+/*  sym(abc) -> ba*                                                          */
+/*                                                                           */
+/*  lnext:  Find the next edge (counterclockwise) of a triangle.             */
+/*  lnext(abc) -> bca                                                        */
+/*                                                                           */
+/*  lprev:  Find the previous edge (clockwise) of a triangle.                */
+/*  lprev(abc) -> cab                                                        */
+/*                                                                           */
+/*  onext:  Find the next edge counterclockwise with the same origin.        */
+/*  onext(abc) -> ac*                                                        */
+/*                                                                           */
+/*  oprev:  Find the next edge clockwise with the same origin.               */
+/*  oprev(abc) -> a*b                                                        */
+/*                                                                           */
+/*  dnext:  Find the next edge counterclockwise with the same destination.   */
+/*  dnext(abc) -> *ba                                                        */
+/*                                                                           */
+/*  dprev:  Find the next edge clockwise with the same destination.          */
+/*  dprev(abc) -> cb*                                                        */
+/*                                                                           */
+/*  rnext:  Find the next edge (counterclockwise) of the adjacent triangle.  */
+/*  rnext(abc) -> *a*                                                        */
+/*                                                                           */
+/*  rprev:  Find the previous edge (clockwise) of the adjacent triangle.     */
+/*  rprev(abc) -> b**                                                        */
+/*                                                                           */
+/*  org:  Origin          dest:  Destination          apex:  Apex            */
+/*  org(abc) -> a         dest(abc) -> b              apex(abc) -> c         */
+/*                                                                           */
+/*  bond:  Bond two triangles together at the resepective handles.           */
+/*  bond(abc, bad)                                                           */
+/*                                                                           */
+/*                                                                           */
+/*  For subsegments:                                                         */
+/*                                                                           */
+/*  ssym:  Reverse the orientation of a subsegment.                          */
+/*  ssym(ab) -> ba                                                           */
+/*                                                                           */
+/*  spivot:  Find adjoining subsegment with the same origin.                 */
+/*  spivot(ab) -> a*                                                         */
+/*                                                                           */
+/*  snext:  Find next subsegment in sequence.                                */
+/*  snext(ab) -> b*                                                          */
+/*                                                                           */
+/*  sorg:  Origin                      sdest:  Destination                   */
+/*  sorg(ab) -> a                      sdest(ab) -> b                        */
+/*                                                                           */
+/*  sbond:  Bond two subsegments together at the respective origins.         */
+/*  sbond(ab, ac)                                                            */
+/*                                                                           */
+/*                                                                           */
+/*  For interacting tetrahedra and subfacets:                                */
+/*                                                                           */
+/*  tspivot:  Find a subsegment abutting a triangle.                         */
+/*  tspivot(abc) -> ba                                                       */
+/*                                                                           */
+/*  stpivot:  Find a triangle abutting a subsegment.                         */
+/*  stpivot(ab) -> ba*                                                       */
+/*                                                                           */
+/*  tsbond:  Bond a triangle to a subsegment.                                */
+/*  tsbond(abc, ba)                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+/********* Mesh manipulation primitives begin here                   *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/* Fast lookup arrays to speed some of the mesh manipulation primitives.     */
+
+int plus1mod3[3] = {1, 2, 0};
+int minus1mod3[3] = {2, 0, 1};
+
+/********* Primitives for triangles                                  *********/
+/*                                                                           */
+/*                                                                           */
+
+/* decode() converts a pointer to an oriented triangle.  The orientation is  */
+/*   extracted from the two least significant bits of the pointer.           */
+
+#define decode(ptr, otri)                                                     \
+  (otri).orient = (int) ((unsigned long) (ptr) & (unsigned long) 3l);         \
+  (otri).tri = (triangle *)                                                   \
+                  ((unsigned long) (ptr) ^ (unsigned long) (otri).orient)
+
+/* encode() compresses an oriented triangle into a single pointer.  It       */
+/*   relies on the assumption that all triangles are aligned to four-byte    */
+/*   boundaries, so the two least significant bits of (otri).tri are zero.   */
+
+#define encode(otri)                                                          \
+  (triangle) ((unsigned long) (otri).tri | (unsigned long) (otri).orient)
+
+/* The following handle manipulation primitives are all described by Guibas  */
+/*   and Stolfi.  However, Guibas and Stolfi use an edge-based data          */
+/*   structure, whereas I use a triangle-based data structure.               */
+
+/* sym() finds the abutting triangle, on the same edge.  Note that the edge  */
+/*   direction is necessarily reversed, because the handle specified by an   */
+/*   oriented triangle is directed counterclockwise around the triangle.     */
+
+#define sym(otri1, otri2)                                                     \
+  ptr = (otri1).tri[(otri1).orient];                                          \
+  decode(ptr, otri2);
+
+#define symself(otri)                                                         \
+  ptr = (otri).tri[(otri).orient];                                            \
+  decode(ptr, otri);
+
+/* lnext() finds the next edge (counterclockwise) of a triangle.             */
+
+#define lnext(otri1, otri2)                                                   \
+  (otri2).tri = (otri1).tri;                                                  \
+  (otri2).orient = plus1mod3[(otri1).orient]
+
+#define lnextself(otri)                                                       \
+  (otri).orient = plus1mod3[(otri).orient]
+
+/* lprev() finds the previous edge (clockwise) of a triangle.                */
+
+#define lprev(otri1, otri2)                                                   \
+  (otri2).tri = (otri1).tri;                                                  \
+  (otri2).orient = minus1mod3[(otri1).orient]
+
+#define lprevself(otri)                                                       \
+  (otri).orient = minus1mod3[(otri).orient]
+
+/* onext() spins counterclockwise around a vertex; that is, it finds the     */
+/*   next edge with the same origin in the counterclockwise direction.  This */
+/*   edge is part of a different triangle.                                   */
+
+#define onext(otri1, otri2)                                                   \
+  lprev(otri1, otri2);                                                        \
+  symself(otri2);
+
+#define onextself(otri)                                                       \
+  lprevself(otri);                                                            \
+  symself(otri);
+
+/* oprev() spins clockwise around a vertex; that is, it finds the next edge  */
+/*   with the same origin in the clockwise direction.  This edge is part of  */
+/*   a different triangle.                                                   */
+
+#define oprev(otri1, otri2)                                                   \
+  sym(otri1, otri2);                                                          \
+  lnextself(otri2);
+
+#define oprevself(otri)                                                       \
+  symself(otri);                                                              \
+  lnextself(otri);
+
+/* dnext() spins counterclockwise around a vertex; that is, it finds the     */
+/*   next edge with the same destination in the counterclockwise direction.  */
+/*   This edge is part of a different triangle.                              */
+
+#define dnext(otri1, otri2)                                                   \
+  sym(otri1, otri2);                                                          \
+  lprevself(otri2);
+
+#define dnextself(otri)                                                       \
+  symself(otri);                                                              \
+  lprevself(otri);
+
+/* dprev() spins clockwise around a vertex; that is, it finds the next edge  */
+/*   with the same destination in the clockwise direction.  This edge is     */
+/*   part of a different triangle.                                           */
+
+#define dprev(otri1, otri2)                                                   \
+  lnext(otri1, otri2);                                                        \
+  symself(otri2);
+
+#define dprevself(otri)                                                       \
+  lnextself(otri);                                                            \
+  symself(otri);
+
+/* rnext() moves one edge counterclockwise about the adjacent triangle.      */
+/*   (It's best understood by reading Guibas and Stolfi.  It involves        */
+/*   changing triangles twice.)                                              */
+
+#define rnext(otri1, otri2)                                                   \
+  sym(otri1, otri2);                                                          \
+  lnextself(otri2);                                                           \
+  symself(otri2);
+
+#define rnextself(otri)                                                       \
+  symself(otri);                                                              \
+  lnextself(otri);                                                            \
+  symself(otri);
+
+/* rprev() moves one edge clockwise about the adjacent triangle.             */
+/*   (It's best understood by reading Guibas and Stolfi.  It involves        */
+/*   changing triangles twice.)                                              */
+
+#define rprev(otri1, otri2)                                                   \
+  sym(otri1, otri2);                                                          \
+  lprevself(otri2);                                                           \
+  symself(otri2);
+
+#define rprevself(otri)                                                       \
+  symself(otri);                                                              \
+  lprevself(otri);                                                            \
+  symself(otri);
+
+/* These primitives determine or set the origin, destination, or apex of a   */
+/* triangle.                                                                 */
+
+#define org(otri, vertexptr)                                                  \
+  vertexptr = (vertex) (otri).tri[plus1mod3[(otri).orient] + 3]
+
+#define dest(otri, vertexptr)                                                 \
+  vertexptr = (vertex) (otri).tri[minus1mod3[(otri).orient] + 3]
+
+#define apex(otri, vertexptr)                                                 \
+  vertexptr = (vertex) (otri).tri[(otri).orient + 3]
+
+#define setorg(otri, vertexptr)                                               \
+  (otri).tri[plus1mod3[(otri).orient] + 3] = (triangle) vertexptr
+
+#define setdest(otri, vertexptr)                                              \
+  (otri).tri[minus1mod3[(otri).orient] + 3] = (triangle) vertexptr
+
+#define setapex(otri, vertexptr)                                              \
+  (otri).tri[(otri).orient + 3] = (triangle) vertexptr
+
+/* Bond two triangles together.                                              */
+
+#define bond(otri1, otri2)                                                    \
+  (otri1).tri[(otri1).orient] = encode(otri2);                                \
+  (otri2).tri[(otri2).orient] = encode(otri1)
+
+/* Dissolve a bond (from one side).  Note that the other triangle will still */
+/*   think it's connected to this triangle.  Usually, however, the other     */
+/*   triangle is being deleted entirely, or bonded to another triangle, so   */
+/*   it doesn't matter.                                                      */
+
+#define dissolve(otri)                                                        \
+  (otri).tri[(otri).orient] = (triangle) m->dummytri
+
+/* Copy an oriented triangle.                                                */
+
+#define otricopy(otri1, otri2)                                                \
+  (otri2).tri = (otri1).tri;                                                  \
+  (otri2).orient = (otri1).orient
+
+/* Test for equality of oriented triangles.                                  */
+
+#define otriequal(otri1, otri2)                                               \
+  (((otri1).tri == (otri2).tri) &&                                            \
+   ((otri1).orient == (otri2).orient))
+
+/* Primitives to infect or cure a triangle with the virus.  These rely on    */
+/*   the assumption that all subsegments are aligned to four-byte boundaries.*/
+
+#define infect(otri)                                                          \
+  (otri).tri[6] = (triangle)                                                  \
+                    ((unsigned long) (otri).tri[6] | (unsigned long) 2l)
+
+#define uninfect(otri)                                                        \
+  (otri).tri[6] = (triangle)                                                  \
+                    ((unsigned long) (otri).tri[6] & ~ (unsigned long) 2l)
+
+/* Test a triangle for viral infection.                                      */
+
+#define infected(otri)                                                        \
+  (((unsigned long) (otri).tri[6] & (unsigned long) 2l) != 0l)
+
+/* Check or set a triangle's attributes.                                     */
+
+#define elemattribute(otri, attnum)                                           \
+  ((REAL *) (otri).tri)[m->elemattribindex + (attnum)]
+
+#define setelemattribute(otri, attnum, value)                                 \
+  ((REAL *) (otri).tri)[m->elemattribindex + (attnum)] = value
+
+/* Check or set a triangle's maximum area bound.                             */
+
+#define areabound(otri)  ((REAL *) (otri).tri)[m->areaboundindex]
+
+#define setareabound(otri, value)                                             \
+  ((REAL *) (otri).tri)[m->areaboundindex] = value
+
+/* Check or set a triangle's deallocation.  Its second pointer is set to     */
+/*   NULL to indicate that it is not allocated.  (Its first pointer is used  */
+/*   for the stack of dead items.)  Its fourth pointer (its first vertex)    */
+/*   is set to NULL in case a `badtriang' structure points to it.            */
+
+#define deadtri(tria)  ((tria)[1] == (triangle) NULL)
+
+#define killtri(tria)                                                         \
+  (tria)[1] = (triangle) NULL;                                                \
+  (tria)[3] = (triangle) NULL
+
+/********* Primitives for subsegments                                *********/
+/*                                                                           */
+/*                                                                           */
+
+/* sdecode() converts a pointer to an oriented subsegment.  The orientation  */
+/*   is extracted from the least significant bit of the pointer.  The two    */
+/*   least significant bits (one for orientation, one for viral infection)   */
+/*   are masked out to produce the real pointer.                             */
+
+#define sdecode(sptr, osub)                                                   \
+  (osub).ssorient = (int) ((unsigned long) (sptr) & (unsigned long) 1l);      \
+  (osub).ss = (subseg *)                                                      \
+              ((unsigned long) (sptr) & ~ (unsigned long) 3l)
+
+/* sencode() compresses an oriented subsegment into a single pointer.  It    */
+/*   relies on the assumption that all subsegments are aligned to two-byte   */
+/*   boundaries, so the least significant bit of (osub).ss is zero.          */
+
+#define sencode(osub)                                                         \
+  (subseg) ((unsigned long) (osub).ss | (unsigned long) (osub).ssorient)
+
+/* ssym() toggles the orientation of a subsegment.                           */
+
+#define ssym(osub1, osub2)                                                    \
+  (osub2).ss = (osub1).ss;                                                    \
+  (osub2).ssorient = 1 - (osub1).ssorient
+
+#define ssymself(osub)                                                        \
+  (osub).ssorient = 1 - (osub).ssorient
+
+/* spivot() finds the other subsegment (from the same segment) that shares   */
+/*   the same origin.                                                        */
+
+#define spivot(osub1, osub2)                                                  \
+  sptr = (osub1).ss[(osub1).ssorient];                                        \
+  sdecode(sptr, osub2)
+
+#define spivotself(osub)                                                      \
+  sptr = (osub).ss[(osub).ssorient];                                          \
+  sdecode(sptr, osub)
+
+/* snext() finds the next subsegment (from the same segment) in sequence;    */
+/*   one whose origin is the input subsegment's destination.                 */
+
+#define snext(osub1, osub2)                                                   \
+  sptr = (osub1).ss[1 - (osub1).ssorient];                                    \
+  sdecode(sptr, osub2)
+
+#define snextself(osub)                                                       \
+  sptr = (osub).ss[1 - (osub).ssorient];                                      \
+  sdecode(sptr, osub)
+
+/* These primitives determine or set the origin or destination of a          */
+/*   subsegment or the segment that includes it.                             */
+
+#define sorg(osub, vertexptr)                                                 \
+  vertexptr = (vertex) (osub).ss[2 + (osub).ssorient]
+
+#define sdest(osub, vertexptr)                                                \
+  vertexptr = (vertex) (osub).ss[3 - (osub).ssorient]
+
+#define setsorg(osub, vertexptr)                                              \
+  (osub).ss[2 + (osub).ssorient] = (subseg) vertexptr
+
+#define setsdest(osub, vertexptr)                                             \
+  (osub).ss[3 - (osub).ssorient] = (subseg) vertexptr
+
+#define segorg(osub, vertexptr)                                               \
+  vertexptr = (vertex) (osub).ss[4 + (osub).ssorient]
+
+#define segdest(osub, vertexptr)                                              \
+  vertexptr = (vertex) (osub).ss[5 - (osub).ssorient]
+
+#define setsegorg(osub, vertexptr)                                            \
+  (osub).ss[4 + (osub).ssorient] = (subseg) vertexptr
+
+#define setsegdest(osub, vertexptr)                                           \
+  (osub).ss[5 - (osub).ssorient] = (subseg) vertexptr
+
+/* These primitives read or set a boundary marker.  Boundary markers are     */
+/*   used to hold user-defined tags for setting boundary conditions in       */
+/*   finite element solvers.                                                 */
+
+#define mark(osub)  (* (int *) ((osub).ss + 8))
+
+#define setmark(osub, value)                                                  \
+  * (int *) ((osub).ss + 8) = value
+
+/* Bond two subsegments together.                                            */
+
+#define sbond(osub1, osub2)                                                   \
+  (osub1).ss[(osub1).ssorient] = sencode(osub2);                              \
+  (osub2).ss[(osub2).ssorient] = sencode(osub1)
+
+/* Dissolve a subsegment bond (from one side).  Note that the other          */
+/*   subsegment will still think it's connected to this subsegment.          */
+
+#define sdissolve(osub)                                                       \
+  (osub).ss[(osub).ssorient] = (subseg) m->dummysub
+
+/* Copy a subsegment.                                                        */
+
+#define subsegcopy(osub1, osub2)                                              \
+  (osub2).ss = (osub1).ss;                                                    \
+  (osub2).ssorient = (osub1).ssorient
+
+/* Test for equality of subsegments.                                         */
+
+#define subsegequal(osub1, osub2)                                             \
+  (((osub1).ss == (osub2).ss) &&                                              \
+   ((osub1).ssorient == (osub2).ssorient))
+
+/* Check or set a subsegment's deallocation.  Its second pointer is set to   */
+/*   NULL to indicate that it is not allocated.  (Its first pointer is used  */
+/*   for the stack of dead items.)  Its third pointer (its first vertex)     */
+/*   is set to NULL in case a `badsubseg' structure points to it.            */
+
+#define deadsubseg(sub)  ((sub)[1] == (subseg) NULL)
+
+#define killsubseg(sub)                                                       \
+  (sub)[1] = (subseg) NULL;                                                   \
+  (sub)[2] = (subseg) NULL
+
+/********* Primitives for interacting triangles and subsegments      *********/
+/*                                                                           */
+/*                                                                           */
+
+/* tspivot() finds a subsegment abutting a triangle.                         */
+
+#define tspivot(otri, osub)                                                   \
+  sptr = (subseg) (otri).tri[6 + (otri).orient];                              \
+  sdecode(sptr, osub)
+
+/* stpivot() finds a triangle abutting a subsegment.  It requires that the   */
+/*   variable `ptr' of type `triangle' be defined.                           */
+
+#define stpivot(osub, otri)                                                   \
+  ptr = (triangle) (osub).ss[6 + (osub).ssorient];                            \
+  decode(ptr, otri)
+
+/* Bond a triangle to a subsegment.                                          */
+
+#define tsbond(otri, osub)                                                    \
+  (otri).tri[6 + (otri).orient] = (triangle) sencode(osub);                   \
+  (osub).ss[6 + (osub).ssorient] = (subseg) encode(otri)
+
+/* Dissolve a bond (from the triangle side).                                 */
+
+#define tsdissolve(otri)                                                      \
+  (otri).tri[6 + (otri).orient] = (triangle) m->dummysub
+
+/* Dissolve a bond (from the subsegment side).                               */
+
+#define stdissolve(osub)                                                      \
+  (osub).ss[6 + (osub).ssorient] = (subseg) m->dummytri
+
+/********* Primitives for vertices                                   *********/
+/*                                                                           */
+/*                                                                           */
+
+#define vertexmark(vx)  ((int *) (vx))[m->vertexmarkindex]
+
+#define setvertexmark(vx, value)                                              \
+  ((int *) (vx))[m->vertexmarkindex] = value
+
+#define vertextype(vx)  ((int *) (vx))[m->vertexmarkindex + 1]
+
+#define setvertextype(vx, value)                                              \
+  ((int *) (vx))[m->vertexmarkindex + 1] = value
+
+#define vertex2tri(vx)  ((triangle *) (vx))[m->vertex2triindex]
+
+#define setvertex2tri(vx, value)                                              \
+  ((triangle *) (vx))[m->vertex2triindex] = value
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Mesh manipulation primitives end here                     *********/
+
+/********* User-defined triangle evaluation routine begins here      *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  triunsuitable()   Determine if a triangle is unsuitable, and thus must   */
+/*                    be further refined.                                    */
+/*                                                                           */
+/*  You may write your own procedure that decides whether or not a selected  */
+/*  triangle is too big (and needs to be refined).  There are two ways to do */
+/*  this.                                                                    */
+/*                                                                           */
+/*  (1)  Modify the procedure `triunsuitable' below, then recompile          */
+/*  Triangle.                                                                */
+/*                                                                           */
+/*  (2)  Define the symbol EXTERNAL_TEST (either by adding the definition    */
+/*  to this file, or by using the appropriate compiler switch).  This way,   */
+/*  you can compile triangle.c separately from your test.  Write your own    */
+/*  `triunsuitable' procedure in a separate C file (using the same prototype */
+/*  as below).  Compile it and link the object code with triangle.o.         */
+/*                                                                           */
+/*  This procedure returns 1 if the triangle is too large and should be      */
+/*  refined; 0 otherwise.                                                    */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef EXTERNAL_TEST
+
+int triunsuitable();
+
+#else /* not EXTERNAL_TEST */
+
+#ifdef ANSI_DECLARATORS
+int triunsuitable(vertex triorg, vertex tridest, vertex triapex, REAL area)
+#else /* not ANSI_DECLARATORS */
+int triunsuitable(triorg, tridest, triapex, area)
+vertex triorg;                              /* The triangle's origin vertex. */
+vertex tridest;                        /* The triangle's destination vertex. */
+vertex triapex;                               /* The triangle's apex vertex. */
+REAL area;                                      /* The area of the triangle. */
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL dxoa, dxda, dxod;
+  REAL dyoa, dyda, dyod;
+  REAL oalen, dalen, odlen;
+  REAL maxlen;
+
+  dxoa = triorg[0] - triapex[0];
+  dyoa = triorg[1] - triapex[1];
+  dxda = tridest[0] - triapex[0];
+  dyda = tridest[1] - triapex[1];
+  dxod = triorg[0] - tridest[0];
+  dyod = triorg[1] - tridest[1];
+  /* Find the squares of the lengths of the triangle's three edges. */
+  oalen = dxoa * dxoa + dyoa * dyoa;
+  dalen = dxda * dxda + dyda * dyda;
+  odlen = dxod * dxod + dyod * dyod;
+  /* Find the square of the length of the longest edge. */
+  maxlen = (dalen > oalen) ? dalen : oalen;
+  maxlen = (odlen > maxlen) ? odlen : maxlen;
+
+  if (maxlen > 0.05 * (triorg[0] * triorg[0] + triorg[1] * triorg[1]) + 0.02) {
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+#endif /* not EXTERNAL_TEST */
+
+/**                                                                         **/
+/**                                                                         **/
+/********* User-defined triangle evaluation routine ends here        *********/
+
+/********* Memory allocation and program exit wrappers begin here    *********/
+/**                                                                         **/
+/**                                                                         **/
+
+#ifdef ANSI_DECLARATORS
+void triexit(int status)
+#else /* not ANSI_DECLARATORS */
+void triexit(status)
+int status;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  exit(status);
+}
+
+#ifdef ANSI_DECLARATORS
+VOID *trimalloc(int size)
+#else /* not ANSI_DECLARATORS */
+VOID *trimalloc(size)
+int size;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  VOID *memptr;
+
+  memptr = (VOID *) malloc((unsigned int) size);
+  if (memptr == (VOID *) NULL) {
+    printf("Error:  Out of memory.\n");
+    triexit(1);
+  }
+  return(memptr);
+}
+
+#ifdef ANSI_DECLARATORS
+void trifree(VOID *memptr)
+#else /* not ANSI_DECLARATORS */
+void trifree(memptr)
+VOID *memptr;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  free(memptr);
+}
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Memory allocation and program exit wrappers end here      *********/
+
+/********* User interaction routines begin here                      *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  syntax()   Print list of command line switches.                          */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef TRILIBRARY
+
+void syntax()
+{
+#ifdef CDT_ONLY
+#ifdef REDUCED
+  printf("triangle [-pAcjevngBPNEIOXzo_lQVh] input_file\n");
+#else /* not REDUCED */
+  printf("triangle [-pAcjevngBPNEIOXzo_iFlCQVh] input_file\n");
+#endif /* not REDUCED */
+#else /* not CDT_ONLY */
+#ifdef REDUCED
+  printf("triangle [-prq__a__uAcDjevngBPNEIOXzo_YS__lQVh] input_file\n");
+#else /* not REDUCED */
+  printf("triangle [-prq__a__uAcDjevngBPNEIOXzo_YS__iFlsCQVh] input_file\n");
+#endif /* not REDUCED */
+#endif /* not CDT_ONLY */
+
+  printf("    -p  Triangulates a Planar Straight Line Graph (.poly file).\n");
+#ifndef CDT_ONLY
+  printf("    -r  Refines a previously generated mesh.\n");
+  printf(
+    "    -q  Quality mesh generation.  A minimum angle may be specified.\n");
+  printf("    -a  Applies a maximum triangle area constraint.\n");
+  printf("    -u  Applies a user-defined triangle constraint.\n");
+#endif /* not CDT_ONLY */
+  printf(
+    "    -A  Applies attributes to identify triangles in certain regions.\n");
+  printf("    -c  Encloses the convex hull with segments.\n");
+#ifndef CDT_ONLY
+  printf("    -D  Conforming Delaunay:  all triangles are truly Delaunay.\n");
+#endif /* not CDT_ONLY */
+/*
+  printf("    -w  Weighted Delaunay triangulation.\n");
+  printf("    -W  Regular triangulation (lower hull of a height field).\n");
+*/
+  printf("    -j  Jettison unused vertices from output .node file.\n");
+  printf("    -e  Generates an edge list.\n");
+  printf("    -v  Generates a Voronoi diagram.\n");
+  printf("    -n  Generates a list of triangle neighbors.\n");
+  printf("    -g  Generates an .off file for Geomview.\n");
+  printf("    -B  Suppresses output of boundary information.\n");
+  printf("    -P  Suppresses output of .poly file.\n");
+  printf("    -N  Suppresses output of .node file.\n");
+  printf("    -E  Suppresses output of .ele file.\n");
+  printf("    -I  Suppresses mesh iteration numbers.\n");
+  printf("    -O  Ignores holes in .poly file.\n");
+  printf("    -X  Suppresses use of exact arithmetic.\n");
+  printf("    -z  Numbers all items starting from zero (rather than one).\n");
+  printf("    -o2 Generates second-order subparametric elements.\n");
+#ifndef CDT_ONLY
+  printf("    -Y  Suppresses boundary segment splitting.\n");
+  printf("    -S  Specifies maximum number of added Steiner points.\n");
+#endif /* not CDT_ONLY */
+#ifndef REDUCED
+  printf("    -i  Uses incremental method, rather than divide-and-conquer.\n");
+  printf("    -F  Uses Fortune's sweepline algorithm, rather than d-and-c.\n");
+#endif /* not REDUCED */
+  printf("    -l  Uses vertical cuts only, rather than alternating cuts.\n");
+#ifndef REDUCED
+#ifndef CDT_ONLY
+  printf(
+    "    -s  Force segments into mesh by splitting (instead of using CDT).\n");
+#endif /* not CDT_ONLY */
+  printf("    -C  Check consistency of final mesh.\n");
+#endif /* not REDUCED */
+  printf("    -Q  Quiet:  No terminal output except errors.\n");
+  printf("    -V  Verbose:  Detailed information on what I'm doing.\n");
+  printf("    -h  Help:  Detailed instructions for Triangle.\n");
+  triexit(0);
+}
+
+#endif /* not TRILIBRARY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  info()   Print out complete instructions.                                */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef TRILIBRARY
+
+void info()
+{
+  printf("Triangle\n");
+  printf(
+"A Two-Dimensional Quality Mesh Generator and Delaunay Triangulator.\n");
+  printf("Version 1.6\n\n");
+  printf(
+"Copyright 1993, 1995, 1997, 1998, 2002, 2005 Jonathan Richard Shewchuk\n");
+  printf("2360 Woolsey #H / Berkeley, California 94705-1927\n");
+  printf("Bugs/comments to jrs at cs.berkeley.edu\n");
+  printf(
+"Created as part of the Quake project (tools for earthquake simulation).\n");
+  printf(
+"Supported in part by NSF Grant CMS-9318163 and an NSERC 1967 Scholarship.\n");
+  printf("There is no warranty whatsoever.  Use at your own risk.\n");
+#ifdef SINGLE
+  printf("This executable is compiled for single precision arithmetic.\n\n\n");
+#else /* not SINGLE */
+  printf("This executable is compiled for double precision arithmetic.\n\n\n");
+#endif /* not SINGLE */
+  printf(
+"Triangle generates exact Delaunay triangulations, constrained Delaunay\n");
+  printf(
+"triangulations, conforming Delaunay triangulations, Voronoi diagrams, and\n");
+  printf(
+"high-quality triangular meshes.  The latter can be generated with no small\n"
+);
+  printf(
+"or large angles, and are thus suitable for finite element analysis.  If no\n"
+);
+  printf(
+"command line switch is specified, your .node input file is read, and the\n");
+  printf(
+"Delaunay triangulation is returned in .node and .ele output files.  The\n");
+  printf("command syntax is:\n\n");
+  printf("triangle [-prq__a__uAcDjevngBPNEIOXzo_YS__iFlsCQVh] input_file\n\n");
+  printf(
+"Underscores indicate that numbers may optionally follow certain switches.\n");
+  printf(
+"Do not leave any space between a switch and its numeric parameter.\n");
+  printf(
+"input_file must be a file with extension .node, or extension .poly if the\n");
+  printf(
+"-p switch is used.  If -r is used, you must supply .node and .ele files,\n");
+  printf(
+"and possibly a .poly file and an .area file as well.  The formats of these\n"
+);
+  printf("files are described below.\n\n");
+  printf("Command Line Switches:\n\n");
+  printf(
+"    -p  Reads a Planar Straight Line Graph (.poly file), which can specify\n"
+);
+  printf(
+"        vertices, segments, holes, regional attributes, and regional area\n");
+  printf(
+"        constraints.  Generates a constrained Delaunay triangulation (CDT)\n"
+);
+  printf(
+"        fitting the input; or, if -s, -q, -a, or -u is used, a conforming\n");
+  printf(
+"        constrained Delaunay triangulation (CCDT).  If you want a truly\n");
+  printf(
+"        Delaunay (not just constrained Delaunay) triangulation, use -D as\n");
+  printf(
+"        well.  When -p is not used, Triangle reads a .node file by default.\n"
+);
+  printf(
+"    -r  Refines a previously generated mesh.  The mesh is read from a .node\n"
+);
+  printf(
+"        file and an .ele file.  If -p is also used, a .poly file is read\n");
+  printf(
+"        and used to constrain segments in the mesh.  If -a is also used\n");
+  printf(
+"        (with no number following), an .area file is read and used to\n");
+  printf(
+"        impose area constraints on the mesh.  Further details on refinement\n"
+);
+  printf("        appear below.\n");
+  printf(
+"    -q  Quality mesh generation by Delaunay refinement (a hybrid of Paul\n");
+  printf(
+"        Chew's and Jim Ruppert's algorithms).  Adds vertices to the mesh to\n"
+);
+  printf(
+"        ensure that all angles are between 20 and 140 degrees.  An\n");
+  printf(
+"        alternative bound on the minimum angle, replacing 20 degrees, may\n");
+  printf(
+"        be specified after the `q'.  The specified angle may include a\n");
+  printf(
+"        decimal point, but not exponential notation.  Note that a bound of\n"
+);
+  printf(
+"        theta degrees on the smallest angle also implies a bound of\n");
+  printf(
+"        (180 - 2 theta) on the largest angle.  If the minimum angle is 28.6\n"
+);
+  printf(
+"        degrees or smaller, Triangle is mathematically guaranteed to\n");
+  printf(
+"        terminate (assuming infinite precision arithmetic--Triangle may\n");
+  printf(
+"        fail to terminate if you run out of precision).  In practice,\n");
+  printf(
+"        Triangle often succeeds for minimum angles up to 34 degrees.  For\n");
+  printf(
+"        some meshes, however, you might need to reduce the minimum angle to\n"
+);
+  printf(
+"        avoid problems associated with insufficient floating-point\n");
+  printf("        precision.\n");
+  printf(
+"    -a  Imposes a maximum triangle area.  If a number follows the `a', no\n");
+  printf(
+"        triangle is generated whose area is larger than that number.  If no\n"
+);
+  printf(
+"        number is specified, an .area file (if -r is used) or .poly file\n");
+  printf(
+"        (if -r is not used) specifies a set of maximum area constraints.\n");
+  printf(
+"        An .area file contains a separate area constraint for each\n");
+  printf(
+"        triangle, and is useful for refining a finite element mesh based on\n"
+);
+  printf(
+"        a posteriori error estimates.  A .poly file can optionally contain\n"
+);
+  printf(
+"        an area constraint for each segment-bounded region, thereby\n");
+  printf(
+"        controlling triangle densities in a first triangulation of a PSLG.\n"
+);
+  printf(
+"        You can impose both a fixed area constraint and a varying area\n");
+  printf(
+"        constraint by invoking the -a switch twice, once with and once\n");
+  printf(
+"        without a number following.  Each area specified may include a\n");
+  printf("        decimal point.\n");
+  printf(
+"    -u  Imposes a user-defined constraint on triangle size.  There are two\n"
+);
+  printf(
+"        ways to use this feature.  One is to edit the triunsuitable()\n");
+  printf(
+"        procedure in triangle.c to encode any constraint you like, then\n");
+  printf(
+"        recompile Triangle.  The other is to compile triangle.c with the\n");
+  printf(
+"        EXTERNAL_TEST symbol set (compiler switch -DEXTERNAL_TEST), then\n");
+  printf(
+"        link Triangle with a separate object file that implements\n");
+  printf(
+"        triunsuitable().  In either case, the -u switch causes the user-\n");
+  printf("        defined test to be applied to every triangle.\n");
+  printf(
+"    -A  Assigns an additional floating-point attribute to each triangle\n");
+  printf(
+"        that identifies what segment-bounded region each triangle belongs\n");
+  printf(
+"        to.  Attributes are assigned to regions by the .poly file.  If a\n");
+  printf(
+"        region is not explicitly marked by the .poly file, triangles in\n");
+  printf(
+"        that region are assigned an attribute of zero.  The -A switch has\n");
+  printf(
+"        an effect only when the -p switch is used and the -r switch is not.\n"
+);
+  printf(
+"    -c  Creates segments on the convex hull of the triangulation.  If you\n");
+  printf(
+"        are triangulating a vertex set, this switch causes a .poly file to\n"
+);
+  printf(
+"        be written, containing all edges of the convex hull.  If you are\n");
+  printf(
+"        triangulating a PSLG, this switch specifies that the whole convex\n");
+  printf(
+"        hull of the PSLG should be triangulated, regardless of what\n");
+  printf(
+"        segments the PSLG has.  If you do not use this switch when\n");
+  printf(
+"        triangulating a PSLG, Triangle assumes that you have identified the\n"
+);
+  printf(
+"        region to be triangulated by surrounding it with segments of the\n");
+  printf(
+"        input PSLG.  Beware:  if you are not careful, this switch can cause\n"
+);
+  printf(
+"        the introduction of an extremely thin angle between a PSLG segment\n"
+);
+  printf(
+"        and a convex hull segment, which can cause overrefinement (and\n");
+  printf(
+"        possibly failure if Triangle runs out of precision).  If you are\n");
+  printf(
+"        refining a mesh, the -c switch works differently:  it causes a\n");
+  printf(
+"        .poly file to be written containing the boundary edges of the mesh\n"
+);
+  printf("        (useful if no .poly file was read).\n");
+  printf(
+"    -D  Conforming Delaunay triangulation:  use this switch if you want to\n"
+);
+  printf(
+"        ensure that all the triangles in the mesh are Delaunay, and not\n");
+  printf(
+"        merely constrained Delaunay; or if you want to ensure that all the\n"
+);
+  printf(
+"        Voronoi vertices lie within the triangulation.  (Some finite volume\n"
+);
+  printf(
+"        methods have this requirement.)  This switch invokes Ruppert's\n");
+  printf(
+"        original algorithm, which splits every subsegment whose diametral\n");
+  printf(
+"        circle is encroached.  It usually increases the number of vertices\n"
+);
+  printf("        and triangles.\n");
+  printf(
+"    -j  Jettisons vertices that are not part of the final triangulation\n");
+  printf(
+"        from the output .node file.  By default, Triangle copies all\n");
+  printf(
+"        vertices in the input .node file to the output .node file, in the\n");
+  printf(
+"        same order, so their indices do not change.  The -j switch prevents\n"
+);
+  printf(
+"        duplicated input vertices, or vertices `eaten' by holes, from\n");
+  printf(
+"        appearing in the output .node file.  Thus, if two input vertices\n");
+  printf(
+"        have exactly the same coordinates, only the first appears in the\n");
+  printf(
+"        output.  If any vertices are jettisoned, the vertex numbering in\n");
+  printf(
+"        the output .node file differs from that of the input .node file.\n");
+  printf(
+"    -e  Outputs (to an .edge file) a list of edges of the triangulation.\n");
+  printf(
+"    -v  Outputs the Voronoi diagram associated with the triangulation.\n");
+  printf(
+"        Does not attempt to detect degeneracies, so some Voronoi vertices\n");
+  printf(
+"        may be duplicated.  See the discussion of Voronoi diagrams below.\n");
+  printf(
+"    -n  Outputs (to a .neigh file) a list of triangles neighboring each\n");
+  printf("        triangle.\n");
+  printf(
+"    -g  Outputs the mesh to an Object File Format (.off) file, suitable for\n"
+);
+  printf("        viewing with the Geometry Center's Geomview package.\n");
+  printf(
+"    -B  No boundary markers in the output .node, .poly, and .edge output\n");
+  printf(
+"        files.  See the detailed discussion of boundary markers below.\n");
+  printf(
+"    -P  No output .poly file.  Saves disk space, but you lose the ability\n");
+  printf(
+"        to maintain constraining segments on later refinements of the mesh.\n"
+);
+  printf("    -N  No output .node file.\n");
+  printf("    -E  No output .ele file.\n");
+  printf(
+"    -I  No iteration numbers.  Suppresses the output of .node and .poly\n");
+  printf(
+"        files, so your input files won't be overwritten.  (If your input is\n"
+);
+  printf(
+"        a .poly file only, a .node file is written.)  Cannot be used with\n");
+  printf(
+"        the -r switch, because that would overwrite your input .ele file.\n");
+  printf(
+"        Shouldn't be used with the -q, -a, -u, or -s switch if you are\n");
+  printf(
+"        using a .node file for input, because no .node file is written, so\n"
+);
+  printf("        there is no record of any added Steiner points.\n");
+  printf("    -O  No holes.  Ignores the holes in the .poly file.\n");
+  printf(
+"    -X  No exact arithmetic.  Normally, Triangle uses exact floating-point\n"
+);
+  printf(
+"        arithmetic for certain tests if it thinks the inexact tests are not\n"
+);
+  printf(
+"        accurate enough.  Exact arithmetic ensures the robustness of the\n");
+  printf(
+"        triangulation algorithms, despite floating-point roundoff error.\n");
+  printf(
+"        Disabling exact arithmetic with the -X switch causes a small\n");
+  printf(
+"        improvement in speed and creates the possibility that Triangle will\n"
+);
+  printf("        fail to produce a valid mesh.  Not recommended.\n");
+  printf(
+"    -z  Numbers all items starting from zero (rather than one).  Note that\n"
+);
+  printf(
+"        this switch is normally overridden by the value used to number the\n"
+);
+  printf(
+"        first vertex of the input .node or .poly file.  However, this\n");
+  printf(
+"        switch is useful when calling Triangle from another program.\n");
+  printf(
+"    -o2 Generates second-order subparametric elements with six nodes each.\n"
+);
+  printf(
+"    -Y  No new vertices on the boundary.  This switch is useful when the\n");
+  printf(
+"        mesh boundary must be preserved so that it conforms to some\n");
+  printf(
+"        adjacent mesh.  Be forewarned that you will probably sacrifice much\n"
+);
+  printf(
+"        of the quality of the mesh; Triangle will try, but the resulting\n");
+  printf(
+"        mesh may contain poorly shaped triangles.  Works well if all the\n");
+  printf(
+"        boundary vertices are closely spaced.  Specify this switch twice\n");
+  printf(
+"        (`-YY') to prevent all segment splitting, including internal\n");
+  printf("        boundaries.\n");
+  printf(
+"    -S  Specifies the maximum number of Steiner points (vertices that are\n");
+  printf(
+"        not in the input, but are added to meet the constraints on minimum\n"
+);
+  printf(
+"        angle and maximum area).  The default is to allow an unlimited\n");
+  printf(
+"        number.  If you specify this switch with no number after it,\n");
+  printf(
+"        the limit is set to zero.  Triangle always adds vertices at segment\n"
+);
+  printf(
+"        intersections, even if it needs to use more vertices than the limit\n"
+);
+  printf(
+"        you set.  When Triangle inserts segments by splitting (-s), it\n");
+  printf(
+"        always adds enough vertices to ensure that all the segments of the\n"
+);
+  printf("        PLSG are recovered, ignoring the limit if necessary.\n");
+  printf(
+"    -i  Uses an incremental rather than a divide-and-conquer algorithm to\n");
+  printf(
+"        construct a Delaunay triangulation.  Try it if the divide-and-\n");
+  printf("        conquer algorithm fails.\n");
+  printf(
+"    -F  Uses Steven Fortune's sweepline algorithm to construct a Delaunay\n");
+  printf(
+"        triangulation.  Warning:  does not use exact arithmetic for all\n");
+  printf("        calculations.  An exact result is not guaranteed.\n");
+  printf(
+"    -l  Uses only vertical cuts in the divide-and-conquer algorithm.  By\n");
+  printf(
+"        default, Triangle alternates between vertical and horizontal cuts,\n"
+);
+  printf(
+"        which usually improve the speed except with vertex sets that are\n");
+  printf(
+"        small or short and wide.  This switch is primarily of theoretical\n");
+  printf("        interest.\n");
+  printf(
+"    -s  Specifies that segments should be forced into the triangulation by\n"
+);
+  printf(
+"        recursively splitting them at their midpoints, rather than by\n");
+  printf(
+"        generating a constrained Delaunay triangulation.  Segment splitting\n"
+);
+  printf(
+"        is true to Ruppert's original algorithm, but can create needlessly\n"
+);
+  printf(
+"        small triangles.  This switch is primarily of theoretical interest.\n"
+);
+  printf(
+"    -C  Check the consistency of the final mesh.  Uses exact arithmetic for\n"
+);
+  printf(
+"        checking, even if the -X switch is used.  Useful if you suspect\n");
+  printf("        Triangle is buggy.\n");
+  printf(
+"    -Q  Quiet:  Suppresses all explanation of what Triangle is doing,\n");
+  printf("        unless an error occurs.\n");
+  printf(
+"    -V  Verbose:  Gives detailed information about what Triangle is doing.\n"
+);
+  printf(
+"        Add more `V's for increasing amount of detail.  `-V' is most\n");
+  printf(
+"        useful; itgives information on algorithmic progress and much more\n");
+  printf(
+"        detailed statistics.  `-VV' gives vertex-by-vertex details, and\n");
+  printf(
+"        prints so much that Triangle runs much more slowly.  `-VVVV' gives\n"
+);
+  printf("        information only a debugger could love.\n");
+  printf("    -h  Help:  Displays these instructions.\n");
+  printf("\n");
+  printf("Definitions:\n");
+  printf("\n");
+  printf(
+"  A Delaunay triangulation of a vertex set is a triangulation whose\n");
+  printf(
+"  vertices are the vertex set, that covers the convex hull of the vertex\n");
+  printf(
+"  set.  A Delaunay triangulation has the property that no vertex lies\n");
+  printf(
+"  inside the circumscribing circle (circle that passes through all three\n");
+  printf("  vertices) of any triangle in the triangulation.\n\n");
+  printf(
+"  A Voronoi diagram of a vertex set is a subdivision of the plane into\n");
+  printf(
+"  polygonal cells (some of which may be unbounded, meaning infinitely\n");
+  printf(
+"  large), where each cell is the set of points in the plane that are closer\n"
+);
+  printf(
+"  to some input vertex than to any other input vertex.  The Voronoi diagram\n"
+);
+  printf("  is a geometric dual of the Delaunay triangulation.\n\n");
+  printf(
+"  A Planar Straight Line Graph (PSLG) is a set of vertices and segments.\n");
+  printf(
+"  Segments are simply edges, whose endpoints are all vertices in the PSLG.\n"
+);
+  printf(
+"  Segments may intersect each other only at their endpoints.  The file\n");
+  printf("  format for PSLGs (.poly files) is described below.\n\n");
+  printf(
+"  A constrained Delaunay triangulation (CDT) of a PSLG is similar to a\n");
+  printf(
+"  Delaunay triangulation, but each PSLG segment is present as a single edge\n"
+);
+  printf(
+"  of the CDT.  (A constrained Delaunay triangulation is not truly a\n");
+  printf(
+"  Delaunay triangulation, because some of its triangles might not be\n");
+  printf(
+"  Delaunay.)  By definition, a CDT does not have any vertices other than\n");
+  printf(
+"  those specified in the input PSLG.  Depending on context, a CDT might\n");
+  printf(
+"  cover the convex hull of the PSLG, or it might cover only a segment-\n");
+  printf("  bounded region (e.g. a polygon).\n\n");
+  printf(
+"  A conforming Delaunay triangulation of a PSLG is a triangulation in which\n"
+);
+  printf(
+"  each triangle is truly Delaunay, and each PSLG segment is represented by\n"
+);
+  printf(
+"  a linear contiguous sequence of edges of the triangulation.  New vertices\n"
+);
+  printf(
+"  (not part of the PSLG) may appear, and each input segment may have been\n");
+  printf(
+"  subdivided into shorter edges (subsegments) by these additional vertices.\n"
+);
+  printf(
+"  The new vertices are frequently necessary to maintain the Delaunay\n");
+  printf("  property while ensuring that every segment is represented.\n\n");
+  printf(
+"  A conforming constrained Delaunay triangulation (CCDT) of a PSLG is a\n");
+  printf(
+"  triangulation of a PSLG whose triangles are constrained Delaunay.  New\n");
+  printf("  vertices may appear, and input segments may be subdivided into\n");
+  printf(
+"  subsegments, but not to guarantee that segments are respected; rather, to\n"
+);
+  printf(
+"  improve the quality of the triangles.  The high-quality meshes produced\n");
+  printf(
+"  by the -q switch are usually CCDTs, but can be made conforming Delaunay\n");
+  printf("  with the -D switch.\n\n");
+  printf("File Formats:\n\n");
+  printf(
+"  All files may contain comments prefixed by the character '#'.  Vertices,\n"
+);
+  printf(
+"  triangles, edges, holes, and maximum area constraints must be numbered\n");
+  printf(
+"  consecutively, starting from either 1 or 0.  Whichever you choose, all\n");
+  printf(
+"  input files must be consistent; if the vertices are numbered from 1, so\n");
+  printf(
+"  must be all other objects.  Triangle automatically detects your choice\n");
+  printf(
+"  while reading the .node (or .poly) file.  (When calling Triangle from\n");
+  printf(
+"  another program, use the -z switch if you wish to number objects from\n");
+  printf("  zero.)  Examples of these file formats are given below.\n\n");
+  printf("  .node files:\n");
+  printf(
+"    First line:  <# of vertices> <dimension (must be 2)> <# of attributes>\n"
+);
+  printf(
+"                                           <# of boundary markers (0 or 1)>\n"
+);
+  printf(
+"    Remaining lines:  <vertex #> <x> <y> [attributes] [boundary marker]\n");
+  printf("\n");
+  printf(
+"    The attributes, which are typically floating-point values of physical\n");
+  printf(
+"    quantities (such as mass or conductivity) associated with the nodes of\n"
+);
+  printf(
+"    a finite element mesh, are copied unchanged to the output mesh.  If -q,\n"
+);
+  printf(
+"    -a, -u, -D, or -s is selected, each new Steiner point added to the mesh\n"
+);
+  printf("    has attributes assigned to it by linear interpolation.\n\n");
+  printf(
+"    If the fourth entry of the first line is `1', the last column of the\n");
+  printf(
+"    remainder of the file is assumed to contain boundary markers.  Boundary\n"
+);
+  printf(
+"    markers are used to identify boundary vertices and vertices resting on\n"
+);
+  printf(
+"    PSLG segments; a complete description appears in a section below.  The\n"
+);
+  printf(
+"    .node file produced by Triangle contains boundary markers in the last\n");
+  printf("    column unless they are suppressed by the -B switch.\n\n");
+  printf("  .ele files:\n");
+  printf(
+"    First line:  <# of triangles> <nodes per triangle> <# of attributes>\n");
+  printf(
+"    Remaining lines:  <triangle #> <node> <node> <node> ... [attributes]\n");
+  printf("\n");
+  printf(
+"    Nodes are indices into the corresponding .node file.  The first three\n");
+  printf(
+"    nodes are the corner vertices, and are listed in counterclockwise order\n"
+);
+  printf(
+"    around each triangle.  (The remaining nodes, if any, depend on the type\n"
+);
+  printf("    of finite element used.)\n\n");
+  printf(
+"    The attributes are just like those of .node files.  Because there is no\n"
+);
+  printf(
+"    simple mapping from input to output triangles, Triangle attempts to\n");
+  printf(
+"    interpolate attributes, and may cause a lot of diffusion of attributes\n"
+);
+  printf(
+"    among nearby triangles as the triangulation is refined.  Attributes do\n"
+);
+  printf("    not diffuse across segments, so attributes used to identify\n");
+  printf("    segment-bounded regions remain intact.\n\n");
+  printf(
+"    In .ele files produced by Triangle, each triangular element has three\n");
+  printf(
+"    nodes (vertices) unless the -o2 switch is used, in which case\n");
+  printf(
+"    subparametric quadratic elements with six nodes each are generated.\n");
+  printf(
+"    The first three nodes are the corners in counterclockwise order, and\n");
+  printf(
+"    the fourth, fifth, and sixth nodes lie on the midpoints of the edges\n");
+  printf(
+"    opposite the first, second, and third vertices, respectively.\n");
+  printf("\n");
+  printf("  .poly files:\n");
+  printf(
+"    First line:  <# of vertices> <dimension (must be 2)> <# of attributes>\n"
+);
+  printf(
+"                                           <# of boundary markers (0 or 1)>\n"
+);
+  printf(
+"    Following lines:  <vertex #> <x> <y> [attributes] [boundary marker]\n");
+  printf("    One line:  <# of segments> <# of boundary markers (0 or 1)>\n");
+  printf(
+"    Following lines:  <segment #> <endpoint> <endpoint> [boundary marker]\n");
+  printf("    One line:  <# of holes>\n");
+  printf("    Following lines:  <hole #> <x> <y>\n");
+  printf(
+"    Optional line:  <# of regional attributes and/or area constraints>\n");
+  printf(
+"    Optional following lines:  <region #> <x> <y> <attribute> <max area>\n");
+  printf("\n");
+  printf(
+"    A .poly file represents a PSLG, as well as some additional information.\n"
+);
+  printf(
+"    The first section lists all the vertices, and is identical to the\n");
+  printf(
+"    format of .node files.  <# of vertices> may be set to zero to indicate\n"
+);
+  printf(
+"    that the vertices are listed in a separate .node file; .poly files\n");
+  printf(
+"    produced by Triangle always have this format.  A vertex set represented\n"
+);
+  printf(
+"    this way has the advantage that it may easily be triangulated with or\n");
+  printf(
+"    without segments (depending on whether the -p switch is invoked).\n");
+  printf("\n");
+  printf(
+"    The second section lists the segments.  Segments are edges whose\n");
+  printf(
+"    presence in the triangulation is enforced.  (Depending on the choice of\n"
+);
+  printf(
+"    switches, segment might be subdivided into smaller edges).  Each\n");
+  printf(
+"    segment is specified by listing the indices of its two endpoints.  This\n"
+);
+  printf(
+"    means that you must include its endpoints in the vertex list.  Each\n");
+  printf("    segment, like each point, may have a boundary marker.\n\n");
+  printf(
+"    If -q, -a, -u, and -s are not selected, Triangle produces a constrained\n"
+);
+  printf(
+"    Delaunay triangulation (CDT), in which each segment appears as a single\n"
+);
+  printf(
+"    edge in the triangulation.  If -q, -a, -u, or -s is selected, Triangle\n"
+);
+  printf(
+"    produces a conforming constrained Delaunay triangulation (CCDT), in\n");
+  printf(
+"    which segments may be subdivided into smaller edges.  If -D is\n");
+  printf(
+"    selected, Triangle produces a conforming Delaunay triangulation, so\n");
+  printf(
+"    that every triangle is Delaunay, and not just constrained Delaunay.\n");
+  printf("\n");
+  printf(
+"    The third section lists holes (and concavities, if -c is selected) in\n");
+  printf(
+"    the triangulation.  Holes are specified by identifying a point inside\n");
+  printf(
+"    each hole.  After the triangulation is formed, Triangle creates holes\n");
+  printf(
+"    by eating triangles, spreading out from each hole point until its\n");
+  printf(
+"    progress is blocked by segments in the PSLG.  You must be careful to\n");
+  printf(
+"    enclose each hole in segments, or your whole triangulation might be\n");
+  printf(
+"    eaten away.  If the two triangles abutting a segment are eaten, the\n");
+  printf(
+"    segment itself is also eaten.  Do not place a hole directly on a\n");
+  printf("    segment; if you do, Triangle chooses one side of the segment\n");
+  printf("    arbitrarily.\n\n");
+  printf(
+"    The optional fourth section lists regional attributes (to be assigned\n");
+  printf(
+"    to all triangles in a region) and regional constraints on the maximum\n");
+  printf(
+"    triangle area.  Triangle reads this section only if the -A switch is\n");
+  printf(
+"    used or the -a switch is used without a number following it, and the -r\n"
+);
+  printf(
+"    switch is not used.  Regional attributes and area constraints are\n");
+  printf(
+"    propagated in the same manner as holes:  you specify a point for each\n");
+  printf(
+"    attribute and/or constraint, and the attribute and/or constraint\n");
+  printf(
+"    affects the whole region (bounded by segments) containing the point.\n");
+  printf(
+"    If two values are written on a line after the x and y coordinate, the\n");
+  printf(
+"    first such value is assumed to be a regional attribute (but is only\n");
+  printf(
+"    applied if the -A switch is selected), and the second value is assumed\n"
+);
+  printf(
+"    to be a regional area constraint (but is only applied if the -a switch\n"
+);
+  printf(
+"    is selected).  You may specify just one value after the coordinates,\n");
+  printf(
+"    which can serve as both an attribute and an area constraint, depending\n"
+);
+  printf(
+"    on the choice of switches.  If you are using the -A and -a switches\n");
+  printf(
+"    simultaneously and wish to assign an attribute to some region without\n");
+  printf("    imposing an area constraint, use a negative maximum area.\n\n");
+  printf(
+"    When a triangulation is created from a .poly file, you must either\n");
+  printf(
+"    enclose the entire region to be triangulated in PSLG segments, or\n");
+  printf(
+"    use the -c switch, which automatically creates extra segments that\n");
+  printf(
+"    enclose the convex hull of the PSLG.  If you do not use the -c switch,\n"
+);
+  printf(
+"    Triangle eats all triangles that are not enclosed by segments; if you\n");
+  printf(
+"    are not careful, your whole triangulation may be eaten away.  If you do\n"
+);
+  printf(
+"    use the -c switch, you can still produce concavities by the appropriate\n"
+);
+  printf(
+"    placement of holes just inside the boundary of the convex hull.\n");
+  printf("\n");
+  printf(
+"    An ideal PSLG has no intersecting segments, nor any vertices that lie\n");
+  printf(
+"    upon segments (except, of course, the endpoints of each segment).  You\n"
+);
+  printf(
+"    aren't required to make your .poly files ideal, but you should be aware\n"
+);
+  printf(
+"    of what can go wrong.  Segment intersections are relatively safe--\n");
+  printf(
+"    Triangle calculates the intersection points for you and adds them to\n");
+  printf(
+"    the triangulation--as long as your machine's floating-point precision\n");
+  printf(
+"    doesn't become a problem.  You are tempting the fates if you have three\n"
+);
+  printf(
+"    segments that cross at the same location, and expect Triangle to figure\n"
+);
+  printf(
+"    out where the intersection point is.  Thanks to floating-point roundoff\n"
+);
+  printf(
+"    error, Triangle will probably decide that the three segments intersect\n"
+);
+  printf(
+"    at three different points, and you will find a minuscule triangle in\n");
+  printf(
+"    your output--unless Triangle tries to refine the tiny triangle, uses\n");
+  printf(
+"    up the last bit of machine precision, and fails to terminate at all.\n");
+  printf(
+"    You're better off putting the intersection point in the input files,\n");
+  printf(
+"    and manually breaking up each segment into two.  Similarly, if you\n");
+  printf(
+"    place a vertex at the middle of a segment, and hope that Triangle will\n"
+);
+  printf(
+"    break up the segment at that vertex, you might get lucky.  On the other\n"
+);
+  printf(
+"    hand, Triangle might decide that the vertex doesn't lie precisely on\n");
+  printf(
+"    the segment, and you'll have a needle-sharp triangle in your output--or\n"
+);
+  printf("    a lot of tiny triangles if you're generating a quality mesh.\n");
+  printf("\n");
+  printf(
+"    When Triangle reads a .poly file, it also writes a .poly file, which\n");
+  printf(
+"    includes all the subsegments--the edges that are parts of input\n");
+  printf(
+"    segments.  If the -c switch is used, the output .poly file also\n");
+  printf(
+"    includes all of the edges on the convex hull.  Hence, the output .poly\n"
+);
+  printf(
+"    file is useful for finding edges associated with input segments and for\n"
+);
+  printf(
+"    setting boundary conditions in finite element simulations.  Moreover,\n");
+  printf(
+"    you will need the output .poly file if you plan to refine the output\n");
+  printf(
+"    mesh, and don't want segments to be missing in later triangulations.\n");
+  printf("\n");
+  printf("  .area files:\n");
+  printf("    First line:  <# of triangles>\n");
+  printf("    Following lines:  <triangle #> <maximum area>\n");
+  printf("\n");
+  printf(
+"    An .area file associates with each triangle a maximum area that is used\n"
+);
+  printf(
+"    for mesh refinement.  As with other file formats, every triangle must\n");
+  printf(
+"    be represented, and the triangles must be numbered consecutively.  A\n");
+  printf(
+"    triangle may be left unconstrained by assigning it a negative maximum\n");
+  printf("    area.\n\n");
+  printf("  .edge files:\n");
+  printf("    First line:  <# of edges> <# of boundary markers (0 or 1)>\n");
+  printf(
+"    Following lines:  <edge #> <endpoint> <endpoint> [boundary marker]\n");
+  printf("\n");
+  printf(
+"    Endpoints are indices into the corresponding .node file.  Triangle can\n"
+);
+  printf(
+"    produce .edge files (use the -e switch), but cannot read them.  The\n");
+  printf(
+"    optional column of boundary markers is suppressed by the -B switch.\n");
+  printf("\n");
+  printf(
+"    In Voronoi diagrams, one also finds a special kind of edge that is an\n");
+  printf(
+"    infinite ray with only one endpoint.  For these edges, a different\n");
+  printf("    format is used:\n\n");
+  printf("        <edge #> <endpoint> -1 <direction x> <direction y>\n\n");
+  printf(
+"    The `direction' is a floating-point vector that indicates the direction\n"
+);
+  printf("    of the infinite ray.\n\n");
+  printf("  .neigh files:\n");
+  printf(
+"    First line:  <# of triangles> <# of neighbors per triangle (always 3)>\n"
+);
+  printf(
+"    Following lines:  <triangle #> <neighbor> <neighbor> <neighbor>\n");
+  printf("\n");
+  printf(
+"    Neighbors are indices into the corresponding .ele file.  An index of -1\n"
+);
+  printf(
+"    indicates no neighbor (because the triangle is on an exterior\n");
+  printf(
+"    boundary).  The first neighbor of triangle i is opposite the first\n");
+  printf("    corner of triangle i, and so on.\n\n");
+  printf(
+"    Triangle can produce .neigh files (use the -n switch), but cannot read\n"
+);
+  printf("    them.\n\n");
+  printf("Boundary Markers:\n\n");
+  printf(
+"  Boundary markers are tags used mainly to identify which output vertices\n");
+  printf(
+"  and edges are associated with which PSLG segment, and to identify which\n");
+  printf(
+"  vertices and edges occur on a boundary of the triangulation.  A common\n");
+  printf(
+"  use is to determine where boundary conditions should be applied to a\n");
+  printf(
+"  finite element mesh.  You can prevent boundary markers from being written\n"
+);
+  printf("  into files produced by Triangle by using the -B switch.\n\n");
+  printf(
+"  The boundary marker associated with each segment in an output .poly file\n"
+);
+  printf("  and each edge in an output .edge file is chosen as follows:\n");
+  printf(
+"    - If an output edge is part or all of a PSLG segment with a nonzero\n");
+  printf(
+"      boundary marker, then the edge is assigned the same marker.\n");
+  printf(
+"    - Otherwise, if the edge lies on a boundary of the triangulation\n");
+  printf(
+"      (even the boundary of a hole), then the edge is assigned the marker\n");
+  printf("      one (1).\n");
+  printf("    - Otherwise, the edge is assigned the marker zero (0).\n");
+  printf(
+"  The boundary marker associated with each vertex in an output .node file\n");
+  printf("  is chosen as follows:\n");
+  printf(
+"    - If a vertex is assigned a nonzero boundary marker in the input file,\n"
+);
+  printf(
+"      then it is assigned the same marker in the output .node file.\n");
+  printf(
+"    - Otherwise, if the vertex lies on a PSLG segment (even if it is an\n");
+  printf(
+"      endpoint of the segment) with a nonzero boundary marker, then the\n");
+  printf(
+"      vertex is assigned the same marker.  If the vertex lies on several\n");
+  printf("      such segments, one of the markers is chosen arbitrarily.\n");
+  printf(
+"    - Otherwise, if the vertex occurs on a boundary of the triangulation,\n");
+  printf("      then the vertex is assigned the marker one (1).\n");
+  printf("    - Otherwise, the vertex is assigned the marker zero (0).\n");
+  printf("\n");
+  printf(
+"  If you want Triangle to determine for you which vertices and edges are on\n"
+);
+  printf(
+"  the boundary, assign them the boundary marker zero (or use no markers at\n"
+);
+  printf(
+"  all) in your input files.  In the output files, all boundary vertices,\n");
+  printf("  edges, and segments will be assigned the value one.\n\n");
+  printf("Triangulation Iteration Numbers:\n\n");
+  printf(
+"  Because Triangle can read and refine its own triangulations, input\n");
+  printf(
+"  and output files have iteration numbers.  For instance, Triangle might\n");
+  printf(
+"  read the files mesh.3.node, mesh.3.ele, and mesh.3.poly, refine the\n");
+  printf(
+"  triangulation, and output the files mesh.4.node, mesh.4.ele, and\n");
+  printf("  mesh.4.poly.  Files with no iteration number are treated as if\n");
+  printf(
+"  their iteration number is zero; hence, Triangle might read the file\n");
+  printf(
+"  points.node, triangulate it, and produce the files points.1.node and\n");
+  printf("  points.1.ele.\n\n");
+  printf(
+"  Iteration numbers allow you to create a sequence of successively finer\n");
+  printf(
+"  meshes suitable for multigrid methods.  They also allow you to produce a\n"
+);
+  printf(
+"  sequence of meshes using error estimate-driven mesh refinement.\n");
+  printf("\n");
+  printf(
+"  If you're not using refinement or quality meshing, and you don't like\n");
+  printf(
+"  iteration numbers, use the -I switch to disable them.  This switch also\n");
+  printf(
+"  disables output of .node and .poly files to prevent your input files from\n"
+);
+  printf(
+"  being overwritten.  (If the input is a .poly file that contains its own\n");
+  printf(
+"  points, a .node file is written.  This can be quite convenient for\n");
+  printf("  computing CDTs or quality meshes.)\n\n");
+  printf("Examples of How to Use Triangle:\n\n");
+  printf(
+"  `triangle dots' reads vertices from dots.node, and writes their Delaunay\n"
+);
+  printf(
+"  triangulation to dots.1.node and dots.1.ele.  (dots.1.node is identical\n");
+  printf(
+"  to dots.node.)  `triangle -I dots' writes the triangulation to dots.ele\n");
+  printf(
+"  instead.  (No additional .node file is needed, so none is written.)\n");
+  printf("\n");
+  printf(
+"  `triangle -pe object.1' reads a PSLG from object.1.poly (and possibly\n");
+  printf(
+"  object.1.node, if the vertices are omitted from object.1.poly) and writes\n"
+);
+  printf(
+"  its constrained Delaunay triangulation to object.2.node and object.2.ele.\n"
+);
+  printf(
+"  The segments are copied to object.2.poly, and all edges are written to\n");
+  printf("  object.2.edge.\n\n");
+  printf(
+"  `triangle -pq31.5a.1 object' reads a PSLG from object.poly (and possibly\n"
+);
+  printf(
+"  object.node), generates a mesh whose angles are all between 31.5 and 117\n"
+);
+  printf(
+"  degrees and whose triangles all have areas of 0.1 or less, and writes the\n"
+);
+  printf(
+"  mesh to object.1.node and object.1.ele.  Each segment may be broken up\n");
+  printf("  into multiple subsegments; these are written to object.1.poly.\n");
+  printf("\n");
+  printf(
+"  Here is a sample file `box.poly' describing a square with a square hole:\n"
+);
+  printf("\n");
+  printf(
+"    # A box with eight vertices in 2D, no attributes, one boundary marker.\n"
+);
+  printf("    8 2 0 1\n");
+  printf("     # Outer box has these vertices:\n");
+  printf("     1   0 0   0\n");
+  printf("     2   0 3   0\n");
+  printf("     3   3 0   0\n");
+  printf("     4   3 3   33     # A special marker for this vertex.\n");
+  printf("     # Inner square has these vertices:\n");
+  printf("     5   1 1   0\n");
+  printf("     6   1 2   0\n");
+  printf("     7   2 1   0\n");
+  printf("     8   2 2   0\n");
+  printf("    # Five segments with boundary markers.\n");
+  printf("    5 1\n");
+  printf("     1   1 2   5      # Left side of outer box.\n");
+  printf("     # Square hole has these segments:\n");
+  printf("     2   5 7   0\n");
+  printf("     3   7 8   0\n");
+  printf("     4   8 6   10\n");
+  printf("     5   6 5   0\n");
+  printf("    # One hole in the middle of the inner square.\n");
+  printf("    1\n");
+  printf("     1   1.5 1.5\n");
+  printf("\n");
+  printf(
+"  Note that some segments are missing from the outer square, so you must\n");
+  printf(
+"  use the `-c' switch.  After `triangle -pqc box.poly', here is the output\n"
+);
+  printf(
+"  file `box.1.node', with twelve vertices.  The last four vertices were\n");
+  printf(
+"  added to meet the angle constraint.  Vertices 1, 2, and 9 have markers\n");
+  printf(
+"  from segment 1.  Vertices 6 and 8 have markers from segment 4.  All the\n");
+  printf(
+"  other vertices but 4 have been marked to indicate that they lie on a\n");
+  printf("  boundary.\n\n");
+  printf("    12  2  0  1\n");
+  printf("       1    0   0      5\n");
+  printf("       2    0   3      5\n");
+  printf("       3    3   0      1\n");
+  printf("       4    3   3     33\n");
+  printf("       5    1   1      1\n");
+  printf("       6    1   2     10\n");
+  printf("       7    2   1      1\n");
+  printf("       8    2   2     10\n");
+  printf("       9    0   1.5    5\n");
+  printf("      10    1.5   0    1\n");
+  printf("      11    3   1.5    1\n");
+  printf("      12    1.5   3    1\n");
+  printf("    # Generated by triangle -pqc box.poly\n");
+  printf("\n");
+  printf("  Here is the output file `box.1.ele', with twelve triangles.\n");
+  printf("\n");
+  printf("    12  3  0\n");
+  printf("       1     5   6   9\n");
+  printf("       2    10   3   7\n");
+  printf("       3     6   8  12\n");
+  printf("       4     9   1   5\n");
+  printf("       5     6   2   9\n");
+  printf("       6     7   3  11\n");
+  printf("       7    11   4   8\n");
+  printf("       8     7   5  10\n");
+  printf("       9    12   2   6\n");
+  printf("      10     8   7  11\n");
+  printf("      11     5   1  10\n");
+  printf("      12     8   4  12\n");
+  printf("    # Generated by triangle -pqc box.poly\n\n");
+  printf(
+"  Here is the output file `box.1.poly'.  Note that segments have been added\n"
+);
+  printf(
+"  to represent the convex hull, and some segments have been subdivided by\n");
+  printf(
+"  newly added vertices.  Note also that <# of vertices> is set to zero to\n");
+  printf("  indicate that the vertices should be read from the .node file.\n");
+  printf("\n");
+  printf("    0  2  0  1\n");
+  printf("    12  1\n");
+  printf("       1     1   9     5\n");
+  printf("       2     5   7     1\n");
+  printf("       3     8   7     1\n");
+  printf("       4     6   8    10\n");
+  printf("       5     5   6     1\n");
+  printf("       6     3  10     1\n");
+  printf("       7     4  11     1\n");
+  printf("       8     2  12     1\n");
+  printf("       9     9   2     5\n");
+  printf("      10    10   1     1\n");
+  printf("      11    11   3     1\n");
+  printf("      12    12   4     1\n");
+  printf("    1\n");
+  printf("       1   1.5 1.5\n");
+  printf("    # Generated by triangle -pqc box.poly\n");
+  printf("\n");
+  printf("Refinement and Area Constraints:\n");
+  printf("\n");
+  printf(
+"  The -r switch causes a mesh (.node and .ele files) to be read and\n");
+  printf(
+"  refined.  If the -p switch is also used, a .poly file is read and used to\n"
+);
+  printf(
+"  specify edges that are constrained and cannot be eliminated (although\n");
+  printf(
+"  they can be subdivided into smaller edges) by the refinement process.\n");
+  printf("\n");
+  printf(
+"  When you refine a mesh, you generally want to impose tighter constraints.\n"
+);
+  printf(
+"  One way to accomplish this is to use -q with a larger angle, or -a\n");
+  printf(
+"  followed by a smaller area than you used to generate the mesh you are\n");
+  printf(
+"  refining.  Another way to do this is to create an .area file, which\n");
+  printf(
+"  specifies a maximum area for each triangle, and use the -a switch\n");
+  printf(
+"  (without a number following).  Each triangle's area constraint is applied\n"
+);
+  printf(
+"  to that triangle.  Area constraints tend to diffuse as the mesh is\n");
+  printf(
+"  refined, so if there are large variations in area constraint between\n");
+  printf(
+"  adjacent triangles, you may not get the results you want.  In that case,\n"
+);
+  printf(
+"  consider instead using the -u switch and writing a C procedure that\n");
+  printf("  determines which triangles are too large.\n\n");
+  printf(
+"  If you are refining a mesh composed of linear (three-node) elements, the\n"
+);
+  printf(
+"  output mesh contains all the nodes present in the input mesh, in the same\n"
+);
+  printf(
+"  order, with new nodes added at the end of the .node file.  However, the\n");
+  printf(
+"  refinement is not hierarchical: there is no guarantee that each output\n");
+  printf(
+"  element is contained in a single input element.  Often, an output element\n"
+);
+  printf(
+"  can overlap two or three input elements, and some input edges are not\n");
+  printf(
+"  present in the output mesh.  Hence, a sequence of refined meshes forms a\n"
+);
+  printf(
+"  hierarchy of nodes, but not a hierarchy of elements.  If you refine a\n");
+  printf(
+"  mesh of higher-order elements, the hierarchical property applies only to\n"
+);
+  printf(
+"  the nodes at the corners of an element; the midpoint nodes on each edge\n");
+  printf("  are discarded before the mesh is refined.\n\n");
+  printf(
+"  Maximum area constraints in .poly files operate differently from those in\n"
+);
+  printf(
+"  .area files.  A maximum area in a .poly file applies to the whole\n");
+  printf(
+"  (segment-bounded) region in which a point falls, whereas a maximum area\n");
+  printf(
+"  in an .area file applies to only one triangle.  Area constraints in .poly\n"
+);
+  printf(
+"  files are used only when a mesh is first generated, whereas area\n");
+  printf(
+"  constraints in .area files are used only to refine an existing mesh, and\n"
+);
+  printf(
+"  are typically based on a posteriori error estimates resulting from a\n");
+  printf("  finite element simulation on that mesh.\n\n");
+  printf(
+"  `triangle -rq25 object.1' reads object.1.node and object.1.ele, then\n");
+  printf(
+"  refines the triangulation to enforce a 25 degree minimum angle, and then\n"
+);
+  printf(
+"  writes the refined triangulation to object.2.node and object.2.ele.\n");
+  printf("\n");
+  printf(
+"  `triangle -rpaa6.2 z.3' reads z.3.node, z.3.ele, z.3.poly, and z.3.area.\n"
+);
+  printf(
+"  After reconstructing the mesh and its subsegments, Triangle refines the\n");
+  printf(
+"  mesh so that no triangle has area greater than 6.2, and furthermore the\n");
+  printf(
+"  triangles satisfy the maximum area constraints in z.3.area.  No angle\n");
+  printf(
+"  bound is imposed at all.  The output is written to z.4.node, z.4.ele, and\n"
+);
+  printf("  z.4.poly.\n\n");
+  printf(
+"  The sequence `triangle -qa1 x', `triangle -rqa.3 x.1', `triangle -rqa.1\n");
+  printf(
+"  x.2' creates a sequence of successively finer meshes x.1, x.2, and x.3,\n");
+  printf("  suitable for multigrid.\n\n");
+  printf("Convex Hulls and Mesh Boundaries:\n\n");
+  printf(
+"  If the input is a vertex set (not a PSLG), Triangle produces its convex\n");
+  printf(
+"  hull as a by-product in the output .poly file if you use the -c switch.\n");
+  printf(
+"  There are faster algorithms for finding a two-dimensional convex hull\n");
+  printf("  than triangulation, of course, but this one comes for free.\n\n");
+  printf(
+"  If the input is an unconstrained mesh (you are using the -r switch but\n");
+  printf(
+"  not the -p switch), Triangle produces a list of its boundary edges\n");
+  printf(
+"  (including hole boundaries) as a by-product when you use the -c switch.\n");
+  printf(
+"  If you also use the -p switch, the output .poly file contains all the\n");
+  printf("  segments from the input .poly file as well.\n\n");
+  printf("Voronoi Diagrams:\n\n");
+  printf(
+"  The -v switch produces a Voronoi diagram, in files suffixed .v.node and\n");
+  printf(
+"  .v.edge.  For example, `triangle -v points' reads points.node, produces\n");
+  printf(
+"  its Delaunay triangulation in points.1.node and points.1.ele, and\n");
+  printf(
+"  produces its Voronoi diagram in points.1.v.node and points.1.v.edge.  The\n"
+);
+  printf(
+"  .v.node file contains a list of all Voronoi vertices, and the .v.edge\n");
+  printf(
+"  file contains a list of all Voronoi edges, some of which may be infinite\n"
+);
+  printf(
+"  rays.  (The choice of filenames makes it easy to run the set of Voronoi\n");
+  printf("  vertices through Triangle, if so desired.)\n\n");
+  printf(
+"  This implementation does not use exact arithmetic to compute the Voronoi\n"
+);
+  printf(
+"  vertices, and does not check whether neighboring vertices are identical.\n"
+);
+  printf(
+"  Be forewarned that if the Delaunay triangulation is degenerate or\n");
+  printf(
+"  near-degenerate, the Voronoi diagram may have duplicate vertices or\n");
+  printf("  crossing edges.\n\n");
+  printf(
+"  The result is a valid Voronoi diagram only if Triangle's output is a true\n"
+);
+  printf(
+"  Delaunay triangulation.  The Voronoi output is usually meaningless (and\n");
+  printf(
+"  may contain crossing edges and other pathology) if the output is a CDT or\n"
+);
+  printf(
+"  CCDT, or if it has holes or concavities.  If the triangulated domain is\n");
+  printf(
+"  convex and has no holes, you can use -D switch to force Triangle to\n");
+  printf(
+"  construct a conforming Delaunay triangulation instead of a CCDT, so the\n");
+  printf("  Voronoi diagram will be valid.\n\n");
+  printf("Mesh Topology:\n\n");
+  printf(
+"  You may wish to know which triangles are adjacent to a certain Delaunay\n");
+  printf(
+"  edge in an .edge file, which Voronoi cells are adjacent to a certain\n");
+  printf(
+"  Voronoi edge in a .v.edge file, or which Voronoi cells are adjacent to\n");
+  printf(
+"  each other.  All of this information can be found by cross-referencing\n");
+  printf(
+"  output files with the recollection that the Delaunay triangulation and\n");
+  printf("  the Voronoi diagram are planar duals.\n\n");
+  printf(
+"  Specifically, edge i of an .edge file is the dual of Voronoi edge i of\n");
+  printf(
+"  the corresponding .v.edge file, and is rotated 90 degrees counterclock-\n");
+  printf(
+"  wise from the Voronoi edge.  Triangle j of an .ele file is the dual of\n");
+  printf(
+"  vertex j of the corresponding .v.node file.  Voronoi cell k is the dual\n");
+  printf("  of vertex k of the corresponding .node file.\n\n");
+  printf(
+"  Hence, to find the triangles adjacent to a Delaunay edge, look at the\n");
+  printf(
+"  vertices of the corresponding Voronoi edge.  If the endpoints of a\n");
+  printf(
+"  Voronoi edge are Voronoi vertices 2 and 6 respectively, then triangles 2\n"
+);
+  printf(
+"  and 6 adjoin the left and right sides of the corresponding Delaunay edge,\n"
+);
+  printf(
+"  respectively.  To find the Voronoi cells adjacent to a Voronoi edge, look\n"
+);
+  printf(
+"  at the endpoints of the corresponding Delaunay edge.  If the endpoints of\n"
+);
+  printf(
+"  a Delaunay edge are input vertices 7 and 12, then Voronoi cells 7 and 12\n"
+);
+  printf(
+"  adjoin the right and left sides of the corresponding Voronoi edge,\n");
+  printf(
+"  respectively.  To find which Voronoi cells are adjacent to each other,\n");
+  printf("  just read the list of Delaunay edges.\n\n");
+  printf(
+"  Triangle does not write a list of the edges adjoining each Voronoi cell,\n"
+);
+  printf(
+"  but you can reconstructed it straightforwardly.  For instance, to find\n");
+  printf(
+"  all the edges of Voronoi cell 1, search the output .edge file for every\n");
+  printf(
+"  edge that has input vertex 1 as an endpoint.  The corresponding dual\n");
+  printf(
+"  edges in the output .v.edge file form the boundary of Voronoi cell 1.\n");
+  printf("\n");
+  printf(
+"  For each Voronoi vertex, the .neigh file gives a list of the three\n");
+  printf(
+"  Voronoi vertices attached to it.  You might find this more convenient\n");
+  printf("  than the .v.edge file.\n\n");
+  printf("Quadratic Elements:\n\n");
+  printf(
+"  Triangle generates meshes with subparametric quadratic elements if the\n");
+  printf(
+"  -o2 switch is specified.  Quadratic elements have six nodes per element,\n"
+);
+  printf(
+"  rather than three.  `Subparametric' means that the edges of the triangles\n"
+);
+  printf(
+"  are always straight, so that subparametric quadratic elements are\n");
+  printf(
+"  geometrically identical to linear elements, even though they can be used\n"
+);
+  printf(
+"  with quadratic interpolating functions.  The three extra nodes of an\n");
+  printf(
+"  element fall at the midpoints of the three edges, with the fourth, fifth,\n"
+);
+  printf(
+"  and sixth nodes appearing opposite the first, second, and third corners\n");
+  printf("  respectively.\n\n");
+  printf("Domains with Small Angles:\n\n");
+  printf(
+"  If two input segments adjoin each other at a small angle, clearly the -q\n"
+);
+  printf(
+"  switch cannot remove the small angle.  Moreover, Triangle may have no\n");
+  printf(
+"  choice but to generate additional triangles whose smallest angles are\n");
+  printf(
+"  smaller than the specified bound.  However, these triangles only appear\n");
+  printf(
+"  between input segments separated by small angles.  Moreover, if you\n");
+  printf(
+"  request a minimum angle of theta degrees, Triangle will generally produce\n"
+);
+  printf(
+"  no angle larger than 180 - 2 theta, even if it is forced to compromise on\n"
+);
+  printf("  the minimum angle.\n\n");
+  printf("Statistics:\n\n");
+  printf(
+"  After generating a mesh, Triangle prints a count of entities in the\n");
+  printf(
+"  output mesh, including the number of vertices, triangles, edges, exterior\n"
+);
+  printf(
+"  boundary edges (i.e. subsegments on the boundary of the triangulation,\n");
+  printf(
+"  including hole boundaries), interior boundary edges (i.e. subsegments of\n"
+);
+  printf(
+"  input segments not on the boundary), and total subsegments.  If you've\n");
+  printf(
+"  forgotten the statistics for an existing mesh, run Triangle on that mesh\n"
+);
+  printf(
+"  with the -rNEP switches to read the mesh and print the statistics without\n"
+);
+  printf(
+"  writing any files.  Use -rpNEP if you've got a .poly file for the mesh.\n");
+  printf("\n");
+  printf(
+"  The -V switch produces extended statistics, including a rough estimate\n");
+  printf(
+"  of memory use, the number of calls to geometric predicates, and\n");
+  printf(
+"  histograms of the angles and the aspect ratios of the triangles in the\n");
+  printf("  mesh.\n\n");
+  printf("Exact Arithmetic:\n\n");
+  printf(
+"  Triangle uses adaptive exact arithmetic to perform what computational\n");
+  printf(
+"  geometers call the `orientation' and `incircle' tests.  If the floating-\n"
+);
+  printf(
+"  point arithmetic of your machine conforms to the IEEE 754 standard (as\n");
+  printf(
+"  most workstations do), and does not use extended precision internal\n");
+  printf(
+"  floating-point registers, then your output is guaranteed to be an\n");
+  printf(
+"  absolutely true Delaunay or constrained Delaunay triangulation, roundoff\n"
+);
+  printf(
+"  error notwithstanding.  The word `adaptive' implies that these arithmetic\n"
+);
+  printf(
+"  routines compute the result only to the precision necessary to guarantee\n"
+);
+  printf(
+"  correctness, so they are usually nearly as fast as their approximate\n");
+  printf("  counterparts.\n\n");
+  printf(
+"  May CPUs, including Intel x86 processors, have extended precision\n");
+  printf(
+"  floating-point registers.  These must be reconfigured so their precision\n"
+);
+  printf(
+"  is reduced to memory precision.  Triangle does this if it is compiled\n");
+  printf("  correctly.  See the makefile for details.\n\n");
+  printf(
+"  The exact tests can be disabled with the -X switch.  On most inputs, this\n"
+);
+  printf(
+"  switch reduces the computation time by about eight percent--it's not\n");
+  printf(
+"  worth the risk.  There are rare difficult inputs (having many collinear\n");
+  printf(
+"  and cocircular vertices), however, for which the difference in speed\n");
+  printf(
+"  could be a factor of two.  Be forewarned that these are precisely the\n");
+  printf(
+"  inputs most likely to cause errors if you use the -X switch.  Hence, the\n"
+);
+  printf("  -X switch is not recommended.\n\n");
+  printf(
+"  Unfortunately, the exact tests don't solve every numerical problem.\n");
+  printf(
+"  Exact arithmetic is not used to compute the positions of new vertices,\n");
+  printf(
+"  because the bit complexity of vertex coordinates would grow without\n");
+  printf(
+"  bound.  Hence, segment intersections aren't computed exactly; in very\n");
+  printf(
+"  unusual cases, roundoff error in computing an intersection point might\n");
+  printf(
+"  actually lead to an inverted triangle and an invalid triangulation.\n");
+  printf(
+"  (This is one reason to specify your own intersection points in your .poly\n"
+);
+  printf(
+"  files.)  Similarly, exact arithmetic is not used to compute the vertices\n"
+);
+  printf("  of the Voronoi diagram.\n\n");
+  printf(
+"  Another pair of problems not solved by the exact arithmetic routines is\n");
+  printf(
+"  underflow and overflow.  If Triangle is compiled for double precision\n");
+  printf(
+"  arithmetic, I believe that Triangle's geometric predicates work correctly\n"
+);
+  printf(
+"  if the exponent of every input coordinate falls in the range [-148, 201].\n"
+);
+  printf(
+"  Underflow can silently prevent the orientation and incircle tests from\n");
+  printf(
+"  being performed exactly, while overflow typically causes a floating\n");
+  printf("  exception.\n\n");
+  printf("Calling Triangle from Another Program:\n\n");
+  printf("  Read the file triangle.h for details.\n\n");
+  printf("Troubleshooting:\n\n");
+  printf("  Please read this section before mailing me bugs.\n\n");
+  printf("  `My output mesh has no triangles!'\n\n");
+  printf(
+"    If you're using a PSLG, you've probably failed to specify a proper set\n"
+);
+  printf(
+"    of bounding segments, or forgotten to use the -c switch.  Or you may\n");
+  printf(
+"    have placed a hole badly, thereby eating all your triangles.  To test\n");
+  printf("    these possibilities, try again with the -c and -O switches.\n");
+  printf(
+"    Alternatively, all your input vertices may be collinear, in which case\n"
+);
+  printf("    you can hardly expect to triangulate them.\n\n");
+  printf("  `Triangle doesn't terminate, or just crashes.'\n\n");
+  printf(
+"    Bad things can happen when triangles get so small that the distance\n");
+  printf(
+"    between their vertices isn't much larger than the precision of your\n");
+  printf(
+"    machine's arithmetic.  If you've compiled Triangle for single-precision\n"
+);
+  printf(
+"    arithmetic, you might do better by recompiling it for double-precision.\n"
+);
+  printf(
+"    Then again, you might just have to settle for more lenient constraints\n"
+);
+  printf(
+"    on the minimum angle and the maximum area than you had planned.\n");
+  printf("\n");
+  printf(
+"    You can minimize precision problems by ensuring that the origin lies\n");
+  printf(
+"    inside your vertex set, or even inside the densest part of your\n");
+  printf(
+"    mesh.  If you're triangulating an object whose x-coordinates all fall\n");
+  printf(
+"    between 6247133 and 6247134, you're not leaving much floating-point\n");
+  printf("    precision for Triangle to work with.\n\n");
+  printf(
+"    Precision problems can occur covertly if the input PSLG contains two\n");
+  printf(
+"    segments that meet (or intersect) at an extremely small angle, or if\n");
+  printf(
+"    such an angle is introduced by the -c switch.  If you don't realize\n");
+  printf(
+"    that a tiny angle is being formed, you might never discover why\n");
+  printf(
+"    Triangle is crashing.  To check for this possibility, use the -S switch\n"
+);
+  printf(
+"    (with an appropriate limit on the number of Steiner points, found by\n");
+  printf(
+"    trial-and-error) to stop Triangle early, and view the output .poly file\n"
+);
+  printf(
+"    with Show Me (described below).  Look carefully for regions where dense\n"
+);
+  printf(
+"    clusters of vertices are forming and for small angles between segments.\n"
+);
+  printf(
+"    Zoom in closely, as such segments might look like a single segment from\n"
+);
+  printf("    a distance.\n\n");
+  printf(
+"    If some of the input values are too large, Triangle may suffer a\n");
+  printf(
+"    floating exception due to overflow when attempting to perform an\n");
+  printf(
+"    orientation or incircle test.  (Read the section on exact arithmetic\n");
+  printf(
+"    above.)  Again, I recommend compiling Triangle for double (rather\n");
+  printf("    than single) precision arithmetic.\n\n");
+  printf(
+"    Unexpected problems can arise if you use quality meshing (-q, -a, or\n");
+  printf(
+"    -u) with an input that is not segment-bounded--that is, if your input\n");
+  printf(
+"    is a vertex set, or you're using the -c switch.  If the convex hull of\n"
+);
+  printf(
+"    your input vertices has collinear vertices on its boundary, an input\n");
+  printf(
+"    vertex that you think lies on the convex hull might actually lie just\n");
+  printf(
+"    inside the convex hull.  If so, the vertex and the nearby convex hull\n");
+  printf(
+"    edge form an extremely thin triangle.  When Triangle tries to refine\n");
+  printf(
+"    the mesh to enforce angle and area constraints, Triangle might generate\n"
+);
+  printf(
+"    extremely tiny triangles, or it might fail because of insufficient\n");
+  printf("    floating-point precision.\n\n");
+  printf(
+"  `The numbering of the output vertices doesn't match the input vertices.'\n"
+);
+  printf("\n");
+  printf(
+"    You may have had duplicate input vertices, or you may have eaten some\n");
+  printf(
+"    of your input vertices with a hole, or by placing them outside the area\n"
+);
+  printf(
+"    enclosed by segments.  In any case, you can solve the problem by not\n");
+  printf("    using the -j switch.\n\n");
+  printf(
+"  `Triangle executes without incident, but when I look at the resulting\n");
+  printf(
+"  mesh, it has overlapping triangles or other geometric inconsistencies.'\n");
+  printf("\n");
+  printf(
+"    If you select the -X switch, Triangle occasionally makes mistakes due\n");
+  printf(
+"    to floating-point roundoff error.  Although these errors are rare,\n");
+  printf(
+"    don't use the -X switch.  If you still have problems, please report the\n"
+);
+  printf("    bug.\n\n");
+  printf(
+"  `Triangle executes without incident, but when I look at the resulting\n");
+  printf("  Voronoi diagram, it has overlapping edges or other geometric\n");
+  printf("  inconsistencies.'\n");
+  printf("\n");
+  printf(
+"    If your input is a PSLG (-p), you can only expect a meaningful Voronoi\n"
+);
+  printf(
+"    diagram if the domain you are triangulating is convex and free of\n");
+  printf(
+"    holes, and you use the -D switch to construct a conforming Delaunay\n");
+  printf("    triangulation (instead of a CDT or CCDT).\n\n");
+  printf(
+"  Strange things can happen if you've taken liberties with your PSLG.  Do\n");
+  printf(
+"  you have a vertex lying in the middle of a segment?  Triangle sometimes\n");
+  printf(
+"  copes poorly with that sort of thing.  Do you want to lay out a collinear\n"
+);
+  printf(
+"  row of evenly spaced, segment-connected vertices?  Have you simply\n");
+  printf(
+"  defined one long segment connecting the leftmost vertex to the rightmost\n"
+);
+  printf(
+"  vertex, and a bunch of vertices lying along it?  This method occasionally\n"
+);
+  printf(
+"  works, especially with horizontal and vertical lines, but often it\n");
+  printf(
+"  doesn't, and you'll have to connect each adjacent pair of vertices with a\n"
+);
+  printf("  separate segment.  If you don't like it, tough.\n\n");
+  printf(
+"  Furthermore, if you have segments that intersect other than at their\n");
+  printf(
+"  endpoints, try not to let the intersections fall extremely close to PSLG\n"
+);
+  printf("  vertices or each other.\n\n");
+  printf(
+"  If you have problems refining a triangulation not produced by Triangle:\n");
+  printf(
+"  Are you sure the triangulation is geometrically valid?  Is it formatted\n");
+  printf(
+"  correctly for Triangle?  Are the triangles all listed so the first three\n"
+);
+  printf(
+"  vertices are their corners in counterclockwise order?  Are all of the\n");
+  printf(
+"  triangles constrained Delaunay?  Triangle's Delaunay refinement algorithm\n"
+);
+  printf("  assumes that it starts with a CDT.\n\n");
+  printf("Show Me:\n\n");
+  printf(
+"  Triangle comes with a separate program named `Show Me', whose primary\n");
+  printf(
+"  purpose is to draw meshes on your screen or in PostScript.  Its secondary\n"
+);
+  printf(
+"  purpose is to check the validity of your input files, and do so more\n");
+  printf(
+"  thoroughly than Triangle does.  Unlike Triangle, Show Me requires that\n");
+  printf(
+"  you have the X Windows system.  Sorry, Microsoft Windows users.\n");
+  printf("\n");
+  printf("Triangle on the Web:\n");
+  printf("\n");
+  printf("  To see an illustrated version of these instructions, check out\n");
+  printf("\n");
+  printf("    http://www.cs.cmu.edu/~quake/triangle.html\n");
+  printf("\n");
+  printf("A Brief Plea:\n");
+  printf("\n");
+  printf(
+"  If you use Triangle, and especially if you use it to accomplish real\n");
+  printf(
+"  work, I would like very much to hear from you.  A short letter or email\n");
+  printf(
+"  (to jrs at cs.berkeley.edu) describing how you use Triangle will mean a lot\n"
+);
+  printf(
+"  to me.  The more people I know are using this program, the more easily I\n"
+);
+  printf(
+"  can justify spending time on improvements, which in turn will benefit\n");
+  printf(
+"  you.  Also, I can put you on a list to receive email whenever a new\n");
+  printf("  version of Triangle is available.\n\n");
+  printf(
+"  If you use a mesh generated by Triangle in a publication, please include\n"
+);
+  printf(
+"  an acknowledgment as well.  And please spell Triangle with a capital `T'!\n"
+);
+  printf(
+"  If you want to include a citation, use `Jonathan Richard Shewchuk,\n");
+  printf(
+"  ``Triangle: Engineering a 2D Quality Mesh Generator and Delaunay\n");
+  printf(
+"  Triangulator,'' in Applied Computational Geometry:  Towards Geometric\n");
+  printf(
+"  Engineering (Ming C. Lin and Dinesh Manocha, editors), volume 1148 of\n");
+  printf(
+"  Lecture Notes in Computer Science, pages 203-222, Springer-Verlag,\n");
+  printf(
+"  Berlin, May 1996.  (From the First ACM Workshop on Applied Computational\n"
+);
+  printf("  Geometry.)'\n\n");
+  printf("Research credit:\n\n");
+  printf(
+"  Of course, I can take credit for only a fraction of the ideas that made\n");
+  printf(
+"  this mesh generator possible.  Triangle owes its existence to the efforts\n"
+);
+  printf(
+"  of many fine computational geometers and other researchers, including\n");
+  printf(
+"  Marshall Bern, L. Paul Chew, Kenneth L. Clarkson, Boris Delaunay, Rex A.\n"
+);
+  printf(
+"  Dwyer, David Eppstein, Steven Fortune, Leonidas J. Guibas, Donald E.\n");
+  printf(
+"  Knuth, Charles L. Lawson, Der-Tsai Lee, Gary L. Miller, Ernst P. Mucke,\n");
+  printf(
+"  Steven E. Pav, Douglas M. Priest, Jim Ruppert, Isaac Saias, Bruce J.\n");
+  printf(
+"  Schachter, Micha Sharir, Peter W. Shor, Daniel D. Sleator, Jorge Stolfi,\n"
+);
+  printf("  Robert E. Tarjan, Alper Ungor, Christopher J. Van Wyk, Noel J.\n");
+  printf(
+"  Walkington, and Binhai Zhu.  See the comments at the beginning of the\n");
+  printf("  source code for references.\n\n");
+  triexit(0);
+}
+
+#endif /* not TRILIBRARY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  internalerror()   Ask the user to send me the defective product.  Exit.  */
+/*                                                                           */
+/*****************************************************************************/
+
+void internalerror()
+{
+  printf("  Please report this bug to jrs at cs.berkeley.edu\n");
+  printf("  Include the message above, your input data set, and the exact\n");
+  printf("    command line you used to run Triangle.\n");
+  triexit(1);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  parsecommandline()   Read the command line, identify switches, and set   */
+/*                       up options and file names.                          */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void parsecommandline(int argc, char **argv, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void parsecommandline(argc, argv, b)
+int argc;
+char **argv;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+#ifdef TRILIBRARY
+#define STARTINDEX 0
+#else /* not TRILIBRARY */
+#define STARTINDEX 1
+  int increment;
+  int meshnumber;
+#endif /* not TRILIBRARY */
+#ifndef CDT_ONLY
+  int k;
+  char workstring[FILENAMESIZE];
+#endif
+  int i, j;
+
+  b->poly = b->refine = b->quality = 0;
+  b->vararea = b->fixedarea = b->usertest = 0;
+  b->regionattrib = b->convex = b->weighted = b->jettison = 0;
+  b->firstnumber = 1;
+  b->edgesout = b->voronoi = b->neighbors = b->geomview = 0;
+  b->nobound = b->nopolywritten = b->nonodewritten = b->noelewritten = 0;
+  b->noiterationnum = 0;
+  b->noholes = b->noexact = 0;
+  b->incremental = b->sweepline = 0;
+  b->dwyer = 1;
+  b->splitseg = 0;
+  b->docheck = 0;
+  b->nobisect = 0;
+  b->conformdel = 0;
+  b->steiner = -1;
+  b->order = 1;
+  b->minangle = 0.0;
+  b->maxarea = -1.0;
+  b->quiet = b->verbose = 0;
+#ifndef TRILIBRARY
+  b->innodefilename[0] = '\0';
+#endif /* not TRILIBRARY */
+
+  for (i = STARTINDEX; i < argc; i++) {
+#ifndef TRILIBRARY
+    if (argv[i][0] == '-') {
+#endif /* not TRILIBRARY */
+      for (j = STARTINDEX; argv[i][j] != '\0'; j++) {
+        if (argv[i][j] == 'p') {
+          b->poly = 1;
+	}
+#ifndef CDT_ONLY
+        if (argv[i][j] == 'r') {
+          b->refine = 1;
+	}
+        if (argv[i][j] == 'q') {
+          b->quality = 1;
+          if (((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) ||
+              (argv[i][j + 1] == '.')) {
+            k = 0;
+            while (((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) ||
+                   (argv[i][j + 1] == '.')) {
+              j++;
+              workstring[k] = argv[i][j];
+              k++;
+            }
+            workstring[k] = '\0';
+            b->minangle = (REAL) strtod(workstring, (char **) NULL);
+	  } else {
+            b->minangle = 20.0;
+	  }
+	}
+        if (argv[i][j] == 'a') {
+          b->quality = 1;
+          if (((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) ||
+              (argv[i][j + 1] == '.')) {
+            b->fixedarea = 1;
+            k = 0;
+            while (((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) ||
+                   (argv[i][j + 1] == '.')) {
+              j++;
+              workstring[k] = argv[i][j];
+              k++;
+            }
+            workstring[k] = '\0';
+            b->maxarea = (REAL) strtod(workstring, (char **) NULL);
+            if (b->maxarea <= 0.0) {
+              printf("Error:  Maximum area must be greater than zero.\n");
+              triexit(1);
+	    }
+	  } else {
+            b->vararea = 1;
+	  }
+	}
+        if (argv[i][j] == 'u') {
+          b->quality = 1;
+          b->usertest = 1;
+        }
+#endif /* not CDT_ONLY */
+        if (argv[i][j] == 'A') {
+          b->regionattrib = 1;
+        }
+        if (argv[i][j] == 'c') {
+          b->convex = 1;
+        }
+        if (argv[i][j] == 'w') {
+          b->weighted = 1;
+        }
+        if (argv[i][j] == 'W') {
+          b->weighted = 2;
+        }
+        if (argv[i][j] == 'j') {
+          b->jettison = 1;
+        }
+        if (argv[i][j] == 'z') {
+          b->firstnumber = 0;
+        }
+        if (argv[i][j] == 'e') {
+          b->edgesout = 1;
+	}
+        if (argv[i][j] == 'v') {
+          b->voronoi = 1;
+	}
+        if (argv[i][j] == 'n') {
+          b->neighbors = 1;
+	}
+        if (argv[i][j] == 'g') {
+          b->geomview = 1;
+	}
+        if (argv[i][j] == 'B') {
+          b->nobound = 1;
+	}
+        if (argv[i][j] == 'P') {
+          b->nopolywritten = 1;
+	}
+        if (argv[i][j] == 'N') {
+          b->nonodewritten = 1;
+	}
+        if (argv[i][j] == 'E') {
+          b->noelewritten = 1;
+	}
+#ifndef TRILIBRARY
+        if (argv[i][j] == 'I') {
+          b->noiterationnum = 1;
+	}
+#endif /* not TRILIBRARY */
+        if (argv[i][j] == 'O') {
+          b->noholes = 1;
+	}
+        if (argv[i][j] == 'X') {
+          b->noexact = 1;
+	}
+        if (argv[i][j] == 'o') {
+          if (argv[i][j + 1] == '2') {
+            j++;
+            b->order = 2;
+          }
+	}
+#ifndef CDT_ONLY
+        if (argv[i][j] == 'Y') {
+          b->nobisect++;
+	}
+        if (argv[i][j] == 'S') {
+          b->steiner = 0;
+          while ((argv[i][j + 1] >= '0') && (argv[i][j + 1] <= '9')) {
+            j++;
+            b->steiner = b->steiner * 10 + (int) (argv[i][j] - '0');
+          }
+        }
+#endif /* not CDT_ONLY */
+#ifndef REDUCED
+        if (argv[i][j] == 'i') {
+          b->incremental = 1;
+        }
+        if (argv[i][j] == 'F') {
+          b->sweepline = 1;
+        }
+#endif /* not REDUCED */
+        if (argv[i][j] == 'l') {
+          b->dwyer = 0;
+        }
+#ifndef REDUCED
+#ifndef CDT_ONLY
+        if (argv[i][j] == 's') {
+          b->splitseg = 1;
+        }
+        if ((argv[i][j] == 'D') || (argv[i][j] == 'L')) {
+          b->quality = 1;
+          b->conformdel = 1;
+        }
+#endif /* not CDT_ONLY */
+        if (argv[i][j] == 'C') {
+          b->docheck = 1;
+        }
+#endif /* not REDUCED */
+        if (argv[i][j] == 'Q') {
+          b->quiet = 1;
+        }
+        if (argv[i][j] == 'V') {
+          b->verbose++;
+        }
+#ifndef TRILIBRARY
+        if ((argv[i][j] == 'h') || (argv[i][j] == 'H') ||
+            (argv[i][j] == '?')) {
+          info();
+	}
+#endif /* not TRILIBRARY */
+      }
+#ifndef TRILIBRARY
+    } else {
+      strncpy(b->innodefilename, argv[i], FILENAMESIZE - 1);
+      b->innodefilename[FILENAMESIZE - 1] = '\0';
+    }
+#endif /* not TRILIBRARY */
+  }
+#ifndef TRILIBRARY
+  if (b->innodefilename[0] == '\0') {
+    syntax();
+  }
+  if (!strcmp(&b->innodefilename[strlen(b->innodefilename) - 5], ".node")) {
+    b->innodefilename[strlen(b->innodefilename) - 5] = '\0';
+  }
+  if (!strcmp(&b->innodefilename[strlen(b->innodefilename) - 5], ".poly")) {
+    b->innodefilename[strlen(b->innodefilename) - 5] = '\0';
+    b->poly = 1;
+  }
+#ifndef CDT_ONLY
+  if (!strcmp(&b->innodefilename[strlen(b->innodefilename) - 4], ".ele")) {
+    b->innodefilename[strlen(b->innodefilename) - 4] = '\0';
+    b->refine = 1;
+  }
+  if (!strcmp(&b->innodefilename[strlen(b->innodefilename) - 5], ".area")) {
+    b->innodefilename[strlen(b->innodefilename) - 5] = '\0';
+    b->refine = 1;
+    b->quality = 1;
+    b->vararea = 1;
+  }
+#endif /* not CDT_ONLY */
+#endif /* not TRILIBRARY */
+  b->usesegments = b->poly || b->refine || b->quality || b->convex;
+  b->goodangle = cos(b->minangle * PI / 180.0);
+  if (b->goodangle == 1.0) {
+    b->offconstant = 0.0;
+  } else {
+    b->offconstant = 0.475 * sqrt((1.0 + b->goodangle) / (1.0 - b->goodangle));
+  }
+  b->goodangle *= b->goodangle;
+  if (b->refine && b->noiterationnum) {
+    printf(
+      "Error:  You cannot use the -I switch when refining a triangulation.\n");
+    triexit(1);
+  }
+  /* Be careful not to allocate space for element area constraints that */
+  /*   will never be assigned any value (other than the default -1.0).  */
+  if (!b->refine && !b->poly) {
+    b->vararea = 0;
+  }
+  /* Be careful not to add an extra attribute to each element unless the */
+  /*   input supports it (PSLG in, but not refining a preexisting mesh). */
+  if (b->refine || !b->poly) {
+    b->regionattrib = 0;
+  }
+  /* Regular/weighted triangulations are incompatible with PSLGs */
+  /*   and meshing.                                              */
+  if (b->weighted && (b->poly || b->quality)) {
+    b->weighted = 0;
+    if (!b->quiet) {
+      printf("Warning:  weighted triangulations (-w, -W) are incompatible\n");
+      printf("  with PSLGs (-p) and meshing (-q, -a, -u).  Weights ignored.\n"
+             );
+    }
+  }
+  if (b->jettison && b->nonodewritten && !b->quiet) {
+    printf("Warning:  -j and -N switches are somewhat incompatible.\n");
+    printf("  If any vertices are jettisoned, you will need the output\n");
+    printf("  .node file to reconstruct the new node indices.");
+  }
+
+#ifndef TRILIBRARY
+  strcpy(b->inpolyfilename, b->innodefilename);
+  strcpy(b->inelefilename, b->innodefilename);
+  strcpy(b->areafilename, b->innodefilename);
+  increment = 0;
+  strcpy(workstring, b->innodefilename);
+  j = 1;
+  while (workstring[j] != '\0') {
+    if ((workstring[j] == '.') && (workstring[j + 1] != '\0')) {
+      increment = j + 1;
+    }
+    j++;
+  }
+  meshnumber = 0;
+  if (increment > 0) {
+    j = increment;
+    do {
+      if ((workstring[j] >= '0') && (workstring[j] <= '9')) {
+        meshnumber = meshnumber * 10 + (int) (workstring[j] - '0');
+      } else {
+        increment = 0;
+      }
+      j++;
+    } while (workstring[j] != '\0');
+  }
+  if (b->noiterationnum) {
+    strcpy(b->outnodefilename, b->innodefilename);
+    strcpy(b->outelefilename, b->innodefilename);
+    strcpy(b->edgefilename, b->innodefilename);
+    strcpy(b->vnodefilename, b->innodefilename);
+    strcpy(b->vedgefilename, b->innodefilename);
+    strcpy(b->neighborfilename, b->innodefilename);
+    strcpy(b->offfilename, b->innodefilename);
+    strcat(b->outnodefilename, ".node");
+    strcat(b->outelefilename, ".ele");
+    strcat(b->edgefilename, ".edge");
+    strcat(b->vnodefilename, ".v.node");
+    strcat(b->vedgefilename, ".v.edge");
+    strcat(b->neighborfilename, ".neigh");
+    strcat(b->offfilename, ".off");
+  } else if (increment == 0) {
+    strcpy(b->outnodefilename, b->innodefilename);
+    strcpy(b->outpolyfilename, b->innodefilename);
+    strcpy(b->outelefilename, b->innodefilename);
+    strcpy(b->edgefilename, b->innodefilename);
+    strcpy(b->vnodefilename, b->innodefilename);
+    strcpy(b->vedgefilename, b->innodefilename);
+    strcpy(b->neighborfilename, b->innodefilename);
+    strcpy(b->offfilename, b->innodefilename);
+    strcat(b->outnodefilename, ".1.node");
+    strcat(b->outpolyfilename, ".1.poly");
+    strcat(b->outelefilename, ".1.ele");
+    strcat(b->edgefilename, ".1.edge");
+    strcat(b->vnodefilename, ".1.v.node");
+    strcat(b->vedgefilename, ".1.v.edge");
+    strcat(b->neighborfilename, ".1.neigh");
+    strcat(b->offfilename, ".1.off");
+  } else {
+    workstring[increment] = '%';
+    workstring[increment + 1] = 'd';
+    workstring[increment + 2] = '\0';
+    sprintf(b->outnodefilename, workstring, meshnumber + 1);
+    strcpy(b->outpolyfilename, b->outnodefilename);
+    strcpy(b->outelefilename, b->outnodefilename);
+    strcpy(b->edgefilename, b->outnodefilename);
+    strcpy(b->vnodefilename, b->outnodefilename);
+    strcpy(b->vedgefilename, b->outnodefilename);
+    strcpy(b->neighborfilename, b->outnodefilename);
+    strcpy(b->offfilename, b->outnodefilename);
+    strcat(b->outnodefilename, ".node");
+    strcat(b->outpolyfilename, ".poly");
+    strcat(b->outelefilename, ".ele");
+    strcat(b->edgefilename, ".edge");
+    strcat(b->vnodefilename, ".v.node");
+    strcat(b->vedgefilename, ".v.edge");
+    strcat(b->neighborfilename, ".neigh");
+    strcat(b->offfilename, ".off");
+  }
+  strcat(b->innodefilename, ".node");
+  strcat(b->inpolyfilename, ".poly");
+  strcat(b->inelefilename, ".ele");
+  strcat(b->areafilename, ".area");
+#endif /* not TRILIBRARY */
+}
+
+/**                                                                         **/
+/**                                                                         **/
+/********* User interaction routines begin here                      *********/
+
+/********* Debugging routines begin here                             *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  printtriangle()   Print out the details of an oriented triangle.         */
+/*                                                                           */
+/*  I originally wrote this procedure to simplify debugging; it can be       */
+/*  called directly from the debugger, and presents information about an     */
+/*  oriented triangle in digestible form.  It's also used when the           */
+/*  highest level of verbosity (`-VVV') is specified.                        */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void printtriangle(struct mesh *m, struct behavior *b, struct otri *t)
+#else /* not ANSI_DECLARATORS */
+void printtriangle(m, b, t)
+struct mesh *m;
+struct behavior *b;
+struct otri *t;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri printtri;
+  struct osub printsh;
+  vertex printvertex;
+
+  printf("triangle x%lx with orientation %d:\n", (unsigned long) t->tri,
+         t->orient);
+  decode(t->tri[0], printtri);
+  if (printtri.tri == m->dummytri) {
+    printf("    [0] = Outer space\n");
+  } else {
+    printf("    [0] = x%lx  %d\n", (unsigned long) printtri.tri,
+           printtri.orient);
+  }
+  decode(t->tri[1], printtri);
+  if (printtri.tri == m->dummytri) {
+    printf("    [1] = Outer space\n");
+  } else {
+    printf("    [1] = x%lx  %d\n", (unsigned long) printtri.tri,
+           printtri.orient);
+  }
+  decode(t->tri[2], printtri);
+  if (printtri.tri == m->dummytri) {
+    printf("    [2] = Outer space\n");
+  } else {
+    printf("    [2] = x%lx  %d\n", (unsigned long) printtri.tri,
+           printtri.orient);
+  }
+
+  org(*t, printvertex);
+  if (printvertex == (vertex) NULL)
+    printf("    Origin[%d] = NULL\n", (t->orient + 1) % 3 + 3);
+  else
+    printf("    Origin[%d] = x%lx  (%.12g, %.12g)\n",
+           (t->orient + 1) % 3 + 3, (unsigned long) printvertex,
+           printvertex[0], printvertex[1]);
+  dest(*t, printvertex);
+  if (printvertex == (vertex) NULL)
+    printf("    Dest  [%d] = NULL\n", (t->orient + 2) % 3 + 3);
+  else
+    printf("    Dest  [%d] = x%lx  (%.12g, %.12g)\n",
+           (t->orient + 2) % 3 + 3, (unsigned long) printvertex,
+           printvertex[0], printvertex[1]);
+  apex(*t, printvertex);
+  if (printvertex == (vertex) NULL)
+    printf("    Apex  [%d] = NULL\n", t->orient + 3);
+  else
+    printf("    Apex  [%d] = x%lx  (%.12g, %.12g)\n",
+           t->orient + 3, (unsigned long) printvertex,
+           printvertex[0], printvertex[1]);
+
+  if (b->usesegments) {
+    sdecode(t->tri[6], printsh);
+    if (printsh.ss != m->dummysub) {
+      printf("    [6] = x%lx  %d\n", (unsigned long) printsh.ss,
+             printsh.ssorient);
+    }
+    sdecode(t->tri[7], printsh);
+    if (printsh.ss != m->dummysub) {
+      printf("    [7] = x%lx  %d\n", (unsigned long) printsh.ss,
+             printsh.ssorient);
+    }
+    sdecode(t->tri[8], printsh);
+    if (printsh.ss != m->dummysub) {
+      printf("    [8] = x%lx  %d\n", (unsigned long) printsh.ss,
+             printsh.ssorient);
+    }
+  }
+
+  if (b->vararea) {
+    printf("    Area constraint:  %.4g\n", areabound(*t));
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  printsubseg()   Print out the details of an oriented subsegment.         */
+/*                                                                           */
+/*  I originally wrote this procedure to simplify debugging; it can be       */
+/*  called directly from the debugger, and presents information about an     */
+/*  oriented subsegment in digestible form.  It's also used when the highest */
+/*  level of verbosity (`-VVV') is specified.                                */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void printsubseg(struct mesh *m, struct behavior *b, struct osub *s)
+#else /* not ANSI_DECLARATORS */
+void printsubseg(m, b, s)
+struct mesh *m;
+struct behavior *b;
+struct osub *s;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct osub printsh;
+  struct otri printtri;
+  vertex printvertex;
+
+  printf("subsegment x%lx with orientation %d and mark %d:\n",
+         (unsigned long) s->ss, s->ssorient, mark(*s));
+  sdecode(s->ss[0], printsh);
+  if (printsh.ss == m->dummysub) {
+    printf("    [0] = No subsegment\n");
+  } else {
+    printf("    [0] = x%lx  %d\n", (unsigned long) printsh.ss,
+           printsh.ssorient);
+  }
+  sdecode(s->ss[1], printsh);
+  if (printsh.ss == m->dummysub) {
+    printf("    [1] = No subsegment\n");
+  } else {
+    printf("    [1] = x%lx  %d\n", (unsigned long) printsh.ss,
+           printsh.ssorient);
+  }
+
+  sorg(*s, printvertex);
+  if (printvertex == (vertex) NULL)
+    printf("    Origin[%d] = NULL\n", 2 + s->ssorient);
+  else
+    printf("    Origin[%d] = x%lx  (%.12g, %.12g)\n",
+           2 + s->ssorient, (unsigned long) printvertex,
+           printvertex[0], printvertex[1]);
+  sdest(*s, printvertex);
+  if (printvertex == (vertex) NULL)
+    printf("    Dest  [%d] = NULL\n", 3 - s->ssorient);
+  else
+    printf("    Dest  [%d] = x%lx  (%.12g, %.12g)\n",
+           3 - s->ssorient, (unsigned long) printvertex,
+           printvertex[0], printvertex[1]);
+
+  decode(s->ss[6], printtri);
+  if (printtri.tri == m->dummytri) {
+    printf("    [6] = Outer space\n");
+  } else {
+    printf("    [6] = x%lx  %d\n", (unsigned long) printtri.tri,
+           printtri.orient);
+  }
+  decode(s->ss[7], printtri);
+  if (printtri.tri == m->dummytri) {
+    printf("    [7] = Outer space\n");
+  } else {
+    printf("    [7] = x%lx  %d\n", (unsigned long) printtri.tri,
+           printtri.orient);
+  }
+
+  segorg(*s, printvertex);
+  if (printvertex == (vertex) NULL)
+    printf("    Segment origin[%d] = NULL\n", 4 + s->ssorient);
+  else
+    printf("    Segment origin[%d] = x%lx  (%.12g, %.12g)\n",
+           4 + s->ssorient, (unsigned long) printvertex,
+           printvertex[0], printvertex[1]);
+  segdest(*s, printvertex);
+  if (printvertex == (vertex) NULL)
+    printf("    Segment dest  [%d] = NULL\n", 5 - s->ssorient);
+  else
+    printf("    Segment dest  [%d] = x%lx  (%.12g, %.12g)\n",
+           5 - s->ssorient, (unsigned long) printvertex,
+           printvertex[0], printvertex[1]);
+}
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Debugging routines end here                               *********/
+
+/********* Memory management routines begin here                     *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  poolzero()   Set all of a pool's fields to zero.                         */
+/*                                                                           */
+/*  This procedure should never be called on a pool that has any memory      */
+/*  allocated to it, as that memory would leak.                              */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void poolzero(struct memorypool *pool)
+#else /* not ANSI_DECLARATORS */
+void poolzero(pool)
+struct memorypool *pool;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  pool->firstblock = (VOID **) NULL;
+  pool->nowblock = (VOID **) NULL;
+  pool->nextitem = (VOID *) NULL;
+  pool->deaditemstack = (VOID *) NULL;
+  pool->pathblock = (VOID **) NULL;
+  pool->pathitem = (VOID *) NULL;
+  pool->alignbytes = 0;
+  pool->itembytes = 0;
+  pool->itemsperblock = 0;
+  pool->itemsfirstblock = 0;
+  pool->items = 0;
+  pool->maxitems = 0;
+  pool->unallocateditems = 0;
+  pool->pathitemsleft = 0;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  poolrestart()   Deallocate all items in a pool.                          */
+/*                                                                           */
+/*  The pool is returned to its starting state, except that no memory is     */
+/*  freed to the operating system.  Rather, the previously allocated blocks  */
+/*  are ready to be reused.                                                  */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void poolrestart(struct memorypool *pool)
+#else /* not ANSI_DECLARATORS */
+void poolrestart(pool)
+struct memorypool *pool;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  unsigned long alignptr;
+
+  pool->items = 0;
+  pool->maxitems = 0;
+
+  /* Set the currently active block. */
+  pool->nowblock = pool->firstblock;
+  /* Find the first item in the pool.  Increment by the size of (VOID *). */
+  alignptr = (unsigned long) (pool->nowblock + 1);
+  /* Align the item on an `alignbytes'-byte boundary. */
+  pool->nextitem = (VOID *)
+    (alignptr + (unsigned long) pool->alignbytes -
+     (alignptr % (unsigned long) pool->alignbytes));
+  /* There are lots of unallocated items left in this block. */
+  pool->unallocateditems = pool->itemsfirstblock;
+  /* The stack of deallocated items is empty. */
+  pool->deaditemstack = (VOID *) NULL;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  poolinit()   Initialize a pool of memory for allocation of items.        */
+/*                                                                           */
+/*  This routine initializes the machinery for allocating items.  A `pool'   */
+/*  is created whose records have size at least `bytecount'.  Items will be  */
+/*  allocated in `itemcount'-item blocks.  Each item is assumed to be a      */
+/*  collection of words, and either pointers or floating-point values are    */
+/*  assumed to be the "primary" word type.  (The "primary" word type is used */
+/*  to determine alignment of items.)  If `alignment' isn't zero, all items  */
+/*  will be `alignment'-byte aligned in memory.  `alignment' must be either  */
+/*  a multiple or a factor of the primary word size; powers of two are safe. */
+/*  `alignment' is normally used to create a few unused bits at the bottom   */
+/*  of each item's pointer, in which information may be stored.              */
+/*                                                                           */
+/*  Don't change this routine unless you understand it.                      */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void poolinit(struct memorypool *pool, int bytecount, int itemcount,
+              int firstitemcount, int alignment)
+#else /* not ANSI_DECLARATORS */
+void poolinit(pool, bytecount, itemcount, firstitemcount, alignment)
+struct memorypool *pool;
+int bytecount;
+int itemcount;
+int firstitemcount;
+int alignment;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  /* Find the proper alignment, which must be at least as large as:   */
+  /*   - The parameter `alignment'.                                   */
+  /*   - sizeof(VOID *), so the stack of dead items can be maintained */
+  /*       without unaligned accesses.                                */
+  if (alignment > sizeof(VOID *)) {
+    pool->alignbytes = alignment;
+  } else {
+    pool->alignbytes = sizeof(VOID *);
+  }
+  pool->itembytes = ((bytecount - 1) / pool->alignbytes + 1) *
+                    pool->alignbytes;
+  pool->itemsperblock = itemcount;
+  if (firstitemcount == 0) {
+    pool->itemsfirstblock = itemcount;
+  } else {
+    pool->itemsfirstblock = firstitemcount;
+  }
+
+  /* Allocate a block of items.  Space for `itemsfirstblock' items and one  */
+  /*   pointer (to point to the next block) are allocated, as well as space */
+  /*   to ensure alignment of the items.                                    */
+  pool->firstblock = (VOID **)
+    trimalloc(pool->itemsfirstblock * pool->itembytes + (int) sizeof(VOID *) +
+              pool->alignbytes);
+  /* Set the next block pointer to NULL. */
+  *(pool->firstblock) = (VOID *) NULL;
+  poolrestart(pool);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  pooldeinit()   Free to the operating system all memory taken by a pool.  */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void pooldeinit(struct memorypool *pool)
+#else /* not ANSI_DECLARATORS */
+void pooldeinit(pool)
+struct memorypool *pool;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  while (pool->firstblock != (VOID **) NULL) {
+    pool->nowblock = (VOID **) *(pool->firstblock);
+    trifree((VOID *) pool->firstblock);
+    pool->firstblock = pool->nowblock;
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  poolalloc()   Allocate space for an item.                                */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+VOID *poolalloc(struct memorypool *pool)
+#else /* not ANSI_DECLARATORS */
+VOID *poolalloc(pool)
+struct memorypool *pool;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  VOID *newitem;
+  VOID **newblock;
+  unsigned long alignptr;
+
+  /* First check the linked list of dead items.  If the list is not   */
+  /*   empty, allocate an item from the list rather than a fresh one. */
+  if (pool->deaditemstack != (VOID *) NULL) {
+    newitem = pool->deaditemstack;               /* Take first item in list. */
+    pool->deaditemstack = * (VOID **) pool->deaditemstack;
+  } else {
+    /* Check if there are any free items left in the current block. */
+    if (pool->unallocateditems == 0) {
+      /* Check if another block must be allocated. */
+      if (*(pool->nowblock) == (VOID *) NULL) {
+        /* Allocate a new block of items, pointed to by the previous block. */
+        newblock = (VOID **) trimalloc(pool->itemsperblock * pool->itembytes +
+                                       (int) sizeof(VOID *) +
+                                       pool->alignbytes);
+        *(pool->nowblock) = (VOID *) newblock;
+        /* The next block pointer is NULL. */
+        *newblock = (VOID *) NULL;
+      }
+
+      /* Move to the new block. */
+      pool->nowblock = (VOID **) *(pool->nowblock);
+      /* Find the first item in the block.    */
+      /*   Increment by the size of (VOID *). */
+      alignptr = (unsigned long) (pool->nowblock + 1);
+      /* Align the item on an `alignbytes'-byte boundary. */
+      pool->nextitem = (VOID *)
+        (alignptr + (unsigned long) pool->alignbytes -
+         (alignptr % (unsigned long) pool->alignbytes));
+      /* There are lots of unallocated items left in this block. */
+      pool->unallocateditems = pool->itemsperblock;
+    }
+
+    /* Allocate a new item. */
+    newitem = pool->nextitem;
+    /* Advance `nextitem' pointer to next free item in block. */
+    pool->nextitem = (VOID *) ((char *) pool->nextitem + pool->itembytes);
+    pool->unallocateditems--;
+    pool->maxitems++;
+  }
+  pool->items++;
+  return newitem;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  pooldealloc()   Deallocate space for an item.                            */
+/*                                                                           */
+/*  The deallocated space is stored in a queue for later reuse.              */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void pooldealloc(struct memorypool *pool, VOID *dyingitem)
+#else /* not ANSI_DECLARATORS */
+void pooldealloc(pool, dyingitem)
+struct memorypool *pool;
+VOID *dyingitem;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  /* Push freshly killed item onto stack. */
+  *((VOID **) dyingitem) = pool->deaditemstack;
+  pool->deaditemstack = dyingitem;
+  pool->items--;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  traversalinit()   Prepare to traverse the entire list of items.          */
+/*                                                                           */
+/*  This routine is used in conjunction with traverse().                     */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void traversalinit(struct memorypool *pool)
+#else /* not ANSI_DECLARATORS */
+void traversalinit(pool)
+struct memorypool *pool;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  unsigned long alignptr;
+
+  /* Begin the traversal in the first block. */
+  pool->pathblock = pool->firstblock;
+  /* Find the first item in the block.  Increment by the size of (VOID *). */
+  alignptr = (unsigned long) (pool->pathblock + 1);
+  /* Align with item on an `alignbytes'-byte boundary. */
+  pool->pathitem = (VOID *)
+    (alignptr + (unsigned long) pool->alignbytes -
+     (alignptr % (unsigned long) pool->alignbytes));
+  /* Set the number of items left in the current block. */
+  pool->pathitemsleft = pool->itemsfirstblock;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  traverse()   Find the next item in the list.                             */
+/*                                                                           */
+/*  This routine is used in conjunction with traversalinit().  Be forewarned */
+/*  that this routine successively returns all items in the list, including  */
+/*  deallocated ones on the deaditemqueue.  It's up to you to figure out     */
+/*  which ones are actually dead.  Why?  I don't want to allocate extra      */
+/*  space just to demarcate dead items.  It can usually be done more         */
+/*  space-efficiently by a routine that knows something about the structure  */
+/*  of the item.                                                             */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+VOID *traverse(struct memorypool *pool)
+#else /* not ANSI_DECLARATORS */
+VOID *traverse(pool)
+struct memorypool *pool;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  VOID *newitem;
+  unsigned long alignptr;
+
+  /* Stop upon exhausting the list of items. */
+  if (pool->pathitem == pool->nextitem) {
+    return (VOID *) NULL;
+  }
+
+  /* Check whether any untraversed items remain in the current block. */
+  if (pool->pathitemsleft == 0) {
+    /* Find the next block. */
+    pool->pathblock = (VOID **) *(pool->pathblock);
+    /* Find the first item in the block.  Increment by the size of (VOID *). */
+    alignptr = (unsigned long) (pool->pathblock + 1);
+    /* Align with item on an `alignbytes'-byte boundary. */
+    pool->pathitem = (VOID *)
+      (alignptr + (unsigned long) pool->alignbytes -
+       (alignptr % (unsigned long) pool->alignbytes));
+    /* Set the number of items left in the current block. */
+    pool->pathitemsleft = pool->itemsperblock;
+  }
+
+  newitem = pool->pathitem;
+  /* Find the next item in the block. */
+  pool->pathitem = (VOID *) ((char *) pool->pathitem + pool->itembytes);
+  pool->pathitemsleft--;
+  return newitem;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  dummyinit()   Initialize the triangle that fills "outer space" and the   */
+/*                omnipresent subsegment.                                    */
+/*                                                                           */
+/*  The triangle that fills "outer space," called `dummytri', is pointed to  */
+/*  by every triangle and subsegment on a boundary (be it outer or inner) of */
+/*  the triangulation.  Also, `dummytri' points to one of the triangles on   */
+/*  the convex hull (until the holes and concavities are carved), making it  */
+/*  possible to find a starting triangle for point location.                 */
+/*                                                                           */
+/*  The omnipresent subsegment, `dummysub', is pointed to by every triangle  */
+/*  or subsegment that doesn't have a full complement of real subsegments    */
+/*  to point to.                                                             */
+/*                                                                           */
+/*  `dummytri' and `dummysub' are generally required to fulfill only a few   */
+/*  invariants:  their vertices must remain NULL and `dummytri' must always  */
+/*  be bonded (at offset zero) to some triangle on the convex hull of the    */
+/*  mesh, via a boundary edge.  Otherwise, the connections of `dummytri' and */
+/*  `dummysub' may change willy-nilly.  This makes it possible to avoid      */
+/*  writing a good deal of special-case code (in the edge flip, for example) */
+/*  for dealing with the boundary of the mesh, places where no subsegment is */
+/*  present, and so forth.  Other entities are frequently bonded to          */
+/*  `dummytri' and `dummysub' as if they were real mesh entities, with no    */
+/*  harm done.                                                               */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void dummyinit(struct mesh *m, struct behavior *b, int trianglebytes,
+               int subsegbytes)
+#else /* not ANSI_DECLARATORS */
+void dummyinit(m, b, trianglebytes, subsegbytes)
+struct mesh *m;
+struct behavior *b;
+int trianglebytes;
+int subsegbytes;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  unsigned long alignptr;
+
+  /* Set up `dummytri', the `triangle' that occupies "outer space." */
+  m->dummytribase = (triangle *) trimalloc(trianglebytes +
+                                           m->triangles.alignbytes);
+  /* Align `dummytri' on a `triangles.alignbytes'-byte boundary. */
+  alignptr = (unsigned long) m->dummytribase;
+  m->dummytri = (triangle *)
+    (alignptr + (unsigned long) m->triangles.alignbytes -
+     (alignptr % (unsigned long) m->triangles.alignbytes));
+  /* Initialize the three adjoining triangles to be "outer space."  These  */
+  /*   will eventually be changed by various bonding operations, but their */
+  /*   values don't really matter, as long as they can legally be          */
+  /*   dereferenced.                                                       */
+  m->dummytri[0] = (triangle) m->dummytri;
+  m->dummytri[1] = (triangle) m->dummytri;
+  m->dummytri[2] = (triangle) m->dummytri;
+  /* Three NULL vertices. */
+  m->dummytri[3] = (triangle) NULL;
+  m->dummytri[4] = (triangle) NULL;
+  m->dummytri[5] = (triangle) NULL;
+
+  if (b->usesegments) {
+    /* Set up `dummysub', the omnipresent subsegment pointed to by any */
+    /*   triangle side or subsegment end that isn't attached to a real */
+    /*   subsegment.                                                   */
+    m->dummysubbase = (subseg *) trimalloc(subsegbytes +
+                                           m->subsegs.alignbytes);
+    /* Align `dummysub' on a `subsegs.alignbytes'-byte boundary. */
+    alignptr = (unsigned long) m->dummysubbase;
+    m->dummysub = (subseg *)
+      (alignptr + (unsigned long) m->subsegs.alignbytes -
+       (alignptr % (unsigned long) m->subsegs.alignbytes));
+    /* Initialize the two adjoining subsegments to be the omnipresent      */
+    /*   subsegment.  These will eventually be changed by various bonding  */
+    /*   operations, but their values don't really matter, as long as they */
+    /*   can legally be dereferenced.                                      */
+    m->dummysub[0] = (subseg) m->dummysub;
+    m->dummysub[1] = (subseg) m->dummysub;
+    /* Four NULL vertices. */
+    m->dummysub[2] = (subseg) NULL;
+    m->dummysub[3] = (subseg) NULL;
+    m->dummysub[4] = (subseg) NULL;
+    m->dummysub[5] = (subseg) NULL;
+    /* Initialize the two adjoining triangles to be "outer space." */
+    m->dummysub[6] = (subseg) m->dummytri;
+    m->dummysub[7] = (subseg) m->dummytri;
+    /* Set the boundary marker to zero. */
+    * (int *) (m->dummysub + 8) = 0;
+
+    /* Initialize the three adjoining subsegments of `dummytri' to be */
+    /*   the omnipresent subsegment.                                  */
+    m->dummytri[6] = (triangle) m->dummysub;
+    m->dummytri[7] = (triangle) m->dummysub;
+    m->dummytri[8] = (triangle) m->dummysub;
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  initializevertexpool()   Calculate the size of the vertex data structure */
+/*                           and initialize its memory pool.                 */
+/*                                                                           */
+/*  This routine also computes the `vertexmarkindex' and `vertex2triindex'   */
+/*  indices used to find values within each vertex.                          */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void initializevertexpool(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void initializevertexpool(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  int vertexsize;
+
+  /* The index within each vertex at which the boundary marker is found,    */
+  /*   followed by the vertex type.  Ensure the vertex marker is aligned to */
+  /*   a sizeof(int)-byte address.                                          */
+  m->vertexmarkindex = ((m->mesh_dim + m->nextras) * sizeof(REAL) +
+                        sizeof(int) - 1) /
+                       sizeof(int);
+  vertexsize = (m->vertexmarkindex + 2) * sizeof(int);
+  if (b->poly) {
+    /* The index within each vertex at which a triangle pointer is found.  */
+    /*   Ensure the pointer is aligned to a sizeof(triangle)-byte address. */
+    m->vertex2triindex = (vertexsize + sizeof(triangle) - 1) /
+                         sizeof(triangle);
+    vertexsize = (m->vertex2triindex + 1) * sizeof(triangle);
+  }
+
+  /* Initialize the pool of vertices. */
+  poolinit(&m->vertices, vertexsize, VERTEXPERBLOCK,
+           m->invertices > VERTEXPERBLOCK ? m->invertices : VERTEXPERBLOCK,
+           sizeof(REAL));
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  initializetrisubpools()   Calculate the sizes of the triangle and        */
+/*                            subsegment data structures and initialize      */
+/*                            their memory pools.                            */
+/*                                                                           */
+/*  This routine also computes the `highorderindex', `elemattribindex', and  */
+/*  `areaboundindex' indices used to find values within each triangle.       */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void initializetrisubpools(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void initializetrisubpools(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  int trisize;
+
+  /* The index within each triangle at which the extra nodes (above three)  */
+  /*   associated with high order elements are found.  There are three      */
+  /*   pointers to other triangles, three pointers to corners, and possibly */
+  /*   three pointers to subsegments before the extra nodes.                */
+  m->highorderindex = 6 + (b->usesegments * 3);
+  /* The number of bytes occupied by a triangle. */
+  trisize = ((b->order + 1) * (b->order + 2) / 2 + (m->highorderindex - 3)) *
+            sizeof(triangle);
+  /* The index within each triangle at which its attributes are found, */
+  /*   where the index is measured in REALs.                           */
+  m->elemattribindex = (trisize + sizeof(REAL) - 1) / sizeof(REAL);
+  /* The index within each triangle at which the maximum area constraint  */
+  /*   is found, where the index is measured in REALs.  Note that if the  */
+  /*   `regionattrib' flag is set, an additional attribute will be added. */
+  m->areaboundindex = m->elemattribindex + m->eextras + b->regionattrib;
+  /* If triangle attributes or an area bound are needed, increase the number */
+  /*   of bytes occupied by a triangle.                                      */
+  if (b->vararea) {
+    trisize = (m->areaboundindex + 1) * sizeof(REAL);
+  } else if (m->eextras + b->regionattrib > 0) {
+    trisize = m->areaboundindex * sizeof(REAL);
+  }
+  /* If a Voronoi diagram or triangle neighbor graph is requested, make    */
+  /*   sure there's room to store an integer index in each triangle.  This */
+  /*   integer index can occupy the same space as the subsegment pointers  */
+  /*   or attributes or area constraint or extra nodes.                    */
+  if ((b->voronoi || b->neighbors) &&
+      (trisize < 6 * sizeof(triangle) + sizeof(int))) {
+    trisize = 6 * sizeof(triangle) + sizeof(int);
+  }
+
+  /* Having determined the memory size of a triangle, initialize the pool. */
+  poolinit(&m->triangles, trisize, TRIPERBLOCK,
+           (2 * m->invertices - 2) > TRIPERBLOCK ? (2 * m->invertices - 2) :
+           TRIPERBLOCK, 4);
+
+  if (b->usesegments) {
+    /* Initialize the pool of subsegments.  Take into account all eight */
+    /*   pointers and one boundary marker.                              */
+    poolinit(&m->subsegs, 8 * sizeof(triangle) + sizeof(int),
+             SUBSEGPERBLOCK, SUBSEGPERBLOCK, 4);
+
+    /* Initialize the "outer space" triangle and omnipresent subsegment. */
+    dummyinit(m, b, m->triangles.itembytes, m->subsegs.itembytes);
+  } else {
+    /* Initialize the "outer space" triangle. */
+    dummyinit(m, b, m->triangles.itembytes, 0);
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  triangledealloc()   Deallocate space for a triangle, marking it dead.    */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void triangledealloc(struct mesh *m, triangle *dyingtriangle)
+#else /* not ANSI_DECLARATORS */
+void triangledealloc(m, dyingtriangle)
+struct mesh *m;
+triangle *dyingtriangle;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  /* Mark the triangle as dead.  This makes it possible to detect dead */
+  /*   triangles when traversing the list of all triangles.            */
+  killtri(dyingtriangle);
+  pooldealloc(&m->triangles, (VOID *) dyingtriangle);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  triangletraverse()   Traverse the triangles, skipping dead ones.         */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+triangle *triangletraverse(struct mesh *m)
+#else /* not ANSI_DECLARATORS */
+triangle *triangletraverse(m)
+struct mesh *m;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  triangle *newtriangle;
+
+  do {
+    newtriangle = (triangle *) traverse(&m->triangles);
+    if (newtriangle == (triangle *) NULL) {
+      return (triangle *) NULL;
+    }
+  } while (deadtri(newtriangle));                         /* Skip dead ones. */
+  return newtriangle;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  subsegdealloc()   Deallocate space for a subsegment, marking it dead.    */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void subsegdealloc(struct mesh *m, subseg *dyingsubseg)
+#else /* not ANSI_DECLARATORS */
+void subsegdealloc(m, dyingsubseg)
+struct mesh *m;
+subseg *dyingsubseg;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  /* Mark the subsegment as dead.  This makes it possible to detect dead */
+  /*   subsegments when traversing the list of all subsegments.          */
+  killsubseg(dyingsubseg);
+  pooldealloc(&m->subsegs, (VOID *) dyingsubseg);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  subsegtraverse()   Traverse the subsegments, skipping dead ones.         */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+subseg *subsegtraverse(struct mesh *m)
+#else /* not ANSI_DECLARATORS */
+subseg *subsegtraverse(m)
+struct mesh *m;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  subseg *newsubseg;
+
+  do {
+    newsubseg = (subseg *) traverse(&m->subsegs);
+    if (newsubseg == (subseg *) NULL) {
+      return (subseg *) NULL;
+    }
+  } while (deadsubseg(newsubseg));                        /* Skip dead ones. */
+  return newsubseg;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  vertexdealloc()   Deallocate space for a vertex, marking it dead.        */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void vertexdealloc(struct mesh *m, vertex dyingvertex)
+#else /* not ANSI_DECLARATORS */
+void vertexdealloc(m, dyingvertex)
+struct mesh *m;
+vertex dyingvertex;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  /* Mark the vertex as dead.  This makes it possible to detect dead */
+  /*   vertices when traversing the list of all vertices.            */
+  setvertextype(dyingvertex, DEADVERTEX);
+  pooldealloc(&m->vertices, (VOID *) dyingvertex);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  vertextraverse()   Traverse the vertices, skipping dead ones.            */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+vertex vertextraverse(struct mesh *m)
+#else /* not ANSI_DECLARATORS */
+vertex vertextraverse(m)
+struct mesh *m;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  vertex newvertex;
+
+  do {
+    newvertex = (vertex) traverse(&m->vertices);
+    if (newvertex == (vertex) NULL) {
+      return (vertex) NULL;
+    }
+  } while (vertextype(newvertex) == DEADVERTEX);          /* Skip dead ones. */
+  return newvertex;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  badsubsegdealloc()   Deallocate space for a bad subsegment, marking it   */
+/*                       dead.                                               */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void badsubsegdealloc(struct mesh *m, struct badsubseg *dyingseg)
+#else /* not ANSI_DECLARATORS */
+void badsubsegdealloc(m, dyingseg)
+struct mesh *m;
+struct badsubseg *dyingseg;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  /* Set subsegment's origin to NULL.  This makes it possible to detect dead */
+  /*   badsubsegs when traversing the list of all badsubsegs             .   */
+  dyingseg->subsegorg = (vertex) NULL;
+  pooldealloc(&m->badsubsegs, (VOID *) dyingseg);
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  badsubsegtraverse()   Traverse the bad subsegments, skipping dead ones.  */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+struct badsubseg *badsubsegtraverse(struct mesh *m)
+#else /* not ANSI_DECLARATORS */
+struct badsubseg *badsubsegtraverse(m)
+struct mesh *m;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct badsubseg *newseg;
+
+  do {
+    newseg = (struct badsubseg *) traverse(&m->badsubsegs);
+    if (newseg == (struct badsubseg *) NULL) {
+      return (struct badsubseg *) NULL;
+    }
+  } while (newseg->subsegorg == (vertex) NULL);           /* Skip dead ones. */
+  return newseg;
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  getvertex()   Get a specific vertex, by number, from the list.           */
+/*                                                                           */
+/*  The first vertex is number 'firstnumber'.                                */
+/*                                                                           */
+/*  Note that this takes O(n) time (with a small constant, if VERTEXPERBLOCK */
+/*  is large).  I don't care to take the trouble to make it work in constant */
+/*  time.                                                                    */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+vertex getvertex(struct mesh *m, struct behavior *b, int number)
+#else /* not ANSI_DECLARATORS */
+vertex getvertex(m, b, number)
+struct mesh *m;
+struct behavior *b;
+int number;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  VOID **getblock;
+  char *foundvertex;
+  unsigned long alignptr;
+  int current;
+
+  getblock = m->vertices.firstblock;
+  current = b->firstnumber;
+
+  /* Find the right block. */
+  if (current + m->vertices.itemsfirstblock <= number) {
+    getblock = (VOID **) *getblock;
+    current += m->vertices.itemsfirstblock;
+    while (current + m->vertices.itemsperblock <= number) {
+      getblock = (VOID **) *getblock;
+      current += m->vertices.itemsperblock;
+    }
+  }
+
+  /* Now find the right vertex. */
+  alignptr = (unsigned long) (getblock + 1);
+  foundvertex = (char *) (alignptr + (unsigned long) m->vertices.alignbytes -
+                          (alignptr % (unsigned long) m->vertices.alignbytes));
+  return (vertex) (foundvertex + m->vertices.itembytes * (number - current));
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  triangledeinit()   Free all remaining allocated memory.                  */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void triangledeinit(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void triangledeinit(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  pooldeinit(&m->triangles);
+  trifree((VOID *) m->dummytribase);
+  if (b->usesegments) {
+    pooldeinit(&m->subsegs);
+    trifree((VOID *) m->dummysubbase);
+  }
+  pooldeinit(&m->vertices);
+#ifndef CDT_ONLY
+  if (b->quality) {
+    pooldeinit(&m->badsubsegs);
+    if ((b->minangle > 0.0) || b->vararea || b->fixedarea || b->usertest) {
+      pooldeinit(&m->badtriangles);
+      pooldeinit(&m->flipstackers);
+    }
+  }
+#endif /* not CDT_ONLY */
+}
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Memory management routines end here                       *********/
+
+/********* Constructors begin here                                   *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  maketriangle()   Create a new triangle with orientation zero.            */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void maketriangle(struct mesh *m, struct behavior *b, struct otri *newotri)
+#else /* not ANSI_DECLARATORS */
+void maketriangle(m, b, newotri)
+struct mesh *m;
+struct behavior *b;
+struct otri *newotri;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  int i;
+
+  newotri->tri = (triangle *) poolalloc(&m->triangles);
+  /* Initialize the three adjoining triangles to be "outer space". */
+  newotri->tri[0] = (triangle) m->dummytri;
+  newotri->tri[1] = (triangle) m->dummytri;
+  newotri->tri[2] = (triangle) m->dummytri;
+  /* Three NULL vertices. */
+  newotri->tri[3] = (triangle) NULL;
+  newotri->tri[4] = (triangle) NULL;
+  newotri->tri[5] = (triangle) NULL;
+  if (b->usesegments) {
+    /* Initialize the three adjoining subsegments to be the omnipresent */
+    /*   subsegment.                                                    */
+    newotri->tri[6] = (triangle) m->dummysub;
+    newotri->tri[7] = (triangle) m->dummysub;
+    newotri->tri[8] = (triangle) m->dummysub;
+  }
+  for (i = 0; i < m->eextras; i++) {
+    setelemattribute(*newotri, i, 0.0);
+  }
+  if (b->vararea) {
+    setareabound(*newotri, -1.0);
+  }
+
+  newotri->orient = 0;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  makesubseg()   Create a new subsegment with orientation zero.            */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void makesubseg(struct mesh *m, struct osub *newsubseg)
+#else /* not ANSI_DECLARATORS */
+void makesubseg(m, newsubseg)
+struct mesh *m;
+struct osub *newsubseg;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  newsubseg->ss = (subseg *) poolalloc(&m->subsegs);
+  /* Initialize the two adjoining subsegments to be the omnipresent */
+  /*   subsegment.                                                  */
+  newsubseg->ss[0] = (subseg) m->dummysub;
+  newsubseg->ss[1] = (subseg) m->dummysub;
+  /* Four NULL vertices. */
+  newsubseg->ss[2] = (subseg) NULL;
+  newsubseg->ss[3] = (subseg) NULL;
+  newsubseg->ss[4] = (subseg) NULL;
+  newsubseg->ss[5] = (subseg) NULL;
+  /* Initialize the two adjoining triangles to be "outer space." */
+  newsubseg->ss[6] = (subseg) m->dummytri;
+  newsubseg->ss[7] = (subseg) m->dummytri;
+  /* Set the boundary marker to zero. */
+  setmark(*newsubseg, 0);
+
+  newsubseg->ssorient = 0;
+}
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Constructors end here                                     *********/
+
+/********* Geometric primitives begin here                           *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/* The adaptive exact arithmetic geometric predicates implemented herein are */
+/*   described in detail in my paper, "Adaptive Precision Floating-Point     */
+/*   Arithmetic and Fast Robust Geometric Predicates."  See the header for a */
+/*   full citation.                                                          */
+
+/* Which of the following two methods of finding the absolute values is      */
+/*   fastest is compiler-dependent.  A few compilers can inline and optimize */
+/*   the fabs() call; but most will incur the overhead of a function call,   */
+/*   which is disastrously slow.  A faster way on IEEE machines might be to  */
+/*   mask the appropriate bit, but that's difficult to do in C without       */
+/*   forcing the value to be stored to memory (rather than be kept in the    */
+/*   register to which the optimizer assigned it).                           */
+
+#define Absolute(a)  ((a) >= 0.0 ? (a) : -(a))
+/* #define Absolute(a)  fabs(a) */
+
+/* Many of the operations are broken up into two pieces, a main part that    */
+/*   performs an approximate operation, and a "tail" that computes the       */
+/*   roundoff error of that operation.                                       */
+/*                                                                           */
+/* The operations Fast_Two_Sum(), Fast_Two_Diff(), Two_Sum(), Two_Diff(),    */
+/*   Split(), and Two_Product() are all implemented as described in the      */
+/*   reference.  Each of these macros requires certain variables to be       */
+/*   defined in the calling routine.  The variables `bvirt', `c', `abig',    */
+/*   `_i', `_j', `_k', `_l', `_m', and `_n' are declared `INEXACT' because   */
+/*   they store the result of an operation that may incur roundoff error.    */
+/*   The input parameter `x' (or the highest numbered `x_' parameter) must   */
+/*   also be declared `INEXACT'.                                             */
+
+#define Fast_Two_Sum_Tail(a, b, x, y) \
+  bvirt = x - a; \
+  y = b - bvirt
+
+#define Fast_Two_Sum(a, b, x, y) \
+  x = (REAL) (a + b); \
+  Fast_Two_Sum_Tail(a, b, x, y)
+
+#define Two_Sum_Tail(a, b, x, y) \
+  bvirt = (REAL) (x - a); \
+  avirt = x - bvirt; \
+  bround = b - bvirt; \
+  around = a - avirt; \
+  y = around + bround
+
+#define Two_Sum(a, b, x, y) \
+  x = (REAL) (a + b); \
+  Two_Sum_Tail(a, b, x, y)
+
+#define Two_Diff_Tail(a, b, x, y) \
+  bvirt = (REAL) (a - x); \
+  avirt = x + bvirt; \
+  bround = bvirt - b; \
+  around = a - avirt; \
+  y = around + bround
+
+#define Two_Diff(a, b, x, y) \
+  x = (REAL) (a - b); \
+  Two_Diff_Tail(a, b, x, y)
+
+#define Split(a, ahi, alo) \
+  c = (REAL) (splitter * a); \
+  abig = (REAL) (c - a); \
+  ahi = c - abig; \
+  alo = a - ahi
+
+#define Two_Product_Tail(a, b, x, y) \
+  Split(a, ahi, alo); \
+  Split(b, bhi, blo); \
+  err1 = x - (ahi * bhi); \
+  err2 = err1 - (alo * bhi); \
+  err3 = err2 - (ahi * blo); \
+  y = (alo * blo) - err3
+
+#define Two_Product(a, b, x, y) \
+  x = (REAL) (a * b); \
+  Two_Product_Tail(a, b, x, y)
+
+/* Two_Product_Presplit() is Two_Product() where one of the inputs has       */
+/*   already been split.  Avoids redundant splitting.                        */
+
+#define Two_Product_Presplit(a, b, bhi, blo, x, y) \
+  x = (REAL) (a * b); \
+  Split(a, ahi, alo); \
+  err1 = x - (ahi * bhi); \
+  err2 = err1 - (alo * bhi); \
+  err3 = err2 - (ahi * blo); \
+  y = (alo * blo) - err3
+
+/* Square() can be done more quickly than Two_Product().                     */
+
+#define Square_Tail(a, x, y) \
+  Split(a, ahi, alo); \
+  err1 = x - (ahi * ahi); \
+  err3 = err1 - ((ahi + ahi) * alo); \
+  y = (alo * alo) - err3
+
+#define Square(a, x, y) \
+  x = (REAL) (a * a); \
+  Square_Tail(a, x, y)
+
+/* Macros for summing expansions of various fixed lengths.  These are all    */
+/*   unrolled versions of Expansion_Sum().                                   */
+
+#define Two_One_Sum(a1, a0, b, x2, x1, x0) \
+  Two_Sum(a0, b , _i, x0); \
+  Two_Sum(a1, _i, x2, x1)
+
+#define Two_One_Diff(a1, a0, b, x2, x1, x0) \
+  Two_Diff(a0, b , _i, x0); \
+  Two_Sum( a1, _i, x2, x1)
+
+#define Two_Two_Sum(a1, a0, b1, b0, x3, x2, x1, x0) \
+  Two_One_Sum(a1, a0, b0, _j, _0, x0); \
+  Two_One_Sum(_j, _0, b1, x3, x2, x1)
+
+#define Two_Two_Diff(a1, a0, b1, b0, x3, x2, x1, x0) \
+  Two_One_Diff(a1, a0, b0, _j, _0, x0); \
+  Two_One_Diff(_j, _0, b1, x3, x2, x1)
+
+/* Macro for multiplying a two-component expansion by a single component.    */
+
+#define Two_One_Product(a1, a0, b, x3, x2, x1, x0) \
+  Split(b, bhi, blo); \
+  Two_Product_Presplit(a0, b, bhi, blo, _i, x0); \
+  Two_Product_Presplit(a1, b, bhi, blo, _j, _0); \
+  Two_Sum(_i, _0, _k, x1); \
+  Fast_Two_Sum(_j, _k, x3, x2)
+
+/*****************************************************************************/
+/*                                                                           */
+/*  exactinit()   Initialize the variables used for exact arithmetic.        */
+/*                                                                           */
+/*  `epsilon' is the largest power of two such that 1.0 + epsilon = 1.0 in   */
+/*  floating-point arithmetic.  `epsilon' bounds the relative roundoff       */
+/*  error.  It is used for floating-point error analysis.                    */
+/*                                                                           */
+/*  `splitter' is used to split floating-point numbers into two half-        */
+/*  length significands for exact multiplication.                            */
+/*                                                                           */
+/*  I imagine that a highly optimizing compiler might be too smart for its   */
+/*  own good, and somehow cause this routine to fail, if it pretends that    */
+/*  floating-point arithmetic is too much like real arithmetic.              */
+/*                                                                           */
+/*  Don't change this routine unless you fully understand it.                */
+/*                                                                           */
+/*****************************************************************************/
+
+void exactinit()
+{
+  REAL half;
+  REAL check, lastcheck;
+  int every_other;
+#ifdef LINUX
+  int cword;
+#endif /* LINUX */
+
+#ifdef CPU86
+#ifdef SINGLE
+  _control87(_PC_24, _MCW_PC); /* Set FPU control word for single precision. */
+#else /* not SINGLE */
+  _control87(_PC_53, _MCW_PC); /* Set FPU control word for double precision. */
+#endif /* not SINGLE */
+#endif /* CPU86 */
+#ifdef LINUX
+#ifdef SINGLE
+  /*  cword = 4223; */
+  cword = 4210;                 /* set FPU control word for single precision */
+#else /* not SINGLE */
+  /*  cword = 4735; */
+  cword = 4722;                 /* set FPU control word for double precision */
+#endif /* not SINGLE */
+  _FPU_SETCW(cword);
+#endif /* LINUX */
+
+  every_other = 1;
+  half = 0.5;
+  epsilon = 1.0;
+  splitter = 1.0;
+  check = 1.0;
+  /* Repeatedly divide `epsilon' by two until it is too small to add to      */
+  /*   one without causing roundoff.  (Also check if the sum is equal to     */
+  /*   the previous sum, for machines that round up instead of using exact   */
+  /*   rounding.  Not that these routines will work on such machines.)       */
+  do {
+    lastcheck = check;
+    epsilon *= half;
+    if (every_other) {
+      splitter *= 2.0;
+    }
+    every_other = !every_other;
+    check = 1.0 + epsilon;
+  } while ((check != 1.0) && (check != lastcheck));
+  splitter += 1.0;
+  /* Error bounds for orientation and incircle tests. */
+  resulterrbound = (3.0 + 8.0 * epsilon) * epsilon;
+  ccwerrboundA = (3.0 + 16.0 * epsilon) * epsilon;
+  ccwerrboundB = (2.0 + 12.0 * epsilon) * epsilon;
+  ccwerrboundC = (9.0 + 64.0 * epsilon) * epsilon * epsilon;
+  iccerrboundA = (10.0 + 96.0 * epsilon) * epsilon;
+  iccerrboundB = (4.0 + 48.0 * epsilon) * epsilon;
+  iccerrboundC = (44.0 + 576.0 * epsilon) * epsilon * epsilon;
+  o3derrboundA = (7.0 + 56.0 * epsilon) * epsilon;
+  o3derrboundB = (3.0 + 28.0 * epsilon) * epsilon;
+  o3derrboundC = (26.0 + 288.0 * epsilon) * epsilon * epsilon;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  fast_expansion_sum_zeroelim()   Sum two expansions, eliminating zero     */
+/*                                  components from the output expansion.    */
+/*                                                                           */
+/*  Sets h = e + f.  See my Robust Predicates paper for details.             */
+/*                                                                           */
+/*  If round-to-even is used (as with IEEE 754), maintains the strongly      */
+/*  nonoverlapping property.  (That is, if e is strongly nonoverlapping, h   */
+/*  will be also.)  Does NOT maintain the nonoverlapping or nonadjacent      */
+/*  properties.                                                              */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+int fast_expansion_sum_zeroelim(int elen, REAL *e, int flen, REAL *f, REAL *h)
+#else /* not ANSI_DECLARATORS */
+int fast_expansion_sum_zeroelim(elen, e, flen, f, h)  /* h cannot be e or f. */
+int elen;
+REAL *e;
+int flen;
+REAL *f;
+REAL *h;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL Q;
+  INEXACT REAL Qnew;
+  INEXACT REAL hh;
+  INEXACT REAL bvirt;
+  REAL avirt, bround, around;
+  int eindex, findex, hindex;
+  REAL enow, fnow;
+
+  enow = e[0];
+  fnow = f[0];
+  eindex = findex = 0;
+  if ((fnow > enow) == (fnow > -enow)) {
+    Q = enow;
+    enow = e[++eindex];
+  } else {
+    Q = fnow;
+    fnow = f[++findex];
+  }
+  hindex = 0;
+  if ((eindex < elen) && (findex < flen)) {
+    if ((fnow > enow) == (fnow > -enow)) {
+      Fast_Two_Sum(enow, Q, Qnew, hh);
+      enow = e[++eindex];
+    } else {
+      Fast_Two_Sum(fnow, Q, Qnew, hh);
+      fnow = f[++findex];
+    }
+    Q = Qnew;
+    if (hh != 0.0) {
+      h[hindex++] = hh;
+    }
+    while ((eindex < elen) && (findex < flen)) {
+      if ((fnow > enow) == (fnow > -enow)) {
+        Two_Sum(Q, enow, Qnew, hh);
+        enow = e[++eindex];
+      } else {
+        Two_Sum(Q, fnow, Qnew, hh);
+        fnow = f[++findex];
+      }
+      Q = Qnew;
+      if (hh != 0.0) {
+        h[hindex++] = hh;
+      }
+    }
+  }
+  while (eindex < elen) {
+    Two_Sum(Q, enow, Qnew, hh);
+    enow = e[++eindex];
+    Q = Qnew;
+    if (hh != 0.0) {
+      h[hindex++] = hh;
+    }
+  }
+  while (findex < flen) {
+    Two_Sum(Q, fnow, Qnew, hh);
+    fnow = f[++findex];
+    Q = Qnew;
+    if (hh != 0.0) {
+      h[hindex++] = hh;
+    }
+  }
+  if ((Q != 0.0) || (hindex == 0)) {
+    h[hindex++] = Q;
+  }
+  return hindex;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  scale_expansion_zeroelim()   Multiply an expansion by a scalar,          */
+/*                               eliminating zero components from the        */
+/*                               output expansion.                           */
+/*                                                                           */
+/*  Sets h = be.  See my Robust Predicates paper for details.                */
+/*                                                                           */
+/*  Maintains the nonoverlapping property.  If round-to-even is used (as     */
+/*  with IEEE 754), maintains the strongly nonoverlapping and nonadjacent    */
+/*  properties as well.  (That is, if e has one of these properties, so      */
+/*  will h.)                                                                 */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+int scale_expansion_zeroelim(int elen, REAL *e, REAL b, REAL *h)
+#else /* not ANSI_DECLARATORS */
+int scale_expansion_zeroelim(elen, e, b, h)   /* e and h cannot be the same. */
+int elen;
+REAL *e;
+REAL b;
+REAL *h;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  INEXACT REAL Q, sum;
+  REAL hh;
+  INEXACT REAL product1;
+  REAL product0;
+  int eindex, hindex;
+  REAL enow;
+  INEXACT REAL bvirt;
+  REAL avirt, bround, around;
+  INEXACT REAL c;
+  INEXACT REAL abig;
+  REAL ahi, alo, bhi, blo;
+  REAL err1, err2, err3;
+
+  Split(b, bhi, blo);
+  Two_Product_Presplit(e[0], b, bhi, blo, Q, hh);
+  hindex = 0;
+  if (hh != 0) {
+    h[hindex++] = hh;
+  }
+  for (eindex = 1; eindex < elen; eindex++) {
+    enow = e[eindex];
+    Two_Product_Presplit(enow, b, bhi, blo, product1, product0);
+    Two_Sum(Q, product0, sum, hh);
+    if (hh != 0) {
+      h[hindex++] = hh;
+    }
+    Fast_Two_Sum(product1, sum, Q, hh);
+    if (hh != 0) {
+      h[hindex++] = hh;
+    }
+  }
+  if ((Q != 0.0) || (hindex == 0)) {
+    h[hindex++] = Q;
+  }
+  return hindex;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  estimate()   Produce a one-word estimate of an expansion's value.        */
+/*                                                                           */
+/*  See my Robust Predicates paper for details.                              */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+REAL estimate(int elen, REAL *e)
+#else /* not ANSI_DECLARATORS */
+REAL estimate(elen, e)
+int elen;
+REAL *e;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL Q;
+  int eindex;
+
+  Q = e[0];
+  for (eindex = 1; eindex < elen; eindex++) {
+    Q += e[eindex];
+  }
+  return Q;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  counterclockwise()   Return a positive value if the points pa, pb, and   */
+/*                       pc occur in counterclockwise order; a negative      */
+/*                       value if they occur in clockwise order; and zero    */
+/*                       if they are collinear.  The result is also a rough  */
+/*                       approximation of twice the signed area of the       */
+/*                       triangle defined by the three points.               */
+/*                                                                           */
+/*  Uses exact arithmetic if necessary to ensure a correct answer.  The      */
+/*  result returned is the determinant of a matrix.  This determinant is     */
+/*  computed adaptively, in the sense that exact arithmetic is used only to  */
+/*  the degree it is needed to ensure that the returned value has the        */
+/*  correct sign.  Hence, this function is usually quite fast, but will run  */
+/*  more slowly when the input points are collinear or nearly so.            */
+/*                                                                           */
+/*  See my Robust Predicates paper for details.                              */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+REAL counterclockwiseadapt(vertex pa, vertex pb, vertex pc, REAL detsum)
+#else /* not ANSI_DECLARATORS */
+REAL counterclockwiseadapt(pa, pb, pc, detsum)
+vertex pa;
+vertex pb;
+vertex pc;
+REAL detsum;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  INEXACT REAL acx, acy, bcx, bcy;
+  REAL acxtail, acytail, bcxtail, bcytail;
+  INEXACT REAL detleft, detright;
+  REAL detlefttail, detrighttail;
+  REAL det, errbound;
+  REAL B[4], C1[8], C2[12], D[16];
+  INEXACT REAL B3;
+  int C1length, C2length, Dlength;
+  REAL u[4];
+  INEXACT REAL u3;
+  INEXACT REAL s1, t1;
+  REAL s0, t0;
+
+  INEXACT REAL bvirt;
+  REAL avirt, bround, around;
+  INEXACT REAL c;
+  INEXACT REAL abig;
+  REAL ahi, alo, bhi, blo;
+  REAL err1, err2, err3;
+  INEXACT REAL _i, _j;
+  REAL _0;
+
+  acx = (REAL) (pa[0] - pc[0]);
+  bcx = (REAL) (pb[0] - pc[0]);
+  acy = (REAL) (pa[1] - pc[1]);
+  bcy = (REAL) (pb[1] - pc[1]);
+
+  Two_Product(acx, bcy, detleft, detlefttail);
+  Two_Product(acy, bcx, detright, detrighttail);
+
+  Two_Two_Diff(detleft, detlefttail, detright, detrighttail,
+               B3, B[2], B[1], B[0]);
+  B[3] = B3;
+
+  det = estimate(4, B);
+  errbound = ccwerrboundB * detsum;
+  if ((det >= errbound) || (-det >= errbound)) {
+    return det;
+  }
+
+  Two_Diff_Tail(pa[0], pc[0], acx, acxtail);
+  Two_Diff_Tail(pb[0], pc[0], bcx, bcxtail);
+  Two_Diff_Tail(pa[1], pc[1], acy, acytail);
+  Two_Diff_Tail(pb[1], pc[1], bcy, bcytail);
+
+  if ((acxtail == 0.0) && (acytail == 0.0)
+      && (bcxtail == 0.0) && (bcytail == 0.0)) {
+    return det;
+  }
+
+  errbound = ccwerrboundC * detsum + resulterrbound * Absolute(det);
+  det += (acx * bcytail + bcy * acxtail)
+       - (acy * bcxtail + bcx * acytail);
+  if ((det >= errbound) || (-det >= errbound)) {
+    return det;
+  }
+
+  Two_Product(acxtail, bcy, s1, s0);
+  Two_Product(acytail, bcx, t1, t0);
+  Two_Two_Diff(s1, s0, t1, t0, u3, u[2], u[1], u[0]);
+  u[3] = u3;
+  C1length = fast_expansion_sum_zeroelim(4, B, 4, u, C1);
+
+  Two_Product(acx, bcytail, s1, s0);
+  Two_Product(acy, bcxtail, t1, t0);
+  Two_Two_Diff(s1, s0, t1, t0, u3, u[2], u[1], u[0]);
+  u[3] = u3;
+  C2length = fast_expansion_sum_zeroelim(C1length, C1, 4, u, C2);
+
+  Two_Product(acxtail, bcytail, s1, s0);
+  Two_Product(acytail, bcxtail, t1, t0);
+  Two_Two_Diff(s1, s0, t1, t0, u3, u[2], u[1], u[0]);
+  u[3] = u3;
+  Dlength = fast_expansion_sum_zeroelim(C2length, C2, 4, u, D);
+
+  return(D[Dlength - 1]);
+}
+
+#ifdef ANSI_DECLARATORS
+REAL counterclockwise(struct mesh *m, struct behavior *b,
+                      vertex pa, vertex pb, vertex pc)
+#else /* not ANSI_DECLARATORS */
+REAL counterclockwise(m, b, pa, pb, pc)
+struct mesh *m;
+struct behavior *b;
+vertex pa;
+vertex pb;
+vertex pc;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL detleft, detright, det;
+  REAL detsum, errbound;
+
+  m->counterclockcount++;
+
+  detleft = (pa[0] - pc[0]) * (pb[1] - pc[1]);
+  detright = (pa[1] - pc[1]) * (pb[0] - pc[0]);
+  det = detleft - detright;
+
+  if (b->noexact) {
+    return det;
+  }
+
+  if (detleft > 0.0) {
+    if (detright <= 0.0) {
+      return det;
+    } else {
+      detsum = detleft + detright;
+    }
+  } else if (detleft < 0.0) {
+    if (detright >= 0.0) {
+      return det;
+    } else {
+      detsum = -detleft - detright;
+    }
+  } else {
+    return det;
+  }
+
+  errbound = ccwerrboundA * detsum;
+  if ((det >= errbound) || (-det >= errbound)) {
+    return det;
+  }
+
+  return counterclockwiseadapt(pa, pb, pc, detsum);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  incircle()   Return a positive value if the point pd lies inside the     */
+/*               circle passing through pa, pb, and pc; a negative value if  */
+/*               it lies outside; and zero if the four points are cocircular.*/
+/*               The points pa, pb, and pc must be in counterclockwise       */
+/*               order, or the sign of the result will be reversed.          */
+/*                                                                           */
+/*  Uses exact arithmetic if necessary to ensure a correct answer.  The      */
+/*  result returned is the determinant of a matrix.  This determinant is     */
+/*  computed adaptively, in the sense that exact arithmetic is used only to  */
+/*  the degree it is needed to ensure that the returned value has the        */
+/*  correct sign.  Hence, this function is usually quite fast, but will run  */
+/*  more slowly when the input points are cocircular or nearly so.           */
+/*                                                                           */
+/*  See my Robust Predicates paper for details.                              */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+REAL incircleadapt(vertex pa, vertex pb, vertex pc, vertex pd, REAL permanent)
+#else /* not ANSI_DECLARATORS */
+REAL incircleadapt(pa, pb, pc, pd, permanent)
+vertex pa;
+vertex pb;
+vertex pc;
+vertex pd;
+REAL permanent;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  INEXACT REAL adx, bdx, cdx, ady, bdy, cdy;
+  REAL det, errbound;
+
+  INEXACT REAL bdxcdy1, cdxbdy1, cdxady1, adxcdy1, adxbdy1, bdxady1;
+  REAL bdxcdy0, cdxbdy0, cdxady0, adxcdy0, adxbdy0, bdxady0;
+  REAL bc[4], ca[4], ab[4];
+  INEXACT REAL bc3, ca3, ab3;
+  REAL axbc[8], axxbc[16], aybc[8], ayybc[16], adet[32];
+  int axbclen, axxbclen, aybclen, ayybclen, alen;
+  REAL bxca[8], bxxca[16], byca[8], byyca[16], bdet[32];
+  int bxcalen, bxxcalen, bycalen, byycalen, blen;
+  REAL cxab[8], cxxab[16], cyab[8], cyyab[16], cdet[32];
+  int cxablen, cxxablen, cyablen, cyyablen, clen;
+  REAL abdet[64];
+  int ablen;
+  REAL fin1[1152], fin2[1152];
+  REAL *finnow, *finother, *finswap;
+  int finlength;
+
+  REAL adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;
+  INEXACT REAL adxadx1, adyady1, bdxbdx1, bdybdy1, cdxcdx1, cdycdy1;
+  REAL adxadx0, adyady0, bdxbdx0, bdybdy0, cdxcdx0, cdycdy0;
+  REAL aa[4], bb[4], cc[4];
+  INEXACT REAL aa3, bb3, cc3;
+  INEXACT REAL ti1, tj1;
+  REAL ti0, tj0;
+  REAL u[4], v[4];
+  INEXACT REAL u3, v3;
+  REAL temp8[8], temp16a[16], temp16b[16], temp16c[16];
+  REAL temp32a[32], temp32b[32], temp48[48], temp64[64];
+  int temp8len, temp16alen, temp16blen, temp16clen;
+  int temp32alen, temp32blen, temp48len, temp64len;
+  REAL axtbb[8], axtcc[8], aytbb[8], aytcc[8];
+  int axtbblen, axtcclen, aytbblen, aytcclen;
+  REAL bxtaa[8], bxtcc[8], bytaa[8], bytcc[8];
+  int bxtaalen, bxtcclen, bytaalen, bytcclen;
+  REAL cxtaa[8], cxtbb[8], cytaa[8], cytbb[8];
+  int cxtaalen, cxtbblen, cytaalen, cytbblen;
+  REAL axtbc[8], aytbc[8], bxtca[8], bytca[8], cxtab[8], cytab[8];
+  int axtbclen = 0, aytbclen = 0, bxtcalen = 0, bytcalen = 0, cxtablen = 0, cytablen = 0;
+  REAL axtbct[16], aytbct[16], bxtcat[16], bytcat[16], cxtabt[16], cytabt[16];
+  int axtbctlen, aytbctlen, bxtcatlen, bytcatlen, cxtabtlen, cytabtlen;
+  REAL axtbctt[8], aytbctt[8], bxtcatt[8];
+  REAL bytcatt[8], cxtabtt[8], cytabtt[8];
+  int axtbcttlen, aytbcttlen, bxtcattlen, bytcattlen, cxtabttlen, cytabttlen;
+  REAL abt[8], bct[8], cat[8];
+  int abtlen, bctlen, catlen;
+  REAL abtt[4], bctt[4], catt[4];
+  int abttlen, bcttlen, cattlen;
+  INEXACT REAL abtt3, bctt3, catt3;
+  REAL negate;
+
+  INEXACT REAL bvirt;
+  REAL avirt, bround, around;
+  INEXACT REAL c;
+  INEXACT REAL abig;
+  REAL ahi, alo, bhi, blo;
+  REAL err1, err2, err3;
+  INEXACT REAL _i, _j;
+  REAL _0;
+
+  adx = (REAL) (pa[0] - pd[0]);
+  bdx = (REAL) (pb[0] - pd[0]);
+  cdx = (REAL) (pc[0] - pd[0]);
+  ady = (REAL) (pa[1] - pd[1]);
+  bdy = (REAL) (pb[1] - pd[1]);
+  cdy = (REAL) (pc[1] - pd[1]);
+
+  Two_Product(bdx, cdy, bdxcdy1, bdxcdy0);
+  Two_Product(cdx, bdy, cdxbdy1, cdxbdy0);
+  Two_Two_Diff(bdxcdy1, bdxcdy0, cdxbdy1, cdxbdy0, bc3, bc[2], bc[1], bc[0]);
+  bc[3] = bc3;
+  axbclen = scale_expansion_zeroelim(4, bc, adx, axbc);
+  axxbclen = scale_expansion_zeroelim(axbclen, axbc, adx, axxbc);
+  aybclen = scale_expansion_zeroelim(4, bc, ady, aybc);
+  ayybclen = scale_expansion_zeroelim(aybclen, aybc, ady, ayybc);
+  alen = fast_expansion_sum_zeroelim(axxbclen, axxbc, ayybclen, ayybc, adet);
+
+  Two_Product(cdx, ady, cdxady1, cdxady0);
+  Two_Product(adx, cdy, adxcdy1, adxcdy0);
+  Two_Two_Diff(cdxady1, cdxady0, adxcdy1, adxcdy0, ca3, ca[2], ca[1], ca[0]);
+  ca[3] = ca3;
+  bxcalen = scale_expansion_zeroelim(4, ca, bdx, bxca);
+  bxxcalen = scale_expansion_zeroelim(bxcalen, bxca, bdx, bxxca);
+  bycalen = scale_expansion_zeroelim(4, ca, bdy, byca);
+  byycalen = scale_expansion_zeroelim(bycalen, byca, bdy, byyca);
+  blen = fast_expansion_sum_zeroelim(bxxcalen, bxxca, byycalen, byyca, bdet);
+
+  Two_Product(adx, bdy, adxbdy1, adxbdy0);
+  Two_Product(bdx, ady, bdxady1, bdxady0);
+  Two_Two_Diff(adxbdy1, adxbdy0, bdxady1, bdxady0, ab3, ab[2], ab[1], ab[0]);
+  ab[3] = ab3;
+  cxablen = scale_expansion_zeroelim(4, ab, cdx, cxab);
+  cxxablen = scale_expansion_zeroelim(cxablen, cxab, cdx, cxxab);
+  cyablen = scale_expansion_zeroelim(4, ab, cdy, cyab);
+  cyyablen = scale_expansion_zeroelim(cyablen, cyab, cdy, cyyab);
+  clen = fast_expansion_sum_zeroelim(cxxablen, cxxab, cyyablen, cyyab, cdet);
+
+  ablen = fast_expansion_sum_zeroelim(alen, adet, blen, bdet, abdet);
+  finlength = fast_expansion_sum_zeroelim(ablen, abdet, clen, cdet, fin1);
+
+  det = estimate(finlength, fin1);
+  errbound = iccerrboundB * permanent;
+  if ((det >= errbound) || (-det >= errbound)) {
+    return det;
+  }
+
+  Two_Diff_Tail(pa[0], pd[0], adx, adxtail);
+  Two_Diff_Tail(pa[1], pd[1], ady, adytail);
+  Two_Diff_Tail(pb[0], pd[0], bdx, bdxtail);
+  Two_Diff_Tail(pb[1], pd[1], bdy, bdytail);
+  Two_Diff_Tail(pc[0], pd[0], cdx, cdxtail);
+  Two_Diff_Tail(pc[1], pd[1], cdy, cdytail);
+  if ((adxtail == 0.0) && (bdxtail == 0.0) && (cdxtail == 0.0)
+      && (adytail == 0.0) && (bdytail == 0.0) && (cdytail == 0.0)) {
+    return det;
+  }
+
+  errbound = iccerrboundC * permanent + resulterrbound * Absolute(det);
+  det += ((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail)
+                                     - (bdy * cdxtail + cdx * bdytail))
+          + 2.0 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx))
+       + ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail)
+                                     - (cdy * adxtail + adx * cdytail))
+          + 2.0 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx))
+       + ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail)
+                                     - (ady * bdxtail + bdx * adytail))
+          + 2.0 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));
+  if ((det >= errbound) || (-det >= errbound)) {
+    return det;
+  }
+
+  finnow = fin1;
+  finother = fin2;
+
+  if ((bdxtail != 0.0) || (bdytail != 0.0)
+      || (cdxtail != 0.0) || (cdytail != 0.0)) {
+    Square(adx, adxadx1, adxadx0);
+    Square(ady, adyady1, adyady0);
+    Two_Two_Sum(adxadx1, adxadx0, adyady1, adyady0, aa3, aa[2], aa[1], aa[0]);
+    aa[3] = aa3;
+  }
+  if ((cdxtail != 0.0) || (cdytail != 0.0)
+      || (adxtail != 0.0) || (adytail != 0.0)) {
+    Square(bdx, bdxbdx1, bdxbdx0);
+    Square(bdy, bdybdy1, bdybdy0);
+    Two_Two_Sum(bdxbdx1, bdxbdx0, bdybdy1, bdybdy0, bb3, bb[2], bb[1], bb[0]);
+    bb[3] = bb3;
+  }
+  if ((adxtail != 0.0) || (adytail != 0.0)
+      || (bdxtail != 0.0) || (bdytail != 0.0)) {
+    Square(cdx, cdxcdx1, cdxcdx0);
+    Square(cdy, cdycdy1, cdycdy0);
+    Two_Two_Sum(cdxcdx1, cdxcdx0, cdycdy1, cdycdy0, cc3, cc[2], cc[1], cc[0]);
+    cc[3] = cc3;
+  }
+
+  if (adxtail != 0.0) {
+    axtbclen = scale_expansion_zeroelim(4, bc, adxtail, axtbc);
+    temp16alen = scale_expansion_zeroelim(axtbclen, axtbc, 2.0 * adx,
+                                          temp16a);
+
+    axtcclen = scale_expansion_zeroelim(4, cc, adxtail, axtcc);
+    temp16blen = scale_expansion_zeroelim(axtcclen, axtcc, bdy, temp16b);
+
+    axtbblen = scale_expansion_zeroelim(4, bb, adxtail, axtbb);
+    temp16clen = scale_expansion_zeroelim(axtbblen, axtbb, -cdy, temp16c);
+
+    temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                            temp16blen, temp16b, temp32a);
+    temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c,
+                                            temp32alen, temp32a, temp48);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                            temp48, finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+  if (adytail != 0.0) {
+    aytbclen = scale_expansion_zeroelim(4, bc, adytail, aytbc);
+    temp16alen = scale_expansion_zeroelim(aytbclen, aytbc, 2.0 * ady,
+                                          temp16a);
+
+    aytbblen = scale_expansion_zeroelim(4, bb, adytail, aytbb);
+    temp16blen = scale_expansion_zeroelim(aytbblen, aytbb, cdx, temp16b);
+
+    aytcclen = scale_expansion_zeroelim(4, cc, adytail, aytcc);
+    temp16clen = scale_expansion_zeroelim(aytcclen, aytcc, -bdx, temp16c);
+
+    temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                            temp16blen, temp16b, temp32a);
+    temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c,
+                                            temp32alen, temp32a, temp48);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                            temp48, finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+  if (bdxtail != 0.0) {
+    bxtcalen = scale_expansion_zeroelim(4, ca, bdxtail, bxtca);
+    temp16alen = scale_expansion_zeroelim(bxtcalen, bxtca, 2.0 * bdx,
+                                          temp16a);
+
+    bxtaalen = scale_expansion_zeroelim(4, aa, bdxtail, bxtaa);
+    temp16blen = scale_expansion_zeroelim(bxtaalen, bxtaa, cdy, temp16b);
+
+    bxtcclen = scale_expansion_zeroelim(4, cc, bdxtail, bxtcc);
+    temp16clen = scale_expansion_zeroelim(bxtcclen, bxtcc, -ady, temp16c);
+
+    temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                            temp16blen, temp16b, temp32a);
+    temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c,
+                                            temp32alen, temp32a, temp48);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                            temp48, finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+  if (bdytail != 0.0) {
+    bytcalen = scale_expansion_zeroelim(4, ca, bdytail, bytca);
+    temp16alen = scale_expansion_zeroelim(bytcalen, bytca, 2.0 * bdy,
+                                          temp16a);
+
+    bytcclen = scale_expansion_zeroelim(4, cc, bdytail, bytcc);
+    temp16blen = scale_expansion_zeroelim(bytcclen, bytcc, adx, temp16b);
+
+    bytaalen = scale_expansion_zeroelim(4, aa, bdytail, bytaa);
+    temp16clen = scale_expansion_zeroelim(bytaalen, bytaa, -cdx, temp16c);
+
+    temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                            temp16blen, temp16b, temp32a);
+    temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c,
+                                            temp32alen, temp32a, temp48);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                            temp48, finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+  if (cdxtail != 0.0) {
+    cxtablen = scale_expansion_zeroelim(4, ab, cdxtail, cxtab);
+    temp16alen = scale_expansion_zeroelim(cxtablen, cxtab, 2.0 * cdx,
+                                          temp16a);
+
+    cxtbblen = scale_expansion_zeroelim(4, bb, cdxtail, cxtbb);
+    temp16blen = scale_expansion_zeroelim(cxtbblen, cxtbb, ady, temp16b);
+
+    cxtaalen = scale_expansion_zeroelim(4, aa, cdxtail, cxtaa);
+    temp16clen = scale_expansion_zeroelim(cxtaalen, cxtaa, -bdy, temp16c);
+
+    temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                            temp16blen, temp16b, temp32a);
+    temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c,
+                                            temp32alen, temp32a, temp48);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                            temp48, finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+  if (cdytail != 0.0) {
+    cytablen = scale_expansion_zeroelim(4, ab, cdytail, cytab);
+    temp16alen = scale_expansion_zeroelim(cytablen, cytab, 2.0 * cdy,
+                                          temp16a);
+
+    cytaalen = scale_expansion_zeroelim(4, aa, cdytail, cytaa);
+    temp16blen = scale_expansion_zeroelim(cytaalen, cytaa, bdx, temp16b);
+
+    cytbblen = scale_expansion_zeroelim(4, bb, cdytail, cytbb);
+    temp16clen = scale_expansion_zeroelim(cytbblen, cytbb, -adx, temp16c);
+
+    temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                            temp16blen, temp16b, temp32a);
+    temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c,
+                                            temp32alen, temp32a, temp48);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                            temp48, finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+
+  if ((adxtail != 0.0) || (adytail != 0.0)) {
+    if ((bdxtail != 0.0) || (bdytail != 0.0)
+        || (cdxtail != 0.0) || (cdytail != 0.0)) {
+      Two_Product(bdxtail, cdy, ti1, ti0);
+      Two_Product(bdx, cdytail, tj1, tj0);
+      Two_Two_Sum(ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0]);
+      u[3] = u3;
+      negate = -bdy;
+      Two_Product(cdxtail, negate, ti1, ti0);
+      negate = -bdytail;
+      Two_Product(cdx, negate, tj1, tj0);
+      Two_Two_Sum(ti1, ti0, tj1, tj0, v3, v[2], v[1], v[0]);
+      v[3] = v3;
+      bctlen = fast_expansion_sum_zeroelim(4, u, 4, v, bct);
+
+      Two_Product(bdxtail, cdytail, ti1, ti0);
+      Two_Product(cdxtail, bdytail, tj1, tj0);
+      Two_Two_Diff(ti1, ti0, tj1, tj0, bctt3, bctt[2], bctt[1], bctt[0]);
+      bctt[3] = bctt3;
+      bcttlen = 4;
+    } else {
+      bct[0] = 0.0;
+      bctlen = 1;
+      bctt[0] = 0.0;
+      bcttlen = 1;
+    }
+
+    if (adxtail != 0.0) {
+      temp16alen = scale_expansion_zeroelim(axtbclen, axtbc, adxtail, temp16a);
+      axtbctlen = scale_expansion_zeroelim(bctlen, bct, adxtail, axtbct);
+      temp32alen = scale_expansion_zeroelim(axtbctlen, axtbct, 2.0 * adx,
+                                            temp32a);
+      temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp32alen, temp32a, temp48);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                              temp48, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+      if (bdytail != 0.0) {
+        temp8len = scale_expansion_zeroelim(4, cc, adxtail, temp8);
+        temp16alen = scale_expansion_zeroelim(temp8len, temp8, bdytail,
+                                              temp16a);
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen,
+                                                temp16a, finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+      if (cdytail != 0.0) {
+        temp8len = scale_expansion_zeroelim(4, bb, -adxtail, temp8);
+        temp16alen = scale_expansion_zeroelim(temp8len, temp8, cdytail,
+                                              temp16a);
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen,
+                                                temp16a, finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+
+      temp32alen = scale_expansion_zeroelim(axtbctlen, axtbct, adxtail,
+                                            temp32a);
+      axtbcttlen = scale_expansion_zeroelim(bcttlen, bctt, adxtail, axtbctt);
+      temp16alen = scale_expansion_zeroelim(axtbcttlen, axtbctt, 2.0 * adx,
+                                            temp16a);
+      temp16blen = scale_expansion_zeroelim(axtbcttlen, axtbctt, adxtail,
+                                            temp16b);
+      temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp16blen, temp16b, temp32b);
+      temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a,
+                                              temp32blen, temp32b, temp64);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len,
+                                              temp64, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+    }
+    if (adytail != 0.0) {
+      temp16alen = scale_expansion_zeroelim(aytbclen, aytbc, adytail, temp16a);
+      aytbctlen = scale_expansion_zeroelim(bctlen, bct, adytail, aytbct);
+      temp32alen = scale_expansion_zeroelim(aytbctlen, aytbct, 2.0 * ady,
+                                            temp32a);
+      temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp32alen, temp32a, temp48);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                              temp48, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+
+
+      temp32alen = scale_expansion_zeroelim(aytbctlen, aytbct, adytail,
+                                            temp32a);
+      aytbcttlen = scale_expansion_zeroelim(bcttlen, bctt, adytail, aytbctt);
+      temp16alen = scale_expansion_zeroelim(aytbcttlen, aytbctt, 2.0 * ady,
+                                            temp16a);
+      temp16blen = scale_expansion_zeroelim(aytbcttlen, aytbctt, adytail,
+                                            temp16b);
+      temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp16blen, temp16b, temp32b);
+      temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a,
+                                              temp32blen, temp32b, temp64);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len,
+                                              temp64, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+    }
+  }
+  if ((bdxtail != 0.0) || (bdytail != 0.0)) {
+    if ((cdxtail != 0.0) || (cdytail != 0.0)
+        || (adxtail != 0.0) || (adytail != 0.0)) {
+      Two_Product(cdxtail, ady, ti1, ti0);
+      Two_Product(cdx, adytail, tj1, tj0);
+      Two_Two_Sum(ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0]);
+      u[3] = u3;
+      negate = -cdy;
+      Two_Product(adxtail, negate, ti1, ti0);
+      negate = -cdytail;
+      Two_Product(adx, negate, tj1, tj0);
+      Two_Two_Sum(ti1, ti0, tj1, tj0, v3, v[2], v[1], v[0]);
+      v[3] = v3;
+      catlen = fast_expansion_sum_zeroelim(4, u, 4, v, cat);
+
+      Two_Product(cdxtail, adytail, ti1, ti0);
+      Two_Product(adxtail, cdytail, tj1, tj0);
+      Two_Two_Diff(ti1, ti0, tj1, tj0, catt3, catt[2], catt[1], catt[0]);
+      catt[3] = catt3;
+      cattlen = 4;
+    } else {
+      cat[0] = 0.0;
+      catlen = 1;
+      catt[0] = 0.0;
+      cattlen = 1;
+    }
+
+    if (bdxtail != 0.0) {
+      temp16alen = scale_expansion_zeroelim(bxtcalen, bxtca, bdxtail, temp16a);
+      bxtcatlen = scale_expansion_zeroelim(catlen, cat, bdxtail, bxtcat);
+      temp32alen = scale_expansion_zeroelim(bxtcatlen, bxtcat, 2.0 * bdx,
+                                            temp32a);
+      temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp32alen, temp32a, temp48);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                              temp48, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+      if (cdytail != 0.0) {
+        temp8len = scale_expansion_zeroelim(4, aa, bdxtail, temp8);
+        temp16alen = scale_expansion_zeroelim(temp8len, temp8, cdytail,
+                                              temp16a);
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen,
+                                                temp16a, finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+      if (adytail != 0.0) {
+        temp8len = scale_expansion_zeroelim(4, cc, -bdxtail, temp8);
+        temp16alen = scale_expansion_zeroelim(temp8len, temp8, adytail,
+                                              temp16a);
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen,
+                                                temp16a, finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+
+      temp32alen = scale_expansion_zeroelim(bxtcatlen, bxtcat, bdxtail,
+                                            temp32a);
+      bxtcattlen = scale_expansion_zeroelim(cattlen, catt, bdxtail, bxtcatt);
+      temp16alen = scale_expansion_zeroelim(bxtcattlen, bxtcatt, 2.0 * bdx,
+                                            temp16a);
+      temp16blen = scale_expansion_zeroelim(bxtcattlen, bxtcatt, bdxtail,
+                                            temp16b);
+      temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp16blen, temp16b, temp32b);
+      temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a,
+                                              temp32blen, temp32b, temp64);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len,
+                                              temp64, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+    }
+    if (bdytail != 0.0) {
+      temp16alen = scale_expansion_zeroelim(bytcalen, bytca, bdytail, temp16a);
+      bytcatlen = scale_expansion_zeroelim(catlen, cat, bdytail, bytcat);
+      temp32alen = scale_expansion_zeroelim(bytcatlen, bytcat, 2.0 * bdy,
+                                            temp32a);
+      temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp32alen, temp32a, temp48);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                              temp48, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+
+
+      temp32alen = scale_expansion_zeroelim(bytcatlen, bytcat, bdytail,
+                                            temp32a);
+      bytcattlen = scale_expansion_zeroelim(cattlen, catt, bdytail, bytcatt);
+      temp16alen = scale_expansion_zeroelim(bytcattlen, bytcatt, 2.0 * bdy,
+                                            temp16a);
+      temp16blen = scale_expansion_zeroelim(bytcattlen, bytcatt, bdytail,
+                                            temp16b);
+      temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp16blen, temp16b, temp32b);
+      temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a,
+                                              temp32blen, temp32b, temp64);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len,
+                                              temp64, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+    }
+  }
+  if ((cdxtail != 0.0) || (cdytail != 0.0)) {
+    if ((adxtail != 0.0) || (adytail != 0.0)
+        || (bdxtail != 0.0) || (bdytail != 0.0)) {
+      Two_Product(adxtail, bdy, ti1, ti0);
+      Two_Product(adx, bdytail, tj1, tj0);
+      Two_Two_Sum(ti1, ti0, tj1, tj0, u3, u[2], u[1], u[0]);
+      u[3] = u3;
+      negate = -ady;
+      Two_Product(bdxtail, negate, ti1, ti0);
+      negate = -adytail;
+      Two_Product(bdx, negate, tj1, tj0);
+      Two_Two_Sum(ti1, ti0, tj1, tj0, v3, v[2], v[1], v[0]);
+      v[3] = v3;
+      abtlen = fast_expansion_sum_zeroelim(4, u, 4, v, abt);
+
+      Two_Product(adxtail, bdytail, ti1, ti0);
+      Two_Product(bdxtail, adytail, tj1, tj0);
+      Two_Two_Diff(ti1, ti0, tj1, tj0, abtt3, abtt[2], abtt[1], abtt[0]);
+      abtt[3] = abtt3;
+      abttlen = 4;
+    } else {
+      abt[0] = 0.0;
+      abtlen = 1;
+      abtt[0] = 0.0;
+      abttlen = 1;
+    }
+
+    if (cdxtail != 0.0) {
+      temp16alen = scale_expansion_zeroelim(cxtablen, cxtab, cdxtail, temp16a);
+      cxtabtlen = scale_expansion_zeroelim(abtlen, abt, cdxtail, cxtabt);
+      temp32alen = scale_expansion_zeroelim(cxtabtlen, cxtabt, 2.0 * cdx,
+                                            temp32a);
+      temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp32alen, temp32a, temp48);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                              temp48, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+      if (adytail != 0.0) {
+        temp8len = scale_expansion_zeroelim(4, bb, cdxtail, temp8);
+        temp16alen = scale_expansion_zeroelim(temp8len, temp8, adytail,
+                                              temp16a);
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen,
+                                                temp16a, finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+      if (bdytail != 0.0) {
+        temp8len = scale_expansion_zeroelim(4, aa, -cdxtail, temp8);
+        temp16alen = scale_expansion_zeroelim(temp8len, temp8, bdytail,
+                                              temp16a);
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen,
+                                                temp16a, finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+
+      temp32alen = scale_expansion_zeroelim(cxtabtlen, cxtabt, cdxtail,
+                                            temp32a);
+      cxtabttlen = scale_expansion_zeroelim(abttlen, abtt, cdxtail, cxtabtt);
+      temp16alen = scale_expansion_zeroelim(cxtabttlen, cxtabtt, 2.0 * cdx,
+                                            temp16a);
+      temp16blen = scale_expansion_zeroelim(cxtabttlen, cxtabtt, cdxtail,
+                                            temp16b);
+      temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp16blen, temp16b, temp32b);
+      temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a,
+                                              temp32blen, temp32b, temp64);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len,
+                                              temp64, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+    }
+    if (cdytail != 0.0) {
+      temp16alen = scale_expansion_zeroelim(cytablen, cytab, cdytail, temp16a);
+      cytabtlen = scale_expansion_zeroelim(abtlen, abt, cdytail, cytabt);
+      temp32alen = scale_expansion_zeroelim(cytabtlen, cytabt, 2.0 * cdy,
+                                            temp32a);
+      temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp32alen, temp32a, temp48);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len,
+                                              temp48, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+
+
+      temp32alen = scale_expansion_zeroelim(cytabtlen, cytabt, cdytail,
+                                            temp32a);
+      cytabttlen = scale_expansion_zeroelim(abttlen, abtt, cdytail, cytabtt);
+      temp16alen = scale_expansion_zeroelim(cytabttlen, cytabtt, 2.0 * cdy,
+                                            temp16a);
+      temp16blen = scale_expansion_zeroelim(cytabttlen, cytabtt, cdytail,
+                                            temp16b);
+      temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a,
+                                              temp16blen, temp16b, temp32b);
+      temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a,
+                                              temp32blen, temp32b, temp64);
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len,
+                                              temp64, finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+    }
+  }
+
+  return finnow[finlength - 1];
+}
+
+#ifdef ANSI_DECLARATORS
+REAL incircle(struct mesh *m, struct behavior *b,
+              vertex pa, vertex pb, vertex pc, vertex pd)
+#else /* not ANSI_DECLARATORS */
+REAL incircle(m, b, pa, pb, pc, pd)
+struct mesh *m;
+struct behavior *b;
+vertex pa;
+vertex pb;
+vertex pc;
+vertex pd;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL adx, bdx, cdx, ady, bdy, cdy;
+  REAL bdxcdy, cdxbdy, cdxady, adxcdy, adxbdy, bdxady;
+  REAL alift, blift, clift;
+  REAL det;
+  REAL permanent, errbound;
+
+  m->incirclecount++;
+
+  adx = pa[0] - pd[0];
+  bdx = pb[0] - pd[0];
+  cdx = pc[0] - pd[0];
+  ady = pa[1] - pd[1];
+  bdy = pb[1] - pd[1];
+  cdy = pc[1] - pd[1];
+
+  bdxcdy = bdx * cdy;
+  cdxbdy = cdx * bdy;
+  alift = adx * adx + ady * ady;
+
+  cdxady = cdx * ady;
+  adxcdy = adx * cdy;
+  blift = bdx * bdx + bdy * bdy;
+
+  adxbdy = adx * bdy;
+  bdxady = bdx * ady;
+  clift = cdx * cdx + cdy * cdy;
+
+  det = alift * (bdxcdy - cdxbdy)
+      + blift * (cdxady - adxcdy)
+      + clift * (adxbdy - bdxady);
+
+  if (b->noexact) {
+    return det;
+  }
+
+  permanent = (Absolute(bdxcdy) + Absolute(cdxbdy)) * alift
+            + (Absolute(cdxady) + Absolute(adxcdy)) * blift
+            + (Absolute(adxbdy) + Absolute(bdxady)) * clift;
+  errbound = iccerrboundA * permanent;
+  if ((det > errbound) || (-det > errbound)) {
+    return det;
+  }
+
+  return incircleadapt(pa, pb, pc, pd, permanent);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  orient3d()   Return a positive value if the point pd lies below the      */
+/*               plane passing through pa, pb, and pc; "below" is defined so */
+/*               that pa, pb, and pc appear in counterclockwise order when   */
+/*               viewed from above the plane.  Returns a negative value if   */
+/*               pd lies above the plane.  Returns zero if the points are    */
+/*               coplanar.  The result is also a rough approximation of six  */
+/*               times the signed volume of the tetrahedron defined by the   */
+/*               four points.                                                */
+/*                                                                           */
+/*  Uses exact arithmetic if necessary to ensure a correct answer.  The      */
+/*  result returned is the determinant of a matrix.  This determinant is     */
+/*  computed adaptively, in the sense that exact arithmetic is used only to  */
+/*  the degree it is needed to ensure that the returned value has the        */
+/*  correct sign.  Hence, this function is usually quite fast, but will run  */
+/*  more slowly when the input points are coplanar or nearly so.             */
+/*                                                                           */
+/*  See my Robust Predicates paper for details.                              */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+REAL orient3dadapt(vertex pa, vertex pb, vertex pc, vertex pd,
+                   REAL aheight, REAL bheight, REAL cheight, REAL dheight,
+                   REAL permanent)
+#else /* not ANSI_DECLARATORS */
+REAL orient3dadapt(pa, pb, pc, pd,
+                   aheight, bheight, cheight, dheight, permanent)
+vertex pa;
+vertex pb;
+vertex pc;
+vertex pd;
+REAL aheight;
+REAL bheight;
+REAL cheight;
+REAL dheight;
+REAL permanent;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  INEXACT REAL adx, bdx, cdx, ady, bdy, cdy, adheight, bdheight, cdheight;
+  REAL det, errbound;
+
+  INEXACT REAL bdxcdy1, cdxbdy1, cdxady1, adxcdy1, adxbdy1, bdxady1;
+  REAL bdxcdy0, cdxbdy0, cdxady0, adxcdy0, adxbdy0, bdxady0;
+  REAL bc[4], ca[4], ab[4];
+  INEXACT REAL bc3, ca3, ab3;
+  REAL adet[8], bdet[8], cdet[8];
+  int alen, blen, clen;
+  REAL abdet[16];
+  int ablen;
+  REAL *finnow, *finother, *finswap;
+  REAL fin1[192], fin2[192];
+  int finlength;
+
+  REAL adxtail, bdxtail, cdxtail;
+  REAL adytail, bdytail, cdytail;
+  REAL adheighttail, bdheighttail, cdheighttail;
+  INEXACT REAL at_blarge, at_clarge;
+  INEXACT REAL bt_clarge, bt_alarge;
+  INEXACT REAL ct_alarge, ct_blarge;
+  REAL at_b[4], at_c[4], bt_c[4], bt_a[4], ct_a[4], ct_b[4];
+  int at_blen, at_clen, bt_clen, bt_alen, ct_alen, ct_blen;
+  INEXACT REAL bdxt_cdy1, cdxt_bdy1, cdxt_ady1;
+  INEXACT REAL adxt_cdy1, adxt_bdy1, bdxt_ady1;
+  REAL bdxt_cdy0, cdxt_bdy0, cdxt_ady0;
+  REAL adxt_cdy0, adxt_bdy0, bdxt_ady0;
+  INEXACT REAL bdyt_cdx1, cdyt_bdx1, cdyt_adx1;
+  INEXACT REAL adyt_cdx1, adyt_bdx1, bdyt_adx1;
+  REAL bdyt_cdx0, cdyt_bdx0, cdyt_adx0;
+  REAL adyt_cdx0, adyt_bdx0, bdyt_adx0;
+  REAL bct[8], cat[8], abt[8];
+  int bctlen, catlen, abtlen;
+  INEXACT REAL bdxt_cdyt1, cdxt_bdyt1, cdxt_adyt1;
+  INEXACT REAL adxt_cdyt1, adxt_bdyt1, bdxt_adyt1;
+  REAL bdxt_cdyt0, cdxt_bdyt0, cdxt_adyt0;
+  REAL adxt_cdyt0, adxt_bdyt0, bdxt_adyt0;
+  REAL u[4], v[12], w[16];
+  INEXACT REAL u3;
+  int vlength, wlength;
+  REAL negate;
+
+  INEXACT REAL bvirt;
+  REAL avirt, bround, around;
+  INEXACT REAL c;
+  INEXACT REAL abig;
+  REAL ahi, alo, bhi, blo;
+  REAL err1, err2, err3;
+  INEXACT REAL _i, _j, _k;
+  REAL _0;
+
+  adx = (REAL) (pa[0] - pd[0]);
+  bdx = (REAL) (pb[0] - pd[0]);
+  cdx = (REAL) (pc[0] - pd[0]);
+  ady = (REAL) (pa[1] - pd[1]);
+  bdy = (REAL) (pb[1] - pd[1]);
+  cdy = (REAL) (pc[1] - pd[1]);
+  adheight = (REAL) (aheight - dheight);
+  bdheight = (REAL) (bheight - dheight);
+  cdheight = (REAL) (cheight - dheight);
+
+  Two_Product(bdx, cdy, bdxcdy1, bdxcdy0);
+  Two_Product(cdx, bdy, cdxbdy1, cdxbdy0);
+  Two_Two_Diff(bdxcdy1, bdxcdy0, cdxbdy1, cdxbdy0, bc3, bc[2], bc[1], bc[0]);
+  bc[3] = bc3;
+  alen = scale_expansion_zeroelim(4, bc, adheight, adet);
+
+  Two_Product(cdx, ady, cdxady1, cdxady0);
+  Two_Product(adx, cdy, adxcdy1, adxcdy0);
+  Two_Two_Diff(cdxady1, cdxady0, adxcdy1, adxcdy0, ca3, ca[2], ca[1], ca[0]);
+  ca[3] = ca3;
+  blen = scale_expansion_zeroelim(4, ca, bdheight, bdet);
+
+  Two_Product(adx, bdy, adxbdy1, adxbdy0);
+  Two_Product(bdx, ady, bdxady1, bdxady0);
+  Two_Two_Diff(adxbdy1, adxbdy0, bdxady1, bdxady0, ab3, ab[2], ab[1], ab[0]);
+  ab[3] = ab3;
+  clen = scale_expansion_zeroelim(4, ab, cdheight, cdet);
+
+  ablen = fast_expansion_sum_zeroelim(alen, adet, blen, bdet, abdet);
+  finlength = fast_expansion_sum_zeroelim(ablen, abdet, clen, cdet, fin1);
+
+  det = estimate(finlength, fin1);
+  errbound = o3derrboundB * permanent;
+  if ((det >= errbound) || (-det >= errbound)) {
+    return det;
+  }
+
+  Two_Diff_Tail(pa[0], pd[0], adx, adxtail);
+  Two_Diff_Tail(pb[0], pd[0], bdx, bdxtail);
+  Two_Diff_Tail(pc[0], pd[0], cdx, cdxtail);
+  Two_Diff_Tail(pa[1], pd[1], ady, adytail);
+  Two_Diff_Tail(pb[1], pd[1], bdy, bdytail);
+  Two_Diff_Tail(pc[1], pd[1], cdy, cdytail);
+  Two_Diff_Tail(aheight, dheight, adheight, adheighttail);
+  Two_Diff_Tail(bheight, dheight, bdheight, bdheighttail);
+  Two_Diff_Tail(cheight, dheight, cdheight, cdheighttail);
+
+  if ((adxtail == 0.0) && (bdxtail == 0.0) && (cdxtail == 0.0) &&
+      (adytail == 0.0) && (bdytail == 0.0) && (cdytail == 0.0) &&
+      (adheighttail == 0.0) &&
+      (bdheighttail == 0.0) &&
+      (cdheighttail == 0.0)) {
+    return det;
+  }
+
+  errbound = o3derrboundC * permanent + resulterrbound * Absolute(det);
+  det += (adheight * ((bdx * cdytail + cdy * bdxtail) -
+                      (bdy * cdxtail + cdx * bdytail)) +
+          adheighttail * (bdx * cdy - bdy * cdx)) +
+         (bdheight * ((cdx * adytail + ady * cdxtail) -
+                      (cdy * adxtail + adx * cdytail)) +
+          bdheighttail * (cdx * ady - cdy * adx)) +
+         (cdheight * ((adx * bdytail + bdy * adxtail) -
+                      (ady * bdxtail + bdx * adytail)) +
+          cdheighttail * (adx * bdy - ady * bdx));
+  if ((det >= errbound) || (-det >= errbound)) {
+    return det;
+  }
+
+  finnow = fin1;
+  finother = fin2;
+
+  if (adxtail == 0.0) {
+    if (adytail == 0.0) {
+      at_b[0] = 0.0;
+      at_blen = 1;
+      at_c[0] = 0.0;
+      at_clen = 1;
+    } else {
+      negate = -adytail;
+      Two_Product(negate, bdx, at_blarge, at_b[0]);
+      at_b[1] = at_blarge;
+      at_blen = 2;
+      Two_Product(adytail, cdx, at_clarge, at_c[0]);
+      at_c[1] = at_clarge;
+      at_clen = 2;
+    }
+  } else {
+    if (adytail == 0.0) {
+      Two_Product(adxtail, bdy, at_blarge, at_b[0]);
+      at_b[1] = at_blarge;
+      at_blen = 2;
+      negate = -adxtail;
+      Two_Product(negate, cdy, at_clarge, at_c[0]);
+      at_c[1] = at_clarge;
+      at_clen = 2;
+    } else {
+      Two_Product(adxtail, bdy, adxt_bdy1, adxt_bdy0);
+      Two_Product(adytail, bdx, adyt_bdx1, adyt_bdx0);
+      Two_Two_Diff(adxt_bdy1, adxt_bdy0, adyt_bdx1, adyt_bdx0,
+                   at_blarge, at_b[2], at_b[1], at_b[0]);
+      at_b[3] = at_blarge;
+      at_blen = 4;
+      Two_Product(adytail, cdx, adyt_cdx1, adyt_cdx0);
+      Two_Product(adxtail, cdy, adxt_cdy1, adxt_cdy0);
+      Two_Two_Diff(adyt_cdx1, adyt_cdx0, adxt_cdy1, adxt_cdy0,
+                   at_clarge, at_c[2], at_c[1], at_c[0]);
+      at_c[3] = at_clarge;
+      at_clen = 4;
+    }
+  }
+  if (bdxtail == 0.0) {
+    if (bdytail == 0.0) {
+      bt_c[0] = 0.0;
+      bt_clen = 1;
+      bt_a[0] = 0.0;
+      bt_alen = 1;
+    } else {
+      negate = -bdytail;
+      Two_Product(negate, cdx, bt_clarge, bt_c[0]);
+      bt_c[1] = bt_clarge;
+      bt_clen = 2;
+      Two_Product(bdytail, adx, bt_alarge, bt_a[0]);
+      bt_a[1] = bt_alarge;
+      bt_alen = 2;
+    }
+  } else {
+    if (bdytail == 0.0) {
+      Two_Product(bdxtail, cdy, bt_clarge, bt_c[0]);
+      bt_c[1] = bt_clarge;
+      bt_clen = 2;
+      negate = -bdxtail;
+      Two_Product(negate, ady, bt_alarge, bt_a[0]);
+      bt_a[1] = bt_alarge;
+      bt_alen = 2;
+    } else {
+      Two_Product(bdxtail, cdy, bdxt_cdy1, bdxt_cdy0);
+      Two_Product(bdytail, cdx, bdyt_cdx1, bdyt_cdx0);
+      Two_Two_Diff(bdxt_cdy1, bdxt_cdy0, bdyt_cdx1, bdyt_cdx0,
+                   bt_clarge, bt_c[2], bt_c[1], bt_c[0]);
+      bt_c[3] = bt_clarge;
+      bt_clen = 4;
+      Two_Product(bdytail, adx, bdyt_adx1, bdyt_adx0);
+      Two_Product(bdxtail, ady, bdxt_ady1, bdxt_ady0);
+      Two_Two_Diff(bdyt_adx1, bdyt_adx0, bdxt_ady1, bdxt_ady0,
+                  bt_alarge, bt_a[2], bt_a[1], bt_a[0]);
+      bt_a[3] = bt_alarge;
+      bt_alen = 4;
+    }
+  }
+  if (cdxtail == 0.0) {
+    if (cdytail == 0.0) {
+      ct_a[0] = 0.0;
+      ct_alen = 1;
+      ct_b[0] = 0.0;
+      ct_blen = 1;
+    } else {
+      negate = -cdytail;
+      Two_Product(negate, adx, ct_alarge, ct_a[0]);
+      ct_a[1] = ct_alarge;
+      ct_alen = 2;
+      Two_Product(cdytail, bdx, ct_blarge, ct_b[0]);
+      ct_b[1] = ct_blarge;
+      ct_blen = 2;
+    }
+  } else {
+    if (cdytail == 0.0) {
+      Two_Product(cdxtail, ady, ct_alarge, ct_a[0]);
+      ct_a[1] = ct_alarge;
+      ct_alen = 2;
+      negate = -cdxtail;
+      Two_Product(negate, bdy, ct_blarge, ct_b[0]);
+      ct_b[1] = ct_blarge;
+      ct_blen = 2;
+    } else {
+      Two_Product(cdxtail, ady, cdxt_ady1, cdxt_ady0);
+      Two_Product(cdytail, adx, cdyt_adx1, cdyt_adx0);
+      Two_Two_Diff(cdxt_ady1, cdxt_ady0, cdyt_adx1, cdyt_adx0,
+                   ct_alarge, ct_a[2], ct_a[1], ct_a[0]);
+      ct_a[3] = ct_alarge;
+      ct_alen = 4;
+      Two_Product(cdytail, bdx, cdyt_bdx1, cdyt_bdx0);
+      Two_Product(cdxtail, bdy, cdxt_bdy1, cdxt_bdy0);
+      Two_Two_Diff(cdyt_bdx1, cdyt_bdx0, cdxt_bdy1, cdxt_bdy0,
+                   ct_blarge, ct_b[2], ct_b[1], ct_b[0]);
+      ct_b[3] = ct_blarge;
+      ct_blen = 4;
+    }
+  }
+
+  bctlen = fast_expansion_sum_zeroelim(bt_clen, bt_c, ct_blen, ct_b, bct);
+  wlength = scale_expansion_zeroelim(bctlen, bct, adheight, w);
+  finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w,
+                                          finother);
+  finswap = finnow; finnow = finother; finother = finswap;
+
+  catlen = fast_expansion_sum_zeroelim(ct_alen, ct_a, at_clen, at_c, cat);
+  wlength = scale_expansion_zeroelim(catlen, cat, bdheight, w);
+  finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w,
+                                          finother);
+  finswap = finnow; finnow = finother; finother = finswap;
+
+  abtlen = fast_expansion_sum_zeroelim(at_blen, at_b, bt_alen, bt_a, abt);
+  wlength = scale_expansion_zeroelim(abtlen, abt, cdheight, w);
+  finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w,
+                                          finother);
+  finswap = finnow; finnow = finother; finother = finswap;
+
+  if (adheighttail != 0.0) {
+    vlength = scale_expansion_zeroelim(4, bc, adheighttail, v);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, vlength, v,
+                                            finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+  if (bdheighttail != 0.0) {
+    vlength = scale_expansion_zeroelim(4, ca, bdheighttail, v);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, vlength, v,
+                                            finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+  if (cdheighttail != 0.0) {
+    vlength = scale_expansion_zeroelim(4, ab, cdheighttail, v);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, vlength, v,
+                                            finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+
+  if (adxtail != 0.0) {
+    if (bdytail != 0.0) {
+      Two_Product(adxtail, bdytail, adxt_bdyt1, adxt_bdyt0);
+      Two_One_Product(adxt_bdyt1, adxt_bdyt0, cdheight, u3, u[2], u[1], u[0]);
+      u[3] = u3;
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                              finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+      if (cdheighttail != 0.0) {
+        Two_One_Product(adxt_bdyt1, adxt_bdyt0, cdheighttail,
+                        u3, u[2], u[1], u[0]);
+        u[3] = u3;
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                                finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+    }
+    if (cdytail != 0.0) {
+      negate = -adxtail;
+      Two_Product(negate, cdytail, adxt_cdyt1, adxt_cdyt0);
+      Two_One_Product(adxt_cdyt1, adxt_cdyt0, bdheight, u3, u[2], u[1], u[0]);
+      u[3] = u3;
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                              finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+      if (bdheighttail != 0.0) {
+        Two_One_Product(adxt_cdyt1, adxt_cdyt0, bdheighttail,
+                        u3, u[2], u[1], u[0]);
+        u[3] = u3;
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                                finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+    }
+  }
+  if (bdxtail != 0.0) {
+    if (cdytail != 0.0) {
+      Two_Product(bdxtail, cdytail, bdxt_cdyt1, bdxt_cdyt0);
+      Two_One_Product(bdxt_cdyt1, bdxt_cdyt0, adheight, u3, u[2], u[1], u[0]);
+      u[3] = u3;
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                              finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+      if (adheighttail != 0.0) {
+        Two_One_Product(bdxt_cdyt1, bdxt_cdyt0, adheighttail,
+                        u3, u[2], u[1], u[0]);
+        u[3] = u3;
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                                finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+    }
+    if (adytail != 0.0) {
+      negate = -bdxtail;
+      Two_Product(negate, adytail, bdxt_adyt1, bdxt_adyt0);
+      Two_One_Product(bdxt_adyt1, bdxt_adyt0, cdheight, u3, u[2], u[1], u[0]);
+      u[3] = u3;
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                              finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+      if (cdheighttail != 0.0) {
+        Two_One_Product(bdxt_adyt1, bdxt_adyt0, cdheighttail,
+                        u3, u[2], u[1], u[0]);
+        u[3] = u3;
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                                finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+    }
+  }
+  if (cdxtail != 0.0) {
+    if (adytail != 0.0) {
+      Two_Product(cdxtail, adytail, cdxt_adyt1, cdxt_adyt0);
+      Two_One_Product(cdxt_adyt1, cdxt_adyt0, bdheight, u3, u[2], u[1], u[0]);
+      u[3] = u3;
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                              finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+      if (bdheighttail != 0.0) {
+        Two_One_Product(cdxt_adyt1, cdxt_adyt0, bdheighttail,
+                        u3, u[2], u[1], u[0]);
+        u[3] = u3;
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                                finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+    }
+    if (bdytail != 0.0) {
+      negate = -cdxtail;
+      Two_Product(negate, bdytail, cdxt_bdyt1, cdxt_bdyt0);
+      Two_One_Product(cdxt_bdyt1, cdxt_bdyt0, adheight, u3, u[2], u[1], u[0]);
+      u[3] = u3;
+      finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                              finother);
+      finswap = finnow; finnow = finother; finother = finswap;
+      if (adheighttail != 0.0) {
+        Two_One_Product(cdxt_bdyt1, cdxt_bdyt0, adheighttail,
+                        u3, u[2], u[1], u[0]);
+        u[3] = u3;
+        finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u,
+                                                finother);
+        finswap = finnow; finnow = finother; finother = finswap;
+      }
+    }
+  }
+
+  if (adheighttail != 0.0) {
+    wlength = scale_expansion_zeroelim(bctlen, bct, adheighttail, w);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w,
+                                            finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+  if (bdheighttail != 0.0) {
+    wlength = scale_expansion_zeroelim(catlen, cat, bdheighttail, w);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w,
+                                            finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+  if (cdheighttail != 0.0) {
+    wlength = scale_expansion_zeroelim(abtlen, abt, cdheighttail, w);
+    finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w,
+                                            finother);
+    finswap = finnow; finnow = finother; finother = finswap;
+  }
+
+  return finnow[finlength - 1];
+}
+
+#ifdef ANSI_DECLARATORS
+REAL orient3d(struct mesh *m, struct behavior *b,
+              vertex pa, vertex pb, vertex pc, vertex pd,
+              REAL aheight, REAL bheight, REAL cheight, REAL dheight)
+#else /* not ANSI_DECLARATORS */
+REAL orient3d(m, b, pa, pb, pc, pd, aheight, bheight, cheight, dheight)
+struct mesh *m;
+struct behavior *b;
+vertex pa;
+vertex pb;
+vertex pc;
+vertex pd;
+REAL aheight;
+REAL bheight;
+REAL cheight;
+REAL dheight;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL adx, bdx, cdx, ady, bdy, cdy, adheight, bdheight, cdheight;
+  REAL bdxcdy, cdxbdy, cdxady, adxcdy, adxbdy, bdxady;
+  REAL det;
+  REAL permanent, errbound;
+
+  m->orient3dcount++;
+
+  adx = pa[0] - pd[0];
+  bdx = pb[0] - pd[0];
+  cdx = pc[0] - pd[0];
+  ady = pa[1] - pd[1];
+  bdy = pb[1] - pd[1];
+  cdy = pc[1] - pd[1];
+  adheight = aheight - dheight;
+  bdheight = bheight - dheight;
+  cdheight = cheight - dheight;
+
+  bdxcdy = bdx * cdy;
+  cdxbdy = cdx * bdy;
+
+  cdxady = cdx * ady;
+  adxcdy = adx * cdy;
+
+  adxbdy = adx * bdy;
+  bdxady = bdx * ady;
+
+  det = adheight * (bdxcdy - cdxbdy)
+      + bdheight * (cdxady - adxcdy)
+      + cdheight * (adxbdy - bdxady);
+
+  if (b->noexact) {
+    return det;
+  }
+
+  permanent = (Absolute(bdxcdy) + Absolute(cdxbdy)) * Absolute(adheight)
+            + (Absolute(cdxady) + Absolute(adxcdy)) * Absolute(bdheight)
+            + (Absolute(adxbdy) + Absolute(bdxady)) * Absolute(cdheight);
+  errbound = o3derrboundA * permanent;
+  if ((det > errbound) || (-det > errbound)) {
+    return det;
+  }
+
+  return orient3dadapt(pa, pb, pc, pd, aheight, bheight, cheight, dheight,
+                       permanent);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  nonregular()   Return a positive value if the point pd is incompatible   */
+/*                 with the circle or plane passing through pa, pb, and pc   */
+/*                 (meaning that pd is inside the circle or below the        */
+/*                 plane); a negative value if it is compatible; and zero if */
+/*                 the four points are cocircular/coplanar.  The points pa,  */
+/*                 pb, and pc must be in counterclockwise order, or the sign */
+/*                 of the result will be reversed.                           */
+/*                                                                           */
+/*  If the -w switch is used, the points are lifted onto the parabolic       */
+/*  lifting map, then they are dropped according to their weights, then the  */
+/*  3D orientation test is applied.  If the -W switch is used, the points'   */
+/*  heights are already provided, so the 3D orientation test is applied      */
+/*  directly.  If neither switch is used, the incircle test is applied.      */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+REAL nonregular(struct mesh *m, struct behavior *b,
+                vertex pa, vertex pb, vertex pc, vertex pd)
+#else /* not ANSI_DECLARATORS */
+REAL nonregular(m, b, pa, pb, pc, pd)
+struct mesh *m;
+struct behavior *b;
+vertex pa;
+vertex pb;
+vertex pc;
+vertex pd;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  if (b->weighted == 0) {
+    return incircle(m, b, pa, pb, pc, pd);
+  } else if (b->weighted == 1) {
+    return orient3d(m, b, pa, pb, pc, pd,
+                    pa[0] * pa[0] + pa[1] * pa[1] - pa[2],
+                    pb[0] * pb[0] + pb[1] * pb[1] - pb[2],
+                    pc[0] * pc[0] + pc[1] * pc[1] - pc[2],
+                    pd[0] * pd[0] + pd[1] * pd[1] - pd[2]);
+  } else {
+    return orient3d(m, b, pa, pb, pc, pd, pa[2], pb[2], pc[2], pd[2]);
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  findcircumcenter()   Find the circumcenter of a triangle.                */
+/*                                                                           */
+/*  The result is returned both in terms of x-y coordinates and xi-eta       */
+/*  (barycentric) coordinates.  The xi-eta coordinate system is defined in   */
+/*  terms of the triangle:  the origin of the triangle is the origin of the  */
+/*  coordinate system; the destination of the triangle is one unit along the */
+/*  xi axis; and the apex of the triangle is one unit along the eta axis.    */
+/*  This procedure also returns the square of the length of the triangle's   */
+/*  shortest edge.                                                           */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void findcircumcenter(struct mesh *m, struct behavior *b,
+                      vertex torg, vertex tdest, vertex tapex,
+                      vertex circumcenter, REAL *xi, REAL *eta, int offcenter)
+#else /* not ANSI_DECLARATORS */
+void findcircumcenter(m, b, torg, tdest, tapex, circumcenter, xi, eta,
+                      offcenter)
+struct mesh *m;
+struct behavior *b;
+vertex torg;
+vertex tdest;
+vertex tapex;
+vertex circumcenter;
+REAL *xi;
+REAL *eta;
+int offcenter;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL xdo, ydo, xao, yao;
+  REAL dodist, aodist, dadist;
+  REAL denominator;
+  REAL dx, dy, dxoff, dyoff;
+
+  m->circumcentercount++;
+
+  /* Compute the circumcenter of the triangle. */
+  xdo = tdest[0] - torg[0];
+  ydo = tdest[1] - torg[1];
+  xao = tapex[0] - torg[0];
+  yao = tapex[1] - torg[1];
+  dodist = xdo * xdo + ydo * ydo;
+  aodist = xao * xao + yao * yao;
+  dadist = (tdest[0] - tapex[0]) * (tdest[0] - tapex[0]) +
+           (tdest[1] - tapex[1]) * (tdest[1] - tapex[1]);
+  if (b->noexact) {
+    denominator = 0.5 / (xdo * yao - xao * ydo);
+  } else {
+    /* Use the counterclockwise() routine to ensure a positive (and */
+    /*   reasonably accurate) result, avoiding any possibility of   */
+    /*   division by zero.                                          */
+    denominator = 0.5 / counterclockwise(m, b, tdest, tapex, torg);
+    /* Don't count the above as an orientation test. */
+    m->counterclockcount--;
+  }
+  dx = (yao * dodist - ydo * aodist) * denominator;
+  dy = (xdo * aodist - xao * dodist) * denominator;
+
+  /* Find the (squared) length of the triangle's shortest edge.  This   */
+  /*   serves as a conservative estimate of the insertion radius of the */
+  /*   circumcenter's parent.  The estimate is used to ensure that      */
+  /*   the algorithm terminates even if very small angles appear in     */
+  /*   the input PSLG.                                                  */
+  if ((dodist < aodist) && (dodist < dadist)) {
+    if (offcenter && (b->offconstant > 0.0)) {
+      /* Find the position of the off-center, as described by Alper Ungor. */
+      dxoff = 0.5 * xdo - b->offconstant * ydo;
+      dyoff = 0.5 * ydo + b->offconstant * xdo;
+      /* If the off-center is closer to the origin than the */
+      /*   circumcenter, use the off-center instead.        */
+      if (dxoff * dxoff + dyoff * dyoff < dx * dx + dy * dy) {
+        dx = dxoff;
+        dy = dyoff;
+      }
+    }
+  } else if (aodist < dadist) {
+    if (offcenter && (b->offconstant > 0.0)) {
+      dxoff = 0.5 * xao + b->offconstant * yao;
+      dyoff = 0.5 * yao - b->offconstant * xao;
+      /* If the off-center is closer to the origin than the */
+      /*   circumcenter, use the off-center instead.        */
+      if (dxoff * dxoff + dyoff * dyoff < dx * dx + dy * dy) {
+        dx = dxoff;
+        dy = dyoff;
+      }
+    }
+  } else {
+    if (offcenter && (b->offconstant > 0.0)) {
+      dxoff = 0.5 * (tapex[0] - tdest[0]) -
+              b->offconstant * (tapex[1] - tdest[1]);
+      dyoff = 0.5 * (tapex[1] - tdest[1]) +
+              b->offconstant * (tapex[0] - tdest[0]);
+      /* If the off-center is closer to the destination than the */
+      /*   circumcenter, use the off-center instead.             */
+      if (dxoff * dxoff + dyoff * dyoff <
+          (dx - xdo) * (dx - xdo) + (dy - ydo) * (dy - ydo)) {
+        dx = xdo + dxoff;
+        dy = ydo + dyoff;
+      }
+    }
+  }
+
+  circumcenter[0] = torg[0] + dx;
+  circumcenter[1] = torg[1] + dy;
+
+  /* To interpolate vertex attributes for the new vertex inserted at */
+  /*   the circumcenter, define a coordinate system with a xi-axis,  */
+  /*   directed from the triangle's origin to its destination, and   */
+  /*   an eta-axis, directed from its origin to its apex.            */
+  /*   Calculate the xi and eta coordinates of the circumcenter.     */
+  *xi = (yao * dx - xao * dy) * (2.0 * denominator);
+  *eta = (xdo * dy - ydo * dx) * (2.0 * denominator);
+}
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Geometric primitives end here                             *********/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  triangleinit()   Initialize some variables.                              */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void triangleinit(struct mesh *m)
+#else /* not ANSI_DECLARATORS */
+void triangleinit(m)
+struct mesh *m;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  poolzero(&m->vertices);
+  poolzero(&m->triangles);
+  poolzero(&m->subsegs);
+  poolzero(&m->viri);
+  poolzero(&m->badsubsegs);
+  poolzero(&m->badtriangles);
+  poolzero(&m->flipstackers);
+  poolzero(&m->splaynodes);
+
+  m->recenttri.tri = (triangle *) NULL; /* No triangle has been visited yet. */
+  m->undeads = 0;                       /* No eliminated input vertices yet. */
+  m->samples = 1;         /* Point location should take at least one sample. */
+  m->checksegments = 0;   /* There are no segments in the triangulation yet. */
+  m->checkquality = 0;     /* The quality triangulation stage has not begun. */
+  m->incirclecount = m->counterclockcount = m->orient3dcount = 0;
+  m->hyperbolacount = m->circletopcount = m->circumcentercount = 0;
+  randomseed = 1;
+
+  exactinit();                     /* Initialize exact arithmetic constants. */
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  randomnation()   Generate a random number between 0 and `choices' - 1.   */
+/*                                                                           */
+/*  This is a simple linear congruential random number generator.  Hence, it */
+/*  is a bad random number generator, but good enough for most randomized    */
+/*  geometric algorithms.                                                    */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+unsigned long randomnation(unsigned int choices)
+#else /* not ANSI_DECLARATORS */
+unsigned long randomnation(choices)
+unsigned int choices;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  randomseed = (randomseed * 1366l + 150889l) % 714025l;
+  return randomseed / (714025l / choices + 1);
+}
+
+/********* Mesh quality testing routines begin here                  *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  checkmesh()   Test the mesh for topological consistency.                 */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+void checkmesh(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void checkmesh(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri triangleloop;
+  struct otri oppotri, oppooppotri;
+  vertex triorg, tridest, triapex;
+  vertex oppoorg, oppodest;
+  int horrors;
+  int saveexact;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+
+  /* Temporarily turn on exact arithmetic if it's off. */
+  saveexact = b->noexact;
+  b->noexact = 0;
+  if (!b->quiet) {
+    printf("  Checking consistency of mesh...\n");
+  }
+  horrors = 0;
+  /* Run through the list of triangles, checking each one. */
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  while (triangleloop.tri != (triangle *) NULL) {
+    /* Check all three edges of the triangle. */
+    for (triangleloop.orient = 0; triangleloop.orient < 3;
+         triangleloop.orient++) {
+      org(triangleloop, triorg);
+      dest(triangleloop, tridest);
+      if (triangleloop.orient == 0) {       /* Only test for inversion once. */
+        /* Test if the triangle is flat or inverted. */
+        apex(triangleloop, triapex);
+        if (counterclockwise(m, b, triorg, tridest, triapex) <= 0.0) {
+          printf("  !! !! Inverted ");
+          printtriangle(m, b, &triangleloop);
+          horrors++;
+        }
+      }
+      /* Find the neighboring triangle on this edge. */
+      sym(triangleloop, oppotri);
+      if (oppotri.tri != m->dummytri) {
+        /* Check that the triangle's neighbor knows it's a neighbor. */
+        sym(oppotri, oppooppotri);
+        if ((triangleloop.tri != oppooppotri.tri)
+            || (triangleloop.orient != oppooppotri.orient)) {
+          printf("  !! !! Asymmetric triangle-triangle bond:\n");
+          if (triangleloop.tri == oppooppotri.tri) {
+            printf("   (Right triangle, wrong orientation)\n");
+          }
+          printf("    First ");
+          printtriangle(m, b, &triangleloop);
+          printf("    Second (nonreciprocating) ");
+          printtriangle(m, b, &oppotri);
+          horrors++;
+        }
+        /* Check that both triangles agree on the identities */
+        /*   of their shared vertices.                       */
+        org(oppotri, oppoorg);
+        dest(oppotri, oppodest);
+        if ((triorg != oppodest) || (tridest != oppoorg)) {
+          printf("  !! !! Mismatched edge coordinates between two triangles:\n"
+                 );
+          printf("    First mismatched ");
+          printtriangle(m, b, &triangleloop);
+          printf("    Second mismatched ");
+          printtriangle(m, b, &oppotri);
+          horrors++;
+        }
+      }
+    }
+    triangleloop.tri = triangletraverse(m);
+  }
+  if (horrors == 0) {
+    if (!b->quiet) {
+      printf("  In my studied opinion, the mesh appears to be consistent.\n");
+    }
+  } else if (horrors == 1) {
+    printf("  !! !! !! !! Precisely one festering wound discovered.\n");
+  } else {
+    printf("  !! !! !! !! %d abominations witnessed.\n", horrors);
+  }
+  /* Restore the status of exact arithmetic. */
+  b->noexact = saveexact;
+}
+
+#endif /* not REDUCED */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  checkdelaunay()   Ensure that the mesh is (constrained) Delaunay.        */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+void checkdelaunay(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void checkdelaunay(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri triangleloop;
+  struct otri oppotri;
+  struct osub opposubseg;
+  vertex triorg, tridest, triapex;
+  vertex oppoapex;
+  int shouldbedelaunay;
+  int horrors;
+  int saveexact;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  /* Temporarily turn on exact arithmetic if it's off. */
+  saveexact = b->noexact;
+  b->noexact = 0;
+  if (!b->quiet) {
+    printf("  Checking Delaunay property of mesh...\n");
+  }
+  horrors = 0;
+  /* Run through the list of triangles, checking each one. */
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  while (triangleloop.tri != (triangle *) NULL) {
+    /* Check all three edges of the triangle. */
+    for (triangleloop.orient = 0; triangleloop.orient < 3;
+         triangleloop.orient++) {
+      org(triangleloop, triorg);
+      dest(triangleloop, tridest);
+      apex(triangleloop, triapex);
+      sym(triangleloop, oppotri);
+      apex(oppotri, oppoapex);
+      /* Only test that the edge is locally Delaunay if there is an   */
+      /*   adjoining triangle whose pointer is larger (to ensure that */
+      /*   each pair isn't tested twice).                             */
+      shouldbedelaunay = (oppotri.tri != m->dummytri) &&
+            !deadtri(oppotri.tri) && (triangleloop.tri < oppotri.tri) &&
+            (triorg != m->infvertex1) && (triorg != m->infvertex2) &&
+            (triorg != m->infvertex3) &&
+            (tridest != m->infvertex1) && (tridest != m->infvertex2) &&
+            (tridest != m->infvertex3) &&
+            (triapex != m->infvertex1) && (triapex != m->infvertex2) &&
+            (triapex != m->infvertex3) &&
+            (oppoapex != m->infvertex1) && (oppoapex != m->infvertex2) &&
+            (oppoapex != m->infvertex3);
+      if (m->checksegments && shouldbedelaunay) {
+        /* If a subsegment separates the triangles, then the edge is */
+        /*   constrained, so no local Delaunay test should be done.  */
+        tspivot(triangleloop, opposubseg);
+        if (opposubseg.ss != m->dummysub){
+          shouldbedelaunay = 0;
+        }
+      }
+      if (shouldbedelaunay) {
+        if (nonregular(m, b, triorg, tridest, triapex, oppoapex) > 0.0) {
+          if (!b->weighted) {
+            printf("  !! !! Non-Delaunay pair of triangles:\n");
+            printf("    First non-Delaunay ");
+            printtriangle(m, b, &triangleloop);
+            printf("    Second non-Delaunay ");
+          } else {
+            printf("  !! !! Non-regular pair of triangles:\n");
+            printf("    First non-regular ");
+            printtriangle(m, b, &triangleloop);
+            printf("    Second non-regular ");
+          }
+          printtriangle(m, b, &oppotri);
+          horrors++;
+        }
+      }
+    }
+    triangleloop.tri = triangletraverse(m);
+  }
+  if (horrors == 0) {
+    if (!b->quiet) {
+      printf(
+  "  By virtue of my perceptive intelligence, I declare the mesh Delaunay.\n");
+    }
+  } else if (horrors == 1) {
+    printf(
+         "  !! !! !! !! Precisely one terrifying transgression identified.\n");
+  } else {
+    printf("  !! !! !! !! %d obscenities viewed with horror.\n", horrors);
+  }
+  /* Restore the status of exact arithmetic. */
+  b->noexact = saveexact;
+}
+
+#endif /* not REDUCED */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  enqueuebadtriang()   Add a bad triangle data structure to the end of a   */
+/*                       queue.                                              */
+/*                                                                           */
+/*  The queue is actually a set of 4096 queues.  I use multiple queues to    */
+/*  give priority to smaller angles.  I originally implemented a heap, but   */
+/*  the queues are faster by a larger margin than I'd suspected.             */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void enqueuebadtriang(struct mesh *m, struct behavior *b,
+                      struct badtriang *badtri)
+#else /* not ANSI_DECLARATORS */
+void enqueuebadtriang(m, b, badtri)
+struct mesh *m;
+struct behavior *b;
+struct badtriang *badtri;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL length, multiplier;
+  int exponent, expincrement;
+  int queuenumber;
+  int posexponent;
+  int i;
+
+  if (b->verbose > 2) {
+    printf("  Queueing bad triangle:\n");
+    printf("    (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n",
+           badtri->triangorg[0], badtri->triangorg[1],
+           badtri->triangdest[0], badtri->triangdest[1],
+           badtri->triangapex[0], badtri->triangapex[1]);
+  }
+
+  /* Determine the appropriate queue to put the bad triangle into.    */
+  /*   Recall that the key is the square of its shortest edge length. */
+  if (badtri->key >= 1.0) {
+    length = badtri->key;
+    posexponent = 1;
+  } else {
+    /* `badtri->key' is 2.0 to a negative exponent, so we'll record that */
+    /*   fact and use the reciprocal of `badtri->key', which is > 1.0.   */
+    length = 1.0 / badtri->key;
+    posexponent = 0;
+  }
+  /* `length' is approximately 2.0 to what exponent?  The following code */
+  /*   determines the answer in time logarithmic in the exponent.        */
+  exponent = 0;
+  while (length > 2.0) {
+    /* Find an approximation by repeated squaring of two. */
+    expincrement = 1;
+    multiplier = 0.5;
+    while (length * multiplier * multiplier > 1.0) {
+      expincrement *= 2;
+      multiplier *= multiplier;
+    }
+    /* Reduce the value of `length', then iterate if necessary. */
+    exponent += expincrement;
+    length *= multiplier;
+  }
+  /* `length' is approximately squareroot(2.0) to what exponent? */
+  exponent = (int)(2.0 * exponent + (length > SQUAREROOTTWO));
+  /* `exponent' is now in the range 0...2047 for IEEE double precision.   */
+  /*   Choose a queue in the range 0...4095.  The shortest edges have the */
+  /*   highest priority (queue 4095).                                     */
+  if (posexponent) {
+    queuenumber = 2047 - exponent;
+  } else {
+    queuenumber = 2048 + exponent;
+  }
+
+  /* Are we inserting into an empty queue? */
+  if (m->queuefront[queuenumber] == (struct badtriang *) NULL) {
+    /* Yes, we are inserting into an empty queue.     */
+    /*   Will this become the highest-priority queue? */
+    if (queuenumber > m->firstnonemptyq) {
+      /* Yes, this is the highest-priority queue. */
+      m->nextnonemptyq[queuenumber] = m->firstnonemptyq;
+      m->firstnonemptyq = queuenumber;
+    } else {
+      /* No, this is not the highest-priority queue. */
+      /*   Find the queue with next higher priority. */
+      i = queuenumber + 1;
+      while (m->queuefront[i] == (struct badtriang *) NULL) {
+        i++;
+      }
+      /* Mark the newly nonempty queue as following a higher-priority queue. */
+      m->nextnonemptyq[queuenumber] = m->nextnonemptyq[i];
+      m->nextnonemptyq[i] = queuenumber;
+    }
+    /* Put the bad triangle at the beginning of the (empty) queue. */
+    m->queuefront[queuenumber] = badtri;
+  } else {
+    /* Add the bad triangle to the end of an already nonempty queue. */
+    m->queuetail[queuenumber]->nexttriang = badtri;
+  }
+  /* Maintain a pointer to the last triangle of the queue. */
+  m->queuetail[queuenumber] = badtri;
+  /* Newly enqueued bad triangle has no successor in the queue. */
+  badtri->nexttriang = (struct badtriang *) NULL;
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  enqueuebadtri()   Add a bad triangle to the end of a queue.              */
+/*                                                                           */
+/*  Allocates a badtriang data structure for the triangle, then passes it to */
+/*  enqueuebadtriang().                                                      */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void enqueuebadtri(struct mesh *m, struct behavior *b, struct otri *enqtri,
+                   REAL minedge, vertex enqapex, vertex enqorg, vertex enqdest)
+#else /* not ANSI_DECLARATORS */
+void enqueuebadtri(m, b, enqtri, minedge, enqapex, enqorg, enqdest)
+struct mesh *m;
+struct behavior *b;
+struct otri *enqtri;
+REAL minedge;
+vertex enqapex;
+vertex enqorg;
+vertex enqdest;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct badtriang *newbad;
+
+  /* Allocate space for the bad triangle. */
+  newbad = (struct badtriang *) poolalloc(&m->badtriangles);
+  newbad->poortri = encode(*enqtri);
+  newbad->key = minedge;
+  newbad->triangapex = enqapex;
+  newbad->triangorg = enqorg;
+  newbad->triangdest = enqdest;
+  enqueuebadtriang(m, b, newbad);
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  dequeuebadtriang()   Remove a triangle from the front of the queue.      */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+struct badtriang *dequeuebadtriang(struct mesh *m)
+#else /* not ANSI_DECLARATORS */
+struct badtriang *dequeuebadtriang(m)
+struct mesh *m;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct badtriang *result;
+
+  /* If no queues are nonempty, return NULL. */
+  if (m->firstnonemptyq < 0) {
+    return (struct badtriang *) NULL;
+  }
+  /* Find the first triangle of the highest-priority queue. */
+  result = m->queuefront[m->firstnonemptyq];
+  /* Remove the triangle from the queue. */
+  m->queuefront[m->firstnonemptyq] = result->nexttriang;
+  /* If this queue is now empty, note the new highest-priority */
+  /*   nonempty queue.                                         */
+  if (result == m->queuetail[m->firstnonemptyq]) {
+    m->firstnonemptyq = m->nextnonemptyq[m->firstnonemptyq];
+  }
+  return result;
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  checkseg4encroach()   Check a subsegment to see if it is encroached; add */
+/*                        it to the list if it is.                           */
+/*                                                                           */
+/*  A subsegment is encroached if there is a vertex in its diametral lens.   */
+/*  For Ruppert's algorithm (-D switch), the "diametral lens" is the         */
+/*  diametral circle.  For Chew's algorithm (default), the diametral lens is */
+/*  just big enough to enclose two isosceles triangles whose bases are the   */
+/*  subsegment.  Each of the two isosceles triangles has two angles equal    */
+/*  to `b->minangle'.                                                        */
+/*                                                                           */
+/*  Chew's algorithm does not require diametral lenses at all--but they save */
+/*  time.  Any vertex inside a subsegment's diametral lens implies that the  */
+/*  triangle adjoining the subsegment will be too skinny, so it's only a     */
+/*  matter of time before the encroaching vertex is deleted by Chew's        */
+/*  algorithm.  It's faster to simply not insert the doomed vertex in the    */
+/*  first place, which is why I use diametral lenses with Chew's algorithm.  */
+/*                                                                           */
+/*  Returns a nonzero value if the subsegment is encroached.                 */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+int checkseg4encroach(struct mesh *m, struct behavior *b,
+                      struct osub *testsubseg)
+#else /* not ANSI_DECLARATORS */
+int checkseg4encroach(m, b, testsubseg)
+struct mesh *m;
+struct behavior *b;
+struct osub *testsubseg;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri neighbortri;
+  struct osub testsym;
+  struct badsubseg *encroachedseg;
+  REAL dotproduct;
+  int encroached;
+  int sides;
+  vertex eorg, edest, eapex;
+  triangle ptr;                     /* Temporary variable used by stpivot(). */
+
+  encroached = 0;
+  sides = 0;
+
+  sorg(*testsubseg, eorg);
+  sdest(*testsubseg, edest);
+  /* Check one neighbor of the subsegment. */
+  stpivot(*testsubseg, neighbortri);
+  /* Does the neighbor exist, or is this a boundary edge? */
+  if (neighbortri.tri != m->dummytri) {
+    sides++;
+    /* Find a vertex opposite this subsegment. */
+    apex(neighbortri, eapex);
+    /* Check whether the apex is in the diametral lens of the subsegment */
+    /*   (the diametral circle if `conformdel' is set).  A dot product   */
+    /*   of two sides of the triangle is used to check whether the angle */
+    /*   at the apex is greater than (180 - 2 `minangle') degrees (for   */
+    /*   lenses; 90 degrees for diametral circles).                      */
+    dotproduct = (eorg[0] - eapex[0]) * (edest[0] - eapex[0]) +
+                 (eorg[1] - eapex[1]) * (edest[1] - eapex[1]);
+    if (dotproduct < 0.0) {
+      if (b->conformdel ||
+          (dotproduct * dotproduct >=
+           (2.0 * b->goodangle - 1.0) * (2.0 * b->goodangle - 1.0) *
+           ((eorg[0] - eapex[0]) * (eorg[0] - eapex[0]) +
+            (eorg[1] - eapex[1]) * (eorg[1] - eapex[1])) *
+           ((edest[0] - eapex[0]) * (edest[0] - eapex[0]) +
+            (edest[1] - eapex[1]) * (edest[1] - eapex[1])))) {
+        encroached = 1;
+      }
+    }
+  }
+  /* Check the other neighbor of the subsegment. */
+  ssym(*testsubseg, testsym);
+  stpivot(testsym, neighbortri);
+  /* Does the neighbor exist, or is this a boundary edge? */
+  if (neighbortri.tri != m->dummytri) {
+    sides++;
+    /* Find the other vertex opposite this subsegment. */
+    apex(neighbortri, eapex);
+    /* Check whether the apex is in the diametral lens of the subsegment */
+    /*   (or the diametral circle, if `conformdel' is set).              */
+    dotproduct = (eorg[0] - eapex[0]) * (edest[0] - eapex[0]) +
+                 (eorg[1] - eapex[1]) * (edest[1] - eapex[1]);
+    if (dotproduct < 0.0) {
+      if (b->conformdel ||
+          (dotproduct * dotproduct >=
+           (2.0 * b->goodangle - 1.0) * (2.0 * b->goodangle - 1.0) *
+           ((eorg[0] - eapex[0]) * (eorg[0] - eapex[0]) +
+            (eorg[1] - eapex[1]) * (eorg[1] - eapex[1])) *
+           ((edest[0] - eapex[0]) * (edest[0] - eapex[0]) +
+            (edest[1] - eapex[1]) * (edest[1] - eapex[1])))) {
+        encroached += 2;
+      }
+    }
+  }
+
+  if (encroached && (!b->nobisect || ((b->nobisect == 1) && (sides == 2)))) {
+    if (b->verbose > 2) {
+      printf(
+        "  Queueing encroached subsegment (%.12g, %.12g) (%.12g, %.12g).\n",
+        eorg[0], eorg[1], edest[0], edest[1]);
+    }
+    /* Add the subsegment to the list of encroached subsegments. */
+    /*   Be sure to get the orientation right.                   */
+    encroachedseg = (struct badsubseg *) poolalloc(&m->badsubsegs);
+    if (encroached == 1) {
+      encroachedseg->encsubseg = sencode(*testsubseg);
+      encroachedseg->subsegorg = eorg;
+      encroachedseg->subsegdest = edest;
+    } else {
+      encroachedseg->encsubseg = sencode(testsym);
+      encroachedseg->subsegorg = edest;
+      encroachedseg->subsegdest = eorg;
+    }
+  }
+
+  return encroached;
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  testtriangle()   Test a triangle for quality and size.                   */
+/*                                                                           */
+/*  Tests a triangle to see if it satisfies the minimum angle condition and  */
+/*  the maximum area condition.  Triangles that aren't up to spec are added  */
+/*  to the bad triangle queue.                                               */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void testtriangle(struct mesh *m, struct behavior *b, struct otri *testtri)
+#else /* not ANSI_DECLARATORS */
+void testtriangle(m, b, testtri)
+struct mesh *m;
+struct behavior *b;
+struct otri *testtri;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri tri1, tri2;
+  struct osub testsub;
+  vertex torg, tdest, tapex;
+  vertex base1, base2;
+  vertex org1, dest1, org2, dest2;
+  vertex joinvertex;
+  REAL dxod, dyod, dxda, dyda, dxao, dyao;
+  REAL dxod2, dyod2, dxda2, dyda2, dxao2, dyao2;
+  REAL apexlen, orglen, destlen, minedge;
+  REAL angle;
+  REAL area;
+  REAL dist1, dist2;
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+  triangle ptr;           /* Temporary variable used by oprev() and dnext(). */
+
+  org(*testtri, torg);
+  dest(*testtri, tdest);
+  apex(*testtri, tapex);
+  dxod = torg[0] - tdest[0];
+  dyod = torg[1] - tdest[1];
+  dxda = tdest[0] - tapex[0];
+  dyda = tdest[1] - tapex[1];
+  dxao = tapex[0] - torg[0];
+  dyao = tapex[1] - torg[1];
+  dxod2 = dxod * dxod;
+  dyod2 = dyod * dyod;
+  dxda2 = dxda * dxda;
+  dyda2 = dyda * dyda;
+  dxao2 = dxao * dxao;
+  dyao2 = dyao * dyao;
+  /* Find the lengths of the triangle's three edges. */
+  apexlen = dxod2 + dyod2;
+  orglen = dxda2 + dyda2;
+  destlen = dxao2 + dyao2;
+
+  if ((apexlen < orglen) && (apexlen < destlen)) {
+    /* The edge opposite the apex is shortest. */
+    minedge = apexlen;
+    /* Find the square of the cosine of the angle at the apex. */
+    angle = dxda * dxao + dyda * dyao;
+    angle = angle * angle / (orglen * destlen);
+    base1 = torg;
+    base2 = tdest;
+    otricopy(*testtri, tri1);
+  } else if (orglen < destlen) {
+    /* The edge opposite the origin is shortest. */
+    minedge = orglen;
+    /* Find the square of the cosine of the angle at the origin. */
+    angle = dxod * dxao + dyod * dyao;
+    angle = angle * angle / (apexlen * destlen);
+    base1 = tdest;
+    base2 = tapex;
+    lnext(*testtri, tri1);
+  } else {
+    /* The edge opposite the destination is shortest. */
+    minedge = destlen;
+    /* Find the square of the cosine of the angle at the destination. */
+    angle = dxod * dxda + dyod * dyda;
+    angle = angle * angle / (apexlen * orglen);
+    base1 = tapex;
+    base2 = torg;
+    lprev(*testtri, tri1);
+  }
+
+  if (b->vararea || b->fixedarea || b->usertest) {
+    /* Check whether the area is larger than permitted. */
+    area = 0.5 * (dxod * dyda - dyod * dxda);
+    if (b->fixedarea && (area > b->maxarea)) {
+      /* Add this triangle to the list of bad triangles. */
+      enqueuebadtri(m, b, testtri, minedge, tapex, torg, tdest);
+      return;
+    }
+
+    /* Nonpositive area constraints are treated as unconstrained. */
+    if ((b->vararea) && (area > areabound(*testtri)) &&
+        (areabound(*testtri) > 0.0)) {
+      /* Add this triangle to the list of bad triangles. */
+      enqueuebadtri(m, b, testtri, minedge, tapex, torg, tdest);
+      return;
+    }
+
+    if (b->usertest) {
+      /* Check whether the user thinks this triangle is too large. */
+      if (triunsuitable(torg, tdest, tapex, area)) {
+        enqueuebadtri(m, b, testtri, minedge, tapex, torg, tdest);
+        return;
+      }
+    }
+  }
+
+  /* Check whether the angle is smaller than permitted. */
+  if (angle > b->goodangle) {
+    /* Use the rules of Miller, Pav, and Walkington to decide that certain */
+    /*   triangles should not be split, even if they have bad angles.      */
+    /*   A skinny triangle is not split if its shortest edge subtends a    */
+    /*   small input angle, and both endpoints of the edge lie on a        */
+    /*   concentric circular shell.  For convenience, I make a small       */
+    /*   adjustment to that rule:  I check if the endpoints of the edge    */
+    /*   both lie in segment interiors, equidistant from the apex where    */
+    /*   the two segments meet.                                            */
+    /* First, check if both points lie in segment interiors.               */
+    if ((vertextype(base1) == SEGMENTVERTEX) &&
+        (vertextype(base2) == SEGMENTVERTEX)) {
+      /* Check if both points lie in a common segment.  If they do, the */
+      /*   skinny triangle is enqueued to be split as usual.            */
+      tspivot(tri1, testsub);
+      if (testsub.ss == m->dummysub) {
+        /* No common segment.  Find a subsegment that contains `torg'. */
+        otricopy(tri1, tri2);
+        do {
+          oprevself(tri1);
+          tspivot(tri1, testsub);
+        } while (testsub.ss == m->dummysub);
+        /* Find the endpoints of the containing segment. */
+        segorg(testsub, org1);
+        segdest(testsub, dest1);
+        /* Find a subsegment that contains `tdest'. */
+        do {
+          dnextself(tri2);
+          tspivot(tri2, testsub);
+        } while (testsub.ss == m->dummysub);
+        /* Find the endpoints of the containing segment. */
+        segorg(testsub, org2);
+        segdest(testsub, dest2);
+        /* Check if the two containing segments have an endpoint in common. */
+        joinvertex = (vertex) NULL;
+        if ((dest1[0] == org2[0]) && (dest1[1] == org2[1])) {
+          joinvertex = dest1;
+        } else if ((org1[0] == dest2[0]) && (org1[1] == dest2[1])) {
+          joinvertex = org1;
+        }
+        if (joinvertex != (vertex) NULL) {
+          /* Compute the distance from the common endpoint (of the two  */
+          /*   segments) to each of the endpoints of the shortest edge. */
+          dist1 = ((base1[0] - joinvertex[0]) * (base1[0] - joinvertex[0]) +
+                   (base1[1] - joinvertex[1]) * (base1[1] - joinvertex[1]));
+          dist2 = ((base2[0] - joinvertex[0]) * (base2[0] - joinvertex[0]) +
+                   (base2[1] - joinvertex[1]) * (base2[1] - joinvertex[1]));
+          /* If the two distances are equal, don't split the triangle. */
+          if ((dist1 < 1.001 * dist2) && (dist1 > 0.999 * dist2)) {
+            /* Return now to avoid enqueueing the bad triangle. */
+            return;
+          }
+        }
+      }
+    }
+
+    /* Add this triangle to the list of bad triangles. */
+    enqueuebadtri(m, b, testtri, minedge, tapex, torg, tdest);
+  }
+}
+
+#endif /* not CDT_ONLY */
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Mesh quality testing routines end here                    *********/
+
+/********* Point location routines begin here                        *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  makevertexmap()   Construct a mapping from vertices to triangles to      */
+/*                    improve the speed of point location for segment        */
+/*                    insertion.                                             */
+/*                                                                           */
+/*  Traverses all the triangles, and provides each corner of each triangle   */
+/*  with a pointer to that triangle.  Of course, pointers will be            */
+/*  overwritten by other pointers because (almost) each vertex is a corner   */
+/*  of several triangles, but in the end every vertex will point to some     */
+/*  triangle that contains it.                                               */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void makevertexmap(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void makevertexmap(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri triangleloop;
+  vertex triorg;
+
+  if (b->verbose) {
+    printf("    Constructing mapping from vertices to triangles.\n");
+  }
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  while (triangleloop.tri != (triangle *) NULL) {
+    /* Check all three vertices of the triangle. */
+    for (triangleloop.orient = 0; triangleloop.orient < 3;
+         triangleloop.orient++) {
+      org(triangleloop, triorg);
+      setvertex2tri(triorg, encode(triangleloop));
+    }
+    triangleloop.tri = triangletraverse(m);
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  preciselocate()   Find a triangle or edge containing a given point.      */
+/*                                                                           */
+/*  Begins its search from `searchtri'.  It is important that `searchtri'    */
+/*  be a handle with the property that `searchpoint' is strictly to the left */
+/*  of the edge denoted by `searchtri', or is collinear with that edge and   */
+/*  does not intersect that edge.  (In particular, `searchpoint' should not  */
+/*  be the origin or destination of that edge.)                              */
+/*                                                                           */
+/*  These conditions are imposed because preciselocate() is normally used in */
+/*  one of two situations:                                                   */
+/*                                                                           */
+/*  (1)  To try to find the location to insert a new point.  Normally, we    */
+/*       know an edge that the point is strictly to the left of.  In the     */
+/*       incremental Delaunay algorithm, that edge is a bounding box edge.   */
+/*       In Ruppert's Delaunay refinement algorithm for quality meshing,     */
+/*       that edge is the shortest edge of the triangle whose circumcenter   */
+/*       is being inserted.                                                  */
+/*                                                                           */
+/*  (2)  To try to find an existing point.  In this case, any edge on the    */
+/*       convex hull is a good starting edge.  You must screen out the       */
+/*       possibility that the vertex sought is an endpoint of the starting   */
+/*       edge before you call preciselocate().                               */
+/*                                                                           */
+/*  On completion, `searchtri' is a triangle that contains `searchpoint'.    */
+/*                                                                           */
+/*  This implementation differs from that given by Guibas and Stolfi.  It    */
+/*  walks from triangle to triangle, crossing an edge only if `searchpoint'  */
+/*  is on the other side of the line containing that edge.  After entering   */
+/*  a triangle, there are two edges by which one can leave that triangle.    */
+/*  If both edges are valid (`searchpoint' is on the other side of both      */
+/*  edges), one of the two is chosen by drawing a line perpendicular to      */
+/*  the entry edge (whose endpoints are `forg' and `fdest') passing through  */
+/*  `fapex'.  Depending on which side of this perpendicular `searchpoint'    */
+/*  falls on, an exit edge is chosen.                                        */
+/*                                                                           */
+/*  This implementation is empirically faster than the Guibas and Stolfi     */
+/*  point location routine (which I originally used), which tends to spiral  */
+/*  in toward its target.                                                    */
+/*                                                                           */
+/*  Returns ONVERTEX if the point lies on an existing vertex.  `searchtri'   */
+/*  is a handle whose origin is the existing vertex.                         */
+/*                                                                           */
+/*  Returns ONEDGE if the point lies on a mesh edge.  `searchtri' is a       */
+/*  handle whose primary edge is the edge on which the point lies.           */
+/*                                                                           */
+/*  Returns INTRIANGLE if the point lies strictly within a triangle.         */
+/*  `searchtri' is a handle on the triangle that contains the point.         */
+/*                                                                           */
+/*  Returns OUTSIDE if the point lies outside the mesh.  `searchtri' is a    */
+/*  handle whose primary edge the point is to the right of.  This might      */
+/*  occur when the circumcenter of a triangle falls just slightly outside    */
+/*  the mesh due to floating-point roundoff error.  It also occurs when      */
+/*  seeking a hole or region point that a foolish user has placed outside    */
+/*  the mesh.                                                                */
+/*                                                                           */
+/*  If `stopatsubsegment' is nonzero, the search will stop if it tries to    */
+/*  walk through a subsegment, and will return OUTSIDE.                      */
+/*                                                                           */
+/*  WARNING:  This routine is designed for convex triangulations, and will   */
+/*  not generally work after the holes and concavities have been carved.     */
+/*  However, it can still be used to find the circumcenter of a triangle, as */
+/*  long as the search is begun from the triangle in question.               */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+enum locateresult preciselocate(struct mesh *m, struct behavior *b,
+                                vertex searchpoint, struct otri *searchtri,
+                                int stopatsubsegment)
+#else /* not ANSI_DECLARATORS */
+enum locateresult preciselocate(m, b, searchpoint, searchtri, stopatsubsegment)
+struct mesh *m;
+struct behavior *b;
+vertex searchpoint;
+struct otri *searchtri;
+int stopatsubsegment;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri backtracktri;
+  struct osub checkedge;
+  vertex forg, fdest, fapex;
+  REAL orgorient, destorient;
+  int moveleft;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  if (b->verbose > 2) {
+    printf("  Searching for point (%.12g, %.12g).\n",
+           searchpoint[0], searchpoint[1]);
+  }
+  /* Where are we? */
+  org(*searchtri, forg);
+  dest(*searchtri, fdest);
+  apex(*searchtri, fapex);
+  while (1) {
+    if (b->verbose > 2) {
+      printf("    At (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n",
+             forg[0], forg[1], fdest[0], fdest[1], fapex[0], fapex[1]);
+    }
+    /* Check whether the apex is the point we seek. */
+    if ((fapex[0] == searchpoint[0]) && (fapex[1] == searchpoint[1])) {
+      lprevself(*searchtri);
+      return ONVERTEX;
+    }
+    /* Does the point lie on the other side of the line defined by the */
+    /*   triangle edge opposite the triangle's destination?            */
+    destorient = counterclockwise(m, b, forg, fapex, searchpoint);
+    /* Does the point lie on the other side of the line defined by the */
+    /*   triangle edge opposite the triangle's origin?                 */
+    orgorient = counterclockwise(m, b, fapex, fdest, searchpoint);
+    if (destorient > 0.0) {
+      if (orgorient > 0.0) {
+        /* Move left if the inner product of (fapex - searchpoint) and  */
+        /*   (fdest - forg) is positive.  This is equivalent to drawing */
+        /*   a line perpendicular to the line (forg, fdest) and passing */
+        /*   through `fapex', and determining which side of this line   */
+        /*   `searchpoint' falls on.                                    */
+        moveleft = (fapex[0] - searchpoint[0]) * (fdest[0] - forg[0]) +
+                   (fapex[1] - searchpoint[1]) * (fdest[1] - forg[1]) > 0.0;
+      } else {
+        moveleft = 1;
+      }
+    } else {
+      if (orgorient > 0.0) {
+        moveleft = 0;
+      } else {
+        /* The point we seek must be on the boundary of or inside this */
+        /*   triangle.                                                 */
+        if (destorient == 0.0) {
+          lprevself(*searchtri);
+          return ONEDGE;
+        }
+        if (orgorient == 0.0) {
+          lnextself(*searchtri);
+          return ONEDGE;
+        }
+        return INTRIANGLE;
+      }
+    }
+
+    /* Move to another triangle.  Leave a trace `backtracktri' in case */
+    /*   floating-point roundoff or some such bogey causes us to walk  */
+    /*   off a boundary of the triangulation.                          */
+    if (moveleft) {
+      lprev(*searchtri, backtracktri);
+      fdest = fapex;
+    } else {
+      lnext(*searchtri, backtracktri);
+      forg = fapex;
+    }
+    sym(backtracktri, *searchtri);
+
+    if (m->checksegments && stopatsubsegment) {
+      /* Check for walking through a subsegment. */
+      tspivot(backtracktri, checkedge);
+      if (checkedge.ss != m->dummysub) {
+        /* Go back to the last triangle. */
+        otricopy(backtracktri, *searchtri);
+        return OUTSIDE;
+      }
+    }
+    /* Check for walking right out of the triangulation. */
+    if (searchtri->tri == m->dummytri) {
+      /* Go back to the last triangle. */
+      otricopy(backtracktri, *searchtri);
+      return OUTSIDE;
+    }
+
+    apex(*searchtri, fapex);
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  locate()   Find a triangle or edge containing a given point.             */
+/*                                                                           */
+/*  Searching begins from one of:  the input `searchtri', a recently         */
+/*  encountered triangle `recenttri', or from a triangle chosen from a       */
+/*  random sample.  The choice is made by determining which triangle's       */
+/*  origin is closest to the point we are searching for.  Normally,          */
+/*  `searchtri' should be a handle on the convex hull of the triangulation.  */
+/*                                                                           */
+/*  Details on the random sampling method can be found in the Mucke, Saias,  */
+/*  and Zhu paper cited in the header of this code.                          */
+/*                                                                           */
+/*  On completion, `searchtri' is a triangle that contains `searchpoint'.    */
+/*                                                                           */
+/*  Returns ONVERTEX if the point lies on an existing vertex.  `searchtri'   */
+/*  is a handle whose origin is the existing vertex.                         */
+/*                                                                           */
+/*  Returns ONEDGE if the point lies on a mesh edge.  `searchtri' is a       */
+/*  handle whose primary edge is the edge on which the point lies.           */
+/*                                                                           */
+/*  Returns INTRIANGLE if the point lies strictly within a triangle.         */
+/*  `searchtri' is a handle on the triangle that contains the point.         */
+/*                                                                           */
+/*  Returns OUTSIDE if the point lies outside the mesh.  `searchtri' is a    */
+/*  handle whose primary edge the point is to the right of.  This might      */
+/*  occur when the circumcenter of a triangle falls just slightly outside    */
+/*  the mesh due to floating-point roundoff error.  It also occurs when      */
+/*  seeking a hole or region point that a foolish user has placed outside    */
+/*  the mesh.                                                                */
+/*                                                                           */
+/*  WARNING:  This routine is designed for convex triangulations, and will   */
+/*  not generally work after the holes and concavities have been carved.     */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+enum locateresult locate(struct mesh *m, struct behavior *b,
+                         vertex searchpoint, struct otri *searchtri)
+#else /* not ANSI_DECLARATORS */
+enum locateresult locate(m, b, searchpoint, searchtri)
+struct mesh *m;
+struct behavior *b;
+vertex searchpoint;
+struct otri *searchtri;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  VOID **sampleblock;
+  char *firsttri;
+  struct otri sampletri;
+  vertex torg, tdest;
+  unsigned long alignptr;
+  REAL searchdist, dist;
+  REAL ahead;
+  long samplesperblock, totalsamplesleft, samplesleft;
+  long population, totalpopulation;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+
+  if (b->verbose > 2) {
+    printf("  Randomly sampling for a triangle near point (%.12g, %.12g).\n",
+           searchpoint[0], searchpoint[1]);
+  }
+  /* Record the distance from the suggested starting triangle to the */
+  /*   point we seek.                                                */
+  org(*searchtri, torg);
+  searchdist = (searchpoint[0] - torg[0]) * (searchpoint[0] - torg[0]) +
+               (searchpoint[1] - torg[1]) * (searchpoint[1] - torg[1]);
+  if (b->verbose > 2) {
+    printf("    Boundary triangle has origin (%.12g, %.12g).\n",
+           torg[0], torg[1]);
+  }
+
+  /* If a recently encountered triangle has been recorded and has not been */
+  /*   deallocated, test it as a good starting point.                      */
+  if (m->recenttri.tri != (triangle *) NULL) {
+    if (!deadtri(m->recenttri.tri)) {
+      org(m->recenttri, torg);
+      if ((torg[0] == searchpoint[0]) && (torg[1] == searchpoint[1])) {
+        otricopy(m->recenttri, *searchtri);
+        return ONVERTEX;
+      }
+      dist = (searchpoint[0] - torg[0]) * (searchpoint[0] - torg[0]) +
+             (searchpoint[1] - torg[1]) * (searchpoint[1] - torg[1]);
+      if (dist < searchdist) {
+        otricopy(m->recenttri, *searchtri);
+        searchdist = dist;
+        if (b->verbose > 2) {
+          printf("    Choosing recent triangle with origin (%.12g, %.12g).\n",
+                 torg[0], torg[1]);
+        }
+      }
+    }
+  }
+
+  /* The number of random samples taken is proportional to the cube root of */
+  /*   the number of triangles in the mesh.  The next bit of code assumes   */
+  /*   that the number of triangles increases monotonically (or at least    */
+  /*   doesn't decrease enough to matter).                                  */
+  while (SAMPLEFACTOR * m->samples * m->samples * m->samples <
+         m->triangles.items) {
+    m->samples++;
+  }
+
+  /* We'll draw ceiling(samples * TRIPERBLOCK / maxitems) random samples  */
+  /*   from each block of triangles (except the first)--until we meet the */
+  /*   sample quota.  The ceiling means that blocks at the end might be   */
+  /*   neglected, but I don't care.                                       */
+  samplesperblock = (m->samples * TRIPERBLOCK - 1) / m->triangles.maxitems + 1;
+  /* We'll draw ceiling(samples * itemsfirstblock / maxitems) random samples */
+  /*   from the first block of triangles.                                    */
+  samplesleft = (m->samples * m->triangles.itemsfirstblock - 1) /
+                m->triangles.maxitems + 1;
+  totalsamplesleft = m->samples;
+  population = m->triangles.itemsfirstblock;
+  totalpopulation = m->triangles.maxitems;
+  sampleblock = m->triangles.firstblock;
+  sampletri.orient = 0;
+  while (totalsamplesleft > 0) {
+    /* If we're in the last block, `population' needs to be corrected. */
+    if (population > totalpopulation) {
+      population = totalpopulation;
+    }
+    /* Find a pointer to the first triangle in the block. */
+    alignptr = (unsigned long) (sampleblock + 1);
+    firsttri = (char *) (alignptr +
+                         (unsigned long) m->triangles.alignbytes -
+                         (alignptr %
+                          (unsigned long) m->triangles.alignbytes));
+
+    /* Choose `samplesleft' randomly sampled triangles in this block. */
+    do {
+      sampletri.tri = (triangle *) (firsttri +
+                                    (randomnation((unsigned int) population) *
+                                     m->triangles.itembytes));
+      if (!deadtri(sampletri.tri)) {
+        org(sampletri, torg);
+        dist = (searchpoint[0] - torg[0]) * (searchpoint[0] - torg[0]) +
+               (searchpoint[1] - torg[1]) * (searchpoint[1] - torg[1]);
+        if (dist < searchdist) {
+          otricopy(sampletri, *searchtri);
+          searchdist = dist;
+          if (b->verbose > 2) {
+            printf("    Choosing triangle with origin (%.12g, %.12g).\n",
+                   torg[0], torg[1]);
+          }
+        }
+      }
+
+      samplesleft--;
+      totalsamplesleft--;
+    } while ((samplesleft > 0) && (totalsamplesleft > 0));
+
+    if (totalsamplesleft > 0) {
+      sampleblock = (VOID **) *sampleblock;
+      samplesleft = samplesperblock;
+      totalpopulation -= population;
+      population = TRIPERBLOCK;
+    }
+  }
+
+  /* Where are we? */
+  org(*searchtri, torg);
+  dest(*searchtri, tdest);
+  /* Check the starting triangle's vertices. */
+  if ((torg[0] == searchpoint[0]) && (torg[1] == searchpoint[1])) {
+    return ONVERTEX;
+  }
+  if ((tdest[0] == searchpoint[0]) && (tdest[1] == searchpoint[1])) {
+    lnextself(*searchtri);
+    return ONVERTEX;
+  }
+  /* Orient `searchtri' to fit the preconditions of calling preciselocate(). */
+  ahead = counterclockwise(m, b, torg, tdest, searchpoint);
+  if (ahead < 0.0) {
+    /* Turn around so that `searchpoint' is to the left of the */
+    /*   edge specified by `searchtri'.                        */
+    symself(*searchtri);
+  } else if (ahead == 0.0) {
+    /* Check if `searchpoint' is between `torg' and `tdest'. */
+    if (((torg[0] < searchpoint[0]) == (searchpoint[0] < tdest[0])) &&
+        ((torg[1] < searchpoint[1]) == (searchpoint[1] < tdest[1]))) {
+      return ONEDGE;
+    }
+  }
+  return preciselocate(m, b, searchpoint, searchtri, 0);
+}
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Point location routines end here                          *********/
+
+/********* Mesh transformation routines begin here                   *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  insertsubseg()   Create a new subsegment and insert it between two       */
+/*                   triangles.                                              */
+/*                                                                           */
+/*  The new subsegment is inserted at the edge described by the handle       */
+/*  `tri'.  Its vertices are properly initialized.  The marker `subsegmark'  */
+/*  is applied to the subsegment and, if appropriate, its vertices.          */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void insertsubseg(struct mesh *m, struct behavior *b, struct otri *tri,
+                  int subsegmark)
+#else /* not ANSI_DECLARATORS */
+void insertsubseg(m, b, tri, subsegmark)
+struct mesh *m;
+struct behavior *b;
+struct otri *tri;             /* Edge at which to insert the new subsegment. */
+int subsegmark;                            /* Marker for the new subsegment. */
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri oppotri;
+  struct osub newsubseg;
+  vertex triorg, tridest;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  org(*tri, triorg);
+  dest(*tri, tridest);
+  /* Mark vertices if possible. */
+  if (vertexmark(triorg) == 0) {
+    setvertexmark(triorg, subsegmark);
+  }
+  if (vertexmark(tridest) == 0) {
+    setvertexmark(tridest, subsegmark);
+  }
+  /* Check if there's already a subsegment here. */
+  tspivot(*tri, newsubseg);
+  if (newsubseg.ss == m->dummysub) {
+    /* Make new subsegment and initialize its vertices. */
+    makesubseg(m, &newsubseg);
+    setsorg(newsubseg, tridest);
+    setsdest(newsubseg, triorg);
+    setsegorg(newsubseg, tridest);
+    setsegdest(newsubseg, triorg);
+    /* Bond new subsegment to the two triangles it is sandwiched between. */
+    /*   Note that the facing triangle `oppotri' might be equal to        */
+    /*   `dummytri' (outer space), but the new subsegment is bonded to it */
+    /*   all the same.                                                    */
+    tsbond(*tri, newsubseg);
+    sym(*tri, oppotri);
+    ssymself(newsubseg);
+    tsbond(oppotri, newsubseg);
+    setmark(newsubseg, subsegmark);
+    if (b->verbose > 2) {
+      printf("  Inserting new ");
+      printsubseg(m, b, &newsubseg);
+    }
+  } else {
+    if (mark(newsubseg) == 0) {
+      setmark(newsubseg, subsegmark);
+    }
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  Terminology                                                              */
+/*                                                                           */
+/*  A "local transformation" replaces a small set of triangles with another  */
+/*  set of triangles.  This may or may not involve inserting or deleting a   */
+/*  vertex.                                                                  */
+/*                                                                           */
+/*  The term "casing" is used to describe the set of triangles that are      */
+/*  attached to the triangles being transformed, but are not transformed     */
+/*  themselves.  Think of the casing as a fixed hollow structure inside      */
+/*  which all the action happens.  A "casing" is only defined relative to    */
+/*  a single transformation; each occurrence of a transformation will        */
+/*  involve a different casing.                                              */
+/*                                                                           */
+/*****************************************************************************/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  flip()   Transform two triangles to two different triangles by flipping  */
+/*           an edge counterclockwise within a quadrilateral.                */
+/*                                                                           */
+/*  Imagine the original triangles, abc and bad, oriented so that the        */
+/*  shared edge ab lies in a horizontal plane, with the vertex b on the left */
+/*  and the vertex a on the right.  The vertex c lies below the edge, and    */
+/*  the vertex d lies above the edge.  The `flipedge' handle holds the edge  */
+/*  ab of triangle abc, and is directed left, from vertex a to vertex b.     */
+/*                                                                           */
+/*  The triangles abc and bad are deleted and replaced by the triangles cdb  */
+/*  and dca.  The triangles that represent abc and bad are NOT deallocated;  */
+/*  they are reused for dca and cdb, respectively.  Hence, any handles that  */
+/*  may have held the original triangles are still valid, although not       */
+/*  directed as they were before.                                            */
+/*                                                                           */
+/*  Upon completion of this routine, the `flipedge' handle holds the edge    */
+/*  dc of triangle dca, and is directed down, from vertex d to vertex c.     */
+/*  (Hence, the two triangles have rotated counterclockwise.)                */
+/*                                                                           */
+/*  WARNING:  This transformation is geometrically valid only if the         */
+/*  quadrilateral adbc is convex.  Furthermore, this transformation is       */
+/*  valid only if there is not a subsegment between the triangles abc and    */
+/*  bad.  This routine does not check either of these preconditions, and     */
+/*  it is the responsibility of the calling routine to ensure that they are  */
+/*  met.  If they are not, the streets shall be filled with wailing and      */
+/*  gnashing of teeth.                                                       */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void flip(struct mesh *m, struct behavior *b, struct otri *flipedge)
+#else /* not ANSI_DECLARATORS */
+void flip(m, b, flipedge)
+struct mesh *m;
+struct behavior *b;
+struct otri *flipedge;                    /* Handle for the triangle abc. */
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri botleft, botright;
+  struct otri topleft, topright;
+  struct otri top;
+  struct otri botlcasing, botrcasing;
+  struct otri toplcasing, toprcasing;
+  struct osub botlsubseg, botrsubseg;
+  struct osub toplsubseg, toprsubseg;
+  vertex leftvertex, rightvertex, botvertex;
+  vertex farvertex;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  /* Identify the vertices of the quadrilateral. */
+  org(*flipedge, rightvertex);
+  dest(*flipedge, leftvertex);
+  apex(*flipedge, botvertex);
+  sym(*flipedge, top);
+#ifdef SELF_CHECK
+  if (top.tri == m->dummytri) {
+    printf("Internal error in flip():  Attempt to flip on boundary.\n");
+    lnextself(*flipedge);
+    return;
+  }
+  if (m->checksegments) {
+    tspivot(*flipedge, toplsubseg);
+    if (toplsubseg.ss != m->dummysub) {
+      printf("Internal error in flip():  Attempt to flip a segment.\n");
+      lnextself(*flipedge);
+      return;
+    }
+  }
+#endif /* SELF_CHECK */
+  apex(top, farvertex);
+
+  /* Identify the casing of the quadrilateral. */
+  lprev(top, topleft);
+  sym(topleft, toplcasing);
+  lnext(top, topright);
+  sym(topright, toprcasing);
+  lnext(*flipedge, botleft);
+  sym(botleft, botlcasing);
+  lprev(*flipedge, botright);
+  sym(botright, botrcasing);
+  /* Rotate the quadrilateral one-quarter turn counterclockwise. */
+  bond(topleft, botlcasing);
+  bond(botleft, botrcasing);
+  bond(botright, toprcasing);
+  bond(topright, toplcasing);
+
+  if (m->checksegments) {
+    /* Check for subsegments and rebond them to the quadrilateral. */
+    tspivot(topleft, toplsubseg);
+    tspivot(botleft, botlsubseg);
+    tspivot(botright, botrsubseg);
+    tspivot(topright, toprsubseg);
+    if (toplsubseg.ss == m->dummysub) {
+      tsdissolve(topright);
+    } else {
+      tsbond(topright, toplsubseg);
+    }
+    if (botlsubseg.ss == m->dummysub) {
+      tsdissolve(topleft);
+    } else {
+      tsbond(topleft, botlsubseg);
+    }
+    if (botrsubseg.ss == m->dummysub) {
+      tsdissolve(botleft);
+    } else {
+      tsbond(botleft, botrsubseg);
+    }
+    if (toprsubseg.ss == m->dummysub) {
+      tsdissolve(botright);
+    } else {
+      tsbond(botright, toprsubseg);
+    }
+  }
+
+  /* New vertex assignments for the rotated quadrilateral. */
+  setorg(*flipedge, farvertex);
+  setdest(*flipedge, botvertex);
+  setapex(*flipedge, rightvertex);
+  setorg(top, botvertex);
+  setdest(top, farvertex);
+  setapex(top, leftvertex);
+  if (b->verbose > 2) {
+    printf("  Edge flip results in left ");
+    printtriangle(m, b, &top);
+    printf("  and right ");
+    printtriangle(m, b, flipedge);
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  unflip()   Transform two triangles to two different triangles by         */
+/*             flipping an edge clockwise within a quadrilateral.  Reverses  */
+/*             the flip() operation so that the data structures representing */
+/*             the triangles are back where they were before the flip().     */
+/*                                                                           */
+/*  Imagine the original triangles, abc and bad, oriented so that the        */
+/*  shared edge ab lies in a horizontal plane, with the vertex b on the left */
+/*  and the vertex a on the right.  The vertex c lies below the edge, and    */
+/*  the vertex d lies above the edge.  The `flipedge' handle holds the edge  */
+/*  ab of triangle abc, and is directed left, from vertex a to vertex b.     */
+/*                                                                           */
+/*  The triangles abc and bad are deleted and replaced by the triangles cdb  */
+/*  and dca.  The triangles that represent abc and bad are NOT deallocated;  */
+/*  they are reused for cdb and dca, respectively.  Hence, any handles that  */
+/*  may have held the original triangles are still valid, although not       */
+/*  directed as they were before.                                            */
+/*                                                                           */
+/*  Upon completion of this routine, the `flipedge' handle holds the edge    */
+/*  cd of triangle cdb, and is directed up, from vertex c to vertex d.       */
+/*  (Hence, the two triangles have rotated clockwise.)                       */
+/*                                                                           */
+/*  WARNING:  This transformation is geometrically valid only if the         */
+/*  quadrilateral adbc is convex.  Furthermore, this transformation is       */
+/*  valid only if there is not a subsegment between the triangles abc and    */
+/*  bad.  This routine does not check either of these preconditions, and     */
+/*  it is the responsibility of the calling routine to ensure that they are  */
+/*  met.  If they are not, the streets shall be filled with wailing and      */
+/*  gnashing of teeth.                                                       */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void unflip(struct mesh *m, struct behavior *b, struct otri *flipedge)
+#else /* not ANSI_DECLARATORS */
+void unflip(m, b, flipedge)
+struct mesh *m;
+struct behavior *b;
+struct otri *flipedge;                    /* Handle for the triangle abc. */
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri botleft, botright;
+  struct otri topleft, topright;
+  struct otri top;
+  struct otri botlcasing, botrcasing;
+  struct otri toplcasing, toprcasing;
+  struct osub botlsubseg, botrsubseg;
+  struct osub toplsubseg, toprsubseg;
+  vertex leftvertex, rightvertex, botvertex;
+  vertex farvertex;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  /* Identify the vertices of the quadrilateral. */
+  org(*flipedge, rightvertex);
+  dest(*flipedge, leftvertex);
+  apex(*flipedge, botvertex);
+  sym(*flipedge, top);
+#ifdef SELF_CHECK
+  if (top.tri == m->dummytri) {
+    printf("Internal error in unflip():  Attempt to flip on boundary.\n");
+    lnextself(*flipedge);
+    return;
+  }
+  if (m->checksegments) {
+    tspivot(*flipedge, toplsubseg);
+    if (toplsubseg.ss != m->dummysub) {
+      printf("Internal error in unflip():  Attempt to flip a subsegment.\n");
+      lnextself(*flipedge);
+      return;
+    }
+  }
+#endif /* SELF_CHECK */
+  apex(top, farvertex);
+
+  /* Identify the casing of the quadrilateral. */
+  lprev(top, topleft);
+  sym(topleft, toplcasing);
+  lnext(top, topright);
+  sym(topright, toprcasing);
+  lnext(*flipedge, botleft);
+  sym(botleft, botlcasing);
+  lprev(*flipedge, botright);
+  sym(botright, botrcasing);
+  /* Rotate the quadrilateral one-quarter turn clockwise. */
+  bond(topleft, toprcasing);
+  bond(botleft, toplcasing);
+  bond(botright, botlcasing);
+  bond(topright, botrcasing);
+
+  if (m->checksegments) {
+    /* Check for subsegments and rebond them to the quadrilateral. */
+    tspivot(topleft, toplsubseg);
+    tspivot(botleft, botlsubseg);
+    tspivot(botright, botrsubseg);
+    tspivot(topright, toprsubseg);
+    if (toplsubseg.ss == m->dummysub) {
+      tsdissolve(botleft);
+    } else {
+      tsbond(botleft, toplsubseg);
+    }
+    if (botlsubseg.ss == m->dummysub) {
+      tsdissolve(botright);
+    } else {
+      tsbond(botright, botlsubseg);
+    }
+    if (botrsubseg.ss == m->dummysub) {
+      tsdissolve(topright);
+    } else {
+      tsbond(topright, botrsubseg);
+    }
+    if (toprsubseg.ss == m->dummysub) {
+      tsdissolve(topleft);
+    } else {
+      tsbond(topleft, toprsubseg);
+    }
+  }
+
+  /* New vertex assignments for the rotated quadrilateral. */
+  setorg(*flipedge, botvertex);
+  setdest(*flipedge, farvertex);
+  setapex(*flipedge, leftvertex);
+  setorg(top, farvertex);
+  setdest(top, botvertex);
+  setapex(top, rightvertex);
+  if (b->verbose > 2) {
+    printf("  Edge unflip results in left ");
+    printtriangle(m, b, flipedge);
+    printf("  and right ");
+    printtriangle(m, b, &top);
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  insertvertex()   Insert a vertex into a Delaunay triangulation,          */
+/*                   performing flips as necessary to maintain the Delaunay  */
+/*                   property.                                               */
+/*                                                                           */
+/*  The point `insertvertex' is located.  If `searchtri.tri' is not NULL,    */
+/*  the search for the containing triangle begins from `searchtri'.  If      */
+/*  `searchtri.tri' is NULL, a full point location procedure is called.      */
+/*  If `insertvertex' is found inside a triangle, the triangle is split into */
+/*  three; if `insertvertex' lies on an edge, the edge is split in two,      */
+/*  thereby splitting the two adjacent triangles into four.  Edge flips are  */
+/*  used to restore the Delaunay property.  If `insertvertex' lies on an     */
+/*  existing vertex, no action is taken, and the value DUPLICATEVERTEX is    */
+/*  returned.  On return, `searchtri' is set to a handle whose origin is the */
+/*  existing vertex.                                                         */
+/*                                                                           */
+/*  Normally, the parameter `splitseg' is set to NULL, implying that no      */
+/*  subsegment should be split.  In this case, if `insertvertex' is found to */
+/*  lie on a segment, no action is taken, and the value VIOLATINGVERTEX is   */
+/*  returned.  On return, `searchtri' is set to a handle whose primary edge  */
+/*  is the violated subsegment.                                              */
+/*                                                                           */
+/*  If the calling routine wishes to split a subsegment by inserting a       */
+/*  vertex in it, the parameter `splitseg' should be that subsegment.  In    */
+/*  this case, `searchtri' MUST be the triangle handle reached by pivoting   */
+/*  from that subsegment; no point location is done.                         */
+/*                                                                           */
+/*  `segmentflaws' and `triflaws' are flags that indicate whether or not     */
+/*  there should be checks for the creation of encroached subsegments or bad */
+/*  quality triangles.  If a newly inserted vertex encroaches upon           */
+/*  subsegments, these subsegments are added to the list of subsegments to   */
+/*  be split if `segmentflaws' is set.  If bad triangles are created, these  */
+/*  are added to the queue if `triflaws' is set.                             */
+/*                                                                           */
+/*  If a duplicate vertex or violated segment does not prevent the vertex    */
+/*  from being inserted, the return value will be ENCROACHINGVERTEX if the   */
+/*  vertex encroaches upon a subsegment (and checking is enabled), or        */
+/*  SUCCESSFULVERTEX otherwise.  In either case, `searchtri' is set to a     */
+/*  handle whose origin is the newly inserted vertex.                        */
+/*                                                                           */
+/*  insertvertex() does not use flip() for reasons of speed; some            */
+/*  information can be reused from edge flip to edge flip, like the          */
+/*  locations of subsegments.                                                */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+enum insertvertexresult insertvertex(struct mesh *m, struct behavior *b,
+                                     vertex newvertex, struct otri *searchtri,
+                                     struct osub *splitseg,
+                                     int segmentflaws, int triflaws)
+#else /* not ANSI_DECLARATORS */
+enum insertvertexresult insertvertex(m, b, newvertex, searchtri, splitseg,
+                                     segmentflaws, triflaws)
+struct mesh *m;
+struct behavior *b;
+vertex newvertex;
+struct otri *searchtri;
+struct osub *splitseg;
+int segmentflaws;
+int triflaws;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri horiz;
+  struct otri top;
+  struct otri botleft, botright;
+  struct otri topleft, topright;
+  struct otri newbotleft, newbotright;
+  struct otri newtopright;
+  struct otri botlcasing, botrcasing;
+  struct otri toplcasing, toprcasing;
+  struct otri testtri;
+  struct osub botlsubseg, botrsubseg;
+  struct osub toplsubseg, toprsubseg;
+  struct osub brokensubseg;
+  struct osub checksubseg;
+  struct osub rightsubseg;
+  struct osub newsubseg;
+  struct badsubseg *encroached;
+  struct flipstacker *newflip;
+  vertex first;
+  vertex leftvertex, rightvertex, botvertex, topvertex, farvertex;
+  vertex segmentorg, segmentdest;
+  REAL attrib;
+  REAL area;
+  enum insertvertexresult success;
+  enum locateresult intersect;
+  int doflip;
+  int mirrorflag;
+  int enq;
+  int i;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+  subseg sptr;         /* Temporary variable used by spivot() and tspivot(). */
+
+  if (b->verbose > 1) {
+    printf("  Inserting (%.12g, %.12g).\n", newvertex[0], newvertex[1]);
+  }
+
+  if (splitseg == (struct osub *) NULL) {
+    /* Find the location of the vertex to be inserted.  Check if a good */
+    /*   starting triangle has already been provided by the caller.     */
+    if (searchtri->tri == m->dummytri) {
+      /* Find a boundary triangle. */
+      horiz.tri = m->dummytri;
+      horiz.orient = 0;
+      symself(horiz);
+      /* Search for a triangle containing `newvertex'. */
+      intersect = locate(m, b, newvertex, &horiz);
+    } else {
+      /* Start searching from the triangle provided by the caller. */
+      otricopy(*searchtri, horiz);
+      intersect = preciselocate(m, b, newvertex, &horiz, 1);
+    }
+  } else {
+    /* The calling routine provides the subsegment in which */
+    /*   the vertex is inserted.                             */
+    otricopy(*searchtri, horiz);
+    intersect = ONEDGE;
+  }
+
+  if (intersect == ONVERTEX) {
+    /* There's already a vertex there.  Return in `searchtri' a triangle */
+    /*   whose origin is the existing vertex.                            */
+    otricopy(horiz, *searchtri);
+    otricopy(horiz, m->recenttri);
+    return DUPLICATEVERTEX;
+  }
+  if ((intersect == ONEDGE) || (intersect == OUTSIDE)) {
+    /* The vertex falls on an edge or boundary. */
+    if (m->checksegments && (splitseg == (struct osub *) NULL)) {
+      /* Check whether the vertex falls on a subsegment. */
+      tspivot(horiz, brokensubseg);
+      if (brokensubseg.ss != m->dummysub) {
+        /* The vertex falls on a subsegment, and hence will not be inserted. */
+        if (segmentflaws) {
+          enq = b->nobisect != 2;
+          if (enq && (b->nobisect == 1)) {
+            /* This subsegment may be split only if it is an */
+            /*   internal boundary.                          */
+            sym(horiz, testtri);
+            enq = testtri.tri != m->dummytri;
+          }
+          if (enq) {
+            /* Add the subsegment to the list of encroached subsegments. */
+            encroached = (struct badsubseg *) poolalloc(&m->badsubsegs);
+            encroached->encsubseg = sencode(brokensubseg);
+            sorg(brokensubseg, encroached->subsegorg);
+            sdest(brokensubseg, encroached->subsegdest);
+            if (b->verbose > 2) {
+              printf(
+          "  Queueing encroached subsegment (%.12g, %.12g) (%.12g, %.12g).\n",
+                     encroached->subsegorg[0], encroached->subsegorg[1],
+                     encroached->subsegdest[0], encroached->subsegdest[1]);
+            }
+          }
+        }
+        /* Return a handle whose primary edge contains the vertex, */
+        /*   which has not been inserted.                          */
+        otricopy(horiz, *searchtri);
+        otricopy(horiz, m->recenttri);
+        return VIOLATINGVERTEX;
+      }
+    }
+
+    /* Insert the vertex on an edge, dividing one triangle into two (if */
+    /*   the edge lies on a boundary) or two triangles into four.       */
+    lprev(horiz, botright);
+    sym(botright, botrcasing);
+    sym(horiz, topright);
+    /* Is there a second triangle?  (Or does this edge lie on a boundary?) */
+    mirrorflag = topright.tri != m->dummytri;
+    if (mirrorflag) {
+      lnextself(topright);
+      sym(topright, toprcasing);
+      maketriangle(m, b, &newtopright);
+    } else {
+      /* Splitting a boundary edge increases the number of boundary edges. */
+      m->hullsize++;
+    }
+    maketriangle(m, b, &newbotright);
+
+    /* Set the vertices of changed and new triangles. */
+    org(horiz, rightvertex);
+    dest(horiz, leftvertex);
+    apex(horiz, botvertex);
+    setorg(newbotright, botvertex);
+    setdest(newbotright, rightvertex);
+    setapex(newbotright, newvertex);
+    setorg(horiz, newvertex);
+    for (i = 0; i < m->eextras; i++) {
+      /* Set the element attributes of a new triangle. */
+      setelemattribute(newbotright, i, elemattribute(botright, i));
+    }
+    if (b->vararea) {
+      /* Set the area constraint of a new triangle. */
+      setareabound(newbotright, areabound(botright));
+    }
+    if (mirrorflag) {
+      dest(topright, topvertex);
+      setorg(newtopright, rightvertex);
+      setdest(newtopright, topvertex);
+      setapex(newtopright, newvertex);
+      setorg(topright, newvertex);
+      for (i = 0; i < m->eextras; i++) {
+        /* Set the element attributes of another new triangle. */
+        setelemattribute(newtopright, i, elemattribute(topright, i));
+      }
+      if (b->vararea) {
+        /* Set the area constraint of another new triangle. */
+        setareabound(newtopright, areabound(topright));
+      }
+    }
+
+    /* There may be subsegments that need to be bonded */
+    /*   to the new triangle(s).                       */
+    if (m->checksegments) {
+      tspivot(botright, botrsubseg);
+      if (botrsubseg.ss != m->dummysub) {
+        tsdissolve(botright);
+        tsbond(newbotright, botrsubseg);
+      }
+      if (mirrorflag) {
+        tspivot(topright, toprsubseg);
+        if (toprsubseg.ss != m->dummysub) {
+          tsdissolve(topright);
+          tsbond(newtopright, toprsubseg);
+        }
+      }
+    }
+
+    /* Bond the new triangle(s) to the surrounding triangles. */
+    bond(newbotright, botrcasing);
+    lprevself(newbotright);
+    bond(newbotright, botright);
+    lprevself(newbotright);
+    if (mirrorflag) {
+      bond(newtopright, toprcasing);
+      lnextself(newtopright);
+      bond(newtopright, topright);
+      lnextself(newtopright);
+      bond(newtopright, newbotright);
+    }
+
+    if (splitseg != (struct osub *) NULL) {
+      /* Split the subsegment into two. */
+      setsdest(*splitseg, newvertex);
+      segorg(*splitseg, segmentorg);
+      segdest(*splitseg, segmentdest);
+      ssymself(*splitseg);
+      spivot(*splitseg, rightsubseg);
+      insertsubseg(m, b, &newbotright, mark(*splitseg));
+      tspivot(newbotright, newsubseg);
+      setsegorg(newsubseg, segmentorg);
+      setsegdest(newsubseg, segmentdest);
+      sbond(*splitseg, newsubseg);
+      ssymself(newsubseg);
+      sbond(newsubseg, rightsubseg);
+      ssymself(*splitseg);
+      /* Transfer the subsegment's boundary marker to the vertex */
+      /*   if required.                                          */
+      if (vertexmark(newvertex) == 0) {
+        setvertexmark(newvertex, mark(*splitseg));
+      }
+    }
+
+    if (m->checkquality) {
+      poolrestart(&m->flipstackers);
+      m->lastflip = (struct flipstacker *) poolalloc(&m->flipstackers);
+      m->lastflip->flippedtri = encode(horiz);
+      m->lastflip->prevflip = (struct flipstacker *) &insertvertex;
+    }
+
+#ifdef SELF_CHECK
+    if (counterclockwise(m, b, rightvertex, leftvertex, botvertex) < 0.0) {
+      printf("Internal error in insertvertex():\n");
+      printf(
+            "  Clockwise triangle prior to edge vertex insertion (bottom).\n");
+    }
+    if (mirrorflag) {
+      if (counterclockwise(m, b, leftvertex, rightvertex, topvertex) < 0.0) {
+        printf("Internal error in insertvertex():\n");
+        printf("  Clockwise triangle prior to edge vertex insertion (top).\n");
+      }
+      if (counterclockwise(m, b, rightvertex, topvertex, newvertex) < 0.0) {
+        printf("Internal error in insertvertex():\n");
+        printf(
+            "  Clockwise triangle after edge vertex insertion (top right).\n");
+      }
+      if (counterclockwise(m, b, topvertex, leftvertex, newvertex) < 0.0) {
+        printf("Internal error in insertvertex():\n");
+        printf(
+            "  Clockwise triangle after edge vertex insertion (top left).\n");
+      }
+    }
+    if (counterclockwise(m, b, leftvertex, botvertex, newvertex) < 0.0) {
+      printf("Internal error in insertvertex():\n");
+      printf(
+          "  Clockwise triangle after edge vertex insertion (bottom left).\n");
+    }
+    if (counterclockwise(m, b, botvertex, rightvertex, newvertex) < 0.0) {
+      printf("Internal error in insertvertex():\n");
+      printf(
+        "  Clockwise triangle after edge vertex insertion (bottom right).\n");
+    }
+#endif /* SELF_CHECK */
+    if (b->verbose > 2) {
+      printf("  Updating bottom left ");
+      printtriangle(m, b, &botright);
+      if (mirrorflag) {
+        printf("  Updating top left ");
+        printtriangle(m, b, &topright);
+        printf("  Creating top right ");
+        printtriangle(m, b, &newtopright);
+      }
+      printf("  Creating bottom right ");
+      printtriangle(m, b, &newbotright);
+    }
+
+    /* Position `horiz' on the first edge to check for */
+    /*   the Delaunay property.                        */
+    lnextself(horiz);
+  } else {
+    /* Insert the vertex in a triangle, splitting it into three. */
+    lnext(horiz, botleft);
+    lprev(horiz, botright);
+    sym(botleft, botlcasing);
+    sym(botright, botrcasing);
+    maketriangle(m, b, &newbotleft);
+    maketriangle(m, b, &newbotright);
+
+    /* Set the vertices of changed and new triangles. */
+    org(horiz, rightvertex);
+    dest(horiz, leftvertex);
+    apex(horiz, botvertex);
+    setorg(newbotleft, leftvertex);
+    setdest(newbotleft, botvertex);
+    setapex(newbotleft, newvertex);
+    setorg(newbotright, botvertex);
+    setdest(newbotright, rightvertex);
+    setapex(newbotright, newvertex);
+    setapex(horiz, newvertex);
+    for (i = 0; i < m->eextras; i++) {
+      /* Set the element attributes of the new triangles. */
+      attrib = elemattribute(horiz, i);
+      setelemattribute(newbotleft, i, attrib);
+      setelemattribute(newbotright, i, attrib);
+    }
+    if (b->vararea) {
+      /* Set the area constraint of the new triangles. */
+      area = areabound(horiz);
+      setareabound(newbotleft, area);
+      setareabound(newbotright, area);
+    }
+
+    /* There may be subsegments that need to be bonded */
+    /*   to the new triangles.                         */
+    if (m->checksegments) {
+      tspivot(botleft, botlsubseg);
+      if (botlsubseg.ss != m->dummysub) {
+        tsdissolve(botleft);
+        tsbond(newbotleft, botlsubseg);
+      }
+      tspivot(botright, botrsubseg);
+      if (botrsubseg.ss != m->dummysub) {
+        tsdissolve(botright);
+        tsbond(newbotright, botrsubseg);
+      }
+    }
+
+    /* Bond the new triangles to the surrounding triangles. */
+    bond(newbotleft, botlcasing);
+    bond(newbotright, botrcasing);
+    lnextself(newbotleft);
+    lprevself(newbotright);
+    bond(newbotleft, newbotright);
+    lnextself(newbotleft);
+    bond(botleft, newbotleft);
+    lprevself(newbotright);
+    bond(botright, newbotright);
+
+    if (m->checkquality) {
+      poolrestart(&m->flipstackers);
+      m->lastflip = (struct flipstacker *) poolalloc(&m->flipstackers);
+      m->lastflip->flippedtri = encode(horiz);
+      m->lastflip->prevflip = (struct flipstacker *) NULL;
+    }
+
+#ifdef SELF_CHECK
+    if (counterclockwise(m, b, rightvertex, leftvertex, botvertex) < 0.0) {
+      printf("Internal error in insertvertex():\n");
+      printf("  Clockwise triangle prior to vertex insertion.\n");
+    }
+    if (counterclockwise(m, b, rightvertex, leftvertex, newvertex) < 0.0) {
+      printf("Internal error in insertvertex():\n");
+      printf("  Clockwise triangle after vertex insertion (top).\n");
+    }
+    if (counterclockwise(m, b, leftvertex, botvertex, newvertex) < 0.0) {
+      printf("Internal error in insertvertex():\n");
+      printf("  Clockwise triangle after vertex insertion (left).\n");
+    }
+    if (counterclockwise(m, b, botvertex, rightvertex, newvertex) < 0.0) {
+      printf("Internal error in insertvertex():\n");
+      printf("  Clockwise triangle after vertex insertion (right).\n");
+    }
+#endif /* SELF_CHECK */
+    if (b->verbose > 2) {
+      printf("  Updating top ");
+      printtriangle(m, b, &horiz);
+      printf("  Creating left ");
+      printtriangle(m, b, &newbotleft);
+      printf("  Creating right ");
+      printtriangle(m, b, &newbotright);
+    }
+  }
+
+  /* The insertion is successful by default, unless an encroached */
+  /*   subsegment is found.                                       */
+  success = SUCCESSFULVERTEX;
+  /* Circle around the newly inserted vertex, checking each edge opposite */
+  /*   it for the Delaunay property.  Non-Delaunay edges are flipped.     */
+  /*   `horiz' is always the edge being checked.  `first' marks where to  */
+  /*   stop circling.                                                     */
+  org(horiz, first);
+  rightvertex = first;
+  dest(horiz, leftvertex);
+  /* Circle until finished. */
+  while (1) {
+    /* By default, the edge will be flipped. */
+    doflip = 1;
+
+    if (m->checksegments) {
+      /* Check for a subsegment, which cannot be flipped. */
+      tspivot(horiz, checksubseg);
+      if (checksubseg.ss != m->dummysub) {
+        /* The edge is a subsegment and cannot be flipped. */
+        doflip = 0;
+#ifndef CDT_ONLY
+        if (segmentflaws) {
+          /* Does the new vertex encroach upon this subsegment? */
+          if (checkseg4encroach(m, b, &checksubseg)) {
+            success = ENCROACHINGVERTEX;
+          }
+        }
+#endif /* not CDT_ONLY */
+      }
+    }
+
+    if (doflip) {
+      /* Check if the edge is a boundary edge. */
+      sym(horiz, top);
+      if (top.tri == m->dummytri) {
+        /* The edge is a boundary edge and cannot be flipped. */
+        doflip = 0;
+      } else {
+        /* Find the vertex on the other side of the edge. */
+        apex(top, farvertex);
+        /* In the incremental Delaunay triangulation algorithm, any of      */
+        /*   `leftvertex', `rightvertex', and `farvertex' could be vertices */
+        /*   of the triangular bounding box.  These vertices must be        */
+        /*   treated as if they are infinitely distant, even though their   */
+        /*   "coordinates" are not.                                         */
+        if ((leftvertex == m->infvertex1) || (leftvertex == m->infvertex2) ||
+            (leftvertex == m->infvertex3)) {
+          /* `leftvertex' is infinitely distant.  Check the convexity of  */
+          /*   the boundary of the triangulation.  'farvertex' might be   */
+          /*   infinite as well, but trust me, this same condition should */
+          /*   be applied.                                                */
+          doflip = counterclockwise(m, b, newvertex, rightvertex, farvertex)
+                   > 0.0;
+        } else if ((rightvertex == m->infvertex1) ||
+                   (rightvertex == m->infvertex2) ||
+                   (rightvertex == m->infvertex3)) {
+          /* `rightvertex' is infinitely distant.  Check the convexity of */
+          /*   the boundary of the triangulation.  'farvertex' might be   */
+          /*   infinite as well, but trust me, this same condition should */
+          /*   be applied.                                                */
+          doflip = counterclockwise(m, b, farvertex, leftvertex, newvertex)
+                   > 0.0;
+        } else if ((farvertex == m->infvertex1) ||
+                   (farvertex == m->infvertex2) ||
+                   (farvertex == m->infvertex3)) {
+          /* `farvertex' is infinitely distant and cannot be inside */
+          /*   the circumcircle of the triangle `horiz'.            */
+          doflip = 0;
+        } else {
+          /* Test whether the edge is locally Delaunay. */
+          doflip = incircle(m, b, leftvertex, newvertex, rightvertex,
+                            farvertex) > 0.0;
+        }
+        if (doflip) {
+          /* We made it!  Flip the edge `horiz' by rotating its containing */
+          /*   quadrilateral (the two triangles adjacent to `horiz').      */
+          /* Identify the casing of the quadrilateral. */
+          lprev(top, topleft);
+          sym(topleft, toplcasing);
+          lnext(top, topright);
+          sym(topright, toprcasing);
+          lnext(horiz, botleft);
+          sym(botleft, botlcasing);
+          lprev(horiz, botright);
+          sym(botright, botrcasing);
+          /* Rotate the quadrilateral one-quarter turn counterclockwise. */
+          bond(topleft, botlcasing);
+          bond(botleft, botrcasing);
+          bond(botright, toprcasing);
+          bond(topright, toplcasing);
+          if (m->checksegments) {
+            /* Check for subsegments and rebond them to the quadrilateral. */
+            tspivot(topleft, toplsubseg);
+            tspivot(botleft, botlsubseg);
+            tspivot(botright, botrsubseg);
+            tspivot(topright, toprsubseg);
+            if (toplsubseg.ss == m->dummysub) {
+              tsdissolve(topright);
+            } else {
+              tsbond(topright, toplsubseg);
+            }
+            if (botlsubseg.ss == m->dummysub) {
+              tsdissolve(topleft);
+            } else {
+              tsbond(topleft, botlsubseg);
+            }
+            if (botrsubseg.ss == m->dummysub) {
+              tsdissolve(botleft);
+            } else {
+              tsbond(botleft, botrsubseg);
+            }
+            if (toprsubseg.ss == m->dummysub) {
+              tsdissolve(botright);
+            } else {
+              tsbond(botright, toprsubseg);
+            }
+          }
+          /* New vertex assignments for the rotated quadrilateral. */
+          setorg(horiz, farvertex);
+          setdest(horiz, newvertex);
+          setapex(horiz, rightvertex);
+          setorg(top, newvertex);
+          setdest(top, farvertex);
+          setapex(top, leftvertex);
+          for (i = 0; i < m->eextras; i++) {
+            /* Take the average of the two triangles' attributes. */
+            attrib = 0.5 * (elemattribute(top, i) + elemattribute(horiz, i));
+            setelemattribute(top, i, attrib);
+            setelemattribute(horiz, i, attrib);
+          }
+          if (b->vararea) {
+            if ((areabound(top) <= 0.0) || (areabound(horiz) <= 0.0)) {
+              area = -1.0;
+            } else {
+              /* Take the average of the two triangles' area constraints.    */
+              /*   This prevents small area constraints from migrating a     */
+              /*   long, long way from their original location due to flips. */
+              area = 0.5 * (areabound(top) + areabound(horiz));
+            }
+            setareabound(top, area);
+            setareabound(horiz, area);
+          }
+
+          if (m->checkquality) {
+            newflip = (struct flipstacker *) poolalloc(&m->flipstackers);
+            newflip->flippedtri = encode(horiz);
+            newflip->prevflip = m->lastflip;
+            m->lastflip = newflip;
+          }
+
+#ifdef SELF_CHECK
+          if (newvertex != (vertex) NULL) {
+            if (counterclockwise(m, b, leftvertex, newvertex, rightvertex) <
+                0.0) {
+              printf("Internal error in insertvertex():\n");
+              printf("  Clockwise triangle prior to edge flip (bottom).\n");
+            }
+            /* The following test has been removed because constrainededge() */
+            /*   sometimes generates inverted triangles that insertvertex()  */
+            /*   removes.                                                    */
+/*
+            if (counterclockwise(m, b, rightvertex, farvertex, leftvertex) <
+                0.0) {
+              printf("Internal error in insertvertex():\n");
+              printf("  Clockwise triangle prior to edge flip (top).\n");
+            }
+*/
+            if (counterclockwise(m, b, farvertex, leftvertex, newvertex) <
+                0.0) {
+              printf("Internal error in insertvertex():\n");
+              printf("  Clockwise triangle after edge flip (left).\n");
+            }
+            if (counterclockwise(m, b, newvertex, rightvertex, farvertex) <
+                0.0) {
+              printf("Internal error in insertvertex():\n");
+              printf("  Clockwise triangle after edge flip (right).\n");
+            }
+          }
+#endif /* SELF_CHECK */
+          if (b->verbose > 2) {
+            printf("  Edge flip results in left ");
+            lnextself(topleft);
+            printtriangle(m, b, &topleft);
+            printf("  and right ");
+            printtriangle(m, b, &horiz);
+          }
+          /* On the next iterations, consider the two edges that were  */
+          /*   exposed (this is, are now visible to the newly inserted */
+          /*   vertex) by the edge flip.                               */
+          lprevself(horiz);
+          leftvertex = farvertex;
+        }
+      }
+    }
+    if (!doflip) {
+      /* The handle `horiz' is accepted as locally Delaunay. */
+#ifndef CDT_ONLY
+      if (triflaws) {
+        /* Check the triangle `horiz' for quality. */
+        testtriangle(m, b, &horiz);
+      }
+#endif /* not CDT_ONLY */
+      /* Look for the next edge around the newly inserted vertex. */
+      lnextself(horiz);
+      sym(horiz, testtri);
+      /* Check for finishing a complete revolution about the new vertex, or */
+      /*   falling outside  of the triangulation.  The latter will happen   */
+      /*   when a vertex is inserted at a boundary.                         */
+      if ((leftvertex == first) || (testtri.tri == m->dummytri)) {
+        /* We're done.  Return a triangle whose origin is the new vertex. */
+        lnext(horiz, *searchtri);
+        lnext(horiz, m->recenttri);
+        return success;
+      }
+      /* Finish finding the next edge around the newly inserted vertex. */
+      lnext(testtri, horiz);
+      rightvertex = leftvertex;
+      dest(horiz, leftvertex);
+    }
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  triangulatepolygon()   Find the Delaunay triangulation of a polygon that */
+/*                         has a certain "nice" shape.  This includes the    */
+/*                         polygons that result from deletion of a vertex or */
+/*                         insertion of a segment.                           */
+/*                                                                           */
+/*  This is a conceptually difficult routine.  The starting assumption is    */
+/*  that we have a polygon with n sides.  n - 1 of these sides are currently */
+/*  represented as edges in the mesh.  One side, called the "base", need not */
+/*  be.                                                                      */
+/*                                                                           */
+/*  Inside the polygon is a structure I call a "fan", consisting of n - 1    */
+/*  triangles that share a common origin.  For each of these triangles, the  */
+/*  edge opposite the origin is one of the sides of the polygon.  The        */
+/*  primary edge of each triangle is the edge directed from the origin to    */
+/*  the destination; note that this is not the same edge that is a side of   */
+/*  the polygon.  `firstedge' is the primary edge of the first triangle.     */
+/*  From there, the triangles follow in counterclockwise order about the     */
+/*  polygon, until `lastedge', the primary edge of the last triangle.        */
+/*  `firstedge' and `lastedge' are probably connected to other triangles     */
+/*  beyond the extremes of the fan, but their identity is not important, as  */
+/*  long as the fan remains connected to them.                               */
+/*                                                                           */
+/*  Imagine the polygon oriented so that its base is at the bottom.  This    */
+/*  puts `firstedge' on the far right, and `lastedge' on the far left.       */
+/*  The right vertex of the base is the destination of `firstedge', and the  */
+/*  left vertex of the base is the apex of `lastedge'.                       */
+/*                                                                           */
+/*  The challenge now is to find the right sequence of edge flips to         */
+/*  transform the fan into a Delaunay triangulation of the polygon.  Each    */
+/*  edge flip effectively removes one triangle from the fan, committing it   */
+/*  to the polygon.  The resulting polygon has one fewer edge.  If `doflip'  */
+/*  is set, the final flip will be performed, resulting in a fan of one      */
+/*  (useless?) triangle.  If `doflip' is not set, the final flip is not      */
+/*  performed, resulting in a fan of two triangles, and an unfinished        */
+/*  triangular polygon that is not yet filled out with a single triangle.    */
+/*  On completion of the routine, `lastedge' is the last remaining triangle, */
+/*  or the leftmost of the last two.                                         */
+/*                                                                           */
+/*  Although the flips are performed in the order described above, the       */
+/*  decisions about what flips to perform are made in precisely the reverse  */
+/*  order.  The recursive triangulatepolygon() procedure makes a decision,   */
+/*  uses up to two recursive calls to triangulate the "subproblems"          */
+/*  (polygons with fewer edges), and then performs an edge flip.             */
+/*                                                                           */
+/*  The "decision" it makes is which vertex of the polygon should be         */
+/*  connected to the base.  This decision is made by testing every possible  */
+/*  vertex.  Once the best vertex is found, the two edges that connect this  */
+/*  vertex to the base become the bases for two smaller polygons.  These     */
+/*  are triangulated recursively.  Unfortunately, this approach can take     */
+/*  O(n^2) time not only in the worst case, but in many common cases.  It's  */
+/*  rarely a big deal for vertex deletion, where n is rarely larger than     */
+/*  ten, but it could be a big deal for segment insertion, especially if     */
+/*  there's a lot of long segments that each cut many triangles.  I ought to */
+/*  code a faster algorithm some day.                                        */
+/*                                                                           */
+/*  The `edgecount' parameter is the number of sides of the polygon,         */
+/*  including its base.  `triflaws' is a flag that determines whether the    */
+/*  new triangles should be tested for quality, and enqueued if they are     */
+/*  bad.                                                                     */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void triangulatepolygon(struct mesh *m, struct behavior *b,
+                        struct otri *firstedge, struct otri *lastedge,
+                        int edgecount, int doflip, int triflaws)
+#else /* not ANSI_DECLARATORS */
+void triangulatepolygon(m, b, firstedge, lastedge, edgecount, doflip, triflaws)
+struct mesh *m;
+struct behavior *b;
+struct otri *firstedge;
+struct otri *lastedge;
+int edgecount;
+int doflip;
+int triflaws;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri testtri;
+  struct otri besttri;
+  struct otri tempedge;
+  vertex leftbasevertex, rightbasevertex;
+  vertex testvertex;
+  vertex bestvertex;
+  int bestnumber;
+  int i;
+  triangle ptr;   /* Temporary variable used by sym(), onext(), and oprev(). */
+
+  /* Identify the base vertices. */
+  apex(*lastedge, leftbasevertex);
+  dest(*firstedge, rightbasevertex);
+  if (b->verbose > 2) {
+    printf("  Triangulating interior polygon at edge\n");
+    printf("    (%.12g, %.12g) (%.12g, %.12g)\n", leftbasevertex[0],
+           leftbasevertex[1], rightbasevertex[0], rightbasevertex[1]);
+  }
+  /* Find the best vertex to connect the base to. */
+  onext(*firstedge, besttri);
+  dest(besttri, bestvertex);
+  otricopy(besttri, testtri);
+  bestnumber = 1;
+  for (i = 2; i <= edgecount - 2; i++) {
+    onextself(testtri);
+    dest(testtri, testvertex);
+    /* Is this a better vertex? */
+    if (incircle(m, b, leftbasevertex, rightbasevertex, bestvertex,
+                 testvertex) > 0.0) {
+      otricopy(testtri, besttri);
+      bestvertex = testvertex;
+      bestnumber = i;
+    }
+  }
+  if (b->verbose > 2) {
+    printf("    Connecting edge to (%.12g, %.12g)\n", bestvertex[0],
+           bestvertex[1]);
+  }
+  if (bestnumber > 1) {
+    /* Recursively triangulate the smaller polygon on the right. */
+    oprev(besttri, tempedge);
+    triangulatepolygon(m, b, firstedge, &tempedge, bestnumber + 1, 1,
+                       triflaws);
+  }
+  if (bestnumber < edgecount - 2) {
+    /* Recursively triangulate the smaller polygon on the left. */
+    sym(besttri, tempedge);
+    triangulatepolygon(m, b, &besttri, lastedge, edgecount - bestnumber, 1,
+                       triflaws);
+    /* Find `besttri' again; it may have been lost to edge flips. */
+    sym(tempedge, besttri);
+  }
+  if (doflip) {
+    /* Do one final edge flip. */
+    flip(m, b, &besttri);
+#ifndef CDT_ONLY
+    if (triflaws) {
+      /* Check the quality of the newly committed triangle. */
+      sym(besttri, testtri);
+      testtriangle(m, b, &testtri);
+    }
+#endif /* not CDT_ONLY */
+  }
+  /* Return the base triangle. */
+  otricopy(besttri, *lastedge);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  deletevertex()   Delete a vertex from a Delaunay triangulation, ensuring */
+/*                   that the triangulation remains Delaunay.                */
+/*                                                                           */
+/*  The origin of `deltri' is deleted.  The union of the triangles adjacent  */
+/*  to this vertex is a polygon, for which the Delaunay triangulation is     */
+/*  found.  Two triangles are removed from the mesh.                         */
+/*                                                                           */
+/*  Only interior vertices that do not lie on segments or boundaries may be  */
+/*  deleted.                                                                 */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void deletevertex(struct mesh *m, struct behavior *b, struct otri *deltri)
+#else /* not ANSI_DECLARATORS */
+void deletevertex(m, b, deltri)
+struct mesh *m;
+struct behavior *b;
+struct otri *deltri;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri countingtri;
+  struct otri firstedge, lastedge;
+  struct otri deltriright;
+  struct otri lefttri, righttri;
+  struct otri leftcasing, rightcasing;
+  struct osub leftsubseg, rightsubseg;
+  vertex delvertex;
+  vertex neworg;
+  int edgecount;
+  triangle ptr;   /* Temporary variable used by sym(), onext(), and oprev(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  org(*deltri, delvertex);
+  if (b->verbose > 1) {
+    printf("  Deleting (%.12g, %.12g).\n", delvertex[0], delvertex[1]);
+  }
+  vertexdealloc(m, delvertex);
+
+  /* Count the degree of the vertex being deleted. */
+  onext(*deltri, countingtri);
+  edgecount = 1;
+  while (!otriequal(*deltri, countingtri)) {
+#ifdef SELF_CHECK
+    if (countingtri.tri == m->dummytri) {
+      printf("Internal error in deletevertex():\n");
+      printf("  Attempt to delete boundary vertex.\n");
+      internalerror();
+    }
+#endif /* SELF_CHECK */
+    edgecount++;
+    onextself(countingtri);
+  }
+
+#ifdef SELF_CHECK
+  if (edgecount < 3) {
+    printf("Internal error in deletevertex():\n  Vertex has degree %d.\n",
+           edgecount);
+    internalerror();
+  }
+#endif /* SELF_CHECK */
+  if (edgecount > 3) {
+    /* Triangulate the polygon defined by the union of all triangles */
+    /*   adjacent to the vertex being deleted.  Check the quality of */
+    /*   the resulting triangles.                                    */
+    onext(*deltri, firstedge);
+    oprev(*deltri, lastedge);
+    triangulatepolygon(m, b, &firstedge, &lastedge, edgecount, 0,
+                       !b->nobisect);
+  }
+  /* Splice out two triangles. */
+  lprev(*deltri, deltriright);
+  dnext(*deltri, lefttri);
+  sym(lefttri, leftcasing);
+  oprev(deltriright, righttri);
+  sym(righttri, rightcasing);
+  bond(*deltri, leftcasing);
+  bond(deltriright, rightcasing);
+  tspivot(lefttri, leftsubseg);
+  if (leftsubseg.ss != m->dummysub) {
+    tsbond(*deltri, leftsubseg);
+  }
+  tspivot(righttri, rightsubseg);
+  if (rightsubseg.ss != m->dummysub) {
+    tsbond(deltriright, rightsubseg);
+  }
+
+  /* Set the new origin of `deltri' and check its quality. */
+  org(lefttri, neworg);
+  setorg(*deltri, neworg);
+  if (!b->nobisect) {
+    testtriangle(m, b, deltri);
+  }
+
+  /* Delete the two spliced-out triangles. */
+  triangledealloc(m, lefttri.tri);
+  triangledealloc(m, righttri.tri);
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  undovertex()   Undo the most recent vertex insertion.                    */
+/*                                                                           */
+/*  Walks through the list of transformations (flips and a vertex insertion) */
+/*  in the reverse of the order in which they were done, and undoes them.    */
+/*  The inserted vertex is removed from the triangulation and deallocated.   */
+/*  Two triangles (possibly just one) are also deallocated.                  */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void undovertex(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void undovertex(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri fliptri;
+  struct otri botleft, botright, topright;
+  struct otri botlcasing, botrcasing, toprcasing;
+  struct otri gluetri;
+  struct osub botlsubseg, botrsubseg, toprsubseg;
+  vertex botvertex, rightvertex;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  /* Walk through the list of transformations (flips and a vertex insertion) */
+  /*   in the reverse of the order in which they were done, and undo them.   */
+  while (m->lastflip != (struct flipstacker *) NULL) {
+    /* Find a triangle involved in the last unreversed transformation. */
+    decode(m->lastflip->flippedtri, fliptri);
+
+    /* We are reversing one of three transformations:  a trisection of one */
+    /*   triangle into three (by inserting a vertex in the triangle), a    */
+    /*   bisection of two triangles into four (by inserting a vertex in an */
+    /*   edge), or an edge flip.                                           */
+    if (m->lastflip->prevflip == (struct flipstacker *) NULL) {
+      /* Restore a triangle that was split into three triangles, */
+      /*   so it is again one triangle.                          */
+      dprev(fliptri, botleft);
+      lnextself(botleft);
+      onext(fliptri, botright);
+      lprevself(botright);
+      sym(botleft, botlcasing);
+      sym(botright, botrcasing);
+      dest(botleft, botvertex);
+
+      setapex(fliptri, botvertex);
+      lnextself(fliptri);
+      bond(fliptri, botlcasing);
+      tspivot(botleft, botlsubseg);
+      tsbond(fliptri, botlsubseg);
+      lnextself(fliptri);
+      bond(fliptri, botrcasing);
+      tspivot(botright, botrsubseg);
+      tsbond(fliptri, botrsubseg);
+
+      /* Delete the two spliced-out triangles. */
+      triangledealloc(m, botleft.tri);
+      triangledealloc(m, botright.tri);
+    } else if (m->lastflip->prevflip == (struct flipstacker *) &insertvertex) {
+      /* Restore two triangles that were split into four triangles, */
+      /*   so they are again two triangles.                         */
+      lprev(fliptri, gluetri);
+      sym(gluetri, botright);
+      lnextself(botright);
+      sym(botright, botrcasing);
+      dest(botright, rightvertex);
+
+      setorg(fliptri, rightvertex);
+      bond(gluetri, botrcasing);
+      tspivot(botright, botrsubseg);
+      tsbond(gluetri, botrsubseg);
+
+      /* Delete the spliced-out triangle. */
+      triangledealloc(m, botright.tri);
+
+      sym(fliptri, gluetri);
+      if (gluetri.tri != m->dummytri) {
+        lnextself(gluetri);
+        dnext(gluetri, topright);
+        sym(topright, toprcasing);
+
+        setorg(gluetri, rightvertex);
+        bond(gluetri, toprcasing);
+        tspivot(topright, toprsubseg);
+        tsbond(gluetri, toprsubseg);
+
+        /* Delete the spliced-out triangle. */
+        triangledealloc(m, topright.tri);
+      }
+
+      /* This is the end of the list, sneakily encoded. */
+      m->lastflip->prevflip = (struct flipstacker *) NULL;
+    } else {
+      /* Undo an edge flip. */
+      unflip(m, b, &fliptri);
+    }
+
+    /* Go on and process the next transformation. */
+    m->lastflip = m->lastflip->prevflip;
+  }
+}
+
+#endif /* not CDT_ONLY */
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Mesh transformation routines end here                     *********/
+
+/********* Divide-and-conquer Delaunay triangulation begins here     *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  The divide-and-conquer bounding box                                      */
+/*                                                                           */
+/*  I originally implemented the divide-and-conquer and incremental Delaunay */
+/*  triangulations using the edge-based data structure presented by Guibas   */
+/*  and Stolfi.  Switching to a triangle-based data structure doubled the    */
+/*  speed.  However, I had to think of a few extra tricks to maintain the    */
+/*  elegance of the original algorithms.                                     */
+/*                                                                           */
+/*  The "bounding box" used by my variant of the divide-and-conquer          */
+/*  algorithm uses one triangle for each edge of the convex hull of the      */
+/*  triangulation.  These bounding triangles all share a common apical       */
+/*  vertex, which is represented by NULL and which represents nothing.       */
+/*  The bounding triangles are linked in a circular fan about this NULL      */
+/*  vertex, and the edges on the convex hull of the triangulation appear     */
+/*  opposite the NULL vertex.  You might find it easiest to imagine that     */
+/*  the NULL vertex is a point in 3D space behind the center of the          */
+/*  triangulation, and that the bounding triangles form a sort of cone.      */
+/*                                                                           */
+/*  This bounding box makes it easy to represent degenerate cases.  For      */
+/*  instance, the triangulation of two vertices is a single edge.  This edge */
+/*  is represented by two bounding box triangles, one on each "side" of the  */
+/*  edge.  These triangles are also linked together in a fan about the NULL  */
+/*  vertex.                                                                  */
+/*                                                                           */
+/*  The bounding box also makes it easy to traverse the convex hull, as the  */
+/*  divide-and-conquer algorithm needs to do.                                */
+/*                                                                           */
+/*****************************************************************************/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  vertexsort()   Sort an array of vertices by x-coordinate, using the      */
+/*                 y-coordinate as a secondary key.                          */
+/*                                                                           */
+/*  Uses quicksort.  Randomized O(n log n) time.  No, I did not make any of  */
+/*  the usual quicksort mistakes.                                            */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void vertexsort(vertex *sortarray, int arraysize)
+#else /* not ANSI_DECLARATORS */
+void vertexsort(sortarray, arraysize)
+vertex *sortarray;
+int arraysize;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  int left, right;
+  int pivot;
+  REAL pivotx, pivoty;
+  vertex temp;
+
+  if (arraysize == 2) {
+    /* Recursive base case. */
+    if ((sortarray[0][0] > sortarray[1][0]) ||
+        ((sortarray[0][0] == sortarray[1][0]) &&
+         (sortarray[0][1] > sortarray[1][1]))) {
+      temp = sortarray[1];
+      sortarray[1] = sortarray[0];
+      sortarray[0] = temp;
+    }
+    return;
+  }
+  /* Choose a random pivot to split the array. */
+  pivot = (int) randomnation((unsigned int) arraysize);
+  pivotx = sortarray[pivot][0];
+  pivoty = sortarray[pivot][1];
+  /* Split the array. */
+  left = -1;
+  right = arraysize;
+  while (left < right) {
+    /* Search for a vertex whose x-coordinate is too large for the left. */
+    do {
+      left++;
+    } while ((left <= right) && ((sortarray[left][0] < pivotx) ||
+                                 ((sortarray[left][0] == pivotx) &&
+                                  (sortarray[left][1] < pivoty))));
+    /* Search for a vertex whose x-coordinate is too small for the right. */
+    do {
+      right--;
+    } while ((left <= right) && ((sortarray[right][0] > pivotx) ||
+                                 ((sortarray[right][0] == pivotx) &&
+                                  (sortarray[right][1] > pivoty))));
+    if (left < right) {
+      /* Swap the left and right vertices. */
+      temp = sortarray[left];
+      sortarray[left] = sortarray[right];
+      sortarray[right] = temp;
+    }
+  }
+  if (left > 1) {
+    /* Recursively sort the left subset. */
+    vertexsort(sortarray, left);
+  }
+  if (right < arraysize - 2) {
+    /* Recursively sort the right subset. */
+    vertexsort(&sortarray[right + 1], arraysize - right - 1);
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  vertexmedian()   An order statistic algorithm, almost.  Shuffles an      */
+/*                   array of vertices so that the first `median' vertices   */
+/*                   occur lexicographically before the remaining vertices.  */
+/*                                                                           */
+/*  Uses the x-coordinate as the primary key if axis == 0; the y-coordinate  */
+/*  if axis == 1.  Very similar to the vertexsort() procedure, but runs in   */
+/*  randomized linear time.                                                  */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void vertexmedian(vertex *sortarray, int arraysize, int median, int axis)
+#else /* not ANSI_DECLARATORS */
+void vertexmedian(sortarray, arraysize, median, axis)
+vertex *sortarray;
+int arraysize;
+int median;
+int axis;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  int left, right;
+  int pivot;
+  REAL pivot1, pivot2;
+  vertex temp;
+
+  if (arraysize == 2) {
+    /* Recursive base case. */
+    if ((sortarray[0][axis] > sortarray[1][axis]) ||
+        ((sortarray[0][axis] == sortarray[1][axis]) &&
+         (sortarray[0][1 - axis] > sortarray[1][1 - axis]))) {
+      temp = sortarray[1];
+      sortarray[1] = sortarray[0];
+      sortarray[0] = temp;
+    }
+    return;
+  }
+  /* Choose a random pivot to split the array. */
+  pivot = (int) randomnation((unsigned int) arraysize);
+  pivot1 = sortarray[pivot][axis];
+  pivot2 = sortarray[pivot][1 - axis];
+  /* Split the array. */
+  left = -1;
+  right = arraysize;
+  while (left < right) {
+    /* Search for a vertex whose x-coordinate is too large for the left. */
+    do {
+      left++;
+    } while ((left <= right) && ((sortarray[left][axis] < pivot1) ||
+                                 ((sortarray[left][axis] == pivot1) &&
+                                  (sortarray[left][1 - axis] < pivot2))));
+    /* Search for a vertex whose x-coordinate is too small for the right. */
+    do {
+      right--;
+    } while ((left <= right) && ((sortarray[right][axis] > pivot1) ||
+                                 ((sortarray[right][axis] == pivot1) &&
+                                  (sortarray[right][1 - axis] > pivot2))));
+    if (left < right) {
+      /* Swap the left and right vertices. */
+      temp = sortarray[left];
+      sortarray[left] = sortarray[right];
+      sortarray[right] = temp;
+    }
+  }
+  /* Unlike in vertexsort(), at most one of the following */
+  /*   conditionals is true.                             */
+  if (left > median) {
+    /* Recursively shuffle the left subset. */
+    vertexmedian(sortarray, left, median, axis);
+  }
+  if (right < median - 1) {
+    /* Recursively shuffle the right subset. */
+    vertexmedian(&sortarray[right + 1], arraysize - right - 1,
+                 median - right - 1, axis);
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  alternateaxes()   Sorts the vertices as appropriate for the divide-and-  */
+/*                    conquer algorithm with alternating cuts.               */
+/*                                                                           */
+/*  Partitions by x-coordinate if axis == 0; by y-coordinate if axis == 1.   */
+/*  For the base case, subsets containing only two or three vertices are     */
+/*  always sorted by x-coordinate.                                           */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void alternateaxes(vertex *sortarray, int arraysize, int axis)
+#else /* not ANSI_DECLARATORS */
+void alternateaxes(sortarray, arraysize, axis)
+vertex *sortarray;
+int arraysize;
+int axis;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  int divider;
+
+  divider = arraysize >> 1;
+  if (arraysize <= 3) {
+    /* Recursive base case:  subsets of two or three vertices will be    */
+    /*   handled specially, and should always be sorted by x-coordinate. */
+    axis = 0;
+  }
+  /* Partition with a horizontal or vertical cut. */
+  vertexmedian(sortarray, arraysize, divider, axis);
+  /* Recursively partition the subsets with a cross cut. */
+  if (arraysize - divider >= 2) {
+    if (divider >= 2) {
+      alternateaxes(sortarray, divider, 1 - axis);
+    }
+    alternateaxes(&sortarray[divider], arraysize - divider, 1 - axis);
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  mergehulls()   Merge two adjacent Delaunay triangulations into a         */
+/*                 single Delaunay triangulation.                            */
+/*                                                                           */
+/*  This is similar to the algorithm given by Guibas and Stolfi, but uses    */
+/*  a triangle-based, rather than edge-based, data structure.                */
+/*                                                                           */
+/*  The algorithm walks up the gap between the two triangulations, knitting  */
+/*  them together.  As they are merged, some of their bounding triangles     */
+/*  are converted into real triangles of the triangulation.  The procedure   */
+/*  pulls each hull's bounding triangles apart, then knits them together     */
+/*  like the teeth of two gears.  The Delaunay property determines, at each  */
+/*  step, whether the next "tooth" is a bounding triangle of the left hull   */
+/*  or the right.  When a bounding triangle becomes real, its apex is        */
+/*  changed from NULL to a real vertex.                                      */
+/*                                                                           */
+/*  Only two new triangles need to be allocated.  These become new bounding  */
+/*  triangles at the top and bottom of the seam.  They are used to connect   */
+/*  the remaining bounding triangles (those that have not been converted     */
+/*  into real triangles) into a single fan.                                  */
+/*                                                                           */
+/*  On entry, `farleft' and `innerleft' are bounding triangles of the left   */
+/*  triangulation.  The origin of `farleft' is the leftmost vertex, and      */
+/*  the destination of `innerleft' is the rightmost vertex of the            */
+/*  triangulation.  Similarly, `innerright' and `farright' are bounding      */
+/*  triangles of the right triangulation.  The origin of `innerright' and    */
+/*  destination of `farright' are the leftmost and rightmost vertices.       */
+/*                                                                           */
+/*  On completion, the origin of `farleft' is the leftmost vertex of the     */
+/*  merged triangulation, and the destination of `farright' is the rightmost */
+/*  vertex.                                                                  */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void mergehulls(struct mesh *m, struct behavior *b, struct otri *farleft,
+                struct otri *innerleft, struct otri *innerright,
+                struct otri *farright, int axis)
+#else /* not ANSI_DECLARATORS */
+void mergehulls(m, b, farleft, innerleft, innerright, farright, axis)
+struct mesh *m;
+struct behavior *b;
+struct otri *farleft;
+struct otri *innerleft;
+struct otri *innerright;
+struct otri *farright;
+int axis;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri leftcand, rightcand;
+  struct otri baseedge;
+  struct otri nextedge;
+  struct otri sidecasing, topcasing, outercasing;
+  struct otri checkedge;
+  vertex innerleftdest;
+  vertex innerrightorg;
+  vertex innerleftapex, innerrightapex;
+  vertex farleftpt, farrightpt;
+  vertex farleftapex, farrightapex;
+  vertex lowerleft, lowerright;
+  vertex upperleft, upperright;
+  vertex nextapex;
+  vertex checkvertex;
+  int changemade;
+  int badedge;
+  int leftfinished, rightfinished;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+
+  dest(*innerleft, innerleftdest);
+  apex(*innerleft, innerleftapex);
+  org(*innerright, innerrightorg);
+  apex(*innerright, innerrightapex);
+  /* Special treatment for horizontal cuts. */
+  if (b->dwyer && (axis == 1)) {
+    org(*farleft, farleftpt);
+    apex(*farleft, farleftapex);
+    dest(*farright, farrightpt);
+    apex(*farright, farrightapex);
+    /* The pointers to the extremal vertices are shifted to point to the */
+    /*   topmost and bottommost vertex of each hull, rather than the     */
+    /*   leftmost and rightmost vertices.                                */
+    while (farleftapex[1] < farleftpt[1]) {
+      lnextself(*farleft);
+      symself(*farleft);
+      farleftpt = farleftapex;
+      apex(*farleft, farleftapex);
+    }
+    sym(*innerleft, checkedge);
+    apex(checkedge, checkvertex);
+    while (checkvertex[1] > innerleftdest[1]) {
+      lnext(checkedge, *innerleft);
+      innerleftapex = innerleftdest;
+      innerleftdest = checkvertex;
+      sym(*innerleft, checkedge);
+      apex(checkedge, checkvertex);
+    }
+    while (innerrightapex[1] < innerrightorg[1]) {
+      lnextself(*innerright);
+      symself(*innerright);
+      innerrightorg = innerrightapex;
+      apex(*innerright, innerrightapex);
+    }
+    sym(*farright, checkedge);
+    apex(checkedge, checkvertex);
+    while (checkvertex[1] > farrightpt[1]) {
+      lnext(checkedge, *farright);
+      farrightapex = farrightpt;
+      farrightpt = checkvertex;
+      sym(*farright, checkedge);
+      apex(checkedge, checkvertex);
+    }
+  }
+  /* Find a line tangent to and below both hulls. */
+  do {
+    changemade = 0;
+    /* Make innerleftdest the "bottommost" vertex of the left hull. */
+    if (counterclockwise(m, b, innerleftdest, innerleftapex, innerrightorg) >
+        0.0) {
+      lprevself(*innerleft);
+      symself(*innerleft);
+      innerleftdest = innerleftapex;
+      apex(*innerleft, innerleftapex);
+      changemade = 1;
+    }
+    /* Make innerrightorg the "bottommost" vertex of the right hull. */
+    if (counterclockwise(m, b, innerrightapex, innerrightorg, innerleftdest) >
+        0.0) {
+      lnextself(*innerright);
+      symself(*innerright);
+      innerrightorg = innerrightapex;
+      apex(*innerright, innerrightapex);
+      changemade = 1;
+    }
+  } while (changemade);
+  /* Find the two candidates to be the next "gear tooth." */
+  sym(*innerleft, leftcand);
+  sym(*innerright, rightcand);
+  /* Create the bottom new bounding triangle. */
+  maketriangle(m, b, &baseedge);
+  /* Connect it to the bounding boxes of the left and right triangulations. */
+  bond(baseedge, *innerleft);
+  lnextself(baseedge);
+  bond(baseedge, *innerright);
+  lnextself(baseedge);
+  setorg(baseedge, innerrightorg);
+  setdest(baseedge, innerleftdest);
+  /* Apex is intentionally left NULL. */
+  if (b->verbose > 2) {
+    printf("  Creating base bounding ");
+    printtriangle(m, b, &baseedge);
+  }
+  /* Fix the extreme triangles if necessary. */
+  org(*farleft, farleftpt);
+  if (innerleftdest == farleftpt) {
+    lnext(baseedge, *farleft);
+  }
+  dest(*farright, farrightpt);
+  if (innerrightorg == farrightpt) {
+    lprev(baseedge, *farright);
+  }
+  /* The vertices of the current knitting edge. */
+  lowerleft = innerleftdest;
+  lowerright = innerrightorg;
+  /* The candidate vertices for knitting. */
+  apex(leftcand, upperleft);
+  apex(rightcand, upperright);
+  /* Walk up the gap between the two triangulations, knitting them together. */
+  while (1) {
+    /* Have we reached the top?  (This isn't quite the right question,       */
+    /*   because even though the left triangulation might seem finished now, */
+    /*   moving up on the right triangulation might reveal a new vertex of   */
+    /*   the left triangulation.  And vice-versa.)                           */
+    leftfinished = counterclockwise(m, b, upperleft, lowerleft, lowerright) <=
+                   0.0;
+    rightfinished = counterclockwise(m, b, upperright, lowerleft, lowerright)
+                 <= 0.0;
+    if (leftfinished && rightfinished) {
+      /* Create the top new bounding triangle. */
+      maketriangle(m, b, &nextedge);
+      setorg(nextedge, lowerleft);
+      setdest(nextedge, lowerright);
+      /* Apex is intentionally left NULL. */
+      /* Connect it to the bounding boxes of the two triangulations. */
+      bond(nextedge, baseedge);
+      lnextself(nextedge);
+      bond(nextedge, rightcand);
+      lnextself(nextedge);
+      bond(nextedge, leftcand);
+      if (b->verbose > 2) {
+        printf("  Creating top bounding ");
+        printtriangle(m, b, &nextedge);
+      }
+      /* Special treatment for horizontal cuts. */
+      if (b->dwyer && (axis == 1)) {
+        org(*farleft, farleftpt);
+        apex(*farleft, farleftapex);
+        dest(*farright, farrightpt);
+        apex(*farright, farrightapex);
+        sym(*farleft, checkedge);
+        apex(checkedge, checkvertex);
+        /* The pointers to the extremal vertices are restored to the  */
+        /*   leftmost and rightmost vertices (rather than topmost and */
+        /*   bottommost).                                             */
+        while (checkvertex[0] < farleftpt[0]) {
+          lprev(checkedge, *farleft);
+          farleftapex = farleftpt;
+          farleftpt = checkvertex;
+          sym(*farleft, checkedge);
+          apex(checkedge, checkvertex);
+        }
+        while (farrightapex[0] > farrightpt[0]) {
+          lprevself(*farright);
+          symself(*farright);
+          farrightpt = farrightapex;
+          apex(*farright, farrightapex);
+        }
+      }
+      return;
+    }
+    /* Consider eliminating edges from the left triangulation. */
+    if (!leftfinished) {
+      /* What vertex would be exposed if an edge were deleted? */
+      lprev(leftcand, nextedge);
+      symself(nextedge);
+      apex(nextedge, nextapex);
+      /* If nextapex is NULL, then no vertex would be exposed; the */
+      /*   triangulation would have been eaten right through.      */
+      if (nextapex != (vertex) NULL) {
+        /* Check whether the edge is Delaunay. */
+        badedge = incircle(m, b, lowerleft, lowerright, upperleft, nextapex) >
+                  0.0;
+        while (badedge) {
+          /* Eliminate the edge with an edge flip.  As a result, the    */
+          /*   left triangulation will have one more boundary triangle. */
+          lnextself(nextedge);
+          sym(nextedge, topcasing);
+          lnextself(nextedge);
+          sym(nextedge, sidecasing);
+          bond(nextedge, topcasing);
+          bond(leftcand, sidecasing);
+          lnextself(leftcand);
+          sym(leftcand, outercasing);
+          lprevself(nextedge);
+          bond(nextedge, outercasing);
+          /* Correct the vertices to reflect the edge flip. */
+          setorg(leftcand, lowerleft);
+          setdest(leftcand, NULL);
+          setapex(leftcand, nextapex);
+          setorg(nextedge, NULL);
+          setdest(nextedge, upperleft);
+          setapex(nextedge, nextapex);
+          /* Consider the newly exposed vertex. */
+          upperleft = nextapex;
+          /* What vertex would be exposed if another edge were deleted? */
+          otricopy(sidecasing, nextedge);
+          apex(nextedge, nextapex);
+          if (nextapex != (vertex) NULL) {
+            /* Check whether the edge is Delaunay. */
+            badedge = incircle(m, b, lowerleft, lowerright, upperleft,
+                               nextapex) > 0.0;
+          } else {
+            /* Avoid eating right through the triangulation. */
+            badedge = 0;
+          }
+        }
+      }
+    }
+    /* Consider eliminating edges from the right triangulation. */
+    if (!rightfinished) {
+      /* What vertex would be exposed if an edge were deleted? */
+      lnext(rightcand, nextedge);
+      symself(nextedge);
+      apex(nextedge, nextapex);
+      /* If nextapex is NULL, then no vertex would be exposed; the */
+      /*   triangulation would have been eaten right through.      */
+      if (nextapex != (vertex) NULL) {
+        /* Check whether the edge is Delaunay. */
+        badedge = incircle(m, b, lowerleft, lowerright, upperright, nextapex) >
+                  0.0;
+        while (badedge) {
+          /* Eliminate the edge with an edge flip.  As a result, the     */
+          /*   right triangulation will have one more boundary triangle. */
+          lprevself(nextedge);
+          sym(nextedge, topcasing);
+          lprevself(nextedge);
+          sym(nextedge, sidecasing);
+          bond(nextedge, topcasing);
+          bond(rightcand, sidecasing);
+          lprevself(rightcand);
+          sym(rightcand, outercasing);
+          lnextself(nextedge);
+          bond(nextedge, outercasing);
+          /* Correct the vertices to reflect the edge flip. */
+          setorg(rightcand, NULL);
+          setdest(rightcand, lowerright);
+          setapex(rightcand, nextapex);
+          setorg(nextedge, upperright);
+          setdest(nextedge, NULL);
+          setapex(nextedge, nextapex);
+          /* Consider the newly exposed vertex. */
+          upperright = nextapex;
+          /* What vertex would be exposed if another edge were deleted? */
+          otricopy(sidecasing, nextedge);
+          apex(nextedge, nextapex);
+          if (nextapex != (vertex) NULL) {
+            /* Check whether the edge is Delaunay. */
+            badedge = incircle(m, b, lowerleft, lowerright, upperright,
+                               nextapex) > 0.0;
+          } else {
+            /* Avoid eating right through the triangulation. */
+            badedge = 0;
+          }
+        }
+      }
+    }
+    if (leftfinished || (!rightfinished &&
+           (incircle(m, b, upperleft, lowerleft, lowerright, upperright) >
+            0.0))) {
+      /* Knit the triangulations, adding an edge from `lowerleft' */
+      /*   to `upperright'.                                       */
+      bond(baseedge, rightcand);
+      lprev(rightcand, baseedge);
+      setdest(baseedge, lowerleft);
+      lowerright = upperright;
+      sym(baseedge, rightcand);
+      apex(rightcand, upperright);
+    } else {
+      /* Knit the triangulations, adding an edge from `upperleft' */
+      /*   to `lowerright'.                                       */
+      bond(baseedge, leftcand);
+      lnext(leftcand, baseedge);
+      setorg(baseedge, lowerright);
+      lowerleft = upperleft;
+      sym(baseedge, leftcand);
+      apex(leftcand, upperleft);
+    }
+    if (b->verbose > 2) {
+      printf("  Connecting ");
+      printtriangle(m, b, &baseedge);
+    }
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  divconqrecurse()   Recursively form a Delaunay triangulation by the      */
+/*                     divide-and-conquer method.                            */
+/*                                                                           */
+/*  Recursively breaks down the problem into smaller pieces, which are       */
+/*  knitted together by mergehulls().  The base cases (problems of two or    */
+/*  three vertices) are handled specially here.                              */
+/*                                                                           */
+/*  On completion, `farleft' and `farright' are bounding triangles such that */
+/*  the origin of `farleft' is the leftmost vertex (breaking ties by         */
+/*  choosing the highest leftmost vertex), and the destination of            */
+/*  `farright' is the rightmost vertex (breaking ties by choosing the        */
+/*  lowest rightmost vertex).                                                */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void divconqrecurse(struct mesh *m, struct behavior *b, vertex *sortarray,
+                    int vertices, int axis,
+                    struct otri *farleft, struct otri *farright)
+#else /* not ANSI_DECLARATORS */
+void divconqrecurse(m, b, sortarray, vertices, axis, farleft, farright)
+struct mesh *m;
+struct behavior *b;
+vertex *sortarray;
+int vertices;
+int axis;
+struct otri *farleft;
+struct otri *farright;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri midtri, tri1, tri2, tri3;
+  struct otri innerleft, innerright;
+  REAL area;
+  int divider;
+
+  if (b->verbose > 2) {
+    printf("  Triangulating %d vertices.\n", vertices);
+  }
+  if (vertices == 2) {
+    /* The triangulation of two vertices is an edge.  An edge is */
+    /*   represented by two bounding triangles.                  */
+    maketriangle(m, b, farleft);
+    setorg(*farleft, sortarray[0]);
+    setdest(*farleft, sortarray[1]);
+    /* The apex is intentionally left NULL. */
+    maketriangle(m, b, farright);
+    setorg(*farright, sortarray[1]);
+    setdest(*farright, sortarray[0]);
+    /* The apex is intentionally left NULL. */
+    bond(*farleft, *farright);
+    lprevself(*farleft);
+    lnextself(*farright);
+    bond(*farleft, *farright);
+    lprevself(*farleft);
+    lnextself(*farright);
+    bond(*farleft, *farright);
+    if (b->verbose > 2) {
+      printf("  Creating ");
+      printtriangle(m, b, farleft);
+      printf("  Creating ");
+      printtriangle(m, b, farright);
+    }
+    /* Ensure that the origin of `farleft' is sortarray[0]. */
+    lprev(*farright, *farleft);
+    return;
+  } else if (vertices == 3) {
+    /* The triangulation of three vertices is either a triangle (with */
+    /*   three bounding triangles) or two edges (with four bounding   */
+    /*   triangles).  In either case, four triangles are created.     */
+    maketriangle(m, b, &midtri);
+    maketriangle(m, b, &tri1);
+    maketriangle(m, b, &tri2);
+    maketriangle(m, b, &tri3);
+    area = counterclockwise(m, b, sortarray[0], sortarray[1], sortarray[2]);
+    if (area == 0.0) {
+      /* Three collinear vertices; the triangulation is two edges. */
+      setorg(midtri, sortarray[0]);
+      setdest(midtri, sortarray[1]);
+      setorg(tri1, sortarray[1]);
+      setdest(tri1, sortarray[0]);
+      setorg(tri2, sortarray[2]);
+      setdest(tri2, sortarray[1]);
+      setorg(tri3, sortarray[1]);
+      setdest(tri3, sortarray[2]);
+      /* All apices are intentionally left NULL. */
+      bond(midtri, tri1);
+      bond(tri2, tri3);
+      lnextself(midtri);
+      lprevself(tri1);
+      lnextself(tri2);
+      lprevself(tri3);
+      bond(midtri, tri3);
+      bond(tri1, tri2);
+      lnextself(midtri);
+      lprevself(tri1);
+      lnextself(tri2);
+      lprevself(tri3);
+      bond(midtri, tri1);
+      bond(tri2, tri3);
+      /* Ensure that the origin of `farleft' is sortarray[0]. */
+      otricopy(tri1, *farleft);
+      /* Ensure that the destination of `farright' is sortarray[2]. */
+      otricopy(tri2, *farright);
+    } else {
+      /* The three vertices are not collinear; the triangulation is one */
+      /*   triangle, namely `midtri'.                                   */
+      setorg(midtri, sortarray[0]);
+      setdest(tri1, sortarray[0]);
+      setorg(tri3, sortarray[0]);
+      /* Apices of tri1, tri2, and tri3 are left NULL. */
+      if (area > 0.0) {
+        /* The vertices are in counterclockwise order. */
+        setdest(midtri, sortarray[1]);
+        setorg(tri1, sortarray[1]);
+        setdest(tri2, sortarray[1]);
+        setapex(midtri, sortarray[2]);
+        setorg(tri2, sortarray[2]);
+        setdest(tri3, sortarray[2]);
+      } else {
+        /* The vertices are in clockwise order. */
+        setdest(midtri, sortarray[2]);
+        setorg(tri1, sortarray[2]);
+        setdest(tri2, sortarray[2]);
+        setapex(midtri, sortarray[1]);
+        setorg(tri2, sortarray[1]);
+        setdest(tri3, sortarray[1]);
+      }
+      /* The topology does not depend on how the vertices are ordered. */
+      bond(midtri, tri1);
+      lnextself(midtri);
+      bond(midtri, tri2);
+      lnextself(midtri);
+      bond(midtri, tri3);
+      lprevself(tri1);
+      lnextself(tri2);
+      bond(tri1, tri2);
+      lprevself(tri1);
+      lprevself(tri3);
+      bond(tri1, tri3);
+      lnextself(tri2);
+      lprevself(tri3);
+      bond(tri2, tri3);
+      /* Ensure that the origin of `farleft' is sortarray[0]. */
+      otricopy(tri1, *farleft);
+      /* Ensure that the destination of `farright' is sortarray[2]. */
+      if (area > 0.0) {
+        otricopy(tri2, *farright);
+      } else {
+        lnext(*farleft, *farright);
+      }
+    }
+    if (b->verbose > 2) {
+      printf("  Creating ");
+      printtriangle(m, b, &midtri);
+      printf("  Creating ");
+      printtriangle(m, b, &tri1);
+      printf("  Creating ");
+      printtriangle(m, b, &tri2);
+      printf("  Creating ");
+      printtriangle(m, b, &tri3);
+    }
+    return;
+  } else {
+    /* Split the vertices in half. */
+    divider = vertices >> 1;
+    /* Recursively triangulate each half. */
+    divconqrecurse(m, b, sortarray, divider, 1 - axis, farleft, &innerleft);
+    divconqrecurse(m, b, &sortarray[divider], vertices - divider, 1 - axis,
+                   &innerright, farright);
+    if (b->verbose > 1) {
+      printf("  Joining triangulations with %d and %d vertices.\n", divider,
+             vertices - divider);
+    }
+    /* Merge the two triangulations into one. */
+    mergehulls(m, b, farleft, &innerleft, &innerright, farright, axis);
+  }
+}
+
+#ifdef ANSI_DECLARATORS
+long removeghosts(struct mesh *m, struct behavior *b, struct otri *startghost)
+#else /* not ANSI_DECLARATORS */
+long removeghosts(m, b, startghost)
+struct mesh *m;
+struct behavior *b;
+struct otri *startghost;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri searchedge;
+  struct otri dissolveedge;
+  struct otri deadtriangle;
+  vertex markorg;
+  long hullsize;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+
+  if (b->verbose) {
+    printf("  Removing ghost triangles.\n");
+  }
+  /* Find an edge on the convex hull to start point location from. */
+  lprev(*startghost, searchedge);
+  symself(searchedge);
+  m->dummytri[0] = encode(searchedge);
+  /* Remove the bounding box and count the convex hull edges. */
+  otricopy(*startghost, dissolveedge);
+  hullsize = 0;
+  do {
+    hullsize++;
+    lnext(dissolveedge, deadtriangle);
+    lprevself(dissolveedge);
+    symself(dissolveedge);
+    /* If no PSLG is involved, set the boundary markers of all the vertices */
+    /*   on the convex hull.  If a PSLG is used, this step is done later.   */
+    if (!b->poly) {
+      /* Watch out for the case where all the input vertices are collinear. */
+      if (dissolveedge.tri != m->dummytri) {
+        org(dissolveedge, markorg);
+        if (vertexmark(markorg) == 0) {
+          setvertexmark(markorg, 1);
+        }
+      }
+    }
+    /* Remove a bounding triangle from a convex hull triangle. */
+    dissolve(dissolveedge);
+    /* Find the next bounding triangle. */
+    sym(deadtriangle, dissolveedge);
+    /* Delete the bounding triangle. */
+    triangledealloc(m, deadtriangle.tri);
+  } while (!otriequal(dissolveedge, *startghost));
+  return hullsize;
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  divconqdelaunay()   Form a Delaunay triangulation by the divide-and-     */
+/*                      conquer method.                                      */
+/*                                                                           */
+/*  Sorts the vertices, calls a recursive procedure to triangulate them, and */
+/*  removes the bounding box, setting boundary markers as appropriate.       */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+long divconqdelaunay(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+long divconqdelaunay(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  vertex *sortarray;
+  struct otri hullleft, hullright;
+  int divider;
+  int i, j;
+
+  if (b->verbose) {
+    printf("  Sorting vertices.\n");
+  }
+
+  /* Allocate an array of pointers to vertices for sorting. */
+  sortarray = (vertex *) trimalloc(m->invertices * (int) sizeof(vertex));
+  traversalinit(&m->vertices);
+  for (i = 0; i < m->invertices; i++) {
+    sortarray[i] = vertextraverse(m);
+  }
+  /* Sort the vertices. */
+  vertexsort(sortarray, m->invertices);
+  /* Discard duplicate vertices, which can really mess up the algorithm. */
+  i = 0;
+  for (j = 1; j < m->invertices; j++) {
+    if ((sortarray[i][0] == sortarray[j][0])
+        && (sortarray[i][1] == sortarray[j][1])) {
+      if (!b->quiet) {
+        printf(
+"Warning:  A duplicate vertex at (%.12g, %.12g) appeared and was ignored.\n",
+               sortarray[j][0], sortarray[j][1]);
+      }
+      setvertextype(sortarray[j], UNDEADVERTEX);
+      m->undeads++;
+    } else {
+      i++;
+      sortarray[i] = sortarray[j];
+    }
+  }
+  i++;
+  if (b->dwyer) {
+    /* Re-sort the array of vertices to accommodate alternating cuts. */
+    divider = i >> 1;
+    if (i - divider >= 2) {
+      if (divider >= 2) {
+        alternateaxes(sortarray, divider, 1);
+      }
+      alternateaxes(&sortarray[divider], i - divider, 1);
+    }
+  }
+
+  if (b->verbose) {
+    printf("  Forming triangulation.\n");
+  }
+
+  /* Form the Delaunay triangulation. */
+  divconqrecurse(m, b, sortarray, i, 0, &hullleft, &hullright);
+  trifree((VOID *) sortarray);
+
+  return removeghosts(m, b, &hullleft);
+}
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Divide-and-conquer Delaunay triangulation ends here       *********/
+
+/********* Incremental Delaunay triangulation begins here            *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  boundingbox()   Form an "infinite" bounding triangle to insert vertices  */
+/*                  into.                                                    */
+/*                                                                           */
+/*  The vertices at "infinity" are assigned finite coordinates, which are    */
+/*  used by the point location routines, but (mostly) ignored by the         */
+/*  Delaunay edge flip routines.                                             */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+void boundingbox(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void boundingbox(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri inftri;          /* Handle for the triangular bounding box. */
+  REAL width;
+
+  if (b->verbose) {
+    printf("  Creating triangular bounding box.\n");
+  }
+  /* Find the width (or height, whichever is larger) of the triangulation. */
+  width = m->xmax - m->xmin;
+  if (m->ymax - m->ymin > width) {
+    width = m->ymax - m->ymin;
+  }
+  if (width == 0.0) {
+    width = 1.0;
+  }
+  /* Create the vertices of the bounding box. */
+  m->infvertex1 = (vertex) trimalloc(m->vertices.itembytes);
+  m->infvertex2 = (vertex) trimalloc(m->vertices.itembytes);
+  m->infvertex3 = (vertex) trimalloc(m->vertices.itembytes);
+  m->infvertex1[0] = m->xmin - 50.0 * width;
+  m->infvertex1[1] = m->ymin - 40.0 * width;
+  m->infvertex2[0] = m->xmax + 50.0 * width;
+  m->infvertex2[1] = m->ymin - 40.0 * width;
+  m->infvertex3[0] = 0.5 * (m->xmin + m->xmax);
+  m->infvertex3[1] = m->ymax + 60.0 * width;
+
+  /* Create the bounding box. */
+  maketriangle(m, b, &inftri);
+  setorg(inftri, m->infvertex1);
+  setdest(inftri, m->infvertex2);
+  setapex(inftri, m->infvertex3);
+  /* Link dummytri to the bounding box so we can always find an */
+  /*   edge to begin searching (point location) from.           */
+  m->dummytri[0] = (triangle) inftri.tri;
+  if (b->verbose > 2) {
+    printf("  Creating ");
+    printtriangle(m, b, &inftri);
+  }
+}
+
+#endif /* not REDUCED */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  removebox()   Remove the "infinite" bounding triangle, setting boundary  */
+/*                markers as appropriate.                                    */
+/*                                                                           */
+/*  The triangular bounding box has three boundary triangles (one for each   */
+/*  side of the bounding box), and a bunch of triangles fanning out from     */
+/*  the three bounding box vertices (one triangle for each edge of the       */
+/*  convex hull of the inner mesh).  This routine removes these triangles.   */
+/*                                                                           */
+/*  Returns the number of edges on the convex hull of the triangulation.     */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+long removebox(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+long removebox(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri deadtriangle;
+  struct otri searchedge;
+  struct otri checkedge;
+  struct otri nextedge, finaledge, dissolveedge;
+  vertex markorg;
+  long hullsize;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+
+  if (b->verbose) {
+    printf("  Removing triangular bounding box.\n");
+  }
+  /* Find a boundary triangle. */
+  nextedge.tri = m->dummytri;
+  nextedge.orient = 0;
+  symself(nextedge);
+  /* Mark a place to stop. */
+  lprev(nextedge, finaledge);
+  lnextself(nextedge);
+  symself(nextedge);
+  /* Find a triangle (on the boundary of the vertex set) that isn't */
+  /*   a bounding box triangle.                                     */
+  lprev(nextedge, searchedge);
+  symself(searchedge);
+  /* Check whether nextedge is another boundary triangle */
+  /*   adjacent to the first one.                        */
+  lnext(nextedge, checkedge);
+  symself(checkedge);
+  if (checkedge.tri == m->dummytri) {
+    /* Go on to the next triangle.  There are only three boundary   */
+    /*   triangles, and this next triangle cannot be the third one, */
+    /*   so it's safe to stop here.                                 */
+    lprevself(searchedge);
+    symself(searchedge);
+  }
+  /* Find a new boundary edge to search from, as the current search */
+  /*   edge lies on a bounding box triangle and will be deleted.    */
+  m->dummytri[0] = encode(searchedge);
+  hullsize = -2l;
+  while (!otriequal(nextedge, finaledge)) {
+    hullsize++;
+    lprev(nextedge, dissolveedge);
+    symself(dissolveedge);
+    /* If not using a PSLG, the vertices should be marked now. */
+    /*   (If using a PSLG, markhull() will do the job.)        */
+    if (!b->poly) {
+      /* Be careful!  One must check for the case where all the input     */
+      /*   vertices are collinear, and thus all the triangles are part of */
+      /*   the bounding box.  Otherwise, the setvertexmark() call below   */
+      /*   will cause a bad pointer reference.                            */
+      if (dissolveedge.tri != m->dummytri) {
+        org(dissolveedge, markorg);
+        if (vertexmark(markorg) == 0) {
+          setvertexmark(markorg, 1);
+        }
+      }
+    }
+    /* Disconnect the bounding box triangle from the mesh triangle. */
+    dissolve(dissolveedge);
+    lnext(nextedge, deadtriangle);
+    sym(deadtriangle, nextedge);
+    /* Get rid of the bounding box triangle. */
+    triangledealloc(m, deadtriangle.tri);
+    /* Do we need to turn the corner? */
+    if (nextedge.tri == m->dummytri) {
+      /* Turn the corner. */
+      otricopy(dissolveedge, nextedge);
+    }
+  }
+  triangledealloc(m, finaledge.tri);
+
+  trifree((VOID *) m->infvertex1);  /* Deallocate the bounding box vertices. */
+  trifree((VOID *) m->infvertex2);
+  trifree((VOID *) m->infvertex3);
+
+  return hullsize;
+}
+
+#endif /* not REDUCED */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  incrementaldelaunay()   Form a Delaunay triangulation by incrementally   */
+/*                          inserting vertices.                              */
+/*                                                                           */
+/*  Returns the number of edges on the convex hull of the triangulation.     */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+long incrementaldelaunay(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+long incrementaldelaunay(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri starttri;
+  vertex vertexloop;
+
+  /* Create a triangular bounding box. */
+  boundingbox(m, b);
+  if (b->verbose) {
+    printf("  Incrementally inserting vertices.\n");
+  }
+  traversalinit(&m->vertices);
+  vertexloop = vertextraverse(m);
+  while (vertexloop != (vertex) NULL) {
+    starttri.tri = m->dummytri;
+    if (insertvertex(m, b, vertexloop, &starttri, (struct osub *) NULL, 0, 0)
+        == DUPLICATEVERTEX) {
+      if (!b->quiet) {
+        printf(
+"Warning:  A duplicate vertex at (%.12g, %.12g) appeared and was ignored.\n",
+               vertexloop[0], vertexloop[1]);
+      }
+      setvertextype(vertexloop, UNDEADVERTEX);
+      m->undeads++;
+    }
+    vertexloop = vertextraverse(m);
+  }
+  /* Remove the bounding box. */
+  return removebox(m, b);
+}
+
+#endif /* not REDUCED */
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Incremental Delaunay triangulation ends here              *********/
+
+/********* Sweepline Delaunay triangulation begins here              *********/
+/**                                                                         **/
+/**                                                                         **/
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+void eventheapinsert(struct event **heap, int heapsize, struct event *newevent)
+#else /* not ANSI_DECLARATORS */
+void eventheapinsert(heap, heapsize, newevent)
+struct event **heap;
+int heapsize;
+struct event *newevent;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL eventx, eventy;
+  int eventnum;
+  int parent;
+  int notdone;
+
+  eventx = newevent->xkey;
+  eventy = newevent->ykey;
+  eventnum = heapsize;
+  notdone = eventnum > 0;
+  while (notdone) {
+    parent = (eventnum - 1) >> 1;
+    if ((heap[parent]->ykey < eventy) ||
+        ((heap[parent]->ykey == eventy)
+         && (heap[parent]->xkey <= eventx))) {
+      notdone = 0;
+    } else {
+      heap[eventnum] = heap[parent];
+      heap[eventnum]->heapposition = eventnum;
+
+      eventnum = parent;
+      notdone = eventnum > 0;
+    }
+  }
+  heap[eventnum] = newevent;
+  newevent->heapposition = eventnum;
+}
+
+#endif /* not REDUCED */
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+void eventheapify(struct event **heap, int heapsize, int eventnum)
+#else /* not ANSI_DECLARATORS */
+void eventheapify(heap, heapsize, eventnum)
+struct event **heap;
+int heapsize;
+int eventnum;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct event *thisevent;
+  REAL eventx, eventy;
+  int leftchild, rightchild;
+  int smallest;
+  int notdone;
+
+  thisevent = heap[eventnum];
+  eventx = thisevent->xkey;
+  eventy = thisevent->ykey;
+  leftchild = 2 * eventnum + 1;
+  notdone = leftchild < heapsize;
+  while (notdone) {
+    if ((heap[leftchild]->ykey < eventy) ||
+        ((heap[leftchild]->ykey == eventy)
+         && (heap[leftchild]->xkey < eventx))) {
+      smallest = leftchild;
+    } else {
+      smallest = eventnum;
+    }
+    rightchild = leftchild + 1;
+    if (rightchild < heapsize) {
+      if ((heap[rightchild]->ykey < heap[smallest]->ykey) ||
+          ((heap[rightchild]->ykey == heap[smallest]->ykey)
+           && (heap[rightchild]->xkey < heap[smallest]->xkey))) {
+        smallest = rightchild;
+      }
+    }
+    if (smallest == eventnum) {
+      notdone = 0;
+    } else {
+      heap[eventnum] = heap[smallest];
+      heap[eventnum]->heapposition = eventnum;
+      heap[smallest] = thisevent;
+      thisevent->heapposition = smallest;
+
+      eventnum = smallest;
+      leftchild = 2 * eventnum + 1;
+      notdone = leftchild < heapsize;
+    }
+  }
+}
+
+#endif /* not REDUCED */
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+void eventheapdelete(struct event **heap, int heapsize, int eventnum)
+#else /* not ANSI_DECLARATORS */
+void eventheapdelete(heap, heapsize, eventnum)
+struct event **heap;
+int heapsize;
+int eventnum;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct event *moveevent;
+  REAL eventx, eventy;
+  int parent;
+  int notdone;
+
+  moveevent = heap[heapsize - 1];
+  if (eventnum > 0) {
+    eventx = moveevent->xkey;
+    eventy = moveevent->ykey;
+    do {
+      parent = (eventnum - 1) >> 1;
+      if ((heap[parent]->ykey < eventy) ||
+          ((heap[parent]->ykey == eventy)
+           && (heap[parent]->xkey <= eventx))) {
+        notdone = 0;
+      } else {
+        heap[eventnum] = heap[parent];
+        heap[eventnum]->heapposition = eventnum;
+
+        eventnum = parent;
+        notdone = eventnum > 0;
+      }
+    } while (notdone);
+  }
+  heap[eventnum] = moveevent;
+  moveevent->heapposition = eventnum;
+  eventheapify(heap, heapsize - 1, eventnum);
+}
+
+#endif /* not REDUCED */
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+void createeventheap(struct mesh *m, struct event ***eventheap,
+                     struct event **events, struct event **freeevents)
+#else /* not ANSI_DECLARATORS */
+void createeventheap(m, eventheap, events, freeevents)
+struct mesh *m;
+struct event ***eventheap;
+struct event **events;
+struct event **freeevents;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  vertex thisvertex;
+  int maxevents;
+  int i;
+
+  maxevents = (3 * m->invertices) / 2;
+  *eventheap = (struct event **) trimalloc(maxevents *
+                                           (int) sizeof(struct event *));
+  *events = (struct event *) trimalloc(maxevents * (int) sizeof(struct event));
+  traversalinit(&m->vertices);
+  for (i = 0; i < m->invertices; i++) {
+    thisvertex = vertextraverse(m);
+    (*events)[i].eventptr = (VOID *) thisvertex;
+    (*events)[i].xkey = thisvertex[0];
+    (*events)[i].ykey = thisvertex[1];
+    eventheapinsert(*eventheap, i, *events + i);
+  }
+  *freeevents = (struct event *) NULL;
+  for (i = maxevents - 1; i >= m->invertices; i--) {
+    (*events)[i].eventptr = (VOID *) *freeevents;
+    *freeevents = *events + i;
+  }
+}
+
+#endif /* not REDUCED */
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+int rightofhyperbola(struct mesh *m, struct otri *fronttri, vertex newsite)
+#else /* not ANSI_DECLARATORS */
+int rightofhyperbola(m, fronttri, newsite)
+struct mesh *m;
+struct otri *fronttri;
+vertex newsite;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  vertex leftvertex, rightvertex;
+  REAL dxa, dya, dxb, dyb;
+
+  m->hyperbolacount++;
+
+  dest(*fronttri, leftvertex);
+  apex(*fronttri, rightvertex);
+  if ((leftvertex[1] < rightvertex[1]) ||
+      ((leftvertex[1] == rightvertex[1]) &&
+       (leftvertex[0] < rightvertex[0]))) {
+    if (newsite[0] >= rightvertex[0]) {
+      return 1;
+    }
+  } else {
+    if (newsite[0] <= leftvertex[0]) {
+      return 0;
+    }
+  }
+  dxa = leftvertex[0] - newsite[0];
+  dya = leftvertex[1] - newsite[1];
+  dxb = rightvertex[0] - newsite[0];
+  dyb = rightvertex[1] - newsite[1];
+  return dya * (dxb * dxb + dyb * dyb) > dyb * (dxa * dxa + dya * dya);
+}
+
+#endif /* not REDUCED */
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+REAL circletop(struct mesh *m, vertex pa, vertex pb, vertex pc, REAL ccwabc)
+#else /* not ANSI_DECLARATORS */
+REAL circletop(m, pa, pb, pc, ccwabc)
+struct mesh *m;
+vertex pa;
+vertex pb;
+vertex pc;
+REAL ccwabc;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL xac, yac, xbc, ybc, xab, yab;
+  REAL aclen2, bclen2, ablen2;
+
+  m->circletopcount++;
+
+  xac = pa[0] - pc[0];
+  yac = pa[1] - pc[1];
+  xbc = pb[0] - pc[0];
+  ybc = pb[1] - pc[1];
+  xab = pa[0] - pb[0];
+  yab = pa[1] - pb[1];
+  aclen2 = xac * xac + yac * yac;
+  bclen2 = xbc * xbc + ybc * ybc;
+  ablen2 = xab * xab + yab * yab;
+  return pc[1] + (xac * bclen2 - xbc * aclen2 + sqrt(aclen2 * bclen2 * ablen2))
+               / (2.0 * ccwabc);
+}
+
+#endif /* not REDUCED */
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+void check4deadevent(struct otri *checktri, struct event **freeevents,
+                     struct event **eventheap, int *heapsize)
+#else /* not ANSI_DECLARATORS */
+void check4deadevent(checktri, freeevents, eventheap, heapsize)
+struct otri *checktri;
+struct event **freeevents;
+struct event **eventheap;
+int *heapsize;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct event *deadevent;
+  vertex eventvertex;
+  int eventnum;
+
+  org(*checktri, eventvertex);
+  if (eventvertex != (vertex) NULL) {
+    deadevent = (struct event *) eventvertex;
+    eventnum = deadevent->heapposition;
+    deadevent->eventptr = (VOID *) *freeevents;
+    *freeevents = deadevent;
+    eventheapdelete(eventheap, *heapsize, eventnum);
+    (*heapsize)--;
+    setorg(*checktri, NULL);
+  }
+}
+
+#endif /* not REDUCED */
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+struct splaynode *splay(struct mesh *m, struct splaynode *splaytree,
+                        vertex searchpoint, struct otri *searchtri)
+#else /* not ANSI_DECLARATORS */
+struct splaynode *splay(m, splaytree, searchpoint, searchtri)
+struct mesh *m;
+struct splaynode *splaytree;
+vertex searchpoint;
+struct otri *searchtri;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct splaynode *child, *grandchild;
+  struct splaynode *lefttree, *righttree;
+  struct splaynode *leftright;
+  vertex checkvertex;
+  int rightofroot, rightofchild;
+
+  if (splaytree == (struct splaynode *) NULL) {
+    return (struct splaynode *) NULL;
+  }
+  dest(splaytree->keyedge, checkvertex);
+  if (checkvertex == splaytree->keydest) {
+    rightofroot = rightofhyperbola(m, &splaytree->keyedge, searchpoint);
+    if (rightofroot) {
+      otricopy(splaytree->keyedge, *searchtri);
+      child = splaytree->rchild;
+    } else {
+      child = splaytree->lchild;
+    }
+    if (child == (struct splaynode *) NULL) {
+      return splaytree;
+    }
+    dest(child->keyedge, checkvertex);
+    if (checkvertex != child->keydest) {
+      child = splay(m, child, searchpoint, searchtri);
+      if (child == (struct splaynode *) NULL) {
+        if (rightofroot) {
+          splaytree->rchild = (struct splaynode *) NULL;
+        } else {
+          splaytree->lchild = (struct splaynode *) NULL;
+        }
+        return splaytree;
+      }
+    }
+    rightofchild = rightofhyperbola(m, &child->keyedge, searchpoint);
+    if (rightofchild) {
+      otricopy(child->keyedge, *searchtri);
+      grandchild = splay(m, child->rchild, searchpoint, searchtri);
+      child->rchild = grandchild;
+    } else {
+      grandchild = splay(m, child->lchild, searchpoint, searchtri);
+      child->lchild = grandchild;
+    }
+    if (grandchild == (struct splaynode *) NULL) {
+      if (rightofroot) {
+        splaytree->rchild = child->lchild;
+        child->lchild = splaytree;
+      } else {
+        splaytree->lchild = child->rchild;
+        child->rchild = splaytree;
+      }
+      return child;
+    }
+    if (rightofchild) {
+      if (rightofroot) {
+        splaytree->rchild = child->lchild;
+        child->lchild = splaytree;
+      } else {
+        splaytree->lchild = grandchild->rchild;
+        grandchild->rchild = splaytree;
+      }
+      child->rchild = grandchild->lchild;
+      grandchild->lchild = child;
+    } else {
+      if (rightofroot) {
+        splaytree->rchild = grandchild->lchild;
+        grandchild->lchild = splaytree;
+      } else {
+        splaytree->lchild = child->rchild;
+        child->rchild = splaytree;
+      }
+      child->lchild = grandchild->rchild;
+      grandchild->rchild = child;
+    }
+    return grandchild;
+  } else {
+    lefttree = splay(m, splaytree->lchild, searchpoint, searchtri);
+    righttree = splay(m, splaytree->rchild, searchpoint, searchtri);
+
+    pooldealloc(&m->splaynodes, (VOID *) splaytree);
+    if (lefttree == (struct splaynode *) NULL) {
+      return righttree;
+    } else if (righttree == (struct splaynode *) NULL) {
+      return lefttree;
+    } else if (lefttree->rchild == (struct splaynode *) NULL) {
+      lefttree->rchild = righttree->lchild;
+      righttree->lchild = lefttree;
+      return righttree;
+    } else if (righttree->lchild == (struct splaynode *) NULL) {
+      righttree->lchild = lefttree->rchild;
+      lefttree->rchild = righttree;
+      return lefttree;
+    } else {
+/*      printf("Holy Toledo!!!\n"); */
+      leftright = lefttree->rchild;
+      while (leftright->rchild != (struct splaynode *) NULL) {
+        leftright = leftright->rchild;
+      }
+      leftright->rchild = righttree;
+      return lefttree;
+    }
+  }
+}
+
+#endif /* not REDUCED */
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+struct splaynode *splayinsert(struct mesh *m, struct splaynode *splayroot,
+                              struct otri *newkey, vertex searchpoint)
+#else /* not ANSI_DECLARATORS */
+struct splaynode *splayinsert(m, splayroot, newkey, searchpoint)
+struct mesh *m;
+struct splaynode *splayroot;
+struct otri *newkey;
+vertex searchpoint;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct splaynode *newsplaynode;
+
+  newsplaynode = (struct splaynode *) poolalloc(&m->splaynodes);
+  otricopy(*newkey, newsplaynode->keyedge);
+  dest(*newkey, newsplaynode->keydest);
+  if (splayroot == (struct splaynode *) NULL) {
+    newsplaynode->lchild = (struct splaynode *) NULL;
+    newsplaynode->rchild = (struct splaynode *) NULL;
+  } else if (rightofhyperbola(m, &splayroot->keyedge, searchpoint)) {
+    newsplaynode->lchild = splayroot;
+    newsplaynode->rchild = splayroot->rchild;
+    splayroot->rchild = (struct splaynode *) NULL;
+  } else {
+    newsplaynode->lchild = splayroot->lchild;
+    newsplaynode->rchild = splayroot;
+    splayroot->lchild = (struct splaynode *) NULL;
+  }
+  return newsplaynode;
+}
+
+#endif /* not REDUCED */
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+struct splaynode *circletopinsert(struct mesh *m, struct behavior *b,
+                                  struct splaynode *splayroot,
+                                  struct otri *newkey,
+                                  vertex pa, vertex pb, vertex pc, REAL topy)
+#else /* not ANSI_DECLARATORS */
+struct splaynode *circletopinsert(m, b, splayroot, newkey, pa, pb, pc, topy)
+struct mesh *m;
+struct behavior *b;
+struct splaynode *splayroot;
+struct otri *newkey;
+vertex pa;
+vertex pb;
+vertex pc;
+REAL topy;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL ccwabc;
+  REAL xac, yac, xbc, ybc;
+  REAL aclen2, bclen2;
+  REAL searchpoint[2];
+  struct otri dummytri;
+
+  ccwabc = counterclockwise(m, b, pa, pb, pc);
+  xac = pa[0] - pc[0];
+  yac = pa[1] - pc[1];
+  xbc = pb[0] - pc[0];
+  ybc = pb[1] - pc[1];
+  aclen2 = xac * xac + yac * yac;
+  bclen2 = xbc * xbc + ybc * ybc;
+  searchpoint[0] = pc[0] - (yac * bclen2 - ybc * aclen2) / (2.0 * ccwabc);
+  searchpoint[1] = topy;
+  return splayinsert(m, splay(m, splayroot, (vertex) searchpoint, &dummytri),
+                     newkey, (vertex) searchpoint);
+}
+
+#endif /* not REDUCED */
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+struct splaynode *frontlocate(struct mesh *m, struct splaynode *splayroot,
+                              struct otri *bottommost, vertex searchvertex,
+                              struct otri *searchtri, int *farright)
+#else /* not ANSI_DECLARATORS */
+struct splaynode *frontlocate(m, splayroot, bottommost, searchvertex,
+                              searchtri, farright)
+struct mesh *m;
+struct splaynode *splayroot;
+struct otri *bottommost;
+vertex searchvertex;
+struct otri *searchtri;
+int *farright;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  int farrightflag;
+  triangle ptr;                       /* Temporary variable used by onext(). */
+
+  otricopy(*bottommost, *searchtri);
+  splayroot = splay(m, splayroot, searchvertex, searchtri);
+
+  farrightflag = 0;
+  while (!farrightflag && rightofhyperbola(m, searchtri, searchvertex)) {
+    onextself(*searchtri);
+    farrightflag = otriequal(*searchtri, *bottommost);
+  }
+  *farright = farrightflag;
+  return splayroot;
+}
+
+#endif /* not REDUCED */
+
+#ifndef REDUCED
+
+#ifdef ANSI_DECLARATORS
+long sweeplinedelaunay(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+long sweeplinedelaunay(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct event **eventheap;
+  struct event *events;
+  struct event *freeevents;
+  struct event *nextevent;
+  struct event *newevent;
+  struct splaynode *splayroot;
+  struct otri bottommost;
+  struct otri searchtri;
+  struct otri fliptri;
+  struct otri lefttri, righttri, farlefttri, farrighttri;
+  struct otri inserttri;
+  vertex firstvertex, secondvertex;
+  vertex nextvertex, lastvertex;
+  vertex connectvertex;
+  vertex leftvertex, midvertex, rightvertex;
+  REAL lefttest, righttest;
+  int heapsize;
+  int check4events, farrightflag;
+  triangle ptr;   /* Temporary variable used by sym(), onext(), and oprev(). */
+
+  poolinit(&m->splaynodes, sizeof(struct splaynode), SPLAYNODEPERBLOCK,
+           SPLAYNODEPERBLOCK, 0);
+  splayroot = (struct splaynode *) NULL;
+
+  if (b->verbose) {
+    printf("  Placing vertices in event heap.\n");
+  }
+  createeventheap(m, &eventheap, &events, &freeevents);
+  heapsize = m->invertices;
+
+  if (b->verbose) {
+    printf("  Forming triangulation.\n");
+  }
+  maketriangle(m, b, &lefttri);
+  maketriangle(m, b, &righttri);
+  bond(lefttri, righttri);
+  lnextself(lefttri);
+  lprevself(righttri);
+  bond(lefttri, righttri);
+  lnextself(lefttri);
+  lprevself(righttri);
+  bond(lefttri, righttri);
+  firstvertex = (vertex) eventheap[0]->eventptr;
+  eventheap[0]->eventptr = (VOID *) freeevents;
+  freeevents = eventheap[0];
+  eventheapdelete(eventheap, heapsize, 0);
+  heapsize--;
+  do {
+    if (heapsize == 0) {
+      printf("Error:  Input vertices are all identical.\n");
+      triexit(1);
+    }
+    secondvertex = (vertex) eventheap[0]->eventptr;
+    eventheap[0]->eventptr = (VOID *) freeevents;
+    freeevents = eventheap[0];
+    eventheapdelete(eventheap, heapsize, 0);
+    heapsize--;
+    if ((firstvertex[0] == secondvertex[0]) &&
+        (firstvertex[1] == secondvertex[1])) {
+      if (!b->quiet) {
+        printf(
+"Warning:  A duplicate vertex at (%.12g, %.12g) appeared and was ignored.\n",
+               secondvertex[0], secondvertex[1]);
+      }
+      setvertextype(secondvertex, UNDEADVERTEX);
+      m->undeads++;
+    }
+  } while ((firstvertex[0] == secondvertex[0]) &&
+           (firstvertex[1] == secondvertex[1]));
+  setorg(lefttri, firstvertex);
+  setdest(lefttri, secondvertex);
+  setorg(righttri, secondvertex);
+  setdest(righttri, firstvertex);
+  lprev(lefttri, bottommost);
+  lastvertex = secondvertex;
+  while (heapsize > 0) {
+    nextevent = eventheap[0];
+    eventheapdelete(eventheap, heapsize, 0);
+    heapsize--;
+    check4events = 1;
+    if (nextevent->xkey < m->xmin) {
+      decode(nextevent->eventptr, fliptri);
+      oprev(fliptri, farlefttri);
+      check4deadevent(&farlefttri, &freeevents, eventheap, &heapsize);
+      onext(fliptri, farrighttri);
+      check4deadevent(&farrighttri, &freeevents, eventheap, &heapsize);
+
+      if (otriequal(farlefttri, bottommost)) {
+        lprev(fliptri, bottommost);
+      }
+      flip(m, b, &fliptri);
+      setapex(fliptri, NULL);
+      lprev(fliptri, lefttri);
+      lnext(fliptri, righttri);
+      sym(lefttri, farlefttri);
+
+      if (randomnation(SAMPLERATE) == 0) {
+        symself(fliptri);
+        dest(fliptri, leftvertex);
+        apex(fliptri, midvertex);
+        org(fliptri, rightvertex);
+        splayroot = circletopinsert(m, b, splayroot, &lefttri, leftvertex,
+                                    midvertex, rightvertex, nextevent->ykey);
+      }
+    } else {
+      nextvertex = (vertex) nextevent->eventptr;
+      if ((nextvertex[0] == lastvertex[0]) &&
+          (nextvertex[1] == lastvertex[1])) {
+        if (!b->quiet) {
+          printf(
+"Warning:  A duplicate vertex at (%.12g, %.12g) appeared and was ignored.\n",
+                 nextvertex[0], nextvertex[1]);
+        }
+        setvertextype(nextvertex, UNDEADVERTEX);
+        m->undeads++;
+        check4events = 0;
+      } else {
+        lastvertex = nextvertex;
+
+        splayroot = frontlocate(m, splayroot, &bottommost, nextvertex,
+                                &searchtri, &farrightflag);
+/*
+        otricopy(bottommost, searchtri);
+        farrightflag = 0;
+        while (!farrightflag && rightofhyperbola(m, &searchtri, nextvertex)) {
+          onextself(searchtri);
+          farrightflag = otriequal(searchtri, bottommost);
+        }
+*/
+
+        check4deadevent(&searchtri, &freeevents, eventheap, &heapsize);
+
+        otricopy(searchtri, farrighttri);
+        sym(searchtri, farlefttri);
+        maketriangle(m, b, &lefttri);
+        maketriangle(m, b, &righttri);
+        dest(farrighttri, connectvertex);
+        setorg(lefttri, connectvertex);
+        setdest(lefttri, nextvertex);
+        setorg(righttri, nextvertex);
+        setdest(righttri, connectvertex);
+        bond(lefttri, righttri);
+        lnextself(lefttri);
+        lprevself(righttri);
+        bond(lefttri, righttri);
+        lnextself(lefttri);
+        lprevself(righttri);
+        bond(lefttri, farlefttri);
+        bond(righttri, farrighttri);
+        if (!farrightflag && otriequal(farrighttri, bottommost)) {
+          otricopy(lefttri, bottommost);
+        }
+
+        if (randomnation(SAMPLERATE) == 0) {
+          splayroot = splayinsert(m, splayroot, &lefttri, nextvertex);
+        } else if (randomnation(SAMPLERATE) == 0) {
+          lnext(righttri, inserttri);
+          splayroot = splayinsert(m, splayroot, &inserttri, nextvertex);
+        }
+      }
+    }
+    nextevent->eventptr = (VOID *) freeevents;
+    freeevents = nextevent;
+
+    if (check4events) {
+      apex(farlefttri, leftvertex);
+      dest(lefttri, midvertex);
+      apex(lefttri, rightvertex);
+      lefttest = counterclockwise(m, b, leftvertex, midvertex, rightvertex);
+      if (lefttest > 0.0) {
+        newevent = freeevents;
+        freeevents = (struct event *) freeevents->eventptr;
+        newevent->xkey = m->xminextreme;
+        newevent->ykey = circletop(m, leftvertex, midvertex, rightvertex,
+                                   lefttest);
+        newevent->eventptr = (VOID *) encode(lefttri);
+        eventheapinsert(eventheap, heapsize, newevent);
+        heapsize++;
+        setorg(lefttri, newevent);
+      }
+      apex(righttri, leftvertex);
+      org(righttri, midvertex);
+      apex(farrighttri, rightvertex);
+      righttest = counterclockwise(m, b, leftvertex, midvertex, rightvertex);
+      if (righttest > 0.0) {
+        newevent = freeevents;
+        freeevents = (struct event *) freeevents->eventptr;
+        newevent->xkey = m->xminextreme;
+        newevent->ykey = circletop(m, leftvertex, midvertex, rightvertex,
+                                   righttest);
+        newevent->eventptr = (VOID *) encode(farrighttri);
+        eventheapinsert(eventheap, heapsize, newevent);
+        heapsize++;
+        setorg(farrighttri, newevent);
+      }
+    }
+  }
+
+  pooldeinit(&m->splaynodes);
+  lprevself(bottommost);
+  return removeghosts(m, b, &bottommost);
+}
+
+#endif /* not REDUCED */
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Sweepline Delaunay triangulation ends here                *********/
+
+/********* General mesh construction routines begin here             *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  delaunay()   Form a Delaunay triangulation.                              */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+long delaunay(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+long delaunay(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  long hulledges;
+
+  m->eextras = 0;
+  initializetrisubpools(m, b);
+
+#ifdef REDUCED
+  if (!b->quiet) {
+    printf(
+      "Constructing Delaunay triangulation by divide-and-conquer method.\n");
+  }
+  hulledges = divconqdelaunay(m, b);
+#else /* not REDUCED */
+  if (!b->quiet) {
+    printf("Constructing Delaunay triangulation ");
+    if (b->incremental) {
+      printf("by incremental method.\n");
+    } else if (b->sweepline) {
+      printf("by sweepline method.\n");
+    } else {
+      printf("by divide-and-conquer method.\n");
+    }
+  }
+  if (b->incremental) {
+    hulledges = incrementaldelaunay(m, b);
+  } else if (b->sweepline) {
+    hulledges = sweeplinedelaunay(m, b);
+  } else {
+    hulledges = divconqdelaunay(m, b);
+  }
+#endif /* not REDUCED */
+
+  if (m->triangles.items == 0) {
+    /* The input vertices were all collinear, so there are no triangles. */
+    return 0l;
+  } else {
+    return hulledges;
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  reconstruct()   Reconstruct a triangulation from its .ele (and possibly  */
+/*                  .poly) file.  Used when the -r switch is used.           */
+/*                                                                           */
+/*  Reads an .ele file and reconstructs the original mesh.  If the -p switch */
+/*  is used, this procedure will also read a .poly file and reconstruct the  */
+/*  subsegments of the original mesh.  If the -a switch is used, this        */
+/*  procedure will also read an .area file and set a maximum area constraint */
+/*  on each triangle.                                                        */
+/*                                                                           */
+/*  Vertices that are not corners of triangles, such as nodes on edges of    */
+/*  subparametric elements, are discarded.                                   */
+/*                                                                           */
+/*  This routine finds the adjacencies between triangles (and subsegments)   */
+/*  by forming one stack of triangles for each vertex.  Each triangle is on  */
+/*  three different stacks simultaneously.  Each triangle's subsegment       */
+/*  pointers are used to link the items in each stack.  This memory-saving   */
+/*  feature makes the code harder to read.  The most important thing to keep */
+/*  in mind is that each triangle is removed from a stack precisely when     */
+/*  the corresponding pointer is adjusted to refer to a subsegment rather    */
+/*  than the next triangle of the stack.                                     */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+int reconstruct(struct mesh *m, struct behavior *b, int *trianglelist,
+                REAL *triangleattriblist, REAL *trianglearealist,
+                int elements, int corners, int attribs,
+                int *segmentlist,int *segmentmarkerlist, int numberofsegments)
+#else /* not ANSI_DECLARATORS */
+int reconstruct(m, b, trianglelist, triangleattriblist, trianglearealist,
+                elements, corners, attribs, segmentlist, segmentmarkerlist,
+                numberofsegments)
+struct mesh *m;
+struct behavior *b;
+int *trianglelist;
+REAL *triangleattriblist;
+REAL *trianglearealist;
+int elements;
+int corners;
+int attribs;
+int *segmentlist;
+int *segmentmarkerlist;
+int numberofsegments;
+#endif /* not ANSI_DECLARATORS */
+
+#else /* not TRILIBRARY */
+
+#ifdef ANSI_DECLARATORS
+long reconstruct(struct mesh *m, struct behavior *b, char *elefilename,
+                 char *areafilename, char *polyfilename, FILE *polyfile)
+#else /* not ANSI_DECLARATORS */
+long reconstruct(m, b, elefilename, areafilename, polyfilename, polyfile)
+struct mesh *m;
+struct behavior *b;
+char *elefilename;
+char *areafilename;
+char *polyfilename;
+FILE *polyfile;
+#endif /* not ANSI_DECLARATORS */
+
+#endif /* not TRILIBRARY */
+
+{
+#ifdef TRILIBRARY
+  int vertexindex;
+  int attribindex;
+#else /* not TRILIBRARY */
+  FILE *elefile;
+  FILE *areafile;
+  char inputline[INPUTLINESIZE];
+  char *stringptr;
+  int areaelements;
+#endif /* not TRILIBRARY */
+  struct otri triangleloop;
+  struct otri triangleleft;
+  struct otri checktri;
+  struct otri checkleft;
+  struct otri checkneighbor;
+  struct osub subsegloop;
+  triangle *vertexarray;
+  triangle *prevlink;
+  triangle nexttri;
+  vertex tdest, tapex;
+  vertex checkdest, checkapex;
+  vertex shorg;
+  vertex killvertex;
+  vertex segmentorg, segmentdest;
+  REAL area;
+  int corner[3];
+  int end[2];
+  int killvertexindex;
+  int incorners;
+  int segmentmarkers;
+  int boundmarker;
+  int aroundvertex;
+  long hullsize;
+  int notfound;
+  long elementnumber, segmentnumber;
+  int i, j;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+
+#ifdef TRILIBRARY
+  m->inelements = elements;
+  incorners = corners;
+  if (incorners < 3) {
+    printf("Error:  Triangles must have at least 3 vertices.\n");
+    triexit(1);
+  }
+  m->eextras = attribs;
+#else /* not TRILIBRARY */
+  /* Read the triangles from an .ele file. */
+  if (!b->quiet) {
+    printf("Opening %s.\n", elefilename);
+  }
+  elefile = fopen(elefilename, "r");
+  if (elefile == (FILE *) NULL) {
+    printf("  Error:  Cannot access file %s.\n", elefilename);
+    triexit(1);
+  }
+  /* Read number of triangles, number of vertices per triangle, and */
+  /*   number of triangle attributes from .ele file.                */
+  stringptr = readline(inputline, elefile, elefilename);
+  m->inelements = (int) strtol(stringptr, &stringptr, 0);
+  stringptr = findfield(stringptr);
+  if (*stringptr == '\0') {
+    incorners = 3;
+  } else {
+    incorners = (int) strtol(stringptr, &stringptr, 0);
+    if (incorners < 3) {
+      printf("Error:  Triangles in %s must have at least 3 vertices.\n",
+             elefilename);
+      triexit(1);
+    }
+  }
+  stringptr = findfield(stringptr);
+  if (*stringptr == '\0') {
+    m->eextras = 0;
+  } else {
+    m->eextras = (int) strtol(stringptr, &stringptr, 0);
+  }
+#endif /* not TRILIBRARY */
+
+  initializetrisubpools(m, b);
+
+  /* Create the triangles. */
+  for (elementnumber = 1; elementnumber <= m->inelements; elementnumber++) {
+    maketriangle(m, b, &triangleloop);
+    /* Mark the triangle as living. */
+    triangleloop.tri[3] = (triangle) triangleloop.tri;
+  }
+
+  segmentmarkers = 0;
+  if (b->poly) {
+#ifdef TRILIBRARY
+    m->insegments = numberofsegments;
+    segmentmarkers = segmentmarkerlist != (int *) NULL;
+#else /* not TRILIBRARY */
+    /* Read number of segments and number of segment */
+    /*   boundary markers from .poly file.           */
+    stringptr = readline(inputline, polyfile, b->inpolyfilename);
+    m->insegments = (int) strtol(stringptr, &stringptr, 0);
+    stringptr = findfield(stringptr);
+    if (*stringptr != '\0') {
+      segmentmarkers = (int) strtol(stringptr, &stringptr, 0);
+    }
+#endif /* not TRILIBRARY */
+
+    /* Create the subsegments. */
+    for (segmentnumber = 1; segmentnumber <= m->insegments; segmentnumber++) {
+      makesubseg(m, &subsegloop);
+      /* Mark the subsegment as living. */
+      subsegloop.ss[2] = (subseg) subsegloop.ss;
+    }
+  }
+
+#ifdef TRILIBRARY
+  vertexindex = 0;
+  attribindex = 0;
+#else /* not TRILIBRARY */
+  if (b->vararea) {
+    /* Open an .area file, check for consistency with the .ele file. */
+    if (!b->quiet) {
+      printf("Opening %s.\n", areafilename);
+    }
+    areafile = fopen(areafilename, "r");
+    if (areafile == (FILE *) NULL) {
+      printf("  Error:  Cannot access file %s.\n", areafilename);
+      triexit(1);
+    }
+    stringptr = readline(inputline, areafile, areafilename);
+    areaelements = (int) strtol(stringptr, &stringptr, 0);
+    if (areaelements != m->inelements) {
+      printf("Error:  %s and %s disagree on number of triangles.\n",
+             elefilename, areafilename);
+      triexit(1);
+    }
+  }
+#endif /* not TRILIBRARY */
+
+  if (!b->quiet) {
+    printf("Reconstructing mesh.\n");
+  }
+  /* Allocate a temporary array that maps each vertex to some adjacent */
+  /*   triangle.  I took care to allocate all the permanent memory for */
+  /*   triangles and subsegments first.                                */
+  vertexarray = (triangle *) trimalloc(m->vertices.items *
+                                       (int) sizeof(triangle));
+  /* Each vertex is initially unrepresented. */
+  for (i = 0; i < m->vertices.items; i++) {
+    vertexarray[i] = (triangle) m->dummytri;
+  }
+
+  if (b->verbose) {
+    printf("  Assembling triangles.\n");
+  }
+  /* Read the triangles from the .ele file, and link */
+  /*   together those that share an edge.            */
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  elementnumber = b->firstnumber;
+  while (triangleloop.tri != (triangle *) NULL) {
+#ifdef TRILIBRARY
+    /* Copy the triangle's three corners. */
+    for (j = 0; j < 3; j++) {
+      corner[j] = trianglelist[vertexindex++];
+      if ((corner[j] < b->firstnumber) ||
+          (corner[j] >= b->firstnumber + m->invertices)) {
+        printf("Error:  Triangle %ld has an invalid vertex index.\n",
+               elementnumber);
+        triexit(1);
+      }
+    }
+#else /* not TRILIBRARY */
+    /* Read triangle number and the triangle's three corners. */
+    stringptr = readline(inputline, elefile, elefilename);
+    for (j = 0; j < 3; j++) {
+      stringptr = findfield(stringptr);
+      if (*stringptr == '\0') {
+        printf("Error:  Triangle %ld is missing vertex %d in %s.\n",
+               elementnumber, j + 1, elefilename);
+        triexit(1);
+      } else {
+        corner[j] = (int) strtol(stringptr, &stringptr, 0);
+        if ((corner[j] < b->firstnumber) ||
+            (corner[j] >= b->firstnumber + m->invertices)) {
+          printf("Error:  Triangle %ld has an invalid vertex index.\n",
+                 elementnumber);
+          triexit(1);
+        }
+      }
+    }
+#endif /* not TRILIBRARY */
+
+    /* Find out about (and throw away) extra nodes. */
+    for (j = 3; j < incorners; j++) {
+#ifdef TRILIBRARY
+      killvertexindex = trianglelist[vertexindex++];
+#else /* not TRILIBRARY */
+      stringptr = findfield(stringptr);
+      if (*stringptr != '\0') {
+        killvertexindex = (int) strtol(stringptr, &stringptr, 0);
+#endif /* not TRILIBRARY */
+        if ((killvertexindex >= b->firstnumber) &&
+            (killvertexindex < b->firstnumber + m->invertices)) {
+          /* Delete the non-corner vertex if it's not already deleted. */
+          killvertex = getvertex(m, b, killvertexindex);
+          if (vertextype(killvertex) != DEADVERTEX) {
+            vertexdealloc(m, killvertex);
+          }
+        }
+#ifndef TRILIBRARY
+      }
+#endif /* not TRILIBRARY */
+    }
+
+    /* Read the triangle's attributes. */
+    for (j = 0; j < m->eextras; j++) {
+#ifdef TRILIBRARY
+      setelemattribute(triangleloop, j, triangleattriblist[attribindex++]);
+#else /* not TRILIBRARY */
+      stringptr = findfield(stringptr);
+      if (*stringptr == '\0') {
+        setelemattribute(triangleloop, j, 0);
+      } else {
+        setelemattribute(triangleloop, j,
+                         (REAL) strtod(stringptr, &stringptr));
+      }
+#endif /* not TRILIBRARY */
+    }
+
+    if (b->vararea) {
+#ifdef TRILIBRARY
+      area = trianglearealist[elementnumber - b->firstnumber];
+#else /* not TRILIBRARY */
+      /* Read an area constraint from the .area file. */
+      stringptr = readline(inputline, areafile, areafilename);
+      stringptr = findfield(stringptr);
+      if (*stringptr == '\0') {
+        area = -1.0;                      /* No constraint on this triangle. */
+      } else {
+        area = (REAL) strtod(stringptr, &stringptr);
+      }
+#endif /* not TRILIBRARY */
+      setareabound(triangleloop, area);
+    }
+
+    /* Set the triangle's vertices. */
+    triangleloop.orient = 0;
+    setorg(triangleloop, getvertex(m, b, corner[0]));
+    setdest(triangleloop, getvertex(m, b, corner[1]));
+    setapex(triangleloop, getvertex(m, b, corner[2]));
+    /* Try linking the triangle to others that share these vertices. */
+    for (triangleloop.orient = 0; triangleloop.orient < 3;
+         triangleloop.orient++) {
+      /* Take the number for the origin of triangleloop. */
+      aroundvertex = corner[triangleloop.orient];
+      /* Look for other triangles having this vertex. */
+      nexttri = vertexarray[aroundvertex - b->firstnumber];
+      /* Link the current triangle to the next one in the stack. */
+      triangleloop.tri[6 + triangleloop.orient] = nexttri;
+      /* Push the current triangle onto the stack. */
+      vertexarray[aroundvertex - b->firstnumber] = encode(triangleloop);
+      decode(nexttri, checktri);
+      if (checktri.tri != m->dummytri) {
+        dest(triangleloop, tdest);
+        apex(triangleloop, tapex);
+        /* Look for other triangles that share an edge. */
+        do {
+          dest(checktri, checkdest);
+          apex(checktri, checkapex);
+          if (tapex == checkdest) {
+            /* The two triangles share an edge; bond them together. */
+            lprev(triangleloop, triangleleft);
+            bond(triangleleft, checktri);
+          }
+          if (tdest == checkapex) {
+            /* The two triangles share an edge; bond them together. */
+            lprev(checktri, checkleft);
+            bond(triangleloop, checkleft);
+          }
+          /* Find the next triangle in the stack. */
+          nexttri = checktri.tri[6 + checktri.orient];
+          decode(nexttri, checktri);
+        } while (checktri.tri != m->dummytri);
+      }
+    }
+    triangleloop.tri = triangletraverse(m);
+    elementnumber++;
+  }
+
+#ifdef TRILIBRARY
+  vertexindex = 0;
+#else /* not TRILIBRARY */
+  fclose(elefile);
+  if (b->vararea) {
+    fclose(areafile);
+  }
+#endif /* not TRILIBRARY */
+
+  hullsize = 0;                      /* Prepare to count the boundary edges. */
+  if (b->poly) {
+    if (b->verbose) {
+      printf("  Marking segments in triangulation.\n");
+    }
+    /* Read the segments from the .poly file, and link them */
+    /*   to their neighboring triangles.                    */
+    boundmarker = 0;
+    traversalinit(&m->subsegs);
+    subsegloop.ss = subsegtraverse(m);
+    segmentnumber = b->firstnumber;
+    while (subsegloop.ss != (subseg *) NULL) {
+#ifdef TRILIBRARY
+      end[0] = segmentlist[vertexindex++];
+      end[1] = segmentlist[vertexindex++];
+      if (segmentmarkers) {
+        boundmarker = segmentmarkerlist[segmentnumber - b->firstnumber];
+      }
+#else /* not TRILIBRARY */
+      /* Read the endpoints of each segment, and possibly a boundary marker. */
+      stringptr = readline(inputline, polyfile, b->inpolyfilename);
+      /* Skip the first (segment number) field. */
+      stringptr = findfield(stringptr);
+      if (*stringptr == '\0') {
+        printf("Error:  Segment %ld has no endpoints in %s.\n", segmentnumber,
+               polyfilename);
+        triexit(1);
+      } else {
+        end[0] = (int) strtol(stringptr, &stringptr, 0);
+      }
+      stringptr = findfield(stringptr);
+      if (*stringptr == '\0') {
+        printf("Error:  Segment %ld is missing its second endpoint in %s.\n",
+               segmentnumber, polyfilename);
+        triexit(1);
+      } else {
+        end[1] = (int) strtol(stringptr, &stringptr, 0);
+      }
+      if (segmentmarkers) {
+        stringptr = findfield(stringptr);
+        if (*stringptr == '\0') {
+          boundmarker = 0;
+        } else {
+          boundmarker = (int) strtol(stringptr, &stringptr, 0);
+        }
+      }
+#endif /* not TRILIBRARY */
+      for (j = 0; j < 2; j++) {
+        if ((end[j] < b->firstnumber) ||
+            (end[j] >= b->firstnumber + m->invertices)) {
+          printf("Error:  Segment %ld has an invalid vertex index.\n",
+                 segmentnumber);
+          triexit(1);
+        }
+      }
+
+      /* set the subsegment's vertices. */
+      subsegloop.ssorient = 0;
+      segmentorg = getvertex(m, b, end[0]);
+      segmentdest = getvertex(m, b, end[1]);
+      setsorg(subsegloop, segmentorg);
+      setsdest(subsegloop, segmentdest);
+      setsegorg(subsegloop, segmentorg);
+      setsegdest(subsegloop, segmentdest);
+      setmark(subsegloop, boundmarker);
+      /* Try linking the subsegment to triangles that share these vertices. */
+      for (subsegloop.ssorient = 0; subsegloop.ssorient < 2;
+           subsegloop.ssorient++) {
+        /* Take the number for the destination of subsegloop. */
+        aroundvertex = end[1 - subsegloop.ssorient];
+        /* Look for triangles having this vertex. */
+        prevlink = &vertexarray[aroundvertex - b->firstnumber];
+        nexttri = vertexarray[aroundvertex - b->firstnumber];
+        decode(nexttri, checktri);
+        sorg(subsegloop, shorg);
+        notfound = 1;
+        /* Look for triangles having this edge.  Note that I'm only       */
+        /*   comparing each triangle's destination with the subsegment;   */
+        /*   each triangle's apex is handled through a different vertex.  */
+        /*   Because each triangle appears on three vertices' lists, each */
+        /*   occurrence of a triangle on a list can (and does) represent  */
+        /*   an edge.  In this way, most edges are represented twice, and */
+        /*   every triangle-subsegment bond is represented once.          */
+        while (notfound && (checktri.tri != m->dummytri)) {
+          dest(checktri, checkdest);
+          if (shorg == checkdest) {
+            /* We have a match.  Remove this triangle from the list. */
+            *prevlink = checktri.tri[6 + checktri.orient];
+            /* Bond the subsegment to the triangle. */
+            tsbond(checktri, subsegloop);
+            /* Check if this is a boundary edge. */
+            sym(checktri, checkneighbor);
+            if (checkneighbor.tri == m->dummytri) {
+              /* The next line doesn't insert a subsegment (because there's */
+              /*   already one there), but it sets the boundary markers of  */
+              /*   the existing subsegment and its vertices.                */
+              insertsubseg(m, b, &checktri, 1);
+              hullsize++;
+            }
+            notfound = 0;
+          }
+          /* Find the next triangle in the stack. */
+          prevlink = &checktri.tri[6 + checktri.orient];
+          nexttri = checktri.tri[6 + checktri.orient];
+          decode(nexttri, checktri);
+        }
+      }
+      subsegloop.ss = subsegtraverse(m);
+      segmentnumber++;
+    }
+  }
+
+  /* Mark the remaining edges as not being attached to any subsegment. */
+  /* Also, count the (yet uncounted) boundary edges.                   */
+  for (i = 0; i < m->vertices.items; i++) {
+    /* Search the stack of triangles adjacent to a vertex. */
+    nexttri = vertexarray[i];
+    decode(nexttri, checktri);
+    while (checktri.tri != m->dummytri) {
+      /* Find the next triangle in the stack before this */
+      /*   information gets overwritten.                 */
+      nexttri = checktri.tri[6 + checktri.orient];
+      /* No adjacent subsegment.  (This overwrites the stack info.) */
+      tsdissolve(checktri);
+      sym(checktri, checkneighbor);
+      if (checkneighbor.tri == m->dummytri) {
+        insertsubseg(m, b, &checktri, 1);
+        hullsize++;
+      }
+      decode(nexttri, checktri);
+    }
+  }
+
+  trifree((VOID *) vertexarray);
+  return hullsize;
+}
+
+#endif /* not CDT_ONLY */
+
+/**                                                                         **/
+/**                                                                         **/
+/********* General mesh construction routines end here               *********/
+
+/********* Segment insertion begins here                             *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  finddirection()   Find the first triangle on the path from one point     */
+/*                    to another.                                            */
+/*                                                                           */
+/*  Finds the triangle that intersects a line segment drawn from the         */
+/*  origin of `searchtri' to the point `searchpoint', and returns the result */
+/*  in `searchtri'.  The origin of `searchtri' does not change, even though  */
+/*  the triangle returned may differ from the one passed in.  This routine   */
+/*  is used to find the direction to move in to get from one point to        */
+/*  another.                                                                 */
+/*                                                                           */
+/*  The return value notes whether the destination or apex of the found      */
+/*  triangle is collinear with the two points in question.                   */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+enum finddirectionresult finddirection(struct mesh *m, struct behavior *b,
+                                       struct otri *searchtri,
+                                       vertex searchpoint)
+#else /* not ANSI_DECLARATORS */
+enum finddirectionresult finddirection(m, b, searchtri, searchpoint)
+struct mesh *m;
+struct behavior *b;
+struct otri *searchtri;
+vertex searchpoint;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri checktri;
+  vertex startvertex;
+  vertex leftvertex, rightvertex;
+  REAL leftccw, rightccw;
+  int leftflag, rightflag;
+  triangle ptr;           /* Temporary variable used by onext() and oprev(). */
+
+  org(*searchtri, startvertex);
+  dest(*searchtri, rightvertex);
+  apex(*searchtri, leftvertex);
+  /* Is `searchpoint' to the left? */
+  leftccw = counterclockwise(m, b, searchpoint, startvertex, leftvertex);
+  leftflag = leftccw > 0.0;
+  /* Is `searchpoint' to the right? */
+  rightccw = counterclockwise(m, b, startvertex, searchpoint, rightvertex);
+  rightflag = rightccw > 0.0;
+  if (leftflag && rightflag) {
+    /* `searchtri' faces directly away from `searchpoint'.  We could go left */
+    /*   or right.  Ask whether it's a triangle or a boundary on the left.   */
+    onext(*searchtri, checktri);
+    if (checktri.tri == m->dummytri) {
+      leftflag = 0;
+    } else {
+      rightflag = 0;
+    }
+  }
+  while (leftflag) {
+    /* Turn left until satisfied. */
+    onextself(*searchtri);
+    if (searchtri->tri == m->dummytri) {
+      printf("Internal error in finddirection():  Unable to find a\n");
+      printf("  triangle leading from (%.12g, %.12g) to", startvertex[0],
+             startvertex[1]);
+      printf("  (%.12g, %.12g).\n", searchpoint[0], searchpoint[1]);
+      internalerror();
+    }
+    apex(*searchtri, leftvertex);
+    rightccw = leftccw;
+    leftccw = counterclockwise(m, b, searchpoint, startvertex, leftvertex);
+    leftflag = leftccw > 0.0;
+  }
+  while (rightflag) {
+    /* Turn right until satisfied. */
+    oprevself(*searchtri);
+    if (searchtri->tri == m->dummytri) {
+      printf("Internal error in finddirection():  Unable to find a\n");
+      printf("  triangle leading from (%.12g, %.12g) to", startvertex[0],
+             startvertex[1]);
+      printf("  (%.12g, %.12g).\n", searchpoint[0], searchpoint[1]);
+      internalerror();
+    }
+    dest(*searchtri, rightvertex);
+    leftccw = rightccw;
+    rightccw = counterclockwise(m, b, startvertex, searchpoint, rightvertex);
+    rightflag = rightccw > 0.0;
+  }
+  if (leftccw == 0.0) {
+    return LEFTCOLLINEAR;
+  } else if (rightccw == 0.0) {
+    return RIGHTCOLLINEAR;
+  } else {
+    return WITHIN;
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  segmentintersection()   Find the intersection of an existing segment     */
+/*                          and a segment that is being inserted.  Insert    */
+/*                          a vertex at the intersection, splitting an       */
+/*                          existing subsegment.                             */
+/*                                                                           */
+/*  The segment being inserted connects the apex of splittri to endpoint2.   */
+/*  splitsubseg is the subsegment being split, and MUST adjoin splittri.     */
+/*  Hence, endpoints of the subsegment being split are the origin and        */
+/*  destination of splittri.                                                 */
+/*                                                                           */
+/*  On completion, splittri is a handle having the newly inserted            */
+/*  intersection point as its origin, and endpoint1 as its destination.      */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void segmentintersection(struct mesh *m, struct behavior *b,
+                         struct otri *splittri, struct osub *splitsubseg,
+                         vertex endpoint2)
+#else /* not ANSI_DECLARATORS */
+void segmentintersection(m, b, splittri, splitsubseg, endpoint2)
+struct mesh *m;
+struct behavior *b;
+struct otri *splittri;
+struct osub *splitsubseg;
+vertex endpoint2;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct osub opposubseg;
+  vertex endpoint1;
+  vertex torg, tdest;
+  vertex leftvertex, rightvertex;
+  vertex newvertex;
+  enum insertvertexresult success;
+  enum finddirectionresult collinear;
+  REAL ex, ey;
+  REAL tx, ty;
+  REAL etx, ety;
+  REAL split, denom;
+  int i;
+  triangle ptr;                       /* Temporary variable used by onext(). */
+  subseg sptr;                        /* Temporary variable used by snext(). */
+
+  /* Find the other three segment endpoints. */
+  apex(*splittri, endpoint1);
+  org(*splittri, torg);
+  dest(*splittri, tdest);
+  /* Segment intersection formulae; see the Antonio reference. */
+  tx = tdest[0] - torg[0];
+  ty = tdest[1] - torg[1];
+  ex = endpoint2[0] - endpoint1[0];
+  ey = endpoint2[1] - endpoint1[1];
+  etx = torg[0] - endpoint2[0];
+  ety = torg[1] - endpoint2[1];
+  denom = ty * ex - tx * ey;
+  if (denom == 0.0) {
+    printf("Internal error in segmentintersection():");
+    printf("  Attempt to find intersection of parallel segments.\n");
+    internalerror();
+  }
+  split = (ey * etx - ex * ety) / denom;
+  /* Create the new vertex. */
+  newvertex = (vertex) poolalloc(&m->vertices);
+  /* Interpolate its coordinate and attributes. */
+  for (i = 0; i < 2 + m->nextras; i++) {
+    newvertex[i] = torg[i] + split * (tdest[i] - torg[i]);
+  }
+  setvertexmark(newvertex, mark(*splitsubseg));
+  setvertextype(newvertex, INPUTVERTEX);
+  if (b->verbose > 1) {
+    printf(
+  "  Splitting subsegment (%.12g, %.12g) (%.12g, %.12g) at (%.12g, %.12g).\n",
+           torg[0], torg[1], tdest[0], tdest[1], newvertex[0], newvertex[1]);
+  }
+  /* Insert the intersection vertex.  This should always succeed. */
+  success = insertvertex(m, b, newvertex, splittri, splitsubseg, 0, 0);
+  if (success != SUCCESSFULVERTEX) {
+    printf("Internal error in segmentintersection():\n");
+    printf("  Failure to split a segment.\n");
+    internalerror();
+  }
+  /* Record a triangle whose origin is the new vertex. */
+  setvertex2tri(newvertex, encode(*splittri));
+  if (m->steinerleft > 0) {
+    m->steinerleft--;
+  }
+
+  /* Divide the segment into two, and correct the segment endpoints. */
+  ssymself(*splitsubseg);
+  spivot(*splitsubseg, opposubseg);
+  sdissolve(*splitsubseg);
+  sdissolve(opposubseg);
+  do {
+    setsegorg(*splitsubseg, newvertex);
+    snextself(*splitsubseg);
+  } while (splitsubseg->ss != m->dummysub);
+  do {
+    setsegorg(opposubseg, newvertex);
+    snextself(opposubseg);
+  } while (opposubseg.ss != m->dummysub);
+
+  /* Inserting the vertex may have caused edge flips.  We wish to rediscover */
+  /*   the edge connecting endpoint1 to the new intersection vertex.         */
+  collinear = finddirection(m, b, splittri, endpoint1);
+  dest(*splittri, rightvertex);
+  apex(*splittri, leftvertex);
+  if ((leftvertex[0] == endpoint1[0]) && (leftvertex[1] == endpoint1[1])) {
+    onextself(*splittri);
+  } else if ((rightvertex[0] != endpoint1[0]) ||
+             (rightvertex[1] != endpoint1[1])) {
+    printf("Internal error in segmentintersection():\n");
+    printf("  Topological inconsistency after splitting a segment.\n");
+    internalerror();
+  }
+  /* `splittri' should have destination endpoint1. */
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  scoutsegment()   Scout the first triangle on the path from one endpoint  */
+/*                   to another, and check for completion (reaching the      */
+/*                   second endpoint), a collinear vertex, or the            */
+/*                   intersection of two segments.                           */
+/*                                                                           */
+/*  Returns one if the entire segment is successfully inserted, and zero if  */
+/*  the job must be finished by conformingedge() or constrainededge().       */
+/*                                                                           */
+/*  If the first triangle on the path has the second endpoint as its         */
+/*  destination or apex, a subsegment is inserted and the job is done.       */
+/*                                                                           */
+/*  If the first triangle on the path has a destination or apex that lies on */
+/*  the segment, a subsegment is inserted connecting the first endpoint to   */
+/*  the collinear vertex, and the search is continued from the collinear     */
+/*  vertex.                                                                  */
+/*                                                                           */
+/*  If the first triangle on the path has a subsegment opposite its origin,  */
+/*  then there is a segment that intersects the segment being inserted.      */
+/*  Their intersection vertex is inserted, splitting the subsegment.         */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+int scoutsegment(struct mesh *m, struct behavior *b, struct otri *searchtri,
+                 vertex endpoint2, int newmark)
+#else /* not ANSI_DECLARATORS */
+int scoutsegment(m, b, searchtri, endpoint2, newmark)
+struct mesh *m;
+struct behavior *b;
+struct otri *searchtri;
+vertex endpoint2;
+int newmark;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri crosstri;
+  struct osub crosssubseg;
+  vertex leftvertex, rightvertex;
+  enum finddirectionresult collinear;
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  collinear = finddirection(m, b, searchtri, endpoint2);
+  dest(*searchtri, rightvertex);
+  apex(*searchtri, leftvertex);
+  if (((leftvertex[0] == endpoint2[0]) && (leftvertex[1] == endpoint2[1])) ||
+      ((rightvertex[0] == endpoint2[0]) && (rightvertex[1] == endpoint2[1]))) {
+    /* The segment is already an edge in the mesh. */
+    if ((leftvertex[0] == endpoint2[0]) && (leftvertex[1] == endpoint2[1])) {
+      lprevself(*searchtri);
+    }
+    /* Insert a subsegment, if there isn't already one there. */
+    insertsubseg(m, b, searchtri, newmark);
+    return 1;
+  } else if (collinear == LEFTCOLLINEAR) {
+    /* We've collided with a vertex between the segment's endpoints. */
+    /* Make the collinear vertex be the triangle's origin. */
+    lprevself(*searchtri);
+    insertsubseg(m, b, searchtri, newmark);
+    /* Insert the remainder of the segment. */
+    return scoutsegment(m, b, searchtri, endpoint2, newmark);
+  } else if (collinear == RIGHTCOLLINEAR) {
+    /* We've collided with a vertex between the segment's endpoints. */
+    insertsubseg(m, b, searchtri, newmark);
+    /* Make the collinear vertex be the triangle's origin. */
+    lnextself(*searchtri);
+    /* Insert the remainder of the segment. */
+    return scoutsegment(m, b, searchtri, endpoint2, newmark);
+  } else {
+    lnext(*searchtri, crosstri);
+    tspivot(crosstri, crosssubseg);
+    /* Check for a crossing segment. */
+    if (crosssubseg.ss == m->dummysub) {
+      return 0;
+    } else {
+      /* Insert a vertex at the intersection. */
+      segmentintersection(m, b, &crosstri, &crosssubseg, endpoint2);
+      otricopy(crosstri, *searchtri);
+      insertsubseg(m, b, searchtri, newmark);
+      /* Insert the remainder of the segment. */
+      return scoutsegment(m, b, searchtri, endpoint2, newmark);
+    }
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  conformingedge()   Force a segment into a conforming Delaunay            */
+/*                     triangulation by inserting a vertex at its midpoint,  */
+/*                     and recursively forcing in the two half-segments if   */
+/*                     necessary.                                            */
+/*                                                                           */
+/*  Generates a sequence of subsegments connecting `endpoint1' to            */
+/*  `endpoint2'.  `newmark' is the boundary marker of the segment, assigned  */
+/*  to each new splitting vertex and subsegment.                             */
+/*                                                                           */
+/*  Note that conformingedge() does not always maintain the conforming       */
+/*  Delaunay property.  Once inserted, segments are locked into place;       */
+/*  vertices inserted later (to force other segments in) may render these    */
+/*  fixed segments non-Delaunay.  The conforming Delaunay property will be   */
+/*  restored by enforcequality() by splitting encroached subsegments.        */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef REDUCED
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void conformingedge(struct mesh *m, struct behavior *b,
+                    vertex endpoint1, vertex endpoint2, int newmark)
+#else /* not ANSI_DECLARATORS */
+void conformingedge(m, b, endpoint1, endpoint2, newmark)
+struct mesh *m;
+struct behavior *b;
+vertex endpoint1;
+vertex endpoint2;
+int newmark;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri searchtri1, searchtri2;
+  struct osub brokensubseg;
+  vertex newvertex;
+  vertex midvertex1, midvertex2;
+  enum insertvertexresult success;
+  int i;
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  if (b->verbose > 2) {
+    printf("Forcing segment into triangulation by recursive splitting:\n");
+    printf("  (%.12g, %.12g) (%.12g, %.12g)\n", endpoint1[0], endpoint1[1],
+           endpoint2[0], endpoint2[1]);
+  }
+  /* Create a new vertex to insert in the middle of the segment. */
+  newvertex = (vertex) poolalloc(&m->vertices);
+  /* Interpolate coordinates and attributes. */
+  for (i = 0; i < 2 + m->nextras; i++) {
+    newvertex[i] = 0.5 * (endpoint1[i] + endpoint2[i]);
+  }
+  setvertexmark(newvertex, newmark);
+  setvertextype(newvertex, SEGMENTVERTEX);
+  /* No known triangle to search from. */
+  searchtri1.tri = m->dummytri;
+  /* Attempt to insert the new vertex. */
+  success = insertvertex(m, b, newvertex, &searchtri1, (struct osub *) NULL,
+                         0, 0);
+  if (success == DUPLICATEVERTEX) {
+    if (b->verbose > 2) {
+      printf("  Segment intersects existing vertex (%.12g, %.12g).\n",
+             newvertex[0], newvertex[1]);
+    }
+    /* Use the vertex that's already there. */
+    vertexdealloc(m, newvertex);
+    org(searchtri1, newvertex);
+  } else {
+    if (success == VIOLATINGVERTEX) {
+      if (b->verbose > 2) {
+        printf("  Two segments intersect at (%.12g, %.12g).\n",
+               newvertex[0], newvertex[1]);
+      }
+      /* By fluke, we've landed right on another segment.  Split it. */
+      tspivot(searchtri1, brokensubseg);
+      success = insertvertex(m, b, newvertex, &searchtri1, &brokensubseg,
+                             0, 0);
+      if (success != SUCCESSFULVERTEX) {
+        printf("Internal error in conformingedge():\n");
+        printf("  Failure to split a segment.\n");
+        internalerror();
+      }
+    }
+    /* The vertex has been inserted successfully. */
+    if (m->steinerleft > 0) {
+      m->steinerleft--;
+    }
+  }
+  otricopy(searchtri1, searchtri2);
+  /* `searchtri1' and `searchtri2' are fastened at their origins to         */
+  /*   `newvertex', and will be directed toward `endpoint1' and `endpoint2' */
+  /*   respectively.  First, we must get `searchtri2' out of the way so it  */
+  /*   won't be invalidated during the insertion of the first half of the   */
+  /*   segment.                                                             */
+  finddirection(m, b, &searchtri2, endpoint2);
+  if (!scoutsegment(m, b, &searchtri1, endpoint1, newmark)) {
+    /* The origin of searchtri1 may have changed if a collision with an */
+    /*   intervening vertex on the segment occurred.                    */
+    org(searchtri1, midvertex1);
+    conformingedge(m, b, midvertex1, endpoint1, newmark);
+  }
+  if (!scoutsegment(m, b, &searchtri2, endpoint2, newmark)) {
+    /* The origin of searchtri2 may have changed if a collision with an */
+    /*   intervening vertex on the segment occurred.                    */
+    org(searchtri2, midvertex2);
+    conformingedge(m, b, midvertex2, endpoint2, newmark);
+  }
+}
+
+#endif /* not CDT_ONLY */
+#endif /* not REDUCED */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  delaunayfixup()   Enforce the Delaunay condition at an edge, fanning out */
+/*                    recursively from an existing vertex.  Pay special      */
+/*                    attention to stacking inverted triangles.              */
+/*                                                                           */
+/*  This is a support routine for inserting segments into a constrained      */
+/*  Delaunay triangulation.                                                  */
+/*                                                                           */
+/*  The origin of fixuptri is treated as if it has just been inserted, and   */
+/*  the local Delaunay condition needs to be enforced.  It is only enforced  */
+/*  in one sector, however, that being the angular range defined by          */
+/*  fixuptri.                                                                */
+/*                                                                           */
+/*  This routine also needs to make decisions regarding the "stacking" of    */
+/*  triangles.  (Read the description of constrainededge() below before      */
+/*  reading on here, so you understand the algorithm.)  If the position of   */
+/*  the new vertex (the origin of fixuptri) indicates that the vertex before */
+/*  it on the polygon is a reflex vertex, then "stack" the triangle by       */
+/*  doing nothing.  (fixuptri is an inverted triangle, which is how stacked  */
+/*  triangles are identified.)                                               */
+/*                                                                           */
+/*  Otherwise, check whether the vertex before that was a reflex vertex.     */
+/*  If so, perform an edge flip, thereby eliminating an inverted triangle    */
+/*  (popping it off the stack).  The edge flip may result in the creation    */
+/*  of a new inverted triangle, depending on whether or not the new vertex   */
+/*  is visible to the vertex three edges behind on the polygon.              */
+/*                                                                           */
+/*  If neither of the two vertices behind the new vertex are reflex          */
+/*  vertices, fixuptri and fartri, the triangle opposite it, are not         */
+/*  inverted; hence, ensure that the edge between them is locally Delaunay.  */
+/*                                                                           */
+/*  `leftside' indicates whether or not fixuptri is to the left of the       */
+/*  segment being inserted.  (Imagine that the segment is pointing up from   */
+/*  endpoint1 to endpoint2.)                                                 */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void delaunayfixup(struct mesh *m, struct behavior *b,
+                   struct otri *fixuptri, int leftside)
+#else /* not ANSI_DECLARATORS */
+void delaunayfixup(m, b, fixuptri, leftside)
+struct mesh *m;
+struct behavior *b;
+struct otri *fixuptri;
+int leftside;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri neartri;
+  struct otri fartri;
+  struct osub faredge;
+  vertex nearvertex, leftvertex, rightvertex, farvertex;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  lnext(*fixuptri, neartri);
+  sym(neartri, fartri);
+  /* Check if the edge opposite the origin of fixuptri can be flipped. */
+  if (fartri.tri == m->dummytri) {
+    return;
+  }
+  tspivot(neartri, faredge);
+  if (faredge.ss != m->dummysub) {
+    return;
+  }
+  /* Find all the relevant vertices. */
+  apex(neartri, nearvertex);
+  org(neartri, leftvertex);
+  dest(neartri, rightvertex);
+  apex(fartri, farvertex);
+  /* Check whether the previous polygon vertex is a reflex vertex. */
+  if (leftside) {
+    if (counterclockwise(m, b, nearvertex, leftvertex, farvertex) <= 0.0) {
+      /* leftvertex is a reflex vertex too.  Nothing can */
+      /*   be done until a convex section is found.      */
+      return;
+    }
+  } else {
+    if (counterclockwise(m, b, farvertex, rightvertex, nearvertex) <= 0.0) {
+      /* rightvertex is a reflex vertex too.  Nothing can */
+      /*   be done until a convex section is found.       */
+      return;
+    }
+  }
+  if (counterclockwise(m, b, rightvertex, leftvertex, farvertex) > 0.0) {
+    /* fartri is not an inverted triangle, and farvertex is not a reflex */
+    /*   vertex.  As there are no reflex vertices, fixuptri isn't an     */
+    /*   inverted triangle, either.  Hence, test the edge between the    */
+    /*   triangles to ensure it is locally Delaunay.                     */
+    if (incircle(m, b, leftvertex, farvertex, rightvertex, nearvertex) <=
+        0.0) {
+      return;
+    }
+    /* Not locally Delaunay; go on to an edge flip. */
+  }        /* else fartri is inverted; remove it from the stack by flipping. */
+  flip(m, b, &neartri);
+  lprevself(*fixuptri);    /* Restore the origin of fixuptri after the flip. */
+  /* Recursively process the two triangles that result from the flip. */
+  delaunayfixup(m, b, fixuptri, leftside);
+  delaunayfixup(m, b, &fartri, leftside);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  constrainededge()   Force a segment into a constrained Delaunay          */
+/*                      triangulation by deleting the triangles it           */
+/*                      intersects, and triangulating the polygons that      */
+/*                      form on each side of it.                             */
+/*                                                                           */
+/*  Generates a single subsegment connecting `endpoint1' to `endpoint2'.     */
+/*  The triangle `starttri' has `endpoint1' as its origin.  `newmark' is the */
+/*  boundary marker of the segment.                                          */
+/*                                                                           */
+/*  To insert a segment, every triangle whose interior intersects the        */
+/*  segment is deleted.  The union of these deleted triangles is a polygon   */
+/*  (which is not necessarily monotone, but is close enough), which is       */
+/*  divided into two polygons by the new segment.  This routine's task is    */
+/*  to generate the Delaunay triangulation of these two polygons.            */
+/*                                                                           */
+/*  You might think of this routine's behavior as a two-step process.  The   */
+/*  first step is to walk from endpoint1 to endpoint2, flipping each edge    */
+/*  encountered.  This step creates a fan of edges connected to endpoint1,   */
+/*  including the desired edge to endpoint2.  The second step enforces the   */
+/*  Delaunay condition on each side of the segment in an incremental manner: */
+/*  proceeding along the polygon from endpoint1 to endpoint2 (this is done   */
+/*  independently on each side of the segment), each vertex is "enforced"    */
+/*  as if it had just been inserted, but affecting only the previous         */
+/*  vertices.  The result is the same as if the vertices had been inserted   */
+/*  in the order they appear on the polygon, so the result is Delaunay.      */
+/*                                                                           */
+/*  In truth, constrainededge() interleaves these two steps.  The procedure  */
+/*  walks from endpoint1 to endpoint2, and each time an edge is encountered  */
+/*  and flipped, the newly exposed vertex (at the far end of the flipped     */
+/*  edge) is "enforced" upon the previously flipped edges, usually affecting */
+/*  only one side of the polygon (depending upon which side of the segment   */
+/*  the vertex falls on).                                                    */
+/*                                                                           */
+/*  The algorithm is complicated by the need to handle polygons that are not */
+/*  convex.  Although the polygon is not necessarily monotone, it can be     */
+/*  triangulated in a manner similar to the stack-based algorithms for       */
+/*  monotone polygons.  For each reflex vertex (local concavity) of the      */
+/*  polygon, there will be an inverted triangle formed by one of the edge    */
+/*  flips.  (An inverted triangle is one with negative area - that is, its   */
+/*  vertices are arranged in clockwise order - and is best thought of as a   */
+/*  wrinkle in the fabric of the mesh.)  Each inverted triangle can be       */
+/*  thought of as a reflex vertex pushed on the stack, waiting to be fixed   */
+/*  later.                                                                   */
+/*                                                                           */
+/*  A reflex vertex is popped from the stack when a vertex is inserted that  */
+/*  is visible to the reflex vertex.  (However, if the vertex behind the     */
+/*  reflex vertex is not visible to the reflex vertex, a new inverted        */
+/*  triangle will take its place on the stack.)  These details are handled   */
+/*  by the delaunayfixup() routine above.                                    */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void constrainededge(struct mesh *m, struct behavior *b,
+                     struct otri *starttri, vertex endpoint2, int newmark)
+#else /* not ANSI_DECLARATORS */
+void constrainededge(m, b, starttri, endpoint2, newmark)
+struct mesh *m;
+struct behavior *b;
+struct otri *starttri;
+vertex endpoint2;
+int newmark;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri fixuptri, fixuptri2;
+  struct osub crosssubseg;
+  vertex endpoint1;
+  vertex farvertex;
+  REAL area;
+  int collision;
+  int done;
+  triangle ptr;             /* Temporary variable used by sym() and oprev(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  org(*starttri, endpoint1);
+  lnext(*starttri, fixuptri);
+  flip(m, b, &fixuptri);
+  /* `collision' indicates whether we have found a vertex directly */
+  /*   between endpoint1 and endpoint2.                            */
+  collision = 0;
+  done = 0;
+  do {
+    org(fixuptri, farvertex);
+    /* `farvertex' is the extreme point of the polygon we are "digging" */
+    /*   to get from endpoint1 to endpoint2.                           */
+    if ((farvertex[0] == endpoint2[0]) && (farvertex[1] == endpoint2[1])) {
+      oprev(fixuptri, fixuptri2);
+      /* Enforce the Delaunay condition around endpoint2. */
+      delaunayfixup(m, b, &fixuptri, 0);
+      delaunayfixup(m, b, &fixuptri2, 1);
+      done = 1;
+    } else {
+      /* Check whether farvertex is to the left or right of the segment */
+      /*   being inserted, to decide which edge of fixuptri to dig      */
+      /*   through next.                                                */
+      area = counterclockwise(m, b, endpoint1, endpoint2, farvertex);
+      if (area == 0.0) {
+        /* We've collided with a vertex between endpoint1 and endpoint2. */
+        collision = 1;
+        oprev(fixuptri, fixuptri2);
+        /* Enforce the Delaunay condition around farvertex. */
+        delaunayfixup(m, b, &fixuptri, 0);
+        delaunayfixup(m, b, &fixuptri2, 1);
+        done = 1;
+      } else {
+        if (area > 0.0) {        /* farvertex is to the left of the segment. */
+          oprev(fixuptri, fixuptri2);
+          /* Enforce the Delaunay condition around farvertex, on the */
+          /*   left side of the segment only.                        */
+          delaunayfixup(m, b, &fixuptri2, 1);
+          /* Flip the edge that crosses the segment.  After the edge is */
+          /*   flipped, one of its endpoints is the fan vertex, and the */
+          /*   destination of fixuptri is the fan vertex.               */
+          lprevself(fixuptri);
+        } else {                /* farvertex is to the right of the segment. */
+          delaunayfixup(m, b, &fixuptri, 0);
+          /* Flip the edge that crosses the segment.  After the edge is */
+          /*   flipped, one of its endpoints is the fan vertex, and the */
+          /*   destination of fixuptri is the fan vertex.               */
+          oprevself(fixuptri);
+        }
+        /* Check for two intersecting segments. */
+        tspivot(fixuptri, crosssubseg);
+        if (crosssubseg.ss == m->dummysub) {
+          flip(m, b, &fixuptri);    /* May create inverted triangle at left. */
+        } else {
+          /* We've collided with a segment between endpoint1 and endpoint2. */
+          collision = 1;
+          /* Insert a vertex at the intersection. */
+          segmentintersection(m, b, &fixuptri, &crosssubseg, endpoint2);
+          done = 1;
+        }
+      }
+    }
+  } while (!done);
+  /* Insert a subsegment to make the segment permanent. */
+  insertsubseg(m, b, &fixuptri, newmark);
+  /* If there was a collision with an interceding vertex, install another */
+  /*   segment connecting that vertex with endpoint2.                     */
+  if (collision) {
+    /* Insert the remainder of the segment. */
+    if (!scoutsegment(m, b, &fixuptri, endpoint2, newmark)) {
+      constrainededge(m, b, &fixuptri, endpoint2, newmark);
+    }
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  insertsegment()   Insert a PSLG segment into a triangulation.            */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void insertsegment(struct mesh *m, struct behavior *b,
+                   vertex endpoint1, vertex endpoint2, int newmark)
+#else /* not ANSI_DECLARATORS */
+void insertsegment(m, b, endpoint1, endpoint2, newmark)
+struct mesh *m;
+struct behavior *b;
+vertex endpoint1;
+vertex endpoint2;
+int newmark;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri searchtri1, searchtri2;
+  triangle encodedtri;
+  vertex checkvertex;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+
+  if (b->verbose > 1) {
+    printf("  Connecting (%.12g, %.12g) to (%.12g, %.12g).\n",
+           endpoint1[0], endpoint1[1], endpoint2[0], endpoint2[1]);
+  }
+
+  /* Find a triangle whose origin is the segment's first endpoint. */
+  checkvertex = (vertex) NULL;
+  encodedtri = vertex2tri(endpoint1);
+  if (encodedtri != (triangle) NULL) {
+    decode(encodedtri, searchtri1);
+    org(searchtri1, checkvertex);
+  }
+  if (checkvertex != endpoint1) {
+    /* Find a boundary triangle to search from. */
+    searchtri1.tri = m->dummytri;
+    searchtri1.orient = 0;
+    symself(searchtri1);
+    /* Search for the segment's first endpoint by point location. */
+    if (locate(m, b, endpoint1, &searchtri1) != ONVERTEX) {
+      printf(
+        "Internal error in insertsegment():  Unable to locate PSLG vertex\n");
+      printf("  (%.12g, %.12g) in triangulation.\n",
+             endpoint1[0], endpoint1[1]);
+      internalerror();
+    }
+  }
+  /* Remember this triangle to improve subsequent point location. */
+  otricopy(searchtri1, m->recenttri);
+  /* Scout the beginnings of a path from the first endpoint */
+  /*   toward the second.                                   */
+  if (scoutsegment(m, b, &searchtri1, endpoint2, newmark)) {
+    /* The segment was easily inserted. */
+    return;
+  }
+  /* The first endpoint may have changed if a collision with an intervening */
+  /*   vertex on the segment occurred.                                      */
+  org(searchtri1, endpoint1);
+
+  /* Find a triangle whose origin is the segment's second endpoint. */
+  checkvertex = (vertex) NULL;
+  encodedtri = vertex2tri(endpoint2);
+  if (encodedtri != (triangle) NULL) {
+    decode(encodedtri, searchtri2);
+    org(searchtri2, checkvertex);
+  }
+  if (checkvertex != endpoint2) {
+    /* Find a boundary triangle to search from. */
+    searchtri2.tri = m->dummytri;
+    searchtri2.orient = 0;
+    symself(searchtri2);
+    /* Search for the segment's second endpoint by point location. */
+    if (locate(m, b, endpoint2, &searchtri2) != ONVERTEX) {
+      printf(
+        "Internal error in insertsegment():  Unable to locate PSLG vertex\n");
+      printf("  (%.12g, %.12g) in triangulation.\n",
+             endpoint2[0], endpoint2[1]);
+      internalerror();
+    }
+  }
+  /* Remember this triangle to improve subsequent point location. */
+  otricopy(searchtri2, m->recenttri);
+  /* Scout the beginnings of a path from the second endpoint */
+  /*   toward the first.                                     */
+  if (scoutsegment(m, b, &searchtri2, endpoint1, newmark)) {
+    /* The segment was easily inserted. */
+    return;
+  }
+  /* The second endpoint may have changed if a collision with an intervening */
+  /*   vertex on the segment occurred.                                       */
+  org(searchtri2, endpoint2);
+
+#ifndef REDUCED
+#ifndef CDT_ONLY
+  if (b->splitseg) {
+    /* Insert vertices to force the segment into the triangulation. */
+    conformingedge(m, b, endpoint1, endpoint2, newmark);
+  } else {
+#endif /* not CDT_ONLY */
+#endif /* not REDUCED */
+    /* Insert the segment directly into the triangulation. */
+    constrainededge(m, b, &searchtri1, endpoint2, newmark);
+#ifndef REDUCED
+#ifndef CDT_ONLY
+  }
+#endif /* not CDT_ONLY */
+#endif /* not REDUCED */
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  markhull()   Cover the convex hull of a triangulation with subsegments.  */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void markhull(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void markhull(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri hulltri;
+  struct otri nexttri;
+  struct otri starttri;
+  triangle ptr;             /* Temporary variable used by sym() and oprev(). */
+
+  /* Find a triangle handle on the hull. */
+  hulltri.tri = m->dummytri;
+  hulltri.orient = 0;
+  symself(hulltri);
+  /* Remember where we started so we know when to stop. */
+  otricopy(hulltri, starttri);
+  /* Go once counterclockwise around the convex hull. */
+  do {
+    /* Create a subsegment if there isn't already one here. */
+    insertsubseg(m, b, &hulltri, 1);
+    /* To find the next hull edge, go clockwise around the next vertex. */
+    lnextself(hulltri);
+    oprev(hulltri, nexttri);
+    while (nexttri.tri != m->dummytri) {
+      otricopy(nexttri, hulltri);
+      oprev(hulltri, nexttri);
+    }
+  } while (!otriequal(hulltri, starttri));
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  formskeleton()   Create the segments of a triangulation, including PSLG  */
+/*                   segments and edges on the convex hull.                  */
+/*                                                                           */
+/*  The PSLG segments are read from a .poly file.  The return value is the   */
+/*  number of segments in the file.                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void formskeleton(struct mesh *m, struct behavior *b, int *segmentlist,
+                  int *segmentmarkerlist, int numberofsegments)
+#else /* not ANSI_DECLARATORS */
+void formskeleton(m, b, segmentlist, segmentmarkerlist, numberofsegments)
+struct mesh *m;
+struct behavior *b;
+int *segmentlist;
+int *segmentmarkerlist;
+int numberofsegments;
+#endif /* not ANSI_DECLARATORS */
+
+#else /* not TRILIBRARY */
+
+#ifdef ANSI_DECLARATORS
+void formskeleton(struct mesh *m, struct behavior *b,
+                  FILE *polyfile, char *polyfilename)
+#else /* not ANSI_DECLARATORS */
+void formskeleton(m, b, polyfile, polyfilename)
+struct mesh *m;
+struct behavior *b;
+FILE *polyfile;
+char *polyfilename;
+#endif /* not ANSI_DECLARATORS */
+
+#endif /* not TRILIBRARY */
+
+{
+#ifdef TRILIBRARY
+  char polyfilename[6];
+  int index;
+#else /* not TRILIBRARY */
+  char inputline[INPUTLINESIZE];
+  char *stringptr;
+#endif /* not TRILIBRARY */
+  vertex endpoint1, endpoint2;
+  int segmentmarkers;
+  int end1, end2;
+  int boundmarker;
+  int i;
+
+  if (b->poly) {
+    if (!b->quiet) {
+      printf("Recovering segments in Delaunay triangulation.\n");
+    }
+#ifdef TRILIBRARY
+    strcpy(polyfilename, "input");
+    m->insegments = numberofsegments;
+    segmentmarkers = segmentmarkerlist != (int *) NULL;
+    index = 0;
+#else /* not TRILIBRARY */
+    /* Read the segments from a .poly file. */
+    /* Read number of segments and number of boundary markers. */
+    stringptr = readline(inputline, polyfile, polyfilename);
+    m->insegments = (int) strtol(stringptr, &stringptr, 0);
+    stringptr = findfield(stringptr);
+    if (*stringptr == '\0') {
+      segmentmarkers = 0;
+    } else {
+      segmentmarkers = (int) strtol(stringptr, &stringptr, 0);
+    }
+#endif /* not TRILIBRARY */
+    /* If the input vertices are collinear, there is no triangulation, */
+    /*   so don't try to insert segments.                              */
+    if (m->triangles.items == 0) {
+      return;
+    }
+
+    /* If segments are to be inserted, compute a mapping */
+    /*   from vertices to triangles.                     */
+    if (m->insegments > 0) {
+      makevertexmap(m, b);
+      if (b->verbose) {
+        printf("  Recovering PSLG segments.\n");
+      }
+    }
+
+    boundmarker = 0;
+    /* Read and insert the segments. */
+    for (i = 0; i < m->insegments; i++) {
+#ifdef TRILIBRARY
+      end1 = segmentlist[index++];
+      end2 = segmentlist[index++];
+      if (segmentmarkers) {
+        boundmarker = segmentmarkerlist[i];
+      }
+#else /* not TRILIBRARY */
+      stringptr = readline(inputline, polyfile, b->inpolyfilename);
+      stringptr = findfield(stringptr);
+      if (*stringptr == '\0') {
+        printf("Error:  Segment %d has no endpoints in %s.\n",
+               b->firstnumber + i, polyfilename);
+        triexit(1);
+      } else {
+        end1 = (int) strtol(stringptr, &stringptr, 0);
+      }
+      stringptr = findfield(stringptr);
+      if (*stringptr == '\0') {
+        printf("Error:  Segment %d is missing its second endpoint in %s.\n",
+               b->firstnumber + i, polyfilename);
+        triexit(1);
+      } else {
+        end2 = (int) strtol(stringptr, &stringptr, 0);
+      }
+      if (segmentmarkers) {
+        stringptr = findfield(stringptr);
+        if (*stringptr == '\0') {
+          boundmarker = 0;
+        } else {
+          boundmarker = (int) strtol(stringptr, &stringptr, 0);
+        }
+      }
+#endif /* not TRILIBRARY */
+      if ((end1 < b->firstnumber) ||
+          (end1 >= b->firstnumber + m->invertices)) {
+        if (!b->quiet) {
+          printf("Warning:  Invalid first endpoint of segment %d in %s.\n",
+                 b->firstnumber + i, polyfilename);
+        }
+      } else if ((end2 < b->firstnumber) ||
+                 (end2 >= b->firstnumber + m->invertices)) {
+        if (!b->quiet) {
+          printf("Warning:  Invalid second endpoint of segment %d in %s.\n",
+                 b->firstnumber + i, polyfilename);
+        }
+      } else {
+        /* Find the vertices numbered `end1' and `end2'. */
+        endpoint1 = getvertex(m, b, end1);
+        endpoint2 = getvertex(m, b, end2);
+        if ((endpoint1[0] == endpoint2[0]) && (endpoint1[1] == endpoint2[1])) {
+          if (!b->quiet) {
+            printf("Warning:  Endpoints of segment %d are coincident in %s.\n",
+                   b->firstnumber + i, polyfilename);
+          }
+        } else {
+          insertsegment(m, b, endpoint1, endpoint2, boundmarker);
+        }
+      }
+    }
+  } else {
+    m->insegments = 0;
+  }
+  if (b->convex || !b->poly) {
+    /* Enclose the convex hull with subsegments. */
+    if (b->verbose) {
+      printf("  Enclosing convex hull with segments.\n");
+    }
+    markhull(m, b);
+  }
+}
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Segment insertion ends here                               *********/
+
+/********* Carving out holes and concavities begins here             *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  infecthull()   Virally infect all of the triangles of the convex hull    */
+/*                 that are not protected by subsegments.  Where there are   */
+/*                 subsegments, set boundary markers as appropriate.         */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void infecthull(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void infecthull(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri hulltri;
+  struct otri nexttri;
+  struct otri starttri;
+  struct osub hullsubseg;
+  triangle **deadtriangle;
+  vertex horg, hdest;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  if (b->verbose) {
+    printf("  Marking concavities (external triangles) for elimination.\n");
+  }
+  /* Find a triangle handle on the hull. */
+  hulltri.tri = m->dummytri;
+  hulltri.orient = 0;
+  symself(hulltri);
+  /* Remember where we started so we know when to stop. */
+  otricopy(hulltri, starttri);
+  /* Go once counterclockwise around the convex hull. */
+  do {
+    /* Ignore triangles that are already infected. */
+    if (!infected(hulltri)) {
+      /* Is the triangle protected by a subsegment? */
+      tspivot(hulltri, hullsubseg);
+      if (hullsubseg.ss == m->dummysub) {
+        /* The triangle is not protected; infect it. */
+        if (!infected(hulltri)) {
+          infect(hulltri);
+          deadtriangle = (triangle **) poolalloc(&m->viri);
+          *deadtriangle = hulltri.tri;
+        }
+      } else {
+        /* The triangle is protected; set boundary markers if appropriate. */
+        if (mark(hullsubseg) == 0) {
+          setmark(hullsubseg, 1);
+          org(hulltri, horg);
+          dest(hulltri, hdest);
+          if (vertexmark(horg) == 0) {
+            setvertexmark(horg, 1);
+          }
+          if (vertexmark(hdest) == 0) {
+            setvertexmark(hdest, 1);
+          }
+        }
+      }
+    }
+    /* To find the next hull edge, go clockwise around the next vertex. */
+    lnextself(hulltri);
+    oprev(hulltri, nexttri);
+    while (nexttri.tri != m->dummytri) {
+      otricopy(nexttri, hulltri);
+      oprev(hulltri, nexttri);
+    }
+  } while (!otriequal(hulltri, starttri));
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  plague()   Spread the virus from all infected triangles to any neighbors */
+/*             not protected by subsegments.  Delete all infected triangles. */
+/*                                                                           */
+/*  This is the procedure that actually creates holes and concavities.       */
+/*                                                                           */
+/*  This procedure operates in two phases.  The first phase identifies all   */
+/*  the triangles that will die, and marks them as infected.  They are       */
+/*  marked to ensure that each triangle is added to the virus pool only      */
+/*  once, so the procedure will terminate.                                   */
+/*                                                                           */
+/*  The second phase actually eliminates the infected triangles.  It also    */
+/*  eliminates orphaned vertices.                                            */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void plague(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void plague(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri testtri;
+  struct otri neighbor;
+  triangle **virusloop;
+  triangle **deadtriangle;
+  struct osub neighborsubseg;
+  vertex testvertex;
+  vertex norg, ndest;
+  vertex deadorg, deaddest, deadapex;
+  int killorg;
+  triangle ptr;             /* Temporary variable used by sym() and onext(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  if (b->verbose) {
+    printf("  Marking neighbors of marked triangles.\n");
+  }
+  /* Loop through all the infected triangles, spreading the virus to */
+  /*   their neighbors, then to their neighbors' neighbors.          */
+  traversalinit(&m->viri);
+  virusloop = (triangle **) traverse(&m->viri);
+  while (virusloop != (triangle **) NULL) {
+    testtri.tri = *virusloop;
+    /* A triangle is marked as infected by messing with one of its pointers */
+    /*   to subsegments, setting it to an illegal value.  Hence, we have to */
+    /*   temporarily uninfect this triangle so that we can examine its      */
+    /*   adjacent subsegments.                                              */
+    uninfect(testtri);
+    if (b->verbose > 2) {
+      /* Assign the triangle an orientation for convenience in */
+      /*   checking its vertices.                              */
+      testtri.orient = 0;
+      org(testtri, deadorg);
+      dest(testtri, deaddest);
+      apex(testtri, deadapex);
+      printf("    Checking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n",
+             deadorg[0], deadorg[1], deaddest[0], deaddest[1],
+             deadapex[0], deadapex[1]);
+    }
+    /* Check each of the triangle's three neighbors. */
+    for (testtri.orient = 0; testtri.orient < 3; testtri.orient++) {
+      /* Find the neighbor. */
+      sym(testtri, neighbor);
+      /* Check for a subsegment between the triangle and its neighbor. */
+      tspivot(testtri, neighborsubseg);
+      /* Check if the neighbor is nonexistent or already infected. */
+      if ((neighbor.tri == m->dummytri) || infected(neighbor)) {
+        if (neighborsubseg.ss != m->dummysub) {
+          /* There is a subsegment separating the triangle from its      */
+          /*   neighbor, but both triangles are dying, so the subsegment */
+          /*   dies too.                                                 */
+          subsegdealloc(m, neighborsubseg.ss);
+          if (neighbor.tri != m->dummytri) {
+            /* Make sure the subsegment doesn't get deallocated again */
+            /*   later when the infected neighbor is visited.         */
+            uninfect(neighbor);
+            tsdissolve(neighbor);
+            infect(neighbor);
+          }
+        }
+      } else {                   /* The neighbor exists and is not infected. */
+        if (neighborsubseg.ss == m->dummysub) {
+          /* There is no subsegment protecting the neighbor, so */
+          /*   the neighbor becomes infected.                   */
+          if (b->verbose > 2) {
+            org(neighbor, deadorg);
+            dest(neighbor, deaddest);
+            apex(neighbor, deadapex);
+            printf(
+              "    Marking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n",
+                   deadorg[0], deadorg[1], deaddest[0], deaddest[1],
+                   deadapex[0], deadapex[1]);
+          }
+          infect(neighbor);
+          /* Ensure that the neighbor's neighbors will be infected. */
+          deadtriangle = (triangle **) poolalloc(&m->viri);
+          *deadtriangle = neighbor.tri;
+        } else {               /* The neighbor is protected by a subsegment. */
+          /* Remove this triangle from the subsegment. */
+          stdissolve(neighborsubseg);
+          /* The subsegment becomes a boundary.  Set markers accordingly. */
+          if (mark(neighborsubseg) == 0) {
+            setmark(neighborsubseg, 1);
+          }
+          org(neighbor, norg);
+          dest(neighbor, ndest);
+          if (vertexmark(norg) == 0) {
+            setvertexmark(norg, 1);
+          }
+          if (vertexmark(ndest) == 0) {
+            setvertexmark(ndest, 1);
+          }
+        }
+      }
+    }
+    /* Remark the triangle as infected, so it doesn't get added to the */
+    /*   virus pool again.                                             */
+    infect(testtri);
+    virusloop = (triangle **) traverse(&m->viri);
+  }
+
+  if (b->verbose) {
+    printf("  Deleting marked triangles.\n");
+  }
+
+  traversalinit(&m->viri);
+  virusloop = (triangle **) traverse(&m->viri);
+  while (virusloop != (triangle **) NULL) {
+    testtri.tri = *virusloop;
+
+    /* Check each of the three corners of the triangle for elimination. */
+    /*   This is done by walking around each vertex, checking if it is  */
+    /*   still connected to at least one live triangle.                 */
+    for (testtri.orient = 0; testtri.orient < 3; testtri.orient++) {
+      org(testtri, testvertex);
+      /* Check if the vertex has already been tested. */
+      if (testvertex != (vertex) NULL) {
+        killorg = 1;
+        /* Mark the corner of the triangle as having been tested. */
+        setorg(testtri, NULL);
+        /* Walk counterclockwise about the vertex. */
+        onext(testtri, neighbor);
+        /* Stop upon reaching a boundary or the starting triangle. */
+        while ((neighbor.tri != m->dummytri) &&
+               (!otriequal(neighbor, testtri))) {
+          if (infected(neighbor)) {
+            /* Mark the corner of this triangle as having been tested. */
+            setorg(neighbor, NULL);
+          } else {
+            /* A live triangle.  The vertex survives. */
+            killorg = 0;
+          }
+          /* Walk counterclockwise about the vertex. */
+          onextself(neighbor);
+        }
+        /* If we reached a boundary, we must walk clockwise as well. */
+        if (neighbor.tri == m->dummytri) {
+          /* Walk clockwise about the vertex. */
+          oprev(testtri, neighbor);
+          /* Stop upon reaching a boundary. */
+          while (neighbor.tri != m->dummytri) {
+            if (infected(neighbor)) {
+            /* Mark the corner of this triangle as having been tested. */
+              setorg(neighbor, NULL);
+            } else {
+              /* A live triangle.  The vertex survives. */
+              killorg = 0;
+            }
+            /* Walk clockwise about the vertex. */
+            oprevself(neighbor);
+          }
+        }
+        if (killorg) {
+          if (b->verbose > 1) {
+            printf("    Deleting vertex (%.12g, %.12g)\n",
+                   testvertex[0], testvertex[1]);
+          }
+          setvertextype(testvertex, UNDEADVERTEX);
+          m->undeads++;
+        }
+      }
+    }
+
+    /* Record changes in the number of boundary edges, and disconnect */
+    /*   dead triangles from their neighbors.                         */
+    for (testtri.orient = 0; testtri.orient < 3; testtri.orient++) {
+      sym(testtri, neighbor);
+      if (neighbor.tri == m->dummytri) {
+        /* There is no neighboring triangle on this edge, so this edge    */
+        /*   is a boundary edge.  This triangle is being deleted, so this */
+        /*   boundary edge is deleted.                                    */
+        m->hullsize--;
+      } else {
+        /* Disconnect the triangle from its neighbor. */
+        dissolve(neighbor);
+        /* There is a neighboring triangle on this edge, so this edge */
+        /*   becomes a boundary edge when this triangle is deleted.   */
+        m->hullsize++;
+      }
+    }
+    /* Return the dead triangle to the pool of triangles. */
+    triangledealloc(m, testtri.tri);
+    virusloop = (triangle **) traverse(&m->viri);
+  }
+  /* Empty the virus pool. */
+  poolrestart(&m->viri);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  regionplague()   Spread regional attributes and/or area constraints      */
+/*                   (from a .poly file) throughout the mesh.                */
+/*                                                                           */
+/*  This procedure operates in two phases.  The first phase spreads an       */
+/*  attribute and/or an area constraint through a (segment-bounded) region.  */
+/*  The triangles are marked to ensure that each triangle is added to the    */
+/*  virus pool only once, so the procedure will terminate.                   */
+/*                                                                           */
+/*  The second phase uninfects all infected triangles, returning them to     */
+/*  normal.                                                                  */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void regionplague(struct mesh *m, struct behavior *b,
+                  REAL attribute, REAL area)
+#else /* not ANSI_DECLARATORS */
+void regionplague(m, b, attribute, area)
+struct mesh *m;
+struct behavior *b;
+REAL attribute;
+REAL area;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri testtri;
+  struct otri neighbor;
+  triangle **virusloop;
+  triangle **regiontri;
+  struct osub neighborsubseg;
+  vertex regionorg, regiondest, regionapex;
+  triangle ptr;             /* Temporary variable used by sym() and onext(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  if (b->verbose > 1) {
+    printf("  Marking neighbors of marked triangles.\n");
+  }
+  /* Loop through all the infected triangles, spreading the attribute      */
+  /*   and/or area constraint to their neighbors, then to their neighbors' */
+  /*   neighbors.                                                          */
+  traversalinit(&m->viri);
+  virusloop = (triangle **) traverse(&m->viri);
+  while (virusloop != (triangle **) NULL) {
+    testtri.tri = *virusloop;
+    /* A triangle is marked as infected by messing with one of its pointers */
+    /*   to subsegments, setting it to an illegal value.  Hence, we have to */
+    /*   temporarily uninfect this triangle so that we can examine its      */
+    /*   adjacent subsegments.                                              */
+    uninfect(testtri);
+    if (b->regionattrib) {
+      /* Set an attribute. */
+      setelemattribute(testtri, m->eextras, attribute);
+    }
+    if (b->vararea) {
+      /* Set an area constraint. */
+      setareabound(testtri, area);
+    }
+    if (b->verbose > 2) {
+      /* Assign the triangle an orientation for convenience in */
+      /*   checking its vertices.                              */
+      testtri.orient = 0;
+      org(testtri, regionorg);
+      dest(testtri, regiondest);
+      apex(testtri, regionapex);
+      printf("    Checking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n",
+             regionorg[0], regionorg[1], regiondest[0], regiondest[1],
+             regionapex[0], regionapex[1]);
+    }
+    /* Check each of the triangle's three neighbors. */
+    for (testtri.orient = 0; testtri.orient < 3; testtri.orient++) {
+      /* Find the neighbor. */
+      sym(testtri, neighbor);
+      /* Check for a subsegment between the triangle and its neighbor. */
+      tspivot(testtri, neighborsubseg);
+      /* Make sure the neighbor exists, is not already infected, and */
+      /*   isn't protected by a subsegment.                          */
+      if ((neighbor.tri != m->dummytri) && !infected(neighbor)
+          && (neighborsubseg.ss == m->dummysub)) {
+        if (b->verbose > 2) {
+          org(neighbor, regionorg);
+          dest(neighbor, regiondest);
+          apex(neighbor, regionapex);
+          printf("    Marking (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n",
+                 regionorg[0], regionorg[1], regiondest[0], regiondest[1],
+                 regionapex[0], regionapex[1]);
+        }
+        /* Infect the neighbor. */
+        infect(neighbor);
+        /* Ensure that the neighbor's neighbors will be infected. */
+        regiontri = (triangle **) poolalloc(&m->viri);
+        *regiontri = neighbor.tri;
+      }
+    }
+    /* Remark the triangle as infected, so it doesn't get added to the */
+    /*   virus pool again.                                             */
+    infect(testtri);
+    virusloop = (triangle **) traverse(&m->viri);
+  }
+
+  /* Uninfect all triangles. */
+  if (b->verbose > 1) {
+    printf("  Unmarking marked triangles.\n");
+  }
+  traversalinit(&m->viri);
+  virusloop = (triangle **) traverse(&m->viri);
+  while (virusloop != (triangle **) NULL) {
+    testtri.tri = *virusloop;
+    uninfect(testtri);
+    virusloop = (triangle **) traverse(&m->viri);
+  }
+  /* Empty the virus pool. */
+  poolrestart(&m->viri);
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  carveholes()   Find the holes and infect them.  Find the area            */
+/*                 constraints and infect them.  Infect the convex hull.     */
+/*                 Spread the infection and kill triangles.  Spread the      */
+/*                 area constraints.                                         */
+/*                                                                           */
+/*  This routine mainly calls other routines to carry out all these          */
+/*  functions.                                                               */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void carveholes(struct mesh *m, struct behavior *b, REAL *holelist, int holes,
+                REAL *regionlist, int regions)
+#else /* not ANSI_DECLARATORS */
+void carveholes(m, b, holelist, holes, regionlist, regions)
+struct mesh *m;
+struct behavior *b;
+REAL *holelist;
+int holes;
+REAL *regionlist;
+int regions;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri searchtri;
+  struct otri triangleloop;
+  struct otri *regiontris;
+  triangle **holetri;
+  triangle **regiontri;
+  vertex searchorg, searchdest;
+  enum locateresult intersect;
+  int i;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+
+  if (!(b->quiet || (b->noholes && b->convex))) {
+    printf("Removing unwanted triangles.\n");
+    if (b->verbose && (holes > 0)) {
+      printf("  Marking holes for elimination.\n");
+    }
+  }
+
+  if (regions > 0) {
+    /* Allocate storage for the triangles in which region points fall. */
+    regiontris = (struct otri *) trimalloc(regions *
+                                           (int) sizeof(struct otri));
+  } else {
+    regiontris = (struct otri *) NULL;
+  }
+
+  if (((holes > 0) && !b->noholes) || !b->convex || (regions > 0)) {
+    /* Initialize a pool of viri to be used for holes, concavities, */
+    /*   regional attributes, and/or regional area constraints.     */
+    poolinit(&m->viri, sizeof(triangle *), VIRUSPERBLOCK, VIRUSPERBLOCK, 0);
+  }
+
+  if (!b->convex) {
+    /* Mark as infected any unprotected triangles on the boundary. */
+    /*   This is one way by which concavities are created.         */
+    infecthull(m, b);
+  }
+
+  if ((holes > 0) && !b->noholes) {
+    /* Infect each triangle in which a hole lies. */
+    for (i = 0; i < 2 * holes; i += 2) {
+      /* Ignore holes that aren't within the bounds of the mesh. */
+      if ((holelist[i] >= m->xmin) && (holelist[i] <= m->xmax)
+          && (holelist[i + 1] >= m->ymin) && (holelist[i + 1] <= m->ymax)) {
+        /* Start searching from some triangle on the outer boundary. */
+        searchtri.tri = m->dummytri;
+        searchtri.orient = 0;
+        symself(searchtri);
+        /* Ensure that the hole is to the left of this boundary edge; */
+        /*   otherwise, locate() will falsely report that the hole    */
+        /*   falls within the starting triangle.                      */
+        org(searchtri, searchorg);
+        dest(searchtri, searchdest);
+        if (counterclockwise(m, b, searchorg, searchdest, &holelist[i]) >
+            0.0) {
+          /* Find a triangle that contains the hole. */
+          intersect = locate(m, b, &holelist[i], &searchtri);
+          if ((intersect != OUTSIDE) && (!infected(searchtri))) {
+            /* Infect the triangle.  This is done by marking the triangle  */
+            /*   as infected and including the triangle in the virus pool. */
+            infect(searchtri);
+            holetri = (triangle **) poolalloc(&m->viri);
+            *holetri = searchtri.tri;
+          }
+        }
+      }
+    }
+  }
+
+  /* Now, we have to find all the regions BEFORE we carve the holes, because */
+  /*   locate() won't work when the triangulation is no longer convex.       */
+  /*   (Incidentally, this is the reason why regional attributes and area    */
+  /*   constraints can't be used when refining a preexisting mesh, which     */
+  /*   might not be convex; they can only be used with a freshly             */
+  /*   triangulated PSLG.)                                                   */
+  if (regions > 0) {
+    /* Find the starting triangle for each region. */
+    for (i = 0; i < regions; i++) {
+      regiontris[i].tri = m->dummytri;
+      /* Ignore region points that aren't within the bounds of the mesh. */
+      if ((regionlist[4 * i] >= m->xmin) && (regionlist[4 * i] <= m->xmax) &&
+          (regionlist[4 * i + 1] >= m->ymin) &&
+          (regionlist[4 * i + 1] <= m->ymax)) {
+        /* Start searching from some triangle on the outer boundary. */
+        searchtri.tri = m->dummytri;
+        searchtri.orient = 0;
+        symself(searchtri);
+        /* Ensure that the region point is to the left of this boundary */
+        /*   edge; otherwise, locate() will falsely report that the     */
+        /*   region point falls within the starting triangle.           */
+        org(searchtri, searchorg);
+        dest(searchtri, searchdest);
+        if (counterclockwise(m, b, searchorg, searchdest, &regionlist[4 * i]) >
+            0.0) {
+          /* Find a triangle that contains the region point. */
+          intersect = locate(m, b, &regionlist[4 * i], &searchtri);
+          if ((intersect != OUTSIDE) && (!infected(searchtri))) {
+            /* Record the triangle for processing after the */
+            /*   holes have been carved.                    */
+            otricopy(searchtri, regiontris[i]);
+          }
+        }
+      }
+    }
+  }
+
+  if (m->viri.items > 0) {
+    /* Carve the holes and concavities. */
+    plague(m, b);
+  }
+  /* The virus pool should be empty now. */
+
+  if (regions > 0) {
+    if (!b->quiet) {
+      if (b->regionattrib) {
+        if (b->vararea) {
+          printf("Spreading regional attributes and area constraints.\n");
+        } else {
+          printf("Spreading regional attributes.\n");
+        }
+      } else {
+        printf("Spreading regional area constraints.\n");
+      }
+    }
+    if (b->regionattrib && !b->refine) {
+      /* Assign every triangle a regional attribute of zero. */
+      traversalinit(&m->triangles);
+      triangleloop.orient = 0;
+      triangleloop.tri = triangletraverse(m);
+      while (triangleloop.tri != (triangle *) NULL) {
+        setelemattribute(triangleloop, m->eextras, 0.0);
+        triangleloop.tri = triangletraverse(m);
+      }
+    }
+    for (i = 0; i < regions; i++) {
+      if (regiontris[i].tri != m->dummytri) {
+        /* Make sure the triangle under consideration still exists. */
+        /*   It may have been eaten by the virus.                   */
+        if (!deadtri(regiontris[i].tri)) {
+          /* Put one triangle in the virus pool. */
+          infect(regiontris[i]);
+          regiontri = (triangle **) poolalloc(&m->viri);
+          *regiontri = regiontris[i].tri;
+          /* Apply one region's attribute and/or area constraint. */
+          regionplague(m, b, regionlist[4 * i + 2], regionlist[4 * i + 3]);
+          /* The virus pool should be empty now. */
+        }
+      }
+    }
+    if (b->regionattrib && !b->refine) {
+      /* Note the fact that each triangle has an additional attribute. */
+      m->eextras++;
+    }
+  }
+
+  /* Free up memory. */
+  if (((holes > 0) && !b->noholes) || !b->convex || (regions > 0)) {
+    pooldeinit(&m->viri);
+  }
+  if (regions > 0) {
+    trifree((VOID *) regiontris);
+  }
+}
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Carving out holes and concavities ends here               *********/
+
+/********* Mesh quality maintenance begins here                      *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  tallyencs()   Traverse the entire list of subsegments, and check each    */
+/*                to see if it is encroached.  If so, add it to the list.    */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void tallyencs(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void tallyencs(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct osub subsegloop;
+  int dummy;
+
+  traversalinit(&m->subsegs);
+  subsegloop.ssorient = 0;
+  subsegloop.ss = subsegtraverse(m);
+  while (subsegloop.ss != (subseg *) NULL) {
+    /* If the segment is encroached, add it to the list. */
+    dummy = checkseg4encroach(m, b, &subsegloop);
+    subsegloop.ss = subsegtraverse(m);
+  }
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  precisionerror()  Print an error message for precision problems.         */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+void precisionerror()
+{
+  printf("Try increasing the area criterion and/or reducing the minimum\n");
+  printf("  allowable angle so that tiny triangles are not created.\n");
+#ifdef SINGLE
+  printf("Alternatively, try recompiling me with double precision\n");
+  printf("  arithmetic (by removing \"#define SINGLE\" from the\n");
+  printf("  source file or \"-DSINGLE\" from the makefile).\n");
+#endif /* SINGLE */
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  splitencsegs()   Split all the encroached subsegments.                   */
+/*                                                                           */
+/*  Each encroached subsegment is repaired by splitting it - inserting a     */
+/*  vertex at or near its midpoint.  Newly inserted vertices may encroach    */
+/*  upon other subsegments; these are also repaired.                         */
+/*                                                                           */
+/*  `triflaws' is a flag that specifies whether one should take note of new  */
+/*  bad triangles that result from inserting vertices to repair encroached   */
+/*  subsegments.                                                             */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void splitencsegs(struct mesh *m, struct behavior *b, int triflaws)
+#else /* not ANSI_DECLARATORS */
+void splitencsegs(m, b, triflaws)
+struct mesh *m;
+struct behavior *b;
+int triflaws;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri enctri;
+  struct otri testtri;
+  struct osub testsh;
+  struct osub currentenc;
+  struct badsubseg *encloop;
+  vertex eorg, edest, eapex;
+  vertex newvertex;
+  enum insertvertexresult success;
+  REAL segmentlength, nearestpoweroftwo;
+  REAL split;
+  REAL multiplier, divisor;
+  int acuteorg, acuteorg2, acutedest, acutedest2;
+  int dummy;
+  int i;
+  triangle ptr;                     /* Temporary variable used by stpivot(). */
+  subseg sptr;                        /* Temporary variable used by snext(). */
+
+  /* Note that steinerleft == -1 if an unlimited number */
+  /*   of Steiner points is allowed.                    */
+  while ((m->badsubsegs.items > 0) && (m->steinerleft != 0)) {
+    traversalinit(&m->badsubsegs);
+    encloop = badsubsegtraverse(m);
+    while ((encloop != (struct badsubseg *) NULL) && (m->steinerleft != 0)) {
+      sdecode(encloop->encsubseg, currentenc);
+      sorg(currentenc, eorg);
+      sdest(currentenc, edest);
+      /* Make sure that this segment is still the same segment it was   */
+      /*   when it was determined to be encroached.  If the segment was */
+      /*   enqueued multiple times (because several newly inserted      */
+      /*   vertices encroached it), it may have already been split.     */
+      if (!deadsubseg(currentenc.ss) &&
+          (eorg == encloop->subsegorg) && (edest == encloop->subsegdest)) {
+        /* To decide where to split a segment, we need to know if the   */
+        /*   segment shares an endpoint with an adjacent segment.       */
+        /*   The concern is that, if we simply split every encroached   */
+        /*   segment in its center, two adjacent segments with a small  */
+        /*   angle between them might lead to an infinite loop; each    */
+        /*   vertex added to split one segment will encroach upon the   */
+        /*   other segment, which must then be split with a vertex that */
+        /*   will encroach upon the first segment, and so on forever.   */
+        /* To avoid this, imagine a set of concentric circles, whose    */
+        /*   radii are powers of two, about each segment endpoint.      */
+        /*   These concentric circles determine where the segment is    */
+        /*   split.  (If both endpoints are shared with adjacent        */
+        /*   segments, split the segment in the middle, and apply the   */
+        /*   concentric circles for later splittings.)                  */
+
+        /* Is the origin shared with another segment? */
+        stpivot(currentenc, enctri);
+        lnext(enctri, testtri);
+        tspivot(testtri, testsh);
+        acuteorg = testsh.ss != m->dummysub;
+        /* Is the destination shared with another segment? */
+        lnextself(testtri);
+        tspivot(testtri, testsh);
+        acutedest = testsh.ss != m->dummysub;
+
+        /* If we're using Chew's algorithm (rather than Ruppert's) */
+        /*   to define encroachment, delete free vertices from the */
+        /*   subsegment's diametral circle.                        */
+        if (!b->conformdel && !acuteorg && !acutedest) {
+          apex(enctri, eapex);
+          while ((vertextype(eapex) == FREEVERTEX) &&
+                 ((eorg[0] - eapex[0]) * (edest[0] - eapex[0]) +
+                  (eorg[1] - eapex[1]) * (edest[1] - eapex[1]) < 0.0)) {
+            deletevertex(m, b, &testtri);
+            stpivot(currentenc, enctri);
+            apex(enctri, eapex);
+            lprev(enctri, testtri);
+          }
+        }
+
+        /* Now, check the other side of the segment, if there's a triangle */
+        /*   there.                                                        */
+        sym(enctri, testtri);
+        if (testtri.tri != m->dummytri) {
+          /* Is the destination shared with another segment? */
+          lnextself(testtri);
+          tspivot(testtri, testsh);
+          acutedest2 = testsh.ss != m->dummysub;
+          acutedest = acutedest || acutedest2;
+          /* Is the origin shared with another segment? */
+          lnextself(testtri);
+          tspivot(testtri, testsh);
+          acuteorg2 = testsh.ss != m->dummysub;
+          acuteorg = acuteorg || acuteorg2;
+
+          /* Delete free vertices from the subsegment's diametral circle. */
+          if (!b->conformdel && !acuteorg2 && !acutedest2) {
+            org(testtri, eapex);
+            while ((vertextype(eapex) == FREEVERTEX) &&
+                   ((eorg[0] - eapex[0]) * (edest[0] - eapex[0]) +
+                    (eorg[1] - eapex[1]) * (edest[1] - eapex[1]) < 0.0)) {
+              deletevertex(m, b, &testtri);
+              sym(enctri, testtri);
+              apex(testtri, eapex);
+              lprevself(testtri);
+            }
+          }
+        }
+
+        /* Use the concentric circles if exactly one endpoint is shared */
+        /*   with another adjacent segment.                             */
+        if (acuteorg || acutedest) {
+          segmentlength = sqrt((edest[0] - eorg[0]) * (edest[0] - eorg[0]) +
+                               (edest[1] - eorg[1]) * (edest[1] - eorg[1]));
+          /* Find the power of two that most evenly splits the segment.  */
+          /*   The worst case is a 2:1 ratio between subsegment lengths. */
+          nearestpoweroftwo = 1.0;
+          while (segmentlength > 3.0 * nearestpoweroftwo) {
+            nearestpoweroftwo *= 2.0;
+          }
+          while (segmentlength < 1.5 * nearestpoweroftwo) {
+            nearestpoweroftwo *= 0.5;
+          }
+          /* Where do we split the segment? */
+          split = nearestpoweroftwo / segmentlength;
+          if (acutedest) {
+            split = 1.0 - split;
+          }
+        } else {
+          /* If we're not worried about adjacent segments, split */
+          /*   this segment in the middle.                       */
+          split = 0.5;
+        }
+
+        /* Create the new vertex. */
+        newvertex = (vertex) poolalloc(&m->vertices);
+        /* Interpolate its coordinate and attributes. */
+        for (i = 0; i < 2 + m->nextras; i++) {
+          newvertex[i] = eorg[i] + split * (edest[i] - eorg[i]);
+        }
+
+        if (!b->noexact) {
+          /* Roundoff in the above calculation may yield a `newvertex'   */
+          /*   that is not precisely collinear with `eorg' and `edest'.  */
+          /*   Improve collinearity by one step of iterative refinement. */
+          multiplier = counterclockwise(m, b, eorg, edest, newvertex);
+          divisor = ((eorg[0] - edest[0]) * (eorg[0] - edest[0]) +
+                     (eorg[1] - edest[1]) * (eorg[1] - edest[1]));
+          if ((multiplier != 0.0) && (divisor != 0.0)) {
+            multiplier = multiplier / divisor;
+            /* Watch out for NANs. */
+            if (multiplier == multiplier) {
+              newvertex[0] += multiplier * (edest[1] - eorg[1]);
+              newvertex[1] += multiplier * (eorg[0] - edest[0]);
+            }
+          }
+        }
+
+        setvertexmark(newvertex, mark(currentenc));
+        setvertextype(newvertex, SEGMENTVERTEX);
+        if (b->verbose > 1) {
+          printf(
+  "  Splitting subsegment (%.12g, %.12g) (%.12g, %.12g) at (%.12g, %.12g).\n",
+                 eorg[0], eorg[1], edest[0], edest[1],
+                 newvertex[0], newvertex[1]);
+        }
+        /* Check whether the new vertex lies on an endpoint. */
+        if (((newvertex[0] == eorg[0]) && (newvertex[1] == eorg[1])) ||
+            ((newvertex[0] == edest[0]) && (newvertex[1] == edest[1]))) {
+          printf("Error:  Ran out of precision at (%.12g, %.12g).\n",
+                 newvertex[0], newvertex[1]);
+          printf("I attempted to split a segment to a smaller size than\n");
+          printf("  can be accommodated by the finite precision of\n");
+          printf("  floating point arithmetic.\n");
+          precisionerror();
+          triexit(1);
+        }
+        /* Insert the splitting vertex.  This should always succeed. */
+        success = insertvertex(m, b, newvertex, &enctri, &currentenc,
+                               1, triflaws);
+        if ((success != SUCCESSFULVERTEX) && (success != ENCROACHINGVERTEX)) {
+          printf("Internal error in splitencsegs():\n");
+          printf("  Failure to split a segment.\n");
+          internalerror();
+        }
+        if (m->steinerleft > 0) {
+          m->steinerleft--;
+        }
+        /* Check the two new subsegments to see if they're encroached. */
+        dummy = checkseg4encroach(m, b, &currentenc);
+        snextself(currentenc);
+        dummy = checkseg4encroach(m, b, &currentenc);
+      }
+
+      badsubsegdealloc(m, encloop);
+      encloop = badsubsegtraverse(m);
+    }
+  }
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  tallyfaces()   Test every triangle in the mesh for quality measures.     */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void tallyfaces(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void tallyfaces(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri triangleloop;
+
+  if (b->verbose) {
+    printf("  Making a list of bad triangles.\n");
+  }
+  traversalinit(&m->triangles);
+  triangleloop.orient = 0;
+  triangleloop.tri = triangletraverse(m);
+  while (triangleloop.tri != (triangle *) NULL) {
+    /* If the triangle is bad, enqueue it. */
+    testtriangle(m, b, &triangleloop);
+    triangleloop.tri = triangletraverse(m);
+  }
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  splittriangle()   Inserts a vertex at the circumcenter of a triangle.    */
+/*                    Deletes the newly inserted vertex if it encroaches     */
+/*                    upon a segment.                                        */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void splittriangle(struct mesh *m, struct behavior *b,
+                   struct badtriang *badtri)
+#else /* not ANSI_DECLARATORS */
+void splittriangle(m, b, badtri)
+struct mesh *m;
+struct behavior *b;
+struct badtriang *badtri;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri badotri;
+  vertex borg, bdest, bapex;
+  vertex newvertex;
+  REAL xi, eta;
+  enum insertvertexresult success;
+  int errorflag;
+  int i;
+
+  decode(badtri->poortri, badotri);
+  org(badotri, borg);
+  dest(badotri, bdest);
+  apex(badotri, bapex);
+  /* Make sure that this triangle is still the same triangle it was      */
+  /*   when it was tested and determined to be of bad quality.           */
+  /*   Subsequent transformations may have made it a different triangle. */
+  if (!deadtri(badotri.tri) && (borg == badtri->triangorg) &&
+      (bdest == badtri->triangdest) && (bapex == badtri->triangapex)) {
+    if (b->verbose > 1) {
+      printf("  Splitting this triangle at its circumcenter:\n");
+      printf("    (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n", borg[0],
+             borg[1], bdest[0], bdest[1], bapex[0], bapex[1]);
+    }
+
+    errorflag = 0;
+    /* Create a new vertex at the triangle's circumcenter. */
+    newvertex = (vertex) poolalloc(&m->vertices);
+    findcircumcenter(m, b, borg, bdest, bapex, newvertex, &xi, &eta, 1);
+
+    /* Check whether the new vertex lies on a triangle vertex. */
+    if (((newvertex[0] == borg[0]) && (newvertex[1] == borg[1])) ||
+        ((newvertex[0] == bdest[0]) && (newvertex[1] == bdest[1])) ||
+        ((newvertex[0] == bapex[0]) && (newvertex[1] == bapex[1]))) {
+      if (!b->quiet) {
+        printf(
+             "Warning:  New vertex (%.12g, %.12g) falls on existing vertex.\n",
+               newvertex[0], newvertex[1]);
+        errorflag = 1;
+      }
+      vertexdealloc(m, newvertex);
+    } else {
+      for (i = 2; i < 2 + m->nextras; i++) {
+        /* Interpolate the vertex attributes at the circumcenter. */
+        newvertex[i] = borg[i] + xi * (bdest[i] - borg[i])
+                              + eta * (bapex[i] - borg[i]);
+      }
+      /* The new vertex must be in the interior, and therefore is a */
+      /*   free vertex with a marker of zero.                       */
+      setvertexmark(newvertex, 0);
+      setvertextype(newvertex, FREEVERTEX);
+
+      /* Ensure that the handle `badotri' does not represent the longest  */
+      /*   edge of the triangle.  This ensures that the circumcenter must */
+      /*   fall to the left of this edge, so point location will work.    */
+      /*   (If the angle org-apex-dest exceeds 90 degrees, then the       */
+      /*   circumcenter lies outside the org-dest edge, and eta is        */
+      /*   negative.  Roundoff error might prevent eta from being         */
+      /*   negative when it should be, so I test eta against xi.)         */
+      if (eta < xi) {
+        lprevself(badotri);
+      }
+
+      /* Insert the circumcenter, searching from the edge of the triangle, */
+      /*   and maintain the Delaunay property of the triangulation.        */
+      success = insertvertex(m, b, newvertex, &badotri, (struct osub *) NULL,
+                             1, 1);
+      if (success == SUCCESSFULVERTEX) {
+        if (m->steinerleft > 0) {
+          m->steinerleft--;
+        }
+      } else if (success == ENCROACHINGVERTEX) {
+        /* If the newly inserted vertex encroaches upon a subsegment, */
+        /*   delete the new vertex.                                   */
+        undovertex(m, b);
+        if (b->verbose > 1) {
+          printf("  Rejecting (%.12g, %.12g).\n", newvertex[0], newvertex[1]);
+        }
+        vertexdealloc(m, newvertex);
+      } else if (success == VIOLATINGVERTEX) {
+        /* Failed to insert the new vertex, but some subsegment was */
+        /*   marked as being encroached.                            */
+        vertexdealloc(m, newvertex);
+      } else {                                 /* success == DUPLICATEVERTEX */
+        /* Couldn't insert the new vertex because a vertex is already there. */
+        if (!b->quiet) {
+          printf(
+            "Warning:  New vertex (%.12g, %.12g) falls on existing vertex.\n",
+                 newvertex[0], newvertex[1]);
+          errorflag = 1;
+        }
+        vertexdealloc(m, newvertex);
+      }
+    }
+    if (errorflag) {
+      if (b->verbose) {
+        printf("  The new vertex is at the circumcenter of triangle\n");
+        printf("    (%.12g, %.12g) (%.12g, %.12g) (%.12g, %.12g)\n",
+               borg[0], borg[1], bdest[0], bdest[1], bapex[0], bapex[1]);
+      }
+      printf("This probably means that I am trying to refine triangles\n");
+      printf("  to a smaller size than can be accommodated by the finite\n");
+      printf("  precision of floating point arithmetic.  (You can be\n");
+      printf("  sure of this if I fail to terminate.)\n");
+      precisionerror();
+    }
+  }
+}
+
+#endif /* not CDT_ONLY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  enforcequality()   Remove all the encroached subsegments and bad         */
+/*                     triangles from the triangulation.                     */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef CDT_ONLY
+
+#ifdef ANSI_DECLARATORS
+void enforcequality(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void enforcequality(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct badtriang *badtri;
+  int i;
+
+  if (!b->quiet) {
+    printf("Adding Steiner points to enforce quality.\n");
+  }
+  /* Initialize the pool of encroached subsegments. */
+  poolinit(&m->badsubsegs, sizeof(struct badsubseg), BADSUBSEGPERBLOCK,
+           BADSUBSEGPERBLOCK, 0);
+  if (b->verbose) {
+    printf("  Looking for encroached subsegments.\n");
+  }
+  /* Test all segments to see if they're encroached. */
+  tallyencs(m, b);
+  if (b->verbose && (m->badsubsegs.items > 0)) {
+    printf("  Splitting encroached subsegments.\n");
+  }
+  /* Fix encroached subsegments without noting bad triangles. */
+  splitencsegs(m, b, 0);
+  /* At this point, if we haven't run out of Steiner points, the */
+  /*   triangulation should be (conforming) Delaunay.            */
+
+  /* Next, we worry about enforcing triangle quality. */
+  if ((b->minangle > 0.0) || b->vararea || b->fixedarea || b->usertest) {
+    /* Initialize the pool of bad triangles. */
+    poolinit(&m->badtriangles, sizeof(struct badtriang), BADTRIPERBLOCK,
+             BADTRIPERBLOCK, 0);
+    /* Initialize the queues of bad triangles. */
+    for (i = 0; i < 4096; i++) {
+      m->queuefront[i] = (struct badtriang *) NULL;
+    }
+    m->firstnonemptyq = -1;
+    /* Test all triangles to see if they're bad. */
+    tallyfaces(m, b);
+    /* Initialize the pool of recently flipped triangles. */
+    poolinit(&m->flipstackers, sizeof(struct flipstacker), FLIPSTACKERPERBLOCK,
+             FLIPSTACKERPERBLOCK, 0);
+    m->checkquality = 1;
+    if (b->verbose) {
+      printf("  Splitting bad triangles.\n");
+    }
+    while ((m->badtriangles.items > 0) && (m->steinerleft != 0)) {
+      /* Fix one bad triangle by inserting a vertex at its circumcenter. */
+      badtri = dequeuebadtriang(m);
+      splittriangle(m, b, badtri);
+      if (m->badsubsegs.items > 0) {
+        /* Put bad triangle back in queue for another try later. */
+        enqueuebadtriang(m, b, badtri);
+        /* Fix any encroached subsegments that resulted. */
+        /*   Record any new bad triangles that result.   */
+        splitencsegs(m, b, 1);
+      } else {
+        /* Return the bad triangle to the pool. */
+        pooldealloc(&m->badtriangles, (VOID *) badtri);
+      }
+    }
+  }
+  /* At this point, if the "-D" switch was selected and we haven't run out  */
+  /*   of Steiner points, the triangulation should be (conforming) Delaunay */
+  /*   and have no low-quality triangles.                                   */
+
+  /* Might we have run out of Steiner points too soon? */
+  if (!b->quiet && b->conformdel && (m->badsubsegs.items > 0) &&
+      (m->steinerleft == 0)) {
+    printf("\nWarning:  I ran out of Steiner points, but the mesh has\n");
+    if (m->badsubsegs.items == 1) {
+      printf("  one encroached subsegment, and therefore might not be truly\n"
+             );
+    } else {
+      printf("  %ld encroached subsegments, and therefore might not be truly\n"
+             , m->badsubsegs.items);
+    }
+    printf("  Delaunay.  If the Delaunay property is important to you,\n");
+    printf("  try increasing the number of Steiner points (controlled by\n");
+    printf("  the -S switch) slightly and try again.\n\n");
+  }
+}
+
+#endif /* not CDT_ONLY */
+
+/**                                                                         **/
+/**                                                                         **/
+/********* Mesh quality maintenance ends here                        *********/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  highorder()   Create extra nodes for quadratic subparametric elements.   */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void highorder(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void highorder(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri triangleloop, trisym;
+  struct osub checkmark;
+  vertex newvertex;
+  vertex torg, tdest;
+  int i;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+  if (!b->quiet) {
+    printf("Adding vertices for second-order triangles.\n");
+  }
+  /* The following line ensures that dead items in the pool of nodes    */
+  /*   cannot be allocated for the extra nodes associated with high     */
+  /*   order elements.  This ensures that the primary nodes (at the     */
+  /*   corners of elements) will occur earlier in the output files, and */
+  /*   have lower indices, than the extra nodes.                        */
+  m->vertices.deaditemstack = (VOID *) NULL;
+
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  /* To loop over the set of edges, loop over all triangles, and look at   */
+  /*   the three edges of each triangle.  If there isn't another triangle  */
+  /*   adjacent to the edge, operate on the edge.  If there is another     */
+  /*   adjacent triangle, operate on the edge only if the current triangle */
+  /*   has a smaller pointer than its neighbor.  This way, each edge is    */
+  /*   considered only once.                                               */
+  while (triangleloop.tri != (triangle *) NULL) {
+    for (triangleloop.orient = 0; triangleloop.orient < 3;
+         triangleloop.orient++) {
+      sym(triangleloop, trisym);
+      if ((triangleloop.tri < trisym.tri) || (trisym.tri == m->dummytri)) {
+        org(triangleloop, torg);
+        dest(triangleloop, tdest);
+        /* Create a new node in the middle of the edge.  Interpolate */
+        /*   its attributes.                                         */
+        newvertex = (vertex) poolalloc(&m->vertices);
+        for (i = 0; i < 2 + m->nextras; i++) {
+          newvertex[i] = 0.5 * (torg[i] + tdest[i]);
+        }
+        /* Set the new node's marker to zero or one, depending on */
+        /*   whether it lies on a boundary.                       */
+        setvertexmark(newvertex, trisym.tri == m->dummytri);
+        setvertextype(newvertex,
+                      trisym.tri == m->dummytri ? FREEVERTEX : SEGMENTVERTEX);
+        if (b->usesegments) {
+          tspivot(triangleloop, checkmark);
+          /* If this edge is a segment, transfer the marker to the new node. */
+          if (checkmark.ss != m->dummysub) {
+            setvertexmark(newvertex, mark(checkmark));
+            setvertextype(newvertex, SEGMENTVERTEX);
+          }
+        }
+        if (b->verbose > 1) {
+          printf("  Creating (%.12g, %.12g).\n", newvertex[0], newvertex[1]);
+        }
+        /* Record the new node in the (one or two) adjacent elements. */
+        triangleloop.tri[m->highorderindex + triangleloop.orient] =
+                (triangle) newvertex;
+        if (trisym.tri != m->dummytri) {
+          trisym.tri[m->highorderindex + trisym.orient] = (triangle) newvertex;
+        }
+      }
+    }
+    triangleloop.tri = triangletraverse(m);
+  }
+}
+
+/********* File I/O routines begin here                              *********/
+/**                                                                         **/
+/**                                                                         **/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  readline()   Read a nonempty line from a file.                           */
+/*                                                                           */
+/*  A line is considered "nonempty" if it contains something that looks like */
+/*  a number.  Comments (prefaced by `#') are ignored.                       */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+char *readline(char *string, FILE *infile, char *infilename)
+#else /* not ANSI_DECLARATORS */
+char *readline(string, infile, infilename)
+char *string;
+FILE *infile;
+char *infilename;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  char *result;
+
+  /* Search for something that looks like a number. */
+  do {
+    result = fgets(string, INPUTLINESIZE, infile);
+    if (result == (char *) NULL) {
+      printf("  Error:  Unexpected end of file in %s.\n", infilename);
+      triexit(1);
+    }
+    /* Skip anything that doesn't look like a number, a comment, */
+    /*   or the end of a line.                                   */
+    while ((*result != '\0') && (*result != '#')
+           && (*result != '.') && (*result != '+') && (*result != '-')
+           && ((*result < '0') || (*result > '9'))) {
+      result++;
+    }
+  /* If it's a comment or end of line, read another line and try again. */
+  } while ((*result == '#') || (*result == '\0'));
+  return result;
+}
+
+#endif /* not TRILIBRARY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  findfield()   Find the next field of a string.                           */
+/*                                                                           */
+/*  Jumps past the current field by searching for whitespace, then jumps     */
+/*  past the whitespace to find the next field.                              */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+char *findfield(char *string)
+#else /* not ANSI_DECLARATORS */
+char *findfield(string)
+char *string;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  char *result;
+
+  result = string;
+  /* Skip the current field.  Stop upon reaching whitespace. */
+  while ((*result != '\0') && (*result != '#')
+         && (*result != ' ') && (*result != '\t')) {
+    result++;
+  }
+  /* Now skip the whitespace and anything else that doesn't look like a */
+  /*   number, a comment, or the end of a line.                         */
+  while ((*result != '\0') && (*result != '#')
+         && (*result != '.') && (*result != '+') && (*result != '-')
+         && ((*result < '0') || (*result > '9'))) {
+    result++;
+  }
+  /* Check for a comment (prefixed with `#'). */
+  if (*result == '#') {
+    *result = '\0';
+  }
+  return result;
+}
+
+#endif /* not TRILIBRARY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  readnodes()   Read the vertices from a file, which may be a .node or     */
+/*                .poly file.                                                */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void readnodes(struct mesh *m, struct behavior *b, char *nodefilename,
+               char *polyfilename, FILE **polyfile)
+#else /* not ANSI_DECLARATORS */
+void readnodes(m, b, nodefilename, polyfilename, polyfile)
+struct mesh *m;
+struct behavior *b;
+char *nodefilename;
+char *polyfilename;
+FILE **polyfile;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  FILE *infile;
+  vertex vertexloop;
+  char inputline[INPUTLINESIZE];
+  char *stringptr;
+  char *infilename;
+  REAL x, y;
+  int firstnode;
+  int nodemarkers;
+  int currentmarker;
+  int i, j;
+
+  if (b->poly) {
+    /* Read the vertices from a .poly file. */
+    if (!b->quiet) {
+      printf("Opening %s.\n", polyfilename);
+    }
+    *polyfile = fopen(polyfilename, "r");
+    if (*polyfile == (FILE *) NULL) {
+      printf("  Error:  Cannot access file %s.\n", polyfilename);
+      triexit(1);
+    }
+    /* Read number of vertices, number of dimensions, number of vertex */
+    /*   attributes, and number of boundary markers.                   */
+    stringptr = readline(inputline, *polyfile, polyfilename);
+    m->invertices = (int) strtol(stringptr, &stringptr, 0);
+    stringptr = findfield(stringptr);
+    if (*stringptr == '\0') {
+      m->mesh_dim = 2;
+    } else {
+      m->mesh_dim = (int) strtol(stringptr, &stringptr, 0);
+    }
+    stringptr = findfield(stringptr);
+    if (*stringptr == '\0') {
+      m->nextras = 0;
+    } else {
+      m->nextras = (int) strtol(stringptr, &stringptr, 0);
+    }
+    stringptr = findfield(stringptr);
+    if (*stringptr == '\0') {
+      nodemarkers = 0;
+    } else {
+      nodemarkers = (int) strtol(stringptr, &stringptr, 0);
+    }
+    if (m->invertices > 0) {
+      infile = *polyfile;
+      infilename = polyfilename;
+      m->readnodefile = 0;
+    } else {
+      /* If the .poly file claims there are zero vertices, that means that */
+      /*   the vertices should be read from a separate .node file.         */
+      m->readnodefile = 1;
+      infilename = nodefilename;
+    }
+  } else {
+    m->readnodefile = 1;
+    infilename = nodefilename;
+    *polyfile = (FILE *) NULL;
+  }
+
+  if (m->readnodefile) {
+    /* Read the vertices from a .node file. */
+    if (!b->quiet) {
+      printf("Opening %s.\n", nodefilename);
+    }
+    infile = fopen(nodefilename, "r");
+    if (infile == (FILE *) NULL) {
+      printf("  Error:  Cannot access file %s.\n", nodefilename);
+      triexit(1);
+    }
+    /* Read number of vertices, number of dimensions, number of vertex */
+    /*   attributes, and number of boundary markers.                   */
+    stringptr = readline(inputline, infile, nodefilename);
+    m->invertices = (int) strtol(stringptr, &stringptr, 0);
+    stringptr = findfield(stringptr);
+    if (*stringptr == '\0') {
+      m->mesh_dim = 2;
+    } else {
+      m->mesh_dim = (int) strtol(stringptr, &stringptr, 0);
+    }
+    stringptr = findfield(stringptr);
+    if (*stringptr == '\0') {
+      m->nextras = 0;
+    } else {
+      m->nextras = (int) strtol(stringptr, &stringptr, 0);
+    }
+    stringptr = findfield(stringptr);
+    if (*stringptr == '\0') {
+      nodemarkers = 0;
+    } else {
+      nodemarkers = (int) strtol(stringptr, &stringptr, 0);
+    }
+  }
+
+  if (m->invertices < 3) {
+    printf("Error:  Input must have at least three input vertices.\n");
+    triexit(1);
+  }
+  if (m->mesh_dim != 2) {
+    printf("Error:  Triangle only works with two-dimensional meshes.\n");
+    triexit(1);
+  }
+  if (m->nextras == 0) {
+    b->weighted = 0;
+  }
+
+  initializevertexpool(m, b);
+
+  /* Read the vertices. */
+  for (i = 0; i < m->invertices; i++) {
+    vertexloop = (vertex) poolalloc(&m->vertices);
+    stringptr = readline(inputline, infile, infilename);
+    if (i == 0) {
+      firstnode = (int) strtol(stringptr, &stringptr, 0);
+      if ((firstnode == 0) || (firstnode == 1)) {
+        b->firstnumber = firstnode;
+      }
+    }
+    stringptr = findfield(stringptr);
+    if (*stringptr == '\0') {
+      printf("Error:  Vertex %d has no x coordinate.\n", b->firstnumber + i);
+      triexit(1);
+    }
+    x = (REAL) strtod(stringptr, &stringptr);
+    stringptr = findfield(stringptr);
+    if (*stringptr == '\0') {
+      printf("Error:  Vertex %d has no y coordinate.\n", b->firstnumber + i);
+      triexit(1);
+    }
+    y = (REAL) strtod(stringptr, &stringptr);
+    vertexloop[0] = x;
+    vertexloop[1] = y;
+    /* Read the vertex attributes. */
+    for (j = 2; j < 2 + m->nextras; j++) {
+      stringptr = findfield(stringptr);
+      if (*stringptr == '\0') {
+        vertexloop[j] = 0.0;
+      } else {
+        vertexloop[j] = (REAL) strtod(stringptr, &stringptr);
+      }
+    }
+    if (nodemarkers) {
+      /* Read a vertex marker. */
+      stringptr = findfield(stringptr);
+      if (*stringptr == '\0') {
+        setvertexmark(vertexloop, 0);
+      } else {
+        currentmarker = (int) strtol(stringptr, &stringptr, 0);
+        setvertexmark(vertexloop, currentmarker);
+      }
+    } else {
+      /* If no markers are specified in the file, they default to zero. */
+      setvertexmark(vertexloop, 0);
+    }
+    setvertextype(vertexloop, INPUTVERTEX);
+    /* Determine the smallest and largest x and y coordinates. */
+    if (i == 0) {
+      m->xmin = m->xmax = x;
+      m->ymin = m->ymax = y;
+    } else {
+      m->xmin = (x < m->xmin) ? x : m->xmin;
+      m->xmax = (x > m->xmax) ? x : m->xmax;
+      m->ymin = (y < m->ymin) ? y : m->ymin;
+      m->ymax = (y > m->ymax) ? y : m->ymax;
+    }
+  }
+  if (m->readnodefile) {
+    fclose(infile);
+  }
+
+  /* Nonexistent x value used as a flag to mark circle events in sweepline */
+  /*   Delaunay algorithm.                                                 */
+  m->xminextreme = 10 * m->xmin - 9 * m->xmax;
+}
+
+#endif /* not TRILIBRARY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  transfernodes()   Read the vertices from memory.                         */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void transfernodes(struct mesh *m, struct behavior *b, REAL *pointlist,
+                   REAL *pointattriblist, int *pointmarkerlist,
+                   int numberofpoints, int numberofpointattribs)
+#else /* not ANSI_DECLARATORS */
+void transfernodes(m, b, pointlist, pointattriblist, pointmarkerlist,
+                   numberofpoints, numberofpointattribs)
+struct mesh *m;
+struct behavior *b;
+REAL *pointlist;
+REAL *pointattriblist;
+int *pointmarkerlist;
+int numberofpoints;
+int numberofpointattribs;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  vertex vertexloop;
+  REAL x, y;
+  int i, j;
+  int coordindex;
+  int attribindex;
+
+  m->invertices = numberofpoints;
+  m->mesh_dim = 2;
+  m->nextras = numberofpointattribs;
+  m->readnodefile = 0;
+  if (m->invertices < 3) {
+    printf("Error:  Input must have at least three input vertices.\n");
+    triexit(1);
+  }
+  if (m->nextras == 0) {
+    b->weighted = 0;
+  }
+
+  initializevertexpool(m, b);
+
+  /* Read the vertices. */
+  coordindex = 0;
+  attribindex = 0;
+  for (i = 0; i < m->invertices; i++) {
+    vertexloop = (vertex) poolalloc(&m->vertices);
+    /* Read the vertex coordinates. */
+    x = vertexloop[0] = pointlist[coordindex++];
+    y = vertexloop[1] = pointlist[coordindex++];
+    /* Read the vertex attributes. */
+    for (j = 0; j < numberofpointattribs; j++) {
+      vertexloop[2 + j] = pointattriblist[attribindex++];
+    }
+    if (pointmarkerlist != (int *) NULL) {
+      /* Read a vertex marker. */
+      setvertexmark(vertexloop, pointmarkerlist[i]);
+    } else {
+      /* If no markers are specified, they default to zero. */
+      setvertexmark(vertexloop, 0);
+    }
+    setvertextype(vertexloop, INPUTVERTEX);
+    /* Determine the smallest and largest x and y coordinates. */
+    if (i == 0) {
+      m->xmin = m->xmax = x;
+      m->ymin = m->ymax = y;
+    } else {
+      m->xmin = (x < m->xmin) ? x : m->xmin;
+      m->xmax = (x > m->xmax) ? x : m->xmax;
+      m->ymin = (y < m->ymin) ? y : m->ymin;
+      m->ymax = (y > m->ymax) ? y : m->ymax;
+    }
+  }
+
+  /* Nonexistent x value used as a flag to mark circle events in sweepline */
+  /*   Delaunay algorithm.                                                 */
+  m->xminextreme = 10 * m->xmin - 9 * m->xmax;
+}
+
+#endif /* TRILIBRARY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  readholes()   Read the holes, and possibly regional attributes and area  */
+/*                constraints, from a .poly file.                            */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void readholes(struct mesh *m, struct behavior *b,
+               FILE *polyfile, char *polyfilename, REAL **hlist, int *holes,
+               REAL **rlist, int *regions)
+#else /* not ANSI_DECLARATORS */
+void readholes(m, b, polyfile, polyfilename, hlist, holes, rlist, regions)
+struct mesh *m;
+struct behavior *b;
+FILE *polyfile;
+char *polyfilename;
+REAL **hlist;
+int *holes;
+REAL **rlist;
+int *regions;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  REAL *holelist;
+  REAL *regionlist;
+  char inputline[INPUTLINESIZE];
+  char *stringptr;
+  int index;
+  int i;
+
+  /* Read the holes. */
+  stringptr = readline(inputline, polyfile, polyfilename);
+  *holes = (int) strtol(stringptr, &stringptr, 0);
+  if (*holes > 0) {
+    holelist = (REAL *) trimalloc(2 * *holes * (int) sizeof(REAL));
+    *hlist = holelist;
+    for (i = 0; i < 2 * *holes; i += 2) {
+      stringptr = readline(inputline, polyfile, polyfilename);
+      stringptr = findfield(stringptr);
+      if (*stringptr == '\0') {
+        printf("Error:  Hole %d has no x coordinate.\n",
+               b->firstnumber + (i >> 1));
+        triexit(1);
+      } else {
+        holelist[i] = (REAL) strtod(stringptr, &stringptr);
+      }
+      stringptr = findfield(stringptr);
+      if (*stringptr == '\0') {
+        printf("Error:  Hole %d has no y coordinate.\n",
+               b->firstnumber + (i >> 1));
+        triexit(1);
+      } else {
+        holelist[i + 1] = (REAL) strtod(stringptr, &stringptr);
+      }
+    }
+  } else {
+    *hlist = (REAL *) NULL;
+  }
+
+#ifndef CDT_ONLY
+  if ((b->regionattrib || b->vararea) && !b->refine) {
+    /* Read the area constraints. */
+    stringptr = readline(inputline, polyfile, polyfilename);
+    *regions = (int) strtol(stringptr, &stringptr, 0);
+    if (*regions > 0) {
+      regionlist = (REAL *) trimalloc(4 * *regions * (int) sizeof(REAL));
+      *rlist = regionlist;
+      index = 0;
+      for (i = 0; i < *regions; i++) {
+        stringptr = readline(inputline, polyfile, polyfilename);
+        stringptr = findfield(stringptr);
+        if (*stringptr == '\0') {
+          printf("Error:  Region %d has no x coordinate.\n",
+                 b->firstnumber + i);
+          triexit(1);
+        } else {
+          regionlist[index++] = (REAL) strtod(stringptr, &stringptr);
+        }
+        stringptr = findfield(stringptr);
+        if (*stringptr == '\0') {
+          printf("Error:  Region %d has no y coordinate.\n",
+                 b->firstnumber + i);
+          triexit(1);
+        } else {
+          regionlist[index++] = (REAL) strtod(stringptr, &stringptr);
+        }
+        stringptr = findfield(stringptr);
+        if (*stringptr == '\0') {
+          printf(
+            "Error:  Region %d has no region attribute or area constraint.\n",
+                 b->firstnumber + i);
+          triexit(1);
+        } else {
+          regionlist[index++] = (REAL) strtod(stringptr, &stringptr);
+        }
+        stringptr = findfield(stringptr);
+        if (*stringptr == '\0') {
+          regionlist[index] = regionlist[index - 1];
+        } else {
+          regionlist[index] = (REAL) strtod(stringptr, &stringptr);
+        }
+        index++;
+      }
+    }
+  } else {
+    /* Set `*regions' to zero to avoid an accidental free() later. */
+    *regions = 0;
+    *rlist = (REAL *) NULL;
+  }
+#endif /* not CDT_ONLY */
+
+  fclose(polyfile);
+}
+
+#endif /* not TRILIBRARY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  finishfile()   Write the command line to the output file so the user     */
+/*                 can remember how the file was generated.  Close the file. */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void finishfile(FILE *outfile, int argc, char **argv)
+#else /* not ANSI_DECLARATORS */
+void finishfile(outfile, argc, argv)
+FILE *outfile;
+int argc;
+char **argv;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  int i;
+
+  fprintf(outfile, "# Generated by");
+  for (i = 0; i < argc; i++) {
+    fprintf(outfile, " ");
+    fputs(argv[i], outfile);
+  }
+  fprintf(outfile, "\n");
+  fclose(outfile);
+}
+
+#endif /* not TRILIBRARY */
+
+/*****************************************************************************/
+/*                                                                           */
+/*  writenodes()   Number the vertices and write them to a .node file.       */
+/*                                                                           */
+/*  To save memory, the vertex numbers are written over the boundary markers */
+/*  after the vertices are written to a file.                                */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void writenodes(struct mesh *m, struct behavior *b, REAL **pointlist,
+                REAL **pointattriblist, int **pointmarkerlist)
+#else /* not ANSI_DECLARATORS */
+void writenodes(m, b, pointlist, pointattriblist, pointmarkerlist)
+struct mesh *m;
+struct behavior *b;
+REAL **pointlist;
+REAL **pointattriblist;
+int **pointmarkerlist;
+#endif /* not ANSI_DECLARATORS */
+
+#else /* not TRILIBRARY */
+
+#ifdef ANSI_DECLARATORS
+void writenodes(struct mesh *m, struct behavior *b, char *nodefilename,
+                int argc, char **argv)
+#else /* not ANSI_DECLARATORS */
+void writenodes(m, b, nodefilename, argc, argv)
+struct mesh *m;
+struct behavior *b;
+char *nodefilename;
+int argc;
+char **argv;
+#endif /* not ANSI_DECLARATORS */
+
+#endif /* not TRILIBRARY */
+
+{
+#ifdef TRILIBRARY
+  REAL *plist;
+  REAL *palist;
+  int *pmlist;
+  int coordindex;
+  int attribindex;
+#else /* not TRILIBRARY */
+  FILE *outfile;
+#endif /* not TRILIBRARY */
+  vertex vertexloop;
+  long outvertices;
+  int vertexnumber;
+  int i;
+
+  if (b->jettison) {
+    outvertices = m->vertices.items - m->undeads;
+  } else {
+    outvertices = m->vertices.items;
+  }
+
+#ifdef TRILIBRARY
+  if (!b->quiet) {
+    printf("Writing vertices.\n");
+  }
+  /* Allocate memory for output vertices if necessary. */
+  if (*pointlist == (REAL *) NULL) {
+    *pointlist = (REAL *) trimalloc((int) (outvertices * 2 * sizeof(REAL)));
+  }
+  /* Allocate memory for output vertex attributes if necessary. */
+  if ((m->nextras > 0) && (*pointattriblist == (REAL *) NULL)) {
+    *pointattriblist = (REAL *) trimalloc((int) (outvertices * m->nextras *
+                                                 sizeof(REAL)));
+  }
+  /* Allocate memory for output vertex markers if necessary. */
+  if (!b->nobound && (*pointmarkerlist == (int *) NULL)) {
+    *pointmarkerlist = (int *) trimalloc((int) (outvertices * sizeof(int)));
+  }
+  plist = *pointlist;
+  palist = *pointattriblist;
+  pmlist = *pointmarkerlist;
+  coordindex = 0;
+  attribindex = 0;
+#else /* not TRILIBRARY */
+  if (!b->quiet) {
+    printf("Writing %s.\n", nodefilename);
+  }
+  outfile = fopen(nodefilename, "w");
+  if (outfile == (FILE *) NULL) {
+    printf("  Error:  Cannot create file %s.\n", nodefilename);
+    triexit(1);
+  }
+  /* Number of vertices, number of dimensions, number of vertex attributes, */
+  /*   and number of boundary markers (zero or one).                        */
+  fprintf(outfile, "%ld  %d  %d  %d\n", outvertices, m->mesh_dim,
+          m->nextras, 1 - b->nobound);
+#endif /* not TRILIBRARY */
+
+  traversalinit(&m->vertices);
+  vertexnumber = b->firstnumber;
+  vertexloop = vertextraverse(m);
+  while (vertexloop != (vertex) NULL) {
+    if (!b->jettison || (vertextype(vertexloop) != UNDEADVERTEX)) {
+#ifdef TRILIBRARY
+      /* X and y coordinates. */
+      plist[coordindex++] = vertexloop[0];
+      plist[coordindex++] = vertexloop[1];
+      /* Vertex attributes. */
+      for (i = 0; i < m->nextras; i++) {
+        palist[attribindex++] = vertexloop[2 + i];
+      }
+      if (!b->nobound) {
+        /* Copy the boundary marker. */
+        pmlist[vertexnumber - b->firstnumber] = vertexmark(vertexloop);
+      }
+#else /* not TRILIBRARY */
+      /* Vertex number, x and y coordinates. */
+      fprintf(outfile, "%4d    %.17g  %.17g", vertexnumber, vertexloop[0],
+              vertexloop[1]);
+      for (i = 0; i < m->nextras; i++) {
+        /* Write an attribute. */
+        fprintf(outfile, "  %.17g", vertexloop[i + 2]);
+      }
+      if (b->nobound) {
+        fprintf(outfile, "\n");
+      } else {
+        /* Write the boundary marker. */
+        fprintf(outfile, "    %d\n", vertexmark(vertexloop));
+      }
+#endif /* not TRILIBRARY */
+
+      setvertexmark(vertexloop, vertexnumber);
+      vertexnumber++;
+    }
+    vertexloop = vertextraverse(m);
+  }
+
+#ifndef TRILIBRARY
+  finishfile(outfile, argc, argv);
+#endif /* not TRILIBRARY */
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  numbernodes()   Number the vertices.                                     */
+/*                                                                           */
+/*  Each vertex is assigned a marker equal to its number.                    */
+/*                                                                           */
+/*  Used when writenodes() is not called because no .node file is written.   */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void numbernodes(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void numbernodes(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  vertex vertexloop;
+  int vertexnumber;
+
+  traversalinit(&m->vertices);
+  vertexnumber = b->firstnumber;
+  vertexloop = vertextraverse(m);
+  while (vertexloop != (vertex) NULL) {
+    setvertexmark(vertexloop, vertexnumber);
+    if (!b->jettison || (vertextype(vertexloop) != UNDEADVERTEX)) {
+      vertexnumber++;
+    }
+    vertexloop = vertextraverse(m);
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  writeelements()   Write the triangles to an .ele file.                   */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void writeelements(struct mesh *m, struct behavior *b,
+                   int **trianglelist, REAL **triangleattriblist)
+#else /* not ANSI_DECLARATORS */
+void writeelements(m, b, trianglelist, triangleattriblist)
+struct mesh *m;
+struct behavior *b;
+int **trianglelist;
+REAL **triangleattriblist;
+#endif /* not ANSI_DECLARATORS */
+
+#else /* not TRILIBRARY */
+
+#ifdef ANSI_DECLARATORS
+void writeelements(struct mesh *m, struct behavior *b, char *elefilename,
+                   int argc, char **argv)
+#else /* not ANSI_DECLARATORS */
+void writeelements(m, b, elefilename, argc, argv)
+struct mesh *m;
+struct behavior *b;
+char *elefilename;
+int argc;
+char **argv;
+#endif /* not ANSI_DECLARATORS */
+
+#endif /* not TRILIBRARY */
+
+{
+#ifdef TRILIBRARY
+  int *tlist;
+  REAL *talist;
+  int vertexindex;
+  int attribindex;
+#else /* not TRILIBRARY */
+  FILE *outfile;
+#endif /* not TRILIBRARY */
+  struct otri triangleloop;
+  vertex p1, p2, p3;
+  vertex mid1, mid2, mid3;
+  long elementnumber;
+  int i;
+
+#ifdef TRILIBRARY
+  if (!b->quiet) {
+    printf("Writing triangles.\n");
+  }
+  /* Allocate memory for output triangles if necessary. */
+  if (*trianglelist == (int *) NULL) {
+    *trianglelist = (int *) trimalloc((int) (m->triangles.items *
+                                             ((b->order + 1) * (b->order + 2) /
+                                              2) * sizeof(int)));
+  }
+  /* Allocate memory for output triangle attributes if necessary. */
+  if ((m->eextras > 0) && (*triangleattriblist == (REAL *) NULL)) {
+    *triangleattriblist = (REAL *) trimalloc((int) (m->triangles.items *
+                                                    m->eextras *
+                                                    sizeof(REAL)));
+  }
+  tlist = *trianglelist;
+  talist = *triangleattriblist;
+  vertexindex = 0;
+  attribindex = 0;
+#else /* not TRILIBRARY */
+  if (!b->quiet) {
+    printf("Writing %s.\n", elefilename);
+  }
+  outfile = fopen(elefilename, "w");
+  if (outfile == (FILE *) NULL) {
+    printf("  Error:  Cannot create file %s.\n", elefilename);
+    triexit(1);
+  }
+  /* Number of triangles, vertices per triangle, attributes per triangle. */
+  fprintf(outfile, "%ld  %d  %d\n", m->triangles.items,
+          (b->order + 1) * (b->order + 2) / 2, m->eextras);
+#endif /* not TRILIBRARY */
+
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  triangleloop.orient = 0;
+  elementnumber = b->firstnumber;
+  while (triangleloop.tri != (triangle *) NULL) {
+    org(triangleloop, p1);
+    dest(triangleloop, p2);
+    apex(triangleloop, p3);
+    if (b->order == 1) {
+#ifdef TRILIBRARY
+      tlist[vertexindex++] = vertexmark(p1);
+      tlist[vertexindex++] = vertexmark(p2);
+      tlist[vertexindex++] = vertexmark(p3);
+#else /* not TRILIBRARY */
+      /* Triangle number, indices for three vertices. */
+      fprintf(outfile, "%4ld    %4d  %4d  %4d", elementnumber,
+              vertexmark(p1), vertexmark(p2), vertexmark(p3));
+#endif /* not TRILIBRARY */
+    } else {
+      mid1 = (vertex) triangleloop.tri[m->highorderindex + 1];
+      mid2 = (vertex) triangleloop.tri[m->highorderindex + 2];
+      mid3 = (vertex) triangleloop.tri[m->highorderindex];
+#ifdef TRILIBRARY
+      tlist[vertexindex++] = vertexmark(p1);
+      tlist[vertexindex++] = vertexmark(p2);
+      tlist[vertexindex++] = vertexmark(p3);
+      tlist[vertexindex++] = vertexmark(mid1);
+      tlist[vertexindex++] = vertexmark(mid2);
+      tlist[vertexindex++] = vertexmark(mid3);
+#else /* not TRILIBRARY */
+      /* Triangle number, indices for six vertices. */
+      fprintf(outfile, "%4ld    %4d  %4d  %4d  %4d  %4d  %4d", elementnumber,
+              vertexmark(p1), vertexmark(p2), vertexmark(p3), vertexmark(mid1),
+              vertexmark(mid2), vertexmark(mid3));
+#endif /* not TRILIBRARY */
+    }
+
+#ifdef TRILIBRARY
+    for (i = 0; i < m->eextras; i++) {
+      talist[attribindex++] = elemattribute(triangleloop, i);
+    }
+#else /* not TRILIBRARY */
+    for (i = 0; i < m->eextras; i++) {
+      fprintf(outfile, "  %.17g", elemattribute(triangleloop, i));
+    }
+    fprintf(outfile, "\n");
+#endif /* not TRILIBRARY */
+
+    triangleloop.tri = triangletraverse(m);
+    elementnumber++;
+  }
+
+#ifndef TRILIBRARY
+  finishfile(outfile, argc, argv);
+#endif /* not TRILIBRARY */
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  writepoly()   Write the segments and holes to a .poly file.              */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void writepoly(struct mesh *m, struct behavior *b,
+               int **segmentlist, int **segmentmarkerlist)
+#else /* not ANSI_DECLARATORS */
+void writepoly(m, b, segmentlist, segmentmarkerlist)
+struct mesh *m;
+struct behavior *b;
+int **segmentlist;
+int **segmentmarkerlist;
+#endif /* not ANSI_DECLARATORS */
+
+#else /* not TRILIBRARY */
+
+#ifdef ANSI_DECLARATORS
+void writepoly(struct mesh *m, struct behavior *b, char *polyfilename,
+               REAL *holelist, int holes, REAL *regionlist, int regions,
+               int argc, char **argv)
+#else /* not ANSI_DECLARATORS */
+void writepoly(m, b, polyfilename, holelist, holes, regionlist, regions,
+               argc, argv)
+struct mesh *m;
+struct behavior *b;
+char *polyfilename;
+REAL *holelist;
+int holes;
+REAL *regionlist;
+int regions;
+int argc;
+char **argv;
+#endif /* not ANSI_DECLARATORS */
+
+#endif /* not TRILIBRARY */
+
+{
+#ifdef TRILIBRARY
+  int *slist;
+  int *smlist;
+  int index;
+#else /* not TRILIBRARY */
+  FILE *outfile;
+  long holenumber, regionnumber;
+#endif /* not TRILIBRARY */
+  struct osub subsegloop;
+  vertex endpoint1, endpoint2;
+  long subsegnumber;
+
+#ifdef TRILIBRARY
+  if (!b->quiet) {
+    printf("Writing segments.\n");
+  }
+  /* Allocate memory for output segments if necessary. */
+  if (*segmentlist == (int *) NULL) {
+    *segmentlist = (int *) trimalloc((int) (m->subsegs.items * 2 *
+                                            sizeof(int)));
+  }
+  /* Allocate memory for output segment markers if necessary. */
+  if (!b->nobound && (*segmentmarkerlist == (int *) NULL)) {
+    *segmentmarkerlist = (int *) trimalloc((int) (m->subsegs.items *
+                                                  sizeof(int)));
+  }
+  slist = *segmentlist;
+  smlist = *segmentmarkerlist;
+  index = 0;
+#else /* not TRILIBRARY */
+  if (!b->quiet) {
+    printf("Writing %s.\n", polyfilename);
+  }
+  outfile = fopen(polyfilename, "w");
+  if (outfile == (FILE *) NULL) {
+    printf("  Error:  Cannot create file %s.\n", polyfilename);
+    triexit(1);
+  }
+  /* The zero indicates that the vertices are in a separate .node file. */
+  /*   Followed by number of dimensions, number of vertex attributes,   */
+  /*   and number of boundary markers (zero or one).                    */
+  fprintf(outfile, "%d  %d  %d  %d\n", 0, m->mesh_dim, m->nextras,
+          1 - b->nobound);
+  /* Number of segments, number of boundary markers (zero or one). */
+  fprintf(outfile, "%ld  %d\n", m->subsegs.items, 1 - b->nobound);
+#endif /* not TRILIBRARY */
+
+  traversalinit(&m->subsegs);
+  subsegloop.ss = subsegtraverse(m);
+  subsegloop.ssorient = 0;
+  subsegnumber = b->firstnumber;
+  while (subsegloop.ss != (subseg *) NULL) {
+    sorg(subsegloop, endpoint1);
+    sdest(subsegloop, endpoint2);
+#ifdef TRILIBRARY
+    /* Copy indices of the segment's two endpoints. */
+    slist[index++] = vertexmark(endpoint1);
+    slist[index++] = vertexmark(endpoint2);
+    if (!b->nobound) {
+      /* Copy the boundary marker. */
+      smlist[subsegnumber - b->firstnumber] = mark(subsegloop);
+    }
+#else /* not TRILIBRARY */
+    /* Segment number, indices of its two endpoints, and possibly a marker. */
+    if (b->nobound) {
+      fprintf(outfile, "%4ld    %4d  %4d\n", subsegnumber,
+              vertexmark(endpoint1), vertexmark(endpoint2));
+    } else {
+      fprintf(outfile, "%4ld    %4d  %4d    %4d\n", subsegnumber,
+              vertexmark(endpoint1), vertexmark(endpoint2), mark(subsegloop));
+    }
+#endif /* not TRILIBRARY */
+
+    subsegloop.ss = subsegtraverse(m);
+    subsegnumber++;
+  }
+
+#ifndef TRILIBRARY
+#ifndef CDT_ONLY
+  fprintf(outfile, "%d\n", holes);
+  if (holes > 0) {
+    for (holenumber = 0; holenumber < holes; holenumber++) {
+      /* Hole number, x and y coordinates. */
+      fprintf(outfile, "%4ld   %.17g  %.17g\n", b->firstnumber + holenumber,
+              holelist[2 * holenumber], holelist[2 * holenumber + 1]);
+    }
+  }
+  if (regions > 0) {
+    fprintf(outfile, "%d\n", regions);
+    for (regionnumber = 0; regionnumber < regions; regionnumber++) {
+      /* Region number, x and y coordinates, attribute, maximum area. */
+      fprintf(outfile, "%4ld   %.17g  %.17g  %.17g  %.17g\n",
+              b->firstnumber + regionnumber,
+              regionlist[4 * regionnumber], regionlist[4 * regionnumber + 1],
+              regionlist[4 * regionnumber + 2],
+              regionlist[4 * regionnumber + 3]);
+    }
+  }
+#endif /* not CDT_ONLY */
+
+  finishfile(outfile, argc, argv);
+#endif /* not TRILIBRARY */
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  writeedges()   Write the edges to an .edge file.                         */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void writeedges(struct mesh *m, struct behavior *b,
+                int **edgelist, int **edgemarkerlist)
+#else /* not ANSI_DECLARATORS */
+void writeedges(m, b, edgelist, edgemarkerlist)
+struct mesh *m;
+struct behavior *b;
+int **edgelist;
+int **edgemarkerlist;
+#endif /* not ANSI_DECLARATORS */
+
+#else /* not TRILIBRARY */
+
+#ifdef ANSI_DECLARATORS
+void writeedges(struct mesh *m, struct behavior *b, char *edgefilename,
+                int argc, char **argv)
+#else /* not ANSI_DECLARATORS */
+void writeedges(m, b, edgefilename, argc, argv)
+struct mesh *m;
+struct behavior *b;
+char *edgefilename;
+int argc;
+char **argv;
+#endif /* not ANSI_DECLARATORS */
+
+#endif /* not TRILIBRARY */
+
+{
+#ifdef TRILIBRARY
+  int *elist;
+  int *emlist;
+  int index;
+#else /* not TRILIBRARY */
+  FILE *outfile;
+#endif /* not TRILIBRARY */
+  struct otri triangleloop, trisym;
+  struct osub checkmark;
+  vertex p1, p2;
+  long edgenumber;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+  subseg sptr;                      /* Temporary variable used by tspivot(). */
+
+#ifdef TRILIBRARY
+  if (!b->quiet) {
+    printf("Writing edges.\n");
+  }
+  /* Allocate memory for edges if necessary. */
+  if (*edgelist == (int *) NULL) {
+    *edgelist = (int *) trimalloc((int) (m->edges * 2 * sizeof(int)));
+  }
+  /* Allocate memory for edge markers if necessary. */
+  if (!b->nobound && (*edgemarkerlist == (int *) NULL)) {
+    *edgemarkerlist = (int *) trimalloc((int) (m->edges * sizeof(int)));
+  }
+  elist = *edgelist;
+  emlist = *edgemarkerlist;
+  index = 0;
+#else /* not TRILIBRARY */
+  if (!b->quiet) {
+    printf("Writing %s.\n", edgefilename);
+  }
+  outfile = fopen(edgefilename, "w");
+  if (outfile == (FILE *) NULL) {
+    printf("  Error:  Cannot create file %s.\n", edgefilename);
+    triexit(1);
+  }
+  /* Number of edges, number of boundary markers (zero or one). */
+  fprintf(outfile, "%ld  %d\n", m->edges, 1 - b->nobound);
+#endif /* not TRILIBRARY */
+
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  edgenumber = b->firstnumber;
+  /* To loop over the set of edges, loop over all triangles, and look at   */
+  /*   the three edges of each triangle.  If there isn't another triangle  */
+  /*   adjacent to the edge, operate on the edge.  If there is another     */
+  /*   adjacent triangle, operate on the edge only if the current triangle */
+  /*   has a smaller pointer than its neighbor.  This way, each edge is    */
+  /*   considered only once.                                               */
+  while (triangleloop.tri != (triangle *) NULL) {
+    for (triangleloop.orient = 0; triangleloop.orient < 3;
+         triangleloop.orient++) {
+      sym(triangleloop, trisym);
+      if ((triangleloop.tri < trisym.tri) || (trisym.tri == m->dummytri)) {
+        org(triangleloop, p1);
+        dest(triangleloop, p2);
+#ifdef TRILIBRARY
+        elist[index++] = vertexmark(p1);
+        elist[index++] = vertexmark(p2);
+#endif /* TRILIBRARY */
+        if (b->nobound) {
+#ifndef TRILIBRARY
+          /* Edge number, indices of two endpoints. */
+          fprintf(outfile, "%4ld   %d  %d\n", edgenumber,
+                  vertexmark(p1), vertexmark(p2));
+#endif /* not TRILIBRARY */
+        } else {
+          /* Edge number, indices of two endpoints, and a boundary marker. */
+          /*   If there's no subsegment, the boundary marker is zero.      */
+          if (b->usesegments) {
+            tspivot(triangleloop, checkmark);
+            if (checkmark.ss == m->dummysub) {
+#ifdef TRILIBRARY
+              emlist[edgenumber - b->firstnumber] = 0;
+#else /* not TRILIBRARY */
+              fprintf(outfile, "%4ld   %d  %d  %d\n", edgenumber,
+                      vertexmark(p1), vertexmark(p2), 0);
+#endif /* not TRILIBRARY */
+            } else {
+#ifdef TRILIBRARY
+              emlist[edgenumber - b->firstnumber] = mark(checkmark);
+#else /* not TRILIBRARY */
+              fprintf(outfile, "%4ld   %d  %d  %d\n", edgenumber,
+                      vertexmark(p1), vertexmark(p2), mark(checkmark));
+#endif /* not TRILIBRARY */
+            }
+          } else {
+#ifdef TRILIBRARY
+            emlist[edgenumber - b->firstnumber] = trisym.tri == m->dummytri;
+#else /* not TRILIBRARY */
+            fprintf(outfile, "%4ld   %d  %d  %d\n", edgenumber,
+                    vertexmark(p1), vertexmark(p2), trisym.tri == m->dummytri);
+#endif /* not TRILIBRARY */
+          }
+        }
+        edgenumber++;
+      }
+    }
+    triangleloop.tri = triangletraverse(m);
+  }
+
+#ifndef TRILIBRARY
+  finishfile(outfile, argc, argv);
+#endif /* not TRILIBRARY */
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  writevoronoi()   Write the Voronoi diagram to a .v.node and .v.edge      */
+/*                   file.                                                   */
+/*                                                                           */
+/*  The Voronoi diagram is the geometric dual of the Delaunay triangulation. */
+/*  Hence, the Voronoi vertices are listed by traversing the Delaunay        */
+/*  triangles, and the Voronoi edges are listed by traversing the Delaunay   */
+/*  edges.                                                                   */
+/*                                                                           */
+/*  WARNING:  In order to assign numbers to the Voronoi vertices, this       */
+/*  procedure messes up the subsegments or the extra nodes of every          */
+/*  element.  Hence, you should call this procedure last.                    */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void writevoronoi(struct mesh *m, struct behavior *b, REAL **vpointlist,
+                  REAL **vpointattriblist, int **vpointmarkerlist,
+                  int **vedgelist, int **vedgemarkerlist, REAL **vnormlist)
+#else /* not ANSI_DECLARATORS */
+void writevoronoi(m, b, vpointlist, vpointattriblist, vpointmarkerlist,
+                  vedgelist, vedgemarkerlist, vnormlist)
+struct mesh *m;
+struct behavior *b;
+REAL **vpointlist;
+REAL **vpointattriblist;
+int **vpointmarkerlist;
+int **vedgelist;
+int **vedgemarkerlist;
+REAL **vnormlist;
+#endif /* not ANSI_DECLARATORS */
+
+#else /* not TRILIBRARY */
+
+#ifdef ANSI_DECLARATORS
+void writevoronoi(struct mesh *m, struct behavior *b, char *vnodefilename,
+                  char *vedgefilename, int argc, char **argv)
+#else /* not ANSI_DECLARATORS */
+void writevoronoi(m, b, vnodefilename, vedgefilename, argc, argv)
+struct mesh *m;
+struct behavior *b;
+char *vnodefilename;
+char *vedgefilename;
+int argc;
+char **argv;
+#endif /* not ANSI_DECLARATORS */
+
+#endif /* not TRILIBRARY */
+
+{
+#ifdef TRILIBRARY
+  REAL *plist;
+  REAL *palist;
+  int *elist;
+  REAL *normlist;
+  int coordindex;
+  int attribindex;
+#else /* not TRILIBRARY */
+  FILE *outfile;
+#endif /* not TRILIBRARY */
+  struct otri triangleloop, trisym;
+  vertex torg, tdest, tapex;
+  REAL circumcenter[2];
+  REAL xi, eta;
+  long vnodenumber, vedgenumber;
+  int p1, p2;
+  int i;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+
+#ifdef TRILIBRARY
+  if (!b->quiet) {
+    printf("Writing Voronoi vertices.\n");
+  }
+  /* Allocate memory for Voronoi vertices if necessary. */
+  if (*vpointlist == (REAL *) NULL) {
+    *vpointlist = (REAL *) trimalloc((int) (m->triangles.items * 2 *
+                                            sizeof(REAL)));
+  }
+  /* Allocate memory for Voronoi vertex attributes if necessary. */
+  if (*vpointattriblist == (REAL *) NULL) {
+    *vpointattriblist = (REAL *) trimalloc((int) (m->triangles.items *
+                                                  m->nextras * sizeof(REAL)));
+  }
+  *vpointmarkerlist = (int *) NULL;
+  plist = *vpointlist;
+  palist = *vpointattriblist;
+  coordindex = 0;
+  attribindex = 0;
+#else /* not TRILIBRARY */
+  if (!b->quiet) {
+    printf("Writing %s.\n", vnodefilename);
+  }
+  outfile = fopen(vnodefilename, "w");
+  if (outfile == (FILE *) NULL) {
+    printf("  Error:  Cannot create file %s.\n", vnodefilename);
+    triexit(1);
+  }
+  /* Number of triangles, two dimensions, number of vertex attributes, */
+  /*   no markers.                                                     */
+  fprintf(outfile, "%ld  %d  %d  %d\n", m->triangles.items, 2, m->nextras, 0);
+#endif /* not TRILIBRARY */
+
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  triangleloop.orient = 0;
+  vnodenumber = b->firstnumber;
+  while (triangleloop.tri != (triangle *) NULL) {
+    org(triangleloop, torg);
+    dest(triangleloop, tdest);
+    apex(triangleloop, tapex);
+    findcircumcenter(m, b, torg, tdest, tapex, circumcenter, &xi, &eta, 0);
+#ifdef TRILIBRARY
+    /* X and y coordinates. */
+    plist[coordindex++] = circumcenter[0];
+    plist[coordindex++] = circumcenter[1];
+    for (i = 2; i < 2 + m->nextras; i++) {
+      /* Interpolate the vertex attributes at the circumcenter. */
+      palist[attribindex++] = torg[i] + xi * (tdest[i] - torg[i])
+                                     + eta * (tapex[i] - torg[i]);
+    }
+#else /* not TRILIBRARY */
+    /* Voronoi vertex number, x and y coordinates. */
+    fprintf(outfile, "%4ld    %.17g  %.17g", vnodenumber, circumcenter[0],
+            circumcenter[1]);
+    for (i = 2; i < 2 + m->nextras; i++) {
+      /* Interpolate the vertex attributes at the circumcenter. */
+      fprintf(outfile, "  %.17g", torg[i] + xi * (tdest[i] - torg[i])
+                                         + eta * (tapex[i] - torg[i]));
+    }
+    fprintf(outfile, "\n");
+#endif /* not TRILIBRARY */
+
+    * (int *) (triangleloop.tri + 6) = (int) vnodenumber;
+    triangleloop.tri = triangletraverse(m);
+    vnodenumber++;
+  }
+
+#ifndef TRILIBRARY
+  finishfile(outfile, argc, argv);
+#endif /* not TRILIBRARY */
+
+#ifdef TRILIBRARY
+  if (!b->quiet) {
+    printf("Writing Voronoi edges.\n");
+  }
+  /* Allocate memory for output Voronoi edges if necessary. */
+  if (*vedgelist == (int *) NULL) {
+    *vedgelist = (int *) trimalloc((int) (m->edges * 2 * sizeof(int)));
+  }
+  *vedgemarkerlist = (int *) NULL;
+  /* Allocate memory for output Voronoi norms if necessary. */
+  if (*vnormlist == (REAL *) NULL) {
+    *vnormlist = (REAL *) trimalloc((int) (m->edges * 2 * sizeof(REAL)));
+  }
+  elist = *vedgelist;
+  normlist = *vnormlist;
+  coordindex = 0;
+#else /* not TRILIBRARY */
+  if (!b->quiet) {
+    printf("Writing %s.\n", vedgefilename);
+  }
+  outfile = fopen(vedgefilename, "w");
+  if (outfile == (FILE *) NULL) {
+    printf("  Error:  Cannot create file %s.\n", vedgefilename);
+    triexit(1);
+  }
+  /* Number of edges, zero boundary markers. */
+  fprintf(outfile, "%ld  %d\n", m->edges, 0);
+#endif /* not TRILIBRARY */
+
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  vedgenumber = b->firstnumber;
+  /* To loop over the set of edges, loop over all triangles, and look at   */
+  /*   the three edges of each triangle.  If there isn't another triangle  */
+  /*   adjacent to the edge, operate on the edge.  If there is another     */
+  /*   adjacent triangle, operate on the edge only if the current triangle */
+  /*   has a smaller pointer than its neighbor.  This way, each edge is    */
+  /*   considered only once.                                               */
+  while (triangleloop.tri != (triangle *) NULL) {
+    for (triangleloop.orient = 0; triangleloop.orient < 3;
+         triangleloop.orient++) {
+      sym(triangleloop, trisym);
+      if ((triangleloop.tri < trisym.tri) || (trisym.tri == m->dummytri)) {
+        /* Find the number of this triangle (and Voronoi vertex). */
+        p1 = * (int *) (triangleloop.tri + 6);
+        if (trisym.tri == m->dummytri) {
+          org(triangleloop, torg);
+          dest(triangleloop, tdest);
+#ifdef TRILIBRARY
+          /* Copy an infinite ray.  Index of one endpoint, and -1. */
+          elist[coordindex] = p1;
+          normlist[coordindex++] = tdest[1] - torg[1];
+          elist[coordindex] = -1;
+          normlist[coordindex++] = torg[0] - tdest[0];
+#else /* not TRILIBRARY */
+          /* Write an infinite ray.  Edge number, index of one endpoint, -1, */
+          /*   and x and y coordinates of a vector representing the          */
+          /*   direction of the ray.                                         */
+          fprintf(outfile, "%4ld   %d  %d   %.17g  %.17g\n", vedgenumber,
+                  p1, -1, tdest[1] - torg[1], torg[0] - tdest[0]);
+#endif /* not TRILIBRARY */
+        } else {
+          /* Find the number of the adjacent triangle (and Voronoi vertex). */
+          p2 = * (int *) (trisym.tri + 6);
+          /* Finite edge.  Write indices of two endpoints. */
+#ifdef TRILIBRARY
+          elist[coordindex] = p1;
+          normlist[coordindex++] = 0.0;
+          elist[coordindex] = p2;
+          normlist[coordindex++] = 0.0;
+#else /* not TRILIBRARY */
+          fprintf(outfile, "%4ld   %d  %d\n", vedgenumber, p1, p2);
+#endif /* not TRILIBRARY */
+        }
+        vedgenumber++;
+      }
+    }
+    triangleloop.tri = triangletraverse(m);
+  }
+
+#ifndef TRILIBRARY
+  finishfile(outfile, argc, argv);
+#endif /* not TRILIBRARY */
+}
+
+#ifdef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void writeneighbors(struct mesh *m, struct behavior *b, int **neighborlist)
+#else /* not ANSI_DECLARATORS */
+void writeneighbors(m, b, neighborlist)
+struct mesh *m;
+struct behavior *b;
+int **neighborlist;
+#endif /* not ANSI_DECLARATORS */
+
+#else /* not TRILIBRARY */
+
+#ifdef ANSI_DECLARATORS
+void writeneighbors(struct mesh *m, struct behavior *b, char *neighborfilename,
+                    int argc, char **argv)
+#else /* not ANSI_DECLARATORS */
+void writeneighbors(m, b, neighborfilename, argc, argv)
+struct mesh *m;
+struct behavior *b;
+char *neighborfilename;
+int argc;
+char **argv;
+#endif /* not ANSI_DECLARATORS */
+
+#endif /* not TRILIBRARY */
+
+{
+#ifdef TRILIBRARY
+  int *nlist;
+  int index;
+#else /* not TRILIBRARY */
+  FILE *outfile;
+#endif /* not TRILIBRARY */
+  struct otri triangleloop, trisym;
+  long elementnumber;
+  int neighbor1, neighbor2, neighbor3;
+  triangle ptr;                         /* Temporary variable used by sym(). */
+
+#ifdef TRILIBRARY
+  if (!b->quiet) {
+    printf("Writing neighbors.\n");
+  }
+  /* Allocate memory for neighbors if necessary. */
+  if (*neighborlist == (int *) NULL) {
+    *neighborlist = (int *) trimalloc((int) (m->triangles.items * 3 *
+                                             sizeof(int)));
+  }
+  nlist = *neighborlist;
+  index = 0;
+#else /* not TRILIBRARY */
+  if (!b->quiet) {
+    printf("Writing %s.\n", neighborfilename);
+  }
+  outfile = fopen(neighborfilename, "w");
+  if (outfile == (FILE *) NULL) {
+    printf("  Error:  Cannot create file %s.\n", neighborfilename);
+    triexit(1);
+  }
+  /* Number of triangles, three neighbors per triangle. */
+  fprintf(outfile, "%ld  %d\n", m->triangles.items, 3);
+#endif /* not TRILIBRARY */
+
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  triangleloop.orient = 0;
+  elementnumber = b->firstnumber;
+  while (triangleloop.tri != (triangle *) NULL) {
+    * (int *) (triangleloop.tri + 6) = (int) elementnumber;
+    triangleloop.tri = triangletraverse(m);
+    elementnumber++;
+  }
+  * (int *) (m->dummytri + 6) = -1;
+
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  elementnumber = b->firstnumber;
+  while (triangleloop.tri != (triangle *) NULL) {
+    triangleloop.orient = 1;
+    sym(triangleloop, trisym);
+    neighbor1 = * (int *) (trisym.tri + 6);
+    triangleloop.orient = 2;
+    sym(triangleloop, trisym);
+    neighbor2 = * (int *) (trisym.tri + 6);
+    triangleloop.orient = 0;
+    sym(triangleloop, trisym);
+    neighbor3 = * (int *) (trisym.tri + 6);
+#ifdef TRILIBRARY
+    nlist[index++] = neighbor1;
+    nlist[index++] = neighbor2;
+    nlist[index++] = neighbor3;
+#else /* not TRILIBRARY */
+    /* Triangle number, neighboring triangle numbers. */
+    fprintf(outfile, "%4ld    %d  %d  %d\n", elementnumber,
+            neighbor1, neighbor2, neighbor3);
+#endif /* not TRILIBRARY */
+
+    triangleloop.tri = triangletraverse(m);
+    elementnumber++;
+  }
+
+#ifndef TRILIBRARY
+  finishfile(outfile, argc, argv);
+#endif /* not TRILIBRARY */
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  writeoff()   Write the triangulation to an .off file.                    */
+/*                                                                           */
+/*  OFF stands for the Object File Format, a format used by the Geometry     */
+/*  Center's Geomview package.                                               */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifndef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void writeoff(struct mesh *m, struct behavior *b, char *offfilename,
+              int argc, char **argv)
+#else /* not ANSI_DECLARATORS */
+void writeoff(m, b, offfilename, argc, argv)
+struct mesh *m;
+struct behavior *b;
+char *offfilename;
+int argc;
+char **argv;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  FILE *outfile;
+  struct otri triangleloop;
+  vertex vertexloop;
+  vertex p1, p2, p3;
+  long outvertices;
+
+  if (!b->quiet) {
+    printf("Writing %s.\n", offfilename);
+  }
+
+  if (b->jettison) {
+    outvertices = m->vertices.items - m->undeads;
+  } else {
+    outvertices = m->vertices.items;
+  }
+
+  outfile = fopen(offfilename, "w");
+  if (outfile == (FILE *) NULL) {
+    printf("  Error:  Cannot create file %s.\n", offfilename);
+    triexit(1);
+  }
+  /* Number of vertices, triangles, and edges. */
+  fprintf(outfile, "OFF\n%ld  %ld  %ld\n", outvertices, m->triangles.items,
+          m->edges);
+
+  /* Write the vertices. */
+  traversalinit(&m->vertices);
+  vertexloop = vertextraverse(m);
+  while (vertexloop != (vertex) NULL) {
+    if (!b->jettison || (vertextype(vertexloop) != UNDEADVERTEX)) {
+      /* The "0.0" is here because the OFF format uses 3D coordinates. */
+      fprintf(outfile, " %.17g  %.17g  %.17g\n", vertexloop[0], vertexloop[1],
+              0.0);
+    }
+    vertexloop = vertextraverse(m);
+  }
+
+  /* Write the triangles. */
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  triangleloop.orient = 0;
+  while (triangleloop.tri != (triangle *) NULL) {
+    org(triangleloop, p1);
+    dest(triangleloop, p2);
+    apex(triangleloop, p3);
+    /* The "3" means a three-vertex polygon. */
+    fprintf(outfile, " 3   %4d  %4d  %4d\n", vertexmark(p1) - b->firstnumber,
+            vertexmark(p2) - b->firstnumber, vertexmark(p3) - b->firstnumber);
+    triangleloop.tri = triangletraverse(m);
+  }
+  finishfile(outfile, argc, argv);
+}
+
+#endif /* not TRILIBRARY */
+
+/**                                                                         **/
+/**                                                                         **/
+/********* File I/O routines end here                                *********/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  quality_statistics()   Print statistics about the quality of the mesh.   */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void quality_statistics(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void quality_statistics(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  struct otri triangleloop;
+  vertex p[3];
+  REAL cossquaretable[8];
+  REAL ratiotable[16];
+  REAL dx[3], dy[3];
+  REAL edgelength[3];
+  REAL dotproduct;
+  REAL cossquare;
+  REAL triarea;
+  REAL shortest, longest;
+  REAL trilongest2;
+  REAL smallestarea, biggestarea;
+  REAL triminaltitude2;
+  REAL minaltitude;
+  REAL triaspect2;
+  REAL worstaspect;
+  REAL smallestangle, biggestangle;
+  REAL radconst, degconst;
+  int angletable[18];
+  int aspecttable[16];
+  int aspectindex;
+  int tendegree;
+  int acutebiggest;
+  int i, ii, j, k;
+
+  printf("Mesh quality statistics:\n\n");
+  radconst = PI / 18.0;
+  degconst = 180.0 / PI;
+  for (i = 0; i < 8; i++) {
+    cossquaretable[i] = cos(radconst * (REAL) (i + 1));
+    cossquaretable[i] = cossquaretable[i] * cossquaretable[i];
+  }
+  for (i = 0; i < 18; i++) {
+    angletable[i] = 0;
+  }
+
+  ratiotable[0]  =      1.5;      ratiotable[1]  =     2.0;
+  ratiotable[2]  =      2.5;      ratiotable[3]  =     3.0;
+  ratiotable[4]  =      4.0;      ratiotable[5]  =     6.0;
+  ratiotable[6]  =     10.0;      ratiotable[7]  =    15.0;
+  ratiotable[8]  =     25.0;      ratiotable[9]  =    50.0;
+  ratiotable[10] =    100.0;      ratiotable[11] =   300.0;
+  ratiotable[12] =   1000.0;      ratiotable[13] = 10000.0;
+  ratiotable[14] = 100000.0;      ratiotable[15] =     0.0;
+  for (i = 0; i < 16; i++) {
+    aspecttable[i] = 0;
+  }
+
+  worstaspect = 0.0;
+  minaltitude = m->xmax - m->xmin + m->ymax - m->ymin;
+  minaltitude = minaltitude * minaltitude;
+  shortest = minaltitude;
+  longest = 0.0;
+  smallestarea = minaltitude;
+  biggestarea = 0.0;
+  worstaspect = 0.0;
+  smallestangle = 0.0;
+  biggestangle = 2.0;
+  acutebiggest = 1;
+
+  traversalinit(&m->triangles);
+  triangleloop.tri = triangletraverse(m);
+  triangleloop.orient = 0;
+  while (triangleloop.tri != (triangle *) NULL) {
+    org(triangleloop, p[0]);
+    dest(triangleloop, p[1]);
+    apex(triangleloop, p[2]);
+    trilongest2 = 0.0;
+
+    for (i = 0; i < 3; i++) {
+      j = plus1mod3[i];
+      k = minus1mod3[i];
+      dx[i] = p[j][0] - p[k][0];
+      dy[i] = p[j][1] - p[k][1];
+      edgelength[i] = dx[i] * dx[i] + dy[i] * dy[i];
+      if (edgelength[i] > trilongest2) {
+        trilongest2 = edgelength[i];
+      }
+      if (edgelength[i] > longest) {
+        longest = edgelength[i];
+      }
+      if (edgelength[i] < shortest) {
+        shortest = edgelength[i];
+      }
+    }
+
+    triarea = counterclockwise(m, b, p[0], p[1], p[2]);
+    if (triarea < smallestarea) {
+      smallestarea = triarea;
+    }
+    if (triarea > biggestarea) {
+      biggestarea = triarea;
+    }
+    triminaltitude2 = triarea * triarea / trilongest2;
+    if (triminaltitude2 < minaltitude) {
+      minaltitude = triminaltitude2;
+    }
+    triaspect2 = trilongest2 / triminaltitude2;
+    if (triaspect2 > worstaspect) {
+      worstaspect = triaspect2;
+    }
+    aspectindex = 0;
+    while ((triaspect2 > ratiotable[aspectindex] * ratiotable[aspectindex])
+           && (aspectindex < 15)) {
+      aspectindex++;
+    }
+    aspecttable[aspectindex]++;
+
+    for (i = 0; i < 3; i++) {
+      j = plus1mod3[i];
+      k = minus1mod3[i];
+      dotproduct = dx[j] * dx[k] + dy[j] * dy[k];
+      cossquare = dotproduct * dotproduct / (edgelength[j] * edgelength[k]);
+      tendegree = 8;
+      for (ii = 7; ii >= 0; ii--) {
+        if (cossquare > cossquaretable[ii]) {
+          tendegree = ii;
+        }
+      }
+      if (dotproduct <= 0.0) {
+        angletable[tendegree]++;
+        if (cossquare > smallestangle) {
+          smallestangle = cossquare;
+        }
+        if (acutebiggest && (cossquare < biggestangle)) {
+          biggestangle = cossquare;
+        }
+      } else {
+        angletable[17 - tendegree]++;
+        if (acutebiggest || (cossquare > biggestangle)) {
+          biggestangle = cossquare;
+          acutebiggest = 0;
+        }
+      }
+    }
+    triangleloop.tri = triangletraverse(m);
+  }
+
+  shortest = sqrt(shortest);
+  longest = sqrt(longest);
+  minaltitude = sqrt(minaltitude);
+  worstaspect = sqrt(worstaspect);
+  smallestarea *= 0.5;
+  biggestarea *= 0.5;
+  if (smallestangle >= 1.0) {
+    smallestangle = 0.0;
+  } else {
+    smallestangle = degconst * acos(sqrt(smallestangle));
+  }
+  if (biggestangle >= 1.0) {
+    biggestangle = 180.0;
+  } else {
+    if (acutebiggest) {
+      biggestangle = degconst * acos(sqrt(biggestangle));
+    } else {
+      biggestangle = 180.0 - degconst * acos(sqrt(biggestangle));
+    }
+  }
+
+  printf("  Smallest area: %16.5g   |  Largest area: %16.5g\n",
+         smallestarea, biggestarea);
+  printf("  Shortest edge: %16.5g   |  Longest edge: %16.5g\n",
+         shortest, longest);
+  printf("  Shortest altitude: %12.5g   |  Largest aspect ratio: %8.5g\n\n",
+         minaltitude, worstaspect);
+
+  printf("  Triangle aspect ratio histogram:\n");
+  printf("  1.1547 - %-6.6g    :  %8d    | %6.6g - %-6.6g     :  %8d\n",
+         ratiotable[0], aspecttable[0], ratiotable[7], ratiotable[8],
+         aspecttable[8]);
+  for (i = 1; i < 7; i++) {
+    printf("  %6.6g - %-6.6g    :  %8d    | %6.6g - %-6.6g     :  %8d\n",
+           ratiotable[i - 1], ratiotable[i], aspecttable[i],
+           ratiotable[i + 7], ratiotable[i + 8], aspecttable[i + 8]);
+  }
+  printf("  %6.6g - %-6.6g    :  %8d    | %6.6g -            :  %8d\n",
+         ratiotable[6], ratiotable[7], aspecttable[7], ratiotable[14],
+         aspecttable[15]);
+  printf("  (Aspect ratio is longest edge divided by shortest altitude)\n\n");
+
+  printf("  Smallest angle: %15.5g   |  Largest angle: %15.5g\n\n",
+         smallestangle, biggestangle);
+
+  printf("  Angle histogram:\n");
+  for (i = 0; i < 9; i++) {
+    printf("    %3d - %3d degrees:  %8d    |    %3d - %3d degrees:  %8d\n",
+           i * 10, i * 10 + 10, angletable[i],
+           i * 10 + 90, i * 10 + 100, angletable[i + 9]);
+  }
+  printf("\n");
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  statistics()   Print all sorts of cool facts.                            */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef ANSI_DECLARATORS
+void statistics(struct mesh *m, struct behavior *b)
+#else /* not ANSI_DECLARATORS */
+void statistics(m, b)
+struct mesh *m;
+struct behavior *b;
+#endif /* not ANSI_DECLARATORS */
+
+{
+  printf("\nStatistics:\n\n");
+  printf("  Input vertices: %d\n", m->invertices);
+  if (b->refine) {
+    printf("  Input triangles: %d\n", m->inelements);
+  }
+  if (b->poly) {
+    printf("  Input segments: %d\n", m->insegments);
+    if (!b->refine) {
+      printf("  Input holes: %d\n", m->holes);
+    }
+  }
+
+  printf("\n  Mesh vertices: %ld\n", m->vertices.items - m->undeads);
+  printf("  Mesh triangles: %ld\n", m->triangles.items);
+  printf("  Mesh edges: %ld\n", m->edges);
+  printf("  Mesh exterior boundary edges: %ld\n", m->hullsize);
+  if (b->poly || b->refine) {
+    printf("  Mesh interior boundary edges: %ld\n",
+           m->subsegs.items - m->hullsize);
+    printf("  Mesh subsegments (constrained edges): %ld\n",
+           m->subsegs.items);
+  }
+  printf("\n");
+
+  if (b->verbose) {
+    quality_statistics(m, b);
+    printf("Memory allocation statistics:\n\n");
+    printf("  Maximum number of vertices: %ld\n", m->vertices.maxitems);
+    printf("  Maximum number of triangles: %ld\n", m->triangles.maxitems);
+    if (m->subsegs.maxitems > 0) {
+      printf("  Maximum number of subsegments: %ld\n", m->subsegs.maxitems);
+    }
+    if (m->viri.maxitems > 0) {
+      printf("  Maximum number of viri: %ld\n", m->viri.maxitems);
+    }
+    if (m->badsubsegs.maxitems > 0) {
+      printf("  Maximum number of encroached subsegments: %ld\n",
+             m->badsubsegs.maxitems);
+    }
+    if (m->badtriangles.maxitems > 0) {
+      printf("  Maximum number of bad triangles: %ld\n",
+             m->badtriangles.maxitems);
+    }
+    if (m->flipstackers.maxitems > 0) {
+      printf("  Maximum number of stacked triangle flips: %ld\n",
+             m->flipstackers.maxitems);
+    }
+    if (m->splaynodes.maxitems > 0) {
+      printf("  Maximum number of splay tree nodes: %ld\n",
+             m->splaynodes.maxitems);
+    }
+    printf("  Approximate heap memory use (bytes): %ld\n\n",
+           m->vertices.maxitems * m->vertices.itembytes +
+           m->triangles.maxitems * m->triangles.itembytes +
+           m->subsegs.maxitems * m->subsegs.itembytes +
+           m->viri.maxitems * m->viri.itembytes +
+           m->badsubsegs.maxitems * m->badsubsegs.itembytes +
+           m->badtriangles.maxitems * m->badtriangles.itembytes +
+           m->flipstackers.maxitems * m->flipstackers.itembytes +
+           m->splaynodes.maxitems * m->splaynodes.itembytes);
+
+    printf("Algorithmic statistics:\n\n");
+    if (!b->weighted) {
+      printf("  Number of incircle tests: %ld\n", m->incirclecount);
+    } else {
+      printf("  Number of 3D orientation tests: %ld\n", m->orient3dcount);
+    }
+    printf("  Number of 2D orientation tests: %ld\n", m->counterclockcount);
+    if (m->hyperbolacount > 0) {
+      printf("  Number of right-of-hyperbola tests: %ld\n",
+             m->hyperbolacount);
+    }
+    if (m->circletopcount > 0) {
+      printf("  Number of circle top computations: %ld\n",
+             m->circletopcount);
+    }
+    if (m->circumcentercount > 0) {
+      printf("  Number of triangle circumcenter computations: %ld\n",
+             m->circumcentercount);
+    }
+    printf("\n");
+  }
+}
+
+/*****************************************************************************/
+/*                                                                           */
+/*  main() or triangulate()   Gosh, do everything.                           */
+/*                                                                           */
+/*  The sequence is roughly as follows.  Many of these steps can be skipped, */
+/*  depending on the command line switches.                                  */
+/*                                                                           */
+/*  - Initialize constants and parse the command line.                       */
+/*  - Read the vertices from a file and either                               */
+/*    - triangulate them (no -r), or                                         */
+/*    - read an old mesh from files and reconstruct it (-r).                 */
+/*  - Insert the PSLG segments (-p), and possibly segments on the convex     */
+/*      hull (-c).                                                           */
+/*  - Read the holes (-p), regional attributes (-pA), and regional area      */
+/*      constraints (-pa).  Carve the holes and concavities, and spread the  */
+/*      regional attributes and area constraints.                            */
+/*  - Enforce the constraints on minimum angle (-q) and maximum area (-a).   */
+/*      Also enforce the conforming Delaunay property (-q and -a).           */
+/*  - Compute the number of edges in the resulting mesh.                     */
+/*  - Promote the mesh's linear triangles to higher order elements (-o).     */
+/*  - Write the output files and print the statistics.                       */
+/*  - Check the consistency and Delaunay property of the mesh (-C).          */
+/*                                                                           */
+/*****************************************************************************/
+
+#ifdef TRILIBRARY
+
+#ifdef ANSI_DECLARATORS
+void triangulate(char *triswitches, struct triangulateio *in,
+                 struct triangulateio *out, struct triangulateio *vorout)
+#else /* not ANSI_DECLARATORS */
+void triangulate(triswitches, in, out, vorout)
+char *triswitches;
+struct triangulateio *in;
+struct triangulateio *out;
+struct triangulateio *vorout;
+#endif /* not ANSI_DECLARATORS */
+
+#else /* not TRILIBRARY */
+
+#ifdef ANSI_DECLARATORS
+int main(int argc, char **argv)
+#else /* not ANSI_DECLARATORS */
+int main(argc, argv)
+int argc;
+char **argv;
+#endif /* not ANSI_DECLARATORS */
+
+#endif /* not TRILIBRARY */
+
+{
+  struct mesh m;
+  struct behavior b;
+  REAL *holearray;                                        /* Array of holes. */
+  REAL *regionarray;   /* Array of regional attributes and area constraints. */
+#ifndef TRILIBRARY
+  FILE *polyfile;
+#endif /* not TRILIBRARY */
+#ifndef NO_TIMER
+  /* Variables for timing the performance of Triangle.  The types are */
+  /*   defined in sys/time.h.                                         */
+  struct timeval tv0, tv1, tv2, tv3, tv4, tv5, tv6;
+  struct timezone tz;
+#endif /* not NO_TIMER */
+
+#ifndef NO_TIMER
+  gettimeofday(&tv0, &tz);
+#endif /* not NO_TIMER */
+
+  triangleinit(&m);
+#ifdef TRILIBRARY
+  parsecommandline(1, &triswitches, &b);
+#else /* not TRILIBRARY */
+  parsecommandline(argc, argv, &b);
+#endif /* not TRILIBRARY */
+  m.steinerleft = b.steiner;
+
+#ifdef TRILIBRARY
+  transfernodes(&m, &b, in->pointlist, in->pointattributelist,
+                in->pointmarkerlist, in->numberofpoints,
+                in->numberofpointattributes);
+#else /* not TRILIBRARY */
+  readnodes(&m, &b, b.innodefilename, b.inpolyfilename, &polyfile);
+#endif /* not TRILIBRARY */
+
+#ifndef NO_TIMER
+  if (!b.quiet) {
+    gettimeofday(&tv1, &tz);
+  }
+#endif /* not NO_TIMER */
+
+#ifdef CDT_ONLY
+  m.hullsize = delaunay(&m, &b);                /* Triangulate the vertices. */
+#else /* not CDT_ONLY */
+  if (b.refine) {
+    /* Read and reconstruct a mesh. */
+#ifdef TRILIBRARY
+    m.hullsize = reconstruct(&m, &b, in->trianglelist,
+                             in->triangleattributelist, in->trianglearealist,
+                             in->numberoftriangles, in->numberofcorners,
+                             in->numberoftriangleattributes,
+                             in->segmentlist, in->segmentmarkerlist,
+                             in->numberofsegments);
+#else /* not TRILIBRARY */
+    m.hullsize = reconstruct(&m, &b, b.inelefilename, b.areafilename,
+                             b.inpolyfilename, polyfile);
+#endif /* not TRILIBRARY */
+  } else {
+    m.hullsize = delaunay(&m, &b);              /* Triangulate the vertices. */
+  }
+#endif /* not CDT_ONLY */
+
+#ifndef NO_TIMER
+  if (!b.quiet) {
+    gettimeofday(&tv2, &tz);
+    if (b.refine) {
+      printf("Mesh reconstruction");
+    } else {
+      printf("Delaunay");
+    }
+    printf(" milliseconds:  %ld\n", 1000l * (tv2.tv_sec - tv1.tv_sec) +
+           (tv2.tv_usec - tv1.tv_usec) / 1000l);
+  }
+#endif /* not NO_TIMER */
+
+  /* Ensure that no vertex can be mistaken for a triangular bounding */
+  /*   box vertex in insertvertex().                                 */
+  m.infvertex1 = (vertex) NULL;
+  m.infvertex2 = (vertex) NULL;
+  m.infvertex3 = (vertex) NULL;
+
+  if (b.usesegments) {
+    m.checksegments = 1;                /* Segments will be introduced next. */
+    if (!b.refine) {
+      /* Insert PSLG segments and/or convex hull segments. */
+#ifdef TRILIBRARY
+      formskeleton(&m, &b, in->segmentlist,
+                   in->segmentmarkerlist, in->numberofsegments);
+#else /* not TRILIBRARY */
+      formskeleton(&m, &b, polyfile, b.inpolyfilename);
+#endif /* not TRILIBRARY */
+    }
+  }
+
+#ifndef NO_TIMER
+  if (!b.quiet) {
+    gettimeofday(&tv3, &tz);
+    if (b.usesegments && !b.refine) {
+      printf("Segment milliseconds:  %ld\n",
+             1000l * (tv3.tv_sec - tv2.tv_sec) +
+             (tv3.tv_usec - tv2.tv_usec) / 1000l);
+    }
+  }
+#endif /* not NO_TIMER */
+
+  if (b.poly && (m.triangles.items > 0)) {
+#ifdef TRILIBRARY
+    holearray = in->holelist;
+    m.holes = in->numberofholes;
+    regionarray = in->regionlist;
+    m.regions = in->numberofregions;
+#else /* not TRILIBRARY */
+    readholes(&m, &b, polyfile, b.inpolyfilename, &holearray, &m.holes,
+              &regionarray, &m.regions);
+#endif /* not TRILIBRARY */
+    if (!b.refine) {
+      /* Carve out holes and concavities. */
+      carveholes(&m, &b, holearray, m.holes, regionarray, m.regions);
+    }
+  } else {
+    /* Without a PSLG, there can be no holes or regional attributes   */
+    /*   or area constraints.  The following are set to zero to avoid */
+    /*   an accidental free() later.                                  */
+    m.holes = 0;
+    m.regions = 0;
+  }
+
+#ifndef NO_TIMER
+  if (!b.quiet) {
+    gettimeofday(&tv4, &tz);
+    if (b.poly && !b.refine) {
+      printf("Hole milliseconds:  %ld\n", 1000l * (tv4.tv_sec - tv3.tv_sec) +
+             (tv4.tv_usec - tv3.tv_usec) / 1000l);
+    }
+  }
+#endif /* not NO_TIMER */
+
+#ifndef CDT_ONLY
+  if (b.quality && (m.triangles.items > 0)) {
+    enforcequality(&m, &b);           /* Enforce angle and area constraints. */
+  }
+#endif /* not CDT_ONLY */
+
+#ifndef NO_TIMER
+  if (!b.quiet) {
+    gettimeofday(&tv5, &tz);
+#ifndef CDT_ONLY
+    if (b.quality) {
+      printf("Quality milliseconds:  %ld\n",
+             1000l * (tv5.tv_sec - tv4.tv_sec) +
+             (tv5.tv_usec - tv4.tv_usec) / 1000l);
+    }
+#endif /* not CDT_ONLY */
+  }
+#endif /* not NO_TIMER */
+
+  /* Calculate the number of edges. */
+  m.edges = (3l * m.triangles.items + m.hullsize) / 2l;
+
+  if (b.order > 1) {
+    highorder(&m, &b);       /* Promote elements to higher polynomial order. */
+  }
+  if (!b.quiet) {
+    printf("\n");
+  }
+
+#ifdef TRILIBRARY
+  if (b.jettison) {
+    out->numberofpoints = m.vertices.items - m.undeads;
+  } else {
+    out->numberofpoints = m.vertices.items;
+  }
+  out->numberofpointattributes = m.nextras;
+  out->numberoftriangles = m.triangles.items;
+  out->numberofcorners = (b.order + 1) * (b.order + 2) / 2;
+  out->numberoftriangleattributes = m.eextras;
+  out->numberofedges = m.edges;
+  if (b.usesegments) {
+    out->numberofsegments = m.subsegs.items;
+  } else {
+    out->numberofsegments = m.hullsize;
+  }
+  if (vorout != (struct triangulateio *) NULL) {
+    vorout->numberofpoints = m.triangles.items;
+    vorout->numberofpointattributes = m.nextras;
+    vorout->numberofedges = m.edges;
+  }
+#endif /* TRILIBRARY */
+  /* If not using iteration numbers, don't write a .node file if one was */
+  /*   read, because the original one would be overwritten!              */
+  if (b.nonodewritten || (b.noiterationnum && m.readnodefile)) {
+    if (!b.quiet) {
+#ifdef TRILIBRARY
+      printf("NOT writing vertices.\n");
+#else /* not TRILIBRARY */
+      printf("NOT writing a .node file.\n");
+#endif /* not TRILIBRARY */
+    }
+    numbernodes(&m, &b);         /* We must remember to number the vertices. */
+  } else {
+    /* writenodes() numbers the vertices too. */
+#ifdef TRILIBRARY
+    writenodes(&m, &b, &out->pointlist, &out->pointattributelist,
+               &out->pointmarkerlist);
+#else /* not TRILIBRARY */
+    writenodes(&m, &b, b.outnodefilename, argc, argv);
+#endif /* TRILIBRARY */
+  }
+  if (b.noelewritten) {
+    if (!b.quiet) {
+#ifdef TRILIBRARY
+      printf("NOT writing triangles.\n");
+#else /* not TRILIBRARY */
+      printf("NOT writing an .ele file.\n");
+#endif /* not TRILIBRARY */
+    }
+  } else {
+#ifdef TRILIBRARY
+    writeelements(&m, &b, &out->trianglelist, &out->triangleattributelist);
+#else /* not TRILIBRARY */
+    writeelements(&m, &b, b.outelefilename, argc, argv);
+#endif /* not TRILIBRARY */
+  }
+  /* The -c switch (convex switch) causes a PSLG to be written */
+  /*   even if none was read.                                  */
+  if (b.poly || b.convex) {
+    /* If not using iteration numbers, don't overwrite the .poly file. */
+    if (b.nopolywritten || b.noiterationnum) {
+      if (!b.quiet) {
+#ifdef TRILIBRARY
+        printf("NOT writing segments.\n");
+#else /* not TRILIBRARY */
+        printf("NOT writing a .poly file.\n");
+#endif /* not TRILIBRARY */
+      }
+    } else {
+#ifdef TRILIBRARY
+      writepoly(&m, &b, &out->segmentlist, &out->segmentmarkerlist);
+      out->numberofholes = m.holes;
+      out->numberofregions = m.regions;
+      if (b.poly) {
+        out->holelist = in->holelist;
+        out->regionlist = in->regionlist;
+      } else {
+        out->holelist = (REAL *) NULL;
+        out->regionlist = (REAL *) NULL;
+      }
+#else /* not TRILIBRARY */
+      writepoly(&m, &b, b.outpolyfilename, holearray, m.holes, regionarray,
+                m.regions, argc, argv);
+#endif /* not TRILIBRARY */
+    }
+  }
+#ifndef TRILIBRARY
+#ifndef CDT_ONLY
+  if (m.regions > 0) {
+    trifree((VOID *) regionarray);
+  }
+#endif /* not CDT_ONLY */
+  if (m.holes > 0) {
+    trifree((VOID *) holearray);
+  }
+  if (b.geomview) {
+    writeoff(&m, &b, b.offfilename, argc, argv);
+  }
+#endif /* not TRILIBRARY */
+  if (b.edgesout) {
+#ifdef TRILIBRARY
+    writeedges(&m, &b, &out->edgelist, &out->edgemarkerlist);
+#else /* not TRILIBRARY */
+    writeedges(&m, &b, b.edgefilename, argc, argv);
+#endif /* not TRILIBRARY */
+  }
+  if (b.voronoi) {
+#ifdef TRILIBRARY
+    writevoronoi(&m, &b, &vorout->pointlist, &vorout->pointattributelist,
+                 &vorout->pointmarkerlist, &vorout->edgelist,
+                 &vorout->edgemarkerlist, &vorout->normlist);
+#else /* not TRILIBRARY */
+    writevoronoi(&m, &b, b.vnodefilename, b.vedgefilename, argc, argv);
+#endif /* not TRILIBRARY */
+  }
+  if (b.neighbors) {
+#ifdef TRILIBRARY
+    writeneighbors(&m, &b, &out->neighborlist);
+#else /* not TRILIBRARY */
+    writeneighbors(&m, &b, b.neighborfilename, argc, argv);
+#endif /* not TRILIBRARY */
+  }
+
+  if (!b.quiet) {
+#ifndef NO_TIMER
+    gettimeofday(&tv6, &tz);
+    printf("\nOutput milliseconds:  %ld\n",
+           1000l * (tv6.tv_sec - tv5.tv_sec) +
+           (tv6.tv_usec - tv5.tv_usec) / 1000l);
+    printf("Total running milliseconds:  %ld\n",
+           1000l * (tv6.tv_sec - tv0.tv_sec) +
+           (tv6.tv_usec - tv0.tv_usec) / 1000l);
+#endif /* not NO_TIMER */
+
+    statistics(&m, &b);
+  }
+
+#ifndef REDUCED
+  if (b.docheck) {
+    checkmesh(&m, &b);
+    checkdelaunay(&m, &b);
+  }
+#endif /* not REDUCED */
+
+  triangledeinit(&m, &b);
+#ifndef TRILIBRARY
+  return 0;
+#endif /* not TRILIBRARY */
+}
diff --git a/src/modules/grid/grid_gridding/nn/triangle.h b/src/modules/grid/grid_gridding/nn/triangle.h
new file mode 100644
index 0000000..6fb3efe
--- /dev/null
+++ b/src/modules/grid/grid_gridding/nn/triangle.h
@@ -0,0 +1,293 @@
+/*****************************************************************************/
+/*                                                                           */
+/*  (triangle.h)                                                             */
+/*                                                                           */
+/*  Include file for programs that call Triangle.                            */
+/*                                                                           */
+/*  Accompanies Triangle Version 1.6                                         */
+/*  July 28, 2005                                                            */
+/*                                                                           */
+/*  Copyright 1996, 2005                                                     */
+/*  Jonathan Richard Shewchuk                                                */
+/*  2360 Woolsey #H                                                          */
+/*  Berkeley, California  94705-1927                                         */
+/*  jrs at cs.berkeley.edu                                                      */
+/*                                                                           */
+/*****************************************************************************/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  How to call Triangle from another program                                */
+/*                                                                           */
+/*                                                                           */
+/*  If you haven't read Triangle's instructions (run "triangle -h" to read   */
+/*  them), you won't understand what follows.                                */
+/*                                                                           */
+/*  Triangle must be compiled into an object file (triangle.o) with the      */
+/*  TRILIBRARY symbol defined (generally by using the -DTRILIBRARY compiler  */
+/*  switch).  The makefile included with Triangle will do this for you if    */
+/*  you run "make trilibrary".  The resulting object file can be called via  */
+/*  the procedure triangulate().                                             */
+/*                                                                           */
+/*  If the size of the object file is important to you, you may wish to      */
+/*  generate a reduced version of triangle.o.  The REDUCED symbol gets rid   */
+/*  of all features that are primarily of research interest.  Specifically,  */
+/*  the -DREDUCED switch eliminates Triangle's -i, -F, -s, and -C switches.  */
+/*  The CDT_ONLY symbol gets rid of all meshing algorithms above and beyond  */
+/*  constrained Delaunay triangulation.  Specifically, the -DCDT_ONLY switch */
+/*  eliminates Triangle's -r, -q, -a, -u, -D, -Y, -S, and -s switches.       */
+/*                                                                           */
+/*  IMPORTANT:  These definitions (TRILIBRARY, REDUCED, CDT_ONLY) must be    */
+/*  made in the makefile or in triangle.c itself.  Putting these definitions */
+/*  in this file (triangle.h) will not create the desired effect.            */
+/*                                                                           */
+/*                                                                           */
+/*  The calling convention for triangulate() follows.                        */
+/*                                                                           */
+/*      void triangulate(triswitches, in, out, vorout)                       */
+/*      char *triswitches;                                                   */
+/*      struct triangulateio *in;                                            */
+/*      struct triangulateio *out;                                           */
+/*      struct triangulateio *vorout;                                        */
+/*                                                                           */
+/*  `triswitches' is a string containing the command line switches you wish  */
+/*  to invoke.  No initial dash is required.  Some suggestions:              */
+/*                                                                           */
+/*  - You'll probably find it convenient to use the `z' switch so that       */
+/*    points (and other items) are numbered from zero.  This simplifies      */
+/*    indexing, because the first item of any type always starts at index    */
+/*    [0] of the corresponding array, whether that item's number is zero or  */
+/*    one.                                                                   */
+/*  - You'll probably want to use the `Q' (quiet) switch in your final code, */
+/*    but you can take advantage of Triangle's printed output (including the */
+/*    `V' switch) while debugging.                                           */
+/*  - If you are not using the `q', `a', `u', `D', `j', or `s' switches,     */
+/*    then the output points will be identical to the input points, except   */
+/*    possibly for the boundary markers.  If you don't need the boundary     */
+/*    markers, you should use the `N' (no nodes output) switch to save       */
+/*    memory.  (If you do need boundary markers, but need to save memory, a  */
+/*    good nasty trick is to set out->pointlist equal to in->pointlist       */
+/*    before calling triangulate(), so that Triangle overwrites the input    */
+/*    points with identical copies.)                                         */
+/*  - The `I' (no iteration numbers) and `g' (.off file output) switches     */
+/*    have no effect when Triangle is compiled with TRILIBRARY defined.      */
+/*                                                                           */
+/*  `in', `out', and `vorout' are descriptions of the input, the output,     */
+/*  and the Voronoi output.  If the `v' (Voronoi output) switch is not used, */
+/*  `vorout' may be NULL.  `in' and `out' may never be NULL.                 */
+/*                                                                           */
+/*  Certain fields of the input and output structures must be initialized,   */
+/*  as described below.                                                      */
+/*                                                                           */
+/*****************************************************************************/
+
+/*****************************************************************************/
+/*                                                                           */
+/*  The `triangulateio' structure.                                           */
+/*                                                                           */
+/*  Used to pass data into and out of the triangulate() procedure.           */
+/*                                                                           */
+/*                                                                           */
+/*  Arrays are used to store points, triangles, markers, and so forth.  In   */
+/*  all cases, the first item in any array is stored starting at index [0].  */
+/*  However, that item is item number `1' unless the `z' switch is used, in  */
+/*  which case it is item number `0'.  Hence, you may find it easier to      */
+/*  index points (and triangles in the neighbor list) if you use the `z'     */
+/*  switch.  Unless, of course, you're calling Triangle from a Fortran       */
+/*  program.                                                                 */
+/*                                                                           */
+/*  Description of fields (except the `numberof' fields, which are obvious): */
+/*                                                                           */
+/*  `pointlist':  An array of point coordinates.  The first point's x        */
+/*    coordinate is at index [0] and its y coordinate at index [1], followed */
+/*    by the coordinates of the remaining points.  Each point occupies two   */
+/*    REALs.                                                                 */
+/*  `pointattributelist':  An array of point attributes.  Each point's       */
+/*    attributes occupy `numberofpointattributes' REALs.                     */
+/*  `pointmarkerlist':  An array of point markers; one int per point.        */
+/*                                                                           */
+/*  `trianglelist':  An array of triangle corners.  The first triangle's     */
+/*    first corner is at index [0], followed by its other two corners in     */
+/*    counterclockwise order, followed by any other nodes if the triangle    */
+/*    represents a nonlinear element.  Each triangle occupies                */
+/*    `numberofcorners' ints.                                                */
+/*  `triangleattributelist':  An array of triangle attributes.  Each         */
+/*    triangle's attributes occupy `numberoftriangleattributes' REALs.       */
+/*  `trianglearealist':  An array of triangle area constraints; one REAL per */
+/*    triangle.  Input only.                                                 */
+/*  `neighborlist':  An array of triangle neighbors; three ints per          */
+/*    triangle.  Output only.                                                */
+/*                                                                           */
+/*  `segmentlist':  An array of segment endpoints.  The first segment's      */
+/*    endpoints are at indices [0] and [1], followed by the remaining        */
+/*    segments.  Two ints per segment.                                       */
+/*  `segmentmarkerlist':  An array of segment markers; one int per segment.  */
+/*                                                                           */
+/*  `holelist':  An array of holes.  The first hole's x and y coordinates    */
+/*    are at indices [0] and [1], followed by the remaining holes.  Two      */
+/*    REALs per hole.  Input only, although the pointer is copied to the     */
+/*    output structure for your convenience.                                 */
+/*                                                                           */
+/*  `regionlist':  An array of regional attributes and area constraints.     */
+/*    The first constraint's x and y coordinates are at indices [0] and [1], */
+/*    followed by the regional attribute at index [2], followed by the       */
+/*    maximum area at index [3], followed by the remaining area constraints. */
+/*    Four REALs per area constraint.  Note that each regional attribute is  */
+/*    used only if you select the `A' switch, and each area constraint is    */
+/*    used only if you select the `a' switch (with no number following), but */
+/*    omitting one of these switches does not change the memory layout.      */
+/*    Input only, although the pointer is copied to the output structure for */
+/*    your convenience.                                                      */
+/*                                                                           */
+/*  `edgelist':  An array of edge endpoints.  The first edge's endpoints are */
+/*    at indices [0] and [1], followed by the remaining edges.  Two ints per */
+/*    edge.  Output only.                                                    */
+/*  `edgemarkerlist':  An array of edge markers; one int per edge.  Output   */
+/*    only.                                                                  */
+/*  `normlist':  An array of normal vectors, used for infinite rays in       */
+/*    Voronoi diagrams.  The first normal vector's x and y magnitudes are    */
+/*    at indices [0] and [1], followed by the remaining vectors.  For each   */
+/*    finite edge in a Voronoi diagram, the normal vector written is the     */
+/*    zero vector.  Two REALs per edge.  Output only.                        */
+/*                                                                           */
+/*                                                                           */
+/*  Any input fields that Triangle will examine must be initialized.         */
+/*  Furthermore, for each output array that Triangle will write to, you      */
+/*  must either provide space by setting the appropriate pointer to point    */
+/*  to the space you want the data written to, or you must initialize the    */
+/*  pointer to NULL, which tells Triangle to allocate space for the results. */
+/*  The latter option is preferable, because Triangle always knows exactly   */
+/*  how much space to allocate.  The former option is provided mainly for    */
+/*  people who need to call Triangle from Fortran code, though it also makes */
+/*  possible some nasty space-saving tricks, like writing the output to the  */
+/*  same arrays as the input.                                                */
+/*                                                                           */
+/*  Triangle will not free() any input or output arrays, including those it  */
+/*  allocates itself; that's up to you.  You should free arrays allocated by */
+/*  Triangle by calling the trifree() procedure defined below.  (By default, */
+/*  trifree() just calls the standard free() library procedure, but          */
+/*  applications that call triangulate() may replace trimalloc() and         */
+/*  trifree() in triangle.c to use specialized memory allocators.)           */
+/*                                                                           */
+/*  Here's a guide to help you decide which fields you must initialize       */
+/*  before you call triangulate().                                           */
+/*                                                                           */
+/*  `in':                                                                    */
+/*                                                                           */
+/*    - `pointlist' must always point to a list of points; `numberofpoints'  */
+/*      and `numberofpointattributes' must be properly set.                  */
+/*      `pointmarkerlist' must either be set to NULL (in which case all      */
+/*      markers default to zero), or must point to a list of markers.  If    */
+/*      `numberofpointattributes' is not zero, `pointattributelist' must     */
+/*      point to a list of point attributes.                                 */
+/*    - If the `r' switch is used, `trianglelist' must point to a list of    */
+/*      triangles, and `numberoftriangles', `numberofcorners', and           */
+/*      `numberoftriangleattributes' must be properly set.  If               */
+/*      `numberoftriangleattributes' is not zero, `triangleattributelist'    */
+/*      must point to a list of triangle attributes.  If the `a' switch is   */
+/*      used (with no number following), `trianglearealist' must point to a  */
+/*      list of triangle area constraints.  `neighborlist' may be ignored.   */
+/*    - If the `p' switch is used, `segmentlist' must point to a list of     */
+/*      segments, `numberofsegments' must be properly set, and               */
+/*      `segmentmarkerlist' must either be set to NULL (in which case all    */
+/*      markers default to zero), or must point to a list of markers.        */
+/*    - If the `p' switch is used without the `r' switch, then               */
+/*      `numberofholes' and `numberofregions' must be properly set.  If      */
+/*      `numberofholes' is not zero, `holelist' must point to a list of      */
+/*      holes.  If `numberofregions' is not zero, `regionlist' must point to */
+/*      a list of region constraints.                                        */
+/*    - If the `p' switch is used, `holelist', `numberofholes',              */
+/*      `regionlist', and `numberofregions' is copied to `out'.  (You can    */
+/*      nonetheless get away with not initializing them if the `r' switch is */
+/*      used.)                                                               */
+/*    - `edgelist', `edgemarkerlist', `normlist', and `numberofedges' may be */
+/*      ignored.                                                             */
+/*                                                                           */
+/*  `out':                                                                   */
+/*                                                                           */
+/*    - `pointlist' must be initialized (NULL or pointing to memory) unless  */
+/*      the `N' switch is used.  `pointmarkerlist' must be initialized       */
+/*      unless the `N' or `B' switch is used.  If `N' is not used and        */
+/*      `in->numberofpointattributes' is not zero, `pointattributelist' must */
+/*      be initialized.                                                      */
+/*    - `trianglelist' must be initialized unless the `E' switch is used.    */
+/*      `neighborlist' must be initialized if the `n' switch is used.  If    */
+/*      the `E' switch is not used and (`in->numberofelementattributes' is   */
+/*      not zero or the `A' switch is used), `elementattributelist' must be  */
+/*      initialized.  `trianglearealist' may be ignored.                     */
+/*    - `segmentlist' must be initialized if the `p' or `c' switch is used,  */
+/*      and the `P' switch is not used.  `segmentmarkerlist' must also be    */
+/*      initialized under these circumstances unless the `B' switch is used. */
+/*    - `edgelist' must be initialized if the `e' switch is used.            */
+/*      `edgemarkerlist' must be initialized if the `e' switch is used and   */
+/*      the `B' switch is not.                                               */
+/*    - `holelist', `regionlist', `normlist', and all scalars may be ignored.*/
+/*                                                                           */
+/*  `vorout' (only needed if `v' switch is used):                            */
+/*                                                                           */
+/*    - `pointlist' must be initialized.  If `in->numberofpointattributes'   */
+/*      is not zero, `pointattributelist' must be initialized.               */
+/*      `pointmarkerlist' may be ignored.                                    */
+/*    - `edgelist' and `normlist' must both be initialized.                  */
+/*      `edgemarkerlist' may be ignored.                                     */
+/*    - Everything else may be ignored.                                      */
+/*                                                                           */
+/*  After a call to triangulate(), the valid fields of `out' and `vorout'    */
+/*  will depend, in an obvious way, on the choice of switches used.  Note    */
+/*  that when the `p' switch is used, the pointers `holelist' and            */
+/*  `regionlist' are copied from `in' to `out', but no new space is          */
+/*  allocated; be careful that you don't free() the same array twice.  On    */
+/*  the other hand, Triangle will never copy the `pointlist' pointer (or any */
+/*  others); new space is allocated for `out->pointlist', or if the `N'      */
+/*  switch is used, `out->pointlist' remains uninitialized.                  */
+/*                                                                           */
+/*  All of the meaningful `numberof' fields will be properly set; for        */
+/*  instance, `numberofedges' will represent the number of edges in the      */
+/*  triangulation whether or not the edges were written.  If segments are    */
+/*  not used, `numberofsegments' will indicate the number of boundary edges. */
+/*                                                                           */
+/*****************************************************************************/
+
+#define REAL	double
+
+struct triangulateio {
+  REAL *pointlist;                                               /* In / out */
+  REAL *pointattributelist;                                      /* In / out */
+  int *pointmarkerlist;                                          /* In / out */
+  int numberofpoints;                                            /* In / out */
+  int numberofpointattributes;                                   /* In / out */
+
+  int *trianglelist;                                             /* In / out */
+  REAL *triangleattributelist;                                   /* In / out */
+  REAL *trianglearealist;                                         /* In only */
+  int *neighborlist;                                             /* Out only */
+  int numberoftriangles;                                         /* In / out */
+  int numberofcorners;                                           /* In / out */
+  int numberoftriangleattributes;                                /* In / out */
+
+  int *segmentlist;                                              /* In / out */
+  int *segmentmarkerlist;                                        /* In / out */
+  int numberofsegments;                                          /* In / out */
+
+  REAL *holelist;                        /* In / pointer to array copied out */
+  int numberofholes;                                      /* In / copied out */
+
+  REAL *regionlist;                      /* In / pointer to array copied out */
+  int numberofregions;                                    /* In / copied out */
+
+  int *edgelist;                                                 /* Out only */
+  int *edgemarkerlist;            /* Not used with Voronoi diagram; out only */
+  REAL *normlist;                /* Used only with Voronoi diagram; out only */
+  int numberofedges;                                             /* Out only */
+};
+
+#define ANSI_DECLARATORS
+
+#ifdef ANSI_DECLARATORS
+void triangulate(char *, struct triangulateio *, struct triangulateio *,
+                 struct triangulateio *);
+void trifree(void *memptr);
+#else /* not ANSI_DECLARATORS */
+void triangulate();
+void trifree();
+#endif /* not ANSI_DECLARATORS */
diff --git a/src/modules/grid/grid_spline/Gridding_Spline_MBA_Grid.cpp b/src/modules/grid/grid_spline/Gridding_Spline_MBA_Grid.cpp
index 4378630..ad0bb5c 100644
--- a/src/modules/grid/grid_spline/Gridding_Spline_MBA_Grid.cpp
+++ b/src/modules/grid/grid_spline/Gridding_Spline_MBA_Grid.cpp
@@ -122,6 +122,15 @@ CGridding_Spline_MBA_Grid::CGridding_Spline_MBA_Grid(void)
 		_TL(""),
 		PARAMETER_TYPE_Bool		, false
 	);
+
+	Parameters.Add_Choice(
+		Parameters("TARGET")	, "DATATYPE"	, _TL("Data Type"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("same as input grid"),
+			_TL("floating point")
+		), 1
+	);
 }
 
 //---------------------------------------------------------
@@ -142,7 +151,15 @@ bool CGridding_Spline_MBA_Grid::On_Execute(void)
 
 	if( Initialise() )
 	{
-		m_Points.Create(*Parameters("GRIDPOINTS")->asGrid());
+		if( Parameters("DATATYPE")->asInt() == 0 )
+		{
+			m_Points.Create(*Parameters("GRIDPOINTS")->asGrid());
+		}
+		else
+		{
+			m_Points.Create(Parameters("GRIDPOINTS")->asGrid());
+			m_Points.Assign(Parameters("GRIDPOINTS")->asGrid());
+		}
 
 		m_Epsilon	= Parameters("EPSILON")		->asDouble();
 		m_Level_Max	= Parameters("LEVEL_MAX")	->asInt();
diff --git a/src/modules/grid/grid_spline/Makefile.in b/src/modules/grid/grid_spline/Makefile.in
index e570639..442f804 100644
--- a/src/modules/grid/grid_spline/Makefile.in
+++ b/src/modules/grid/grid_spline/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/grid/grid_spline
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -108,6 +114,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -157,14 +165,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -208,9 +229,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/grid/grid_spline/Thin_Plate_Spline.cpp b/src/modules/grid/grid_spline/Thin_Plate_Spline.cpp
deleted file mode 100644
index 6418624..0000000
--- a/src/modules/grid/grid_spline/Thin_Plate_Spline.cpp
+++ /dev/null
@@ -1,296 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     grid_spline                       //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                 Thin_Plate_Spline.cpp                 //
-//                                                       //
-//                 Copyright (C) 2006 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-//
-// Based on:
-//
-// Thin Plate Spline demo/example in C++
-// Copyright (C) 2003, 2005 by Jarno Elonen
-//
-// Permission to use, copy, modify, distribute and sell this software
-// and its documentation for any purpose is hereby granted without fee,
-// provided that the above copyright notice appear in all copies and
-// that both that copyright notice and this permission notice appear
-// in supporting documentation. The authors make no representations
-// about the suitability of this software for any purpose.
-// It is provided "as is" without express or implied warranty.
-//
-// Reference:
-// - Donato, G., Belongie, S. (2002):
-//   'Approximation Methods for Thin Plate Spline Mappings and Principal Warps'
-//
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "Thin_Plate_Spline.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CThin_Plate_Spline::CThin_Plate_Spline(void)
-{
-}
-
-//---------------------------------------------------------
-CThin_Plate_Spline::~CThin_Plate_Spline(void)
-{
-	Destroy();
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CThin_Plate_Spline::Destroy(void)
-{
-	m_Points.Clear();
-	m_V.Destroy();
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CThin_Plate_Spline::Add_Point(double x, double y, double z)
-{
-	m_Points.Add(x, y, z);
-}
-
-//---------------------------------------------------------
-void CThin_Plate_Spline::Add_Point(const TSG_Point &p, double z)
-{
-	m_Points.Add(p.x, p.y, z);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-double CThin_Plate_Spline::_Get_hDistance(TSG_Point_3D A, TSG_Point_3D B)
-{
-	A.x	-= B.x;
-	A.y	-= B.y;
-
-	return( sqrt(A.x*A.x + A.y*A.y) );
-}
-
-//---------------------------------------------------------
-double CThin_Plate_Spline::_Get_Base_Funtion(double x)
-{
-	return( x > 0.0 ? x*x * log(x) : 0.0 );
-}
-
-//---------------------------------------------------------
-double CThin_Plate_Spline::_Get_Base_Funtion(TSG_Point_3D A, double x, double y)
-{
-	x	-= A.x;
-	y	-= A.y;
-	x	= sqrt(x*x + y*y);
-
-	return( x > 0.0 ? x*x * log(x) : 0.0 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-//	Calculate Thin Plate Spline (TPS) weights from control points.
-//
-bool CThin_Plate_Spline::Create(double Regularization, bool bSilent)
-{
-	bool		bResult	= false;
-	int			n;
-
-	//-----------------------------------------------------
-	// You We need at least 3 points to define a plane
-	if( (n = m_Points.Get_Count()) >= 3 )
-	{
-		int				i, j;
-		double			a, b;
-		TSG_Point_3D	Point;
-		CSG_Matrix		M;
-
-		//-------------------------------------------------
-		// Allocate the matrix and vector
-		M	.Create(n + 3, n + 3);
-		m_V	.Create(n + 3);
-
-		//-------------------------------------------------
-		// Fill K (n x n, upper left of L) and calculate
-		// mean edge length from control points
-		//
-		// K is symmetrical so we really have to
-		// calculate only about half of the coefficients.
-		for(i=0, a=0.0; i<n && (bSilent || SG_UI_Process_Set_Progress(i, n)); ++i )
-		{
-			Point	= m_Points[i];
-
-			for(j=i+1; j<n; ++j)
-			{
-				b		 = _Get_hDistance(Point, m_Points[j]);
-				a		+= b * 2.0;	// same for upper & lower tri
-				M[i][j]	 = (M[j][i]	= _Get_Base_Funtion(b));
-			}
-		}
-
-		a	/= (double)(n*n);
-
-		//-------------------------------------------------
-		// Fill the rest of L
-		for(i=0; i<n; ++i)
-		{
-			// diagonal: reqularization parameters (lambda * a^2)
-			M[i][i]		= Regularization * (a*a);
-
-			// P (n x 3, upper right)
-			M[i][n + 0]	= 1.0;
-			M[i][n + 1]	= m_Points[i].x;
-			M[i][n + 2]	= m_Points[i].y;
-
-			// P transposed (3 x n, bottom left)
-			M[n + 0][i]	= 1.0;
-			M[n + 1][i]	= m_Points[i].x;
-			M[n + 2][i]	= m_Points[i].y;
-		}
-
-		//-------------------------------------------------
-		// O (3 x 3, lower right)
-		for(i=n; i<n+3; ++i)
-		{
-			for(j=n; j<n+3; ++j)
-			{
-				M[i][j]	= 0.0;
-			}
-		}
-
-		//-------------------------------------------------
-		// Fill the right hand vector m_V
-		for(i=0; i<n; ++i)
-		{
-			m_V[i]	= m_Points[i].z;
-		}
-
-		m_V[n + 0]	= m_V[n + 1]	= m_V[n + 2]	= 0.0;
-
-		//-------------------------------------------------
-		// Solve the linear system "inplace"
-		if( !bSilent )
-			SG_UI_Process_Set_Text(_TL("Solving Matrix"));
-
-		bResult		= SG_Matrix_Solve(M, m_V, bSilent);
-	}
-
-	//-----------------------------------------------------
-	if( !bResult )
-	{
-		Destroy();
-	}
-
-	return( bResult );
-}
-
-//---------------------------------------------------------
-double CThin_Plate_Spline::Get_Value(double x, double y)
-{
-	if( m_V.Get_N() > 0 )
-	{
-		int		n	= m_Points.Get_Count();
-		double	z	= m_V[n + 0] + m_V[n + 1] * x + m_V[n + 2] * y;
-
-		for(int i=0; i<n; i++)
-		{
-			z	+= m_V[i] * _Get_Base_Funtion(m_Points[i], x, y);
-		}
-
-		return( z );
-	}
-
-	return( 0.0 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
diff --git a/src/modules/grid/grid_spline/Thin_Plate_Spline.h b/src/modules/grid/grid_spline/Thin_Plate_Spline.h
deleted file mode 100644
index 505c45e..0000000
--- a/src/modules/grid/grid_spline/Thin_Plate_Spline.h
+++ /dev/null
@@ -1,122 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     grid_spline                       //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                  Thin_Plate_Spline.h                  //
-//                                                       //
-//                 Copyright (C) 2006 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//                                                       //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__Thin_Plate_Spline_H
-#define HEADER_INCLUDED__Thin_Plate_Spline_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "MLB_Interface.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class grid_spline_EXPORT CThin_Plate_Spline
-{
-public:
-	CThin_Plate_Spline(void);
-	virtual ~CThin_Plate_Spline(void);
-
-	bool					Destroy				(void);
-
-	void					Add_Point			(double x, double y, double z);
-	void					Add_Point			(const TSG_Point &p, double z);
-	CSG_Points_3D &			Get_Points			(void)	{	return( m_Points );		}
-
-	bool					Create				(double Regularization = 0.0, bool bSilent = true);
-
-	bool					is_Okay				(void)	{	return( m_V.Get_N() > 0 );	}
-
-	double					Get_Value			(double x, double y);
-
-
-private:
-
-	CSG_Points_3D			m_Points;
-
-	CSG_Vector				m_V;
-
-
-	double					_Get_hDistance		(TSG_Point_3D A, TSG_Point_3D B);
-	double					_Get_Base_Funtion	(double x);
-	double					_Get_Base_Funtion	(TSG_Point_3D A, double x, double y);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif	// #ifndef HEADER_INCLUDED__Thin_Plate_Spline_H
diff --git a/src/modules/grid/grid_spline/csa.c b/src/modules/grid/grid_spline/csa.c
index dfdd297..a8e7b2a 100644
--- a/src/modules/grid/grid_spline/csa.c
+++ b/src/modules/grid/grid_spline/csa.c
@@ -139,7 +139,7 @@ static void csa_quit(char* format, ...)
     vfprintf(stderr, format, args);
     va_end(args);
 
-    exit(1);
+//    exit(1);
 }
 
 /* Allocates n1xn2 matrix of something. Note that it will be accessed as 
@@ -1856,12 +1856,12 @@ static void usage()
     printf("  C1-continuous bivariate cubic spline. The calculated values are written to\n");
     printf("  standard output.\n");
 
-    exit(0);
+//    exit(0);
 }
 
 static void version()
 {
-    exit(0);
+//    exit(0);
 }
 
 static void parse_commandline(int argc, char* argv[], char** fdata, char** fpoints, int* invariant, int* square, int* generate_points, int* nx, int* ny, int* nppc, int* k, double* zoom)
diff --git a/src/modules/grid/grid_tools/Grid_Resample.cpp b/src/modules/grid/grid_tools/Grid_Resample.cpp
index 59c03bc..82964b8 100644
--- a/src/modules/grid/grid_tools/Grid_Resample.cpp
+++ b/src/modules/grid/grid_tools/Grid_Resample.cpp
@@ -101,7 +101,7 @@ CGrid_Resample::CGrid_Resample(void)
 	pNode	= pParameters->Add_Choice(
 		NULL	, "METHOD"		, _TL("Interpolation Method"),
 		_TL(""),
-		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|%s|%s|%s|%s|"),
+		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|"),
 			_TL("Nearest Neighbor"),
 			_TL("Bilinear Interpolation"),
 			_TL("Inverse Distance Interpolation"),
@@ -110,7 +110,8 @@ CGrid_Resample::CGrid_Resample(void)
 			_TL("Mean Value"),
 			_TL("Mean Value (cell area weighted)"),
 			_TL("Minimum Value"),
-			_TL("Maximum Value")
+			_TL("Maximum Value"),
+			_TL("Majority")
 		), 6
 	);
 
@@ -182,7 +183,7 @@ bool CGrid_Resample::On_Execute(void)
 	switch( Parameters("TARGET")->asInt() )
 	{
 	case 0:	// user defined...
-		if( m_Grid_Target.Init_User(pInput->Get_Extent()) && Dlg_Parameters("USER") )
+		if( m_Grid_Target.Init_User(pInput->Get_Extent(true)) && Dlg_Parameters("USER") )
 		{
 			pOutput	= m_Grid_Target.Get_User(Parameters("KEEP_TYPE")->asBool() ? pInput->Get_Type() : SG_DATATYPE_Undefined);
 		}
@@ -222,6 +223,7 @@ bool CGrid_Resample::On_Execute(void)
 			case 6:	Interpolation	= GRID_INTERPOLATION_Mean_Cells;		break;
 			case 7:	Interpolation	= GRID_INTERPOLATION_Minimum;			break;
 			case 8:	Interpolation	= GRID_INTERPOLATION_Maximum;			break;
+			case 9:	Interpolation	= GRID_INTERPOLATION_Majority;			break;
 			}
 
 			pParameters	= Get_Parameters("SCALE_UP");
diff --git a/src/modules/grid/grid_tools/Grid_Tiling.cpp b/src/modules/grid/grid_tools/Grid_Tiling.cpp
new file mode 100644
index 0000000..84f82a4
--- /dev/null
+++ b/src/modules/grid/grid_tools/Grid_Tiling.cpp
@@ -0,0 +1,315 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     Grid_Tools                        //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    Grid_Tiling.cpp                    //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "Grid_Tiling.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CGrid_Tiling::CGrid_Tiling(void)
+{
+	CSG_Parameter	*pNode;
+
+	//-----------------------------------------------------
+	Set_Name		(_TL("Tiling"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		""
+	));
+
+
+	//-----------------------------------------------------
+	Parameters.Add_Grid(
+		NULL	, "GRID"			, _TL("Grid"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid_List(
+		NULL	, "TILES"			, _TL("Tiles"),
+		_TL(""),
+		PARAMETER_OUTPUT, false
+	);
+
+	pNode	= Parameters.Add_Value(
+		NULL	, "OVERLAP"			, _TL("Overlapping Cells"),
+		_TL(""),
+		PARAMETER_TYPE_Int, 0, 0, true
+	);
+
+	Parameters.Add_Choice(
+		pNode	, "OVERLAP_SYM"		, _TL("Add Cells"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			_TL("symmetric"),
+			_TL("bottom / left"),
+			_TL("top / right")
+		), 0
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "METHOD"			, _TL("Tile Size Definition"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("number of grid cells per tile"),
+			_TL("coordinates (offset, range, cell size, tile size)")
+		), 0
+	);
+
+	pNode	= Parameters.Add_Node(
+		NULL	, "NODE_A"			, _TL("Number of Grid Cells"),
+		_TL("")
+	);
+
+	Parameters.Add_Value(
+		pNode	, "NX"				, _TL("Number of Column Cells"),
+		_TL(""),
+		PARAMETER_TYPE_Int, 100, 1, true
+	);
+
+	Parameters.Add_Value(
+		pNode	, "NY"				, _TL("Number of Row Cells"),
+		_TL(""),
+		PARAMETER_TYPE_Int, 100, 1, true
+	);
+
+	pNode	= Parameters.Add_Node(
+		NULL	, "NODE_B"			, _TL("Coordinates"),
+		_TL("")
+	);
+
+	Parameters.Add_Range(
+		pNode	, "XRANGE"			, _TL("Offset and Range (X)"),
+		_TL(""),
+		0.0, 1000.0
+	);
+
+	Parameters.Add_Range(
+		pNode	, "YRANGE"			, _TL("Offset and Range (Y)"),
+		_TL(""),
+		0.0, 1000.0
+	);
+
+	Parameters.Add_Value(
+		pNode	, "DCELL"			, _TL("Cell Size"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 1.0, 0.0, true
+	);
+
+	Parameters.Add_Value(
+		pNode	, "DX"				, _TL("Tile Size (X)"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 100.0, 0.0, true
+	);
+
+	Parameters.Add_Value(
+		pNode	, "DY"				, _TL("Tile Size (Y)"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 100.0, 0.0, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CGrid_Tiling::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("PARAMETERS_GRID_SYSTEM")) )
+	{
+		CSG_Grid_System	System(1.0, 0.0, 0.0, 101, 101);
+
+		if( pParameter->asGrid_System() && pParameter->asGrid_System()->is_Valid() )
+		{
+			System	= *pParameter->asGrid_System();
+		}
+
+		pParameters->Get_Parameter("NX")	->Set_Value(System.Get_NX() / 2);
+		pParameters->Get_Parameter("NY")	->Set_Value(System.Get_NX() / 2);
+
+		pParameters->Get_Parameter("XRANGE")->asRange()->Set_Range(System.Get_XMin(), System.Get_XMax());
+		pParameters->Get_Parameter("YRANGE")->asRange()->Set_Range(System.Get_YMin(), System.Get_YMax());
+		pParameters->Get_Parameter("DCELL")	->Set_Value(System.Get_Cellsize());
+		pParameters->Get_Parameter("DX")	->Set_Value(System.Get_XRange() / 2.0);
+		pParameters->Get_Parameter("DY")	->Set_Value(System.Get_YRange() / 2.0);
+	}
+
+	return( 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CGrid_Tiling::On_Execute(void)
+{
+	int						ix, iy, nx, ny, Overlap;
+	double					y, x, dx, dy, dCell;
+	TSG_Data_Type			Type;
+	TSG_Rect				Extent;
+	TSG_Grid_Interpolation	Interpolation;
+	CSG_Grid				*pGrid, *pTile;
+	CSG_Parameter_Grid_List	*pTiles;
+
+	//-----------------------------------------------------
+	pGrid	= Parameters("GRID")	->asGrid();
+	pTiles	= Parameters("TILES")	->asGridList();
+	Overlap	= Parameters("OVERLAP")	->asInt();
+
+	switch( Parameters("METHOD")->asInt() )
+	{
+	case 0: default:
+		Extent.xMin		= pGrid->Get_XMin();
+		Extent.xMax		= pGrid->Get_XMax();
+		Extent.yMin		= pGrid->Get_YMin();
+		Extent.yMax		= pGrid->Get_YMax();
+		dCell			= pGrid->Get_Cellsize();
+		nx				= Parameters("NX")		->asInt();
+		ny				= Parameters("NY")		->asInt();
+		dx				= dCell * nx;
+		dy				= dCell * ny;
+		Type			= pGrid->Get_Type();
+		Interpolation	= GRID_INTERPOLATION_NearestNeighbour;
+		break;
+
+	case 1:
+		Extent.xMin		= Parameters("XRANGE")	->asRange()->Get_LoVal();
+		Extent.xMax		= Parameters("XRANGE")	->asRange()->Get_HiVal();
+		Extent.yMin		= Parameters("YRANGE")	->asRange()->Get_LoVal();
+		Extent.yMax		= Parameters("YRANGE")	->asRange()->Get_HiVal();
+		dCell			= Parameters("DCELL")	->asDouble();
+		dx				= Parameters("DX")		->asDouble();
+		dy				= Parameters("DY")		->asDouble();
+		nx				= (int)(dx / dCell);
+		ny				= (int)(dy / dCell);
+		Type			= pGrid->Get_Type();
+		Interpolation	= GRID_INTERPOLATION_Undefined;
+		break;
+	}
+
+	switch( Parameters("OVERLAP_SYM")->asInt() )
+	{
+	case 0: default:	// symetric
+		nx		+= Overlap * 2;
+		ny		+= Overlap * 2;
+		break;
+
+	case 1:				// bottom / left
+		nx		+= Overlap;
+		ny		+= Overlap;
+		break;
+
+	case 2:				// top / right
+		nx		+= Overlap;
+		ny		+= Overlap;
+		Overlap	 = 0;
+		break;
+	}
+
+	pTiles->Del_Items();
+
+	//-----------------------------------------------------
+	if( dx <= 0.0 || dy <= 0.0 || dCell <= 0.0 )
+	{
+		Message_Add(_TL("no intersection with mask grid."));
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	for(y=Extent.yMin, iy=1; y<Extent.yMax && Process_Get_Okay(); y+=dy, iy++)
+	{
+		for(x=Extent.xMin, ix=1; x<Extent.xMax; x+=dx, ix++)
+		{
+			pTile	= SG_Create_Grid(Type, nx, ny, dCell, x - dCell * Overlap, y - dCell * Overlap);
+			pTile	->Assign(pGrid, Interpolation);
+			pTile	->Set_Name(CSG_String::Format(SG_T("%s [%d, %d]"), pGrid->Get_Name(), iy, ix));
+
+			if( pTile->Get_NoData_Count() == pTile->Get_NCells() )
+			{
+				delete(pTile);
+			}
+			else
+			{
+				pTiles->Add_Item(pTile);
+			}
+		}
+	}
+
+	return( pTiles->Get_Count() > 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules/grid/grid_tools/Grid_Tiling.h b/src/modules/grid/grid_tools/Grid_Tiling.h
new file mode 100644
index 0000000..a0ac9a6
--- /dev/null
+++ b/src/modules/grid/grid_tools/Grid_Tiling.h
@@ -0,0 +1,97 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                      Grid_Tools                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     Grid_Tiling.h                     //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__Grid_Tiling_H
+#define HEADER_INCLUDED__Grid_Tiling_H
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CGrid_Tiling : public CSG_Module_Grid
+{
+public:
+	CGrid_Tiling(void);
+
+	virtual const SG_Char *		Get_MenuPath			(void)	{	return( _TL("A:Grid|Construction") );	}
+
+
+protected:
+
+	virtual int					On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+	virtual bool				On_Execute				(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__Grid_Tiling_H
diff --git a/src/modules/grid/grid_tools/MLB_Interface.cpp b/src/modules/grid/grid_tools/MLB_Interface.cpp
index ae9e31e..491ec20 100644
--- a/src/modules/grid/grid_tools/MLB_Interface.cpp
+++ b/src/modules/grid/grid_tools/MLB_Interface.cpp
@@ -125,6 +125,7 @@ const SG_Char * Get_Info(int i)
 #include "Grid_Mask.h"
 #include "Grid_Gaps_Spline_Fill.h"
 #include "Grid_Proximity.h"
+#include "Grid_Tiling.h"
 
 
 //---------------------------------------------------------
@@ -161,6 +162,7 @@ CSG_Module *		Create_Module(int i)
 	case 24: 	return( new CGrid_Mask );
 	case 25: 	return( new CGrid_Gaps_Spline_Fill );
 	case 26: 	return( new CGrid_Proximity );
+	case 27: 	return( new CGrid_Tiling );
 	}
 
 	return( NULL );
diff --git a/src/modules/grid/grid_tools/Makefile.am b/src/modules/grid/grid_tools/Makefile.am
index 39c8212..2a351fb 100644
--- a/src/modules/grid/grid_tools/Makefile.am
+++ b/src/modules/grid/grid_tools/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.10 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.11 2010/09/17 16:23:23 oconrad Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
@@ -34,6 +34,7 @@ Grid_Proximity.cpp\
 Grid_Resample.cpp\
 Grid_SortRaster.cpp\
 Grid_ThresholdBuffer.cpp\
+Grid_Tiling.cpp\
 Grid_Value_Reclassify.cpp\
 Grid_Value_Replace.cpp\
 Grid_Value_Replace_Interactive.cpp\
@@ -62,6 +63,7 @@ Grid_Proximity.h\
 Grid_Resample.h\
 Grid_SortRaster.h\
 Grid_ThresholdBuffer.h\
+Grid_Tiling.h\
 Grid_Value_Reclassify.h\
 Grid_Value_Replace.h\
 Grid_Value_Replace_Interactive.h\
diff --git a/src/modules/grid/grid_tools/Makefile.in b/src/modules/grid/grid_tools/Makefile.in
index f987fed..80b2258 100644
--- a/src/modules/grid/grid_tools/Makefile.in
+++ b/src/modules/grid/grid_tools/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/grid/grid_tools
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -75,7 +81,7 @@ am_libgrid_tools_la_OBJECTS = CreateGridSystem.lo Grid_Aggregate.lo \
 	Grid_Gaps_Spline_Fill.lo Grid_InvertNoData.lo Grid_Mask.lo \
 	Grid_Merge.lo Grid_Orientation.lo Grid_Proximity.lo \
 	Grid_Resample.lo Grid_SortRaster.lo Grid_ThresholdBuffer.lo \
-	Grid_Value_Reclassify.lo Grid_Value_Replace.lo \
+	Grid_Tiling.lo Grid_Value_Reclassify.lo Grid_Value_Replace.lo \
 	Grid_Value_Replace_Interactive.lo Grid_Value_Request.lo \
 	Grid_Value_Type.lo GridsFromTableAndGrid.lo MLB_Interface.lo
 libgrid_tools_la_OBJECTS = $(am_libgrid_tools_la_OBJECTS)
@@ -113,6 +119,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -162,14 +170,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -213,9 +234,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -226,7 +251,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.10 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.11 2010/09/17 16:23:23 oconrad Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_TRUE at UC_DEFS = -D_SAGA_UNICODE
@@ -257,6 +282,7 @@ Grid_Proximity.cpp\
 Grid_Resample.cpp\
 Grid_SortRaster.cpp\
 Grid_ThresholdBuffer.cpp\
+Grid_Tiling.cpp\
 Grid_Value_Reclassify.cpp\
 Grid_Value_Replace.cpp\
 Grid_Value_Replace_Interactive.cpp\
@@ -285,6 +311,7 @@ Grid_Proximity.h\
 Grid_Resample.h\
 Grid_SortRaster.h\
 Grid_ThresholdBuffer.h\
+Grid_Tiling.h\
 Grid_Value_Reclassify.h\
 Grid_Value_Replace.h\
 Grid_Value_Replace_Interactive.h\
@@ -389,6 +416,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_Resample.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_SortRaster.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_ThresholdBuffer.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_Tiling.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_Value_Reclassify.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_Value_Replace.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_Value_Replace_Interactive.Plo at am__quote@
diff --git a/src/modules/grid/grid_visualisation/Makefile.in b/src/modules/grid/grid_visualisation/Makefile.in
index 17e5c97..16084f2 100644
--- a/src/modules/grid/grid_visualisation/Makefile.in
+++ b/src/modules/grid/grid_visualisation/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/grid/grid_visualisation
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -109,6 +115,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -158,14 +166,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -209,9 +230,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/pointcloud/Makefile.in b/src/modules/pointcloud/Makefile.in
index 3d69d0c..452ba3b 100644
--- a/src/modules/pointcloud/Makefile.in
+++ b/src/modules/pointcloud/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules/pointcloud
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules/pointcloud/pointcloud_tools/Makefile.in b/src/modules/pointcloud/pointcloud_tools/Makefile.in
index b4c7dac..44bae2d 100644
--- a/src/modules/pointcloud/pointcloud_tools/Makefile.in
+++ b/src/modules/pointcloud/pointcloud_tools/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/pointcloud/pointcloud_tools
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -108,6 +114,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -157,14 +165,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -208,9 +229,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/pointcloud/pointcloud_viewer/Makefile.in b/src/modules/pointcloud/pointcloud_viewer/Makefile.in
index 7124b99..d8ab51c 100644
--- a/src/modules/pointcloud/pointcloud_viewer/Makefile.in
+++ b/src/modules/pointcloud/pointcloud_viewer/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/pointcloud/pointcloud_viewer
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -108,6 +114,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -157,14 +165,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -208,9 +229,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/pointcloud/pointcloud_viewer/points_view_module.cpp b/src/modules/pointcloud/pointcloud_viewer/points_view_module.cpp
index d3d1f90..4ac37ef 100644
--- a/src/modules/pointcloud/pointcloud_viewer/points_view_module.cpp
+++ b/src/modules/pointcloud/pointcloud_viewer/points_view_module.cpp
@@ -124,6 +124,8 @@ bool CPoints_View_Module::On_Execute(void)
 	CPoints_View_Dialog	dlg(pPoints);
 
 	dlg.ShowModal();
+
+	return( true );
 }
 
 
diff --git a/src/modules/shapes/Makefile.in b/src/modules/shapes/Makefile.in
index dc6dcc4..a36d98b 100644
--- a/src/modules/shapes/Makefile.in
+++ b/src/modules/shapes/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules/shapes
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp b/src/modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp
index 637d38e..1cef59b 100644
--- a/src/modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp
+++ b/src/modules/shapes/shapes_grid/Grid_Statistics_AddTo_Polygon.cpp
@@ -140,8 +140,8 @@ bool CGrid_Statistics_AddTo_Polygon::On_Execute(void)
 {
 	bool				bQuantiles;
 	int					x, y, iShape, nShapes, *Num,
-						field_CELLS, field_MEAN, field_VARI, field_QUANTILES, quantile_step;
-	double				*Sum, *Dif, d;
+						field_CELLS, field_MEAN, field_MIN, field_MAX, field_VARI, field_STDDEV, field_QUANTILES, quantile_step;
+	double				*Sum, *Dif, *Min, *Max, d;
 	CSG_Table_Record	*pRecord;
 	CSG_Grid			*pGrid, ShapeIDs;
 	CSG_Shapes			*pShapes;
@@ -173,6 +173,8 @@ bool CGrid_Statistics_AddTo_Polygon::On_Execute(void)
 
 			Num		= (int    *)calloc(nShapes, sizeof(int   ));
 			Sum		= (double *)calloc(nShapes, sizeof(double));
+			Min		= (double *)calloc(nShapes, sizeof(double));
+			Max		= (double *)calloc(nShapes, sizeof(double));
 			Dif		= (double *)calloc(nShapes, sizeof(double));
 
 			std::vector<std::list<double> >ShapePixels(nShapes);
@@ -189,8 +191,23 @@ bool CGrid_Statistics_AddTo_Polygon::On_Execute(void)
 						Dif[iShape]	+= d * d;
 						Num[iShape]	++;
 
+						if( Num[iShape] == 1 )
+						{
+							Min[iShape]	= Max[iShape]	= d;
+						}
+						else if( Min[iShape] > d )
+						{
+							Min[iShape]	= d;
+						}
+						else if( Max[iShape] < d )
+						{
+							Max[iShape]	= d;
+						}
+
 						if( bQuantiles )
+						{
 							ShapePixels[iShape].push_back(d);
+						}
 					}
 				}
 			}
@@ -199,15 +216,24 @@ bool CGrid_Statistics_AddTo_Polygon::On_Execute(void)
 			pShapes	= Parameters("RESULT")->asShapes();
 			pShapes->Assign(Parameters("POLY")->asShapes());
 
-			field_CELLS	= pShapes->Get_Field_Count();
+			field_CELLS		= pShapes->Get_Field_Count();
 			pShapes->Add_Field(_TL("CELLS")		, SG_DATATYPE_Int);
 
-			field_MEAN	= pShapes->Get_Field_Count();
+			field_MIN		= pShapes->Get_Field_Count();
+			pShapes->Add_Field(_TL("MIN")		, SG_DATATYPE_Double);
+
+			field_MAX		= pShapes->Get_Field_Count();
+			pShapes->Add_Field(_TL("MAX")		, SG_DATATYPE_Double);
+
+			field_MEAN		= pShapes->Get_Field_Count();
 			pShapes->Add_Field(_TL("MEAN")		, SG_DATATYPE_Double);
 
-			field_VARI	= pShapes->Get_Field_Count();
+			field_VARI		= pShapes->Get_Field_Count();
 			pShapes->Add_Field(_TL("VARIANCE")	, SG_DATATYPE_Double);
 
+			field_STDDEV	= pShapes->Get_Field_Count();
+			pShapes->Add_Field(_TL("STDDEV")	, SG_DATATYPE_Double);
+
 			if( bQuantiles )
 			{
 				field_QUANTILES = pShapes->Get_Field_Count();
@@ -227,8 +253,11 @@ bool CGrid_Statistics_AddTo_Polygon::On_Execute(void)
 					d		= Sum[iShape] / (double)Num[iShape];
 
 					pRecord->Set_Value(field_CELLS	, Num[iShape]);
+					pRecord->Set_Value(field_MIN	, Min[iShape]);
+					pRecord->Set_Value(field_MAX	, Max[iShape]);
 					pRecord->Set_Value(field_MEAN	, d);
-					pRecord->Set_Value(field_VARI	, Dif[iShape] / (double)Num[iShape] - d * d);
+					pRecord->Set_Value(field_VARI	, d = Dif[iShape] / (double)Num[iShape] - d * d);
+					pRecord->Set_Value(field_STDDEV	, sqrt(d));
 
 					if( bQuantiles )
 					{
@@ -257,13 +286,18 @@ bool CGrid_Statistics_AddTo_Polygon::On_Execute(void)
 				else
 				{
 					pRecord->Set_NoData(field_CELLS);
+					pRecord->Set_NoData(field_MIN);
+					pRecord->Set_NoData(field_MAX);
 					pRecord->Set_NoData(field_MEAN);
 					pRecord->Set_NoData(field_VARI);
+					pRecord->Set_NoData(field_STDDEV);
 				}
 			}
 
 			//---------------------------------------------
 			free(Num);
+			free(Min);
+			free(Max);
 			free(Sum);
 			free(Dif);
 
diff --git a/src/modules/shapes/shapes_grid/Grid_To_Points.cpp b/src/modules/shapes/shapes_grid/Grid_To_Points.cpp
index dcf2d9d..7c3d35a 100644
--- a/src/modules/shapes/shapes_grid/Grid_To_Points.cpp
+++ b/src/modules/shapes/shapes_grid/Grid_To_Points.cpp
@@ -71,12 +71,12 @@
 CGrid_To_Points::CGrid_To_Points(void)
 {
 	//-----------------------------------------------------
-	Set_Name		(_TL("Grid Values to Points"));
+	Set_Name		(_TL("Grid Values to Shapes"));
 
-	Set_Author		(SG_T("(c) 2001 by O.Conrad"));
+	Set_Author		(SG_T("O.Conrad (c) 2001"));
 
 	Set_Description	(_TW(
-		"This module saves grid values to a point shape. Optionally only points "
+		"This module saves grid values to point (grid nodes) or polygon (grid cells) shapes. Optionally only points "
 		"can be saved, which are contained by polygons of the specified shapes layer. "
 		"In addition, it is possible to exclude all cells that are coded NoData in the "
 		"first grid of the grid list."
@@ -97,7 +97,7 @@ CGrid_To_Points::CGrid_To_Points(void)
 	);
 
 	Parameters.Add_Shapes(
-		NULL	, "POINTS"		, _TL("Points"),
+		NULL	, "SHAPES"		, _TL("Shapes"),
 		_TL(""),
 		PARAMETER_OUTPUT
 	);
@@ -105,7 +105,16 @@ CGrid_To_Points::CGrid_To_Points(void)
 	Parameters.Add_Value(
 		NULL	, "NODATA"		, _TL("Exclude NoData Cells"),
 		_TL(""),
-		PARAMETER_TYPE_Bool		, 0.0
+		PARAMETER_TYPE_Bool		, true
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "TYPE"		, _TL("Type"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("nodes"),
+			_TL("cells")
+		)
 	);
 }
 
@@ -124,61 +133,79 @@ CGrid_To_Points::~CGrid_To_Points(void)
 bool CGrid_To_Points::On_Execute(void)
 {
 	bool					bZFactor, bNoNoData;
-	int						x, y, iGrid, iPoint;
+	int						x, y, iGrid, iPoint, Type;
 	double					xPos, yPos;
 	CSG_Grid				*pGrid;
 	CSG_Parameter_Grid_List	*pGrids;
-	CSG_Shape				*pPoint;
-	CSG_Shapes				*pPoints, *pPolygons;
+	CSG_Shape				*pShape;
+	CSG_Shapes				*pShapes, *pPolygons;
 
 	//-----------------------------------------------------
 	pGrids		= Parameters("GRIDS")	->asGridList();
 	pPolygons	= Parameters("POLYGONS")->asShapes();
-	pPoints		= Parameters("POINTS")	->asShapes();
+	pShapes		= Parameters("SHAPES")	->asShapes();
 	bNoNoData	= Parameters("NODATA")	->asBool();
+	Type		= Parameters("TYPE")	->asInt();
 
 	bZFactor	= true;
 
 	//-----------------------------------------------------
 	if( pGrids->Get_Count() > 0 )
 	{
-		pPoints->Create(SHAPE_TYPE_Point, _TL("Points from Grid(s)"));
+		switch( Type )
+		{
+		case 0:	pShapes->Create(SHAPE_TYPE_Point  , _TL("Grid Values [Nodes]"));	break;
+		case 1:	pShapes->Create(SHAPE_TYPE_Polygon, _TL("Grid Values [Cells]"));	break;
+		}
 
-		pPoints->Add_Field("ID"	, SG_DATATYPE_Int);
-		pPoints->Add_Field("X"	, SG_DATATYPE_Double);
-		pPoints->Add_Field("Y"	, SG_DATATYPE_Double);
+		pShapes->Add_Field("ID"	, SG_DATATYPE_Int);
+		pShapes->Add_Field("X"	, SG_DATATYPE_Double);
+		pShapes->Add_Field("Y"	, SG_DATATYPE_Double);
 
 		for(iGrid=0; iGrid<pGrids->Get_Count(); iGrid++)
 		{
-			pPoints->Add_Field(CSG_String::Format(SG_T("%s"),pGrids->asGrid(iGrid)->Get_Name()).BeforeFirst(SG_Char('.')).c_str(), SG_DATATYPE_Double);
+			pShapes->Add_Field(CSG_String::Format(SG_T("%s"),pGrids->asGrid(iGrid)->Get_Name()).BeforeFirst(SG_Char('.')).c_str(), SG_DATATYPE_Double);
 		}
 
 		//-------------------------------------------------
-		for(y=0, yPos=Get_YMin(), iPoint=0; y<Get_NY() && Set_Progress(y); y++, yPos+=Get_Cellsize())
+		for(y=0, yPos=Get_YMin() - (Type ? 0.5 * Get_Cellsize() : 0.0), iPoint=0; y<Get_NY() && Set_Progress(y); y++, yPos+=Get_Cellsize())
 		{
-			for(x=0, xPos=Get_XMin(); x<Get_NX(); x++, xPos+=Get_Cellsize())
+			for(x=0, xPos=Get_XMin() - (Type ? 0.5 * Get_Cellsize() : 0.0); x<Get_NX(); x++, xPos+=Get_Cellsize())
 			{
 				if( (!bNoNoData || (bNoNoData && !pGrids->asGrid(0)->is_NoData(x, y)))
 				&&	(!pPolygons || is_Contained(xPos, yPos, pPolygons)) )
 				{
-					pPoint	= pPoints->Add_Shape();
-					pPoint->Add_Point(xPos, yPos);
+					pShape	= pShapes->Add_Shape();
+
+					switch( Type )
+					{
+					case 0:
+						pShape->Add_Point(xPos, yPos);
+						break;
+
+					case 1:
+						pShape->Add_Point(xPos                 , yPos                 );
+						pShape->Add_Point(xPos + Get_Cellsize(), yPos                 );
+						pShape->Add_Point(xPos + Get_Cellsize(), yPos + Get_Cellsize());
+						pShape->Add_Point(xPos                 , yPos + Get_Cellsize());
+						break;
+					}
 
-					pPoint->Set_Value(0, ++iPoint);
-					pPoint->Set_Value(1, xPos);
-					pPoint->Set_Value(2, yPos);
+					pShape->Set_Value(0, ++iPoint);
+					pShape->Set_Value(1, xPos);
+					pShape->Set_Value(2, yPos);
 
 					for(iGrid=0; iGrid<pGrids->Get_Count(); iGrid++)
 					{
 						pGrid	= pGrids->asGrid(iGrid);
 
-						pPoint->Set_Value(iGrid + 3, pGrid->is_NoData(x, y) ? -99999 : pGrid->asDouble(x, y, bZFactor));
+						pShape->Set_Value(iGrid + 3, pGrid->is_NoData(x, y) ? -99999 : pGrid->asDouble(x, y, bZFactor));
 					}
 				}
 			}
 		}
 
-		return( pPoints->Get_Count() > 0 );
+		return( pShapes->Get_Count() > 0 );
 	}
 
 	return( false );
diff --git a/src/modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp b/src/modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp
index 3bf56cf..9c4bcaf 100644
--- a/src/modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp
+++ b/src/modules/shapes/shapes_grid/Grid_Values_AddTo_Shapes.cpp
@@ -134,7 +134,7 @@ bool CGrid_Values_AddTo_Shapes::On_Execute(void)
 	//-----------------------------------------------------
 	pGrids		= Parameters("GRIDS")->asGridList();
 
-	if( pGrids->Get_Count() > 0 && Parameters("SHAPES")->asShapes()->Get_Type() == SHAPE_TYPE_Point )
+	if( pGrids->Get_Count() > 0 )
 	{
 		pResult		= Parameters("RESULT")->asShapes();
 		Interpol	= Parameters("INTERPOL")->asInt();
diff --git a/src/modules/shapes/shapes_grid/Makefile.in b/src/modules/shapes/shapes_grid/Makefile.in
index e483ed6..63b87db 100644
--- a/src/modules/shapes/shapes_grid/Makefile.in
+++ b/src/modules/shapes/shapes_grid/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/shapes/shapes_grid
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -109,6 +115,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -158,14 +166,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -209,9 +230,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/shapes/shapes_lines/MLB_Interface.cpp b/src/modules/shapes/shapes_lines/MLB_Interface.cpp
index ea6ae99..0448c1f 100644
--- a/src/modules/shapes/shapes_lines/MLB_Interface.cpp
+++ b/src/modules/shapes/shapes_lines/MLB_Interface.cpp
@@ -94,6 +94,8 @@ const SG_Char * Get_Info(int i)
 #include "Lines_From_Polygons.h"
 #include "Lines_From_Points.h"
 #include "line_properties.h"
+#include "line_polygon_intersection.h"
+#include "line_simplification.h"
 
 
 //---------------------------------------------------------
@@ -103,9 +105,11 @@ CSG_Module *		Create_Module(int i)
 {
 	switch( i )
 	{
-	case 0:		return( new CLines_From_Polygons );
-	case 1:		return( new CLines_From_Points );
-	case 2:		return( new CLine_Properties );
+	case  0:	return( new CLines_From_Polygons );
+	case  1:	return( new CLines_From_Points );
+	case  2:	return( new CLine_Properties );
+	case  3:	return( new CLine_Polygon_Intersection );
+	case  4:	return( new CLine_Simplification );
 	}
 
 	return( NULL );
diff --git a/src/modules/shapes/shapes_lines/Makefile.am b/src/modules/shapes/shapes_lines/Makefile.am
index f9ca9be..33d601d 100644
--- a/src/modules/shapes/shapes_lines/Makefile.am
+++ b/src/modules/shapes/shapes_lines/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.8 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.10 2010/10/27 09:27:31 oconrad Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
@@ -15,11 +15,15 @@ pkglib_LTLIBRARIES = libshapes_lines.la
 libshapes_lines_la_SOURCES =\
 Lines_From_Points.cpp\
 Lines_From_Polygons.cpp\
+line_polygon_intersection.cpp\
 line_properties.cpp\
+line_simplification.cpp\
 MLB_Interface.cpp\
 Lines_From_Points.h\
 Lines_From_Polygons.h\
+line_polygon_intersection.h\
 line_properties.h\
+line_simplification.h\
 MLB_Interface.h
 
 libshapes_lines_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
diff --git a/src/modules/shapes/shapes_lines/Makefile.in b/src/modules/shapes/shapes_lines/Makefile.in
index 8e28059..1175e56 100644
--- a/src/modules/shapes/shapes_lines/Makefile.in
+++ b/src/modules/shapes/shapes_lines/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/shapes/shapes_lines
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -69,7 +75,8 @@ LTLIBRARIES = $(pkglib_LTLIBRARIES)
 libshapes_lines_la_DEPENDENCIES =  \
 	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
 am_libshapes_lines_la_OBJECTS = Lines_From_Points.lo \
-	Lines_From_Polygons.lo line_properties.lo MLB_Interface.lo
+	Lines_From_Polygons.lo line_polygon_intersection.lo \
+	line_properties.lo line_simplification.lo MLB_Interface.lo
 libshapes_lines_la_OBJECTS = $(am_libshapes_lines_la_OBJECTS)
 DEFAULT_INCLUDES = -I. at am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -105,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -154,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -205,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -218,7 +244,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.8 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.10 2010/10/27 09:27:31 oconrad Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_TRUE at UC_DEFS = -D_SAGA_UNICODE
@@ -230,11 +256,15 @@ pkglib_LTLIBRARIES = libshapes_lines.la
 libshapes_lines_la_SOURCES = \
 Lines_From_Points.cpp\
 Lines_From_Polygons.cpp\
+line_polygon_intersection.cpp\
 line_properties.cpp\
+line_simplification.cpp\
 MLB_Interface.cpp\
 Lines_From_Points.h\
 Lines_From_Polygons.h\
+line_polygon_intersection.h\
 line_properties.h\
+line_simplification.h\
 MLB_Interface.h
 
 libshapes_lines_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
@@ -315,7 +345,9 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Lines_From_Points.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Lines_From_Polygons.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/line_polygon_intersection.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/line_properties.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/line_simplification.Plo at am__quote@
 
 .cpp.o:
 @am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
diff --git a/src/modules/shapes/shapes_lines/line_polygon_intersection.cpp b/src/modules/shapes/shapes_lines/line_polygon_intersection.cpp
new file mode 100644
index 0000000..ce6ffb3
--- /dev/null
+++ b/src/modules/shapes/shapes_lines/line_polygon_intersection.cpp
@@ -0,0 +1,292 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     shapes_lines                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//             line_polygon_intersection.cpp             //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "line_polygon_intersection.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CLine_Polygon_Intersection::CLine_Polygon_Intersection(void)
+{
+	//-----------------------------------------------------
+	Set_Name		(_TL("Line-Polygon Intersection"));
+
+	Set_Author		(SG_T("O. Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		"Line-polygon intersection."
+	));
+
+	//-----------------------------------------------------
+	Parameters.Add_Shapes(
+		NULL	, "LINES"		, _TL("Lines"),
+		_TL(""),
+		PARAMETER_INPUT, SHAPE_TYPE_Line
+	);
+
+	Parameters.Add_Shapes(
+		NULL	, "POLYGONS"	, _TL("Polygons"),
+		_TL(""),
+		PARAMETER_INPUT, SHAPE_TYPE_Polygon
+	);
+
+	Parameters.Add_Shapes(
+		NULL	, "INTERSECT"	, _TL("Intersection"),
+		_TL(""),
+		PARAMETER_OUTPUT, SHAPE_TYPE_Line
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "METHOD"		, _TL("Output"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("one multi-line per polygon"),
+			_TL("keep original line attributes")
+		), 1
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CLine_Polygon_Intersection::On_Execute(void)
+{
+	int			Method;
+	CSG_Shapes	*pLines, *pPolygons, *pNew_Lines, New_Lines;
+
+	pLines		= Parameters("LINES")		->asShapes();
+	pPolygons	= Parameters("POLYGONS")	->asShapes();
+	pNew_Lines	= Parameters("INTERSECT")	->asShapes();
+
+	Method		= Parameters("METHOD")		->asInt();
+
+	if(	!pLines   ->is_Valid() || pLines   ->Get_Count() < 1
+	||	!pPolygons->is_Valid() || pPolygons->Get_Count() < 1
+	||	pLines->Get_Extent().Intersects(pPolygons->Get_Extent()) == INTERSECTION_None )
+	{
+		Error_Set(_TL("no shapes for intersection found"));
+
+		return( false );
+	}
+
+	//--------------------------------------------------------
+	switch( Method )
+	{
+	case 0:
+		pNew_Lines->Create(SHAPE_TYPE_Line,
+			CSG_String::Format(SG_T("%s [%s: %s]"), pLines->Get_Name(), _TL("Intersection"), pPolygons->Get_Name()),
+			pPolygons
+		);
+		break;
+
+	case 1: default:
+		pNew_Lines->Create(SHAPE_TYPE_Line,
+			CSG_String::Format(SG_T("%s [%s: %s]"), pLines->Get_Name(), _TL("Intersection"), pPolygons->Get_Name()),
+			pLines
+		);
+		break;
+	}
+
+	New_Lines.Create(SHAPE_TYPE_Line, NULL, pLines);
+
+	//--------------------------------------------------------
+	for(int iPolygon=0; iPolygon<pPolygons->Get_Count() && Set_Progress(iPolygon, pPolygons->Get_Count()); iPolygon++)
+	{
+		if( Get_Intersection((CSG_Shape_Polygon *)pPolygons->Get_Shape(iPolygon), pLines, New_Lines) )
+		{
+			switch( Method )
+			{
+			case 0:
+				{
+					CSG_Shape	*pNew_Line	= pNew_Lines->Add_Shape(pPolygons->Get_Shape(iPolygon), SHAPE_COPY_ATTR);
+
+					for(int iLine=0, jPart=0; iLine<New_Lines.Get_Count(); iLine++, jPart++)
+					{
+						CSG_Shape	*pLine	= New_Lines.Get_Shape(iLine);
+
+						for(int iPart=0; iPart<pLine->Get_Part_Count(); iPart++, jPart++)
+						{
+							for(int iPoint=0; iPoint<pLine->Get_Point_Count(iPart); iPoint++)
+							{
+								pNew_Line->Add_Point(pLine->Get_Point(iPoint), jPart);
+							}
+						}
+					}
+				}
+				break;
+
+			case 1:
+				{
+					for(int iLine=0; iLine<New_Lines.Get_Count(); iLine++)
+					{
+						pNew_Lines->Add_Shape(New_Lines.Get_Shape(iLine));
+					}
+				}
+				break;
+			}
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CLine_Polygon_Intersection::Get_Intersection(CSG_Shape_Polygon *pPolygon, CSG_Shapes *pLines, CSG_Shapes &New_Lines)
+{
+	if( !pLines->Select(pPolygon->Get_Extent()) )
+	{
+		return( false );
+	}
+
+	New_Lines.Del_Records();
+
+	for(int iSelection=0; iSelection<pLines->Get_Selection_Count(); iSelection++)
+	{
+		CSG_Shape	*pNew_Line, *pLine	= pLines->Get_Selection(iSelection);
+
+		for(int iPart=0; iPart<pLine->Get_Part_Count(); iPart++)
+		{
+			TSG_Point	B, A	= pLine->Get_Point(0, iPart);
+
+			if( pPolygon->is_Containing(A) )
+			{
+				pNew_Line	= New_Lines.Add_Shape(pLine, SHAPE_COPY_ATTR);
+				pNew_Line	->Add_Point(A);
+			}
+			else
+			{
+				pNew_Line	= NULL;
+			}
+
+			for(int iPoint=1; iPoint<pLine->Get_Point_Count(iPart); iPoint++)
+			{
+				B	= A;
+				A	= pLine->Get_Point(iPoint, iPart);
+
+				if( pNew_Line )
+				{
+					if( pPolygon->is_Containing(A) )
+					{
+						pNew_Line	->Add_Point(A);
+					}
+					else
+					{
+						pNew_Line	->Add_Point(Get_Intersection(pPolygon, A, B));
+						pNew_Line	= NULL;
+					}
+				}
+				else if( pPolygon->is_Containing(A) )
+				{
+					pNew_Line	= New_Lines.Add_Shape(pLine, SHAPE_COPY_ATTR);
+					pNew_Line	->Add_Point(Get_Intersection(pPolygon, A, B));
+					pNew_Line	->Add_Point(A);
+				}
+			}
+		}
+	}
+
+	return( New_Lines.Get_Count() > 0 );
+}
+
+//---------------------------------------------------------
+TSG_Point CLine_Polygon_Intersection::Get_Intersection(CSG_Shape_Polygon *pPolygon, const TSG_Point &a, const TSG_Point &b)
+{
+	TSG_Point	c	= a;
+
+	for(int iPart=0; iPart<pPolygon->Get_Part_Count(); iPart++)
+	{
+		TSG_Point	A, B;
+
+		B	= pPolygon->Get_Point(pPolygon->Get_Point_Count(iPart) - 1, iPart);
+
+		for(int iPoint=0; iPoint<pPolygon->Get_Point_Count(iPart); iPoint++)
+		{
+			A	= B;
+			B	= pPolygon->Get_Point(iPoint, iPart);
+
+			if( SG_Get_Crossing(c, A, B, a, b) )
+			{
+				return( c );
+			}
+		}
+	}
+
+	return( c );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules/shapes/shapes_lines/line_polygon_intersection.h b/src/modules/shapes/shapes_lines/line_polygon_intersection.h
new file mode 100644
index 0000000..a325152
--- /dev/null
+++ b/src/modules/shapes/shapes_lines/line_polygon_intersection.h
@@ -0,0 +1,107 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     shapes_lines                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//              line_polygon_intersection.h              //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__line_polygon_intersection_H
+#define HEADER_INCLUDED__line_polygon_intersection_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CLine_Polygon_Intersection : public CSG_Module  
+{
+public:
+	CLine_Polygon_Intersection(void);
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+private:
+
+	bool					Get_Intersection	(CSG_Shape_Polygon *pPolygon, CSG_Shapes *pLines, CSG_Shapes &New_Lines);
+
+	TSG_Point				Get_Intersection	(CSG_Shape_Polygon *pPolygon, const TSG_Point &a, const TSG_Point &b);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__line_polygon_intersection_H
diff --git a/src/modules/shapes/shapes_lines/line_simplification.cpp b/src/modules/shapes/shapes_lines/line_simplification.cpp
new file mode 100644
index 0000000..dbfaa52
--- /dev/null
+++ b/src/modules/shapes/shapes_lines/line_simplification.cpp
@@ -0,0 +1,317 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     shapes_lines                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                line_simplification.cpp                //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "line_simplification.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CStack : public CSG_Stack
+{
+public:
+	CStack(void) : CSG_Stack(2 * sizeof(int))	{}
+
+	bool		Push	(int iAnchor, int iFloater)
+	{
+		int		*Record	= (int *)Get_Record_Push();
+
+		if( Record )
+		{
+			Record[0]	= iAnchor;
+			Record[1]	= iFloater;
+
+			return( true );
+		}
+
+		return( false );
+	}
+
+	bool		Pop		(int &iAnchor, int &iFloater)
+	{
+		int		*Record	= (int *)Get_Record_Pop();
+
+		if( Record )
+		{
+			iAnchor		= Record[0];
+			iFloater	= Record[1];
+
+			return( true );
+		}
+
+		return( false );
+	}
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CLine_Simplification::CLine_Simplification(void)
+{
+	//-----------------------------------------------------
+	Set_Name		(_TL("Line Simplification"));
+
+	Set_Author		(SG_T("O. Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		"Line simplification implementing the Ramer–Douglas–Peucker algorithm.\n"
+		"\n"
+		"Refererences:\n"
+		"- Ramer, U. (1972): An iterative procedure for the polygonal approximation of plane curves. Computer Graphics and Image Processing, 1(3), 244–256\n"
+		"- Douglas, D., Peucker, T. (1973): Algorithms for the reduction of the number of points required to represent a digitized line or its caricature. The Canadian Cartographer 10(2), 112–122\n"
+		"\n"
+		"- Polyline Reduction source code at <a target=\"_blank\" href=\"http://mappinghacks.com/code/PolyLineReduction/\">mappinghacks.com</a>\n"
+	));
+
+	//-----------------------------------------------------
+	Parameters.Add_Shapes(
+		NULL	, "LINES"		, _TL("Lines"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Shapes(
+		NULL	, "OUTPUT"		, _TL("Simplified Lines"),
+		_TL("If not set points will be removed from the orignal lines layer."),
+		PARAMETER_OUTPUT_OPTIONAL
+	);
+
+	Parameters.Add_Value(
+		NULL	, "TOLERANCE"	, _TL("Tolerance"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 1.0, 0.0, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CLine_Simplification::On_Execute(void)
+{
+	CSG_Shapes	*pLines	= Parameters("LINES")->asShapes();
+
+	if(	!pLines->is_Valid() || pLines->Get_Count() <= 0 )
+	{
+		Error_Set(_TL("invalid or empty shapes layer"));
+
+		return( false );
+	}
+
+	if(	pLines->Get_Type() != SHAPE_TYPE_Line && pLines->Get_Type() != SHAPE_TYPE_Polygon )
+	{
+		Error_Set(_TL("line simplification can only be applied to lines and polygons"));
+
+		return( false );
+	}
+
+	if( Parameters("OUTPUT")->asShapes() && Parameters("OUTPUT")->asShapes() != pLines )
+	{
+		pLines	= Parameters("OUTPUT")->asShapes();
+		pLines->Create(*Parameters("LINES")->asShapes());
+	}
+
+	//-----------------------------------------------------
+	CSG_Array	Keep(sizeof(bool));
+
+	m_Tolerance		= Parameters("TOLERANCE")->asDouble();
+
+	int	nTotal		= 0;
+	int	nRemoved	= 0;
+
+	for(int iLine=0; iLine<pLines->Get_Count() && Set_Progress(iLine, pLines->Get_Count()); iLine++)
+	{
+		CSG_Shape	*pLine	= pLines->Get_Shape(iLine);
+
+		for(int iPart=0; iPart<pLine->Get_Part_Count(); iPart++)
+		{
+			nTotal	+= pLine->Get_Point_Count(iPart);
+
+			Keep.Set_Array(pLine->Get_Point_Count(iPart), false);
+
+			if( Simplify(pLine, iPart, (bool *)Keep.Get_Array()) )
+			{
+				for(int iPoint=pLine->Get_Point_Count(iPart)-1; iPoint>=0; iPoint--)
+				{
+					if( !((bool *)Keep.Get_Array())[iPoint] )
+					{
+						pLine->Del_Point(iPoint, iPart);
+
+						nRemoved	++;
+					}
+				}
+			}
+		}
+	}
+
+	Message_Add(CSG_String::Format(SG_T("\n%s: %0.2f%% (%d / %d)"), _TL("Reduction"), 100.0 * nRemoved / (double)nTotal, nRemoved, nTotal), false);
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CLine_Simplification::Simplify(CSG_Shape *pLine, int iPart, bool *Keep)
+{
+	int			iVertexMax, iVertex, iAnchor, iFloater;
+	double		dVertexMax, dVertex, dLength, dProjScalar;
+	TSG_Point	Anchor, Floater, Vertex, vAnchor, vVertex;
+	CStack		Stack;
+ 
+	memset(Keep, 0, sizeof(bool) * pLine->Get_Point_Count(iPart));
+
+	Stack.Push(0, pLine->Get_Point_Count(iPart) - 1);
+
+	while( Stack.Pop(iAnchor, iFloater) && Process_Get_Okay() )
+	{
+		Anchor		= pLine->Get_Point(iAnchor , iPart);
+		Floater		= pLine->Get_Point(iFloater, iPart);
+
+		while( Anchor.x == Floater.x && Anchor.y == Floater.y )
+		{
+			if( iAnchor >= iFloater - 1 )
+			{
+				return( false );
+			}
+
+			Keep[iFloater--]	= iAnchor == 0 && iFloater == pLine->Get_Point_Count(iPart) - 1;
+			Floater				= pLine->Get_Point(iFloater, iPart);
+		}
+
+		vAnchor.x	= Floater.x - Anchor.x;
+		vAnchor.y	= Floater.y - Anchor.y;
+		dLength		= SG_Get_Length(vAnchor.x, vAnchor.y);
+		vAnchor.x	= vAnchor.x / dLength;
+		vAnchor.y	= vAnchor.y / dLength;
+
+		for(iVertex=iVertexMax=iAnchor+1, dVertexMax=0.0; iVertex<iFloater; iVertex++)
+		{
+			Vertex		= pLine->Get_Point(iVertex, iPart);
+
+			vVertex.x	= Vertex.x - Anchor.x;
+			vVertex.y	= Vertex.y - Anchor.y;
+			dLength		= SG_Get_Length(Vertex.x, Vertex.y);
+			dProjScalar	= vVertex.x * vAnchor.x + vVertex.y * vAnchor.y;	//dot product:
+
+			if( dProjScalar < 0.0 )
+			{
+				dVertex = dLength;
+			}
+			else
+			{
+				vVertex.x		= Vertex.x - Floater.x;
+				vVertex.y		= Vertex.y - Floater.y;
+				dLength			= SG_Get_Length(vVertex.x, vVertex.y);
+				dProjScalar		= vVertex.x * (-vAnchor.x) + vVertex.y * (-vAnchor.y);	//dot product:
+
+				if( dProjScalar < 0.0 )
+				{
+					dVertex		= dLength;
+				}
+				else //calculate perpendicular distance to line (pythagorean theorem):
+				{
+					dVertex		= sqrt(fabs(dLength*dLength - dProjScalar*dProjScalar));
+				}
+			}
+
+			if( dVertexMax < dVertex )
+			{
+				dVertexMax		= dVertex;
+				iVertexMax		= iVertex;
+			}
+		}
+
+		if( dVertexMax <= m_Tolerance )
+		{
+			Keep[iAnchor]	= true;
+			Keep[iFloater]	= true;
+		}
+		else
+		{
+			Stack.Push(iAnchor   , iVertexMax);
+			Stack.Push(iVertexMax, iFloater  );
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules/shapes/shapes_lines/line_simplification.h b/src/modules/shapes/shapes_lines/line_simplification.h
new file mode 100644
index 0000000..dbf9dc0
--- /dev/null
+++ b/src/modules/shapes/shapes_lines/line_simplification.h
@@ -0,0 +1,108 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     shapes_lines                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                 line_simplification.h                 //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__line_simplification_H
+#define HEADER_INCLUDED__line_simplification_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CLine_Simplification : public CSG_Module  
+{
+public:
+	CLine_Simplification(void);
+
+
+protected:
+
+	virtual bool			On_Execute	(void);
+
+
+private:
+
+	double					m_Tolerance;
+
+
+	bool					Simplify	(CSG_Shape *pLine, int iPart, bool *Keep);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__line_simplification_H
diff --git a/src/modules/shapes/shapes_points/Makefile.in b/src/modules/shapes/shapes_points/Makefile.in
index 6b5b70b..6b716b4 100644
--- a/src/modules/shapes/shapes_points/Makefile.in
+++ b/src/modules/shapes/shapes_points/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/shapes/shapes_points
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -108,6 +114,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -157,14 +165,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -208,9 +229,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/shapes/shapes_polygons/Makefile.in b/src/modules/shapes/shapes_polygons/Makefile.in
index 0d8fec6..43c11bd 100644
--- a/src/modules/shapes/shapes_polygons/Makefile.in
+++ b/src/modules/shapes/shapes_polygons/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/shapes/shapes_polygons
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -108,6 +114,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -157,14 +165,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -208,9 +229,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/shapes/shapes_polygons/Polygon_Clipper.cpp b/src/modules/shapes/shapes_polygons/Polygon_Clipper.cpp
index c54a355..5a06e8e 100644
--- a/src/modules/shapes/shapes_polygons/Polygon_Clipper.cpp
+++ b/src/modules/shapes/shapes_polygons/Polygon_Clipper.cpp
@@ -275,7 +275,7 @@ Copyright: (C) 1997-1999, Advanced Interfaces Group,
 							void	**pPointer	= ((void **)&p);\
                             *pPointer= malloc(b); if (!(p)) { \
                             fprintf(stderr, "gpc malloc failure: %s\n", s); \
-				            exit(0);}} else p= NULL;}
+				            }} else p= NULL;}
 
 #define FREE(p)            {if (p) {free(p); (p)= NULL;}}
 
diff --git a/src/modules/shapes/shapes_tools/CreateWebContent.cpp b/src/modules/shapes/shapes_tools/CreateWebContent.cpp
deleted file mode 100644
index d96ba76..0000000
--- a/src/modules/shapes/shapes_tools/CreateWebContent.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/*******************************************************************************
-    PhotoLinks.cpp
-    Copyright (C) Victor Olaya
-
-    This program 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.
-
-    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 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 "CreateWebContent.h"
-#include <saga_api/doc_html.h>
-
-CCreateWebContent::CCreateWebContent(void)
-{
-	CSG_Parameter *pNode;
-	
-	//-----------------------------------------------------
-	Parameters.Set_Name(_TL("Create Web Content"));
-
-	Parameters.Set_Description(_TL(""));
-
-	pNode = Parameters.Add_Shapes(NULL, 
-						"SHAPES", 
-						_TL("Shapes"),
-						_TL(""),
-						PARAMETER_INPUT);
-
-	Parameters.Add_Table_Field(pNode,
-								"NAME",
-								_TL("Name Field"),
-								_TL(""));
-	
-	Parameters.Add_FilePath(NULL,
-							"OUTPUTPATH",
-							_TL("Path for HTML Files"),
-							_TL(""),
-							_TL(""),
-							_TL(""),
-							true,
-							true);
-
-}
-
-CCreateWebContent::~CCreateWebContent(void)
-{}
-
-bool CCreateWebContent::On_Execute(void)
-{
-	m_bDown	= false;
-	m_pShapes = Parameters("SHAPES")->asShapes();
-
-	m_iNameField = Parameters("NAME")->asInt();
-	m_sOutputPath = Parameters("OUTPUTPATH")->asString();
-
-	m_pShapes->Add_Field("HTML", SG_DATATYPE_String);
-	m_iField = m_pShapes->Get_Field_Count() - 1;
-	
-	m_Pictures = new std::vector<CSG_String> [m_pShapes->Get_Count()];
-	m_Links = new std::vector<CSG_String> [m_pShapes->Get_Count()];
-	m_LinksDescription = new std::vector<CSG_String> [m_pShapes->Get_Count()];
-
-	return true ;
-}
-
-bool CCreateWebContent::On_Execute_Position(CSG_Point ptWorld, TSG_Module_Interactive_Mode Mode)
-{
-	int i;
-	int iIndex, iShape;
-	CSG_Rect r;
-
-	switch( Mode ){
-	case MODULE_INTERACTIVE_LDOWN:
-		
-		if( m_bDown == false ){
-			m_bDown	= true;
-			m_ptDown = ptWorld;
-		}//if
-		
-		return true ;
-
-	case MODULE_INTERACTIVE_LUP:
-		if( m_bDown == true ){
-			m_bDown	= false;
-
-			r.Assign(m_ptDown.Get_X(), m_ptDown.Get_Y(), ptWorld.Get_X(), ptWorld.Get_Y());
-
-			if( r.Get_XRange() == 0.0 && r.Get_YRange() == 0.0 ){
-				m_pShapes->Select(m_pShapes->Get_Shape(m_ptDown), is_Shift());
-			}//if
-			else{
-				m_pShapes->Select(r, is_Shift());
-			}//else
-
-			DataObject_Update(m_pShapes, true);
-			
-		}//if
-		
-		return true;
-
-	case MODULE_INTERACTIVE_RDOWN:
-
-		CSG_String	sFileName;
-		CSG_Strings	files;
-		CSG_Parameters	dlg_files;
-		dlg_files.Add_FilePath(NULL, "FILES", _TL("Files"), _TL(""), _TL("Images|*.bmp;*.jpg;*.png;*.tif|HTML Files|*.htm|All Files|*.*"), NULL, false, false, true);
-
-		if( Dlg_Parameters(&dlg_files, _TL("Add Link to Files")) && dlg_files("FILES")->asFilePath()->Get_FilePaths(files) )
-		{
-			for (iShape = 0; iShape < m_pShapes->Get_Selection_Count(); iShape++){
-				iIndex = m_pShapes->Get_Selection(iShape)->Get_Index();
-				for (i = 0; i < files.Get_Count(); i++)
-				{
-					sFileName = "file://";
-					sFileName.Append((CSG_String)files[i]);
-					if (SG_File_Cmp_Extension (files[i],SG_T("htm"))){						
-						m_LinksDescription[iIndex].push_back(SG_File_Get_Name(files[i], true));
-						m_Links[iIndex].push_back(sFileName);
-					}//if
-					else if (  SG_File_Cmp_Extension (files[i],SG_T("bmp")) 
-							|| SG_File_Cmp_Extension (files[i],SG_T("jpg")) 
-							|| SG_File_Cmp_Extension (files[i],SG_T("png")) 				
-							|| SG_File_Cmp_Extension (files[i],SG_T("tif"))){
-						m_Pictures[iIndex].push_back(sFileName);
-					}//else
-				}				
-				sFileName = SG_File_Make_Path(m_sOutputPath.c_str(), m_pShapes->Get_Shape(iIndex)->asString(m_iNameField), SG_T("htm"));
-				m_pShapes->Get_Shape(iIndex)->Set_Value(m_iField, sFileName);
-			}
-		}
-		break;
-
-	}//switch
-
-	return false ;
-
-}//method
-
-bool CCreateWebContent::On_Execute_Finish(void){
-
-	int i,j;
-	CSG_String sFileName;
-	CSG_Doc_HTML HTMLDoc;
-
-	for (i = 0; i < m_pShapes->Get_Count(); i++){
-		Set_Progress(i, m_pShapes->Get_Count());
-		const SG_Char **Pictures;
-
-		if (m_Pictures[i].size() || m_Links[i].size()){
-			HTMLDoc.Open(m_pShapes->Get_Shape(i)->asString(m_iNameField));
-			Pictures = new const SG_Char *[m_Pictures[i].size()];
-			for (j = 0; j < m_Pictures[i].size(); j++){
-				Pictures[j] = m_Pictures[i].at(j).c_str();
-			}//for*/
-		
-			HTMLDoc.AddThumbnails(Pictures, m_Pictures[i].size(), 4);
-			HTMLDoc.AddLineBreak();
-			for (j = 0; j < m_Links[i].size(); j++){
-				HTMLDoc.AddHyperlink(m_LinksDescription[i].at(j).c_str(), m_Links[i].at(j).c_str());
-				HTMLDoc.AddLineBreak();
-			}//for
-
-			sFileName = SG_File_Make_Path(m_sOutputPath.c_str(), m_pShapes->Get_Shape(i)->asString(m_iNameField), SG_T("htm"));
-			HTMLDoc.Save(sFileName);
-		}//if
-
-	}//for
-
-	return true;
-
-}//method
diff --git a/src/modules/shapes/shapes_tools/CreateWebContent.h b/src/modules/shapes/shapes_tools/CreateWebContent.h
deleted file mode 100644
index 2f134a1..0000000
--- a/src/modules/shapes/shapes_tools/CreateWebContent.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
-    Photolinks.h
-    Copyright (C) Victor Olaya
-    
-    This program 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.
-
-    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 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
-*******************************************************************************/ 
-
-#ifndef HEADER_INCLUDED__CreateWebContent_H
-#define HEADER_INCLUDED__CreateWebContent_H
-
-#include "MLB_Interface.h"
-#include <vector>
-
-class CCreateWebContent : public CSG_Module_Interactive
-{
-public:
-
-	CCreateWebContent(void);
-	virtual ~CCreateWebContent(void);
-
-	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("A:Shapes|Reports") );	}
-
-protected:
-
-	virtual bool				On_Execute(void);
-	virtual bool				On_Execute_Position(CSG_Point ptWorld, TSG_Module_Interactive_Mode Mode);
-	virtual bool				On_Execute_Finish(void);
-
-private:
-
-	bool						m_bDown;
-	CSG_Point					m_ptDown;
-	CSG_Shapes						*m_pShapes;
-	int							m_iField, m_iNameField;
-	CSG_String					m_sOutputPath;
-
-	std::vector<CSG_String>	*m_Pictures;
-	std::vector<CSG_String>	*m_Links;
-	std::vector<CSG_String>	*m_LinksDescription;
-
-};
-
-#endif // #ifndef HEADER_INCLUDED__CreateWebContent_H
diff --git a/src/modules/shapes/shapes_tools/MLB_Interface.cpp b/src/modules/shapes/shapes_tools/MLB_Interface.cpp
index 81d986c..58f234f 100644
--- a/src/modules/shapes/shapes_tools/MLB_Interface.cpp
+++ b/src/modules/shapes/shapes_tools/MLB_Interface.cpp
@@ -94,8 +94,6 @@ const SG_Char * Get_Info(int i)
 #include "Shapes_Create_Empty.h"
 #include "Shapes_Assign_Table.h"
 #include "Shapes_Merge.h"
-#include "Shapes_Report.h"
-#include "CreateWebContent.h"
 
 #include "QueryBuilder.h"
 #include "SearchInTable.h"
@@ -106,8 +104,6 @@ const SG_Char * Get_Info(int i)
 #include "NewLayerFromSelectedShapes.h"
 #include "GraticuleBuilder.h"
 
-#include "Summarize.h"
-
 #include "shapes_cut.h"
 #include "shapes_cut_interactive.h"
 #include "shapes_split.h"
@@ -137,17 +133,14 @@ CSG_Module *		Create_Module(int i)
 	case  8:	return( new CTransformShapes );
 	case  9:	return( new CCreateChartLayer );
 	case 10:	return( new CGraticuleBuilder );
-	case 11:	return( new CShapes_Report );
-	case 12:	return( new CSummarize );
-	case 13:	return( new CCreateWebContent );
-	case 14:	return( new CShapes_Cut );
-	case 15:	return( new CShapes_Cut_Interactive );
-	case 16:	return( new CShapes_Split );
-	case 17:	return( new CShapes_Split_Randomly );
-	case 18:	return( new CShapes_Split_by_Attribute );
-	case 19:	return( new CShapes_Buffer );
-	case 20:	return( new CShapes_Extents );
-	case 21:	return( new CQuadTree_Structure );
+	case 11:	return( new CShapes_Cut );
+	case 12:	return( new CShapes_Cut_Interactive );
+	case 13:	return( new CShapes_Split );
+	case 14:	return( new CShapes_Split_Randomly );
+	case 15:	return( new CShapes_Split_by_Attribute );
+	case 16:	return( new CShapes_Buffer );
+	case 17:	return( new CShapes_Extents );
+	case 18:	return( new CQuadTree_Structure );
 	}
 
 	return( NULL );
diff --git a/src/modules/shapes/shapes_tools/Makefile.am b/src/modules/shapes/shapes_tools/Makefile.am
index f04483e..30a6f16 100644
--- a/src/modules/shapes/shapes_tools/Makefile.am
+++ b/src/modules/shapes/shapes_tools/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.15 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.16 2010/10/22 09:15:15 oconrad Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
@@ -14,7 +14,6 @@ AM_LDFLAGS         = -fPIC -shared -avoid-version
 pkglib_LTLIBRARIES = libshapes_tools.la
 libshapes_tools_la_SOURCES =\
 CreateChartLayer.cpp\
-CreateWebContent.cpp\
 GraticuleBuilder.cpp\
 Polygon_Clipper.cpp\
 MLB_Interface.cpp\
@@ -28,9 +27,6 @@ SeparateShapes.cpp\
 Shapes_Assign_Table.cpp\
 Shapes_Create_Empty.cpp\
 Shapes_Merge.cpp\
-Shapes_Report.cpp\
-Summarize.cpp\
-SummaryPDFDocEngine.cpp\
 TransformShapes.cpp\
 shapes_buffer.cpp\
 shapes_cut.cpp\
@@ -40,7 +36,6 @@ shapes_split.cpp\
 shapes_split_by_attribute.cpp\
 shapes_split_randomly.cpp\
 CreateChartLayer.h\
-CreateWebContent.h\
 GraticuleBuilder.h\
 Polygon_Clipper.h\
 MLB_Interface.h\
@@ -54,9 +49,6 @@ SeparateShapes.h\
 Shapes_Assign_Table.h\
 Shapes_Create_Empty.h\
 Shapes_Merge.h\
-Shapes_Report.h\
-Summarize.h\
-SummaryPDFDocEngine.h\
 TransformShapes.h\
 shapes_buffer.h\
 shapes_cut.h\
diff --git a/src/modules/shapes/shapes_tools/Makefile.in b/src/modules/shapes/shapes_tools/Makefile.in
index dbca321..182287c 100644
--- a/src/modules/shapes/shapes_tools/Makefile.in
+++ b/src/modules/shapes/shapes_tools/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/shapes/shapes_tools
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -69,15 +75,14 @@ LTLIBRARIES = $(pkglib_LTLIBRARIES)
 libshapes_tools_la_DEPENDENCIES =  \
 	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
 am_libshapes_tools_la_OBJECTS = CreateChartLayer.lo \
-	CreateWebContent.lo GraticuleBuilder.lo Polygon_Clipper.lo \
-	MLB_Interface.lo NewLayerFromSelectedShapes.lo \
-	quadtree_structure.lo QueryBuilder.lo QueryParser.lo \
-	SearchInTable.lo SelectByTheme.lo SeparateShapes.lo \
-	Shapes_Assign_Table.lo Shapes_Create_Empty.lo Shapes_Merge.lo \
-	Shapes_Report.lo Summarize.lo SummaryPDFDocEngine.lo \
-	TransformShapes.lo shapes_buffer.lo shapes_cut.lo \
-	shapes_cut_interactive.lo shapes_extents.lo shapes_split.lo \
-	shapes_split_by_attribute.lo shapes_split_randomly.lo
+	GraticuleBuilder.lo Polygon_Clipper.lo MLB_Interface.lo \
+	NewLayerFromSelectedShapes.lo quadtree_structure.lo \
+	QueryBuilder.lo QueryParser.lo SearchInTable.lo \
+	SelectByTheme.lo SeparateShapes.lo Shapes_Assign_Table.lo \
+	Shapes_Create_Empty.lo Shapes_Merge.lo TransformShapes.lo \
+	shapes_buffer.lo shapes_cut.lo shapes_cut_interactive.lo \
+	shapes_extents.lo shapes_split.lo shapes_split_by_attribute.lo \
+	shapes_split_randomly.lo
 libshapes_tools_la_OBJECTS = $(am_libshapes_tools_la_OBJECTS)
 DEFAULT_INCLUDES = -I. at am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -113,6 +118,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -162,14 +169,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -213,9 +233,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -226,7 +250,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.15 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.16 2010/10/22 09:15:15 oconrad Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_TRUE at UC_DEFS = -D_SAGA_UNICODE
@@ -237,7 +261,6 @@ AM_LDFLAGS = -fPIC -shared -avoid-version
 pkglib_LTLIBRARIES = libshapes_tools.la
 libshapes_tools_la_SOURCES = \
 CreateChartLayer.cpp\
-CreateWebContent.cpp\
 GraticuleBuilder.cpp\
 Polygon_Clipper.cpp\
 MLB_Interface.cpp\
@@ -251,9 +274,6 @@ SeparateShapes.cpp\
 Shapes_Assign_Table.cpp\
 Shapes_Create_Empty.cpp\
 Shapes_Merge.cpp\
-Shapes_Report.cpp\
-Summarize.cpp\
-SummaryPDFDocEngine.cpp\
 TransformShapes.cpp\
 shapes_buffer.cpp\
 shapes_cut.cpp\
@@ -263,7 +283,6 @@ shapes_split.cpp\
 shapes_split_by_attribute.cpp\
 shapes_split_randomly.cpp\
 CreateChartLayer.h\
-CreateWebContent.h\
 GraticuleBuilder.h\
 Polygon_Clipper.h\
 MLB_Interface.h\
@@ -277,9 +296,6 @@ SeparateShapes.h\
 Shapes_Assign_Table.h\
 Shapes_Create_Empty.h\
 Shapes_Merge.h\
-Shapes_Report.h\
-Summarize.h\
-SummaryPDFDocEngine.h\
 TransformShapes.h\
 shapes_buffer.h\
 shapes_cut.h\
@@ -365,7 +381,6 @@ distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CreateChartLayer.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CreateWebContent.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GraticuleBuilder.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NewLayerFromSelectedShapes.Plo at am__quote@
@@ -378,9 +393,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Shapes_Assign_Table.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Shapes_Create_Empty.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Shapes_Merge.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Shapes_Report.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Summarize.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SummaryPDFDocEngine.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TransformShapes.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/quadtree_structure.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shapes_buffer.Plo at am__quote@
diff --git a/src/modules/shapes/shapes_tools/Shapes_Report.cpp b/src/modules/shapes/shapes_tools/Shapes_Report.cpp
deleted file mode 100644
index bb4c034..0000000
--- a/src/modules/shapes/shapes_tools/Shapes_Report.cpp
+++ /dev/null
@@ -1,357 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     Shapes_Tools                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                   Shapes_Report.cpp                   //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//               Olaf Conrad, Victor Olaya               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <saga_api/doc_pdf.h>
-#include "Shapes_Report.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CShapes_Report::CShapes_Report(void)
-{
-	CSG_Parameter	*pNode;
-
-	//-----------------------------------------------------
-	Set_Name		(_TL("Create PDF Report for Shapes Layer"));
-
-	Set_Author		(SG_T("(c) 2005 by O.Conrad, V.Olaya"));
-
-	Set_Description	(_TW(
-		""
-	));
-
-	//-----------------------------------------------------
-	pNode	= Parameters.Add_Shapes(
-		NULL	, "SHAPES"		, _TL("Shapes"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	Parameters.Add_Table_Field(
-		pNode	, "SUBTITLE"	, _TL("Subtitle"),
-		_TL("")
-	);
-
-	Parameters.Add_FilePath(
-		NULL	, "FILENAME"	, _TL("PDF File"),
-		_TL(""),
-		_TL("PDF Files (*.pdf)|*.pdf|All Files|*.*"),
-		_TL(""), true, false
-	);
-
-	Parameters.Add_Choice(
-		NULL	, "PAPER_SIZE"	, _TL("Paper Format"),
-		_TL(""),
-
-		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
-			_TL("A4 Portrait"),
-			_TL("A4 Landscape"),
-			_TL("A3 Portrait"),
-			_TL("A3 Landscape")
-		)
-	);
-
-	Parameters.Add_Value(
-		pNode	, "COLOR_LINE"	, _TL("Line Color"),
-		_TL(""),
-		PARAMETER_TYPE_Color, SG_COLOR_BLACK
-	);
-
-	Parameters.Add_Value(
-		pNode	, "COLOR_FILL"	, _TL("Fill Color"),
-		_TL(""),
-		PARAMETER_TYPE_Color, SG_COLOR_GREEN
-	);
-
-	//-----------------------------------------------------
-	pNode	= Parameters.Add_Node(NULL, "NODE_LAYOUT"	, _TL("Layout"), _TL(""));
-
-	Parameters.Add_Choice(
-		pNode	, "LAYOUT_MODE"	, _TL("Layout"),
-		_TL(""),
-
-		CSG_String::Format(SG_T("%s|%s|"),
-			_TL("horizontal"),
-			_TL("vertical")
-		), 1
-	);
-
-	Parameters.Add_Value(
-		pNode	, "LAYOUT_BREAK", _TL("Map/Table Size Ratio [%]"),
-		_TL(""),
-		PARAMETER_TYPE_Double, 50.0, 0.0, true, 100.0, true
-	);
-
-	//-----------------------------------------------------
-	pNode	= Parameters.Add_Node(NULL, "NODE_TABLE"	, _TL("Attribute Table"), _TL(""));
-
-	Parameters.Add_Value(
-		pNode	, "COLUMNS"		, _TL("Columns"),
-		_TL("Number of atttribute table columns."),
-		PARAMETER_TYPE_Int, 2, 1, true
-	);
-
-	Parameters.Add_Choice(
-		pNode	, "CELL_MODE"	, _TL("Cell Sizes"),
-		_TL(""),
-
-		CSG_String::Format(SG_T("%s|%s|"),
-			_TL("fit to page"),
-			_TL("fixed cell height")
-		)
-	);
-
-	Parameters.Add_Value(
-		pNode	, "CELL_HEIGHT"	, _TL("Cell Height"),
-		_TL(""),
-		PARAMETER_TYPE_Int, 8, 1, true
-	);
-}
-
-//---------------------------------------------------------
-CShapes_Report::~CShapes_Report(void)
-{
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CShapes_Report::On_Execute(void)
-{
-	int				Page_Orientation;
-	TSG_PDF_Page_Size	Page_Size;
-	CSG_String		FileName(Parameters("FILENAME")	->asString());
-	CSG_Doc_PDF	PDF;
-
-	//-----------------------------------------------------
-	m_pShapes		= Parameters("SHAPES")		->asShapes();
-	m_iSubtitle		= Parameters("SUBTITLE")	->asInt();
-	m_Color_Line	= Parameters("COLOR_LINE")	->asColor();
-	m_Color_Fill	= Parameters("COLOR_FILL")	->asColor();
-	m_nColumns		= Parameters("COLUMNS")		->asInt();
-
-	switch( Parameters("CELL_MODE")->asInt() )
-	{
-	default:
-	case 0:	m_Cell_Height	= 0;										break;
-	case 1:	m_Cell_Height	= Parameters("CELL_HEIGHT")->asDouble();	break;
-	}
-
-	switch( Parameters("PAPER_SIZE")->asInt() )
-	{
-	default:
-	case 0:	Page_Size	= PDF_PAGE_SIZE_A4;	Page_Orientation	= PDF_PAGE_ORIENTATION_PORTRAIT;	break;	// A4 Portrait
-	case 1:	Page_Size	= PDF_PAGE_SIZE_A4;	Page_Orientation	= PDF_PAGE_ORIENTATION_LANDSCAPE;	break;	// A4 Landscape
-	case 2:	Page_Size	= PDF_PAGE_SIZE_A3;	Page_Orientation	= PDF_PAGE_ORIENTATION_PORTRAIT;	break;	// A3 Portrait
-	case 3:	Page_Size	= PDF_PAGE_SIZE_A3;	Page_Orientation	= PDF_PAGE_ORIENTATION_LANDSCAPE;	break;	// A3 Landscape
-	}
-
-	//-----------------------------------------------------
-	if( FileName.Length() > 0 && PDF.Open(Page_Size, Page_Orientation, CSG_String::Format(SG_T("%s: %s"), _TL("Summary"), m_pShapes->Get_Name())) )
-	{
-		double	d	= Parameters("LAYOUT_BREAK")->asDouble();
-
-		switch( Parameters("LAYOUT_MODE")->asInt() )
-		{
-		default:
-		case 0:	// horizontal
-			PDF.Layout_Add_Box(  0,   0, 100,   5, "TITLE");
-			PDF.Layout_Add_Box(  0,   5,   d, 100, "SHAPE");
-			PDF.Layout_Add_Box(  d,   5, 100, 100, "TABLE");
-			break;
-
-		case 1:	// vertical
-			PDF.Layout_Add_Box(  0,   0, 100,   5, "TITLE");
-			PDF.Layout_Add_Box(  0,   5, 100,   d, "SHAPE");
-			PDF.Layout_Add_Box(  0,   d, 100, 100, "TABLE");
-			break;
-		}
-
-		m_pPDF		= &PDF;
-
-		m_rTitle	= PDF.Layout_Get_Box("TITLE");
-		m_rShape	= PDF.Layout_Get_Box("SHAPE");
-		m_rTable	= PDF.Layout_Get_Box("TABLE");
-		
-		return( Add_Shapes() && PDF.Save(FileName) );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CShapes_Report::Add_Shapes(void)
-{
-	if( m_pShapes && m_pShapes->is_Valid() && m_pPDF && m_pPDF->Add_Page() )
-	{
-		bool			bAddAll;
-		CSG_Rect		r(m_rShape), rWorld(m_pShapes->Get_Extent());
-		CSG_String		Title;
-		CSG_Strings	sLeft, sRight;
-
-		//-------------------------------------------------
-		m_pPDF->Draw_Text(m_rTitle.Get_XCenter(), m_rTitle.Get_YCenter(), _TL("Overview"), (int)(0.7 * m_rTitle.Get_YRange()), PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_CENTER|PDF_STYLE_TEXT_UNDERLINE);
-
-		//-------------------------------------------------
-		r.Deflate(10, false);
-		rWorld.Inflate(5, true);
-
-		m_pPDF->Draw_Shapes   (r, m_pShapes, PDF_STYLE_POLYGON_FILLSTROKE, m_Color_Fill, m_Color_Line, 0, &rWorld);
-		m_pPDF->Draw_Graticule(r, rWorld, 10);
-
-		//-------------------------------------------------
-		sLeft	.Add(CSG_String::Format(SG_T("%s:")	, _TL("Name")));
-		sRight	.Add(CSG_String::Format(SG_T("%s")	, m_pShapes->Get_Name()));
-		sLeft	.Add(CSG_String::Format(SG_T("%s:")	, _TL("Count")));
-		sRight	.Add(CSG_String::Format(SG_T("%d")	, m_pShapes->Get_Count()));
-
-		m_pPDF->Draw_Text(m_rTable.Get_XMin()   , m_rTable.Get_YMax(), sLeft , 8, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP);
-		m_pPDF->Draw_Text(m_rTable.Get_XCenter(), m_rTable.Get_YMax(), sRight, 8, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP);
-
-		//-------------------------------------------------
-		bAddAll	= m_pShapes->Get_Selection_Count() == 0;
-
-		for(int iShape=0; iShape<m_pShapes->Get_Count() && Set_Progress(iShape, m_pShapes->Get_Count()); iShape++)
-		{
-			if( bAddAll || m_pShapes->Get_Record(iShape)->is_Selected() )
-			{
-				Title.Printf(SG_T("%s: %s"), m_pShapes->Get_Field_Name(m_iSubtitle), m_pShapes->Get_Shape(iShape)->asString(m_iSubtitle));
-
-				Add_Shape(m_pShapes->Get_Shape(iShape), Title);
-			}
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CShapes_Report::Add_Shape(CSG_Shape *pShape, const SG_Char *Title)
-{
-	if( m_pPDF && m_pPDF->Is_Ready_To_Draw() && pShape && pShape->is_Valid() && m_pPDF->Add_Page() )
-	{
-		CSG_Rect	r(m_rShape), rWorld(pShape->Get_Extent());
-
-		//-------------------------------------------------
-		m_pPDF->Add_Outline_Item(Title);
-
-		m_pPDF->Draw_Text(m_rTitle.Get_XCenter(), m_rTitle.Get_YCenter(), Title, (int)(0.7 * m_rTitle.Get_YRange()), PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_CENTER|PDF_STYLE_TEXT_UNDERLINE);
-
-		r.Deflate(10, false);
-		rWorld.Inflate(5, true);
-
-		m_pPDF->Draw_Shape		(r, pShape, PDF_STYLE_POLYGON_FILLSTROKE, m_Color_Fill, m_Color_Line, 0, &rWorld);
-		m_pPDF->Draw_Graticule	(r, rWorld, 10);
-
-		//-------------------------------------------------
-		if( pShape->Get_Table()->Get_Field_Count() > 0 )
-		{
-			CSG_Table_Record	*pRecord;
-			CSG_Table			Table;
-
-			Table.Set_Name(_TL("Attributes"));
-
-			Table.Add_Field(_TL("Attribute"), SG_DATATYPE_String);
-			Table.Add_Field(_TL("Value")	, SG_DATATYPE_String);
-
-			for(int iField=0; iField<pShape->Get_Table()->Get_Field_Count(); iField++)
-			{
-				pRecord	= Table.Add_Record();
-
-				pRecord->Set_Value(0, pShape->Get_Table()->Get_Field_Name(iField));
-				pRecord->Set_Value(1, pShape->asString(iField));
-			}
-
-			m_pPDF->Draw_Table(m_rTable, &Table, m_nColumns, m_Cell_Height, 0.0);
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
diff --git a/src/modules/shapes/shapes_tools/Shapes_Report.h b/src/modules/shapes/shapes_tools/Shapes_Report.h
deleted file mode 100644
index a0bb386..0000000
--- a/src/modules/shapes/shapes_tools/Shapes_Report.h
+++ /dev/null
@@ -1,115 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     Shapes_Tools                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    Shapes_Report.h                    //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//               Olaf Conrad, Victor Olaya               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//                                                       //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__Shapes_Report_H
-#define HEADER_INCLUDED__Shapes_Report_H
-
-//---------------------------------------------------------
-#include "MLB_Interface.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CShapes_Report : public CSG_Module
-{
-public:
-	CShapes_Report(void);
-	virtual ~CShapes_Report(void);
-
-	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("A:Shapes|Reports") );	}
-
-
-protected:
-
-	virtual bool			On_Execute			(void);
-
-
-private:
-
-	int						m_iSubtitle, m_nColumns, m_Color_Line, m_Color_Fill;
-
-	double					m_Cell_Height;
-
-	CSG_Rect				m_rTitle, m_rShape, m_rTable;
-
-	CSG_Shapes					*m_pShapes;
-
-	class CSG_Doc_PDF		*m_pPDF;
-
-
-	bool					Add_Shapes			(void);
-	bool					Add_Shape			(CSG_Shape *pShape, const SG_Char *Title);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__Shapes_Report_H
diff --git a/src/modules/shapes/shapes_tools/Summarize.cpp b/src/modules/shapes/shapes_tools/Summarize.cpp
deleted file mode 100644
index 313287e..0000000
--- a/src/modules/shapes/shapes_tools/Summarize.cpp
+++ /dev/null
@@ -1,312 +0,0 @@
-/*******************************************************************************
-    Summarize.cpp
-    Copyright (C) Victor Olaya
-
-    This program 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.
-
-    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 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 "Summarize.h"
-
-#define VERY_LARGE_NUMBER 9999999999.
-
-CSG_String sParam[] = {"[Sum]", "[Mean]", "[Variance]", "[Minimum]", "[Maximum]"};
-
-CSummarize::CSummarize(void){
-
-	CSG_Parameter *pNode;
-	CSG_String sName;
-
-	Parameters.Set_Name(_TL("Summary"));
-	Parameters.Set_Description(_TW("(c) 2004 by Victor Olaya. summary."));
-
-	pNode = Parameters.Add_Shapes(NULL,
-								"SHAPES",
-								_TL("Shapes"),
-								_TL(""),
-								PARAMETER_INPUT);
-
-	Parameters.Add_Table_Field(pNode,
-								"FIELD",
-								_TL("Field"),
-								_TL(""));
-
-	Parameters.Add_Table(NULL,
-						"TABLE",
-						_TL("Summary Table"),
-						_TL(""),
-						PARAMETER_OUTPUT);
-
-	pNode = Parameters.Add_Node(NULL,
-						"PDFNODE",
-						_TL("PDF Docs"),
-						_TL(""));
-
-	Parameters.Add_Value(pNode,
-						"PDF",
-						_TL("Create PDF Docs"),
-						_TL("Create PDF Docs"),
-						PARAMETER_TYPE_Bool,
-						true);
-
-	Parameters.Add_FilePath(pNode,
-							"OUTPUTPATH",
-							_TL("Folder"),
-							_TL("Folder"),
-							_TL(""),
-							_TL(""),
-							true,
-							true);
-
-	m_pExtraParameters	= Add_Parameters("EXTRA",
-										_TL("Field for Summary"),
-										_TL(""));
-
-}//constructor
-
-
-CSummarize::~CSummarize(void)
-{}
-
-bool CSummarize::On_Execute(void){
-
-	int i,j;
-	CSG_Table *pShapesTable;
-	CSG_Parameter **pExtraParameter;
-	CSG_String sName, sFilePath;
-
-	m_iField = Parameters("FIELD")->asInt();
-	m_pShapes = Parameters("SHAPES")->asShapes();
-	m_pTable = Parameters("TABLE")->asTable();
-
-	pShapesTable = m_pShapes;
-	m_bIncludeParam = new bool [pShapesTable->Get_Field_Count() * 5];
-	pExtraParameter = new CSG_Parameter* [pShapesTable->Get_Field_Count() * 5];
-
-	for (i = 0; i < pShapesTable->Get_Field_Count(); i++){
-		for (j = 0; j < 5; j++){
-			if (pShapesTable->Get_Field_Type(i) > 1 && pShapesTable->Get_Field_Type(i) < 7){ //is numeric field
-				sName = pShapesTable->Get_Field_Name(i);
-				sName.Append(sParam[j]);
-				pExtraParameter[i * 5 + j] = m_pExtraParameters->Add_Value(NULL,
-																			SG_Get_String(i * 5 + j,0).c_str(),
-																			sName.c_str(),
-																			_TL(""),
-																			PARAMETER_TYPE_Bool,
-																			false);
-				m_bIncludeParam[i * 5 + j] = true;
-			}//if
-			else{
-				m_bIncludeParam[i * 5 + j] = false;
-			}//else
-		}//for
-	}//for
-
-	if(Dlg_Parameters("EXTRA")){
-		for (i = 0; i < pShapesTable->Get_Field_Count() * 5; i++){
-			sName = SG_Get_String(i,0);
-			if (m_bIncludeParam[i]){
-				m_bIncludeParam[i] = Get_Parameters("EXTRA")->Get_Parameter(sName.c_str())->asBool();
-			}//if			
-		}//for
-
-		Summarize();
-
-		if (Parameters("PDF")->asBool()){
-			if (Parameters("OUTPUTPATH")->asString()){
-				sName = _TL("Summary_");
-				sName.Append(m_pShapes->Get_Name());
-				m_DocEngine.Open(PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_LANDSCAPE, sName);
-				CreatePDFDocs();
-				sFilePath = SG_File_Make_Path(Parameters("OUTPUTPATH")->asString(), sName, SG_T("pdf"));
-				if (m_DocEngine.Save(sFilePath)){
-					if (!m_DocEngine.Close()){
-						Message_Add(_TL("\n\n ** Error : Could not close PDF engine ** \n\n"));
-					}
-				}//if
-				else{
-					Message_Add(_TL("\n\n ** Error : Could not save PDF file ** \n\n"));
-				}//else
-			}//if
-		}//if
-
-		m_pExtraParameters->Destroy();
-
-		delete [] m_bIncludeParam;
-
-		return true;
-
-	}//if
-
-	m_pExtraParameters->Destroy();
-
-	delete [] m_bIncludeParam;
-
-	return false;
-
-}//method
-
-void CSummarize::CreatePDFDocs(){
-
-	CSG_Shapes *pShapes;
-	CSG_Shape *pShape;
-	CSG_Table *pShapesTable;
-	int i,j;
-	
-	m_DocEngine.Add_Page_Title (_TL("Summary"), PDF_TITLE_01, PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_LANDSCAPE);
-
-	pShapesTable = m_pShapes;
-	pShapes = new CSG_Shapes();
-	for (i = 0; i < m_ClassesID.size(); i++){
-		Set_Progress(i,m_ClassesID.size());
-		pShapes->Create(m_pShapes->Get_Type());
-		for (j = 0; j < m_pShapes->Get_Count(); j++){
-			if (m_pClasses[j] == i){
-				pShape = pShapes->Add_Shape();
-				pShape->Assign(m_pShapes->Get_Shape(j));
-			}//if
-		}//for
-		m_DocEngine.AddClassSummaryPage(pShapes, m_pTable, i, m_ClassesID[i]);
-	}//for
-	
-	if (m_pTable->Get_Record_Count() > 1){
-		m_DocEngine.Add_Page_Title (_TL("Statistics"), PDF_TITLE_01, PDF_PAGE_SIZE_A4, PDF_PAGE_ORIENTATION_PORTRAIT);
-		m_DocEngine.AddSummaryStatisticsPage(m_pTable);
-	}//if
-
-	delete pShapes;
-
-}//method
-
-
-void CSummarize::Summarize(){
-
-	int i,j;
-
-	CSG_Table *pShapesTable;
-	CSG_Table_Record *pRecord;
-	CSG_String sName;
-	float *pSum;
-	float *pMin;
-	float *pMax;
-	float *pVar;
-	float fValue;
-	float fMean;
-	int iLastField = -1;
-	int iField;
-	int iParam;
-
-	m_ClassesID.clear();
-
-	pShapesTable = m_pShapes;
-	m_pClasses = new int[pShapesTable->Get_Record_Count()];
-
-	for (i = 0; i < pShapesTable->Get_Record_Count(); i++){
-		pRecord = pShapesTable->Get_Record(i);
-		sName = pRecord->asString(m_iField);
-		for (j = 0; j < m_ClassesID.size(); j++){
-			if (!m_ClassesID[j].CmpNoCase(sName)){
-				m_pClasses[i] = j;
-				break;
-			}//if
-		}//for
-		if (j == m_ClassesID.size()){
-			m_pClasses[i] = j;
-			m_ClassesID.push_back(sName);
-		}//if
-	}//for
-
-	m_pTable->Create((CSG_Table*)NULL);
-	m_pTable->Set_Name(_TL("Summary Table"));
-	m_pTable->Add_Field(_TL("Class"), SG_DATATYPE_String);
-	m_pTable->Add_Field(_TL("Count"), SG_DATATYPE_Int);
-
-	m_pCount = new int[m_ClassesID.size()];
-	pSum = new float[m_ClassesID.size()];
-	pMax = new float[m_ClassesID.size()];
-	pMin = new float[m_ClassesID.size()];
-	pVar = new float[m_ClassesID.size()];
-
-	for (i = 0; i < m_ClassesID.size(); i++){
-		m_pCount[i] = 0;
-	}//for
-
-	for (i = 0; i < pShapesTable->Get_Record_Count(); i++){
-		m_pCount[m_pClasses[i]]++;
-	}//for
-
-	for (i = 0; i < m_ClassesID.size(); i++){
-		pRecord = m_pTable->Add_Record();
-		sName = m_ClassesID[i];
-		pRecord->Set_Value(0,sName.c_str());
-		pRecord->Set_Value(1,m_pCount[i]);
-	}//for
-
-	for (i = 0; i < pShapesTable->Get_Field_Count() * 5; i++){
-		if (m_bIncludeParam[i]){
-			iField = (int) (i / 5);
-			iParam = i % 5;
-			sName = pShapesTable->Get_Field_Name(iField);
-			sName.Append(sParam[iParam]);
-			m_pTable->Add_Field(sName.c_str(), SG_DATATYPE_Double);
-			if (iField != iLastField){
-				for (j = 0; j < m_ClassesID.size(); j++){
-					pSum[j] = 0;
-					pMax[j] = -(float)VERY_LARGE_NUMBER;
-					pMin[j] =  (float)VERY_LARGE_NUMBER;
-					pVar[j] = 0;
-				}//for
-				for (j = 0; j < pShapesTable->Get_Record_Count(); j++){
-					pRecord = pShapesTable->Get_Record(j);
-					fValue = pRecord->asFloat(iField);
-					pSum[m_pClasses[j]] += fValue;
-					pVar[m_pClasses[j]] += (fValue * fValue);
-					if (fValue > pMax[m_pClasses[j]]){
-						 pMax[m_pClasses[j]] = fValue;
-					}//if
-					if (fValue < pMin[m_pClasses[j]]){
-						 pMin[m_pClasses[j]] = fValue;
-					}//if
-				}//for
-			}//if
-			iField = m_pTable->Get_Field_Count() - 1;
-			for (j = 0; j < m_ClassesID.size(); j++){
-				pRecord = m_pTable->Get_Record(j);
-				switch (iParam){
-				case 0: //sum
-					pRecord->Set_Value(iField, pSum[j]);
-					break;
-				case 1: //average
-					pRecord->Set_Value(iField, pSum[j] / (float) m_pCount[j]);
-					break;
-				case 2: //variance
-					fMean = pSum[j] / (float) m_pCount[j];
-					pRecord->Set_Value(iField, pVar[j] / (float) m_pCount[j] - fMean * fMean);
-					break;
-				case 3: //min
-					pRecord->Set_Value(iField, pMin[j]);
-					break;
-				case 4: //max
-					pRecord->Set_Value(iField, pMax[j]);
-					break;
-				default:
-					break;
-				}//switch
-			}//for
-
-		}//if
-
-	}//for
-
-
-}//method
diff --git a/src/modules/shapes/shapes_tools/Summarize.h b/src/modules/shapes/shapes_tools/Summarize.h
deleted file mode 100644
index c4fe4ff..0000000
--- a/src/modules/shapes/shapes_tools/Summarize.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
-    Summarize.h
-    Copyright (C) Victor Olaya
-
-    This program 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.
-
-    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 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 "MLB_Interface.h"
-#include <vector>
-#include "SummaryPDFDocEngine.h"
-
-class CSummarize : public CSG_Module  
-{
-public:
-
-	CSummarize(void);
-	virtual ~CSummarize(void);
-
-	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("A:Shapes|Reports") );	}
-
-protected:
-
-	virtual bool			On_Execute(void);
-
-private:
-
-	int m_iField;
-	CSG_Shapes *m_pShapes;
-	CSG_Table *m_pTable;
-	bool *m_bIncludeParam;
-	std::vector<CSG_String> m_ClassesID;
-	int *m_pClasses;
-	int *m_pCount;
-	CSG_Parameters *m_pExtraParameters;
-	CSummaryPDFDocEngine m_DocEngine;
-	
-	void Summarize();
-	void CreatePDFDocs();
-
-
-};
diff --git a/src/modules/shapes/shapes_tools/SummaryPDFDocEngine.cpp b/src/modules/shapes/shapes_tools/SummaryPDFDocEngine.cpp
deleted file mode 100644
index a12fe40..0000000
--- a/src/modules/shapes/shapes_tools/SummaryPDFDocEngine.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-/*******************************************************************************
-    SummaryPDFDocEngine.cpp
-    Copyright (C) Victor Olaya
-    
-    This program 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.
-
-    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 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 "SummaryPDFDocEngine.h"
-#include <saga_api/saga_api.h>
-
-#ifndef min
-#define min(a,b) (((a) < (b)) ? (a) : (b))
-#endif
-
-CSummaryPDFDocEngine::CSummaryPDFDocEngine(){
-
-}//constructor
-
-CSummaryPDFDocEngine::~CSummaryPDFDocEngine(){}
-
-void CSummaryPDFDocEngine::AddClassSummaryPage(CSG_Shapes *pShapes, 
-											   CSG_Table *pTable,
-											   int iClass,
-											   CSG_String sTitle){
-
-	int i;
-	double fPaperHeight;
-	double fRealWidth, fRealHeight;
-	double fX, fY;
-	CSG_Table *pClassTable;
-	CSG_Table_Record *pRecord;
-	CSG_Rect CanvasExtent, TableExtent;
-	TSG_Rect Extent;
-	
-
-	Add_Page(PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_LANDSCAPE);
-	Add_Outline_Item(sTitle.c_str());
-
-	fPaperHeight = Get_Size_Page().Get_YRange();
-
-	Draw_Text(PDF_PAGE_HEIGHT_A3 - OFFSET_X, fPaperHeight - OFFSET_Y, sTitle, 
-				25, PDF_STYLE_TEXT_ALIGN_H_RIGHT, 0.0, SG_GET_RGB(0, 0, 0));
-
-	Draw_Line(OFFSET_X, fPaperHeight - OFFSET_Y - 5, 
-				PDF_PAGE_HEIGHT_A3 - OFFSET_X, fPaperHeight - OFFSET_Y - 5, 4 );
-
-	Extent = pShapes->Get_Extent();
-	fRealWidth = Extent.xMax - Extent.xMin;
-	fRealHeight = Extent.yMax - Extent.yMin;
-
-	CanvasExtent.Assign(OFFSET_X,
-						OFFSET_Y,
-						OFFSET_X + MAX_SUMMARY_LAYOUT_WIDTH,
-						OFFSET_Y + MAX_SUMMARY_LAYOUT_HEIGHT);
-
-	_Fit_Rectangle(CanvasExtent, fRealWidth / fRealHeight, true);
-
-	CanvasExtent.Deflate(GRATICULE_SEPARATION, false);
-
-	Draw_Shapes(CanvasExtent, pShapes);
-
-	CanvasExtent.Inflate(GRATICULE_SEPARATION, false);
-
-	/*CanvasExtent.xMin = OFFSET_X + (MAX_SUMMARY_LAYOUT_WIDTH - fWidth) / 2. - GRATICULE_SEPARATION;
-	CanvasExtent.xMax = CanvasExtent.xMin + fWidth + 2 * GRATICULE_SEPARATION;
-	CanvasExtent.yMin = OFFSET_Y + (MAX_SUMMARY_LAYOUT_HEIGHT - fHeight) / 2. - GRATICULE_SEPARATION;
-	CanvasExtent.yMax = CanvasExtent.yMin + fHeight + 2* GRATICULE_SEPARATION;*/
-
-	Draw_Graticule(CanvasExtent, Extent);
-
-	pClassTable = SG_Create_Table();
-	pClassTable->Add_Field(_TL("Field"), SG_DATATYPE_String );
-	pClassTable->Add_Field(_TL("Value"), SG_DATATYPE_Double);
-
-	for (i = 0; i < pTable->Get_Field_Count(); i++){
-		pRecord = pClassTable->Add_Record();
-		pRecord->Set_Value(0, pTable->Get_Field_Name(i));
-		pRecord->Set_Value(1, pTable->Get_Record(iClass)->asDouble(i));
-	}
-	fY = fPaperHeight - OFFSET_Y - SUMMARY_LAYOUT_HEADER;
-	fX = PDF_PAGE_HEIGHT_A3 - OFFSET_X - MAX_SUMMARY_TABLE_WIDTH;
-	TableExtent.Assign(fX, fY, fX + MAX_SUMMARY_TABLE_WIDTH, OFFSET_Y);
-
-	Draw_Table(TableExtent, pClassTable, SUMMARY_TABLE_CELL_HEIGHT, 0.0);
-	
-}//method
-
-void CSummaryPDFDocEngine::AddSummaryStatisticsPage(CSG_Table* pTable){
-
-	int i,j;
-	double fX, fY;
-	double fPaperHeight;
-	CSG_Points Data;
-	CSG_String *pNames;
-	CSG_Rect r;
-
-	fPaperHeight = Get_Size_Page().Get_YRange();
-
-	pNames = new CSG_String [pTable->Get_Record_Count()];
-	for (i = 0; i < pTable->Get_Record_Count(); i++){
-		pNames[i] = pTable->Get_Record(i)->asString(0);
-	}//for
-
-	for (i = 1; i < pTable->Get_Field_Count(); i++){
-		if ((i-1)%3 == 0){
-			Add_Page();
-		}//if
-		Data.Clear();
-		for (j = 0; j < pTable->Get_Record_Count(); j++){
-			Data.Add(0.0, pTable->Get_Record(j)->asDouble(i)); 
-		}//for		
-		fY = OFFSET_Y + ((i-1)%3) * (SUMMARY_STATISTICS_GRAPH_HEIGHT + SUMMARY_STATISTICS_GRAPH_SEPARATION);
-		fY = fPaperHeight - fY;
-		fX = OFFSET_X;		
-		Draw_Text(fX, fY + 10, pTable->Get_Field_Name(i), 14);
-		r.Assign(fX, fY - 25 - SUMMARY_STATISTICS_GRAPH_HEIGHT, fX + SUMMARY_STATISTICS_GRAPH_WIDTH, fY - 25 );
-		AddBarGraphStatistics(Data, pNames, r);
-	}//for*/
-
-
-}//method
-
-void CSummaryPDFDocEngine::AddBarGraphStatistics(CSG_Points &Data,
-										CSG_String *pNames,
-										const CSG_Rect &r){
-
-	int i;
-    int iMag;
-	int iNumLines;
-    double fMinLine = 0;
-	double fWidth;
-	double fMax, fMin;
-	double fStep;
-    double fX, fY;
-	double fPaperHeight;
-	double fAngle;
-	CSG_String sValue;
-	CSG_Points Points;
-
-	fPaperHeight = Get_Size_Page().Get_YRange();
-
-	fMin = fMax = Data[0].y;	
-
-	for (i = 0; i < Data.Get_Count(); i++){
-		if (Data[i].y > fMax){
-			fMax = Data[i].y;
-		}
-		if (Data[i].y < fMin){
-			fMin = Data[i].y;
-		}		
-		fMin = M_GET_MIN(0, fMin);		
-    }
-
-	if (fMin != fMax){
-		iMag = (int) (log(fMax - fMin) / log(10.0));
-		fStep =  (pow(10.0, (double) iMag));
-		if (fStep == 0){
-			fStep = 1.;
-		}
-		fMinLine= (long)(((long)(fMin/fStep)) *fStep);
-
-		iNumLines = (int) ((fMax - fMin) / fStep);
-
-		while (iNumLines < 8){
-			fStep = fStep / 2.0;
-			iNumLines = (int) ((fMax - fMin) / fStep);
-		}
-		iNumLines = (int) ((fMax - fMinLine) / fStep);
-	}
-	else{
-		fStep = fMin = 0;
-		iNumLines = 1;
-		fMinLine = fMax;
-	}
-
-
-	for (i = 0; i < iNumLines; i++) {
-        fY = r.Get_YMin() + ((fMinLine + fStep * i - fMin) / (fMax - fMin)) * r.Get_YRange();
-        if (fY <= r.Get_YMax() && fY >= r.Get_YMin()) {
-			Draw_Line(r.Get_XMin(), fY, r.Get_XMax(), fY);
-        }
-    }
-
-	fWidth = (double) r.Get_XRange() / (double) (Data.Get_Count());
-	for (i = 0; i < Data.Get_Count(); i++)
-	{
-	    fX = r.Get_XMin() + i * fWidth;
-		fY = r.Get_YMin();
-		//fY = fPaperHeight - fY;
-		Draw_Rectangle(fX, fY, fX + fWidth,
-				fY + r.Get_YRange() * ((Data[i].y - fMin) / (fMax - fMin)),
-				PDF_STYLE_POLYGON_FILLSTROKE, 0xaa0000);
-	}
-
-	fAngle = 3.14159/ 180 * 60;
-
-	for (i = 0; i < Data.Get_Count(); i++)
-	{
-	    fX = r.Get_XMin() + i * fWidth + fWidth / 2.;
-		Draw_Text(fX - 5, fY - 5, pNames[i], 9, PDF_STYLE_TEXT_ALIGN_V_TOP|PDF_STYLE_TEXT_ALIGN_H_RIGHT, fAngle);
-		Draw_Line(fX, fY, fX, fY - 5, 1);
-    }
-
-	Draw_Line(r.Get_XMin(), r.Get_YMin(), r.Get_XMin(), r.Get_YMax(), 4);
-	Draw_Line(r.Get_XMin(), r.Get_YMin(), r.Get_XMax(), r.Get_YMin(), 4);
-
-										
-}//method
diff --git a/src/modules/shapes/shapes_tools/SummaryPDFDocEngine.h b/src/modules/shapes/shapes_tools/SummaryPDFDocEngine.h
deleted file mode 100644
index bb60fa2..0000000
--- a/src/modules/shapes/shapes_tools/SummaryPDFDocEngine.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
-    SummaryPDFDocEngine.h
-    Copyright (C) Victor Olaya
-    
-    This program 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.
-
-    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 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
-*******************************************************************************/ 
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#include <saga_api/doc_pdf.h>
-
-#define PDF_PAGE_WIDTH_A4       596
-#define PDF_PAGE_HEIGHT_A4      842
-#define PDF_PAGE_WIDTH_A3 PDF_PAGE_HEIGHT_A4
-#define PDF_PAGE_HEIGHT_A3 (sqrt(2.) * PDF_PAGE_HEIGHT_A4)
-#define OFFSET_X 50
-#define OFFSET_Y 50
-#define LINE_SPACEMENT 12
-#define SUMMARY_LAYOUT_HEADER 50
-#define MAX_SUMMARY_LAYOUT_HEIGHT (PDF_PAGE_WIDTH_A3 - 2 * OFFSET_Y - LINE_SPACEMENT)
-#define MAX_SUMMARY_LAYOUT_WIDTH MAX_SUMMARY_LAYOUT_HEIGHT
-#define SUMMARY_LAYOUT_SEPARATION 30
-#define MAX_SUMMARY_TABLE_WIDTH (PDF_PAGE_HEIGHT_A3 - 2 * OFFSET_X - MAX_SUMMARY_LAYOUT_WIDTH - SUMMARY_LAYOUT_SEPARATION)
-#define MAX_ROWS_IN_SUMMARY_LAYOUT (MAX_SUMMARY_LAYOUT_HEIGHT / TABLE_CELL_HEIGHT)
-#define SUMMARY_STATISTICS_GRAPH_HEIGHT 120
-#define SUMMARY_STATISTICS_GRAPH_WIDTH (PDF_PAGE_WIDTH_A4 - 2 * OFFSET_X)
-#define SUMMARY_STATISTICS_GRAPH_SEPARATION 120
-#define GRATICULE_SEPARATION 20
-#define SUMMARY_TABLE_CELL_HEIGHT 13.0
-
-class CSummaryPDFDocEngine : public CSG_Doc_PDF 
-{
-public:
-
-	CSummaryPDFDocEngine();
-	virtual ~CSummaryPDFDocEngine();
-	void AddClassSummaryPage(CSG_Shapes*, CSG_Table*, int, CSG_String);
-	void AddSummaryStatisticsPage(CSG_Table* pTable);
-
-private:
-
-	void AddBarGraphStatistics(CSG_Points &, CSG_String*,	const CSG_Rect &);
-
-};
-
diff --git a/src/modules/shapes/shapes_tools/shapes_buffer.cpp b/src/modules/shapes/shapes_tools/shapes_buffer.cpp
index ba1e3e6..979dbc9 100644
--- a/src/modules/shapes/shapes_tools/shapes_buffer.cpp
+++ b/src/modules/shapes/shapes_tools/shapes_buffer.cpp
@@ -1,803 +1,803 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     shapes_tools                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                   Shapes_Buffer.cpp                   //
-//                                                       //
-//                 Copyright (C) 2008 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Hamburg                  //
-//                Bundesstr. 55                          //
-//                20146 Hamburg                          //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "shapes_buffer.h"
-
-#include "Polygon_Clipper.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CShapes_Buffer::CShapes_Buffer(void)
-{
-	CSG_Parameter	*pNode;
-
-	//-----------------------------------------------------
-	Set_Name		(_TL("Shapes Buffer"));
-
-	Set_Author		(SG_T("(c) 2008 by O.Conrad"));
-
-	Set_Description	(_TW(
-		"A vector based buffer construction partly based on the method supposed by Dong et al. 2003. "
-		"\n\n"
-		"References:\n"
-		"Dong, P, Yang, C., Rui, X., Zhang, L., Cheng, Q. (2003): "
-		"'An effective buffer generation method in GIS'. "
-		"Geoscience and Remote Sensing Symposium, 2003. "
-		"IGARSS '03. Proceedings. 2003 IEEE International, Vol.6, p.3706-3708.\n"
-		"<a href=\"http://ieeexplore.ieee.org/iel5/9010/28606/01295244.pdf\">online version</a>\n"
-	));
-
-	//-----------------------------------------------------
-	pNode	= Parameters.Add_Shapes(
-		NULL	, "SHAPES"		, _TL("Shapes"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	Parameters.Add_Shapes(
-		NULL	, "BUFFER"		, _TL("Buffer"),
-		_TL(""),
-		PARAMETER_OUTPUT, SHAPE_TYPE_Polygon
-	);
-
-	Parameters.Add_Choice(
-		NULL	, "BUF_TYPE"	, _TL("Buffer Distance"),
-		_TL(""),
-		CSG_String::Format(SG_T("%s|%s|"),
-			_TL("fix value"),
-			_TL("attribute field")
-		), 0
-	);
-
-	Parameters.Add_Value(
-		NULL	, "BUF_DIST"	, _TL("Buffer Distance (Fixed)"),
-		_TL(""),
-		PARAMETER_TYPE_Double, 100.0, 0.0, true
-	);
-
-	Parameters.Add_Table_Field(
-		pNode	, "BUF_FIELD"	, _TL("Buffer Distance (Attribute)"),
-		_TL("")
-	);
-
-	Parameters.Add_Value(
-		NULL	, "BUF_SCALE"	, _TL("Scaling Factor for Attribute Value"),
-		_TL(""),
-		PARAMETER_TYPE_Double, 1.0, 0.0, true
-	);
-
-	Parameters.Add_Value(
-		NULL	, "BUF_ZONES"	, _TL("Number of Buffer Zones"),
-		_TL(""),
-		PARAMETER_TYPE_Int, 1, 1, true
-	);
-
-	Parameters.Add_Value(
-		NULL	, "DCIRCLE"		, _TL("Circle Point Distance [Degree]"),
-		_TL(""),
-		PARAMETER_TYPE_Double, 5.0, 0.01, true, 45.0, true
-	);
-}
-
-//---------------------------------------------------------
-CShapes_Buffer::~CShapes_Buffer(void)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CShapes_Buffer::On_Execute(void)
-{
-	int			nZones;
-	CSG_Shapes	*pBuffers;
-
-	pBuffers	= Parameters("BUFFER")		->asShapes();
-	nZones		= Parameters("BUF_ZONES")	->asInt();
-
-	if( Initialise() )
-	{
-		if( nZones == 1 )
-		{
-			Get_Buffers(pBuffers, 1.0);
-		}
-
-		//-------------------------------------------------
-		else if( nZones > 1 )
-		{
-			double		dZone		= 1.0 / nZones;
-			CSG_Shape	*pBuffer;
-			CSG_Shapes	Buffers;
-
-			pBuffers->Create(SHAPE_TYPE_Polygon);
-			pBuffers->Add_Field(_TL("ID")	, SG_DATATYPE_Int);
-			pBuffers->Add_Field(_TL("ZONE")	, SG_DATATYPE_Double);
-
-			for(int iZone=0; iZone<nZones; iZone++)
-			{
-				Get_Buffers(&Buffers, (nZones - iZone) * dZone);
-
-				if( iZone > 0 )
-				{
-					GPC_Difference(pBuffer, Buffers.Get_Shape(0));
-				}
-
-				pBuffer	= pBuffers->Add_Shape(Buffers.Get_Shape(0));
-				pBuffer	->Set_Value(0, (nZones - iZone) + 1);
-				pBuffer	->Set_Value(1, (nZones - iZone) * dZone * 100.0);
-			}
-		}
-
-		Finalise();
-
-		pBuffers->Set_Name(CSG_String::Format(SG_T("%s [%s]"), m_pShapes->Get_Name(), _TL("Buffer")));
-
-		return( pBuffers->is_Valid() );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CShapes_Buffer::Get_Buffers(CSG_Shapes *pBuffers, double dZone)
-{
-	//-----------------------------------------------------
-	if( pBuffers )
-	{
-		pBuffers	->Create(SHAPE_TYPE_Polygon);
-		pBuffers	->Add_Field(_TL("ID"), SG_DATATYPE_Int);
-		m_pBuffer	= pBuffers->Add_Shape();
-		m_pBuffer	->Set_Value(0, 1);
-
-		m_Distance	= dZone * Parameters("BUF_DIST")	->asDouble();
-		m_Scale		= dZone * Parameters("BUF_SCALE")	->asDouble();
-		m_ID		= 0;
-
-		for(int iShape=0; iShape<m_pShapes->Get_Count() && Set_Progress(iShape, m_pShapes->Get_Count()); iShape++)
-		{
-			CSG_Shape	*pShape	= m_pShapes->Get_Shape(iShape);
-
-			if( m_Type == 0 || (m_Distance = m_Scale * pShape->asDouble(m_Field)) > 0.0 )
-			{
-				switch( m_pShapes->Get_Type() )
-				{
-				case SHAPE_TYPE_Point:		Get_Buffer_Point	(pShape);	break;
-				case SHAPE_TYPE_Points:		Get_Buffer_Points	(pShape);	break;
-				case SHAPE_TYPE_Line:		Get_Buffer_Line		(pShape);	break;
-				case SHAPE_TYPE_Polygon:	Get_Buffer_Polygon	(pShape);	break;
-				}
-			}
-		}
-
-		return( pBuffers->is_Valid() );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CShapes_Buffer::Initialise(void)
-{
-	//-----------------------------------------------------
-	m_pShapes	= Parameters("SHAPES")		->asShapes();
-	m_Type		= Parameters("BUF_TYPE")	->asInt();
-	m_Field		= Parameters("BUF_FIELD")	->asInt();
-	m_dArc		= Parameters("DCIRCLE")		->asDouble() * M_DEG_TO_RAD;
-
-	//-----------------------------------------------------
-	if( m_Type == 0 && Parameters("BUF_DIST")->asDouble() <= 0.0 )
-	{
-		Message_Add(_TL("Invalid Buffer Distance"));
-	}
-	else if( !m_pShapes->is_Valid() )
-	{
-		Message_Add(_TL("Invalid Shapes"));
-	}
-
-	//-----------------------------------------------------
-	else
-	{
-		m_Tmp.Create(SHAPE_TYPE_Polygon);
-
-		m_pSegment	= m_Tmp.Add_Shape();
-		m_pUnion	= m_Tmp.Add_Shape();
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CShapes_Buffer::Finalise(void)
-{
-	m_Tmp.Destroy();
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CShapes_Buffer::Get_Buffer_Point(CSG_Shape *pPoint)
-{
-	m_pSegment->Del_Parts();
-
-	Add_Arc(pPoint->Get_Point(0), 0.0, M_PI_360);
-
-	Add_Buffer();
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CShapes_Buffer::Get_Buffer_Points(CSG_Shape *pPoints)
-{
-	for(int iPart=0; iPart<pPoints->Get_Part_Count(); iPart++)
-	{
-		for(int iPoint=0; iPoint<pPoints->Get_Point_Count(iPart); iPoint++)
-		{
-			m_pSegment->Del_Parts();
-
-			Add_Arc(pPoints->Get_Point(iPoint), 0.0, M_PI_360);
-
-			Add_Buffer();
-		}
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CShapes_Buffer::Get_Buffer_Line(CSG_Shape *pLine)
-{
-	Del_Duplicates(pLine);
-
-	for(int iPart=0; iPart<pLine->Get_Part_Count(); iPart++)
-	{
-		m_pSegment->Del_Parts();
-
-		Add_Line((CSG_Shape_Line *)pLine, iPart);
-
-		Add_Buffer();
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CShapes_Buffer::Get_Buffer_Polygon(CSG_Shape *pPolygon)
-{
-	int		iPart;
-
-	Del_Duplicates(pPolygon);
-
-	for(iPart=0; iPart<pPolygon->Get_Part_Count(); iPart++)
-	{
-		if( ((CSG_Shape_Polygon *)pPolygon)->is_Lake(iPart) == false )
-		{
-			m_pSegment->Del_Parts();
-
-			Add_Polygon((CSG_Shape_Polygon *)pPolygon, iPart);
-
-			Add_Buffer();
-		}
-	}
-
-	for(iPart=0; iPart<pPolygon->Get_Part_Count(); iPart++)
-	{
-		if( ((CSG_Shape_Polygon *)pPolygon)->is_Lake(iPart) == true )
-		{
-			m_pSegment->Del_Parts();
-
-			Add_Polygon((CSG_Shape_Polygon *)pPolygon, iPart);
-
-			Add_Buffer(true);
-		}
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-inline double CShapes_Buffer::Get_Direction(const TSG_Point &From, const TSG_Point &To)
-{
-	double	dx	= To.x - From.x;
-	double	dy	= To.y - From.y;
-
-	return(	dx != 0.0 ?	M_PI_180 + atan2(dy, dx)	: (
-			dy  > 0.0 ?	M_PI_270					: (
-			dy  < 0.0 ?	M_PI_090					:
-						0.0							) )
-	);
-}
-
-
-//---------------------------------------------------------
-inline void CShapes_Buffer::Add_Vertex(const TSG_Point &Center, double theta)
-{
-	m_pSegment->Add_Point(
-		Center.x + m_Distance * cos(theta),
-		Center.y + m_Distance * sin(theta)
-	);
-}
-
-//---------------------------------------------------------
-void CShapes_Buffer::Add_Arc(const TSG_Point &Center, double alpha, double beta)
-{
-	double	theta;
-
-	if( alpha < beta )
-	{
-		for(theta=alpha; theta<beta; theta+=m_dArc)
-		{
-			Add_Vertex(Center, theta);
-		}
-	}
-	else
-	{
-		for(theta=alpha; theta>beta; theta-=m_dArc)
-		{
-			Add_Vertex(Center, theta);
-		}
-	}
-
-	Add_Vertex(Center, beta);
-}
-
-//---------------------------------------------------------
-void CShapes_Buffer::Add_Arc(const TSG_Point &Center, const TSG_Point &A, const TSG_Point &B)
-{
-	double	alpha, beta;
-
-	alpha	= Get_Direction(A, Center);
-	beta	= Get_Direction(B, Center);
-
-	if( alpha - beta >= M_PI_180 )
-	{
-		beta	+= M_PI_360;
-	}
-
-	Add_Arc(Center, alpha, beta);
-}
-
-//---------------------------------------------------------
-inline bool CShapes_Buffer::Get_Parallel(const TSG_Point &A, const TSG_Point &B, TSG_Point AB[2])
-{
-	double		d;
-	TSG_Point	C;
-
-	if( (d = SG_Get_Distance(A, B)) > 0.0 )
-	{
-		d		= m_Distance / d;
-
-		C.x		= d * (A.y - B.y);
-		C.y		= d * (B.x - A.x);
-
-		AB[0].x	= A.x + C.x;
-		AB[0].y	= A.y + C.y;
-
-		AB[1].x	= B.x + C.x;
-		AB[1].y	= B.y + C.y;
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-void CShapes_Buffer::Del_Duplicates(CSG_Shape *pShape)
-{
-	int			iPart, iPoint;
-	CSG_Point	A, B;
-
-	for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
-	{
-		B	= pShape->Get_Point(pShape->Get_Point_Count(iPart) - 1, iPart);
-
-		for(iPoint=pShape->Get_Point_Count(iPart)-2; iPoint>=0; iPoint--)
-		{
-			A	= pShape->Get_Point(iPoint, iPart);
-
-			if( A == B )
-			{
-				pShape->Del_Point(iPoint, iPart);
-			}
-			else
-			{
-				B	= A;
-			}
-		}
-
-		if( pShape->Get_Type() == SHAPE_TYPE_Polygon )
-		{
-			iPoint	= pShape->Get_Point_Count(iPart) - 1;
-
-			A	= pShape->Get_Point(iPoint, iPart);
-			B	= pShape->Get_Point(0     , iPart);
-
-			if( A == B )
-			{
-				pShape->Del_Point(iPoint, iPart);
-			}
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CShapes_Buffer::Add_Line(CSG_Shape_Line *pShape, int iPart)
-{
-	int			iPoint, n	= pShape->Get_Point_Count(iPart);
-	double		a;
-	TSG_Point	A, B, C, AB[2], BC[2];
-
-	//-----------------------------------------------------
-	B	= pShape->Get_Point(0, iPart);
-	A	= pShape->Get_Point(1, iPart);
-
-	Get_Parallel(A, B, AB);
-
-	for(iPoint=2; iPoint<n; iPoint++)
-	{
-		B	= A;
-		A	= pShape->Get_Point(iPoint, iPart);
-
-		BC[0]	= AB[0];
-		BC[1]	= AB[1];
-
-		Get_Parallel(A, B, AB);
-
-		if( SG_Get_Crossing(C, AB[0], AB[1], BC[0], BC[1]) )
-			m_pSegment->Add_Point(C);
-		else
-			Add_Arc(B, BC[0], AB[1]);
-	}
-
-	a	= Get_Direction(A, B);
-	Add_Arc(A, a - M_PI_090, a + M_PI_090);
-
-	//-----------------------------------------------------
-	B	= pShape->Get_Point(n - 1, iPart);
-	A	= pShape->Get_Point(n - 2, iPart);
-
-	Get_Parallel(A, B, AB);
-
-	for(iPoint=n-3; iPoint>=0; iPoint--)
-	{
-		B	= A;
-		A	= pShape->Get_Point(iPoint, iPart);
-
-		BC[0]	= AB[0];
-		BC[1]	= AB[1];
-
-		Get_Parallel(A, B, AB);
-
-		if( SG_Get_Crossing(C, AB[0], AB[1], BC[0], BC[1]) )
-			m_pSegment->Add_Point(C);
-		else
-			Add_Arc(B, BC[0], AB[1]);
-	}
-
-	a	= Get_Direction(A, B);
-	Add_Arc(A, a - M_PI_090, a + M_PI_090);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CShapes_Buffer::Add_Polygon(CSG_Shape_Polygon *pShape, int iPart)
-{
-	int			iPoint, n	= pShape->Get_Point_Count(iPart);
-	TSG_Point	A, B, C, AB[2], BC[2];
-
-	//-----------------------------------------------------
-	bool	bClockwise	= pShape->is_Lake(iPart) ? pShape->is_Clockwise(iPart) : !pShape->is_Clockwise(iPart);
-
-	//-----------------------------------------------------
-	if( bClockwise )
-	{
-		B	= pShape->Get_Point(pShape->Get_Point_Count(iPart) - 1, iPart);
-		A	= pShape->Get_Point(0, iPart);
-
-		Get_Parallel(A, B, AB);
-
-		for(iPoint=1; iPoint<=n; iPoint++)
-		{
-			B	= A;
-			A	= pShape->Get_Point(iPoint < n ? iPoint : 0, iPart);
-
-			BC[0]	= AB[0];
-			BC[1]	= AB[1];
-
-			Get_Parallel(A, B, AB);
-
-			if( SG_Get_Crossing(C, AB[0], AB[1], BC[0], BC[1]) )
-				m_pSegment->Add_Point(C);
-			else
-				Add_Arc(B, BC[0], AB[1]);
-		}
-	}
-
-	//-----------------------------------------------------
-	else
-	{
-		B	= pShape->Get_Point(0    , iPart);
-		A	= pShape->Get_Point(n - 1, iPart);
-
-		Get_Parallel(A, B, AB);
-
-		for(iPoint=n-2; iPoint>=-1; iPoint--)
-		{
-			B	= A;
-			A	= pShape->Get_Point(iPoint >= 0 ? iPoint : n - 1, iPart);
-
-			BC[0]	= AB[0];
-			BC[1]	= AB[1];
-
-			Get_Parallel(A, B, AB);
-
-			if( SG_Get_Crossing(C, AB[0], AB[1], BC[0], BC[1]) )
-				m_pSegment->Add_Point(C);
-			else
-				Add_Arc(B, BC[0], AB[1]);
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CShapes_Buffer::Add_Buffer(bool bLake)
-{
-	Get_SelfIntersection();
-
-	if( m_pUnion->is_Valid() )
-	{
-		if( m_pBuffer->Get_Part_Count() )
-		{
-			if( bLake )
-			{
-				for(int iPart=m_pUnion->Get_Part_Count()-1; iPart>=0; iPart--)
-				{
-					if( ((CSG_Shape_Polygon *)m_pUnion)->is_Clockwise(iPart) == false )
-					{
-						m_pUnion->Del_Part(iPart);
-					}
-				}
-
-				if( m_pUnion->Get_Part_Count() > 0 )
-				{
-					GPC_Difference(m_pBuffer, m_pUnion);
-				}
-			}
-			else
-			{
-				GPC_Union(m_pBuffer, m_pUnion);
-			}
-		}
-		else
-		{
-			m_pBuffer->Assign(m_pUnion, false);
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CShapes_Buffer::Get_SelfIntersection(void)
-{
-	int		iPart, iMax;
-	double	dMax;
-
-	m_pUnion->Del_Parts();
-
-	Get_SelfIntersection((CSG_Shape_Polygon *)m_pSegment);
-
-	for(iPart=0, iMax=-1; iPart<m_pUnion->Get_Part_Count(); iPart++)
-	{
-		if( ((CSG_Shape_Polygon *)m_pUnion)->is_Clockwise(iPart) == false )
-		{
-			if( iMax < 0 || dMax < ((CSG_Shape_Polygon *)m_pUnion)->Get_Area(iPart) )
-			{
-				iMax	= iPart;
-				dMax	= ((CSG_Shape_Polygon *)m_pUnion)->Get_Area(iPart);
-			}
-		}
-	}
-
-	for(iPart=m_pUnion->Get_Part_Count()-1; iPart>=0; iPart--)
-	{
-		if(  ((CSG_Shape_Polygon *)m_pUnion)->Get_Area(iPart) == 0.0
-		||	(((CSG_Shape_Polygon *)m_pUnion)->is_Clockwise(iPart) == false && iPart != iMax) )
-		{
-			m_pUnion->Del_Part(iPart);
-		}
-	}
-}
-
-//---------------------------------------------------------
-void CShapes_Buffer::Get_SelfIntersection(CSG_Shape_Polygon *pSegment)
-{
-	if( pSegment->Get_Point_Count(0) >= 3 )
-	{
-		int			i, j, k;
-		TSG_Point	A[2], B[2], C;
-		CSG_Shape	*pPolygon;
-		CSG_Shapes	Points;
-
-		A[0]	= pSegment->Get_Point(0);
-
-		for(i=1; i<pSegment->Get_Point_Count(0)-2; i++)
-		{
-			A[1]	= A[0];
-			A[0]	= pSegment->Get_Point(i);
-
-			B[0]	= pSegment->Get_Point(i + 1);
-
-			for(j=i+2; j<pSegment->Get_Point_Count(0); j++)
-			{
-				B[1]	= B[0];
-				B[0]	= pSegment->Get_Point(j);
-
-				//-----------------------------------------
-				if( SG_Get_Crossing(C, A[0], A[1], B[0], B[1]) )
-				{
-					Points.Create(SHAPE_TYPE_Polygon);
-					pPolygon	= Points.Add_Shape();
-					pPolygon->Add_Point(C);
-
-					for(k=i; k<j; k++)
-						pPolygon->Add_Point(pSegment->Get_Point(k));
-
-					Get_SelfIntersection((CSG_Shape_Polygon *)pPolygon);
-
-					//-------------------------------------
-					Points.Create(SHAPE_TYPE_Polygon);
-					pPolygon	= Points.Add_Shape();
-					pPolygon->Add_Point(C);
-
-					for(k=j; k<pSegment->Get_Point_Count(0); k++)
-						pPolygon->Add_Point(pSegment->Get_Point(k));
-
-					for(k=0; k<i; k++)
-						pPolygon->Add_Point(pSegment->Get_Point(k));
-
-					Get_SelfIntersection((CSG_Shape_Polygon *)pPolygon);
-
-					return;
-				}
-			}
-		}
-
-		//-------------------------------------------------
-		int		iPart	= m_pUnion->Get_Part_Count();
-
-		for(i=0; i<pSegment->Get_Point_Count(0); i++)
-		{
-			m_pUnion->Add_Point(pSegment->Get_Point(i), iPart);
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     shapes_tools                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   Shapes_Buffer.cpp                   //
+//                                                       //
+//                 Copyright (C) 2008 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Bundesstr. 55                          //
+//                20146 Hamburg                          //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "shapes_buffer.h"
+
+#include "Polygon_Clipper.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CShapes_Buffer::CShapes_Buffer(void)
+{
+	CSG_Parameter	*pNode;
+
+	//-----------------------------------------------------
+	Set_Name		(_TL("Shapes Buffer"));
+
+	Set_Author		(SG_T("(c) 2008 by O.Conrad"));
+
+	Set_Description	(_TW(
+		"A vector based buffer construction partly based on the method supposed by Dong et al. 2003. "
+		"\n\n"
+		"References:\n"
+		"Dong, P, Yang, C., Rui, X., Zhang, L., Cheng, Q. (2003): "
+		"'An effective buffer generation method in GIS'. "
+		"Geoscience and Remote Sensing Symposium, 2003. "
+		"IGARSS '03. Proceedings. 2003 IEEE International, Vol.6, p.3706-3708.\n"
+		"<a href=\"http://ieeexplore.ieee.org/iel5/9010/28606/01295244.pdf\">online version</a>\n"
+	));
+
+	//-----------------------------------------------------
+	pNode	= Parameters.Add_Shapes(
+		NULL	, "SHAPES"		, _TL("Shapes"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Shapes(
+		NULL	, "BUFFER"		, _TL("Buffer"),
+		_TL(""),
+		PARAMETER_OUTPUT, SHAPE_TYPE_Polygon
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "BUF_TYPE"	, _TL("Buffer Distance"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("fixed value"),
+			_TL("attribute field")
+		), 0
+	);
+
+	Parameters.Add_Value(
+		NULL	, "BUF_DIST"	, _TL("Buffer Distance (Fixed)"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 100.0, 0.0, true
+	);
+
+	Parameters.Add_Table_Field(
+		pNode	, "BUF_FIELD"	, _TL("Buffer Distance (Attribute)"),
+		_TL("")
+	);
+
+	Parameters.Add_Value(
+		NULL	, "BUF_SCALE"	, _TL("Scaling Factor for Attribute Value"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 1.0, 0.0, true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "BUF_ZONES"	, _TL("Number of Buffer Zones"),
+		_TL(""),
+		PARAMETER_TYPE_Int, 1, 1, true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "DCIRCLE"		, _TL("Circle Point Distance [Degree]"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 5.0, 0.01, true, 45.0, true
+	);
+}
+
+//---------------------------------------------------------
+CShapes_Buffer::~CShapes_Buffer(void)
+{}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CShapes_Buffer::On_Execute(void)
+{
+	int			nZones;
+	CSG_Shapes	*pBuffers;
+
+	pBuffers	= Parameters("BUFFER")		->asShapes();
+	nZones		= Parameters("BUF_ZONES")	->asInt();
+
+	if( Initialise() )
+	{
+		if( nZones == 1 )
+		{
+			Get_Buffers(pBuffers, 1.0);
+		}
+
+		//-------------------------------------------------
+		else if( nZones > 1 )
+		{
+			double		dZone		= 1.0 / nZones;
+			CSG_Shape	*pBuffer;
+			CSG_Shapes	Buffers;
+
+			pBuffers->Create(SHAPE_TYPE_Polygon);
+			pBuffers->Add_Field(_TL("ID")	, SG_DATATYPE_Int);
+			pBuffers->Add_Field(_TL("ZONE")	, SG_DATATYPE_Double);
+
+			for(int iZone=0; iZone<nZones; iZone++)
+			{
+				Get_Buffers(&Buffers, (nZones - iZone) * dZone);
+
+				if( iZone > 0 )
+				{
+					GPC_Difference(pBuffer, Buffers.Get_Shape(0));
+				}
+
+				pBuffer	= pBuffers->Add_Shape(Buffers.Get_Shape(0));
+				pBuffer	->Set_Value(0, (nZones - iZone) + 1);
+				pBuffer	->Set_Value(1, (nZones - iZone) * dZone * 100.0);
+			}
+		}
+
+		Finalise();
+
+		pBuffers->Set_Name(CSG_String::Format(SG_T("%s [%s]"), m_pShapes->Get_Name(), _TL("Buffer")));
+
+		return( pBuffers->is_Valid() );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CShapes_Buffer::Get_Buffers(CSG_Shapes *pBuffers, double dZone)
+{
+	//-----------------------------------------------------
+	if( pBuffers )
+	{
+		pBuffers	->Create(SHAPE_TYPE_Polygon);
+		pBuffers	->Add_Field(_TL("ID"), SG_DATATYPE_Int);
+		m_pBuffer	= pBuffers->Add_Shape();
+		m_pBuffer	->Set_Value(0, 1);
+
+		m_Distance	= dZone * Parameters("BUF_DIST")	->asDouble();
+		m_Scale		= dZone * Parameters("BUF_SCALE")	->asDouble();
+		m_ID		= 0;
+
+		for(int iShape=0; iShape<m_pShapes->Get_Count() && Set_Progress(iShape, m_pShapes->Get_Count()); iShape++)
+		{
+			CSG_Shape	*pShape	= m_pShapes->Get_Shape(iShape);
+
+			if( m_Type == 0 || (m_Distance = m_Scale * pShape->asDouble(m_Field)) > 0.0 )
+			{
+				switch( m_pShapes->Get_Type() )
+				{
+				case SHAPE_TYPE_Point:		Get_Buffer_Point	(pShape);	break;
+				case SHAPE_TYPE_Points:		Get_Buffer_Points	(pShape);	break;
+				case SHAPE_TYPE_Line:		Get_Buffer_Line		(pShape);	break;
+				case SHAPE_TYPE_Polygon:	Get_Buffer_Polygon	(pShape);	break;
+				}
+			}
+		}
+
+		return( pBuffers->is_Valid() );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CShapes_Buffer::Initialise(void)
+{
+	//-----------------------------------------------------
+	m_pShapes	= Parameters("SHAPES")		->asShapes();
+	m_Type		= Parameters("BUF_TYPE")	->asInt();
+	m_Field		= Parameters("BUF_FIELD")	->asInt();
+	m_dArc		= Parameters("DCIRCLE")		->asDouble() * M_DEG_TO_RAD;
+
+	//-----------------------------------------------------
+	if( m_Type == 0 && Parameters("BUF_DIST")->asDouble() <= 0.0 )
+	{
+		Message_Add(_TL("Invalid Buffer Distance"));
+	}
+	else if( !m_pShapes->is_Valid() )
+	{
+		Message_Add(_TL("Invalid Shapes"));
+	}
+
+	//-----------------------------------------------------
+	else
+	{
+		m_Tmp.Create(SHAPE_TYPE_Polygon);
+
+		m_pSegment	= m_Tmp.Add_Shape();
+		m_pUnion	= m_Tmp.Add_Shape();
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CShapes_Buffer::Finalise(void)
+{
+	m_Tmp.Destroy();
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CShapes_Buffer::Get_Buffer_Point(CSG_Shape *pPoint)
+{
+	m_pSegment->Del_Parts();
+
+	Add_Arc(pPoint->Get_Point(0), 0.0, M_PI_360);
+
+	Add_Buffer();
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CShapes_Buffer::Get_Buffer_Points(CSG_Shape *pPoints)
+{
+	for(int iPart=0; iPart<pPoints->Get_Part_Count(); iPart++)
+	{
+		for(int iPoint=0; iPoint<pPoints->Get_Point_Count(iPart); iPoint++)
+		{
+			m_pSegment->Del_Parts();
+
+			Add_Arc(pPoints->Get_Point(iPoint), 0.0, M_PI_360);
+
+			Add_Buffer();
+		}
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CShapes_Buffer::Get_Buffer_Line(CSG_Shape *pLine)
+{
+	Del_Duplicates(pLine);
+
+	for(int iPart=0; iPart<pLine->Get_Part_Count(); iPart++)
+	{
+		m_pSegment->Del_Parts();
+
+		Add_Line((CSG_Shape_Line *)pLine, iPart);
+
+		Add_Buffer();
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CShapes_Buffer::Get_Buffer_Polygon(CSG_Shape *pPolygon)
+{
+	int		iPart;
+
+	Del_Duplicates(pPolygon);
+
+	for(iPart=0; iPart<pPolygon->Get_Part_Count(); iPart++)
+	{
+		if( ((CSG_Shape_Polygon *)pPolygon)->is_Lake(iPart) == false )
+		{
+			m_pSegment->Del_Parts();
+
+			Add_Polygon((CSG_Shape_Polygon *)pPolygon, iPart);
+
+			Add_Buffer();
+		}
+	}
+
+	for(iPart=0; iPart<pPolygon->Get_Part_Count(); iPart++)
+	{
+		if( ((CSG_Shape_Polygon *)pPolygon)->is_Lake(iPart) == true )
+		{
+			m_pSegment->Del_Parts();
+
+			Add_Polygon((CSG_Shape_Polygon *)pPolygon, iPart);
+
+			Add_Buffer(true);
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+inline double CShapes_Buffer::Get_Direction(const TSG_Point &From, const TSG_Point &To)
+{
+	double	dx	= To.x - From.x;
+	double	dy	= To.y - From.y;
+
+	return(	dx != 0.0 ?	M_PI_180 + atan2(dy, dx)	: (
+			dy  > 0.0 ?	M_PI_270					: (
+			dy  < 0.0 ?	M_PI_090					:
+						0.0							) )
+	);
+}
+
+
+//---------------------------------------------------------
+inline void CShapes_Buffer::Add_Vertex(const TSG_Point &Center, double theta)
+{
+	m_pSegment->Add_Point(
+		Center.x + m_Distance * cos(theta),
+		Center.y + m_Distance * sin(theta)
+	);
+}
+
+//---------------------------------------------------------
+void CShapes_Buffer::Add_Arc(const TSG_Point &Center, double alpha, double beta)
+{
+	double	theta;
+
+	if( alpha < beta )
+	{
+		for(theta=alpha; theta<beta; theta+=m_dArc)
+		{
+			Add_Vertex(Center, theta);
+		}
+	}
+	else
+	{
+		for(theta=alpha; theta>beta; theta-=m_dArc)
+		{
+			Add_Vertex(Center, theta);
+		}
+	}
+
+	Add_Vertex(Center, beta);
+}
+
+//---------------------------------------------------------
+void CShapes_Buffer::Add_Arc(const TSG_Point &Center, const TSG_Point &A, const TSG_Point &B)
+{
+	double	alpha, beta;
+
+	alpha	= Get_Direction(A, Center);
+	beta	= Get_Direction(B, Center);
+
+	if( alpha - beta >= M_PI_180 )
+	{
+		beta	+= M_PI_360;
+	}
+
+	Add_Arc(Center, alpha, beta);
+}
+
+//---------------------------------------------------------
+inline bool CShapes_Buffer::Get_Parallel(const TSG_Point &A, const TSG_Point &B, TSG_Point AB[2])
+{
+	double		d;
+	TSG_Point	C;
+
+	if( (d = SG_Get_Distance(A, B)) > 0.0 )
+	{
+		d		= m_Distance / d;
+
+		C.x		= d * (A.y - B.y);
+		C.y		= d * (B.x - A.x);
+
+		AB[0].x	= A.x + C.x;
+		AB[0].y	= A.y + C.y;
+
+		AB[1].x	= B.x + C.x;
+		AB[1].y	= B.y + C.y;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+void CShapes_Buffer::Del_Duplicates(CSG_Shape *pShape)
+{
+	int			iPart, iPoint;
+	CSG_Point	A, B;
+
+	for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
+	{
+		B	= pShape->Get_Point(pShape->Get_Point_Count(iPart) - 1, iPart);
+
+		for(iPoint=pShape->Get_Point_Count(iPart)-2; iPoint>=0; iPoint--)
+		{
+			A	= pShape->Get_Point(iPoint, iPart);
+
+			if( A == B )
+			{
+				pShape->Del_Point(iPoint, iPart);
+			}
+			else
+			{
+				B	= A;
+			}
+		}
+
+		if( pShape->Get_Type() == SHAPE_TYPE_Polygon )
+		{
+			iPoint	= pShape->Get_Point_Count(iPart) - 1;
+
+			A	= pShape->Get_Point(iPoint, iPart);
+			B	= pShape->Get_Point(0     , iPart);
+
+			if( A == B )
+			{
+				pShape->Del_Point(iPoint, iPart);
+			}
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CShapes_Buffer::Add_Line(CSG_Shape_Line *pShape, int iPart)
+{
+	int			iPoint, n	= pShape->Get_Point_Count(iPart);
+	double		a;
+	TSG_Point	A, B, C, AB[2], BC[2];
+
+	//-----------------------------------------------------
+	B	= pShape->Get_Point(0, iPart);
+	A	= pShape->Get_Point(1, iPart);
+
+	Get_Parallel(A, B, AB);
+
+	for(iPoint=2; iPoint<n; iPoint++)
+	{
+		B	= A;
+		A	= pShape->Get_Point(iPoint, iPart);
+
+		BC[0]	= AB[0];
+		BC[1]	= AB[1];
+
+		Get_Parallel(A, B, AB);
+
+		if( SG_Get_Crossing(C, AB[0], AB[1], BC[0], BC[1]) )
+			m_pSegment->Add_Point(C);
+		else
+			Add_Arc(B, BC[0], AB[1]);
+	}
+
+	a	= Get_Direction(A, B);
+	Add_Arc(A, a - M_PI_090, a + M_PI_090);
+
+	//-----------------------------------------------------
+	B	= pShape->Get_Point(n - 1, iPart);
+	A	= pShape->Get_Point(n - 2, iPart);
+
+	Get_Parallel(A, B, AB);
+
+	for(iPoint=n-3; iPoint>=0; iPoint--)
+	{
+		B	= A;
+		A	= pShape->Get_Point(iPoint, iPart);
+
+		BC[0]	= AB[0];
+		BC[1]	= AB[1];
+
+		Get_Parallel(A, B, AB);
+
+		if( SG_Get_Crossing(C, AB[0], AB[1], BC[0], BC[1]) )
+			m_pSegment->Add_Point(C);
+		else
+			Add_Arc(B, BC[0], AB[1]);
+	}
+
+	a	= Get_Direction(A, B);
+	Add_Arc(A, a - M_PI_090, a + M_PI_090);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CShapes_Buffer::Add_Polygon(CSG_Shape_Polygon *pShape, int iPart)
+{
+	int			iPoint, n	= pShape->Get_Point_Count(iPart);
+	TSG_Point	A, B, C, AB[2], BC[2];
+
+	//-----------------------------------------------------
+	bool	bClockwise	= pShape->is_Lake(iPart) ? pShape->is_Clockwise(iPart) : !pShape->is_Clockwise(iPart);
+
+	//-----------------------------------------------------
+	if( bClockwise )
+	{
+		B	= pShape->Get_Point(pShape->Get_Point_Count(iPart) - 1, iPart);
+		A	= pShape->Get_Point(0, iPart);
+
+		Get_Parallel(A, B, AB);
+
+		for(iPoint=1; iPoint<=n; iPoint++)
+		{
+			B	= A;
+			A	= pShape->Get_Point(iPoint < n ? iPoint : 0, iPart);
+
+			BC[0]	= AB[0];
+			BC[1]	= AB[1];
+
+			Get_Parallel(A, B, AB);
+
+			if( SG_Get_Crossing(C, AB[0], AB[1], BC[0], BC[1]) )
+				m_pSegment->Add_Point(C);
+			else
+				Add_Arc(B, BC[0], AB[1]);
+		}
+	}
+
+	//-----------------------------------------------------
+	else
+	{
+		B	= pShape->Get_Point(0    , iPart);
+		A	= pShape->Get_Point(n - 1, iPart);
+
+		Get_Parallel(A, B, AB);
+
+		for(iPoint=n-2; iPoint>=-1; iPoint--)
+		{
+			B	= A;
+			A	= pShape->Get_Point(iPoint >= 0 ? iPoint : n - 1, iPart);
+
+			BC[0]	= AB[0];
+			BC[1]	= AB[1];
+
+			Get_Parallel(A, B, AB);
+
+			if( SG_Get_Crossing(C, AB[0], AB[1], BC[0], BC[1]) )
+				m_pSegment->Add_Point(C);
+			else
+				Add_Arc(B, BC[0], AB[1]);
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CShapes_Buffer::Add_Buffer(bool bLake)
+{
+	Get_SelfIntersection();
+
+	if( m_pUnion->is_Valid() )
+	{
+		if( m_pBuffer->Get_Part_Count() )
+		{
+			if( bLake )
+			{
+				for(int iPart=m_pUnion->Get_Part_Count()-1; iPart>=0; iPart--)
+				{
+					if( ((CSG_Shape_Polygon *)m_pUnion)->is_Clockwise(iPart) == false )
+					{
+						m_pUnion->Del_Part(iPart);
+					}
+				}
+
+				if( m_pUnion->Get_Part_Count() > 0 )
+				{
+					GPC_Difference(m_pBuffer, m_pUnion);
+				}
+			}
+			else
+			{
+				GPC_Union(m_pBuffer, m_pUnion);
+			}
+		}
+		else
+		{
+			m_pBuffer->Assign(m_pUnion, false);
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CShapes_Buffer::Get_SelfIntersection(void)
+{
+	int		iPart, iMax;
+	double	dMax;
+
+	m_pUnion->Del_Parts();
+
+	Get_SelfIntersection((CSG_Shape_Polygon *)m_pSegment);
+
+	for(iPart=0, iMax=-1; iPart<m_pUnion->Get_Part_Count(); iPart++)
+	{
+		if( ((CSG_Shape_Polygon *)m_pUnion)->is_Clockwise(iPart) == false )
+		{
+			if( iMax < 0 || dMax < ((CSG_Shape_Polygon *)m_pUnion)->Get_Area(iPart) )
+			{
+				iMax	= iPart;
+				dMax	= ((CSG_Shape_Polygon *)m_pUnion)->Get_Area(iPart);
+			}
+		}
+	}
+
+	for(iPart=m_pUnion->Get_Part_Count()-1; iPart>=0; iPart--)
+	{
+		if(  ((CSG_Shape_Polygon *)m_pUnion)->Get_Area(iPart) == 0.0
+		||	(((CSG_Shape_Polygon *)m_pUnion)->is_Clockwise(iPart) == false && iPart != iMax) )
+		{
+			m_pUnion->Del_Part(iPart);
+		}
+	}
+}
+
+//---------------------------------------------------------
+void CShapes_Buffer::Get_SelfIntersection(CSG_Shape_Polygon *pSegment)
+{
+	if( pSegment->Get_Point_Count(0) >= 3 )
+	{
+		int			i, j, k;
+		TSG_Point	A[2], B[2], C;
+		CSG_Shape	*pPolygon;
+		CSG_Shapes	Points;
+
+		A[0]	= pSegment->Get_Point(0);
+
+		for(i=1; i<pSegment->Get_Point_Count(0)-2; i++)
+		{
+			A[1]	= A[0];
+			A[0]	= pSegment->Get_Point(i);
+
+			B[0]	= pSegment->Get_Point(i + 1);
+
+			for(j=i+2; j<pSegment->Get_Point_Count(0); j++)
+			{
+				B[1]	= B[0];
+				B[0]	= pSegment->Get_Point(j);
+
+				//-----------------------------------------
+				if( SG_Get_Crossing(C, A[0], A[1], B[0], B[1]) )
+				{
+					Points.Create(SHAPE_TYPE_Polygon);
+					pPolygon	= Points.Add_Shape();
+					pPolygon->Add_Point(C);
+
+					for(k=i; k<j; k++)
+						pPolygon->Add_Point(pSegment->Get_Point(k));
+
+					Get_SelfIntersection((CSG_Shape_Polygon *)pPolygon);
+
+					//-------------------------------------
+					Points.Create(SHAPE_TYPE_Polygon);
+					pPolygon	= Points.Add_Shape();
+					pPolygon->Add_Point(C);
+
+					for(k=j; k<pSegment->Get_Point_Count(0); k++)
+						pPolygon->Add_Point(pSegment->Get_Point(k));
+
+					for(k=0; k<i; k++)
+						pPolygon->Add_Point(pSegment->Get_Point(k));
+
+					Get_SelfIntersection((CSG_Shape_Polygon *)pPolygon);
+
+					return;
+				}
+			}
+		}
+
+		//-------------------------------------------------
+		int		iPart	= m_pUnion->Get_Part_Count();
+
+		for(i=0; i<pSegment->Get_Point_Count(0); i++)
+		{
+			m_pUnion->Add_Point(pSegment->Get_Point(i), iPart);
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules/shapes/shapes_transect/Makefile.in b/src/modules/shapes/shapes_transect/Makefile.in
index 0e951e9..07a3265 100644
--- a/src/modules/shapes/shapes_transect/Makefile.in
+++ b/src/modules/shapes/shapes_transect/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/shapes/shapes_transect
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -104,6 +110,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -153,14 +161,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -204,9 +225,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/table/Makefile.in b/src/modules/table/Makefile.in
index 205263f..6129dee 100644
--- a/src/modules/table/Makefile.in
+++ b/src/modules/table/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules/table
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules/table/table_calculus/MLB_Interface.cpp b/src/modules/table/table_calculus/MLB_Interface.cpp
index 81503c9..bf8f1e5 100644
--- a/src/modules/table/table_calculus/MLB_Interface.cpp
+++ b/src/modules/table/table_calculus/MLB_Interface.cpp
@@ -96,6 +96,8 @@ const SG_Char * Get_Info(int i)
 #include "Table_CalculatorShapes.h"
 #include "Table_Trend.h"
 #include "table_running_average.h"
+#include "table_running_average.h"
+#include "table_cluster_analysis.h"
 
 
 //---------------------------------------------------------
@@ -111,6 +113,7 @@ CSG_Module *		Create_Module(int i)
 	case 3:		return( new CTable_Trend );
 	case 4:		return( new CTable_Trend_Shapes );
 	case 5:		return( new CTable_Running_Average );
+	case 6:		return( new CTable_Cluster_Analysis );
 	}
 
 	return( NULL );
diff --git a/src/modules/table/table_calculus/Makefile.am b/src/modules/table/table_calculus/Makefile.am
index 0205cd4..acbd965 100644
--- a/src/modules/table/table_calculus/Makefile.am
+++ b/src/modules/table/table_calculus/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.7 2010/07/08 14:11:48 johanvdw Exp $
+# $Id: Makefile.am,v 1.8 2010/11/05 14:51:46 oconrad Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
@@ -18,6 +18,7 @@ LMFit.cpp\
 MLB_Interface.cpp\
 Table_Calculator.cpp\
 Table_CalculatorShapes.cpp\
+table_cluster_analysis.cpp\
 table_running_average.cpp\
 Table_Trend.cpp\
 Fit.h\
@@ -25,6 +26,7 @@ LMFit.h\
 MLB_Interface.h\
 Table_Calculator.h\
 Table_CalculatorShapes.h\
+table_cluster_analysis.h\
 table_running_average.h\
 Table_Trend.h
 
diff --git a/src/modules/table/table_calculus/Makefile.in b/src/modules/table/table_calculus/Makefile.in
index b091176..3860fb8 100644
--- a/src/modules/table/table_calculus/Makefile.in
+++ b/src/modules/table/table_calculus/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/table/table_calculus
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -70,7 +76,8 @@ libtable_calculus_la_DEPENDENCIES =  \
 	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
 am_libtable_calculus_la_OBJECTS = Fit.lo LMFit.lo MLB_Interface.lo \
 	Table_Calculator.lo Table_CalculatorShapes.lo \
-	table_running_average.lo Table_Trend.lo
+	table_cluster_analysis.lo table_running_average.lo \
+	Table_Trend.lo
 libtable_calculus_la_OBJECTS = $(am_libtable_calculus_la_OBJECTS)
 DEFAULT_INCLUDES = -I. at am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -106,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -219,7 +245,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.7 2010/07/08 14:11:48 johanvdw Exp $
+# $Id: Makefile.am,v 1.8 2010/11/05 14:51:46 oconrad Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_TRUE at UC_DEFS = -D_SAGA_UNICODE
@@ -234,6 +260,7 @@ LMFit.cpp\
 MLB_Interface.cpp\
 Table_Calculator.cpp\
 Table_CalculatorShapes.cpp\
+table_cluster_analysis.cpp\
 table_running_average.cpp\
 Table_Trend.cpp\
 Fit.h\
@@ -241,6 +268,7 @@ LMFit.h\
 MLB_Interface.h\
 Table_Calculator.h\
 Table_CalculatorShapes.h\
+table_cluster_analysis.h\
 table_running_average.h\
 Table_Trend.h
 
@@ -325,6 +353,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Table_Calculator.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Table_CalculatorShapes.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Table_Trend.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/table_cluster_analysis.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/table_running_average.Plo at am__quote@
 
 .cpp.o:
diff --git a/src/modules/table/table_calculus/table_cluster_analysis.cpp b/src/modules/table/table_calculus/table_cluster_analysis.cpp
new file mode 100644
index 0000000..05465f1
--- /dev/null
+++ b/src/modules/table/table_calculus/table_cluster_analysis.cpp
@@ -0,0 +1,355 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                    Table_Calculus                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//               table_cluster_analysis.cpp               //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "table_cluster_analysis.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CTable_Cluster_Analysis::CTable_Cluster_Analysis(void)
+{
+	CSG_Parameter	*pNode;
+
+	//-----------------------------------------------------
+	Set_Name		(_TL("Cluster Analysis"));
+
+	Set_Author		(SG_T("O. Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		"Cluster Analysis for grids.\n\nReferences:\n\n"
+		                                                                                                                                                                                                                  
+		"Iterative Minimum Distance:\n"
+		"- Forgy, E. (1965):\n"
+		"  'Cluster Analysis of multivariate data: efficiency vs. interpretability of classifications',\n"
+		"  Biometrics 21:768\n\n"
+
+		"Hill-Climbing:"
+		"- Rubin, J. (1967):\n"
+		"  'Optimal Classification into Groups: An Approach for Solving the Taxonomy Problem',\n"
+		"  J. Theoretical Biology, 15:103-144\n\n"
+	));
+
+	//-----------------------------------------------------
+	pNode	= Parameters.Add_Table(
+		NULL	, "TABLE"		, _TL("Table"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Parameters(
+		pNode	, "FIELDS"		, _TL("Attributes"),
+		_TL("")
+	);
+
+	Parameters.Add_Table(
+		NULL	, "STATISTICS"	, _TL("Statistics"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "METHOD"		, _TL("Method"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			_TL("Iterative Minimum Distance (Forgy 1965)"),
+			_TL("Hill-Climbing (Rubin 1967)"),
+			_TL("Combined Minimum Distance / Hillclimbing") 
+		), 1
+	);
+
+	Parameters.Add_Value(
+		NULL	, "NCLUSTER"	, _TL("Clusters"),
+		_TL("Number of clusters"),
+		PARAMETER_TYPE_Int, 10, 2, true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "NORMALISE"	, _TL("Normalise"),
+		_TL("Automatically normalise grids by standard deviation before clustering."),
+		PARAMETER_TYPE_Bool, false
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CTable_Cluster_Analysis::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("TABLE")) )
+	{
+		CSG_Table		*pTable		= pParameter->asTable();
+		CSG_Parameters	*pFields	= pParameters->Get_Parameter("FIELDS")->asParameters();
+
+		pFields->Del_Parameters();
+
+		for(int i=0; i<pTable->Get_Field_Count(); i++)
+		{
+			if( SG_Data_Type_is_Numeric(pTable->Get_Field_Type(i)) )
+			{
+				pFields->Add_Value(NULL, CSG_String::Format(SG_T("%d"), i), pTable->Get_Field_Name(i), _TL(""), PARAMETER_TYPE_Bool, false);
+			}
+		}
+	}
+
+	return( 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CTable_Cluster_Analysis::On_Execute(void)
+{
+	bool					bNormalize;
+	int						iFeature, nFeatures, *Features, iElement, nElements, Cluster;
+	CSG_Cluster_Analysis	Analysis;
+	CSG_Parameters			*pFields;
+	CSG_Table				*pTable;
+	CSG_Table_Record		*pRecord;
+
+	//-----------------------------------------------------
+	pTable		= Parameters("TABLE")		->asTable();
+	bNormalize	= Parameters("NORMALISE")	->asBool();
+	pFields		= Parameters("FIELDS")		->asParameters();
+
+	//-----------------------------------------------------
+	Features	= (int *)SG_Calloc(pFields->Get_Count(), sizeof(int));
+
+	for(iFeature=0, nFeatures=0; iFeature<pFields->Get_Count(); iFeature++)
+	{
+		if( pFields->Get_Parameter(iFeature)->asBool() )
+		{
+			CSG_String	s(pFields->Get_Parameter(iFeature)->Get_Identifier());
+
+			Features[nFeatures++]	= s.asInt();
+		}
+	}
+
+	//-----------------------------------------------------
+	if( !Analysis.Create(nFeatures) )
+	{
+		SG_FREE_SAFE(Features);
+
+		return( false );
+	}
+
+	Cluster	= pTable->Get_Field_Count();
+	pTable->Add_Field(_TL("CLUSTER"), SG_DATATYPE_Int);
+
+	//-----------------------------------------------------
+	for(iElement=0, nElements=0; iElement<pTable->Get_Count() && Set_Progress(iElement, pTable->Get_Count()); iElement++)
+	{
+		bool	bNoData		= false;
+
+		pRecord	= pTable->Get_Record(iElement);
+
+		for(iFeature=0; iFeature<nFeatures && !bNoData; iFeature++)
+		{
+			if( pRecord->is_NoData(Features[iFeature]) )
+			{
+				bNoData	= true;
+			}
+		}
+
+		if( bNoData || !Analysis.Add_Element() )
+		{
+			pRecord->Set_NoData(Cluster);
+		}
+		else
+		{
+			pRecord->Set_Value(Cluster, 0.0);
+
+			for(iFeature=0; iFeature<nFeatures; iFeature++)
+			{
+				double	d	= pRecord->asDouble(Features[iFeature]);
+
+				if( bNormalize )
+				{
+					d	= (d - pTable->Get_Mean(Features[iFeature])) / pTable->Get_StdDev(Features[iFeature]);
+				}
+
+				Analysis.Set_Feature(nElements, iFeature, d);
+			}
+
+			nElements++;
+		}
+	}
+
+	if( nElements <= 1 )
+	{
+		SG_FREE_SAFE(Features);
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	bool	bResult	= Analysis.Execute(Parameters("METHOD")->asInt(), Parameters("NCLUSTER")->asInt());
+
+	for(iElement=0, nElements=0; iElement<pTable->Get_Count(); iElement++)
+	{
+		Set_Progress(iElement, pTable->Get_Count());
+
+		pRecord	= pTable->Get_Record(iElement);
+
+		if( !pRecord->is_NoData(Cluster) )
+		{
+			pRecord->Set_Value(Cluster, Analysis.Get_Cluster(nElements++));
+		}
+	}
+
+	Save_Statistics(pTable, Features, bNormalize, Analysis);
+
+//	Save_LUT(pCluster, Analysis.Get_nClusters());
+
+	SG_FREE_SAFE(Features);
+
+	DataObject_Update(pTable);
+
+	return( bResult );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CTable_Cluster_Analysis::Save_Statistics(CSG_Table *pTable, int *Features, bool bNormalize, const CSG_Cluster_Analysis &Analysis)
+{
+	int					iCluster, iFeature;
+	CSG_String			s;
+	CSG_Table_Record	*pRecord;
+	CSG_Table			*pStatistics;
+
+	pStatistics	= Parameters("STATISTICS")->asTable();
+
+	pStatistics->Destroy();
+	pStatistics->Set_Name(_TL("Cluster Analysis"));
+
+	pStatistics->Add_Field(_TL("ClusterID")	, SG_DATATYPE_Int);
+	pStatistics->Add_Field(_TL("Elements")	, SG_DATATYPE_Int);
+	pStatistics->Add_Field(_TL("Std.Dev.")	, SG_DATATYPE_Double);
+
+	s.Printf(SG_T("\n%s:\t%ld \n%s:\t%d \n%s:\t%d \n%s:\t%f\n\n%s\t%s\t%s"),
+		_TL("Number of Elements")		, Analysis.Get_nElements(),
+		_TL("Number of Variables")		, Analysis.Get_nFeatures(),
+		_TL("Number of Clusters")		, Analysis.Get_nClusters(),
+		_TL("Value of Target Function")	, Analysis.Get_SP(),
+		_TL("Cluster"), _TL("Elements"), _TL("Std.Dev.")
+	);
+
+	for(iFeature=0; iFeature<Analysis.Get_nFeatures(); iFeature++)
+	{
+		s	+= CSG_String::Format(SG_T("\t%s"), pTable->Get_Field_Name(Features[iFeature]));
+
+		pStatistics->Add_Field(pTable->Get_Field_Name(Features[iFeature]), SG_DATATYPE_Double);
+	}
+
+	Message_Add(s);
+
+	for(iCluster=0; iCluster<Analysis.Get_nClusters(); iCluster++)
+	{
+		s.Printf(SG_T("\n%d\t%d\t%f"), iCluster, Analysis.Get_nMembers(iCluster), sqrt(Analysis.Get_Variance(iCluster)));
+
+		pRecord	= pStatistics->Add_Record();
+		pRecord->Set_Value(0, iCluster);
+		pRecord->Set_Value(1, Analysis.Get_nMembers(iCluster));
+		pRecord->Set_Value(2, sqrt(Analysis.Get_Variance(iCluster)));
+
+		for(iFeature=0; iFeature<Analysis.Get_nFeatures(); iFeature++)
+		{
+			double	Centroid	= Analysis.Get_Centroid(iCluster, iFeature);
+
+			if( bNormalize )
+			{
+				Centroid	= pTable->Get_Mean(Features[iFeature]) + Centroid * pTable->Get_StdDev(Features[iFeature]);
+			}
+
+			s	+= CSG_String::Format(SG_T("\t%f"), Centroid);
+
+			pRecord->Set_Value(iFeature + 3, Centroid);
+		}
+
+		Message_Add(s, false);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules/table/table_calculus/table_cluster_analysis.h b/src/modules/table/table_calculus/table_cluster_analysis.h
new file mode 100644
index 0000000..55bad99
--- /dev/null
+++ b/src/modules/table/table_calculus/table_cluster_analysis.h
@@ -0,0 +1,100 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                    Table_Calculus                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                table_cluster_analysis.h               //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__table_cluster_analysis_H
+#define HEADER_INCLUDED__table_cluster_analysis_H
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CTable_Cluster_Analysis : public CSG_Module
+{
+public:
+	CTable_Cluster_Analysis(void);
+
+
+protected:
+
+	virtual int				On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+	virtual bool			On_Execute				(void);
+
+
+private:
+
+	void					Save_Statistics			(CSG_Table *pTable, int *Features, bool bNormalize, const CSG_Cluster_Analysis &Analysis);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__table_cluster_analysis_H
diff --git a/src/modules/table/table_tools/Makefile.in b/src/modules/table/table_tools/Makefile.in
index e0aafd7..c2584d6 100644
--- a/src/modules/table/table_tools/Makefile.in
+++ b/src/modules/table/table_tools/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/table/table_tools
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -105,6 +111,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -154,14 +162,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -205,9 +226,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules/tin/Makefile.in b/src/modules/tin/Makefile.in
index b2e0be5..4483297 100644
--- a/src/modules/tin/Makefile.in
+++ b/src/modules/tin/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules/tin
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules/tin/tin_tools/Makefile.in b/src/modules/tin/tin_tools/Makefile.in
index b769b48..608f954 100644
--- a/src/modules/tin/tin_tools/Makefile.in
+++ b/src/modules/tin/tin_tools/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules/tin/tin_tools
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -107,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -156,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -207,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_contrib/Makefile.in b/src/modules_contrib/Makefile.in
index d64935f..fcd553e 100644
--- a/src/modules_contrib/Makefile.in
+++ b/src/modules_contrib/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_contrib
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_contrib/contrib_a_perego/Makefile.in b/src/modules_contrib/contrib_a_perego/Makefile.in
index aae53c5..bd98ea4 100644
--- a/src/modules_contrib/contrib_a_perego/Makefile.in
+++ b/src/modules_contrib/contrib_a_perego/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_contrib/contrib_a_perego
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_contrib/contrib_a_perego/contrib_a_perego/Makefile.in b/src/modules_contrib/contrib_a_perego/contrib_a_perego/Makefile.in
index 0fbc9f5..e51b947 100644
--- a/src/modules_contrib/contrib_a_perego/contrib_a_perego/Makefile.in
+++ b/src/modules_contrib/contrib_a_perego/contrib_a_perego/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_contrib/contrib_a_perego/contrib_a_perego
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -106,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_contrib/contrib_s_liersch/Makefile.in b/src/modules_contrib/contrib_s_liersch/Makefile.in
index 92f123c..ef4982a 100644
--- a/src/modules_contrib/contrib_s_liersch/Makefile.in
+++ b/src/modules_contrib/contrib_s_liersch/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_contrib/contrib_s_liersch
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_contrib/contrib_s_liersch/ihacres/Makefile.in b/src/modules_contrib/contrib_s_liersch/ihacres/Makefile.in
index 0e16aa6..fc81726 100644
--- a/src/modules_contrib/contrib_s_liersch/ihacres/Makefile.in
+++ b/src/modules_contrib/contrib_s_liersch/ihacres/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_contrib/contrib_s_liersch/ihacres
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -107,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -156,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -207,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_geostatistics/Makefile.in b/src/modules_geostatistics/Makefile.in
index d62fbec..c0fa9c7 100644
--- a/src/modules_geostatistics/Makefile.in
+++ b/src/modules_geostatistics/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_geostatistics
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_geostatistics/geostatistics/Makefile.in b/src/modules_geostatistics/geostatistics/Makefile.in
index 514cdeb..a9ef902 100644
--- a/src/modules_geostatistics/geostatistics/Makefile.in
+++ b/src/modules_geostatistics/geostatistics/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_geostatistics/geostatistics
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.cpp b/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.cpp
index b9afb97..6efe7b4 100644
--- a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.cpp
+++ b/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.cpp
@@ -66,6 +66,30 @@
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
+enum
+{
+	id_Mean		= 0,
+	id_DifMean,
+	id_Min,
+	id_Max,
+	id_Range,
+	id_Var,
+	id_StdDev,
+	id_StdDevLo,
+	id_StdDevHi,
+	id_DevMean,
+	id_Percent,
+	id_Count
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
 CGSGrid_Directional_Statistics::CGSGrid_Directional_Statistics(void)
 {
 	Set_Name		(_TL("Directional Statistics for Single Grid"));
@@ -92,6 +116,18 @@ CGSGrid_Directional_Statistics::CGSGrid_Directional_Statistics(void)
 	Parameters.Add_Grid(NULL, "DEVMEAN"		, _TL("Deviation from Arithmetic Mean")		, _TL(""), PARAMETER_OUTPUT_OPTIONAL);
 	Parameters.Add_Grid(NULL, "PERCENT"		, _TL("Percentile")							, _TL(""), PARAMETER_OUTPUT_OPTIONAL);
 
+	Parameters.Add_Shapes(
+		NULL, "POINTS"		, _TL("Points"),
+		_TL(""),
+		PARAMETER_INPUT_OPTIONAL, SHAPE_TYPE_Point
+	);
+
+	Parameters.Add_Shapes(
+		NULL, "POINTS_OUT"	, _TL("Directional Statistics for Points"),
+		_TL(""),
+		PARAMETER_OUTPUT_OPTIONAL, SHAPE_TYPE_Point
+	);
+
 	Parameters.Add_Value(
 		NULL, "DIRECTION"	, _TL("Direction [Degree]"),
 		_TL(""),
@@ -127,7 +163,8 @@ CGSGrid_Directional_Statistics::CGSGrid_Directional_Statistics(void)
 bool CGSGrid_Directional_Statistics::On_Execute(void)
 {
 	int			Radius;
-	double		Direction, Tolerance;
+	double		Direction, Tolerance, s[id_Count];
+	CSG_Shapes	*pPoints;
 
 	//-----------------------------------------------------
 	m_pGrid		= Parameters("GRID")		->asGrid();
@@ -144,10 +181,12 @@ bool CGSGrid_Directional_Statistics::On_Execute(void)
 	m_pDevMean	= Parameters("DEVMEAN")		->asGrid();
 	m_pPercent	= Parameters("PERCENT")		->asGrid();
 
+	pPoints		= Parameters("POINTS")		->asShapes();
+
 	//-----------------------------------------------------
-	if( !m_pGrid || (!m_pMean && !m_pDifMean && !m_pMin && !m_pMax && !m_pRange && !m_pVar && !m_pStdDev && !m_pStdDevLo && !m_pStdDevHi && !m_pPercent) )
+	if( !(m_pMean || m_pDifMean || m_pMin || m_pMax || m_pRange || m_pVar || m_pStdDev || m_pStdDevLo || m_pStdDevHi || m_pPercent || pPoints) )
 	{
-		Message_Dlg(_TL("no target grids specified"));
+		Message_Dlg(_TL("no target specified"));
 
 		return( false );
 	}
@@ -171,15 +210,92 @@ bool CGSGrid_Directional_Statistics::On_Execute(void)
 	}
 
 	//-----------------------------------------------------
-	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
+	if( m_pMean || m_pDifMean || m_pMin || m_pMax || m_pRange || m_pVar || m_pStdDev || m_pStdDevLo || m_pStdDevHi || m_pPercent )
 	{
-		for(int x=0; x<Get_NX(); x++)
+		for(int y=0; y<Get_NY() && Set_Progress(y); y++)
 		{
-			Get_Statistics(x, y);
+			for(int x=0; x<Get_NX(); x++)
+			{
+				if( Get_Statistics(x, y, s) )
+				{
+					if( m_pMean     )	m_pMean		->Set_Value(x, y, s[id_Mean    ]);
+					if( m_pDifMean  )	m_pDifMean	->Set_Value(x, y, s[id_DifMean ]);
+					if( m_pMin      )	m_pMin		->Set_Value(x, y, s[id_Min     ]);
+					if( m_pMax      )	m_pMax		->Set_Value(x, y, s[id_Max     ]);
+					if( m_pRange    )	m_pRange	->Set_Value(x, y, s[id_Range   ]);
+					if( m_pVar      )	m_pVar		->Set_Value(x, y, s[id_Var     ]);
+					if( m_pStdDev   )	m_pStdDev	->Set_Value(x, y, s[id_StdDev  ]);
+					if( m_pStdDevLo )	m_pStdDevLo	->Set_Value(x, y, s[id_StdDevLo]);
+					if( m_pStdDevHi )	m_pStdDevHi	->Set_Value(x, y, s[id_StdDevHi]);
+					if( m_pDevMean  )	m_pDevMean	->Set_Value(x, y, s[id_DevMean ]);
+					if( m_pPercent  )	m_pPercent	->Set_Value(x, y, s[id_Percent ]);
+				}
+				else
+				{
+					if( m_pMean     )	m_pMean		->Set_NoData(x, y);
+					if( m_pDifMean  )	m_pDifMean	->Set_NoData(x, y);
+					if( m_pMin      )	m_pMin		->Set_NoData(x, y);
+					if( m_pMax      )	m_pMax		->Set_NoData(x, y);
+					if( m_pRange    )	m_pRange	->Set_NoData(x, y);
+					if( m_pVar      )	m_pVar		->Set_NoData(x, y);
+					if( m_pStdDev   )	m_pStdDev	->Set_NoData(x, y);
+					if( m_pStdDevLo )	m_pStdDevLo	->Set_NoData(x, y);
+					if( m_pStdDevHi )	m_pStdDevHi	->Set_NoData(x, y);
+					if( m_pDevMean  )	m_pDevMean	->Set_NoData(x, y);
+					if( m_pPercent  )	m_pPercent	->Set_NoData(x, y);
+				}
+			}
 		}
 	}
 
 	//-----------------------------------------------------
+	if( pPoints )
+	{
+		if( Parameters("POINTS_OUT")->asShapes() && Parameters("POINTS_OUT")->asShapes() != pPoints )
+		{
+			pPoints	= Parameters("POINTS_OUT")->asShapes();
+			pPoints->Create(*Parameters("POINTS")->asShapes());
+			pPoints->Set_Name(CSG_String::Format(SG_T("%s [a: %.2f, d: %.2f]"), _TL("Directional Statistics"), Direction * M_RAD_TO_DEG, Tolerance * M_RAD_TO_DEG));
+		}
+
+		int		x, y, id_Offset	= pPoints->Get_Field_Count();
+
+		pPoints->Add_Field(_TL("MEAN")			, SG_DATATYPE_Double);
+		pPoints->Add_Field(_TL("DIFF_MEAN")		, SG_DATATYPE_Double);
+		pPoints->Add_Field(_TL("MIN")			, SG_DATATYPE_Double);
+		pPoints->Add_Field(_TL("MAX")			, SG_DATATYPE_Double);
+		pPoints->Add_Field(_TL("RANGE")			, SG_DATATYPE_Double);
+		pPoints->Add_Field(_TL("VARIANCE")		, SG_DATATYPE_Double);
+		pPoints->Add_Field(_TL("STDDEV")		, SG_DATATYPE_Double);
+		pPoints->Add_Field(_TL("STDDEV_LO")		, SG_DATATYPE_Double);
+		pPoints->Add_Field(_TL("STDDEV_HI")		, SG_DATATYPE_Double);
+		pPoints->Add_Field(_TL("STDDEV_MEAN")	, SG_DATATYPE_Double);
+		pPoints->Add_Field(_TL("PERCENTILE")	, SG_DATATYPE_Double);
+
+		for(int iPoint=0; iPoint<pPoints->Get_Count() && Set_Progress(iPoint, pPoints->Get_Count()); iPoint++)
+		{
+			CSG_Shape	*pPoint	= pPoints->Get_Shape(iPoint);
+
+			if( Get_System()->Get_World_to_Grid(x, y, pPoint->Get_Point(0)) && Get_Statistics(x, y, s) )
+			{
+				for(int i=0; i<id_Count; i++)
+				{
+					pPoint->Set_Value(id_Offset + i, s[i]);
+				}
+			}
+			else
+			{
+				for(int i=0; i<id_Count; i++)
+				{
+					pPoint->Set_NoData(id_Offset + i);
+				}
+			}
+		}
+
+		DataObject_Update(pPoints);
+	}
+
+	//-----------------------------------------------------
 	m_Cells.Destroy();
 
 	return( true );
@@ -193,7 +309,7 @@ bool CGSGrid_Directional_Statistics::On_Execute(void)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-bool CGSGrid_Directional_Statistics::Get_Statistics(int x, int y)
+bool CGSGrid_Directional_Statistics::Get_Statistics(int x, int y, double *s)
 {
 	if( m_pGrid->is_InGrid(x, y) )
 	{
@@ -218,35 +334,23 @@ bool CGSGrid_Directional_Statistics::Get_Statistics(int x, int y)
 		//-------------------------------------------------
 		if( Statistics.Get_Weights() > 0.0 )
 		{
-			if( m_pMean     )	m_pMean		->Set_Value(x, y, Statistics.Get_Mean());
-			if( m_pDifMean  )	m_pDifMean	->Set_Value(x, y, m_pGrid->asDouble(x, y) - Statistics.Get_Mean());
-			if( m_pMin      )	m_pMin		->Set_Value(x, y, Statistics.Get_Minimum());
-			if( m_pMax      )	m_pMax		->Set_Value(x, y, Statistics.Get_Maximum());
-			if( m_pRange    )	m_pRange	->Set_Value(x, y, Statistics.Get_Range());
-			if( m_pVar      )	m_pVar		->Set_Value(x, y, Statistics.Get_Variance());
-			if( m_pStdDev   )	m_pStdDev	->Set_Value(x, y, Statistics.Get_StdDev());
-			if( m_pStdDevLo )	m_pStdDevLo	->Set_Value(x, y, Statistics.Get_Mean() - Statistics.Get_StdDev());
-			if( m_pStdDevHi )	m_pStdDevHi	->Set_Value(x, y, Statistics.Get_Mean() + Statistics.Get_StdDev());
-			if( m_pDevMean  )	m_pDevMean	->Set_Value(x, y, Statistics.Get_StdDev() > 0.0 ? ((z - Statistics.Get_Mean()) / Statistics.Get_StdDev()) : 0.0);
-			if( m_pPercent  )	m_pPercent	->Set_Value(x, y, 100.0 * nLower / (double)Statistics.Get_Count());
+			s[id_Mean    ]	= Statistics.Get_Mean();
+			s[id_DifMean ]	= m_pGrid->asDouble(x, y) - Statistics.Get_Mean();
+			s[id_Min     ]	= Statistics.Get_Minimum();
+			s[id_Max     ]	= Statistics.Get_Maximum();
+			s[id_Range   ]	= Statistics.Get_Range();
+			s[id_Var     ]	= Statistics.Get_Variance();
+			s[id_StdDev  ]	= Statistics.Get_StdDev();
+			s[id_StdDevLo]	= Statistics.Get_Mean() - Statistics.Get_StdDev();
+			s[id_StdDevHi]	= Statistics.Get_Mean() + Statistics.Get_StdDev();
+			s[id_DevMean ]	= Statistics.Get_StdDev() > 0.0 ? ((z - Statistics.Get_Mean()) / Statistics.Get_StdDev()) : 0.0;
+			s[id_Percent ]	= 100.0 * nLower / (double)Statistics.Get_Count();
 
 			return( true );
 		}
 	}
 
 	//-----------------------------------------------------
-	if( m_pMean     )	m_pMean		->Set_NoData(x, y);
-	if( m_pDifMean  )	m_pDifMean	->Set_NoData(x, y);
-	if( m_pMin      )	m_pMin		->Set_NoData(x, y);
-	if( m_pMax      )	m_pMax		->Set_NoData(x, y);
-	if( m_pRange    )	m_pRange	->Set_NoData(x, y);
-	if( m_pVar      )	m_pVar		->Set_NoData(x, y);
-	if( m_pStdDev   )	m_pStdDev	->Set_NoData(x, y);
-	if( m_pStdDevLo )	m_pStdDevLo	->Set_NoData(x, y);
-	if( m_pStdDevHi )	m_pStdDevHi	->Set_NoData(x, y);
-	if( m_pDevMean  )	m_pDevMean	->Set_NoData(x, y);
-	if( m_pPercent  )	m_pPercent	->Set_NoData(x, y);
-
 	return( false );
 }
 
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.h b/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.h
index 0f9cbc8..cdd664d 100644
--- a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.h
+++ b/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Directional_Statistics.h
@@ -95,7 +95,7 @@ private:
 	CSG_Grid				*m_pGrid, *m_pMean, *m_pDifMean, *m_pMin, *m_pMax, *m_pRange, *m_pVar, *m_pStdDev, *m_pStdDevLo, *m_pStdDevHi, *m_pDevMean, *m_pPercent;
 
 
-	bool					Get_Statistics		(int x, int y);
+	bool					Get_Statistics		(int x, int y, double *s);
 
 };
 
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp b/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp
deleted file mode 100644
index 0237732..0000000
--- a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.cpp
+++ /dev/null
@@ -1,330 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                  Geostatistics_Grid                   //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                 GSGrid_Regression.cpp                 //
-//                                                       //
-//                 Copyright (C) 2004 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "GSGrid_Regression.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define GRID_ZFACTOR	true
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CGSGrid_Regression::CGSGrid_Regression(void)
-{
-	CSG_Parameter	*pNode;
-
-	//-----------------------------------------------------
-	Set_Name		(_TL("Regression Analysis (Grid/Points)"));
-
-	Set_Author		(SG_T("(c) 2004 by O.Conrad"));
-
-	Set_Description	(_TW(
-		"Regression analysis of point attributes with grid values. "
-		"The regression function is used to create a new grid with (extrapolated) values. \n"
-		"\n"
-		"Reference:\n"
-		"- Bahrenberg, G., Giese, E., Nipper, J. (1990): "
-		"'Statistische Methoden in der Geographie 1 - Univariate und bivariate Statistik', "
-		"Stuttgart, 233p.\n"
-	));
-
-	//-----------------------------------------------------
-	Parameters.Add_Grid(
-		NULL	, "GRID"		, _TL("Grid"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	pNode	= Parameters.Add_Shapes(
-		NULL	, "SHAPES"		, _TL("Shapes"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	Parameters.Add_Table_Field(
-		pNode	, "ATTRIBUTE"	, _TL("Attribute"),
-		_TL("")
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "REGRESSION"	, _TL("Regression"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Shapes(
-		NULL	, "RESIDUAL"	, _TL("Residuals"),
-		_TL(""),
-		PARAMETER_OUTPUT_OPTIONAL, SHAPE_TYPE_Point
-	);
-
-	Parameters.Add_Choice(
-		NULL	,"INTERPOL"		, _TL("Grid Interpolation"),
-		_TL(""),
-
-		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|"),
-			_TL("Nearest Neighbor"),
-			_TL("Bilinear Interpolation"),
-			_TL("Inverse Distance Interpolation"),
-			_TL("Bicubic Spline Interpolation"),
-			_TL("B-Spline Interpolation")
-		), 4
-	);
-
-	Parameters.Add_Choice(
-		NULL	, "METHOD"		, _TL("Regression Function"),
-		_TL(""),
-
-		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|%s|"),
-			_TL("Y = a + b * X (linear)"),
-			_TL("Y = a + b / X"),
-			_TL("Y = a / (b - X)"),
-			_TL("Y = a * X^b (power)"),
-			_TL("Y = a e^(b * X) (exponential)"),
-			_TL("Y = a + b * ln(X) (logarithmic)")
-		), 0
-	);
-}
-
-//---------------------------------------------------------
-CGSGrid_Regression::~CGSGrid_Regression(void)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CGSGrid_Regression::On_Execute(void)
-{
-	int					iAttribute;
-	TSG_Regression_Type	Type;
-	CSG_Shapes			*pShapes, *pResiduals;
-	CSG_Grid			*pGrid, *pRegression;
-
-	//-----------------------------------------------------
-	pGrid			= Parameters("GRID")		->asGrid();
-	pRegression		= Parameters("REGRESSION")	->asGrid();
-	pShapes			= Parameters("SHAPES")		->asShapes();
-	pResiduals		= Parameters("RESIDUAL")	->asShapes();
-	iAttribute		= Parameters("ATTRIBUTE")	->asInt();
-	m_Interpolation	= Parameters("INTERPOL")	->asInt();
-
-	switch( Parameters("METHOD")->asInt() )
-	{
-	default:
-	case 0:	Type	= REGRESSION_Linear;	break;	// Y = a + b * X
-	case 1:	Type	= REGRESSION_Rez_X;		break;	// Y = a + b / X
-	case 2:	Type	= REGRESSION_Rez_Y;		break;	// Y = a / (b - X)
-	case 3:	Type	= REGRESSION_Pow;		break;	// Y = a * X^b
-	case 4:	Type	= REGRESSION_Exp;		break;	// Y = a e^(b * X)
-	case 5:	Type	= REGRESSION_Log;		break;	// Y = a + b * ln(X)
-	}
-
-	//-----------------------------------------------------
-	if( Get_Regression(pGrid, pShapes, pResiduals, iAttribute, Type) )
-	{
-		pRegression->Set_Name(CSG_String::Format(SG_T("%s (%s)"), pShapes->Get_Name(), Get_Name()));
-
-		Set_Regression(pGrid, pRegression);
-
-		Set_Residuals(pResiduals);
-
-		Message_Add(m_Regression.asString());
-
-		m_Regression.Destroy();
-
-		return( true );
-	}
-
-	//-----------------------------------------------------
-	m_Regression.Destroy();
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CGSGrid_Regression::Get_Regression(CSG_Grid *pGrid, CSG_Shapes *pShapes, CSG_Shapes *pResiduals, int iAttribute, TSG_Regression_Type Type)
-{
-	int			iShape, iPart, iPoint;
-	double		zShape, zGrid;
-	TSG_Point	Point;
-	CSG_Shape	*pShape, *pResidual;
-
-	//-----------------------------------------------------
-	if( pResiduals )
-	{
-		pResiduals->Create(SHAPE_TYPE_Point, _TL("Residuals"));
-		pResiduals->Add_Field("ID"			, SG_DATATYPE_Int);
-		pResiduals->Add_Field("Y"			, SG_DATATYPE_Double);
-		pResiduals->Add_Field("X"			, SG_DATATYPE_Double);
-		pResiduals->Add_Field("Y_GUESS"		, SG_DATATYPE_Double);
-		pResiduals->Add_Field("Y_RESIDUAL"	, SG_DATATYPE_Double);
-		pResiduals->Add_Field("Y_RES_VAR"	, SG_DATATYPE_Double);
-	}
-
-	m_Regression.Destroy();
-
-	//-----------------------------------------------------
-	for(iShape=0; iShape<pShapes->Get_Count() && Set_Progress(iShape, pShapes->Get_Count()); iShape++)
-	{
-		pShape	= pShapes->Get_Shape(iShape);
-		zShape	= pShape->asDouble(iAttribute);
-
-		for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
-		{
-			for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
-			{
-				if( pGrid->Get_Value(Point = pShape->Get_Point(iPoint, iPart), zGrid, m_Interpolation, GRID_ZFACTOR) )
-				{
-					m_Regression.Add_Values(zGrid, zShape);
-
-					if( pResiduals )
-					{
-						pResidual	= pResiduals->Add_Shape();
-						pResidual->Add_Point(Point);
-						pResidual->Set_Value(0, m_Regression.Get_Count());
-						pResidual->Set_Value(1, zShape);
-						pResidual->Set_Value(2, zGrid);
-					}
-				}
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	return( m_Regression.Calculate(Type) );
-}
-
-//---------------------------------------------------------
-bool CGSGrid_Regression::Set_Regression(CSG_Grid *pGrid, CSG_Grid *pRegression)
-{
-	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
-	{
-		for(int x=0; x<Get_NX(); x++)
-		{
-			if( pGrid->is_NoData(x, y) )
-				pRegression->Set_NoData(x, y);
-			else
-				pRegression->Set_Value (x, y, m_Regression.Get_y(pGrid->asDouble(x, y, GRID_ZFACTOR)));
-		}
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CGSGrid_Regression::Set_Residuals(CSG_Shapes *pResiduals)
-{
-	int		iPoint;
-	double	m, b, v, y;
-	CSG_Shape	*pPoint;
-
-	if( pResiduals )
-	{
-		m	= m_Regression.Get_Coefficient();
-		b	= m_Regression.Get_Constant();
-		v	= 100.0 / m_Regression.Get_yVariance();
-
-		for(iPoint=0; iPoint<pResiduals->Get_Count() && Set_Progress(iPoint, pResiduals->Get_Count()); iPoint++)
-		{
-			pPoint	= pResiduals->Get_Shape(iPoint);
-
-			pPoint->Set_Value(3, y = pPoint->asDouble(2) * m + b);
-			pPoint->Set_Value(4, y = pPoint->asDouble(1) - y);
-			pPoint->Set_Value(5, y * v);
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.h b/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.h
deleted file mode 100644
index 1e7e124..0000000
--- a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression.h
+++ /dev/null
@@ -1,110 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                  Geostatistics_Grid                   //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                  GSGrid_Regression.h                  //
-//                                                       //
-//                 Copyright (C) 2004 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__GSGrid_Regression_H
-#define HEADER_INCLUDED__GSGrid_Regression_H
-
-//---------------------------------------------------------
-#include "MLB_Interface.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CGSGrid_Regression : public CSG_Module_Grid
-{
-public:
-	CGSGrid_Regression(void);
-	virtual ~CGSGrid_Regression(void);
-
-	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("R:Regression Analysis") );	}
-
-
-protected:
-
-	virtual bool			On_Execute			(void);
-
-
-private:
-
-	int						m_Interpolation;
-
-	CSG_Regression			m_Regression;
-
-
-	bool					Get_Regression		(CSG_Grid *pGrid, CSG_Shapes *pShapes, CSG_Shapes *pResiduals, int iAttribute, TSG_Regression_Type Type);
-	bool					Set_Regression		(CSG_Grid *pGrid, CSG_Grid *pRegression);
-	bool					Set_Residuals		(CSG_Shapes *pResiduals);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__GSGrid_Regression_H
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp b/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp
deleted file mode 100644
index c329cf9..0000000
--- a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.cpp
+++ /dev/null
@@ -1,388 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                  Geostatistics_Grid                   //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//             GSGrid_Regression_Multiple.cpp            //
-//                                                       //
-//                 Copyright (C) 2004 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "GSGrid_Regression_Multiple.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define GRID_ZFACTOR	true
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CGSGrid_Regression_Multiple::CGSGrid_Regression_Multiple(void)
-{
-	CSG_Parameter	*pNode;
-
-	//-----------------------------------------------------
-	Set_Name		(_TL("Multiple Regression Analysis (Grids/Points)"));
-
-	Set_Author		(SG_T("(c) 2004 by O.Conrad"));
-
-	Set_Description	(_TW(
-		"Linear regression analysis of point attributes with multiple grids. "
-		"Details of the regression/correlation analysis will be saved to a table. "
-		"The regression function is used to create a new grid with (extrapolated) values. "
-		"The multiple regression analysis uses a forward selection procedure. \n"
-		"\n"
-		"Reference:\n"
-		"- Bahrenberg, G., Giese, E., Nipper, J. (1992): "
-		"'Statistische Methoden in der Geographie 2 - Multivariate Statistik', "
-		"Stuttgart, 415p.\n"
-	));
-
-	//-----------------------------------------------------
-	Parameters.Add_Grid_List(
-		NULL	, "GRIDS"		, _TL("Grids"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	pNode	= Parameters.Add_Shapes(
-		NULL	, "SHAPES"		, _TL("Shapes"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	Parameters.Add_Table_Field(
-		pNode	, "ATTRIBUTE"	, _TL("Attribute"),
-		_TL("")
-	);
-
-	Parameters.Add_Table(
-		NULL	, "TABLE"		, _TL("Details"),
-		_TL(""),
-		PARAMETER_OUTPUT_OPTIONAL
-	);
-
-	Parameters.Add_Shapes(
-		NULL	, "RESIDUAL"	, _TL("Residuals"),
-		_TL(""),
-		PARAMETER_OUTPUT_OPTIONAL, SHAPE_TYPE_Point
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "REGRESSION"	, _TL("Regression"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Choice(
-		NULL	,"INTERPOL"		, _TL("Grid Interpolation"),
-		_TL(""),
-		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|"),
-			_TL("Nearest Neighbor"),
-			_TL("Bilinear Interpolation"),
-			_TL("Inverse Distance Interpolation"),
-			_TL("Bicubic Spline Interpolation"),
-			_TL("B-Spline Interpolation")
-		), 4
-	);
-}
-
-//---------------------------------------------------------
-CGSGrid_Regression_Multiple::~CGSGrid_Regression_Multiple(void)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CGSGrid_Regression_Multiple::On_Execute(void)
-{
-	int						iAttribute;
-	CSG_Table					*pTable;
-	CSG_Shapes					*pShapes, *pResiduals;
-	CSG_Grid					*pRegression;
-	CSG_Parameter_Grid_List	*pGrids;
-
-	//-----------------------------------------------------
-	pGrids			= Parameters("GRIDS")		->asGridList();
-	pRegression		= Parameters("REGRESSION")	->asGrid();
-	pTable			= Parameters("TABLE")		->asTable();
-	pShapes			= Parameters("SHAPES")		->asShapes();
-	pResiduals		= Parameters("RESIDUAL")	->asShapes();
-	iAttribute		= Parameters("ATTRIBUTE")	->asInt();
-	m_Interpolation	= Parameters("INTERPOL")	->asInt();
-
-	//-----------------------------------------------------
-	if( Get_Regression(pGrids, pShapes, iAttribute) )
-	{
-		pRegression->Set_Name(CSG_String::Format(SG_T("%s (%s)"), pShapes->Get_Name(), Get_Name()));
-
-		Set_Regression(pGrids, pRegression);
-
-		Set_Residuals(pShapes, iAttribute, pResiduals, pRegression);
-
-		Set_Message(pGrids);
-
-		if( pTable )
-		{
-			pTable->Assign(m_Regression.Get_Result());
-			pTable->Set_Name(_TL("Multiple Regression Analysis"));
-		}
-
-		m_Regression.Destroy();
-
-		return( true );
-	}
-
-	//-----------------------------------------------------
-	m_Regression.Destroy();
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CGSGrid_Regression_Multiple::Get_Regression(CSG_Parameter_Grid_List *pGrids, CSG_Shapes *pShapes, int iAttribute)
-{
-	int				iShape, iPart, iPoint, iGrid;
-	double			zShape, zGrid;
-	TSG_Point		Point;
-	CSG_Table			Table;
-	CSG_Table_Record	*pRecord;
-	CSG_Shape			*pShape;
-
-	//-----------------------------------------------------
-	Table.Destroy();
-	Table.Add_Field(pShapes->Get_Name(), SG_DATATYPE_Double);
-
-	for(iGrid=0; iGrid<pGrids->Get_Count(); iGrid++)
-	{
-		Table.Add_Field(pGrids->asGrid(iGrid)->Get_Name(), SG_DATATYPE_Double);
-	}
-
-	//-----------------------------------------------------
-	for(iShape=0; iShape<pShapes->Get_Count() && Set_Progress(iShape, pShapes->Get_Count()); iShape++)
-	{
-		pShape	= pShapes->Get_Shape(iShape);
-		zShape	= pShape->asDouble(iAttribute);
-
-		for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
-		{
-			for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
-			{
-				Point	= pShape->Get_Point(iPoint, iPart);
-				pRecord	= Table.Add_Record();
-				pRecord->Set_Value(0, zShape);
-
-				for(iGrid=0; iGrid<pGrids->Get_Count() && pRecord; iGrid++)
-				{
-					if( pGrids->asGrid(iGrid)->Get_Value(Point, zGrid, m_Interpolation, GRID_ZFACTOR) )
-					{
-						pRecord->Set_Value(1 + iGrid, zGrid);
-					}
-					else
-					{
-						pRecord	= NULL;
-						Table.Del_Record(Table.Get_Record_Count() - 1);
-					}
-				}
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	return( m_Regression.Calculate(Table) );
-}
-
-//---------------------------------------------------------
-bool CGSGrid_Regression_Multiple::Set_Regression(CSG_Parameter_Grid_List *pGrids, CSG_Grid *pRegression)
-{
-	bool	bOk;
-	int		x, y, i;
-	double	z;
-
-	//-----------------------------------------------------
-	for(y=0; y<Get_NY() && Set_Progress(y); y++)
-	{
-		for(x=0; x<Get_NX(); x++)
-		{
-			z	= m_Regression.Get_RConst();
-
-			for(i=0, bOk=true; i<pGrids->Get_Count() && bOk; i++)
-			{
-				if( (bOk = !pGrids->asGrid(i)->is_NoData(x, y)) == true )
-				{
-					z	+= m_Regression.Get_RCoeff(i) * pGrids->asGrid(i)->asDouble(x, y);
-				}
-			}
-
-			if( bOk )
-			{
-				pRegression->Set_Value (x, y, z);
-			}
-			else
-			{
-				pRegression->Set_NoData(x, y);
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CGSGrid_Regression_Multiple::Set_Residuals(CSG_Shapes *pShapes, int iAttribute, CSG_Shapes *pResiduals, CSG_Grid *pRegression)
-{
-	int			iPoint, iPart, iShape;
-	double		zShape, zGrid;
-	TSG_Point	Point;
-	CSG_Shape		*pShape, *pResidual;
-
-	//-----------------------------------------------------
-	if( pResiduals )
-	{
-		pResiduals->Create(SHAPE_TYPE_Point, CSG_String::Format(SG_T("%s [%s]"), pShapes->Get_Name(), _TL("Residuals")));
-		pResiduals->Add_Field(pShapes->Get_Field_Name(iAttribute), SG_DATATYPE_Double);
-		pResiduals->Add_Field("TREND"	, SG_DATATYPE_Double);
-		pResiduals->Add_Field("RESIDUAL", SG_DATATYPE_Double);
-
-		//-------------------------------------------------
-		for(iShape=0; iShape<pShapes->Get_Count() && Set_Progress(iShape, pShapes->Get_Count()); iShape++)
-		{
-			pShape	= pShapes->Get_Shape(iShape);
-			zShape	= pShape->asDouble(iAttribute);
-
-			for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
-			{
-				for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
-				{
-					Point	= pShape->Get_Point(iPoint, iPart);
-
-					if( pRegression->Get_Value(Point, zGrid, m_Interpolation, GRID_ZFACTOR) )
-					{
-						pResidual	= pResiduals->Add_Shape();
-						pResidual->Add_Point(Point);
-						pResidual->Set_Value(0, zShape);
-						pResidual->Set_Value(1, zGrid);
-						pResidual->Set_Value(2, zShape - zGrid);
-					}
-				}
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	return( true );
-}
-
-//---------------------------------------------------------
-void CGSGrid_Regression_Multiple::Set_Message(CSG_Parameter_Grid_List *pGrids)
-{
-	int		i, j;
-
-	Message_Add(SG_T("\n"), false);
-	Message_Add(CSG_String::Format(SG_T("\n%s:"), _TL("Regression")), false);
-	Message_Add(CSG_String::Format(SG_T("\n Y = %f"), m_Regression.Get_RConst()), false);
-
-	for(i=0; i<pGrids->Get_Count(); i++)
-	{
-		if( (j = m_Regression.Get_Ordered(i)) >= 0 && j < pGrids->Get_Count() )
-		{
-			Message_Add(CSG_String::Format(SG_T(" %+f*[%s]"), m_Regression.Get_RCoeff(j), pGrids->asGrid(j)->Get_Name()), false);
-		}
-	}
-
-	Message_Add(SG_T("\n"), false);
-	Message_Add(CSG_String::Format(SG_T("\n%s:"), _TL("Correlation")), false);
-
-	for(i=0; i<pGrids->Get_Count(); i++)
-	{
-		if( (j = m_Regression.Get_Ordered(i)) >= 0 && j < pGrids->Get_Count() )
-		{
-			Message_Add(CSG_String::Format(SG_T("\n%d: R\xc2\xb2 = %f%% [%f%%] -> %s"), i + 1, 100.0 * m_Regression.Get_R2(j), 100.0 * m_Regression.Get_R2_Change(j), pGrids->asGrid(j)->Get_Name()), false);
-		}
-	}
-
-	Message_Add(SG_T("\n"), false);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.h b/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.h
deleted file mode 100644
index 21cdd59..0000000
--- a/src/modules_geostatistics/geostatistics/geostatistics_grid/GSGrid_Regression_Multiple.h
+++ /dev/null
@@ -1,111 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                  Geostatistics_Grid                   //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//              GSGrid_Regression_Multiple.h             //
-//                                                       //
-//                 Copyright (C) 2004 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__GSGrid_Regression_Multiple_H
-#define HEADER_INCLUDED__GSGrid_Regression_Multiple_H
-
-//---------------------------------------------------------
-#include "MLB_Interface.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CGSGrid_Regression_Multiple : public CSG_Module_Grid
-{
-public:
-	CGSGrid_Regression_Multiple(void);
-	virtual ~CGSGrid_Regression_Multiple(void);
-
-	virtual const SG_Char *		Get_MenuPath		(void)	{	return( _TL("R:Regression Analysis") );	}
-
-
-protected:
-
-	virtual bool				On_Execute			(void);
-
-
-private:
-
-	int							m_Interpolation;
-
-	CSG_Regression_Multiple		m_Regression;
-
-
-	bool						Get_Regression		(CSG_Parameter_Grid_List *pGrids, CSG_Shapes *pShapes, int iAttribute);
-	bool						Set_Regression		(CSG_Parameter_Grid_List *pGrids, CSG_Grid *pRegression);
-	bool						Set_Residuals		(CSG_Shapes *pShapes, int iAttribute, CSG_Shapes *pResiduals, CSG_Grid *pRegression);
-	void						Set_Message			(CSG_Parameter_Grid_List *pGrids);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__GSGrid_Regression_Multiple_H
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp b/src/modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp
index 37b3710..51d976e 100644
--- a/src/modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp
+++ b/src/modules_geostatistics/geostatistics/geostatistics_grid/MLB_Interface.cpp
@@ -98,6 +98,7 @@ const SG_Char * Get_Info(int i)
 #include "GSGrid_Statistics.h"
 #include "GSGrid_Zonal_Statistics.h"
 #include "GSGrid_Directional_Statistics.h"
+#include "grid_autocorrelation.h"
 
 
 //---------------------------------------------------------
@@ -114,6 +115,7 @@ CSG_Module *		Create_Module(int i)
 	case  4:	return( new CGSGrid_Statistics );
 	case  5:	return( new CGSGrid_Zonal_Statistics );
 	case  6:	return( new CGSGrid_Directional_Statistics );
+	case  7:	return( new CGrid_Autocorrelation );
 	}
 
 	return( NULL );
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am b/src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am
index 1a4d303..9b42bc6 100644
--- a/src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am
+++ b/src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.11 2010/07/08 14:11:51 johanvdw Exp $
+# $Id: Makefile.am,v 1.12 2010/11/02 10:58:18 oconrad Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
@@ -14,6 +14,7 @@ AM_LDFLAGS         = -fPIC -shared -avoid-version
 pkglib_LTLIBRARIES = libgeostatistics_grid.la
 libgeostatistics_grid_la_SOURCES =\
 fast_representativeness.cpp\
+grid_autocorrelation.cpp\
 GSGrid_Directional_Statistics.cpp\
 GSGrid_Residuals.cpp\
 GSGrid_Statistics.cpp\
@@ -22,6 +23,7 @@ GSGrid_Variance_Radius.cpp\
 GSGrid_Zonal_Statistics.cpp\
 MLB_Interface.cpp\
 fast_representativeness.h\
+grid_autocorrelation.h\
 GSGrid_Directional_Statistics.h\
 GSGrid_Residuals.h\
 GSGrid_Statistics.h\
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile.in b/src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile.in
index 90463a0..6809c72 100644
--- a/src/modules_geostatistics/geostatistics/geostatistics_grid/Makefile.in
+++ b/src/modules_geostatistics/geostatistics/geostatistics_grid/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_geostatistics/geostatistics/geostatistics_grid
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -69,8 +75,8 @@ LTLIBRARIES = $(pkglib_LTLIBRARIES)
 libgeostatistics_grid_la_DEPENDENCIES =  \
 	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
 am_libgeostatistics_grid_la_OBJECTS = fast_representativeness.lo \
-	GSGrid_Directional_Statistics.lo GSGrid_Residuals.lo \
-	GSGrid_Statistics.lo GSGrid_Variance.lo \
+	grid_autocorrelation.lo GSGrid_Directional_Statistics.lo \
+	GSGrid_Residuals.lo GSGrid_Statistics.lo GSGrid_Variance.lo \
 	GSGrid_Variance_Radius.lo GSGrid_Zonal_Statistics.lo \
 	MLB_Interface.lo
 libgeostatistics_grid_la_OBJECTS =  \
@@ -109,6 +115,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -158,14 +166,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -209,9 +230,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -222,7 +247,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.11 2010/07/08 14:11:51 johanvdw Exp $
+# $Id: Makefile.am,v 1.12 2010/11/02 10:58:18 oconrad Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_TRUE at UC_DEFS = -D_SAGA_UNICODE
@@ -233,6 +258,7 @@ AM_LDFLAGS = -fPIC -shared -avoid-version
 pkglib_LTLIBRARIES = libgeostatistics_grid.la
 libgeostatistics_grid_la_SOURCES = \
 fast_representativeness.cpp\
+grid_autocorrelation.cpp\
 GSGrid_Directional_Statistics.cpp\
 GSGrid_Residuals.cpp\
 GSGrid_Statistics.cpp\
@@ -241,6 +267,7 @@ GSGrid_Variance_Radius.cpp\
 GSGrid_Zonal_Statistics.cpp\
 MLB_Interface.cpp\
 fast_representativeness.h\
+grid_autocorrelation.h\
 GSGrid_Directional_Statistics.h\
 GSGrid_Residuals.h\
 GSGrid_Statistics.h\
@@ -332,6 +359,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GSGrid_Zonal_Statistics.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fast_representativeness.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grid_autocorrelation.Plo at am__quote@
 
 .cpp.o:
 @am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_grid/grid_autocorrelation.cpp b/src/modules_geostatistics/geostatistics/geostatistics_grid/grid_autocorrelation.cpp
new file mode 100644
index 0000000..eedd40d
--- /dev/null
+++ b/src/modules_geostatistics/geostatistics/geostatistics_grid/grid_autocorrelation.cpp
@@ -0,0 +1,210 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                  Geostatistics_Grid                   //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                grid_autocorrelastion.cpp              //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                     Jan Papmeier                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "grid_autocorrelation.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CGrid_Autocorrelation::CGrid_Autocorrelation(void)
+{
+	//-----------------------------------------------------
+	Set_Name		(_TL("Global Moran's I for Grids"));
+
+	Set_Author		(SG_T("Jan Papmeier (c) 2010"));
+
+	Set_Description	(_TW(
+		"Global spatial autocorrelation for grids calculated as Moran's I.\n"
+		"\n"
+		"References:\n"
+		"- Lloyd, C.D. (2010): Spatial data analysis - An introduction for GIS users. Oxford. 206p.\n"
+	));
+
+	//-----------------------------------------------------
+	Parameters.Add_Grid(
+		NULL, "GRID"		, _TL("Grid"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Table(
+		NULL, "RESULT"		, _TL("Result"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Choice(
+		NULL, "CONTIGUITY"	, _TL("Case of contiguity"),
+		_TL("Choose case: Rook's case contiguity compares only cell wich share an edge. Queen's case contiguity compares also cells which share just corners."),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("Rook"),
+			_TL("Queen")
+		), 1
+	);
+
+	Parameters.Add_Value(
+		NULL, "DIALOG"		, _TL("Show Result in Dialog"),
+		_TL(""),
+		PARAMETER_TYPE_Bool, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CGrid_Autocorrelation::On_Execute(void)
+{
+	int			nContiguity, nNeighbours;
+	double		Sum;
+	CSG_Grid	*pGrid;
+	CSG_Table	*pResult;
+	
+	//-----------------------------------------------------
+	pGrid	= Parameters("GRID")	->asGrid();
+	pResult	= Parameters("RESULT")	->asTable();
+
+	switch( Parameters("CONTIGUITY")->asInt() )
+	{
+	case 0:				nContiguity	= 2;	break;	// Rook's case
+	case 1: default:	nContiguity	= 1;	break;	// Queen's case
+	}
+
+	//-----------------------------------------------------
+	nNeighbours	= 0;
+	Sum			= 0.0;
+
+	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
+	{
+		for(int x=0; x<Get_NX(); x++)
+		{
+			if( !pGrid->is_NoData(x, y) )
+			{
+				double	dz	= pGrid->asDouble(x, y) - pGrid->Get_ArithMean();
+
+				for(int i=0; i<8; i+=nContiguity)
+				{
+					int	ix	= Get_xTo(i, x);
+					int	iy	= Get_yTo(i, y);
+
+					if( pGrid->is_InGrid(ix, iy) )
+					{
+						nNeighbours	++;
+						Sum			+= dz * (pGrid->asDouble(ix, iy) - pGrid->Get_ArithMean());
+					}
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	if( nNeighbours <= 1 )
+	{
+		Message_Add(_TL("not enough neighbours"));
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	double	Moran_I	= (pGrid->Get_NCells() * Sum) / (pGrid->Get_Variance() * pGrid->Get_NCells() * nNeighbours);
+
+	if( pResult->Get_Field_Count() != 8 || SG_STR_CMP(_TL("Moran's I"), pResult->Get_Name()) )
+	{
+		pResult->Destroy();
+		pResult->Set_Name(_TL("Moran's I"));
+
+		pResult->Add_Field(_TL("GRID")		, SG_DATATYPE_String);
+		pResult->Add_Field(_TL("CONTIGUITY"), SG_DATATYPE_String);
+		pResult->Add_Field(_TL("MORAN_I")	, SG_DATATYPE_Double);
+		pResult->Add_Field(_TL("NEIGHBORS")	, SG_DATATYPE_Int);
+		pResult->Add_Field(_TL("NCELLS")	, SG_DATATYPE_Int);
+		pResult->Add_Field(_TL("MEAN")		, SG_DATATYPE_Double);
+		pResult->Add_Field(_TL("VARIATION")	, SG_DATATYPE_Double);
+		pResult->Add_Field(_TL("SUM")		, SG_DATATYPE_Double);
+	}
+
+	CSG_Table_Record	*pRecord	= pResult->Add_Record();
+
+	pRecord->Set_Value(0, pGrid->Get_Name());
+	pRecord->Set_Value(1, nContiguity == 2 ? _TL("Rook's case") : _TL("Queen's case"));
+	pRecord->Set_Value(2, Moran_I);
+	pRecord->Set_Value(3, nNeighbours);
+	pRecord->Set_Value(4, pGrid->Get_NCells());
+	pRecord->Set_Value(5, pGrid->Get_ArithMean());
+	pRecord->Set_Value(6, pGrid->Get_Variance() * pGrid->Get_NCells());
+	pRecord->Set_Value(7, Sum);
+
+	Message_Add(CSG_String::Format(SG_T("\n%s (%s): %f\n"), _TL("Moran's I"), pGrid->Get_Name(), Moran_I), false);
+
+	if( Parameters("DIALOG")->asBool() )
+	{
+		Message_Dlg(CSG_String::Format(SG_T("%s: %f"), _TL("Moran's I"), Moran_I), pGrid->Get_Name());
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_grid/grid_autocorrelation.h b/src/modules_geostatistics/geostatistics/geostatistics_grid/grid_autocorrelation.h
new file mode 100644
index 0000000..2679a3b
--- /dev/null
+++ b/src/modules_geostatistics/geostatistics/geostatistics_grid/grid_autocorrelation.h
@@ -0,0 +1,88 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                  Geostatistics_Grid                   //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                grid_autocorrelation.h                 //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                     Jan Papmeier                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__grid_autocorrelation_H
+#define HEADER_INCLUDED__grid_autocorrelation_H
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CGrid_Autocorrelation : public CSG_Module_Grid
+{
+public:
+	CGrid_Autocorrelation(void);
+
+
+protected:
+
+	virtual bool		On_Execute		(void);
+
+
+private:
+
+};
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__grid_autocorrelation_H
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.in b/src/modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.in
index 1885ba9..1303b99 100644
--- a/src/modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.in
+++ b/src/modules_geostatistics/geostatistics/geostatistics_kriging/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -38,7 +38,13 @@ subdir =  \
 	src/modules_geostatistics/geostatistics/geostatistics_kriging
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -112,6 +118,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -161,14 +169,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -212,9 +233,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Pattern_Analysis.cpp b/src/modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Pattern_Analysis.cpp
new file mode 100644
index 0000000..4851a93
--- /dev/null
+++ b/src/modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Pattern_Analysis.cpp
@@ -0,0 +1,248 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                 Geostatistics_Points                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//              GSPoints_Pattern_Analysis.cpp            //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "GSPoints_Pattern_Analysis.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CGSPoints_Pattern_Analysis::CGSPoints_Pattern_Analysis(void)
+{
+	CSG_Parameter	*pNode;
+
+	//-----------------------------------------------------
+	Set_Name		(_TL("Spatial Point Pattern Analysis"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2010"));
+
+	Set_Description(
+		_TL("Basic measures for spatial point patterns.")
+	);
+
+	//-----------------------------------------------------
+	Parameters.Add_Shapes(
+		NULL	, "POINTS"		, _TL("Points"),
+		_TL(""),
+		PARAMETER_INPUT, SHAPE_TYPE_Point
+	);
+
+	Parameters.Add_Shapes(
+		NULL	, "CENTRE"		, _TL("Mean Centre"),
+		_TL(""),
+		PARAMETER_OUTPUT, SHAPE_TYPE_Point
+	);
+
+	pNode	= Parameters.Add_Shapes(
+		NULL	, "STDDIST"		, _TL("Standard Distance"),
+		_TL(""),
+		PARAMETER_OUTPUT, SHAPE_TYPE_Polygon
+	);
+
+	Parameters.Add_Value(
+		pNode	, "STEP"		, _TL("Vertex Distance [Degree]"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 5.0, 0.1, true, 20.0, true
+	);
+
+	Parameters.Add_Shapes(
+		NULL	, "BBOX"		, _TL("Bounding Box"),
+		_TL(""),
+		PARAMETER_OUTPUT, SHAPE_TYPE_Polygon
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CGSPoints_Pattern_Analysis::On_Execute(void)
+{
+	int						iPoint;
+	double					StdDist;
+	CSG_Shape				*pShape;
+	CSG_Shapes				*pPoints, *pShapes;
+	CSG_Simple_Statistics	X, Y, D;
+
+	//-----------------------------------------------------
+	pPoints		= Parameters("POINTS")	->asShapes();
+
+	if( pPoints->Get_Count() <= 1 )
+	{
+		Error_Set(_TL("not enough points to perform pattern analysis"));
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	for(iPoint=0; iPoint<pPoints->Get_Count() && Set_Progress(iPoint, pPoints->Get_Count()); iPoint++)
+	{
+		TSG_Point	p	= pPoints->Get_Shape(iPoint)->Get_Point(0);
+
+		X.Add_Value(p.x);
+		Y.Add_Value(p.y);
+	}
+
+	if( X.Get_Range() == 0.0 && Y.Get_Range() == 0.0 )
+	{
+		Error_Set(_TL("no variation in point pattern"));
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	StdDist	= 0.0;
+
+	for(iPoint=0; iPoint<pPoints->Get_Count() && Set_Progress(iPoint, pPoints->Get_Count()); iPoint++)
+	{
+		TSG_Point	p	= pPoints->Get_Shape(iPoint)->Get_Point(0);
+
+		D.Add_Value(SG_Get_Distance(X.Get_Mean(), Y.Get_Mean(), p.x, p.y));
+
+		StdDist	+= SG_Get_Square(p.x - X.Get_Mean()) + SG_Get_Square(p.y - Y.Get_Mean());
+	}
+
+	StdDist	= sqrt(StdDist / D.Get_Count());
+
+	//-----------------------------------------------------
+	pShapes	= Parameters("CENTRE")	->asShapes();
+
+	pShapes	->Create(SHAPE_TYPE_Point	, CSG_String::Format(SG_T("%s [%s]"), pPoints->Get_Name(), _TL("Centre")));
+	pShapes	->Add_Field(SG_T("X_CENTRE"), SG_DATATYPE_Double);
+	pShapes	->Add_Field(SG_T("Y_CENTRE"), SG_DATATYPE_Double);
+	pShapes	->Add_Field(SG_T("N_POINTS"), SG_DATATYPE_Double);
+	pShapes	->Add_Field(SG_T("STDDIST" ), SG_DATATYPE_Double);
+	pShapes	->Add_Field(SG_T("MEANDIST"), SG_DATATYPE_Double);
+
+	pShape	= pShapes->Add_Shape();
+
+	pShape	->Set_Value(0, X.Get_Mean());
+	pShape	->Set_Value(1, Y.Get_Mean());
+	pShape	->Set_Value(2, D.Get_Count());
+	pShape	->Set_Value(3, StdDist);
+	pShape	->Set_Value(4, D.Get_StdDev());
+
+	pShape	->Add_Point(X.Get_Mean(), Y.Get_Mean());
+
+	//-----------------------------------------------------
+	pShapes	= Parameters("STDDIST")	->asShapes();
+
+	pShapes	->Create(SHAPE_TYPE_Polygon	, CSG_String::Format(SG_T("%s [%s]"), pPoints->Get_Name(), _TL("Standard Distance")));
+	pShapes	->Add_Field(SG_T("X_CENTRE"), SG_DATATYPE_Double);
+	pShapes	->Add_Field(SG_T("Y_CENTRE"), SG_DATATYPE_Double);
+	pShapes	->Add_Field(SG_T("N_POINTS"), SG_DATATYPE_Double);
+	pShapes	->Add_Field(SG_T("STDDIST") , SG_DATATYPE_Double);
+
+	pShape	= pShapes->Add_Shape();
+
+	pShape	->Set_Value(0, X.Get_Mean());
+	pShape	->Set_Value(1, Y.Get_Mean());
+	pShape	->Set_Value(2, X.Get_Count());
+	pShape	->Set_Value(3, StdDist);
+
+	double	dTheta	= Parameters("STEP")->asDouble() * M_DEG_TO_RAD;
+
+	for(double Theta=0.0; Theta<=M_PI_360; Theta+=dTheta)
+	{
+		pShape	->Add_Point(
+			X.Get_Mean() + StdDist * cos(Theta),
+			Y.Get_Mean() + StdDist * sin(Theta)
+		);
+	}
+
+	//-----------------------------------------------------
+	pShapes	= Parameters("BBOX")	->asShapes();
+
+	pShapes	->Create(SHAPE_TYPE_Polygon	, CSG_String::Format(SG_T("%s [%s]"), pPoints->Get_Name(), _TL("Bounding Box")));
+
+	pShapes	->Add_Field(SG_T("XMIN")	, SG_DATATYPE_Double);
+	pShapes	->Add_Field(SG_T("XMAX")	, SG_DATATYPE_Double);
+	pShapes	->Add_Field(SG_T("YMIN")	, SG_DATATYPE_Double);
+	pShapes	->Add_Field(SG_T("YMAX")	, SG_DATATYPE_Double);
+
+	pShape	= pShapes->Add_Shape();
+
+	pShape	->Set_Value(0, X.Get_Minimum());
+	pShape	->Set_Value(1, X.Get_Maximum());
+	pShape	->Set_Value(2, Y.Get_Minimum());
+	pShape	->Set_Value(3, Y.Get_Maximum());
+
+	pShape	->Add_Point(X.Get_Minimum(), Y.Get_Minimum());
+	pShape	->Add_Point(X.Get_Minimum(), Y.Get_Maximum());
+	pShape	->Add_Point(X.Get_Maximum(), Y.Get_Maximum());
+	pShape	->Add_Point(X.Get_Maximum(), Y.Get_Minimum());
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Pattern_Analysis.h b/src/modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Pattern_Analysis.h
new file mode 100644
index 0000000..988d1b3
--- /dev/null
+++ b/src/modules_geostatistics/geostatistics/geostatistics_points/GSPoints_Pattern_Analysis.h
@@ -0,0 +1,97 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                 Geostatistics_Points                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//              GSPoints_Pattern_Analysis.h              //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__GSPoints_Pattern_Analysis_H
+#define HEADER_INCLUDED__GSPoints_Pattern_Analysis_H
+
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CGSPoints_Pattern_Analysis : public CSG_Module  
+{
+public:
+	CGSPoints_Pattern_Analysis(void);
+
+
+protected:
+
+	virtual bool		On_Execute		(void);
+
+
+private:
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__GSPoints_Pattern_Analysis_H
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.cpp b/src/modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.cpp
index bc58c5b..e1a2c55 100644
--- a/src/modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.cpp
+++ b/src/modules_geostatistics/geostatistics/geostatistics_points/MLB_Interface.cpp
@@ -95,6 +95,7 @@ const SG_Char * Get_Info(int i)
 #include "GSPoints_Variogram_Cloud.h"
 #include "GSPoints_Variogram_Surface.h"
 #include "GSPoints_Distances.h"
+#include "GSPoints_Pattern_Analysis.h"
 
 
 //---------------------------------------------------------
@@ -108,6 +109,7 @@ CSG_Module *		Create_Module(int i)
 	case  1:	return( new CGSPoints_Variogram_Cloud );
 	case  2:	return( new CGSPoints_Variogram_Surface );
 	case  3:	return( new CGSPoints_Distances );
+	case  4:	return( new CGSPoints_Pattern_Analysis );
 	}
 
 	return( NULL );
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_points/Makefile.am b/src/modules_geostatistics/geostatistics/geostatistics_points/Makefile.am
index fc67016..699fb58 100644
--- a/src/modules_geostatistics/geostatistics/geostatistics_points/Makefile.am
+++ b/src/modules_geostatistics/geostatistics/geostatistics_points/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.8 2010/07/08 14:11:50 johanvdw Exp $
+# $Id: Makefile.am,v 1.9 2010/09/15 17:07:33 oconrad Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
@@ -14,11 +14,13 @@ AM_LDFLAGS         = -fPIC -shared -avoid-version
 pkglib_LTLIBRARIES = libgeostatistics_points.la
 libgeostatistics_points_la_SOURCES =\
 GSPoints_Distances.cpp\
+GSPoints_Pattern_Analysis.cpp\
 GSPoints_Semi_Variances.cpp\
 GSPoints_Variogram_Cloud.cpp\
 GSPoints_Variogram_Surface.cpp\
 MLB_Interface.cpp\
 GSPoints_Distances.h\
+GSPoints_Pattern_Analysis.h\
 GSPoints_Semi_Variances.h\
 GSPoints_Variogram_Cloud.h\
 GSPoints_Variogram_Surface.h\
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_points/Makefile.in b/src/modules_geostatistics/geostatistics/geostatistics_points/Makefile.in
index 04c716b..a69578f 100644
--- a/src/modules_geostatistics/geostatistics/geostatistics_points/Makefile.in
+++ b/src/modules_geostatistics/geostatistics/geostatistics_points/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_geostatistics/geostatistics/geostatistics_points
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -69,8 +75,9 @@ LTLIBRARIES = $(pkglib_LTLIBRARIES)
 libgeostatistics_points_la_DEPENDENCIES =  \
 	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
 am_libgeostatistics_points_la_OBJECTS = GSPoints_Distances.lo \
-	GSPoints_Semi_Variances.lo GSPoints_Variogram_Cloud.lo \
-	GSPoints_Variogram_Surface.lo MLB_Interface.lo
+	GSPoints_Pattern_Analysis.lo GSPoints_Semi_Variances.lo \
+	GSPoints_Variogram_Cloud.lo GSPoints_Variogram_Surface.lo \
+	MLB_Interface.lo
 libgeostatistics_points_la_OBJECTS =  \
 	$(am_libgeostatistics_points_la_OBJECTS)
 DEFAULT_INCLUDES = -I. at am__isrc@
@@ -107,6 +114,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -156,14 +165,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -207,9 +229,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -220,7 +246,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.8 2010/07/08 14:11:50 johanvdw Exp $
+# $Id: Makefile.am,v 1.9 2010/09/15 17:07:33 oconrad Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_TRUE at UC_DEFS = -D_SAGA_UNICODE
@@ -231,11 +257,13 @@ AM_LDFLAGS = -fPIC -shared -avoid-version
 pkglib_LTLIBRARIES = libgeostatistics_points.la
 libgeostatistics_points_la_SOURCES = \
 GSPoints_Distances.cpp\
+GSPoints_Pattern_Analysis.cpp\
 GSPoints_Semi_Variances.cpp\
 GSPoints_Variogram_Cloud.cpp\
 GSPoints_Variogram_Surface.cpp\
 MLB_Interface.cpp\
 GSPoints_Distances.h\
+GSPoints_Pattern_Analysis.h\
 GSPoints_Semi_Variances.h\
 GSPoints_Variogram_Cloud.h\
 GSPoints_Variogram_Surface.h\
@@ -317,6 +345,7 @@ distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GSPoints_Distances.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GSPoints_Pattern_Analysis.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GSPoints_Semi_Variances.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GSPoints_Variogram_Cloud.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GSPoints_Variogram_Surface.Plo at am__quote@
diff --git a/src/modules_geostatistics/geostatistics/geostatistics_regression/Makefile.in b/src/modules_geostatistics/geostatistics/geostatistics_regression/Makefile.in
index 5bc19c5..f4b5d0f 100644
--- a/src/modules_geostatistics/geostatistics/geostatistics_regression/Makefile.in
+++ b/src/modules_geostatistics/geostatistics/geostatistics_regression/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_geostatistics/geostatistics/geostatistics_regression
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -109,6 +115,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -158,14 +166,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -209,9 +230,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_images/Makefile.am b/src/modules_images/Makefile.am
new file mode 100644
index 0000000..0881ef6
--- /dev/null
+++ b/src/modules_images/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = modules_imagery modules_opencv modules_vigra
diff --git a/src/modules_images/Makefile.in b/src/modules_images/Makefile.in
new file mode 100644
index 0000000..f0ebecf
--- /dev/null
+++ b/src/modules_images/Makefile.in
@@ -0,0 +1,581 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_images
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = modules_imagery modules_opencv modules_vigra
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_images/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_images/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (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):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_images/modules_imagery/Makefile.am b/src/modules_images/modules_imagery/Makefile.am
new file mode 100644
index 0000000..a4373c7
--- /dev/null
+++ b/src/modules_images/modules_imagery/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = imagery_segmentation
diff --git a/src/modules_images/modules_imagery/Makefile.in b/src/modules_images/modules_imagery/Makefile.in
new file mode 100644
index 0000000..ceeb73f
--- /dev/null
+++ b/src/modules_images/modules_imagery/Makefile.in
@@ -0,0 +1,581 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_images/modules_imagery
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = imagery_segmentation
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_images/modules_imagery/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_images/modules_imagery/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (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):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_images/modules_imagery/imagery_segmentation/MLB_Interface.cpp b/src/modules_images/modules_imagery/imagery_segmentation/MLB_Interface.cpp
new file mode 100644
index 0000000..4172837
--- /dev/null
+++ b/src/modules_images/modules_imagery/imagery_segmentation/MLB_Interface.cpp
@@ -0,0 +1,119 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                 imagery_segmentation                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   MLB_Interface.cpp                   //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                 SAGA User Group Assoc.                //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     author at email.de                        //
+//                                                       //
+//    contact:    Author                                 //
+//                Sesame Street. 7                       //
+//                12345 Metropolis                       //
+//                Nirwana                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//			The Module Link Library Interface			 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+// 1. Include the appropriate SAGA-API header...
+
+#include "MLB_Interface.h"
+
+
+//---------------------------------------------------------
+// 2. Place general module library informations here...
+
+const SG_Char * Get_Info(int i)
+{
+	switch( i )
+	{
+	case MLB_INFO_Name:	default:
+		return( _TL("Imagery - Segmentation") );
+
+	case MLB_INFO_Author:
+		return( SG_T("SAGA User Group Assoc. (c) 2009") );
+
+	case MLB_INFO_Description:
+		return( _TL("Image segmentation algorithms.") );
+
+	case MLB_INFO_Version:
+		return( SG_T("1.0") );
+
+	case MLB_INFO_Menu_Path:
+		return( _TL("Imagery|Segmentation") );
+	}
+}
+
+
+//---------------------------------------------------------
+// 3. Include the headers of your modules here...
+
+#include "fast_region_growing.h"
+
+
+//---------------------------------------------------------
+// 4. Allow your modules to be created here...
+
+CSG_Module *		Create_Module(int i)
+{
+	switch( i )
+	{
+	case  0:	return( new CFast_Region_Growing );
+	default:	return( NULL );
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+//{{AFX_SAGA
+
+	MLB_INTERFACE
+
+//}}AFX_SAGA
diff --git a/src/modules_images/modules_imagery/imagery_segmentation/MLB_Interface.h b/src/modules_images/modules_imagery/imagery_segmentation/MLB_Interface.h
new file mode 100644
index 0000000..e4c926a
--- /dev/null
+++ b/src/modules_images/modules_imagery/imagery_segmentation/MLB_Interface.h
@@ -0,0 +1,65 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Library Template                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    MLB_Interface.h                    //
+//                                                       //
+//                 Copyright (C) 2003 by                 //
+//                        Author                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     author at email.de                        //
+//                                                       //
+//    contact:    Author                                 //
+//                Sesame Street. 7                       //
+//                12345 Metropolis                       //
+//                Nirwana                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Include the SAGA-API here				 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__imagery_segmentation_H
+#define HEADER_INCLUDED__imagery_segmentation_H
+
+//---------------------------------------------------------
+#include <saga_api/saga_api.h>
+
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__imagery_segmentation_H
diff --git a/src/modules_images/modules_imagery/imagery_segmentation/Makefile.am b/src/modules_images/modules_imagery/imagery_segmentation/Makefile.am
new file mode 100644
index 0000000..60beac4
--- /dev/null
+++ b/src/modules_images/modules_imagery/imagery_segmentation/Makefile.am
@@ -0,0 +1,22 @@
+#
+# $Id: Makefile.am,v 1.4 2010/07/08 14:11:50 johanvdw Exp $
+#
+if DEBUG
+DBGFLAGS = -g -DDEBUG
+endif
+if SAGA_UNICODE
+UC_DEFS = -D_SAGA_UNICODE
+endif
+DEF_SAGA           = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+CXX_INCS           = -I$(top_srcdir)/src/saga_core
+AM_CXXFLAGS        = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+AM_LDFLAGS         = -fPIC -shared -avoid-version
+pkglib_LTLIBRARIES = libimagery_segmentation.la
+libimagery_segmentation_la_SOURCES =\
+fast_region_growing.cpp\
+MLB_Interface.cpp\
+fast_region_growing.h\
+MLB_Interface.h
+
+libimagery_segmentation_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+
diff --git a/src/modules_images/modules_imagery/imagery_segmentation/Makefile.in b/src/modules_images/modules_imagery/imagery_segmentation/Makefile.in
new file mode 100644
index 0000000..7c704d8
--- /dev/null
+++ b/src/modules_images/modules_imagery/imagery_segmentation/Makefile.in
@@ -0,0 +1,571 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_images/modules_imagery/imagery_segmentation
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+libimagery_segmentation_la_DEPENDENCIES =  \
+	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+am_libimagery_segmentation_la_OBJECTS = fast_region_growing.lo \
+	MLB_Interface.lo
+libimagery_segmentation_la_OBJECTS =  \
+	$(am_libimagery_segmentation_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libimagery_segmentation_la_SOURCES)
+DIST_SOURCES = $(libimagery_segmentation_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#
+# $Id: Makefile.am,v 1.4 2010/07/08 14:11:50 johanvdw Exp $
+#
+ at DEBUG_TRUE@DBGFLAGS = -g -DDEBUG
+ at SAGA_UNICODE_TRUE@UC_DEFS = -D_SAGA_UNICODE
+DEF_SAGA = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+CXX_INCS = -I$(top_srcdir)/src/saga_core
+AM_CXXFLAGS = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+AM_LDFLAGS = -fPIC -shared -avoid-version
+pkglib_LTLIBRARIES = libimagery_segmentation.la
+libimagery_segmentation_la_SOURCES = \
+fast_region_growing.cpp\
+MLB_Interface.cpp\
+fast_region_growing.h\
+MLB_Interface.h
+
+libimagery_segmentation_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_images/modules_imagery/imagery_segmentation/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_images/modules_imagery/imagery_segmentation/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+	}
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libimagery_segmentation.la: $(libimagery_segmentation_la_OBJECTS) $(libimagery_segmentation_la_DEPENDENCIES) 
+	$(CXXLINK) -rpath $(pkglibdir) $(libimagery_segmentation_la_OBJECTS) $(libimagery_segmentation_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fast_region_growing.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_images/modules_imagery/imagery_segmentation/fast_region_growing.cpp b/src/modules_images/modules_imagery/imagery_segmentation/fast_region_growing.cpp
new file mode 100644
index 0000000..7e5aa03
--- /dev/null
+++ b/src/modules_images/modules_imagery/imagery_segmentation/fast_region_growing.cpp
@@ -0,0 +1,760 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                 imagery_segmentation                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                fast_region_growing.cpp                //
+//                                                       //
+//                   Copyright (C) 2009                  //
+//                     Andre Ringeler                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     aringel at saga-gis.org                   //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "fast_region_growing.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int	xTo[]={ 0, 1, 1, 1, 0,-1,-1,-1};
+int	yTo[]={ 1, 1, 0,-1,-1,-1, 0, 1};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CPtrArray::Add(void * newElement)
+{
+	if (m_size >= m_allocsize)
+	{
+		m_allocsize += 4;
+		if (m_size == 0)
+		{
+			data = (void **) new int[4];
+		}
+		// else
+		// realloc(data,m_allocsize*sizeof(void*));
+	}
+	data[m_size++] = newElement;
+	return m_size;
+}
+
+//---------------------------------------------------------
+void CPtrArray::RemoveAll()
+{
+	if (m_allocsize)
+	{
+		m_size = 0;
+		m_allocsize = 0;
+		delete	data; 
+	}
+};
+
+//---------------------------------------------------------
+void *** PointerMatrix(int NX, int NY)
+{
+	int i;
+	void *** ar;
+	
+	ar = (void ***) malloc(NY*sizeof(void **));
+	
+	for (i = 0; i < NY; i++)
+	{
+		ar[i] = (void **) malloc(NX*sizeof(void *));
+	}
+	
+	return (ar);
+}
+
+//---------------------------------------------------------
+void FreePointerMatrix(void *** data, int NX  , int NY)
+{
+	int i;
+	for (i = 0; i < NY; i++)
+		free(data[i]);
+	
+	free(data);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CCluster::CCluster()
+{}
+
+//---------------------------------------------------------
+void CCluster::Create(int _dim)
+{
+    dim = _dim;    
+	DataAscent = (TDataNodeList *) new TDataNodeList[dim];
+}
+
+//---------------------------------------------------------
+CCluster::~CCluster()
+{
+	delete[] DataAscent;
+}
+
+//---------------------------------------------------------
+void CCluster::Add(CDataNode ** node, int dim)
+{
+	(*node)->sortdim = dim;
+
+	DataAscent[dim].InsertSorted(*node);
+}
+
+//---------------------------------------------------------
+void CCluster::Del(CDataNode * node, int dim)
+{
+	DataAscent[dim].Remove(node);
+}
+
+//---------------------------------------------------------
+CDataNode * CCluster::GetDataHead(int dim)
+{
+	return DataAscent[dim].GetHead();
+}
+
+//---------------------------------------------------------
+float CCluster::Distance(CData *data)
+{
+	float	sum;
+	int		j;
+	float	val;
+	
+	BYTE	bitmask;
+	float	max;
+	
+	RGADATA *vals = data->Values;
+	max = -9999999.9f;
+	
+	for (bitmask = 0; bitmask < (2 <<(dim - 1)); bitmask++)
+	{
+		sum = 0;
+		
+		for (j = 0; j < dim; j++)
+		{
+			CDataNode * min_node = DataAscent[j].GetHead();
+			CDataNode * max_node = DataAscent[j].GetLast();
+			
+			val = ((BYTE)(bitmask & (1 << j)) ? max_node->Data->Values[j]:min_node->Data->Values[j])-  vals[j];
+			
+			sum +=val*val;
+		}
+		
+		if (sum > max)
+		{
+			max = sum;
+		}
+	}
+	return  max;
+}
+
+//---------------------------------------------------------
+float CCluster::GetMaxVal(int dim)
+{
+	CDataNode * head = DataAscent[dim].GetLast();
+	
+	return head->Data->Values[dim];
+}
+
+//---------------------------------------------------------
+float CCluster::GetMinVal(int dim)
+{
+	CDataNode * head = DataAscent[dim].GetHead();
+	return head->Data->Values[dim];
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CFast_Region_Growing::CFast_Region_Growing(void)
+{
+	Set_Name		(_TL("Fast Region Growing Algorithm"));
+
+	Set_Author		(SG_T("A.Ringeler (c) 2009"));
+
+	Set_Description	(_TW(
+		"A fast region growing algorithm.\n"
+		"\n"
+		"References:\n"
+		"Boehner, J., Selige, T., Ringeler, A. (2006): Image segmentation using representativeness analysis and region growing. "
+		"In: Boehner, J., McCloy, K.R., Strobl, J. [Eds.]:  SAGA – Analysis and Modelling Applications. "
+		"Goettinger Geographische Abhandlungen, Vol.115, "
+		"<a href=\"http://downloads.sourceforge.net/saga-gis/gga115_03.pdf\">pdf</a>\n"
+	));
+
+	//-----------------------------------------------------
+	Parameters.Add_Grid_List(
+		NULL, "INPUT"	, _TL("Input Grids"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+	
+	Parameters.Add_Grid(
+		NULL, "START"	, _TL("Seeds Grid"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL, "REP"		, _TL("Smooth Rep"),
+		_TL(""),
+		PARAMETER_INPUT_OPTIONAL
+	);
+	
+	Parameters.Add_Grid(
+		NULL, "RESULT"	, _TL("Segmente"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL, "MEAN"	, _TL("Mean"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CFast_Region_Growing::On_Execute(void)
+{
+	pResult		= Parameters("RESULT")->asGrid();
+
+	pMean		= Parameters("MEAN")->asGrid();
+	
+	nGrids		= Parameters("INPUT")->asInt();
+	
+	Grids		=(CSG_Grid **)Parameters("INPUT")->asPointer();
+	
+	CSG_Grid *StartGrid = Parameters("START")->asGrid();
+
+	CSG_Grid *RepGrid = Parameters("REP")->asGrid();
+
+	RepGrid = NULL;
+	
+	Process_Set_Text(_TL("Init RGA"));
+	
+	InitData((PGrid *)Grids, nGrids, StartGrid);
+	
+	Process_Set_Text(_TL("RGA"));
+	
+	RGA();
+	
+	Process_Set_Text(_TL("Clear RGA"));
+	
+	GetClusterGrid(pResult);
+
+	Get_Mean_Grid();
+	
+	KillData();
+	
+	return (true);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CFast_Region_Growing::Get_Mean_Grid()
+{
+	int x,y;
+	int n_seg;
+	int *nr_elements;
+	double *sum;
+
+	n_seg = (int) pResult->Get_ZMax();	
+
+	nr_elements = (int *) new int[n_seg+1];
+
+	sum = (double *) new double[n_seg+1];
+
+	for (x= 0; x <= n_seg+1; x++ )
+	{
+		sum[x]=0.0;
+		nr_elements[x] = 0;
+
+	}
+
+	for ( y = 0; y < NY; y++)
+	{
+		for ( x = 0; x < NX; x++)
+		{
+			int pos = pResult->asInt(x,y);
+			if(pos >= 0)
+			{
+				nr_elements[pos]++;
+				sum[pos] += Grids[0]->asDouble(x,y);
+			}
+		
+		}
+	}
+
+	for ( y = 0; y < NY; y++)
+	{
+		for ( x = 0; x < NX; x++)
+		{
+			int pos = pResult->asInt(x,y);
+			if(pos >= 0)
+			{
+			
+				pMean->Set_Value(x,y,sum[pos]/nr_elements[pos]);
+			}
+		
+		}
+	}
+	
+}
+
+
+void CFast_Region_Growing::GetClusterGrid(CSG_Grid *OutGrid)
+{
+	for (int y = 0; y < NY; y++)
+	{
+		for (int x = 0; x < NX; x++)
+		{
+			OutGrid->Set_Value(x, y, pDataGrid[y][x]->ClusterNr);
+			
+		}
+	}
+}
+
+void CFast_Region_Growing::InitData(CSG_Grid **InGrid, int dim, CSG_Grid *StartGrid)
+{
+	NX = InGrid[0]->Get_NX();
+	NY = InGrid[0]->Get_NY();
+	
+	m_dim = dim;
+	
+	BounderyList = (TBounderyNodeList *) new TDataNodeList(false);
+	
+	pClusterGrid = (PPCDataNode **)  new PPCDataNode[dim];
+	
+	pRandGrid    = (PCBounderyArray **)  PointerMatrix(NX, NY);
+int		i;	
+	for (i = 0; i < dim; i++)
+	{
+		pClusterGrid[i] = (PCDataNode **) PointerMatrix(NX, NY);
+    }
+	
+	pDataGrid = (PCData **) PointerMatrix(NX, NY);
+    
+    m_NrCluster = 0;
+int		y;	
+	for (y = 1; y < NY - 1; y++)
+	{
+		for (int x = 1; x < NX - 1; x++)
+		{
+			if (!StartGrid->is_NoData(x, y) && StartGrid->asInt(x, y) > 0)
+			{
+				m_NrCluster++;
+			}
+		}
+	}
+	
+	Cluster = (CCluster *) new CCluster[m_NrCluster + 1];
+	
+	for (i = 0; i < m_NrCluster + 1; i++)
+	{
+		Cluster[i].Create(dim);        
+	}
+	
+	BounderyNodes = (CBounderyNode *) new CBounderyNode[NX*NY];
+	
+	last = (float)(dim*LAST);
+	
+	for (y = 0; y < NY*NX; y++)
+	{
+		BounderyNodes[y].distance = (float)last;
+		last += LASTINC;
+		BounderyList->InsertSorted(&BounderyNodes[y]);
+	}
+int		x, k;	
+	for (y = 0; y < NY; y++)
+	{       
+		for (x = 0; x < NX; x++)
+		{
+			pRandGrid[y][x] = (PCBounderyArray) new CPtrArray;
+			RGADATA *tmp;
+			tmp = (RGADATA *) new RGADATA[dim];
+			
+			for (k = 0; k < dim; k++)
+			{
+				tmp[k] = InGrid[k]->asFloat(x, y)+ ((float)rand() / (float)RAND_MAX / 100.0f);
+			}
+			
+			pDataGrid[y][x]=  new CData(x, y, - 1, tmp);
+			
+			for (k = 0; k < dim; k++)
+			{
+				pClusterGrid[k][y][x] = (PCDataNode) new CDataNode(pDataGrid[y][x], k);
+			}
+		}
+	}
+	
+	m_NrCluster=-1;
+	
+	for (y = 1; y < NY - 1; y++)
+	{
+		for (x = 1; x < NX - 1; x++)
+		{
+			if (!StartGrid->is_NoData(x, y) && StartGrid->asInt(x, y) > 0)
+			{
+				m_NrCluster++;
+				
+				AddClusterPoint(x, y, m_NrCluster);
+				
+				AddBounderyPoints(x, y, m_NrCluster);
+			}
+		}
+	}
+}
+
+void CFast_Region_Growing::KillData()
+{int y, x, i;
+	for (y = 0; y < NY; y++)
+	{
+		for (x = 0; x < NX; x++)
+		{	
+			pRandGrid[y][x]->RemoveAll();
+			delete	pRandGrid[y][x];
+		}
+	}		
+	delete BounderyList;
+	delete[]	Cluster;
+	
+	for (y = 0; y < NY; y++)
+	{
+		for (x = 0; x < NX; x++)
+		{
+			delete pDataGrid[y][x];
+		}
+	}	
+	delete[] BounderyNodes;
+	
+	FreePointerMatrix((void ***)pRandGrid,  NX  , NY);
+	FreePointerMatrix((void ***)pDataGrid,  NX  , NY);
+	
+	for (i = 0; i < m_dim; i++)
+	{
+		FreePointerMatrix((void ***)pClusterGrid[i], NX, NY);
+	}
+}
+
+inline void CFast_Region_Growing::AddBounderyNode(int x, int y, int cluster)
+{
+	CBounderyNode * Bound = BounderyList->GetLast();
+
+	BounderyList->Remove(Bound);
+	
+	Bound->Data	= pDataGrid[y][x];
+	
+	Bound->ClusterNr = cluster;
+	
+	Bound->distance	= Cluster[cluster].Distance(Bound->Data);
+
+	//if(RepGrid)
+	//	Bound->distance/=(1.0+	 RepGrid->asFloat(Bound->Data->x,Bound->Data->y)/1000.0);
+	///(1+	 mRepGrid->asFloat(Bound->Data->x,Bound->Data->y));
+	
+	pRandGrid[y][x]->Add(Bound);
+	
+	BounderyList->InsertSorted(Bound);
+}
+
+inline void CFast_Region_Growing::DelBounderyNode(CBounderyNode * Node)
+{       
+	BounderyList->Remove(Node);
+	Node->distance = (float)(last += LASTINC);
+	
+	BounderyList->InsertSorted(Node);
+}
+
+inline void CFast_Region_Growing::DelBounderyPoints(int x, int y)
+{
+	for (int i = 0; i < pRandGrid[y][x]->GetSize(); i++)
+	{
+		CBounderyNode * Node = (CBounderyNode *) pRandGrid[y][x]->GetAt(i);
+		DelBounderyNode(Node);
+	}
+	pRandGrid[y][x]->RemoveAll();
+}
+
+inline void CFast_Region_Growing::AddClusterPoint(int x, int y, int cluster)
+{
+	pDataGrid[y][x]->ClusterNr = cluster;
+	
+	for (int k = 0; k < m_dim; k++)
+		Cluster[cluster].Add(&pClusterGrid[k][y][x], k);
+}
+
+inline void CFast_Region_Growing::AddBounderyPoints(int x, int y, int cluster)
+{
+	for (int i = 0; i < 8; i += 2)
+	{
+		int posx = x + xTo[i]; 
+		int posy = y + yTo[i]; 
+		
+		if (pDataGrid[posy][posx]->ClusterNr == -1)
+		{
+			AddBounderyNode(posx, posy, cluster);
+		}
+	}
+}
+
+void CFast_Region_Growing::RGA()
+{	
+	int count = 0;
+	
+	CBounderyNode * Node= BounderyList->GetHead();
+	
+	while (Node && Node->distance < m_dim*LAST)
+	{
+		int x = Node->Data->x;
+		int y = Node->Data->y;
+		
+		if (!(x>1 && y > 1 && x<NX - 1 && y < NY - 1))   
+		{       
+			DelBounderyNode(Node);
+			Node= BounderyList->GetHead();
+			continue; 
+		}
+		
+		if (pDataGrid[y][x]->ClusterNr == -1)
+		{
+			AddClusterPoint(x, y, Node->ClusterNr);
+			
+			DelBounderyPoints(x, y);
+			
+            AddBounderyPoints(x, y, Node->ClusterNr);
+			
+			Node= BounderyList->GetHead();  
+			
+			count ++;
+			
+			if (!(count%1000))
+			{
+				Set_Progress(count, NX*NY);
+			}
+        }
+        else
+        {
+            DelBounderyNode(Node);
+            Node= BounderyList->GetHead();
+        }
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CFast_Region_Growing::Histgram(char * FileName)
+{
+/*	CSG_Grid Mittel(m_dim, m_NrCluster + 1, dtFloat);
+CSG_Grid Anzahl(m_dim, m_NrCluster + 1, dtInt);
+FILE * out = fopen((LPCSTR)FileName, "wt");
+
+  for (int c = 0; c < m_NrCluster; c++)
+  {	
+		fprintf(out, "%d\t", c);
+		for (int k = 0; k < m_dim; k++)
+		{
+		int hst[256];
+		int hstsum = 0;
+		
+		  for (int i = 0; i < 256; i++)
+		  hst[i] = 0;
+		  
+			float min, max; 
+			
+			  CDataNode * Data =Cluster[c].GetDataHead(k);
+			  
+				min = max = Data->Data->Values[k];
+				Data = Data->Next;
+				while (Data) 
+				{
+				if (Data->Data->Values[k]>max)
+				max = Data->Data->Values[k];
+				
+				  if (Data->Data->Values[k]<min)
+				  min = Data->Data->Values[k];
+				  
+					Data = Data->Next;
+					}
+					
+					  
+						Data =Cluster[c].GetDataHead(k);
+						while (Data) 
+						{
+						hst[int((Data->Data->Values[k] - min)/ (max - min)*255)]++;
+						
+						  Data = Data->Next;
+						  }
+						  
+							for (i = 0; i < 256; i++)
+							hstsum += hst[i];
+							
+							  int sum = 0;
+							  i = 0;
+							  while ((float)sum < 0.1* (float)hstsum)
+							  {
+							  if (i > 255)
+							  break;
+							  sum += hst[i++];
+							  }
+							  
+								fprintf(out, "%f ", (float)(i* (max - min))/255.0 + min);		
+								
+								  while ((float)sum < 0.5* (float)hstsum)
+								  {
+								  if (i > 255)
+								  break;
+								  sum += hst[i++];
+								  }
+								  
+									fprintf(out, "%f ", (float)(i* (max - min))/255.0 + min);		
+									
+									  while ((float)sum < 0.9* (float)hstsum)
+									  {
+									  if (i > 255)
+									  break;
+									  sum += hst[i++];
+									  }
+									  fprintf(out, "%f ", (float)(i* (max - min))/255.0 + min);		
+									  }
+									  fprintf(out, "\n");
+									  }
+									  
+	fclose(out); */
+}
+
+//---------------------------------------------------------
+void CFast_Region_Growing::Statistik(char * FileName)
+{
+/*	CSG_Grid Mittel(dtFloat, m_dim, m_NrCluster + 1);
+CSG_Grid Anzahl(dtInt, m_dim, m_NrCluster + 1);
+
+  CSG_Grid Var(dtFloat, m_dim, m_NrCluster + 1);
+  
+	float **	pVar	=(float **)Var.Get_Array();
+	
+	  float **	pMittel = (float **)Mittel.Get_Array();
+	  
+		int **      pAnzahl = (int **)  Anzahl.Get_Array();
+		
+		  for (int y = 0; y < NY; y++)
+		  {       
+		  for (int x = 0; x < NX; x++)
+		  {
+		  int Clu = ((CData *) pDataGrid[y][x])->ClusterNr;
+		  
+			if (Clu >= 0)
+			for (int k = 0; k < m_dim; k++)
+			{
+			pMittel[Clu][k] = pMittel[Clu][k] + pDataGrid[y][x]->Values[k];
+			
+			  pVar[Clu][k] = pVar[Clu][k] + (pDataGrid[y][x]->Values[k]*pDataGrid[y][x]->Values[k]);
+			  
+				pAnzahl[Clu][k] += 1;	
+				}
+				}
+				}
+				
+				  for (int c = 0; c < m_NrCluster; c++)
+				  for (int k = 0; k < m_dim; k++)
+				  {
+				  pMittel[c][k] = pMittel[c][k]/pAnzahl[c][k];
+				  
+					pVar[c][k] = (pVar[c][k] - pMittel[c][k]*pMittel[c][k]*pAnzahl[c][k])/pAnzahl[c][k];
+					}
+					
+					  FILE * out = fopen((LPCSTR)FileName, "wt");
+					  
+						for (c = 0; c < m_NrCluster; c++)
+						{
+						fprintf(out, "%d\t", c);
+						for (int k = 0; k < m_dim; k++)
+						{
+						fprintf(out, "%d\t%f\t%f\t", pAnzahl[c][k], pMittel[c][k], pVar[c][k]);		
+						}
+						fprintf(out, "\n");
+						}
+	fclose(out); */
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_imagery/imagery_segmentation/fast_region_growing.h b/src/modules_images/modules_imagery/imagery_segmentation/fast_region_growing.h
new file mode 100644
index 0000000..54db667
--- /dev/null
+++ b/src/modules_images/modules_imagery/imagery_segmentation/fast_region_growing.h
@@ -0,0 +1,841 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                 imagery_segmentation                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                 fast_region_growing.h                 //
+//                                                       //
+//                   Copyright (C) 2009                  //
+//                     Andre Ringeler                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     aringel at saga-gis.org                   //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__Region_Growing_H
+#define HEADER_INCLUDED__Region_Growing_H
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define RGADATA	float
+#define LAST		1.0e20f
+#define LASTINC	1.0e19f
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+typedef unsigned int DW;
+
+template <class T>
+class SListNode {
+	public:
+	T		*		Prev;
+	T		*		Next;
+
+	SListNode()
+	{
+		Prev=Next=NULL;
+	};	
+	
+	virtual ~SListNode()
+	{
+		if (Prev || Next) Remove();
+	}; 
+
+	bool	InsertThisBetween(T * before,T * after);
+	bool	Remove(T * previous=NULL);		
+};
+
+
+template <class T>
+inline bool	SListNode<T>::InsertThisBetween(T * before,T * after)
+{
+	if (before) before->Next = (T*)this;
+	if (after)	after->Prev=(T*)this;
+	Next=after; Prev=before;
+	
+	return true;
+};
+
+
+template <class T>
+inline bool	SListNode<T>::Remove(T * previous)
+{
+	if (Prev) Prev->Next=Next;
+	if (Next) Next->Prev=Prev;
+	Next=Prev=NULL;
+	
+	return true;
+};
+
+enum QSL_SortTypes 
+{
+	LSort_Ascent,	
+	LSort_Ascent_Find,	
+};
+
+template <class TBottomNode>
+class QTopNode : public SListNode<QTopNode<TBottomNode> > 
+{
+public:
+	DW						SubNodesNum;    
+	QTopNode	*			Parent;			
+	QTopNode	*			Child;			
+	TBottomNode *			BottomNode;		
+	QTopNode()
+	{ 
+		Child =NULL; SubNodesNum = 0;
+		BottomNode = NULL; Parent = NULL;
+	}
+	
+	virtual ~QTopNode()
+	{ 
+		if (this->Prev || this->Next || Parent || Child) Remove();
+	}
+
+	TBottomNode *	GetInsertionPoint(TBottomNode * node,QTopNode ** parent,TBottomNode ** insert_after,QSL_SortTypes sorttype);
+	TBottomNode *	GetBottomInsertionPoint(TBottomNode * start,TBottomNode * node,QTopNode ** parent,TBottomNode ** insert_after,QSL_SortTypes sorttype);
+
+	bool			InsertThisBetween(QTopNode * before,QTopNode * after);
+	bool			Remove();			
+
+	bool			SetChild(QTopNode* child);
+	bool			SetBottomNode(TBottomNode * node);
+
+	QTopNode *		GetChild(DW num);
+	TBottomNode *	GetBottomNode(DW num);
+	QTopNode *		GetParent();
+	QTopNode *		GetTopNode();	
+
+	bool			SubNodeInserted(void * node);
+	bool			SubNodeRemoved(void * node);
+
+};
+
+#define QTTopNode QTopNode<TBottomNode>
+
+template <class TBottomNode>
+inline QTTopNode *	QTTopNode::GetParent()
+{
+	QTopNode * cur = this;
+	while(cur)
+	{
+		if (cur->Parent) return  cur->Parent;
+		cur=cur->Prev;
+	}
+	return NULL;
+};
+
+
+#define QTOPNODES_MIN 3
+#define QTOPNODES_MAX 9
+#define QBOTTOMNODES_MIN 10
+#define QBOTTOMNODES_MAX 30
+
+
+template <class TBottomNode>
+inline bool	QTTopNode::SubNodeInserted(void * node)
+{
+	SubNodesNum++;
+	if (!BottomNode)
+	{
+		BottomNode = (TBottomNode*)node;
+	}
+	if (!Child && ((TBottomNode*)node)->Next == BottomNode)
+	{
+		SetBottomNode((TBottomNode*)node);
+	};
+	
+	DW max_num = Child ? QTOPNODES_MAX : QBOTTOMNODES_MAX;
+	
+	if (SubNodesNum >= max_num)
+	{
+		QTopNode * new_node = new QTopNode;
+		new_node->InsertThisBetween(this,this->Next);
+	}
+	return true;
+};
+
+template <class TBottomNode>
+inline 	bool QTTopNode::SubNodeRemoved(void * node)
+{
+	SubNodesNum--;
+	if (!Child && ((TBottomNode*)node) == BottomNode)
+	{
+		SetBottomNode(BottomNode->Next);
+	};
+	if (Child == (QTTopNode*)node)
+	{
+		SetChild(Child->Next);
+	} 
+	DW min_num = Child ? QTOPNODES_MIN : QBOTTOMNODES_MIN;
+	
+	bool top_node = !this->Prev && !Parent;
+	
+	if ((!top_node && SubNodesNum < min_num )
+	|| (top_node && SubNodesNum == 1 && Child))
+	{
+		if (!this->Prev)
+		{ 
+			if (this->Next)
+			{
+				QTTopNode * parent = GetParent();
+				if (parent) 
+					parent->SubNodeRemoved(this->Next);
+				
+				this->Next->Remove();
+			}
+			else
+			{
+				if (Child) Remove();
+			}
+		}
+		else
+		{					
+			QTTopNode * parent = GetParent();
+			if (parent) parent->SubNodeRemoved(this);
+			Remove();
+		}
+	}
+	return true;
+};
+
+
+template <class TBottomNode>
+inline bool	QTTopNode::Remove()
+{
+	if (this->Prev)
+	{
+		this->Prev->SubNodesNum += SubNodesNum;
+	}
+
+	SetChild(NULL);
+	SubNodesNum = 0;
+	BottomNode = NULL;
+
+	if (!SListNode<QTTopNode >::Remove())
+		return false;
+	
+	delete this;
+	return true;
+}
+
+template <class TBottomNode>
+inline bool	QTTopNode::InsertThisBetween(QTTopNode * before,QTTopNode * after)
+{
+	if (!SListNode<QTTopNode >::InsertThisBetween(before,after))
+		return false;
+
+
+	SubNodesNum=this->Prev->SubNodesNum/2;
+	this->Prev->SubNodesNum -= SubNodesNum;
+	if (this->Prev->Child)
+	{
+		SetChild(this->Prev->GetChild(this->Prev->SubNodesNum));
+		BottomNode = Child->BottomNode;
+	}
+	else
+	{
+		BottomNode = this->Prev->GetBottomNode(this->Prev->SubNodesNum);
+	}
+
+	QTTopNode * parent = GetParent();
+	if (!parent)
+	{ 
+		if (!this->Prev && !this->Next)	
+			return true;
+	
+		parent = new QTTopNode;
+		parent->SubNodesNum++;
+		parent->SetChild(this->Prev);
+	}
+	parent->SubNodeInserted(this);
+
+	return true;
+};
+
+template <class TBottomNode>
+inline QTTopNode *	QTTopNode::GetChild(DW num)
+{
+	QTTopNode * cur = Child;
+	while(num--)
+	{
+		if (!cur) return NULL;
+		cur = cur->Next;
+	}
+	return cur;
+};
+
+template <class TBottomNode>
+inline TBottomNode * QTTopNode::GetBottomNode(DW num)
+{
+	TBottomNode * cur = BottomNode;
+	while(num--)
+	{
+		if (!cur) 
+			return NULL;
+		
+		cur = cur->Next;
+	}
+	return cur;
+};
+
+template <class TBottomNode>
+inline bool		QTTopNode::SetChild(QTopNode* child)
+{
+	if (Child)
+	{
+		Child->Parent = NULL; Child = NULL;
+	}
+	if (!child) 
+		return true;
+
+	if (child->Parent) 
+		child->Parent->Child = NULL;
+
+	Child=child; child->Parent=this; 
+	SetBottomNode(Child->BottomNode);
+
+	return true;
+};
+
+template <class TBottomNode>
+inline bool	QTTopNode::SetBottomNode(TBottomNode * node)
+{
+	QTTopNode * parent = this;
+	while(parent)
+	{ 
+		parent->BottomNode=node;
+		parent = parent->Parent;
+	}
+
+	return true;
+};
+
+template <class TBottomNode>
+inline QTTopNode *	QTTopNode::GetTopNode()
+{
+	QTopNode * cur = this;
+	if (!this->Prev)
+	{
+		while(cur->Parent) cur = cur->Parent;
+	}
+	else
+	{
+		while(1)
+		{
+			QTTopNode * parent = cur->GetParent();
+			if (!parent) break;
+			cur=parent;
+		}
+	}
+
+
+	return cur;
+};
+
+
+template <class TBottomNode>
+inline TBottomNode *	QTTopNode::GetInsertionPoint(TBottomNode * node,QTTopNode ** parent,
+									TBottomNode ** insert_after, QSL_SortTypes sorttype)
+{
+	QTTopNode * cur  = this;
+	TBottomNode * bottom;
+//------------------------------------------------------------
+#define FIND_ALGORITHM(condition) \
+				{QTTopNode * prev=cur->Prev;\
+				while(1){\
+				bottom = cur->BottomNode;\
+				if (condition){\
+					if (!prev){ *parent = (QTTopNode *)0xFFFFFFFF; return bottom;}\
+							QTTopNode * child = prev->Child;\
+							if (child)\
+								return child->Next->GetInsertionPoint(node,parent,insert_after,sorttype);\
+							else {\
+								*parent = prev;\
+								return prev->GetBottomInsertionPoint(prev->BottomNode,node,parent,insert_after,sorttype);}\
+							}\
+				prev = cur;\
+				cur = cur->Next;\
+				if (!cur){ cur=prev; break;}\
+				}}\
+				break;
+//------------------------------------------------------------
+
+
+	switch(sorttype)
+	{
+ 		case LSort_Ascent:			FIND_ALGORITHM((*node < *bottom));
+ 		case LSort_Ascent_Find: 	FIND_ALGORITHM((*node < *bottom));
+	}			
+#undef FIND_ALGORITHM
+
+	QTTopNode * child = cur->Child;
+	if (child)
+		return child->GetInsertionPoint(node,parent,insert_after,sorttype);
+	else
+	{
+		*parent = cur;
+		return cur->GetBottomInsertionPoint(cur->BottomNode,node,parent,insert_after,sorttype);
+	}
+}
+
+
+
+
+template <class TBottomNode>
+inline TBottomNode *	QTTopNode::GetBottomInsertionPoint(TBottomNode * start,TBottomNode * node,
+									QTTopNode ** parent,
+									TBottomNode ** insert_after,QSL_SortTypes sorttype)
+{
+	TBottomNode * cur = start;
+	TBottomNode * prev = NULL;
+	DW i = 0;
+//------------------------------------------------------------
+#define FIND_ALGORITHM(condition) \
+			while(cur){\
+				if (condition) break;\
+				prev = cur; cur = cur ->Next;};\
+				break;
+//------------------------------------------------------------
+	switch(sorttype)
+	{
+ 		case LSort_Ascent:			FIND_ALGORITHM((*node < *cur));
+ 		case LSort_Ascent_Find: 	FIND_ALGORITHM((*node < *cur));
+	}			
+#undef FIND_ALGORITHM
+	*insert_after = prev;
+	if (this->Next && this->Next->BottomNode==cur)
+		*parent=this->Next;
+	
+	return cur;
+};
+
+template <class T> class SortList
+{
+
+	QTopNode<T> *		TopNode;
+	QSL_SortTypes		SortType;
+	bool				AutoDelete;
+	T * Last;
+
+	T *		FindInsertionPoint(T * node,QTopNode<T> ** parent,
+							T ** insert_after,QSL_SortTypes sorttype);
+
+	public:
+
+		SortList(bool autodelete=true);
+		virtual ~SortList();
+		
+		bool	InsertSorted( T * node);
+		
+		bool	Remove(T* node);
+
+		T *		GetHead()
+				{ 
+					return TopNode->BottomNode;
+				};
+		T *		GetLast()
+				{ 
+					return Last;
+				};
+
+		T *		RemoveHead(bool and_delete = false);
+
+	
+};
+
+template <class T>
+inline	SortList<T>::SortList(bool autodelete)
+{
+	AutoDelete = autodelete;
+	TopNode = new QTopNode<T>;
+	SortType = LSort_Ascent;
+	Last=NULL;
+};
+
+template <class T>
+inline	SortList<T>::~SortList<T>()
+{
+	while(RemoveHead(AutoDelete));
+	delete TopNode;
+	TopNode = NULL;
+	return;
+};
+
+
+template <class T>
+inline	T * SortList<T>::FindInsertionPoint(T * node,QTopNode<T> ** parent,T ** insert_after,QSL_SortTypes sorttype)
+{
+	if (!TopNode->BottomNode)
+	{ 
+		*insert_after = NULL;
+		*parent=TopNode;
+		return NULL;
+	}
+	return (T*)TopNode->GetTopNode()->GetInsertionPoint(node,parent,(T**)insert_after,sorttype);
+}
+
+template <class T>
+
+
+inline bool SortList<T>::InsertSorted(T * node)
+{
+	QTopNode<T> * parent=NULL;
+	
+	T * insert_after=NULL;
+	T * insertion_point = FindInsertionPoint(node,&parent,&insert_after,SortType);
+
+	if (parent == (QTopNode<T> *)0xFFFFFFFF)
+		parent = TopNode;
+	if (!insertion_point)
+	{
+		 node->InsertThisBetween(insert_after,NULL);
+	}
+	else
+	{ 
+		 node->InsertThisBetween(insert_after,insertion_point);
+	}
+	parent->SubNodeInserted(node);
+
+	if (Last==NULL) Last=node;
+	if (*Last<*node) Last=node;
+	
+	return true;
+};
+
+template <class T>
+inline bool SortList<T>::Remove(T * node)
+{
+	if(!node)
+		return false;
+
+	if (node==Last) Last=node->Prev;
+	QSL_SortTypes sorttype = LSort_Ascent_Find;
+
+	QTopNode<T> *	parent=NULL;
+	T	*		prev=NULL;
+	T	*		current = FindInsertionPoint(node,&parent,&prev,sorttype);
+	
+	if (!current)
+	{ 
+	
+		return false;
+	}
+
+	if (parent == (QTopNode<T> *)0xFFFFFFFF)
+		parent = TopNode;
+	
+	T	*		next_child = parent->Next ? parent->Next->BottomNode : NULL;
+	
+	while(1)
+	{
+
+		if (current==node)
+			break;
+		
+		prev = current;
+		current = current->Next;
+	
+		
+		if (current==next_child)
+		{
+			 parent=parent->Next;
+			 next_child = parent->Next ? parent->Next->BottomNode : NULL;
+		}
+	}
+
+	parent->SubNodeRemoved(current);
+	current->Remove(prev);
+
+	return true;
+};
+
+template <class T>
+inline	T *	SortList<T>::RemoveHead(bool and_delete)
+{
+	T * head = TopNode->BottomNode;
+	if (!head)
+		return NULL;
+	
+	TopNode->SubNodeRemoved(head);
+	head->Remove(NULL);
+	if (and_delete)
+	{
+		delete head;
+		return (T*)0xFFFFFFFF;
+	}
+
+	return head;
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CCluster;
+class CRGA;
+
+//---------------------------------------------------------
+class CPtrArray
+{
+public:
+	
+	CPtrArray()
+	{
+		m_size=0;
+		m_allocsize=0;
+		
+	}
+
+	int Add(void * newElement);
+	int GetSize() {return m_size;};
+	void *GetAt(int i) {return data[i];};	
+	void RemoveAll();
+
+private:
+ 
+	int	m_size;
+	int m_allocsize;
+    void ** data;
+};
+
+//---------------------------------------------------------
+class CData
+{
+public:
+	CData(int _x, int _y, int _ClusterNr, RGADATA * _Values)
+	{
+		x = _x;
+		y = _y;
+		ClusterNr= _ClusterNr;
+		Values = _Values;
+	}
+	
+	~CData()
+	{
+		delete[] Values;
+	}
+	
+	RGADATA * Values;
+	short int x, y;
+	int  ClusterNr;
+};
+
+//---------------------------------------------------------
+class CDataNode : public SListNode <CDataNode>
+{
+public:
+	
+    char sortdim;
+	CData * Data;
+	
+    CDataNode(CData * _Data, int _sortdim)
+    {
+        Data = _Data;
+		sortdim = _sortdim;	
+    }
+    bool operator >(CDataNode& comp){return Data->Values[sortdim] > comp.Data->Values[sortdim];}
+    bool operator <(CDataNode& comp){return Data->Values[sortdim] <= comp.Data->Values[sortdim];}
+};
+
+//---------------------------------------------------------
+class CBounderyNode : public SListNode <CBounderyNode>
+{
+public:
+	float	distance;       
+	
+	int ClusterNr;
+	
+	CData * Data;
+	
+	CBounderyNode(CData * _Data)
+	{
+		Data = _Data;
+	}
+	
+	CBounderyNode()
+	{
+		distance= LAST;
+	};
+	
+	bool operator >(CBounderyNode& comp){return distance > comp.distance;}
+	bool operator <(CBounderyNode& comp){return distance <= comp.distance;}
+};
+
+//---------------------------------------------------------
+typedef SortList		<CDataNode>		TDataNodeList;
+typedef SortList		<CBounderyNode>	TBounderyNodeList;
+
+typedef CDataNode 		*PCDataNode;
+typedef CData 			*PCData;
+
+typedef	PCDataNode		*PPCDataNode;
+
+typedef CBounderyNode	*PCBounderyNode;
+typedef CPtrArray		*PCBounderyArray;
+typedef RGADATA			**ppRGADATA;
+typedef CSG_Grid		*PGrid;
+
+//---------------------------------------------------------
+class CCluster
+{ 
+public:
+    CCluster();
+    ~CCluster();
+	void Create(int _dim);
+    void Add(CDataNode ** node, int dim);
+    void Del(CDataNode * node, int dim);
+	
+	CDataNode * GetDataHead(int dim);
+    
+	float Distance(CData *data); 
+	float GetMinVal(int dim);
+	float GetMaxVal(int dim);
+	int dim;
+	
+private:
+    TDataNodeList *DataAscent;
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CFast_Region_Growing : public CSG_Module_Grid
+{
+public:
+	CFast_Region_Growing(void);
+
+	void Get_Mean_Grid(void);
+
+	void RGA();
+	void GetClusterGrid(CSG_Grid *OutGrid);
+//	GetValGrid(CSG_Grid *OutGrid);
+	void Statistik(char * FileName);		
+	void Histgram(char * FileName);
+	
+	
+
+protected:
+
+	virtual bool		On_Execute(void);
+
+
+private:
+
+	void KillData();
+
+	void InitData(CSG_Grid **InGrid, int dim, CSG_Grid *StartGrid);
+	
+	int					nGrids;
+
+	CSG_Grid				**Grids;
+
+	CSG_Grid				*pResult, *pMean;
+
+	CSG_Grid				*RepGrid;
+		int m_NrCluster;
+	
+	CCluster	*Cluster;
+
+	CSG_Grid *mRepGrid;
+
+	TBounderyNodeList	*BounderyList; 
+	
+	PCBounderyArray		**pRandGrid;
+	
+	PPCDataNode			**pClusterGrid;
+	
+	PCData				**pDataGrid;
+	
+	float last;
+	int m_dim;
+
+	int NX,NY;
+	
+    void AddBounderyNode(int x, int y, int cluster);
+	
+    void DelBounderyNode(CBounderyNode * Node);
+	
+	void DelBounderyPoints(int x, int y);
+	
+	void AddBounderyPoints(int x, int y, int cluster);
+	
+	void AddClusterPoint(int x, int y, int cluster);	
+	
+	CBounderyNode *BounderyNodes;
+
+
+	
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__Region_Growing_H
diff --git a/src/modules_images/modules_opencv/Makefile.am b/src/modules_images/modules_opencv/Makefile.am
new file mode 100644
index 0000000..ae53e65
--- /dev/null
+++ b/src/modules_images/modules_opencv/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = opencv
diff --git a/src/modules_images/modules_opencv/Makefile.in b/src/modules_images/modules_opencv/Makefile.in
new file mode 100644
index 0000000..6bd57e9
--- /dev/null
+++ b/src/modules_images/modules_opencv/Makefile.in
@@ -0,0 +1,581 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_images/modules_opencv
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = opencv
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_images/modules_opencv/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_images/modules_opencv/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (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):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_images/modules_opencv/opencv/MLB_Interface.cpp b/src/modules_images/modules_opencv/opencv/MLB_Interface.cpp
new file mode 100644
index 0000000..b0494a7
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/MLB_Interface.cpp
@@ -0,0 +1,129 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        OpenCV                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   MLB_Interface.cpp                   //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//			The Module Link Library Interface			 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+// 1. Include the appropriate SAGA-API header...
+
+#include "MLB_Interface.h"
+
+
+//---------------------------------------------------------
+// 2. Place general module library informations here...
+
+const SG_Char * Get_Info(int i)
+{
+	switch( i )
+	{
+	case MLB_INFO_Name:	default:
+		return( _TL("Imagery - OpenCV") );
+
+	case MLB_INFO_Author:
+		return( _TL("O. Conrad (c) 2009") );
+
+	case MLB_INFO_Description:
+		return( _TW(
+			"OpenCV, the \"Open Source Computer Vision Library\". "
+			"Find out more at the OpenCV  - Open Source Computer Vision - homepage:\n"
+			"<a target=\"_blank\" href=\"http://opencv.willowgarage.com\">"
+			"http://opencv.willowgarage.com</a>"
+		));
+
+	case MLB_INFO_Version:
+		return( SG_T("1.0") );
+
+	case MLB_INFO_Menu_Path:
+		return( _TL("Imagery|OpenCV") );
+	}
+}
+
+
+//---------------------------------------------------------
+// 3. Include the headers of your modules here...
+
+#include "opencv_morphology.h"
+#include "opencv_fourier.h"
+#include "opencv_svd.h"
+
+
+//---------------------------------------------------------
+// 4. Allow your modules to be created here...
+
+CSG_Module *		Create_Module(int i)
+{
+	switch( i )
+	{
+	case  0:	return( new COpenCV_Morphology );
+	case  1:	return( new COpenCV_FFT );
+	case  2:	return( new COpenCV_SVD );
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+//{{AFX_SAGA
+
+	MLB_INTERFACE
+
+//}}AFX_SAGA
diff --git a/src/modules_images/modules_opencv/opencv/MLB_Interface.h b/src/modules_images/modules_opencv/opencv/MLB_Interface.h
new file mode 100644
index 0000000..094da8d
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/MLB_Interface.h
@@ -0,0 +1,73 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        OpenCV                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    MLB_Interface.h                    //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Include the SAGA-API here				 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__MLB_OPENCV_H
+#define HEADER_INCLUDED__MLB_OPENCV_H
+
+//---------------------------------------------------------
+#include <saga_api/saga_api.h>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__MLB_OPENCV_H
diff --git a/src/modules_images/modules_opencv/opencv/Makefile.am b/src/modules_images/modules_opencv/opencv/Makefile.am
new file mode 100644
index 0000000..92ff2a9
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/Makefile.am
@@ -0,0 +1,29 @@
+#
+# $Id: Makefile.am,v 1.6 2010/10/15 14:14:06 johanvdw Exp $
+#
+if DEBUG
+DBGFLAGS = -g -DDEBUG
+endif
+if SAGA_UNICODE
+UC_DEFS = -D_SAGA_UNICODE
+endif
+if HAVE_CV
+DEF_SAGA           = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+CXX_INCS           = -I$(top_srcdir)/src/saga_core -I/usr/include/opencv
+AM_CXXFLAGS        = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+AM_LDFLAGS         = -fPIC -shared -avoid-version -lcv
+pkglib_LTLIBRARIES = libopencv.la
+libopencv_la_SOURCES =\
+MLB_Interface.cpp\
+opencv.cpp\
+opencv_fourier.cpp\
+opencv_morphology.cpp\
+opencv_svd.cpp\
+MLB_Interface.h\
+opencv.h\
+opencv_fourier.h\
+opencv_morphology.h\
+opencv_svd.h
+
+libopencv_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+endif
diff --git a/src/modules_images/modules_opencv/opencv/Makefile.in b/src/modules_images/modules_opencv/opencv/Makefile.in
new file mode 100644
index 0000000..f6d7359
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/Makefile.in
@@ -0,0 +1,584 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_images/modules_opencv/opencv
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+ at HAVE_CV_TRUE@libopencv_la_DEPENDENCIES = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+am__libopencv_la_SOURCES_DIST = MLB_Interface.cpp opencv.cpp \
+	opencv_fourier.cpp opencv_morphology.cpp opencv_svd.cpp \
+	MLB_Interface.h opencv.h opencv_fourier.h opencv_morphology.h \
+	opencv_svd.h
+ at HAVE_CV_TRUE@am_libopencv_la_OBJECTS = MLB_Interface.lo opencv.lo \
+ at HAVE_CV_TRUE@	opencv_fourier.lo opencv_morphology.lo \
+ at HAVE_CV_TRUE@	opencv_svd.lo
+libopencv_la_OBJECTS = $(am_libopencv_la_OBJECTS)
+ at HAVE_CV_TRUE@am_libopencv_la_rpath = -rpath $(pkglibdir)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libopencv_la_SOURCES)
+DIST_SOURCES = $(am__libopencv_la_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#
+# $Id: Makefile.am,v 1.6 2010/10/15 14:14:06 johanvdw Exp $
+#
+ at DEBUG_TRUE@DBGFLAGS = -g -DDEBUG
+ at SAGA_UNICODE_TRUE@UC_DEFS = -D_SAGA_UNICODE
+ at HAVE_CV_TRUE@DEF_SAGA = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+ at HAVE_CV_TRUE@CXX_INCS = -I$(top_srcdir)/src/saga_core -I/usr/include/opencv
+ at HAVE_CV_TRUE@AM_CXXFLAGS = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+ at HAVE_CV_TRUE@AM_LDFLAGS = -fPIC -shared -avoid-version -lcv
+ at HAVE_CV_TRUE@pkglib_LTLIBRARIES = libopencv.la
+ at HAVE_CV_TRUE@libopencv_la_SOURCES = \
+ at HAVE_CV_TRUE@MLB_Interface.cpp\
+ at HAVE_CV_TRUE@opencv.cpp\
+ at HAVE_CV_TRUE@opencv_fourier.cpp\
+ at HAVE_CV_TRUE@opencv_morphology.cpp\
+ at HAVE_CV_TRUE@opencv_svd.cpp\
+ at HAVE_CV_TRUE@MLB_Interface.h\
+ at HAVE_CV_TRUE@opencv.h\
+ at HAVE_CV_TRUE@opencv_fourier.h\
+ at HAVE_CV_TRUE@opencv_morphology.h\
+ at HAVE_CV_TRUE@opencv_svd.h
+
+ at HAVE_CV_TRUE@libopencv_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_images/modules_opencv/opencv/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_images/modules_opencv/opencv/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+	}
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libopencv.la: $(libopencv_la_OBJECTS) $(libopencv_la_DEPENDENCIES) 
+	$(CXXLINK) $(am_libopencv_la_rpath) $(libopencv_la_OBJECTS) $(libopencv_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/opencv.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/opencv_fourier.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/opencv_morphology.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/opencv_svd.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_images/modules_opencv/opencv/opencv.cpp b/src/modules_images/modules_opencv/opencv/opencv.cpp
new file mode 100644
index 0000000..cfddc72
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/opencv.cpp
@@ -0,0 +1,215 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        OpenCV                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                      opencv.cpp                       //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "opencv.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int			Get_CVType			(TSG_Data_Type Type)
+{
+	switch( Type )
+	{
+	case SG_DATATYPE_Bit:
+	case SG_DATATYPE_Byte:		return( IPL_DEPTH_8U  );	// Unsigned 8-bit integer
+
+	case SG_DATATYPE_Char:		return( IPL_DEPTH_8S  );	// Signed 8-bit integer
+
+	case SG_DATATYPE_Word:		return( IPL_DEPTH_16U );	// Unsigned 16-bit integer
+
+	case SG_DATATYPE_Short:		return( IPL_DEPTH_16S );	// Signed 16-bit integer
+
+	case SG_DATATYPE_Color:
+	case SG_DATATYPE_DWord:
+	case SG_DATATYPE_ULong:
+	case SG_DATATYPE_Long:
+	case SG_DATATYPE_Int:		return( IPL_DEPTH_32S );	// Signed 32-bit integer
+
+	default:
+	case SG_DATATYPE_Float:		return( IPL_DEPTH_32F );	// Single-precision floating point
+
+	case SG_DATATYPE_Double:	return( IPL_DEPTH_64F );	// Double-precision floating point
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool	Copy_Grid_To_CVImage(CSG_Grid *pGrid, IplImage *pImage, bool bCheckSize)
+{
+	if( pImage && pGrid && (!bCheckSize || (pGrid->Get_NX() == pImage->width && pGrid->Get_NY() == pImage->height)) )
+	{
+		int		nx	= pGrid->Get_NX() < pImage->width  ? pGrid->Get_NX() : pImage->width;
+		int		ny	= pGrid->Get_NY() < pImage->height ? pGrid->Get_NY() : pImage->height;
+
+		for(int y=0; y<ny && SG_UI_Process_Set_Progress(y, ny); y++)
+		{
+			CvMat	Row;
+
+			cvGetRow(pImage, &Row, y);
+
+			for(int x=0; x<nx; x++)
+			{
+				switch( pImage->depth )
+				{
+				case IPL_DEPTH_8U:	Row.data.ptr[x]	= pGrid->asByte  (x, y);	break;
+				case IPL_DEPTH_8S:	Row.data.ptr[x]	= pGrid->asByte  (x, y);	break;
+				case IPL_DEPTH_16U:	Row.data.s  [x]	= pGrid->asShort (x, y);	break;
+				case IPL_DEPTH_16S:	Row.data.s  [x]	= pGrid->asShort (x, y);	break;
+				case IPL_DEPTH_32S:	Row.data.i  [x]	= pGrid->asInt   (x, y);	break;
+				case IPL_DEPTH_32F:	Row.data.fl [x]	= pGrid->asFloat (x, y);	break;
+				case IPL_DEPTH_64F:	Row.data.db [x]	= pGrid->asDouble(x, y);	break;
+				}
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool	Copy_CVImage_To_Grid(CSG_Grid *pGrid, IplImage *pImage, bool bCheckSize)
+{
+	if( pImage && pGrid && (!bCheckSize || (pGrid->Get_NX() == pImage->width && pGrid->Get_NY() == pImage->height)) )
+	{
+		int		nx	= pGrid->Get_NX() < pImage->width  ? pGrid->Get_NX() : pImage->width;
+		int		ny	= pGrid->Get_NY() < pImage->height ? pGrid->Get_NY() : pImage->height;
+
+		for(int y=0; y<ny && SG_UI_Process_Set_Progress(y, ny); y++)
+		{
+			CvMat	Row;
+
+			cvGetRow(pImage, &Row, y);
+
+			for(int x=0; x<nx; x++)
+			{
+				switch( pImage->depth )
+				{
+				case IPL_DEPTH_8U:	pGrid->Set_Value(x, y, Row.data.ptr[x]);	break;
+				case IPL_DEPTH_8S:	pGrid->Set_Value(x, y, ((char *)Row.data.ptr)[x]);	break;
+				case IPL_DEPTH_16U:	pGrid->Set_Value(x, y, ((WORD *)Row.data.s  )[x]);	break;
+				case IPL_DEPTH_16S:	pGrid->Set_Value(x, y, Row.data.s  [x]);	break;
+				case IPL_DEPTH_32S:	pGrid->Set_Value(x, y, Row.data.i  [x]);	break;
+				case IPL_DEPTH_32F:	pGrid->Set_Value(x, y, Row.data.fl [x]);	break;
+				case IPL_DEPTH_64F:	pGrid->Set_Value(x, y, Row.data.db [x]);	break;
+				}
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+IplImage *	Get_CVImage(int nx, int ny, TSG_Data_Type Type)
+{
+	if( nx > 0 && ny > 0 )
+	{
+		CvSize	Size;
+
+		Size.width	= nx;
+		Size.height	= ny;
+
+		return( cvCreateImage(Size, Get_CVType(Type), 1) );
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+IplImage *	Get_CVImage(CSG_Grid *pGrid, TSG_Data_Type Type)
+{
+	IplImage	*pImage	= NULL;
+
+	if( pGrid && (pImage = Get_CVImage(pGrid->Get_NX(), pGrid->Get_NY(), Type == SG_DATATYPE_Undefined ? pGrid->Get_Type() : Type)) != NULL )
+	{
+		Copy_Grid_To_CVImage(pGrid, pImage);
+	}
+
+	return( pImage );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_opencv/opencv/opencv.h b/src/modules_images/modules_opencv/opencv/opencv.h
new file mode 100644
index 0000000..b259f19
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/opencv.h
@@ -0,0 +1,101 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        OpenCV                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                       opencv.h                        //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__opencv_H
+#define HEADER_INCLUDED__opencv_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+//---------------------------------------------------------
+#include <cv.h>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int			Get_CVType				(TSG_Data_Type Type);
+
+//---------------------------------------------------------
+bool		Copy_Grid_To_CVImage	(CSG_Grid *pGrid, IplImage *pImage, bool bCheckSize = true);
+bool		Copy_CVImage_To_Grid	(CSG_Grid *pGrid, IplImage *pImage, bool bCheckSize = true);
+
+//---------------------------------------------------------
+IplImage *	Get_CVImage				(int nx, int ny , TSG_Data_Type Type);
+IplImage *	Get_CVImage				(CSG_Grid *pGrid, TSG_Data_Type Type = SG_DATATYPE_Undefined);
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__opencv_H
diff --git a/src/modules_images/modules_opencv/opencv/opencv_fourier.cpp b/src/modules_images/modules_opencv/opencv/opencv_fourier.cpp
new file mode 100644
index 0000000..3901c53
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/opencv_fourier.cpp
@@ -0,0 +1,291 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        OpenCV                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   opencv_fourier.cpp                  //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "opencv_fourier.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool	DFT		(IplImage *pInput, IplImage **ppReal, IplImage **ppImag);
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+COpenCV_FFT::COpenCV_FFT(void)
+{
+	Set_Name		(_TL("OpenCV - Fourier Transformation"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"References:\n"
+		"OpenCV - Open Source Computer Vision\n"
+		"<a target=\"_blank\" href=\"http://opencv.willowgarage.com\">http://opencv.willowgarage.com</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "INPUT"		, _TL("Input"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "REAL"		, _TL("Fourier Transformation (Real)"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "IMAG"		, _TL("Fourier Transformation (Imaginary)"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool COpenCV_FFT::On_Execute(void)
+{
+	CSG_Grid	*pInput, *pReal, *pImag;
+
+	pInput		= Parameters("INPUT")	->asGrid();
+	pReal		= Parameters("REAL")	->asGrid();
+	pImag		= Parameters("IMAG")	->asGrid();
+
+	//-----------------------------------------------------
+	IplImage	*cv_pInput	= Get_CVImage(pInput, SG_DATATYPE_Float);
+	IplImage	*cv_pReal	= NULL;// Get_CVImage(Get_NX(), Get_NY(), SG_DATATYPE_Float);
+	IplImage	*cv_pImag	= NULL;// Get_CVImage(Get_NX(), Get_NY(), SG_DATATYPE_Float);
+
+	//-----------------------------------------------------
+	DFT(cv_pInput, &cv_pReal, &cv_pImag);
+
+	//-----------------------------------------------------
+	Copy_CVImage_To_Grid(pReal, cv_pReal, false);
+	Copy_CVImage_To_Grid(pImag, cv_pImag, false);
+
+    cvReleaseImage(&cv_pInput);
+    cvReleaseImage(&cv_pReal);
+    cvReleaseImage(&cv_pImag);
+
+	pReal->Set_Name(CSG_String::Format(SG_T("%s [DFT, %s]"), pInput->Get_Name(), _TL("Real")));
+	pImag->Set_Name(CSG_String::Format(SG_T("%s [DFT, %s]"), pInput->Get_Name(), _TL("Imaginary")));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+// Rearrange the quadrants of Fourier image so that the origin is at
+// the image center
+// src & dst arrays of equal size & type
+bool cvShiftDFT(CvArr * src_arr, CvArr * dst_arr )
+{
+	CvMat * tmp;
+	CvMat q1stub, q2stub;
+	CvMat q3stub, q4stub;
+	CvMat d1stub, d2stub;
+	CvMat d3stub, d4stub;
+	CvMat * q1, * q2, * q3, * q4;
+	CvMat * d1, * d2, * d3, * d4;
+
+	CvSize size = cvGetSize(src_arr);
+	CvSize dst_size = cvGetSize(dst_arr);
+	int cx, cy;
+
+	if( dst_size.width != size.width || dst_size.height != size.height )
+	{
+		// cvError( CV_StsUnmatchedSizes, "cvShiftDFT", "Source and Destination arrays must have equal sizes", __FILE__, __LINE__ );   
+		return( false );
+	}
+
+	if(src_arr==dst_arr){
+		tmp = cvCreateMat(size.height/2, size.width/2, cvGetElemType(src_arr));
+	}
+
+	cx = size.width/2;
+	cy = size.height/2; // image center
+
+	q1 = cvGetSubRect( src_arr, &q1stub, cvRect(0,0,cx, cy) );
+	q2 = cvGetSubRect( src_arr, &q2stub, cvRect(cx,0,cx,cy) );
+	q3 = cvGetSubRect( src_arr, &q3stub, cvRect(cx,cy,cx,cy) );
+	q4 = cvGetSubRect( src_arr, &q4stub, cvRect(0,cy,cx,cy) );
+	d1 = cvGetSubRect( src_arr, &d1stub, cvRect(0,0,cx,cy) );
+	d2 = cvGetSubRect( src_arr, &d2stub, cvRect(cx,0,cx,cy) );
+	d3 = cvGetSubRect( src_arr, &d3stub, cvRect(cx,cy,cx,cy) );
+	d4 = cvGetSubRect( src_arr, &d4stub, cvRect(0,cy,cx,cy) );
+
+	if(src_arr!=dst_arr){
+		if( !CV_ARE_TYPES_EQ( q1, d1 )){
+		//	cvError( CV_StsUnmatchedFormats, "cvShiftDFT", "Source and Destination arrays must have the same format", __FILE__, __LINE__ ); 
+			return( false );
+		}
+		cvCopy(q3, d1, 0);
+		cvCopy(q4, d2, 0);
+		cvCopy(q1, d3, 0);
+		cvCopy(q2, d4, 0);
+	}
+	else{
+		cvCopy(q3, tmp, 0);
+		cvCopy(q1, q3, 0);
+		cvCopy(tmp, q1, 0);
+		cvCopy(q4, tmp, 0);
+		cvCopy(q2, q4, 0);
+		cvCopy(tmp, q2, 0);
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool DFT(IplImage *im, IplImage **ppReal, IplImage **ppImag)
+{
+	IplImage * realInput;
+	IplImage * imaginaryInput;
+	IplImage * complexInput;
+	int dft_M, dft_N;
+	CvMat* dft_A, tmp;
+	IplImage * image_Re;
+	IplImage * image_Im;
+	double m, M;
+
+	if( !im )
+		return false;
+
+	realInput		= cvCreateImage( cvGetSize(im), IPL_DEPTH_64F, 1);
+	imaginaryInput	= cvCreateImage( cvGetSize(im), IPL_DEPTH_64F, 1);
+	complexInput	= cvCreateImage( cvGetSize(im), IPL_DEPTH_64F, 2);
+
+	cvScale(im, realInput, 1.0, 0.0);
+	cvZero(imaginaryInput);
+	cvMerge(realInput, imaginaryInput, NULL, NULL, complexInput);
+
+	dft_M = cvGetOptimalDFTSize( im->height - 1 );
+	dft_N = cvGetOptimalDFTSize( im->width - 1 );
+
+	dft_A = cvCreateMat( dft_M, dft_N, CV_64FC2 );
+	*ppReal	= image_Re = cvCreateImage( cvSize(dft_N, dft_M), IPL_DEPTH_64F, 1);
+	*ppImag	= image_Im = cvCreateImage( cvSize(dft_N, dft_M), IPL_DEPTH_64F, 1);
+
+	// copy A to dft_A and pad dft_A with zeros
+	cvGetSubRect( dft_A, &tmp, cvRect(0,0, im->width, im->height));
+	cvCopy( complexInput, &tmp, NULL );
+	if( dft_A->cols > im->width )
+	{
+		cvGetSubRect( dft_A, &tmp, cvRect(im->width,0, dft_A->cols - im->width, im->height));
+		cvZero( &tmp );
+	}
+
+	// no need to pad bottom part of dft_A with zeros because of
+	// use nonzero_rows parameter in cvDFT() call below
+
+	cvDFT( dft_A, dft_A, CV_DXT_FORWARD, complexInput->height );
+
+	// Split Fourier in real and imaginary parts
+	cvSplit( dft_A, image_Re, image_Im, 0, 0 );
+
+	// Compute the magnitude of the spectrum Mag = sqrt(Re^2 + Im^2)
+//	cvPow( image_Re, image_Re, 2.0);
+//	cvPow( image_Im, image_Im, 2.0);
+//	cvAdd( image_Re, image_Im, image_Re, NULL);
+//	cvPow( image_Re, image_Re, 0.5 );
+
+	// Compute log(1 + Mag)
+//	cvAddS( image_Re, cvScalarAll(1.0), image_Re, NULL ); // 1 + Mag
+//	cvLog( image_Re, image_Re ); // log(1 + Mag)
+
+	// Rearrange the quadrants of Fourier image so that the origin is at
+	// the image center
+//	cvShiftDFT( image_Re, image_Re );
+
+//	cvMinMaxLoc(image_Re, &m, &M, NULL, NULL, NULL);
+//	cvScale(image_Re, image_Re, 1.0/(M-m), 1.0*(-m)/(M-m));
+
+	return true;
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_opencv/opencv/opencv_fourier.h b/src/modules_images/modules_opencv/opencv/opencv_fourier.h
new file mode 100644
index 0000000..76ab954
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/opencv_fourier.h
@@ -0,0 +1,101 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        OpenCV                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   opencv_fourier.h                    //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__opencv_fourier_H
+#define HEADER_INCLUDED__opencv_fourier_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "opencv.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class COpenCV_FFT : public CSG_Module_Grid
+{
+public:
+	COpenCV_FFT(void);
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__opencv_fourier_H
diff --git a/src/modules_images/modules_opencv/opencv/opencv_morphology.cpp b/src/modules_images/modules_opencv/opencv/opencv_morphology.cpp
new file mode 100644
index 0000000..7100145
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/opencv_morphology.cpp
@@ -0,0 +1,233 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        OpenCV                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                 opencv_morphology.cpp                 //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "opencv_morphology.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+COpenCV_Morphology::COpenCV_Morphology(void)
+{
+	Set_Name		(_TL("OpenCV - Basic Morphological Operations"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"References:\n"
+		"OpenCV - Open Source Computer Vision\n"
+		"<a target=\"_blank\" href=\"http://opencv.willowgarage.com\">http://opencv.willowgarage.com</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "INPUT"		, _TL("Input"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "OUTPUT"		, _TL("Output"),
+		_TL(""),
+		PARAMETER_OUTPUT, SG_DATATYPE_Byte
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "TYPE"		, _TL("Operation"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|%s|%s|"),
+			_TL("dilation"),
+			_TL("erosion"),
+			_TL("opening"),
+			_TL("closing"),
+ 			_TL("morpological gradient"),
+			_TL("top hat"),
+			_TL("black hat")
+		)
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "SHAPE"		, _TL("Element Shape"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			_TL("ellipse"),
+			_TL("rectangle"),
+			_TL("cross")
+		)
+	);
+
+	Parameters.Add_Value(
+		NULL	, "RADIUS"		, _TL("Radius (cells)"),
+		_TL(""),
+		PARAMETER_TYPE_Int, 1.0, 0.0, true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "ITERATIONS"	, _TL("Iterations"),
+		_TL(""),
+		PARAMETER_TYPE_Int, 1.0, 1.0, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool COpenCV_Morphology::On_Execute(void)
+{
+	int			Type, Shape, Radius, Iterations;
+	CSG_Grid	*pInput, *pOutput;
+
+	pInput		= Parameters("INPUT")		->asGrid();
+	pOutput		= Parameters("OUTPUT")		->asGrid();
+	Type		= Parameters("TYPE")		->asInt();
+	Shape		= Parameters("SHAPE")		->asInt();
+	Radius		= Parameters("RADIUS")		->asInt();
+	Iterations	= Parameters("ITERATIONS")	->asInt();
+
+	//-----------------------------------------------------
+	switch( Shape )
+	{
+	default:
+	case 0:	Shape	= CV_SHAPE_ELLIPSE;	break;
+	case 1:	Shape	= CV_SHAPE_RECT;	break;
+	case 2:	Shape	= CV_SHAPE_CROSS;	break;
+	}
+
+	//-----------------------------------------------------
+	IplImage	*cv_pInput	= Get_CVImage(pInput);
+	IplImage	*cv_pOutput	= Get_CVImage(Get_NX(), Get_NY(), pInput->Get_Type());
+	IplImage	*cv_pTmp	= NULL;
+
+	//-----------------------------------------------------
+	IplConvKernel	*cv_pElement	= cvCreateStructuringElementEx(Radius * 2 + 1, Radius * 2 + 1, Radius, Radius, Shape, 0);
+
+	switch( Type )
+	{
+	case 0:	// dilation
+		cvDilate		(cv_pInput, cv_pOutput, cv_pElement, Iterations);
+		break;
+
+	case 1:	// erosion
+		cvErode			(cv_pInput, cv_pOutput, cv_pElement, Iterations);
+		break;
+
+	case 2:	// opening
+		cvMorphologyEx	(cv_pInput, cv_pOutput, cv_pTmp,
+			cv_pElement, CV_MOP_OPEN    , Iterations
+		);
+		break;
+
+	case 3:	// closing
+		cvMorphologyEx	(cv_pInput, cv_pOutput, cv_pTmp,
+			cv_pElement, CV_MOP_CLOSE   , Iterations
+		);
+		break;
+
+	case 4:	// morpological gradient
+		cvMorphologyEx	(cv_pInput, cv_pOutput, cv_pTmp	= Get_CVImage(Get_NX(), Get_NY(), pInput->Get_Type()),
+			cv_pElement, CV_MOP_GRADIENT, Iterations
+		);
+		break;
+
+	case 5:	// top hat
+		cvMorphologyEx	(cv_pInput, cv_pOutput, cv_pTmp	= Get_CVImage(Get_NX(), Get_NY(), pInput->Get_Type()),
+			cv_pElement, CV_MOP_TOPHAT  , Iterations
+		);
+		break;
+
+	case 6:	// black hat
+		cvMorphologyEx	(cv_pInput, cv_pOutput, cv_pTmp	= Get_CVImage(Get_NX(), Get_NY(), pInput->Get_Type()),
+			cv_pElement, CV_MOP_BLACKHAT, Iterations
+		);
+		break;
+	}
+
+	cvReleaseStructuringElement(&cv_pElement);
+
+	//-----------------------------------------------------
+	Copy_CVImage_To_Grid(pOutput, cv_pOutput);
+
+    cvReleaseImage(&cv_pInput);
+    cvReleaseImage(&cv_pOutput);
+
+	if( cv_pTmp )
+	{
+		cvReleaseImage(&cv_pTmp);
+	}
+
+	pOutput->Set_Name(CSG_String::Format(SG_T("%s [%s]"), pInput->Get_Name(), Get_Name()));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_opencv/opencv/opencv_morphology.h b/src/modules_images/modules_opencv/opencv/opencv_morphology.h
new file mode 100644
index 0000000..951bec1
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/opencv_morphology.h
@@ -0,0 +1,101 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        OpenCV                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                  opencv_morphology.h                  //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__opencv_morphology_H
+#define HEADER_INCLUDED__opencv_morphology_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "opencv.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class COpenCV_Morphology : public CSG_Module_Grid
+{
+public:
+	COpenCV_Morphology(void);
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__opencv_morphology_H
diff --git a/src/modules_images/modules_opencv/opencv/opencv_svd.cpp b/src/modules_images/modules_opencv/opencv/opencv_svd.cpp
new file mode 100644
index 0000000..1b4ea24
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/opencv_svd.cpp
@@ -0,0 +1,179 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        OpenCV                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    opencv_svd.cpp                     //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "opencv_svd.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+COpenCV_SVD::COpenCV_SVD(void)
+{
+	Set_Name		(_TL("OpenCV - Single Value Decomposition"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"References:\n"
+		"OpenCV - Open Source Computer Vision\n"
+		"<a target=\"_blank\" href=\"http://opencv.willowgarage.com\">http://opencv.willowgarage.com</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "INPUT"		, _TL("Input"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "OUTPUT"		, _TL("Output"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Range(
+		NULL	, "RANGE"		, _TL("Range"),
+		_TL(""),
+		0.1, 0.9, 0.0, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool COpenCV_SVD::On_Execute(void)
+{
+	int			sMin, sMax;
+	CSG_Grid	*pInput, *pOutput;
+
+	int	n	= MIN(Get_NY(), Get_NX());
+	int	m	= MAX(Get_NY(), Get_NX());
+
+	pInput	= Parameters("INPUT")	->asGrid();
+	pOutput	= Parameters("OUTPUT")	->asGrid();
+	sMin	= (int)(Parameters("RANGE")	->asRange()->Get_LoVal() * n);
+	sMax	= (int)(Parameters("RANGE")	->asRange()->Get_HiVal() * n);
+
+	//-----------------------------------------------------
+	IplImage	*cv_pInput	= Get_CVImage(pInput, SG_DATATYPE_Double);
+
+	//-----------------------------------------------------
+	IplImage	*cv_pOutput	= Get_CVImage(m, n, SG_DATATYPE_Double);
+
+	CvMat		*cv_pW		= cvCreateMat(n, cv_pInput->height, CV_64FC1);
+	CvMat		*cv_pU		= cvCreateMat(n, cv_pInput->height, CV_64FC1);
+	CvMat		*cv_pV		= cvCreateMat(n, cv_pInput->width , CV_64FC1);
+
+	//-----------------------------------------------------
+	cvSVD(cv_pInput, cv_pW, cv_pU, cv_pV, CV_SVD_MODIFY_A+CV_SVD_V_T);
+
+	CSG_Matrix	u(cv_pU->rows, cv_pU->cols, cv_pU->data.db);
+	CSG_Matrix	v(cv_pV->rows, cv_pV->cols, cv_pV->data.db);
+	CSG_Matrix	w(cv_pW->rows, cv_pW->cols, cv_pW->data.db);
+	CSG_Matrix	svd(Get_NY(), Get_NX());
+
+	for(int i=0; i<n; i++)
+		if( i < sMin || i > sMax )
+			w[i][i]	= 0.0;
+
+	svd	= u * w;
+	svd	*= v.Get_Transpose();
+
+	for(int y=0; y<Get_NY(); y++)
+		for(int x=0; x<Get_NX(); x++)
+			pOutput->Set_Value(x, y, svd[y][x]);
+//			pOutput->Set_Value(x, y, u[y][x]);
+//			pOutput->Set_Value(x, y, v[y][x]);
+//			pOutput->Set_Value(x, y, w[y][x]);
+
+	//-----------------------------------------------------
+
+//	cvSVBkSb(cv_pW, cv_pU, cv_pV, NULL, cv_pOutput, CV_SVD_U_T+CV_SVD_V_T);
+
+	cvReleaseMat(&cv_pW);
+	cvReleaseMat(&cv_pU);
+	cvReleaseMat(&cv_pV);
+
+	//-----------------------------------------------------
+//	Copy_CVImage_To_Grid(pOutput, cv_pOutput);
+
+    cvReleaseImage(&cv_pInput);
+    cvReleaseImage(&cv_pOutput);
+
+	pOutput->Set_Name(CSG_String::Format(SG_T("%s [%s]"), pInput->Get_Name(), Get_Name()));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_opencv/opencv/opencv_svd.h b/src/modules_images/modules_opencv/opencv/opencv_svd.h
new file mode 100644
index 0000000..7e3718a
--- /dev/null
+++ b/src/modules_images/modules_opencv/opencv/opencv_svd.h
@@ -0,0 +1,101 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        OpenCV                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     opencv_svd.h                      //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__opencv_svd_H
+#define HEADER_INCLUDED__opencv_svd_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "opencv.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class COpenCV_SVD : public CSG_Module_Grid
+{
+public:
+	COpenCV_SVD(void);
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__opencv_svd_H
diff --git a/src/modules_images/modules_vigra/Makefile.am b/src/modules_images/modules_vigra/Makefile.am
new file mode 100644
index 0000000..7c16bc2
--- /dev/null
+++ b/src/modules_images/modules_vigra/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = vigra
diff --git a/src/modules_images/modules_vigra/Makefile.in b/src/modules_images/modules_vigra/Makefile.in
new file mode 100644
index 0000000..0cad0d6
--- /dev/null
+++ b/src/modules_images/modules_vigra/Makefile.in
@@ -0,0 +1,581 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_images/modules_vigra
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = vigra
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_images/modules_vigra/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_images/modules_vigra/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (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):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_images/modules_vigra/vigra/MLB_Interface.cpp b/src/modules_images/modules_vigra/vigra/MLB_Interface.cpp
new file mode 100644
index 0000000..dda357e
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/MLB_Interface.cpp
@@ -0,0 +1,144 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   MLB_Interface.cpp                   //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//			The Module Link Library Interface			 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+// 1. Include the appropriate SAGA-API header...
+
+#include "MLB_Interface.h"
+
+
+//---------------------------------------------------------
+// 2. Place general module library informations here...
+
+const SG_Char * Get_Info(int i)
+{
+	switch( i )
+	{
+	case MLB_INFO_Name:	default:
+		return( _TL("Imagery - ViGrA") );
+
+	case MLB_INFO_Author:
+		return( _TL("O. Conrad (c) 2009") );
+
+	case MLB_INFO_Description:
+		return( _TW(
+			"ViGrA stands for \"Vision with Generic Algorithms\". "
+			"It's a novel computer vision library that puts its main "
+			"emphasize on customizable algorithms and data structures. "
+			"By using template techniques similar to those in the C++ "
+			"Standard Template Library, you can easily adapt any VIGRA "
+			"component to the needs of your application, without thereby "
+			"giving up execution speed.\n"
+			"Find out more at the ViGrA - Vision with Generic Algorithms - homepage:\n"
+			"<a target=\"_blank\" href=\"http://hci.iwr.uni-heidelberg.de/vigra\">"
+			"http://hci.iwr.uni-heidelberg.de</a>"
+		));
+
+	case MLB_INFO_Version:
+		return( SG_T("1.0") );
+
+	case MLB_INFO_Menu_Path:
+		return( _TL("Imagery|ViGrA") );
+	}
+}
+
+
+//---------------------------------------------------------
+// 3. Include the headers of your modules here...
+
+#include "vigra_smoothing.h"
+#include "vigra_edges.h"
+#include "vigra_morphology.h"
+#include "vigra_distance.h"
+#include "vigra_fft.h"
+#include "vigra_watershed.h"
+
+
+//---------------------------------------------------------
+// 4. Allow your modules to be created here...
+
+CSG_Module *		Create_Module(int i)
+{
+	switch( i )
+	{
+	case  0:	return( new CViGrA_Smoothing );
+	case  1:	return( new CViGrA_Edges );
+	case  2:	return( new CViGrA_Morphology );
+	case  3:	return( new CViGrA_Distance );
+	case  4:	return( new CViGrA_Watershed );
+	case  5:	return( new CViGrA_FFT );
+	case  6:	return( new CViGrA_FFT_Inverse );
+	case  7:	return( new CViGrA_FFT_Real );
+	case  8:	return( new CViGrA_FFT_Filter );
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+//{{AFX_SAGA
+
+	MLB_INTERFACE
+
+//}}AFX_SAGA
diff --git a/src/modules_images/modules_vigra/vigra/MLB_Interface.h b/src/modules_images/modules_vigra/vigra/MLB_Interface.h
new file mode 100644
index 0000000..9e0c26a
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/MLB_Interface.h
@@ -0,0 +1,73 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    MLB_Interface.h                    //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Include the SAGA-API here				 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__MLB_VIGRA_H
+#define HEADER_INCLUDED__MLB_VIGRA_H
+
+//---------------------------------------------------------
+#include <saga_api/saga_api.h>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__MLB_VIGRA_H
diff --git a/src/modules_images/modules_vigra/vigra/Makefile.am b/src/modules_images/modules_vigra/vigra/Makefile.am
new file mode 100644
index 0000000..ae5588c
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/Makefile.am
@@ -0,0 +1,35 @@
+#
+# $Id: Makefile.am,v 1.3 2010/10/07 19:53:18 johanvdw Exp $
+#
+if DEBUG
+DBGFLAGS = -g -DDEBUG
+endif
+if SAGA_UNICODE
+UC_DEFS = -D_SAGA_UNICODE
+endif
+if HAVE_VIGRA
+DEF_SAGA           = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+CXX_INCS           = -I$(top_srcdir)/src/saga_core
+AM_CXXFLAGS        = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+AM_LDFLAGS         = -fPIC -shared -avoid-version -lvigraimpex -lfftw3
+pkglib_LTLIBRARIES = libvigra.la
+libvigra_la_SOURCES =\
+vigra.h\
+vigra_edges.h\
+vigra_smoothing.h\
+vigra_distance.h\
+vigra_fft.h\
+vigra_morphology.h\
+vigra_watershed.h\
+MLB_Interface.cpp\
+vigra.cpp\
+MLB_Interface.h\
+vigra_distance.cpp\
+vigra_fft.cpp\
+vigra_smoothing.cpp\
+vigra_edges.cpp\
+vigra_morphology.cpp\
+vigra_watershed.cpp
+
+libvigra_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+endif
diff --git a/src/modules_images/modules_vigra/vigra/Makefile.in b/src/modules_images/modules_vigra/vigra/Makefile.in
new file mode 100644
index 0000000..4ac6976
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/Makefile.in
@@ -0,0 +1,595 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_images/modules_vigra/vigra
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+ at HAVE_VIGRA_TRUE@libvigra_la_DEPENDENCIES = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+am__libvigra_la_SOURCES_DIST = vigra.h vigra_edges.h vigra_smoothing.h \
+	vigra_distance.h vigra_fft.h vigra_morphology.h \
+	vigra_watershed.h MLB_Interface.cpp vigra.cpp MLB_Interface.h \
+	vigra_distance.cpp vigra_fft.cpp vigra_smoothing.cpp \
+	vigra_edges.cpp vigra_morphology.cpp vigra_watershed.cpp
+ at HAVE_VIGRA_TRUE@am_libvigra_la_OBJECTS = MLB_Interface.lo vigra.lo \
+ at HAVE_VIGRA_TRUE@	vigra_distance.lo vigra_fft.lo \
+ at HAVE_VIGRA_TRUE@	vigra_smoothing.lo vigra_edges.lo \
+ at HAVE_VIGRA_TRUE@	vigra_morphology.lo vigra_watershed.lo
+libvigra_la_OBJECTS = $(am_libvigra_la_OBJECTS)
+ at HAVE_VIGRA_TRUE@am_libvigra_la_rpath = -rpath $(pkglibdir)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libvigra_la_SOURCES)
+DIST_SOURCES = $(am__libvigra_la_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#
+# $Id: Makefile.am,v 1.3 2010/10/07 19:53:18 johanvdw Exp $
+#
+ at DEBUG_TRUE@DBGFLAGS = -g -DDEBUG
+ at SAGA_UNICODE_TRUE@UC_DEFS = -D_SAGA_UNICODE
+ at HAVE_VIGRA_TRUE@DEF_SAGA = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+ at HAVE_VIGRA_TRUE@CXX_INCS = -I$(top_srcdir)/src/saga_core
+ at HAVE_VIGRA_TRUE@AM_CXXFLAGS = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+ at HAVE_VIGRA_TRUE@AM_LDFLAGS = -fPIC -shared -avoid-version -lvigraimpex -lfftw3
+ at HAVE_VIGRA_TRUE@pkglib_LTLIBRARIES = libvigra.la
+ at HAVE_VIGRA_TRUE@libvigra_la_SOURCES = \
+ at HAVE_VIGRA_TRUE@vigra.h\
+ at HAVE_VIGRA_TRUE@vigra_edges.h\
+ at HAVE_VIGRA_TRUE@vigra_smoothing.h\
+ at HAVE_VIGRA_TRUE@vigra_distance.h\
+ at HAVE_VIGRA_TRUE@vigra_fft.h\
+ at HAVE_VIGRA_TRUE@vigra_morphology.h\
+ at HAVE_VIGRA_TRUE@vigra_watershed.h\
+ at HAVE_VIGRA_TRUE@MLB_Interface.cpp\
+ at HAVE_VIGRA_TRUE@vigra.cpp\
+ at HAVE_VIGRA_TRUE@MLB_Interface.h\
+ at HAVE_VIGRA_TRUE@vigra_distance.cpp\
+ at HAVE_VIGRA_TRUE@vigra_fft.cpp\
+ at HAVE_VIGRA_TRUE@vigra_smoothing.cpp\
+ at HAVE_VIGRA_TRUE@vigra_edges.cpp\
+ at HAVE_VIGRA_TRUE@vigra_morphology.cpp\
+ at HAVE_VIGRA_TRUE@vigra_watershed.cpp
+
+ at HAVE_VIGRA_TRUE@libvigra_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_images/modules_vigra/vigra/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_images/modules_vigra/vigra/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+	}
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libvigra.la: $(libvigra_la_OBJECTS) $(libvigra_la_DEPENDENCIES) 
+	$(CXXLINK) $(am_libvigra_la_rpath) $(libvigra_la_OBJECTS) $(libvigra_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vigra.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vigra_distance.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vigra_edges.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vigra_fft.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vigra_morphology.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vigra_smoothing.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vigra_watershed.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_images/modules_vigra/vigra/vigra.cpp b/src/modules_images/modules_vigra/vigra/vigra.cpp
new file mode 100644
index 0000000..7b37db9
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra.cpp
@@ -0,0 +1,131 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                      vigra.cpp                        //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool	Copy_RGBGrid_SAGA_to_VIGRA	(CSG_Grid &Grid, BRGBImage &Image, bool bCreate)
+{
+	if( bCreate )
+	{
+		Image.resize(Grid.Get_NX(), Grid.Get_NY());
+	}
+
+	if( Grid.Get_NX() != Image.width() || Grid.Get_NY() != Image.height() )
+	{
+		return( false );
+	}
+
+	for(int y=0; y<Grid.Get_NY() && SG_UI_Process_Set_Progress(y, Grid.Get_NY()); y++)
+	{
+		for(int x=0; x<Grid.Get_NX(); x++)
+		{
+			RGBValue<unsigned char>	rgb(SG_GET_R(Grid.asInt(x, y)), SG_GET_G(Grid.asInt(x, y)), SG_GET_B(Grid.asInt(x, y)));
+
+			Image(x, y)	= rgb;
+		}
+	}
+
+	SG_UI_Process_Set_Progress(0.0, 1.0);
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool	Copy_RGBGrid_VIGRA_to_SAGA	(CSG_Grid &Grid, BRGBImage &Image, bool bCreate)
+{
+	if( bCreate )
+	{
+		Grid.Create(Grid.Get_Type(), Image.width(), Image.height());
+	}
+
+	if( Grid.Get_NX() != Image.width() || Grid.Get_NY() != Image.height() )
+	{
+		return( false );
+	}
+
+	for(int y=0; y<Grid.Get_NY() && SG_UI_Process_Set_Progress(y, Grid.Get_NY()); y++)
+	{
+		for(int x=0; x<Grid.Get_NX(); x++)
+		{
+			RGBValue<unsigned char>	rgb	= Image(x, y);
+
+			Grid.Set_Value(x, y, SG_GET_RGB(rgb.red(), rgb.green(), rgb.blue()));
+		}
+	}
+
+	SG_UI_Process_Set_Progress(0.0, 1.0);
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_vigra/vigra/vigra.h b/src/modules_images/modules_vigra/vigra/vigra.h
new file mode 100644
index 0000000..019cc17
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra.h
@@ -0,0 +1,151 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                       vigra.h                         //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__vigra_H
+#define HEADER_INCLUDED__vigra_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <vigra/stdimage.hxx>
+
+//---------------------------------------------------------
+using namespace vigra;
+
+//---------------------------------------------------------
+template <class VIGRA_Image>
+bool	Copy_Grid_SAGA_to_VIGRA		(CSG_Grid &Grid, VIGRA_Image &Image, bool bCreate)
+{
+	if( bCreate )
+	{
+		Image.resize(Grid.Get_NX(), Grid.Get_NY());
+	}
+
+	if( Grid.Get_NX() != Image.width() || Grid.Get_NY() != Image.height() )
+	{
+		return( false );
+	}
+
+	for(int y=0; y<Grid.Get_NY() && SG_UI_Process_Set_Progress(y, Grid.Get_NY()); y++)
+	{
+		for(int x=0; x<Grid.Get_NX(); x++)
+		{
+			Image(x, y)	= Grid.asDouble(x, y);
+		}
+	}
+
+	SG_UI_Process_Set_Progress(0.0, 1.0);
+
+	return( true );
+}
+
+//---------------------------------------------------------
+template <class VIGRA_Image>
+bool	Copy_Grid_VIGRA_to_SAGA		(CSG_Grid &Grid, VIGRA_Image &Image, bool bCreate)
+{
+	if( bCreate )
+	{
+		Grid.Create(Grid.Get_Type(), Image.width(), Image.height());
+	}
+
+	if( Grid.Get_NX() != Image.width() || Grid.Get_NY() != Image.height() )
+	{
+		return( false );
+	}
+
+	for(int y=0; y<Grid.Get_NY() && SG_UI_Process_Set_Progress(y, Grid.Get_NY()); y++)
+	{
+		for(int x=0; x<Grid.Get_NX(); x++)
+		{
+			Grid.Set_Value(x, y, Image(x, y));
+		}
+	}
+
+	SG_UI_Process_Set_Progress(0.0, 1.0);
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool	Copy_RGBGrid_SAGA_to_VIGRA	(CSG_Grid &Grid, BRGBImage &Image, bool bCreate);
+bool	Copy_RGBGrid_VIGRA_to_SAGA	(CSG_Grid &Grid, BRGBImage &Image, bool bCreate);
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__vigra_H
diff --git a/src/modules_images/modules_vigra/vigra/vigra_distance.cpp b/src/modules_images/modules_vigra/vigra/vigra_distance.cpp
new file mode 100644
index 0000000..265ddba
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_distance.cpp
@@ -0,0 +1,148 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                  vigra_distance.cpp                   //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra_distance.h"
+
+//---------------------------------------------------------
+#include <vigra/distancetransform.hxx>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CViGrA_Distance::CViGrA_Distance(void)
+{
+	Set_Name		(_TL("ViGrA - Distance"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"References:\n"
+		"ViGrA - Vision with Generic Algorithms\n"
+		"<a target=\"_blank\" href=\"http://hci.iwr.uni-heidelberg.de/vigra\">http://hci.iwr.uni-heidelberg.de</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "INPUT"	, _TL("Features"),
+		_TL("Features are all pixels different not representing no-data."),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "OUTPUT"	, _TL("Distance"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "NORM"	, _TL("Type of distance calculation"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			_TL("Chessboard"),
+			_TL("Manhattan"),
+			_TL("Euclidean")
+		)
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CViGrA_Distance::On_Execute(void)
+{
+	int			Norm;
+	CSG_Grid	*pInput, *pOutput;
+
+	pInput	= Parameters("INPUT")	->asGrid();
+	pOutput	= Parameters("OUTPUT")	->asGrid();
+	Norm	= Parameters("NORM")	->asInt();
+
+	//-----------------------------------------------------
+	vigra::FImage	Input, Output(Get_NX(), Get_NY());
+
+	Copy_Grid_SAGA_to_VIGRA(*pInput, Input, true);
+
+	distanceTransform(srcImageRange(Input), destImage(Output), pInput->Get_NoData_Value(), Norm);
+
+	Copy_Grid_VIGRA_to_SAGA(*pOutput, Output, false);
+
+	//-----------------------------------------------------
+	pOutput->Multiply(pOutput->Get_Cellsize());
+
+	pOutput->Set_Name(CSG_String::Format(SG_T("%s [%s - %s]"), pInput->Get_Name(), Get_Name(), Parameters("NORM")->asString()));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_vigra/vigra/vigra_distance.h b/src/modules_images/modules_vigra/vigra/vigra_distance.h
new file mode 100644
index 0000000..aede401
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_distance.h
@@ -0,0 +1,101 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   vigra_distance.h                    //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__vigra_distance_H
+#define HEADER_INCLUDED__vigra_distance_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CViGrA_Distance : public CSG_Module_Grid
+{
+public:
+	CViGrA_Distance(void);
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__vigra_distance_H
diff --git a/src/modules_images/modules_vigra/vigra/vigra_edges.cpp b/src/modules_images/modules_vigra/vigra/vigra_edges.cpp
new file mode 100644
index 0000000..b5f3489
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_edges.cpp
@@ -0,0 +1,175 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    vigra_edges.cpp                    //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra_edges.h"
+
+//---------------------------------------------------------
+#include <vigra/edgedetection.hxx>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CViGrA_Edges::CViGrA_Edges(void)
+{
+	Set_Name		(_TL("ViGrA - Edge Detection"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"References:\n"
+		"ViGrA - Vision with Generic Algorithms\n"
+		"<a target=\"_blank\" href=\"http://hci.iwr.uni-heidelberg.de/vigra\">http://hci.iwr.uni-heidelberg.de</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "INPUT"		, _TL("Input"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "OUTPUT"		, _TL("Edges"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "TYPE"		, _TL("Detector type"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("Canny"),
+			_TL("Shen-Castan")
+		)
+	);
+
+	Parameters.Add_Value(
+		NULL	, "SCALE"		, _TL("Operator scale"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 1.0, 0.0, true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "THRESHOLD"	, _TL("Gradient threshold"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 1.0, 0.0, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CViGrA_Edges::On_Execute(void)
+{
+	int			Type;
+	double		Scale, Threshold;
+	CSG_Grid	*pInput, *pOutput;
+
+	pInput		= Parameters("INPUT")		->asGrid();
+	pOutput		= Parameters("OUTPUT")		->asGrid();
+	Type		= Parameters("TYPE")		->asInt();
+	Scale		= Parameters("SCALE")		->asDouble();
+	Threshold	= Parameters("THRESHOLD")	->asDouble();
+
+	//-----------------------------------------------------
+	vigra::FImage	Input;
+	vigra::BImage	Output(Get_NX(), Get_NY());
+
+	Copy_Grid_SAGA_to_VIGRA(*pInput, Input, true);
+
+	Output	= 0;
+    
+	switch( Type )
+	{
+	default:
+	case 0:	// Canny
+		cannyEdgeImage					(srcImageRange(Input), destImage(Output), Scale, Threshold, 1);
+		break;
+
+	case 1:	// Shen-Castan
+		differenceOfExponentialEdgeImage(srcImageRange(Input), destImage(Output), Scale, Threshold, 1);
+		break;
+	}
+
+	//-----------------------------------------------------
+	Copy_Grid_VIGRA_to_SAGA(*pOutput, Output, false);
+
+	pOutput->Set_NoData_Value(0);
+
+	pOutput->Set_Name(CSG_String::Format(SG_T("%s [%s]"), pInput->Get_Name(), Get_Name()));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_vigra/vigra/vigra_edges.h b/src/modules_images/modules_vigra/vigra/vigra_edges.h
new file mode 100644
index 0000000..25ade59
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_edges.h
@@ -0,0 +1,101 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     vigra_edges.h                     //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__vigra_edges_H
+#define HEADER_INCLUDED__vigra_edges_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CViGrA_Edges : public CSG_Module_Grid
+{
+public:
+	CViGrA_Edges(void);
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__vigra_edges_H
diff --git a/src/modules_images/modules_vigra/vigra/vigra_fft.cpp b/src/modules_images/modules_vigra/vigra/vigra_fft.cpp
new file mode 100644
index 0000000..fc291fe
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_fft.cpp
@@ -0,0 +1,537 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     vigra_fft.cpp                     //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra_fft.h"
+
+//---------------------------------------------------------
+#include <vigra/fftw3.hxx>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool	Copy_ComplexGrid_SAGA_to_VIGRA	(CSG_Grid &Real, CSG_Grid &Imag, FFTWComplexImage &Image, bool bCreate)
+{
+	if( bCreate )
+	{
+		Image.resize(Real.Get_NX(), Real.Get_NY());
+	}
+
+	if(	Real.Get_NX() != Image.width() || Real.Get_NY() != Image.height()
+	||	Imag.Get_NX() != Image.width() || Imag.Get_NY() != Image.height() )
+	{
+		return( false );
+	}
+
+	for(int y=0; y<Real.Get_NY() && SG_UI_Process_Set_Progress(y, Real.Get_NY()); y++)
+	{
+		for(int x=0; x<Real.Get_NX(); x++)
+		{
+			Image(x, y)	= FFTWComplex(Real.asDouble(x, y), Imag.asDouble(x, y));
+		}
+	}
+
+	SG_UI_Process_Set_Progress(0.0, 1.0);
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool	Copy_ComplexGrid_VIGRA_to_SAGA	(CSG_Grid &Real, CSG_Grid &Imag, FFTWComplexImage &Image, bool bCreate)
+{
+	if( bCreate )
+	{
+		Real.Create(SG_DATATYPE_Float, Image.width(), Image.height());
+		Imag.Create(SG_DATATYPE_Float, Image.width(), Image.height());
+	}
+
+	if(	Real.Get_NX() != Image.width() || Real.Get_NY() != Image.height()
+	||	Imag.Get_NX() != Image.width() || Imag.Get_NY() != Image.height() )
+	{
+		return( false );
+	}
+
+	for(int y=0; y<Real.Get_NY() && SG_UI_Process_Set_Progress(y, Real.Get_NY()); y++)
+	{
+		for(int x=0; x<Real.Get_NX(); x++)
+		{
+		//	Real.Set_Value(x, y, c.magnitude());
+		//	Imag.Set_Value(x, y, c.phase());
+			Real.Set_Value(x, y, Image(x, y).re());
+			Imag.Set_Value(x, y, Image(x, y).im());
+		}
+	}
+
+	SG_UI_Process_Set_Progress(0.0, 1.0);
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CViGrA_FFT::CViGrA_FFT(void)
+{
+	Set_Name		(_TL("ViGrA - Fourier Transform"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"References:\n"
+		"ViGrA - Vision with Generic Algorithms\n"
+		"<a target=\"_blank\" href=\"http://hci.iwr.uni-heidelberg.de/vigra\">http://hci.iwr.uni-heidelberg.de</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "INPUT"		, _TL("Input"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "REAL"		, _TL("Real"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "IMAG"		, _TL("Imaginary"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Value(
+		NULL	, "CENTER"		, _TL("Centered"),
+		_TL(""),
+		PARAMETER_TYPE_Bool, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CViGrA_FFT::On_Execute(void)
+{
+	CSG_Grid	*pInput, *pReal, *pImag;
+
+	pInput	= Parameters("INPUT")	->asGrid();
+	pReal	= Parameters("REAL")	->asGrid();
+	pImag	= Parameters("IMAG")	->asGrid();
+
+	//-----------------------------------------------------
+	vigra::FImage			Input;
+	vigra::FFTWComplexImage	Output(Get_NX(), Get_NY());
+
+	Copy_Grid_SAGA_to_VIGRA(*pInput, Input, true);
+
+	if( !Parameters("CENTER")->asBool() )
+	{
+		fourierTransform(srcImageRange(Input) , destImage(Output));
+	}
+	else
+	{
+		vigra::FFTWComplexImage	tmp(Get_NX(), Get_NY());
+
+		fourierTransform(srcImageRange(Input) , destImage(tmp));
+		moveDCToCenter  (srcImageRange(tmp)   , destImage(Output));
+	}
+
+	//-----------------------------------------------------
+	Copy_ComplexGrid_VIGRA_to_SAGA(*pReal, *pImag, Output, false);
+
+	pReal->Set_Name(CSG_String::Format(SG_T("%s [FFT - %s]"), pInput->Get_Name(), _TL("Real")));
+	pImag->Set_Name(CSG_String::Format(SG_T("%s [FFT - %s]"), pInput->Get_Name(), _TL("Imaginary")));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CViGrA_FFT_Inverse::CViGrA_FFT_Inverse(void)
+{
+	Set_Name		(_TL("ViGrA - Fourier Transform Inverse"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"References:\n"
+		"ViGrA - Vision with Generic Algorithms\n"
+		"<a target=\"_blank\" href=\"http://hci.iwr.uni-heidelberg.de/vigra\">http://hci.iwr.uni-heidelberg.de</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "REAL"		, _TL("Real"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "IMAG"		, _TL("Imaginary"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "REAL_OUT"	, _TL("Real"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "IMAG_OUT"	, _TL("Imaginary"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Value(
+		NULL	, "CENTER"		, _TL("Centered"),
+		_TL(""),
+		PARAMETER_TYPE_Bool, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CViGrA_FFT_Inverse::On_Execute(void)
+{
+	CSG_Grid	*pReal, *pImag;
+
+	pReal	= Parameters("REAL")->asGrid();
+	pImag	= Parameters("IMAG")->asGrid();
+
+	//-----------------------------------------------------
+	vigra::FFTWComplexImage	Input, Output(Get_NX(), Get_NY());
+
+	Copy_ComplexGrid_SAGA_to_VIGRA(*pReal, *pImag, Input, true);
+
+	if( !Parameters("CENTER")->asBool() )
+	{
+		fourierTransformInverse(srcImageRange(Input), destImage(Output));
+	}
+	else
+	{
+		vigra::FFTWComplexImage	tmp(Get_NX(), Get_NY());
+
+		moveDCToUpperLeft      (srcImageRange(Input), destImage(tmp));
+		fourierTransformInverse(srcImageRange(tmp)  , destImage(Output));
+	}
+ 
+	transformImage(srcImageRange(Output), destImage(Output), std::bind1st(std::multiplies<FFTWComplex>(), 1.0 / Get_NX() / Get_NY()));
+
+	//-----------------------------------------------------
+	pReal	= Parameters("REAL_OUT")->asGrid();
+	pImag	= Parameters("IMAG_OUT")->asGrid();
+
+	Copy_ComplexGrid_VIGRA_to_SAGA(*pReal, *pImag, Output, false);
+
+	pReal->Set_Name(CSG_String::Format(SG_T("%s [FFT - %s]"), Get_Name(), _TL("Real")));
+	pImag->Set_Name(CSG_String::Format(SG_T("%s [FFT - %s]"), Get_Name(), _TL("Imaginary")));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CViGrA_FFT_Real::CViGrA_FFT_Real(void)
+{
+	Set_Name		(_TL("ViGrA - Fourier Transform (Real)"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"References:\n"
+		"ViGrA - Vision with Generic Algorithms\n"
+		"<a target=\"_blank\" href=\"http://hci.iwr.uni-heidelberg.de/vigra\">http://hci.iwr.uni-heidelberg.de</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "INPUT"		, _TL("Input"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "OUTPUT"		, _TL("Output"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CViGrA_FFT_Real::On_Execute(void)
+{
+	CSG_Grid	*pInput, *pOutput;
+
+	pInput	= Parameters("INPUT")	->asGrid();
+	pOutput	= Parameters("OUTPUT")	->asGrid();
+
+	//-----------------------------------------------------
+	vigra::FImage	Input, Output(Get_NX(), Get_NY());
+
+	Copy_Grid_SAGA_to_VIGRA(*pInput, Input, true);
+
+	// forward cosine transform == reflective boundary conditions
+	fourierTransformRealEE(srcImageRange(Input), destImage(Output), (fftw_real)1.0);
+
+	//-----------------------------------------------------
+	Copy_Grid_VIGRA_to_SAGA(*pOutput, Output, false);
+
+	pOutput->Set_Name(CSG_String::Format(SG_T("%s [%s - %s]"), Get_Name(), pInput->Get_Name()));
+
+	return( true );
+
+	/*/ multiply with a first derivative of Gaussian in x-direction
+	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
+	{
+		for(int x=1; x<Get_NX(); x++)
+		{
+			double	dx	= x * M_PI / (Get_NX() - 1);
+			double	dy	= y * M_PI / (Get_NY() - 1);
+
+			fourier(x-1, y) = fourier(x, y) * dx * std::exp(-(dx*dx + dy*dy) * scale*scale / 2.0);
+		}
+
+		fourier(width-1, y) = 0.0;
+	}
+
+	// inverse transform -- odd symmetry in x-direction, even in y, due to symmetry of the filter
+	fourierTransformRealOE(srcImageRange(fourier), destImage(spatial), (fftw_real)-4.0 * (Get_NX() + 1) * (Get_NY() - 1));
+	/**/
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CViGrA_FFT_Filter::CViGrA_FFT_Filter(void)
+{
+	Set_Name		(_TL("ViGrA - Fourier Filter"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"References:\n"
+		"ViGrA - Vision with Generic Algorithms\n"
+		"<a target=\"_blank\" href=\"http://hci.iwr.uni-heidelberg.de/vigra\">http://hci.iwr.uni-heidelberg.de</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "INPUT"		, _TL("Input"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "REAL"		, _TL("Output (real)"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "IMAG"		, _TL("Output (imaginary)"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Value(
+		NULL	, "SCALE"		, _TL("Size of smoothing filter"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 2.0, 0.0, true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "POWER"		, _TL("Power"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 0.5
+	);
+
+	Parameters.Add_Range(
+		NULL	, "RANGE"		, _TL("Range"),
+		_TL(""),
+		0.1, 0.9, 0.0, true
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "FILTER"		, _TL("Filter"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
+			_TL("gaussian"),
+			_TL("power of distance"),
+			_TL("include range"),
+			_TL("exclude range")
+		)
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CViGrA_FFT_Filter::On_Execute(void)
+{
+	int			Filter;
+	double		Scale, Power, Range_Min, Range_Max;
+	CSG_Grid	*pInput, *pReal, *pImag;
+
+	pInput		= Parameters("INPUT")	->asGrid();
+	pReal		= Parameters("REAL")	->asGrid();
+	pImag		= Parameters("IMAG")	->asGrid();
+	Scale		= Parameters("SCALE")	->asDouble();
+	Power		= Parameters("POWER")	->asDouble();
+	Filter		= Parameters("FILTER")	->asInt();
+	Range_Min	= Parameters("RANGE")	->asRange()->Get_LoVal();
+	Range_Max	= Parameters("RANGE")	->asRange()->Get_HiVal();
+
+	//-----------------------------------------------------
+	vigra::FImage			Input, Filter_Raw(Get_NX(), Get_NY()), Filter_(Get_NX(), Get_NY());
+	vigra::FFTWComplexImage	Output(Get_NX(), Get_NY());
+
+	//-----------------------------------------------------
+	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
+	{
+		for(int x=0; x<Get_NX(); x++)
+		{
+			double	xx	= (x - Get_NX() / 2.0) / Get_NX();
+			double	yy	= (y - Get_NY() / 2.0) / Get_NY();
+
+			switch( Filter )
+			{
+			case 0:
+				Filter_Raw(x, y)	= exp(-(xx*xx + yy*yy) / 2.0 * Scale);
+				break;
+
+			case 1:
+				Filter_Raw(x, y)	= pow(sqrt(xx*xx + yy*yy), Power);
+				break;
+
+			case 2:
+				Filter_Raw(x, y)	= (xx = sqrt(xx*xx + yy*yy)) < Range_Min || xx > Range_Max ? 0.0 : 1.0;
+				break;
+
+			case 3:
+				Filter_Raw(x, y)	= (xx = sqrt(xx*xx + yy*yy)) < Range_Min || xx > Range_Max ? 1.0 : 0.0;
+				break;
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	moveDCToUpperLeft(srcImageRange(Filter_Raw), destImage(Filter_));    // applyFourierFilter() expects the filter's DC in the upper left
+
+	Copy_Grid_SAGA_to_VIGRA(*pInput, Input, true);
+
+	vigra::applyFourierFilter(srcImageRange(Input), srcImage(Filter_), destImage(Output));
+ 
+	transformImage(srcImageRange(Output), destImage(Output), std::bind1st(std::multiplies<FFTWComplex>(), 1.0 / Get_NX() / Get_NY()));
+
+	//-----------------------------------------------------
+	Copy_ComplexGrid_VIGRA_to_SAGA(*pReal, *pImag, Output, false);
+
+	pReal->Set_Name(CSG_String::Format(SG_T("%s [FFT - %s]"), pInput->Get_Name(), _TL("Real")));
+	pImag->Set_Name(CSG_String::Format(SG_T("%s [FFT - %s]"), pInput->Get_Name(), _TL("Imaginary")));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_vigra/vigra/vigra_fft.h b/src/modules_images/modules_vigra/vigra/vigra_fft.h
new file mode 100644
index 0000000..aabe7fe
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_fft.h
@@ -0,0 +1,166 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                      vigra_fft.h                      //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__vigra_fft_H
+#define HEADER_INCLUDED__vigra_fft_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CViGrA_FFT : public CSG_Module_Grid
+{
+public:
+	CViGrA_FFT(void);
+
+	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("R:Fourier Analysis") );	}
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CViGrA_FFT_Inverse : public CSG_Module_Grid
+{
+public:
+	CViGrA_FFT_Inverse(void);
+
+	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("R:Fourier Analysis") );	}
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CViGrA_FFT_Real : public CSG_Module_Grid
+{
+public:
+	CViGrA_FFT_Real(void);
+
+	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("R:Fourier Analysis") );	}
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CViGrA_FFT_Filter : public CSG_Module_Grid
+{
+public:
+	CViGrA_FFT_Filter(void);
+
+	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("R:Fourier Analysis") );	}
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__vigra_fft_H
diff --git a/src/modules_images/modules_vigra/vigra/vigra_morphology.cpp b/src/modules_images/modules_vigra/vigra/vigra_morphology.cpp
new file mode 100644
index 0000000..a384794
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_morphology.cpp
@@ -0,0 +1,200 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                  vigra_morphology.cpp                 //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra_morphology.h"
+
+//---------------------------------------------------------
+#include <vigra/flatmorphology.hxx>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CViGrA_Morphology::CViGrA_Morphology(void)
+{
+	Set_Name		(_TL("ViGrA - Basic Morphological Operations"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"References:\n"
+		"ViGrA - Vision with Generic Algorithms\n"
+		"<a target=\"_blank\" href=\"http://hci.iwr.uni-heidelberg.de/vigra\">http://hci.iwr.uni-heidelberg.de</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "INPUT"		, _TL("Input"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "OUTPUT"		, _TL("Output"),
+		_TL(""),
+		PARAMETER_OUTPUT, SG_DATATYPE_Byte
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "TYPE"		, _TL("Operation"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
+			_TL("Dilation"),
+			_TL("Erosion"),
+			_TL("Median"),
+			_TL("User defined rank")
+		)
+	);
+
+	Parameters.Add_Value(
+		NULL	, "RADIUS"		, _TL("Radius (cells)"),
+		_TL(""),
+		PARAMETER_TYPE_Int, 1.0, 0.0, true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "RANK"		, _TL("User defined rank"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 0.5, 0.0, true, 1.0, true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "RESCALE"		, _TL("Rescale Values (0-255)"),
+		_TL(""),
+		PARAMETER_TYPE_Bool, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CViGrA_Morphology::On_Execute(void)
+{
+	bool		bRescale;
+	int			Type, Radius;
+	double		Rank;
+	CSG_Grid	*pInput, *pOutput, Rescaled;
+
+	pInput		= Parameters("INPUT")	->asGrid();
+	pOutput		= Parameters("OUTPUT")	->asGrid();
+	Type		= Parameters("TYPE")	->asInt();
+	Radius		= Parameters("RADIUS")	->asInt();
+	Rank		= Parameters("RANK")	->asDouble();
+	bRescale	= Parameters("RESCALE")	->asBool();
+
+	//-----------------------------------------------------
+	if( bRescale )
+	{
+		Rescaled.Create(*Get_System(), SG_DATATYPE_Byte);
+
+		for(int i=0; i<Get_NCells() && Set_Progress_NCells(i); i++)
+		{
+			Rescaled.Set_Value(i, 0.5 + (pInput->asDouble(i) - pInput->Get_ZMin()) * 255.0 / pInput->Get_ZRange());
+		}
+
+		pInput	= &Rescaled;
+	}
+
+	//-----------------------------------------------------
+	vigra::BImage	Input, Output(Get_NX(), Get_NY());
+
+	Copy_Grid_SAGA_to_VIGRA(*pInput, Input, true);
+
+	switch( Type )
+	{
+	case 0:	// Dilation
+		discDilation		(srcImageRange(Input), destImage(Output), Radius);
+		break;
+
+	case 1:	// Erosion
+		discErosion			(srcImageRange(Input), destImage(Output), Radius);
+		break;
+
+	case 2:	// Median
+		discMedian			(srcImageRange(Input), destImage(Output), Radius);
+		break;
+
+	case 3:	// User defined rank
+		discRankOrderFilter	(srcImageRange(Input), destImage(Output), Radius, Rank);
+		break;
+	}
+
+	//-----------------------------------------------------
+	Copy_Grid_VIGRA_to_SAGA(*pOutput, Output, false);
+
+	pOutput->Set_Name(CSG_String::Format(SG_T("%s [%s]"), pInput->Get_Name(), Get_Name()));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_vigra/vigra/vigra_morphology.h b/src/modules_images/modules_vigra/vigra/vigra_morphology.h
new file mode 100644
index 0000000..d1c100e
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_morphology.h
@@ -0,0 +1,101 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                  vigra_morphology.h                   //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__vigra_morphology_H
+#define HEADER_INCLUDED__vigra_morphology_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CViGrA_Morphology : public CSG_Module_Grid
+{
+public:
+	CViGrA_Morphology(void);
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__vigra_morphology_H
diff --git a/src/modules_images/modules_vigra/vigra/vigra_smoothing.cpp b/src/modules_images/modules_vigra/vigra/vigra_smoothing.cpp
new file mode 100644
index 0000000..2cbeca0
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_smoothing.cpp
@@ -0,0 +1,191 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                      vigra.cpp                        //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra_smoothing.h"
+
+//---------------------------------------------------------
+#include <vigra/convolution.hxx>
+#include <vigra/nonlineardiffusion.hxx>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CViGrA_Smoothing::CViGrA_Smoothing(void)
+{
+	Set_Name		(_TL("ViGrA - Smoothing"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"Based on the example code \"smooth.cxx\" by Ullrich Koethe.\n"
+		"References:\n"
+		"ViGrA - Vision with Generic Algorithms\n"
+		"<a target=\"_blank\" href=\"http://hci.iwr.uni-heidelberg.de/vigra\">http://hci.iwr.uni-heidelberg.de</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "INPUT"	, _TL("Input"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "OUTPUT"	, _TL("Output"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "TYPE"	, _TL("Type of smoothing"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			_TL("exponential"),
+			_TL("nonlinear"),
+			_TL("gaussian")
+		)
+	);
+
+	Parameters.Add_Value(
+		NULL	, "SCALE"	, _TL("Size of smoothing filter"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 2.0, 0.0, true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "EDGE"	, _TL("Edge threshold for nonlinear smoothing"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 1.0, 0.0, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CViGrA_Smoothing::On_Execute(void)
+{
+	int				Type;
+	double			Scale, Edge;
+	CSG_Grid		*pInput, *pOutput;
+	vigra::FImage	Input, Output;
+
+	pInput	= Parameters("INPUT")	->asGrid();
+	pOutput	= Parameters("OUTPUT")	->asGrid();
+	Type	= Parameters("TYPE")	->asInt();
+	Scale	= Parameters("SCALE")	->asDouble();
+	Edge	= Parameters("EDGE")	->asDouble();
+
+	Copy_Grid_SAGA_to_VIGRA(*pInput, Input, true);
+
+	Output.resize(Get_NX(), Get_NY());
+
+	//-----------------------------------------------------
+	switch( Type )
+	{
+	case 0:	// apply recursive filter (exponential filter) to color image
+		{
+			recursiveSmoothX(srcImageRange(Input ), destImage(Output), Scale);
+			recursiveSmoothY(srcImageRange(Output), destImage(Output), Scale);
+
+			break;
+		}
+
+	case 1:	// apply nonlinear diffusion to color image
+		{
+			nonlinearDiffusion(srcImageRange(Input), destImage(Output), vigra::DiffusivityFunctor<float>(Edge), Scale);
+
+			break;
+		}
+
+	case 2:	// apply Gaussian filter to color image
+		{
+			vigra::FImage			tmp(Get_NX(), Get_NY());
+			vigra::Kernel1D<double>	gauss;
+
+			gauss.initGaussian(Scale);
+
+			separableConvolveX(srcImageRange(Input) , destImage(tmp), kernel1d(gauss));
+			separableConvolveY(srcImageRange(tmp), destImage(Output), kernel1d(gauss));
+
+			break;
+		}
+	}
+
+	//-----------------------------------------------------
+	Copy_Grid_VIGRA_to_SAGA(*pOutput, Output, false);
+
+	pOutput->Set_Name(CSG_String::Format(SG_T("%s [%s - %s]"), pInput->Get_Name(), Get_Name(), Parameters("TYPE")->asString()));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_vigra/vigra/vigra_smoothing.h b/src/modules_images/modules_vigra/vigra/vigra_smoothing.h
new file mode 100644
index 0000000..79aec32
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_smoothing.h
@@ -0,0 +1,101 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   vigra_smoothing.h                   //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__vigra_smoothing_H
+#define HEADER_INCLUDED__vigra_smoothing_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CViGrA_Smoothing : public CSG_Module_Grid
+{
+public:
+	CViGrA_Smoothing(void);
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__vigra_smoothing_H
diff --git a/src/modules_images/modules_vigra/vigra/vigra_watershed.cpp b/src/modules_images/modules_vigra/vigra/vigra_watershed.cpp
new file mode 100644
index 0000000..6c0fefb
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_watershed.cpp
@@ -0,0 +1,288 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                      vigra.cpp                        //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra_watershed.h"
+
+//---------------------------------------------------------
+#include <vigra/stdimagefunctions.hxx>
+#include <vigra/localminmax.hxx>
+#include <vigra/labelimage.hxx>
+#include <vigra/seededregiongrowing.hxx>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CViGrA_Watershed::CViGrA_Watershed(void)
+{
+	Set_Name		(_TL("ViGrA - Watershed Segmentation"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2009"));
+
+	Set_Description	(_TW(
+		"Note that the watershed algorithm usually results in an "
+		"oversegmentation (i.e., too many regions), but its boundary "
+		"localization is quite good.\n"
+		"Based on the example code \"watershed.cxx\" by Ullrich Koethe.\n"
+		"References:\n"
+		"ViGrA - Vision with Generic Algorithms\n"
+		"<a target=\"_blank\" href=\"http://hci.iwr.uni-heidelberg.de/vigra\">http://hci.iwr.uni-heidelberg.de</a>"
+	));
+
+	Parameters.Add_Grid(
+		NULL	, "INPUT"	, _TL("Input"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "OUTPUT"	, _TL("Segmentation"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_Value(
+		NULL	, "SCALE"	, _TL("Width of gradient filter"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 1.0, 0.0, true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "RGB"		, _TL("RGB coded data"),
+		_TL(""),
+		PARAMETER_TYPE_Bool, false
+	);
+
+	Parameters.Add_Value(
+		NULL	, "EDGES"	, _TL("Edges"),
+		_TL(""),
+		PARAMETER_TYPE_Bool, false
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CViGrA_Watershed::On_Execute(void)
+{
+	bool		bEdges, bRGB;
+	double		Scale;
+	CSG_Grid	*pInput, *pOutput;
+
+	pInput	= Parameters("INPUT")	->asGrid();
+	pOutput	= Parameters("OUTPUT")	->asGrid();
+	Scale	= Parameters("SCALE")	->asDouble();
+	bEdges	= Parameters("EDGES")	->asBool();
+	bRGB	= Parameters("RGB")		->asBool();
+
+	//-----------------------------------------------------
+	if( !bRGB )
+	{
+		vigra::FImage	Input, Output(Get_NX(), Get_NY());
+
+		Copy_Grid_SAGA_to_VIGRA(*pInput, Input, true);
+
+		Segmentation(Input, Output, Scale, bEdges);
+
+		Copy_Grid_VIGRA_to_SAGA(*pOutput, Output, false);
+	}
+
+	//-----------------------------------------------------
+	else	// perform watershed segmentation on color image
+	{
+		vigra::BRGBImage	Input, Output(Get_NX(), Get_NY());
+
+		Copy_RGBGrid_SAGA_to_VIGRA(*pInput, Input, true);
+
+		Segmentation(Input, Output, Scale, bEdges);
+
+		Copy_RGBGrid_VIGRA_to_SAGA(*pOutput, Output, false);
+	}
+
+	//-----------------------------------------------------
+	pOutput->Set_Name(CSG_String::Format(SG_T("%s [%s]"), pInput->Get_Name(), Get_Name()));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+// define a functor that calsulates the squared magnitude
+// of the gradient given the x/y components of the gradient
+//---------------------------------------------------------
+struct GradientSquaredMagnitudeFunctor
+{
+	float operator()(float const & g1, float const & g2) const
+	{
+		return g1 * g1 + g2 * g2;
+	}
+
+	float operator()(vigra::RGBValue<float> const & rg1, vigra::RGBValue<float> const & rg2) const
+	{
+		float g1 = rg1.squaredMagnitude();
+		float g2 = rg2.squaredMagnitude();
+
+		return g1 + g2;
+	}
+};
+
+//---------------------------------------------------------
+// generic implementation of the watershed algorithm
+//---------------------------------------------------------
+template <class TImage_In, class TImage_Out>
+void CViGrA_Watershed::Segmentation(TImage_In &Input, TImage_Out &Output, double Scale, bool bEdges)
+{
+	typedef typename vigra::NumericTraits<typename TImage_In::value_type>::RealPromote	TmpType;
+
+	vigra::BasicImage<TmpType>	gradientx	(Get_NX(), Get_NY());
+	vigra::BasicImage<TmpType>	gradienty	(Get_NX(), Get_NY());
+	vigra::FImage				gradientmag	(Get_NX(), Get_NY());
+	vigra::IImage				labels		(Get_NX(), Get_NY());
+
+	//-----------------------------------------------------
+	// calculate the x- and y-components of the image gradient at given scale
+	Process_Set_Text(_TL("calculate gradients"));
+
+	recursiveFirstDerivativeX	(srcImageRange(Input)		, destImage(gradientx), Scale);
+	recursiveSmoothY			(srcImageRange(gradientx)	, destImage(gradientx), Scale);
+
+	recursiveFirstDerivativeY	(srcImageRange(Input)		, destImage(gradienty), Scale);
+	recursiveSmoothX			(srcImageRange(gradienty)	, destImage(gradienty), Scale);
+
+	//-----------------------------------------------------
+	// transform components into gradient magnitude
+	Process_Set_Text(_TL("calculate gradient magnitude"));
+
+	combineTwoImages(
+		srcImageRange(gradientx),
+		srcImage(gradienty),
+		destImage(gradientmag),
+		GradientSquaredMagnitudeFunctor()
+	);
+
+	//-----------------------------------------------------
+	// find the local minima of the gradient magnitude (might be larger than one pixel)
+	Process_Set_Text(_TL("find local minima"));
+
+	labels	= 0;
+
+	extendedLocalMinima(srcImageRange(gradientmag), destImage(labels), 1);
+
+	//-----------------------------------------------------
+	// label the minima just found
+	Process_Set_Text(_TL("label minima"));
+
+	int max_region_label	= labelImageWithBackground(srcImageRange(labels), destImage(labels), false, 0);
+
+	//-----------------------------------------------------
+	// create a statistics functor for region growing
+	vigra::ArrayOfRegionStatistics<vigra::SeedRgDirectValueFunctor<float> >gradstat(max_region_label);
+
+	//-----------------------------------------------------
+	// perform region growing, starting from the minima of the gradient magnitude;
+	// as the feature (first input) image contains the gradient magnitude,
+	// this calculates the catchment basin of each minimum
+	Process_Set_Text(_TL("perform region growing"));
+
+	seededRegionGrowing(srcImageRange(gradientmag), srcImage(labels), destImage(labels), gradstat);
+
+	//-----------------------------------------------------
+	// initialize a functor to determine the average gray-value or color for each region (catchment basin) just found
+	vigra::ArrayOfRegionStatistics<vigra::FindAverage<TmpType> >averages(max_region_label);
+
+	//-----------------------------------------------------
+	// calculate the averages
+	Process_Set_Text(_TL("calculate averages"));
+
+	inspectTwoImages(srcImageRange(Input), srcImage(labels), averages);
+
+	//-----------------------------------------------------
+	// write the averages into the destination image (the functor 'averages' acts as a look-up table)
+	transformImage(srcImageRange(labels), destImage(Output), averages);
+
+	//-----------------------------------------------------
+	// mark the watersheds (region boundaries) black
+	if( bEdges )
+	{
+		regionImageToEdgeImage(srcImageRange(labels), destImage(Output), vigra::NumericTraits<typename TImage_Out::value_type>::zero());
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_images/modules_vigra/vigra/vigra_watershed.h b/src/modules_images/modules_vigra/vigra/vigra_watershed.h
new file mode 100644
index 0000000..8f47080
--- /dev/null
+++ b/src/modules_images/modules_vigra/vigra/vigra_watershed.h
@@ -0,0 +1,106 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        VIGRA                          //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   vigra_watershed.h                   //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__vigra_watershed_H
+#define HEADER_INCLUDED__vigra_watershed_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "vigra.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CViGrA_Watershed : public CSG_Module_Grid
+{
+public:
+	CViGrA_Watershed(void);
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+private:
+
+	template <class TImage_In, class TImage_Out>
+	void					Segmentation		(TImage_In &Input, TImage_Out &Output, double Scale, bool bEdges);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__vigra_watershed_H
diff --git a/src/modules_io/Makefile.am b/src/modules_io/Makefile.am
index f598674..3a0c34c 100644
--- a/src/modules_io/Makefile.am
+++ b/src/modules_io/Makefile.am
@@ -1 +1 @@
-SUBDIRS = db esri_e00 gps gdal grid shapes table
+SUBDIRS = db docs esri_e00 gps gdal grid shapes table
diff --git a/src/modules_io/Makefile.in b/src/modules_io/Makefile.in
index c55d5d9..daa9d2f 100644
--- a/src/modules_io/Makefile.in
+++ b/src/modules_io/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_io
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -203,7 +228,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = db esri_e00 gps gdal grid shapes table
+SUBDIRS = db docs esri_e00 gps gdal grid shapes table
 all: all-recursive
 
 .SUFFIXES:
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_io/db/Makefile.in b/src/modules_io/db/Makefile.in
index 8362719..d38825c 100644
--- a/src/modules_io/db/Makefile.in
+++ b/src/modules_io/db/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_io/db
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_io/db/io_odbc/Makefile.in b/src/modules_io/db/io_odbc/Makefile.in
index 71db936..265e970 100644
--- a/src/modules_io/db/io_odbc/Makefile.in
+++ b/src/modules_io/db/io_odbc/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_io/db/io_odbc
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -106,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_io/db/io_odbc/pgis_shapes.cpp b/src/modules_io/db/io_odbc/pgis_shapes.cpp
index 487592c..57b2e19 100644
--- a/src/modules_io/db/io_odbc/pgis_shapes.cpp
+++ b/src/modules_io/db/io_odbc/pgis_shapes.cpp
@@ -348,7 +348,7 @@ bool CPGIS_Shapes_Save::On_Before_Execution(void)
 		return( false );
 	}
 
-	Parameters("SRID")->asChoice()->Set_Items(SG_Get_Projections().Get_Names());
+	Parameters("SRID")->asChoice()->Set_Items(SG_Get_Projections().Get_Names_List());
 
 /*	if( Parameters("SRID")->asChoice()->Get_Count() > 1 )
 		return( true );
@@ -383,8 +383,11 @@ bool CPGIS_Shapes_Save::On_Execute(void)
 
 	pShapes		= Parameters("SHAPES")	->asShapes();
 	Geo_Table	= Parameters("NAME")	->asString();	if( Geo_Table.Length() == 0 )	Geo_Table	= pShapes->Get_Name();
-	SRID		= Parameters("SRID")	->asInt();
-	SRID		= SG_Get_Projections().Get_SRID_byNamesIndex(SRID);
+
+	if( !Parameters("SRID")->asChoice()->Get_Data(SRID) )
+	{
+		SRID	= -1;
+	}
 
 	sSRID.Printf(SG_T("%d"), SRID);
 
diff --git a/src/modules_io/docs/Makefile.am b/src/modules_io/docs/Makefile.am
new file mode 100644
index 0000000..4cedecb
--- /dev/null
+++ b/src/modules_io/docs/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = docs_html docs_pdf
diff --git a/src/modules_io/docs/Makefile.in b/src/modules_io/docs/Makefile.in
new file mode 100644
index 0000000..58962af
--- /dev/null
+++ b/src/modules_io/docs/Makefile.in
@@ -0,0 +1,581 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_io/docs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = docs_html docs_pdf
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_io/docs/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_io/docs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (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):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_io/docs/docs_html/CreateWebContent.cpp b/src/modules_io/docs/docs_html/CreateWebContent.cpp
new file mode 100644
index 0000000..02f840a
--- /dev/null
+++ b/src/modules_io/docs/docs_html/CreateWebContent.cpp
@@ -0,0 +1,178 @@
+/*******************************************************************************
+    PhotoLinks.cpp
+    Copyright (C) Victor Olaya
+
+    This program 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.
+
+    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 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 "CreateWebContent.h"
+
+CCreateWebContent::CCreateWebContent(void)
+{
+	CSG_Parameter *pNode;
+	
+	//-----------------------------------------------------
+	Parameters.Set_Name(_TL("Create Web Content"));
+
+	Parameters.Set_Description(_TL(""));
+
+	pNode = Parameters.Add_Shapes(NULL, 
+						"SHAPES", 
+						_TL("Shapes"),
+						_TL(""),
+						PARAMETER_INPUT);
+
+	Parameters.Add_Table_Field(pNode,
+								"NAME",
+								_TL("Name Field"),
+								_TL(""));
+	
+	Parameters.Add_FilePath(NULL,
+							"OUTPUTPATH",
+							_TL("Path for HTML Files"),
+							_TL(""),
+							_TL(""),
+							_TL(""),
+							true,
+							true);
+
+}
+
+CCreateWebContent::~CCreateWebContent(void)
+{}
+
+bool CCreateWebContent::On_Execute(void)
+{
+	m_bDown	= false;
+	m_pShapes = Parameters("SHAPES")->asShapes();
+
+	m_iNameField = Parameters("NAME")->asInt();
+	m_sOutputPath = Parameters("OUTPUTPATH")->asString();
+
+	m_pShapes->Add_Field("HTML", SG_DATATYPE_String);
+	m_iField = m_pShapes->Get_Field_Count() - 1;
+	
+	m_Pictures = new std::vector<CSG_String> [m_pShapes->Get_Count()];
+	m_Links = new std::vector<CSG_String> [m_pShapes->Get_Count()];
+	m_LinksDescription = new std::vector<CSG_String> [m_pShapes->Get_Count()];
+
+	return true ;
+}
+
+bool CCreateWebContent::On_Execute_Position(CSG_Point ptWorld, TSG_Module_Interactive_Mode Mode)
+{
+	int i;
+	int iIndex, iShape;
+	CSG_Rect r;
+
+	switch( Mode ){
+	case MODULE_INTERACTIVE_LDOWN:
+		
+		if( m_bDown == false ){
+			m_bDown	= true;
+			m_ptDown = ptWorld;
+		}//if
+		
+		return true ;
+
+	case MODULE_INTERACTIVE_LUP:
+		if( m_bDown == true ){
+			m_bDown	= false;
+
+			r.Assign(m_ptDown.Get_X(), m_ptDown.Get_Y(), ptWorld.Get_X(), ptWorld.Get_Y());
+
+			if( r.Get_XRange() == 0.0 && r.Get_YRange() == 0.0 ){
+				m_pShapes->Select(m_pShapes->Get_Shape(m_ptDown), is_Shift());
+			}//if
+			else{
+				m_pShapes->Select(r, is_Shift());
+			}//else
+
+			DataObject_Update(m_pShapes, true);
+			
+		}//if
+		
+		return true;
+
+	case MODULE_INTERACTIVE_RDOWN:
+
+		CSG_String	sFileName;
+		CSG_Strings	files;
+		CSG_Parameters	dlg_files;
+		dlg_files.Add_FilePath(NULL, "FILES", _TL("Files"), _TL(""), _TL("Images|*.bmp;*.jpg;*.png;*.tif|HTML Files|*.htm|All Files|*.*"), NULL, false, false, true);
+
+		if( Dlg_Parameters(&dlg_files, _TL("Add Link to Files")) && dlg_files("FILES")->asFilePath()->Get_FilePaths(files) )
+		{
+			for (iShape = 0; iShape < m_pShapes->Get_Selection_Count(); iShape++){
+				iIndex = m_pShapes->Get_Selection(iShape)->Get_Index();
+				for (i = 0; i < files.Get_Count(); i++)
+				{
+					sFileName = "file://";
+					sFileName.Append((CSG_String)files[i]);
+					if (SG_File_Cmp_Extension (files[i],SG_T("htm"))){						
+						m_LinksDescription[iIndex].push_back(SG_File_Get_Name(files[i], true));
+						m_Links[iIndex].push_back(sFileName);
+					}//if
+					else if (  SG_File_Cmp_Extension (files[i],SG_T("bmp")) 
+							|| SG_File_Cmp_Extension (files[i],SG_T("jpg")) 
+							|| SG_File_Cmp_Extension (files[i],SG_T("png")) 				
+							|| SG_File_Cmp_Extension (files[i],SG_T("tif"))){
+						m_Pictures[iIndex].push_back(sFileName);
+					}//else
+				}				
+				sFileName = SG_File_Make_Path(m_sOutputPath.c_str(), m_pShapes->Get_Shape(iIndex)->asString(m_iNameField), SG_T("htm"));
+				m_pShapes->Get_Shape(iIndex)->Set_Value(m_iField, sFileName);
+			}
+		}
+		break;
+
+	}//switch
+
+	return false ;
+
+}//method
+
+bool CCreateWebContent::On_Execute_Finish(void){
+
+	int i,j;
+	CSG_String sFileName;
+	CSG_Doc_HTML HTMLDoc;
+
+	for (i = 0; i < m_pShapes->Get_Count(); i++){
+		Set_Progress(i, m_pShapes->Get_Count());
+		const SG_Char **Pictures;
+
+		if (m_Pictures[i].size() || m_Links[i].size()){
+			HTMLDoc.Open(m_pShapes->Get_Shape(i)->asString(m_iNameField));
+			Pictures = new const SG_Char *[m_Pictures[i].size()];
+			for (j = 0; j < m_Pictures[i].size(); j++){
+				Pictures[j] = m_Pictures[i].at(j).c_str();
+			}//for*/
+		
+			HTMLDoc.AddThumbnails(Pictures, m_Pictures[i].size(), 4);
+			HTMLDoc.AddLineBreak();
+			for (j = 0; j < m_Links[i].size(); j++){
+				HTMLDoc.AddHyperlink(m_LinksDescription[i].at(j).c_str(), m_Links[i].at(j).c_str());
+				HTMLDoc.AddLineBreak();
+			}//for
+
+			sFileName = SG_File_Make_Path(m_sOutputPath.c_str(), m_pShapes->Get_Shape(i)->asString(m_iNameField), SG_T("htm"));
+			HTMLDoc.Save(sFileName);
+		}//if
+
+	}//for
+
+	return true;
+
+}//method
diff --git a/src/modules_io/docs/docs_html/CreateWebContent.h b/src/modules_io/docs/docs_html/CreateWebContent.h
new file mode 100644
index 0000000..c5161f2
--- /dev/null
+++ b/src/modules_io/docs/docs_html/CreateWebContent.h
@@ -0,0 +1,53 @@
+/*******************************************************************************
+    Photolinks.h
+    Copyright (C) Victor Olaya
+    
+    This program 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.
+
+    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 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
+*******************************************************************************/ 
+
+#ifndef HEADER_INCLUDED__CreateWebContent_H
+#define HEADER_INCLUDED__CreateWebContent_H
+
+#include "doc_html.h"
+#include <vector>
+
+class CCreateWebContent : public CSG_Module_Interactive
+{
+public:
+
+	CCreateWebContent(void);
+	virtual ~CCreateWebContent(void);
+
+protected:
+
+	virtual bool				On_Execute(void);
+	virtual bool				On_Execute_Position(CSG_Point ptWorld, TSG_Module_Interactive_Mode Mode);
+	virtual bool				On_Execute_Finish(void);
+
+private:
+
+	bool						m_bDown;
+	CSG_Point					m_ptDown;
+	CSG_Shapes						*m_pShapes;
+	int							m_iField, m_iNameField;
+	CSG_String					m_sOutputPath;
+
+	std::vector<CSG_String>	*m_Pictures;
+	std::vector<CSG_String>	*m_Links;
+	std::vector<CSG_String>	*m_LinksDescription;
+
+};
+
+#endif // #ifndef HEADER_INCLUDED__CreateWebContent_H
diff --git a/src/modules_io/docs/docs_html/MLB_Interface.cpp b/src/modules_io/docs/docs_html/MLB_Interface.cpp
new file mode 100644
index 0000000..62dd707
--- /dev/null
+++ b/src/modules_io/docs/docs_html/MLB_Interface.cpp
@@ -0,0 +1,116 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_html                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   MLB_Interface.cpp                   //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//			The Module Link Library Interface			 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+//---------------------------------------------------------
+const SG_Char * Get_Info(int i)
+{
+	switch( i )
+	{
+	case MLB_INFO_Name:	default:
+		return( _TL("Reports - HTML") );
+
+	case MLB_INFO_Author:
+		return( SG_T("SAGA User Group (c) 2010") );
+
+	case MLB_INFO_Description:
+		return( _TW(
+			"Reports and document creation in Hypertext Mark Up Language (HTML) format."
+		));
+
+	case MLB_INFO_Version:
+		return( SG_T("1.0") );
+
+	case MLB_INFO_Menu_Path:
+		return( _TL("File|Reports") );
+	}
+}
+
+
+//---------------------------------------------------------
+#include "CreateWebContent.h"
+#include "svg_interactive_map.h"
+
+
+//---------------------------------------------------------
+CSG_Module *		Create_Module(int i)
+{
+	switch( i )
+	{
+	case  0:	return( new CCreateWebContent );
+	case  1:	return( new CSVG_Interactive_Map );
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+//{{AFX_SAGA
+
+	MLB_INTERFACE
+
+//}}AFX_SAGA
diff --git a/src/modules_io/docs/docs_html/MLB_Interface.h b/src/modules_io/docs/docs_html/MLB_Interface.h
new file mode 100644
index 0000000..7e6dcb9
--- /dev/null
+++ b/src/modules_io/docs/docs_html/MLB_Interface.h
@@ -0,0 +1,80 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_html                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    MLB_Interface.h                    //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Include the SAGA-API here				 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__docs_html__mlb_interface_H
+#define HEADER_INCLUDED__docs_html__mlb_interface_H
+
+//---------------------------------------------------------
+#include <saga_api/saga_api.h>
+
+//---------------------------------------------------------
+#ifdef docs_html_EXPORTS
+	#define	docs_html_EXPORT	_SAGA_DLL_EXPORT
+#else
+	#define	docs_html_EXPORT	_SAGA_DLL_IMPORT
+#endif
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__docs_html__mlb_interface_H
diff --git a/src/modules_io/docs/docs_html/Makefile.am b/src/modules_io/docs/docs_html/Makefile.am
new file mode 100644
index 0000000..d5daa29
--- /dev/null
+++ b/src/modules_io/docs/docs_html/Makefile.am
@@ -0,0 +1,28 @@
+#
+# $Id: Makefile.am,v 1.3 2010/10/22 14:47:19 oconrad Exp $
+#
+if DEBUG
+DBGFLAGS = -g -DDEBUG
+endif
+if SAGA_UNICODE
+UC_DEFS = -D_SAGA_UNICODE
+endif
+DEF_SAGA           = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+CXX_INCS           = -I$(top_srcdir)/src/saga_core
+AM_CXXFLAGS        = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+AM_LDFLAGS         = -fPIC -shared -avoid-version 
+pkglib_LTLIBRARIES = libdocs_html.la
+libdocs_html_la_SOURCES =\
+CreateWebContent.cpp\
+doc_html.cpp\
+doc_svg.cpp\
+MLB_Interface.cpp\
+svg_interactive_map.cpp\
+CreateWebContent.h\
+doc_html.h\
+doc_svg.h\
+MLB_Interface.h\
+svg_interactive_map.h
+
+libdocs_html_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+
diff --git a/src/modules_io/docs/docs_html/Makefile.in b/src/modules_io/docs/docs_html/Makefile.in
new file mode 100644
index 0000000..f369cd2
--- /dev/null
+++ b/src/modules_io/docs/docs_html/Makefile.in
@@ -0,0 +1,579 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_io/docs/docs_html
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+libdocs_html_la_DEPENDENCIES =  \
+	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+am_libdocs_html_la_OBJECTS = CreateWebContent.lo doc_html.lo \
+	doc_svg.lo MLB_Interface.lo svg_interactive_map.lo
+libdocs_html_la_OBJECTS = $(am_libdocs_html_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libdocs_html_la_SOURCES)
+DIST_SOURCES = $(libdocs_html_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#
+# $Id: Makefile.am,v 1.3 2010/10/22 14:47:19 oconrad Exp $
+#
+ at DEBUG_TRUE@DBGFLAGS = -g -DDEBUG
+ at SAGA_UNICODE_TRUE@UC_DEFS = -D_SAGA_UNICODE
+DEF_SAGA = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+CXX_INCS = -I$(top_srcdir)/src/saga_core
+AM_CXXFLAGS = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+AM_LDFLAGS = -fPIC -shared -avoid-version 
+pkglib_LTLIBRARIES = libdocs_html.la
+libdocs_html_la_SOURCES = \
+CreateWebContent.cpp\
+doc_html.cpp\
+doc_svg.cpp\
+MLB_Interface.cpp\
+svg_interactive_map.cpp\
+CreateWebContent.h\
+doc_html.h\
+doc_svg.h\
+MLB_Interface.h\
+svg_interactive_map.h
+
+libdocs_html_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_io/docs/docs_html/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_io/docs/docs_html/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+	}
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libdocs_html.la: $(libdocs_html_la_OBJECTS) $(libdocs_html_la_DEPENDENCIES) 
+	$(CXXLINK) -rpath $(pkglibdir) $(libdocs_html_la_OBJECTS) $(libdocs_html_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CreateWebContent.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/doc_html.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/doc_svg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/svg_interactive_map.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_io/docs/docs_html/doc_html.cpp b/src/modules_io/docs/docs_html/doc_html.cpp
new file mode 100644
index 0000000..c9dd8af
--- /dev/null
+++ b/src/modules_io/docs/docs_html/doc_html.cpp
@@ -0,0 +1,722 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_html                       //
+//                                                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     doc_html.cpp                      //
+//                                                       //
+//                 Copyright (C) 2005 by                 //
+//                      Victor Olaya                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Victor Olaya                           //
+//                                                       //
+//    e-mail:     volaya at saga-gis.org                    //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "doc_html.h"
+
+//---------------------------------------------------------
+#define GRAPH_WIDTH		700
+#define GRAPH_HEIGHT	350
+#define MAP_WIDTH		700.
+#define MAP_HEIGHT		700.
+#define OFFSET_X		50
+#define OFFSET_Y		50
+
+//---------------------------------------------------------
+#define HTML_CODE_OPENING_1	SG_T("<html>\n<head><title>")
+
+#define HTML_CODE_OPENING_2	SG_T("</title>\n")\
+	SG_T("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n")\
+	SG_T("</head>\n")\
+	SG_T("<body bgcolor=\"#FFFFFF\" text=\"#000000\">\n")
+
+#define HTML_CODE_CLOSING	SG_T("</body>\n</html>")
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Doc_HTML::CSG_Doc_HTML(){}
+
+CSG_Doc_HTML::~CSG_Doc_HTML(){}
+
+void CSG_Doc_HTML::Open(const SG_Char *Title)
+{
+
+	m_sHTMLCode.Clear();
+
+	m_sHTMLCode.Append(HTML_CODE_OPENING_1);
+	m_sHTMLCode.Append(Title);
+	m_sHTMLCode.Append(HTML_CODE_OPENING_2);
+
+}
+
+bool CSG_Doc_HTML::Save(const SG_Char *Filename)
+{
+
+	m_sHTMLCode.Append(HTML_CODE_CLOSING);
+
+	CSG_File	Stream(Filename, SG_FILE_W, false);
+
+	if( Stream.is_Open() )
+	{
+		Stream.Printf(SG_T("%s"), m_sHTMLCode.c_str());
+		return true;
+	}
+
+	return false;
+
+}
+
+void CSG_Doc_HTML::AddParagraph(const SG_Char *Text)
+{
+
+	m_sHTMLCode.Append(SG_T("<p align=\"left\">"));
+	m_sHTMLCode.Append(Text);
+	m_sHTMLCode.Append(SG_T("</p>\n"));
+
+}
+
+void CSG_Doc_HTML::AddLineBreak()
+{
+
+	m_sHTMLCode.Append(SG_T("</br>"));	
+
+}
+void CSG_Doc_HTML::AddHeader(const SG_Char *Text,
+							int iOrder)
+{
+
+	m_sHTMLCode.Append(SG_T("<h"));
+	m_sHTMLCode.Append(SG_Get_String(iOrder,0));
+	m_sHTMLCode.Append(SG_T(" align=\"left\">"));
+	m_sHTMLCode.Append(Text);
+	m_sHTMLCode.Append(SG_T("</h"));
+	m_sHTMLCode.Append(SG_Get_String(iOrder,0));
+	m_sHTMLCode.Append(SG_T(">\n"));
+
+}
+
+void CSG_Doc_HTML::AddHyperlink(const SG_Char *Text,
+								const SG_Char *URL)
+{
+
+	m_sHTMLCode.Append(SG_T("<a href=\""));
+	m_sHTMLCode.Append(URL);
+	m_sHTMLCode.Append(SG_T("\">\n"));
+	m_sHTMLCode.Append(Text);
+	m_sHTMLCode.Append(SG_T("\n</a>"));
+
+}
+
+CSG_String CSG_Doc_HTML::GetHyperlinkCode(const SG_Char *Text,
+									const SG_Char *URL)
+{
+	CSG_String s;
+
+	s.Append(SG_T("<a href=\""));
+	s.Append(URL);
+	s.Append(SG_T("\">\n"));
+	s.Append(Text);
+	s.Append(SG_T("\n</a>"));
+
+	return s;
+
+}
+void CSG_Doc_HTML::AddImage(const SG_Char *Filename)
+{
+
+	m_sHTMLCode.Append(SG_T("<img src=\""));
+	m_sHTMLCode.Append(Filename);
+	m_sHTMLCode.Append(SG_T("\">\n"));
+
+}
+
+void CSG_Doc_HTML::AddThumbnail(const SG_Char *Filename,
+								int iWidth,
+								bool bIsPercent)
+{
+
+	m_sHTMLCode.Append(SG_T("<a href=\""));
+	m_sHTMLCode.Append(Filename);
+	m_sHTMLCode.Append(SG_T("\">\n"));
+    m_sHTMLCode.Append(SG_T("<img src=\""));
+    m_sHTMLCode.Append(Filename);
+    m_sHTMLCode.Append(SG_T("\" width="));
+    m_sHTMLCode.Append(SG_Get_String(iWidth,0));
+    if (bIsPercent)
+    {
+		m_sHTMLCode.Append(SG_T("%"));
+	}
+    m_sHTMLCode.Append(SG_T("></a><br><br>\n"));
+
+}
+
+void CSG_Doc_HTML::AddThumbnails(const SG_Char **Filename,
+								int iImages,
+								int iThumbnailsPerRow)
+{
+
+	int i,j;
+	int iImage	= 0;
+	int iRows	= (int)ceil((double)iImages / (double)iThumbnailsPerRow);
+	int iWidth	= (int)(100.0 / (double)iThumbnailsPerRow);
+
+    m_sHTMLCode.Append(SG_T("<table width=\"99%\" style=\"background-color:transparent;\" border=0 cellspacing=0 cellpadding=2 >\n"));
+	for (i=0; i<iRows; i++)
+	{
+		m_sHTMLCode.Append(SG_T("<tr>\n"));
+
+		for (j=0; j<iThumbnailsPerRow; j++){
+			m_sHTMLCode.Append(SG_T("<td width=\""));
+			m_sHTMLCode.Append(SG_Get_String(iWidth));
+			m_sHTMLCode.Append(SG_T("%\" align=\"center\">"));
+			AddThumbnail(Filename[iImage], 100, true);
+			iImage++;
+			if (iImage >= iImages){
+				break;
+			}
+			m_sHTMLCode.Append(SG_T("</td>"));
+		}
+		m_sHTMLCode.Append(SG_T("\n</tr>\n"));
+	}
+
+	m_sHTMLCode.Append(SG_T("\n</table>\n"));
+
+}
+
+void CSG_Doc_HTML::StartUnorderedList()
+{
+
+	m_sHTMLCode.Append(SG_T("<ul>\n"));
+
+}
+
+void CSG_Doc_HTML::StartOrderedList()
+{
+
+	m_sHTMLCode.Append(SG_T("<ol>\n"));
+
+}
+
+void CSG_Doc_HTML::CloseUnorderedList()
+{
+
+	m_sHTMLCode.Append(SG_T("</ul>\n"));
+
+}
+
+void CSG_Doc_HTML::CloseOrderedList()
+{
+
+	m_sHTMLCode.Append(SG_T("</ol>\n"));
+
+}
+
+void CSG_Doc_HTML::AddListElement(const SG_Char *Text)
+{
+
+	m_sHTMLCode.Append(SG_T("<li>"));
+	m_sHTMLCode.Append(Text);
+	m_sHTMLCode.Append(SG_T("</li>\n"));
+
+}
+
+void CSG_Doc_HTML::AddOrderedList(const SG_Char **Text, int iElements)
+{
+
+	StartOrderedList();
+	for (int i = 0; i < iElements; i++)
+	{
+		AddListElement(Text[i]);
+	}
+	CloseOrderedList();
+
+}
+
+void CSG_Doc_HTML::AddUnorderedList(const SG_Char **Text, int iElements)
+{
+
+	StartUnorderedList();
+	for (int i = 0; i < iElements; i++)
+	{
+		AddListElement(Text[i]);
+	}
+	CloseUnorderedList();
+
+}
+
+void CSG_Doc_HTML::AddCurve(const SG_Char *Filename,
+								CSG_Points &Data,
+								const SG_Char *Description,
+								int iGraphType,
+								bool bIncludeTableData)
+{
+
+	int i;
+    int iMag;
+	int iNumLines;
+    double fMinLine = 0;
+	double fWidth;
+	double fMax, fMin;
+	double fRange, fRangeX;
+	double fStep;
+    double fX, fY, fY2;
+	double fMaxX, fMinX;
+	CSG_String sValue;
+	CSG_String sTableFilename;
+	CSG_Points Points;
+	CSG_Doc_SVG SVG;
+
+	m_sHTMLCode.Append(SG_T("<object type=\"image/svg+xml\" width=\""));
+	m_sHTMLCode.Append(SG_Get_String(GRAPH_WIDTH + OFFSET_X, 0));
+	m_sHTMLCode.Append(SG_T("\" height=\""));
+	m_sHTMLCode.Append(SG_Get_String(GRAPH_HEIGHT + OFFSET_Y, 0));
+	m_sHTMLCode.Append(SG_T("\" data=\"file://"));
+	m_sHTMLCode.Append(Filename);
+	m_sHTMLCode.Append(SG_T("\"></object><br>\n"));
+
+	m_sHTMLCode.Append(SG_T("<p align=\"center\"><i>"));
+	m_sHTMLCode.Append(Description);
+	m_sHTMLCode.Append(SG_T("</i></p>\n"));
+
+	fMin = fMax = Data[0].y;
+
+	for (i = 0; i < Data.Get_Count(); i++)
+	{
+		if (Data[i].y > fMax)
+		{
+			fMax = Data[i].y;
+		}
+		if (Data[i].y < fMin)
+		{
+			fMin = Data[i].y;
+		}
+		if (iGraphType == HTML_GRAPH_TYPE_BARS){
+			fMin = M_GET_MIN(0, fMin);
+		}
+    }
+
+	fRange = fMax - fMin;
+
+	fMaxX = Data[Data.Get_Count() - 1].x;
+    fMinX = Data[0].x;
+
+	fRangeX = fMaxX - fMinX;
+
+	SVG.Open(GRAPH_WIDTH + OFFSET_X, GRAPH_HEIGHT + OFFSET_Y);
+
+	if (fMin != fMax){
+		iMag	= (int) (log(fMax - fMin) / log(10.0));
+		fStep	= (int) pow(10.0, (double) iMag);
+		if (fStep == 0)
+		{
+			fStep = 1.;
+		}
+		if (fMin < 0)
+		{
+			iMag = (int) (log(fabs(fMin)) / log(10.0));
+			fMinLine = -(int) pow(10.0, (double) iMag);
+		}
+		else
+		{
+			fMinLine=(int)(((int)(fMin/fStep)) *fStep);
+		}
+
+		iNumLines = (int) ((fMax - fMin) / fStep);
+
+		while (iNumLines < 8)
+		{
+			fStep = fStep / 2.0;
+			iNumLines = (int) ((fMax - fMin) / fStep);
+		}
+		iNumLines = (int) ((fMax - fMinLine) / fStep);
+	}
+	else{
+		if (fMin > 0)
+		{
+			fStep = fMin = 0;
+			iNumLines = 1;
+			fMinLine = fMax;
+		}
+		else if (fMin < 0)
+		{
+			fStep = 0;
+			fMin = fMin - 1;
+			fMinLine = fMax;
+		}
+		else
+		{
+			return;
+		}
+	}
+
+	for (i = 0; i < iNumLines; i++)
+	{
+        fY = (fMinLine + fStep * i - fMin) / (fRange) * GRAPH_HEIGHT;
+		fY = GRAPH_HEIGHT - fY;
+        if (fY >= 0 && fY <= GRAPH_HEIGHT)
+		{
+			SVG.Draw_Line(OFFSET_X - 10, fY, GRAPH_WIDTH + OFFSET_X, fY);
+			SVG.Draw_Text(OFFSET_X - 10, fY, SG_Get_String(fMinLine + fStep * i, 1), 0, SG_T("Verdana"), 8, SVG_ALIGNMENT_Right);
+        }
+    }
+
+	if (iGraphType == HTML_GRAPH_TYPE_BARS)
+	{
+		fWidth = GRAPH_WIDTH / (double) (Data.Get_Count()) ;
+	    for (i = 0; i < Data.Get_Count(); i++)
+		{
+	        fX = OFFSET_X + i * fWidth;
+			fY = GRAPH_HEIGHT;
+			fY2 = (Data.Get_Y(i) - fMin) / fRange * GRAPH_HEIGHT;
+			fY2 = GRAPH_HEIGHT - fY2;
+			SVG.Draw_Rectangle(fX, fY, fX + fWidth, fY2, 0x660000, 0x000000);
+	    }
+	}
+	else
+	{
+		for (i = 0; i < Data.Get_Count(); i++)
+		{
+			fX = OFFSET_X + (Data.Get_X(i) - fMinX) / fRangeX * GRAPH_WIDTH;
+			fY = (Data.Get_Y(i) - fMin) / fRange * GRAPH_HEIGHT;
+			fY = GRAPH_HEIGHT - fY;
+			Points.Add(fX, fY);
+	    }
+		SVG.Draw_Line(Points, 4, 0x660000);
+	}
+
+	if (fMaxX != fMinX)
+	{
+		iMag = (int) (log(fMaxX - fMinX) / log(10.0));
+		fStep = (double) pow(10.0, (double) iMag);
+
+		iNumLines = (int) ((fMaxX -fMinX) / fStep);
+
+		while (iNumLines < 5)
+		{
+			fStep = fStep / 2.0;
+			iNumLines = (int) ((fMaxX-fMinX) / fStep);
+		}
+		fMinLine = (int)(((int)(fMinX/fStep)) * fStep);
+		while (fMinLine <fMinX)
+		{
+			fMinLine+=fStep;
+		}
+
+		for (i = 0; i < iNumLines + 1; i++)
+		{
+			if (iGraphType == HTML_GRAPH_TYPE_BARS)
+			{
+				fX = OFFSET_X + (fMinLine + fStep * i - fMinX) / fRangeX * (GRAPH_WIDTH - fWidth);
+			}
+			else
+			{
+				fX = OFFSET_X + (fMinLine + fStep * i - fMinX) / fRangeX * GRAPH_WIDTH;
+			}
+			if (fX >= OFFSET_X && fX <= GRAPH_WIDTH + OFFSET_X){
+				if (fabs(fStep * i +fMinLine) > 100000)
+				{
+					sValue = SG_Get_String(fStep * i +fMinLine);
+				}
+				else
+				{
+					sValue = SG_Get_String(fStep * i + fMinLine, 2, true);
+				}
+				SVG.Draw_Text(fX, GRAPH_HEIGHT + 10, sValue, 0, SG_T("Verdana"), 8, SVG_ALIGNMENT_Center);
+				SVG.Draw_Line(fX, GRAPH_HEIGHT, fX, GRAPH_HEIGHT - 5);
+			}
+		}
+    }
+
+	SVG.Draw_Line(OFFSET_X, 0, OFFSET_X, GRAPH_HEIGHT, 4);
+	SVG.Draw_Line(OFFSET_X, GRAPH_HEIGHT, OFFSET_X + GRAPH_WIDTH, GRAPH_HEIGHT, 4);
+
+	SVG.Save(Filename);
+
+	if (bIncludeTableData)
+	{
+		CSG_Doc_HTML HTMLDoc;
+		HTMLDoc.Open(LNG("Data Table"));
+
+		sTableFilename = Filename;
+		sTableFilename.Append(SG_T(".htm"));
+
+		m_sHTMLCode.Append(SG_T("<a href=\"file://"));
+		m_sHTMLCode.Append(sTableFilename);
+		m_sHTMLCode.Append(SG_T("\">"));
+		m_sHTMLCode.Append(LNG("Data Table"));
+		m_sHTMLCode.Append(SG_T("</a><br><br>\n"));
+
+		HTMLDoc._AddBicolumTable(&Data);
+		HTMLDoc.Save(sTableFilename);
+
+	}
+
+
+}//method
+
+void CSG_Doc_HTML::_AddBicolumTable(CSG_Points *pData)
+{
+
+	int i;
+
+    m_sHTMLCode.Append(SG_T("<table width=\"99%\" style=\"background-color:transparent;\" border=0 cellspacing=0 cellpadding=2 >\n"));
+	m_sHTMLCode.Append(
+		SG_T("<tr bgcolor=\"#CCCCCC\">\n")
+		SG_T("<td width=\"50%\" align=\"center\">X</td><td width=\"50%\" align=\"center\">Y</td>\n")
+		SG_T("</tr>\n")
+	);
+
+	for (i=0; i<pData->Get_Count(); i++)
+	{
+		m_sHTMLCode.Append(SG_T("<tr>\n"));
+		m_sHTMLCode.Append(SG_T("<td width=\"50%\" align=\"center\">"));
+		m_sHTMLCode.Append(SG_Get_String(pData->Get_X(i),2));
+		m_sHTMLCode.Append(SG_T("</td>"));
+		m_sHTMLCode.Append(SG_T("<td width=\"50%\" align=\"center\">"));
+		m_sHTMLCode.Append(SG_Get_String(pData->Get_Y(i),2));
+		m_sHTMLCode.Append(SG_T("</td>"));
+		m_sHTMLCode.Append(SG_T("\n</tr>\n"));
+	}
+
+	m_sHTMLCode.Append(SG_T("\n</table>\n"));
+	m_sHTMLCode.Append(SG_T("<p align=\"center\"><i>"));
+	m_sHTMLCode.Append(LNG("Data Table"));
+	m_sHTMLCode.Append(SG_T("</i></p>\n"));
+
+}
+
+void CSG_Doc_HTML::AddTable(const SG_Char ***Table,
+								int iRows,
+								int iCols,
+								const SG_Char *Description)
+{
+
+	int i,j;
+	int iWidth = (int) (100/iCols);
+
+    m_sHTMLCode.Append(SG_T("<table width=\"99%\" style=\"background-color:transparent;\" border=0 cellspacing=0 cellpadding=2 >\n"));
+	for (i=0; i<iRows; i++)
+	{
+		if (i==0)
+		{
+			m_sHTMLCode.Append(SG_T("<tr bgcolor=\"#CCCCCC\">\n"));
+		}
+		else
+		{
+			m_sHTMLCode.Append(SG_T("<tr>\n"));
+		}
+		for (j=0; j<iCols; j++){
+			m_sHTMLCode.Append(SG_T("<td width=\""));
+			m_sHTMLCode.Append(SG_Get_String(iWidth,0));
+			m_sHTMLCode.Append(SG_T("%\" align=\"center\">"));
+			try
+			{
+				m_sHTMLCode.Append(Table[i][j]);
+			}
+			catch(...){}
+			m_sHTMLCode.Append(SG_T("</td>"));
+		}
+		m_sHTMLCode.Append(SG_T("\n</tr>\n"));
+	}
+
+	m_sHTMLCode.Append(SG_T("\n</table>\n"));
+	m_sHTMLCode.Append(SG_T("<p align=\"center\"><i>"));
+	m_sHTMLCode.Append(Description);
+	m_sHTMLCode.Append(SG_T("</i></p>\n"));
+
+}
+
+void CSG_Doc_HTML::AddTable(CSG_Table *pTable)
+{
+
+	int i,j;
+	int iWidth = (int) (100/pTable->Get_Field_Count());
+
+    m_sHTMLCode.Append(SG_T("<table width=\"99%\" style=\"background-color:transparent;\" border=0 cellspacing=0 cellpadding=2 >\n"));
+
+	m_sHTMLCode.Append(SG_T("<tr bgcolor=\"#CCCCCC\">\n"));
+	for (i=0; i<pTable->Get_Field_Count(); i++){
+		m_sHTMLCode.Append(SG_T("<td width=\""));
+		m_sHTMLCode.Append(SG_Get_String(iWidth,0));
+		m_sHTMLCode.Append(SG_T("%\" align=\"center\">"));
+		m_sHTMLCode.Append(pTable->Get_Field_Name(i));
+		m_sHTMLCode.Append(SG_T("</td>"));
+	}
+	m_sHTMLCode.Append(SG_T("\n</tr>\n"));
+
+	for (i=0; i<pTable->Get_Record_Count(); i++)
+	{
+		m_sHTMLCode.Append(SG_T("<tr>\n"));
+		for (j=0; j<pTable->Get_Field_Count(); j++){
+			m_sHTMLCode.Append(SG_T("<td width=\""));
+			m_sHTMLCode.Append(SG_Get_String(iWidth,0));
+			m_sHTMLCode.Append(SG_T("%\" align=\"center\">"));
+			try
+			{
+				m_sHTMLCode.Append(pTable->Get_Record(i)->asString(j));
+			}
+			catch(...){}
+			m_sHTMLCode.Append(SG_T("</td>"));
+		}
+		m_sHTMLCode.Append(SG_T("\n</tr>\n"));
+	}
+
+	m_sHTMLCode.Append(SG_T("\n</table>\n"));
+	m_sHTMLCode.Append(SG_T("<p align=\"center\"><i>"));
+	m_sHTMLCode.Append(pTable->Get_Name());
+	m_sHTMLCode.Append(SG_T("</i></p>\n"));
+
+}
+
+bool CSG_Doc_HTML::_Draw_Shape(CSG_Doc_SVG &SVG, CSG_Shape *pShape, CSG_Rect GlobalRect, int Fill_Color, int Line_Color, int Line_Width, int Point_Width)
+{
+	if( pShape && pShape->is_Valid() )
+	{
+		int			iPart, iPoint;
+		double		x,y;
+		TSG_Point	Point;
+		CSG_Points	Points;
+		double		dWidth, dHeight;
+		double		dOffsetX, dOffsetY;
+
+		if (GlobalRect.Get_XRange() / GlobalRect.Get_YRange() > MAP_WIDTH / MAP_HEIGHT)
+		{
+			dWidth	= MAP_WIDTH * .95;
+			dHeight	= MAP_HEIGHT / GlobalRect.Get_XRange() * GlobalRect.Get_YRange();
+		}
+		else{
+			dHeight	= MAP_HEIGHT * .95;
+			dWidth	= MAP_WIDTH / GlobalRect.Get_YRange() * GlobalRect.Get_XRange();
+		}
+
+		dOffsetX = (MAP_WIDTH  - dWidth)  / 2.;
+		dOffsetY = (MAP_HEIGHT - dHeight) / 2.;
+
+		SVG.Draw_Rectangle(0,0,MAP_WIDTH,MAP_HEIGHT,SG_COLOR_NONE,SG_COLOR_BLACK,1);
+
+		for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
+		{
+			Points.Clear();
+
+			for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
+			{
+				Point = pShape->Get_Point(iPoint, iPart);
+				x = dOffsetX + (Point.x - GlobalRect.Get_XMin()) / GlobalRect.Get_XRange() * dWidth;
+				y = (Point.y - GlobalRect.Get_YMin()) / GlobalRect.Get_YRange() * dHeight;
+				y = MAP_HEIGHT - y - dOffsetY;
+				Points.Add(x, y);
+			}
+
+			switch( pShape->Get_Type() )
+			{
+			case SHAPE_TYPE_Point:
+			case SHAPE_TYPE_Points:
+				for(iPoint=0; iPoint<Points.Get_Count(); iPoint++)
+				{
+					SVG.Draw_Circle(Points[iPoint].x, Points[iPoint].y, Point_Width, Fill_Color, Line_Color, Line_Width);
+				}
+				break;
+
+			case SHAPE_TYPE_Line:
+				SVG.Draw_Line(Points, Line_Width, Line_Color);
+				break;
+
+			case SHAPE_TYPE_Polygon:
+				if( ((CSG_Shape_Polygon *)pShape)->is_Lake(iPart) )
+				{
+					SVG.Draw_Polygon(Points, SG_COLOR_WHITE, Line_Color, Line_Width);
+				}
+				else
+				{
+					SVG.Draw_Polygon(Points, Fill_Color, Line_Color, Line_Width);
+				}
+				break;
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+bool CSG_Doc_HTML::Draw_Shapes(CSG_Shapes *pShapes, const SG_Char *Filename, int Fill_Color, int Line_Color, int Line_Width)
+{
+
+	CSG_Doc_SVG	SVG;
+	CSG_Rect	r;
+
+	if( pShapes && pShapes->is_Valid())
+	{
+		r = pShapes->Get_Extent();
+		SVG.Open((int)MAP_WIDTH, (int)MAP_HEIGHT);
+
+		for(int iShape=0; iShape<pShapes->Get_Count(); iShape++)
+		{
+			_Draw_Shape(SVG, pShapes->Get_Shape(iShape), r, Fill_Color, Line_Color, 1, 3);
+		}
+
+		SVG.Save(Filename);
+
+		m_sHTMLCode.Append(SG_T("<center>\n<object type=\"image/svg+xml\" width=\""));
+		m_sHTMLCode.Append(SG_Get_String(MAP_WIDTH, 0));
+		m_sHTMLCode.Append(SG_T("\" height=\""));
+		m_sHTMLCode.Append(SG_Get_String(MAP_HEIGHT, 0));
+		m_sHTMLCode.Append(SG_T("\" data=\"file://"));
+		m_sHTMLCode.Append(Filename);
+		m_sHTMLCode.Append(SG_T("\"></object></center><br>\n"));
+
+		return( true );
+
+	}
+
+	return( false );
+}
diff --git a/src/modules_io/docs/docs_html/doc_html.h b/src/modules_io/docs/docs_html/doc_html.h
new file mode 100644
index 0000000..f04a173
--- /dev/null
+++ b/src/modules_io/docs/docs_html/doc_html.h
@@ -0,0 +1,161 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_html                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                      doc_html.h                       //
+//                                                       //
+//                 Copyright (C) 2005 by                 //
+//                      Victor Olaya                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__docs_html__doc_html_H
+#define HEADER_INCLUDED__docs_html__doc_html_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "doc_svg.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define HTML_GRAPH_TYPE_BARS					1
+#define HTML_GRAPH_TYPE_LINES					2
+
+#define HTML_COLOR_RANDOM						-2
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class docs_html_EXPORT CSG_Doc_HTML
+{
+public:
+	CSG_Doc_HTML(void);
+	virtual ~CSG_Doc_HTML(void);
+
+	void						Open						(const SG_Char *Title);
+	bool						Save						(const SG_Char *FileName);
+
+	void						AddCurve					(const SG_Char *Filename,
+															CSG_Points &Points,
+															const SG_Char *Description,
+															int iGraphType,
+															bool bIncludeTableData);
+	void						AddTable					(const SG_Char ***Table,
+															int iRows,
+															int iCols,
+															const SG_Char *Description);
+	void						AddTable					(CSG_Table *pTable);
+	void						AddParagraph				(const SG_Char *Text);
+	void						AddLineBreak				();
+	void						AddHeader					(const SG_Char *Text, int iOrder);
+	void						AddHyperlink				(const SG_Char *Text, const SG_Char *URL);
+	CSG_String					GetHyperlinkCode			(const SG_Char *Text, const SG_Char *URL);
+
+	void						AddImage					(const SG_Char *Filename);
+	void						AddThumbnail				(const SG_Char *Filename,
+															int iWidth,
+															bool bIsPercent);
+	void						AddThumbnails				(const SG_Char **Text,
+															int iImages,
+															int iThumbnailsPerRow);
+	void						StartUnorderedList			(void);
+	void						StartOrderedList			(void);
+	void						CloseUnorderedList			(void);
+	void						CloseOrderedList			(void);
+	void						AddListElement				(const SG_Char *Text);
+	void						AddOrderedList				(const SG_Char **Text,
+															int iElement);
+	void						AddUnorderedList			(const SG_Char **Text,
+															int iElement);
+
+	bool						Draw_Shapes					(CSG_Shapes *pShapes,
+															const SG_Char *Filename,
+															int Fill_Color, 
+															int Line_Color, 
+															int Line_Width);
+
+private:
+
+	CSG_String					m_sHTMLCode;
+
+	bool						_Draw_Shape					(CSG_Doc_SVG &SVG,
+															CSG_Shape *pShape,
+															CSG_Rect GlobalRect,
+															int Fill_Color, 
+															int Line_Color, 
+															int Line_Width, 
+															int Point_Width);
+
+	void						_AddBicolumTable			(CSG_Points *pData);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__docs_html__doc_html_H
diff --git a/src/modules_io/docs/docs_html/doc_svg.cpp b/src/modules_io/docs/docs_html/doc_svg.cpp
new file mode 100644
index 0000000..bb3ed7d
--- /dev/null
+++ b/src/modules_io/docs/docs_html/doc_svg.cpp
@@ -0,0 +1,399 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_html                       //
+//                                                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     doc_svg.cpp                       //
+//                                                       //
+//                 Copyright (C) 2005 by                 //
+//                      Victor Olaya                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "doc_svg.h"
+#include <time.h>
+
+//---------------------------------------------------------
+#define SVG_CODE_OPENING_1	SG_T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n")\
+							SG_T("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" ")\
+							SG_T("\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n")\
+							SG_T("<svg version=\"1.1\" width=\"")
+
+#define SVG_CODE_OPENING_2	SG_T("\"\n xmlns=\"http://www.w3.org/2000/svg\">\n")
+
+#define SVG_CODE_CLOSING	SG_T("</svg>")
+
+//---------------------------------------------------------
+const SG_Char *g_Unit	= SG_T("");
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Doc_SVG::CSG_Doc_SVG(){}
+
+CSG_Doc_SVG::~CSG_Doc_SVG(){}
+
+void CSG_Doc_SVG::Open(int iWidth, int iHeight)
+{
+
+	m_sSVGCode.Append(SVG_CODE_OPENING_1);
+	m_sSVGCode.Append(SG_Get_String(iWidth,0));
+	m_sSVGCode.Append(SG_T("\" height=\""));
+	m_sSVGCode.Append(SG_Get_String(iHeight,0));
+	m_sSVGCode.Append(SVG_CODE_OPENING_2);
+
+	m_iWidth = iWidth;
+	m_iHeight = iHeight;
+
+}
+
+bool CSG_Doc_SVG::Save(const SG_Char *Filename)
+{
+
+	m_sSVGCode.Append(SVG_CODE_CLOSING);
+
+	CSG_File	Stream(Filename, SG_FILE_W, false);
+
+	if( Stream.is_Open() )
+	{
+		Stream.Printf(SG_T("%s"), m_sSVGCode.c_str());
+		return true;
+	}
+	
+	return false;
+
+}
+
+void CSG_Doc_SVG::_AddAttribute(const SG_Char *Attribute, 
+							   const SG_Char *Value)
+{
+
+		m_sSVGCode.Append(Attribute);
+		m_sSVGCode.Append(SG_T("=\""));
+		m_sSVGCode.Append(Value);
+		m_sSVGCode.Append(SG_T("\" "));		
+
+}
+
+void CSG_Doc_SVG::_AddAttribute(const SG_Char *Attribute, 
+							   int iValue)
+{
+
+	_AddAttribute(Attribute, SG_Get_String(iValue, 0));
+}
+
+void CSG_Doc_SVG::_AddAttribute(const SG_Char *Attribute, 
+							   double dValue)
+{
+
+	_AddAttribute(Attribute, SG_Get_String(dValue, 2));
+
+}
+
+void CSG_Doc_SVG::Draw_Circle(double x, 
+							 double y, 
+							 double Radius, 
+							 int Fill_Color, 
+							 int Line_Color, 
+							 double Line_Width)
+{
+	
+	CSG_String sWidth;
+
+	m_sSVGCode.Append(SG_T("<circle "));
+	_AddAttribute(SG_T("cx"), x);
+	_AddAttribute(SG_T("cy"), y);
+	_AddAttribute(SG_T("r"), Radius);
+	sWidth.Append(SG_Get_String(Line_Width,2));
+	sWidth.Append(g_Unit);
+	_AddAttribute(SG_T("stroke-width"), sWidth);
+	_AddAttribute(SG_T("stroke"), _Get_SVGColor(Line_Color));
+	_AddAttribute(SG_T("fill"), _Get_SVGColor(Fill_Color));
+	m_sSVGCode.Append(SG_T("/>\n"));
+
+}
+
+void CSG_Doc_SVG::Draw_LinkedCircle(double x, 
+								 double y, 
+								 double Radius, 
+								 const SG_Char *Link,
+								 int Fill_Color, 
+								 int Line_Color, 
+								 double Line_Width)
+{
+	
+	CSG_String sWidth;
+	CSG_String sLink;
+
+	m_sSVGCode.Append(SG_T("<circle "));
+	_AddAttribute(SG_T("cx"), x);
+	_AddAttribute(SG_T("cy"), y);
+	_AddAttribute(SG_T("r"), Radius);
+	sWidth.Append(SG_Get_String(Line_Width,2));
+	sWidth.Append(g_Unit);
+	_AddAttribute(SG_T("stroke-width"), sWidth);
+	_AddAttribute(SG_T("stroke"), _Get_SVGColor(Line_Color));
+	_AddAttribute(SG_T("fill"), _Get_SVGColor(Fill_Color));
+	sLink = SG_T("window.open('");
+	sLink.Append(Link);
+	sLink.Append(SG_T("')"));
+	_AddAttribute(SG_T("onclick"), sLink);
+	m_sSVGCode.Append(SG_T("/>\n"));
+
+}
+
+void CSG_Doc_SVG::Draw_Line(double xa, 
+						   double ya, 
+						   double xb, 
+						   double yb, 
+						   double Width, 
+						   int Color)
+{
+
+	CSG_String sWidth;
+
+	m_sSVGCode.Append(SG_T("<line "));
+	_AddAttribute(SG_T("x1"), xa);
+	_AddAttribute(SG_T("x2"), xb);
+	_AddAttribute(SG_T("y1"), ya);
+	_AddAttribute(SG_T("y2"), yb);
+	sWidth.Append(SG_Get_String(Width,2));
+	sWidth.Append(g_Unit);
+	_AddAttribute(SG_T("stroke-width"), sWidth);	_AddAttribute(SG_T("stroke"), _Get_SVGColor(Color));
+	m_sSVGCode.Append(SG_T("/>\n"));
+
+}
+
+void CSG_Doc_SVG::Draw_Line(CSG_Points &Points, 
+						   double Width, 
+						   int Color)
+{
+	int i;
+	CSG_String sPoints;
+	CSG_String sWidth;
+	
+	for (i = 0; i < Points.Get_Count(); i++)
+	{
+		sPoints.Append(SG_Get_String(Points.Get_X(i),2));
+		sPoints.Append(SG_T(","));
+		sPoints.Append(SG_Get_String(Points.Get_Y(i),2));
+		sPoints.Append(SG_T(" "));
+	}
+	m_sSVGCode.Append(SG_T("<polyline "));
+	_AddAttribute(SG_T("points"), sPoints);	
+	sWidth.Append(SG_Get_String(Width,2));
+	sWidth.Append(g_Unit);
+	_AddAttribute(SG_T("stroke-width"), sWidth);
+	_AddAttribute(SG_T("stroke"), _Get_SVGColor(Color));
+	_AddAttribute(SG_T("fill"), SG_T("none"));
+	m_sSVGCode.Append(SG_T("/>\n"));
+
+}
+
+void CSG_Doc_SVG::Draw_Rectangle(double xa, 
+								double ya, 
+								double xb, 
+								double yb, 
+								int Fill_Color, 
+								int Line_Color, 
+								double Line_Width)
+{
+	CSG_Points	Points;
+
+	Points.Add(xa, ya);
+	Points.Add(xb, ya);
+	Points.Add(xb, yb);
+	Points.Add(xa, yb);
+
+	Draw_Polygon(Points, Fill_Color, Line_Color, Line_Width);
+}
+
+void CSG_Doc_SVG::Draw_Rectangle(const CSG_Rect &r, 
+								int Fill_Color, 
+								int Line_Color, 
+								double Line_Width)
+{
+	Draw_Rectangle(r.Get_XMin(), r.Get_YMin(), r.Get_XMax(), r.Get_YMax(), Fill_Color, Line_Color, Line_Width) ;
+}
+
+void CSG_Doc_SVG::Draw_Polygon(CSG_Points &Points, 
+							  int Fill_Color, 
+							  int Line_Color, 
+							  double Line_Width)
+{
+	if( Points.Get_Count() > 2 )
+	{
+		int i;
+		CSG_String sPoints;
+		CSG_String sWidth;
+		
+		for (i = 0; i < Points.Get_Count(); i++)
+		{
+			sPoints.Append(SG_Get_String(Points.Get_X(i),2));
+			sPoints.Append(SG_T(","));
+			sPoints.Append(SG_Get_String(Points.Get_Y(i),2));
+			sPoints.Append(SG_T(" "));
+		}
+		m_sSVGCode.Append(SG_T("<polygon "));
+		_AddAttribute(SG_T("points"), sPoints);
+		sWidth.Append(SG_Get_String(Line_Width,2));
+		sWidth.Append(g_Unit);
+		_AddAttribute(SG_T("stroke-width"), sWidth);				
+		_AddAttribute(SG_T("stroke"), _Get_SVGColor(Line_Color));
+		_AddAttribute(SG_T("fill"), _Get_SVGColor(Fill_Color));
+		m_sSVGCode.Append(SG_T("/>\n"));
+	}
+}
+
+void CSG_Doc_SVG::Draw_LinkedPolygon(CSG_Points &Points, 
+							  const SG_Char* Link,
+							  int Fill_Color, 
+							  int Line_Color, 
+							  double Line_Width)
+{
+	if( Points.Get_Count() > 2 )
+	{
+		int i;
+		CSG_String sPoints;
+		CSG_String sWidth;
+		CSG_String sLink;
+		
+		for (i = 0; i < Points.Get_Count(); i++)
+		{
+			sPoints.Append(SG_Get_String(Points.Get_X(i),2));
+			sPoints.Append(SG_T(","));
+			sPoints.Append(SG_Get_String(Points.Get_Y(i),2));
+			sPoints.Append(SG_T(" "));
+		}
+		m_sSVGCode.Append(SG_T("<polygon "));
+		_AddAttribute(SG_T("points"), sPoints);
+		sWidth.Append(SG_Get_String(Line_Width,2));
+		sWidth.Append(g_Unit);
+		_AddAttribute(SG_T("stroke-width"), sWidth);				
+		_AddAttribute(SG_T("stroke"), _Get_SVGColor(Line_Color));
+		_AddAttribute(SG_T("fill"), _Get_SVGColor(Fill_Color));
+		sLink = SG_T("window.open('");
+		sLink.Append(Link);
+		sLink.Append(SG_T("')"));
+		_AddAttribute(SG_T("onclick"), sLink);
+		m_sSVGCode.Append(SG_T("/>\n"));
+	}
+}
+
+void CSG_Doc_SVG::Draw_Text(double x, 
+						 double y, 
+						 const SG_Char *Text, 
+						 int Color, 
+						 const SG_Char* Font, 
+						 double dSize,
+						 TSG_SVG_Alignment iAlignment)
+{
+
+	CSG_String sAlignments[] = {SG_T(""), SG_T("middle"), SG_T("end")};
+	CSG_String sSize;
+	
+	sSize.Append(SG_Get_String(dSize,2));
+	sSize.Append(g_Unit);
+	
+	m_sSVGCode.Append(SG_T("<text "));
+	_AddAttribute(SG_T("x"), x);	
+	_AddAttribute(SG_T("y"), y);
+	_AddAttribute(SG_T("font-family"), Font);
+	_AddAttribute(SG_T("fill"), _Get_SVGColor(Color));
+	_AddAttribute(SG_T("font-size"), sSize);
+	_AddAttribute(SG_T("text-anchor"), sAlignments[iAlignment]);
+	m_sSVGCode.Append(SG_T(">\n"));
+	m_sSVGCode.Append(Text);
+	m_sSVGCode.Append(SG_T("</text>"));
+
+}
+
+CSG_String CSG_Doc_SVG::_Get_SVGColor(int iColor)
+{
+
+	CSG_String s;
+
+	if (iColor == SG_COLOR_NONE)
+	{
+		return SG_T("none");
+	}
+	else if (iColor == SG_COLOR_RANDOM)
+	{
+		s.Append(SG_T("rgb("));
+		s.Append(SG_Get_String((int)(255.0 * (double)rand() / (double)RAND_MAX),0));
+		s.Append(SG_T(","));
+		s.Append(SG_Get_String((int)(255.0 * (double)rand() / (double)RAND_MAX),0));
+		s.Append(SG_T(","));
+		s.Append(SG_Get_String((int)(255.0 * (double)rand() / (double)RAND_MAX),0));
+		s.Append(SG_T(")"));
+
+		return s;
+	}
+	else
+	{
+		s.Append(SG_T("rgb("));
+		s.Append(SG_Get_String(SG_GET_R(iColor),0));
+		s.Append(SG_T(","));
+		s.Append(SG_Get_String(SG_GET_G(iColor),0));
+		s.Append(SG_T(","));
+		s.Append(SG_Get_String(SG_GET_B(iColor),0));
+		s.Append(SG_T(")"));
+
+		return s;
+	}
+
+}
diff --git a/src/modules_io/docs/docs_html/doc_svg.h b/src/modules_io/docs/docs_html/doc_svg.h
new file mode 100644
index 0000000..2519985
--- /dev/null
+++ b/src/modules_io/docs/docs_html/doc_svg.h
@@ -0,0 +1,132 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_html                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                      doc_svg.h                        //
+//                                                       //
+//                 Copyright (C) 2005 by                 //
+//                     Victor Olaya                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__docs_html__doc_svg_H
+#define HEADER_INCLUDED__docs_html__doc_svg_H
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+typedef enum ESG_SVG_Alignment
+{
+	SVG_ALIGNMENT_Left	= 0,
+	SVG_ALIGNMENT_Center,
+	SVG_ALIGNMENT_Right
+}
+TSG_SVG_Alignment;
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class docs_html_EXPORT CSG_Doc_SVG
+{
+public:
+	CSG_Doc_SVG(void);
+	virtual ~CSG_Doc_SVG(void);
+
+	void						Open						(int iWidth, int iHeight);
+	bool						Save						(const SG_Char *FileName);
+
+	void						Draw_Line					(double xa, double ya, double xb, double yb	, double Width = 1., int Color = SG_COLOR_BLACK);
+	void						Draw_Line					(CSG_Points &Points							, double Width = 1., int Color = SG_COLOR_BLACK);
+	void						Draw_Rectangle				(double xa, double ya, double xb, double yb	, int Fill_Color = SG_COLOR_WHITE, int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
+	void						Draw_Rectangle				(const CSG_Rect &r							, int Fill_Color = SG_COLOR_WHITE, int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
+	void						Draw_Polygon				(CSG_Points &Points							, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
+	void						Draw_LinkedPolygon			(CSG_Points &Points, const SG_Char *Link	, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
+	void						Draw_Circle					(double x, double y, double Radius			, int Fill_Color = SG_COLOR_RED  , int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
+	void						Draw_LinkedCircle			(double x, double y, double Radius, const SG_Char *Link, int Fill_Color = SG_COLOR_RED  , int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
+
+	void						Draw_Text					(double x, double y,  const SG_Char *Text, int iColor, const SG_Char* Font, double dSize, TSG_SVG_Alignment Alignment = SVG_ALIGNMENT_Center);
+
+protected:
+
+	CSG_String					m_sSVGCode;
+	void						_AddAttribute				(const SG_Char *Attribute, const SG_Char *Value);
+	void						_AddAttribute				(const SG_Char *Attribute, int Value);
+	void						_AddAttribute				(const SG_Char *Attribute, double Value);
+	CSG_String					_Get_SVGColor				(int iColor);
+
+private:
+	
+	int							m_iWidth, m_iHeight;
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif //#ifndef HEADER_INCLUDED__docs_html__doc_svg_H
diff --git a/src/modules_io/docs/docs_html/svg_interactive_map.cpp b/src/modules_io/docs/docs_html/svg_interactive_map.cpp
new file mode 100644
index 0000000..51ad24a
--- /dev/null
+++ b/src/modules_io/docs/docs_html/svg_interactive_map.cpp
@@ -0,0 +1,2894 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_html                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//              SVG_Interactive_map.cpp                  //
+//                                                       //
+//          Copyright (C) 2005 by Victor Olaya           //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "svg_interactive_map.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define MAP_WINDOW_WIDTH	550.
+#define MAP_WINDOW_HEIGHT	700.
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSVG_Interactive_Map::CSVG_Interactive_Map(void)
+{
+	Set_Name		(_TL("SVG Interactive Map"));
+
+	Set_Author		(SG_T("V.Olaya"));
+
+	Set_Description	(_TW(
+		""
+	));
+
+	Parameters.Add_FilePath(
+		NULL	, "FILENAME"	, _TL("[FLD] SVG File"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|*.svg|%s|*.*"),
+			_TL("SVG - Scalable Vector Graphics Files (*.svg)"),
+			_TL("All Files")
+		), NULL, true, false
+	);
+
+	Parameters.Add_Shapes_List(
+		NULL	, "LIST"		, _TL("Shapes Layers"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Shapes(
+		NULL	, "SHAPES"		, _TL("[FLD] Index Layer"),
+		_TL(""),
+		PARAMETER_INPUT_OPTIONAL
+	);
+}
+
+//---------------------------------------------------------
+CSVG_Interactive_Map::~CSVG_Interactive_Map(void)
+{}
+
+//---------------------------------------------------------
+bool CSVG_Interactive_Map::On_Execute(void)
+{
+	CSG_String				FileName;
+	CSG_Shapes				*pIndexLayer;
+	CSVG_Interactive_Map	SVG;
+
+	Process_Set_Text(CSG_String::Format(SG_T("%s..."), _TL("[MSG] Save as Interactive SVG")));
+
+	pIndexLayer		= Parameters("SHAPES")		->asShapes();
+	FileName		= Parameters("FILENAME")	->asString();
+
+	return( SVG.Create_From_Map(Parameters("LIST")->asShapesList(), pIndexLayer, FileName) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSVG_Interactive_Map::Create_From_Map(CSG_Parameter_Shapes_List *pList, CSG_Shapes *pIndexLayer, const SG_Char *Filename)
+{
+	int		i;
+
+	if( pList->Get_Count() <= 0 )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	m_Directory	= SG_File_Get_Path(Filename);
+
+	CSG_Rect	r(pList->asShapes(0)->Get_Extent());
+
+	for(i=1; i<pList->Get_Count(); i++)
+	{
+		r.Union(pList->asShapes(i)->Get_Extent());
+	}
+
+	_Add_Opening(r);
+
+	//-----------------------------------------------------
+	m_sSVGCode.Append(SG_T("<g id=\"mainMapGroup\" transform=\"translate(0,0)\">\n"));
+
+	for(i=pList->Get_Count()-1; i>=0; i--)
+	{
+		_Add_Shapes	(pList->asShapes(i));
+	}
+
+	m_sSVGCode.Append(SG_T("</g>\n</svg>\n"));
+
+	//-----------------------------------------------------
+	_Add_CheckBoxes(pList);
+
+	_Add_ReferenceMap(pIndexLayer, r);
+
+	m_sSVGCode.Append(_Get_Code_Closing_1());
+
+	if( !Save(Filename) )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	_Write_Code(SG_File_Make_Path(m_Directory, SG_T("checkbox")			, SG_T("js")), _Get_Code_CheckBox());
+	_Write_Code(SG_File_Make_Path(m_Directory, SG_T("mapApp")			, SG_T("js")), _Get_Code_MapApp	());
+	_Write_Code(SG_File_Make_Path(m_Directory, SG_T("timer")			, SG_T("js")), _Get_Code_Timer	());
+	_Write_Code(SG_File_Make_Path(m_Directory, SG_T("slider")			, SG_T("js")), _Get_Code_Slider	());
+	_Write_Code(SG_File_Make_Path(m_Directory, SG_T("helper_functions")	, SG_T("js")), _Get_Code_Helper	());
+	_Write_Code(SG_File_Make_Path(m_Directory, SG_T("button")			, SG_T("js")), _Get_Code_Buttons	());
+	_Write_Code(SG_File_Make_Path(m_Directory, SG_T("navigation")		, SG_T("js")), CSG_String::Format(SG_T("%s%s"), _Get_Code_Navigation_1(), _Get_Code_Navigation_2()));
+
+	return( true );
+}
+
+//---------------------------------------------------------
+void CSVG_Interactive_Map::_Write_Code(const SG_Char *FileName, const SG_Char *Code)
+{
+	CSG_File	Stream;
+
+	if( Stream.Open(FileName, SG_FILE_W, false) )
+	{
+		Stream.Write((void *)Code, SG_STR_LEN(Code));
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CSVG_Interactive_Map::_Add_Opening(CSG_Rect r)
+{
+	CSG_String sViewBox;
+	double Width, Height;
+	double OffsetX, OffsetY;
+
+	m_sSVGCode.Append(_Get_Opening_Code_1());
+	m_sSVGCode.Append(SG_Get_String(r.Get_XRange(),2));
+	m_sSVGCode.Append(SG_T("),"));
+	m_sSVGCode.Append(SG_Get_String(r.Get_XRange() / 400.,2));
+	m_sSVGCode.Append(_Get_Opening_Code_2());
+
+	if (r.Get_XRange() / r.Get_YRange()  > MAP_WINDOW_WIDTH / MAP_WINDOW_HEIGHT)
+	{
+		Width = r.Get_XRange();
+		Height =  r.Get_XRange() * MAP_WINDOW_HEIGHT / MAP_WINDOW_WIDTH;
+	}
+	else
+	{
+		Height = r.Get_YRange();
+		Width = r.Get_YRange() / MAP_WINDOW_HEIGHT * MAP_WINDOW_WIDTH;
+	}
+
+	OffsetX = (Width - r.Get_XRange()) / 2.;
+	OffsetY = (Height - r.Get_YRange()) / 2.;
+
+	sViewBox.Append(SG_Get_String(r.Get_XMin() - OffsetX,2));
+	sViewBox.Append(SG_T(" "));
+	sViewBox.Append(SG_Get_String(-r.Get_YMax() - OffsetY,2));
+	sViewBox.Append(SG_T(" "));
+	sViewBox.Append(SG_Get_String(Width,2));
+	sViewBox.Append(SG_T(" "));
+	sViewBox.Append(SG_Get_String(Height,2));
+
+	_AddAttribute(SG_T("viewBox"), sViewBox);	
+	m_sSVGCode.Append(SG_T(">\n"));
+
+	m_dWidth = Width;
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Opening_Code_1(void)
+{
+	return( SG_STR_MBTOSG(
+		"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
+		"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\" [\n"
+		"<!ATTLIST svg\n"
+		"	xmlns:attrib CDATA #IMPLIED\n"
+		"	xmlns:batik CDATA #IMPLIED\n"
+		">\n"
+		"<!ATTLIST g\n"
+		"	batik:static CDATA #IMPLIED\n"
+		">\n"
+		"<!ATTLIST image\n"
+		"	batik:static CDATA #IMPLIED\n"
+		">\n"
+		"<!ATTLIST path\n"
+		"	batik:static CDATA #IMPLIED\n"
+		">\n"
+		"]>\n"
+		"<?AdobeSVGViewer save=\"snapshot\"?>\n"
+		"<svg width=\"100%\" height=\"100%\" viewBox=\"0 0 1024 768\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:attrib=\"http://www.carto.net/attrib\" xmlns:batik=\"http://xml.apache.org/batik/ext\" onload=\"init(evt);\" zoomAndPan=\"disable\">\n"
+		"	<script type=\"text/ecmascript\" xlink:href=\"helper_functions.js\"/>\n"
+		"	<script type=\"text/ecmascript\" xlink:href=\"mapApp.js\"/>\n"
+		"	<script type=\"text/ecmascript\" xlink:href=\"timer.js\"/>\n"
+		"	<script type=\"text/ecmascript\" xlink:href=\"slider.js\"/>\n"
+		"	<script type=\"text/ecmascript\" xlink:href=\"button.js\"/>\n"
+		"	<script type=\"text/ecmascript\" xlink:href=\"checkbox.js\"/>\n"
+		"	<script type=\"text/ecmascript\" xlink:href=\"navigation.js\"/>\n"
+		"	<script type=\"text/ecmascript\"><![CDATA[\n"
+		"		//global variables for mapApp and map object\n"
+		"		var myMapApp = new mapApp();\n"
+		"		var myMainMap;\n"
+		"		function init(evt) {\n"
+		"			//dynamic layer array that allow loading from database\n"
+		"			var dynamicLayers = new Array();\n"
+		"			//initialize digiLayers (layers that allow digitizing)\n"
+		"			var digiLayers = new Array();\n"
+		"			//initialize myMainMap object\n"
+		"			myMainMap = new map(\"mainMap\"),"
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Opening_Code_2(void)
+{
+	return( SG_STR_MBTOSG(
+		"),0.6,0,0,\"\"),1,true,\"coordX\"),\"coordY\"),dynamicLayers,digiLayers,\"\"));\n"
+		"			//initialize refMapDragger object\n"
+		"			myMapApp.refMapDragger = new dragObj(\"dragRectForRefMap\"),\"referenceMap\"),\"myDragCross\"),0.1,true,\"coordX\"),\"coordY\"),myMainMap);\n"
+		"			//create zoom slider	\n"
+		"			myMapApp.zoomSlider = new slider(715,75,myMainMap.minWidth,715,165,myMainMap.maxWidth,myMainMap.maxWidth,\"mapZoomSlider\"),\"dimgray\"),2,10,\"sliderSymbol\"),myMapApp.refMapDragger,true);\n"
+		"			//now initialize buttons\n"
+		"			myMapApp.buttons = new Array();\n"
+		"			//groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset\n"
+		"			myMapApp.buttons[\"zoomIn\"] = new button(\"zoomIn\"),zoomImageButtons,\"rect\"),undefined,\"magnifyerZoomIn\"),705,47,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
+		"			myMapApp.buttons[\"zoomOut\"] = new button(\"zoomOut\"),zoomImageButtons,\"rect\"),undefined,\"magnifyerZoomOut\"),705,173,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
+		"			myMapApp.buttons[\"infoButton\"] = new switchbutton(\"infoButton\"),zoomImageSwitchButtons,\"rect\"),undefined,\"infoBut\"),746,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
+		"			myMapApp.buttons[\"infoButton\"].setSwitchValue(true,false);\n"
+		"			statusChange(\"Mode: Infomode\"));\n"
+		"			myMapApp.buttons[\"zoomFull\"] = new button(\"zoomFull\"),zoomImageButtons,\"rect\"),undefined,\"magnifyerFull\"),771,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
+		"			myMapApp.buttons[\"zoomManual\"] = new switchbutton(\"zoomManual\"),zoomImageSwitchButtons,\"rect\"),undefined,\"magnifyerManual\"),796,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
+		"			myMapApp.buttons[\"panManual\"] = new switchbutton(\"panManual\"),zoomImageSwitchButtons,\"rect\"),undefined,\"symbPan\"),821,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
+		"			myMapApp.buttons[\"recenterMap\"] = new switchbutton(\"recenterMap\"),zoomImageSwitchButtons,\"rect\"),undefined,\"symbRecenter\"),846,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
+		"			myMapApp.buttons[\"backwardExtent\"] = new button(\"backwardExtent\"),zoomImageButtons,\"rect\"),undefined,\"symbArrowLeft\"),871,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
+		"			myMapApp.buttons[\"forwardExtent\"] = new button(\"forwardExtent\"),zoomImageButtons,\"rect\"),undefined,\"symbArrowRight\"),896,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
+		"			//see if we need to disable buttons\n"
+		"			myMainMap.checkButtons();\n"
+		"			//load function specific to the current map project\n"
+		"			loadProjectSpecific();\n"
+		"		}\n"
+		"		function loadProjectSpecific() {\n"
+		"			//adopt width and height of map extent\n"
+		"			document.getElementById(\"myScaleTextW\")).firstChild.nodeValue = formatNumberString(myMainMap.curWidth.toFixed(myMainMap.nrDecimals)) + myMainMap.units;\n"
+		"			document.getElementById(\"myScaleTextH\")).firstChild.nodeValue = formatNumberString(myMainMap.curHeight.toFixed(myMainMap.nrDecimals)) + myMainMap.units;\n"
+		"		}\n"
+		"]]></script>\n"
+		"	<defs>\n"
+		"		<!-- Symbols for checkboxes -->\n"
+		"		<symbol id=\"checkBoxRect\" overflow=\"visible\">\n"
+		"			<rect x=\"-6\" y=\"-6\" width=\"12\" height=\"12\" fill=\"white\" stroke=\"dimgray\" stroke-width=\"1.5\"/>\n"
+		"		</symbol>\n"
+		"		<symbol id=\"checkBoxCross\" overflow=\"visible\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"1\" pointer-events=\"none\">\n"
+		"			<line x1=\"-5\" y1=\"-5\" x2=\"5\" y2=\"5\"/>\n"
+		"			<line x1=\"-5\" y1=\"5\" x2=\"5\" y2=\"-5\"/>\n"
+		"		</symbol>\n"
+		"		<!-- Symbols for Zoom Magnifyer glasses -->\n"
+		"		<symbol id=\"magnifyerFull\" overflow=\"visible\">\n"
+		"			<text y=\"7.5\" font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"18px\" font-weight=\"bold\" text-anchor=\"middle\" pointer-events=\"none\">F</text>\n"
+		"		</symbol>\n"
+		"		<symbol id=\"infoBut\" overflow=\"visible\">\n"
+		"			<circle fill=\"none\" stroke=\"dimgray\" stroke-width=\"1.5\" r=\"7.5\" />\n"
+		"			<text y=\"5\" font-family=\"sans-serif\" font-size=\"13px\" font-weight=\"bold\" fill=\"dimgray\" text-anchor=\"middle\" pointer-events=\"none\">i</text>\n"
+		"		</symbol>\n"
+		"		<symbol id=\"magnifyerManual\" overflow=\"visible\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"1.5\">\n"
+		"			<rect x=\"-6\" y=\"-6\" width=\"12\" height=\"12\" stroke-dasharray=\"1.5,1.5\"/>\n"
+		"			<line x1=\"-3\" y1=\"0\" x2=\"3\" y2=\"0\" />\n"
+		"			<line x1=\"0\" y1=\"-3\" x2=\"0\" y2=\"3\" />\n"
+		"		</symbol>\n"
+		"		<symbol id=\"magnifyerZoomIn\" overflow=\"visible\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"2\">\n"
+		"			<line x1=\"-4\" y1=\"0\" x2=\"4\" y2=\"0\"/>\n"
+		"			<line x1=\"0\" y1=\"-4\" x2=\"0\" y2=\"4\"/>\n"
+		"		</symbol>\n"
+		"		<symbol id=\"magnifyerZoomOut\" overflow=\"visible\">\n"
+		"			<line x1=\"-4\" y1=\"0\" x2=\"4\" y2=\"0\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"2\" />\n"
+		"		</symbol>\n"
+		"		<!-- hand symbol for panning -->\n"
+		"		<symbol id=\"symbPan\" overflow=\"visible\">\n"
+		"			<path transform=\"scale(1.2)\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"1\" d=\"M-2 6 C -2.2 2.5 -8.0 -0 -5.7 -1.9 C -4.3 -2.5 -3.3 -0.5 -2.5 0.7 C -3.2 -2.1 -5.5 -5.2 -3.6 -5.8 C -2.1 -6.3 -1.6 -3.6 -1.1 -1.9 C -0.9 -4.2 -1.6 -6.4 -0.2 -6.6 C 1.4 -6.8 0.9 -3 1.1 -1.9 C 1.5 -3.5 1.2 -6.1 2.5 -6.1 C 3.9 -6.1 3.5 -3.2 3.6 -1.6 C 4 -2.9 4.1 -4.3 5.3 -4.4 C 7.3 -3.5 4 2.2 3 6z\"/>\n"
+		"		</symbol>\n"
+		"		<!-- Symbol for Arrows -->\n"
+		"		<symbol id=\"symbArrow\" overflow=\"visible\">\n"
+		"			<polyline fill=\"none\" stroke=\"dimgray\" stroke-width=\"1\" points=\"-3,-6 3,-6 3,1 5,1 0,7 -5,1 -3,1 -3,-5\"/>\n"
+		"		</symbol>\n"
+		"		<symbol id=\"symbArrowLeft\" overflow=\"visible\">\n"
+		"			<use xlink:href=\"#symbArrow\" transform=\"rotate(90)\" />\n"
+		"		</symbol>\n"
+		"		<symbol id=\"symbArrowRight\" overflow=\"visible\">\n"
+		"			<use xlink:href=\"#symbArrow\" transform=\"rotate(-90)\" />\n"
+		"		</symbol>\n"
+		"		<!-- Symbol for Recentering Map -->\n"
+		"		<symbol id=\"symbRecenter\" overflow=\"visible\">\n"
+		"			<circle fill=\"dimgray\" cx=\"0\" cy=\"0\" r=\"1\" pointer-events=\"none\"/>\n"
+		"			<g fill=\"none\" stroke=\"dimgray\" stroke-width=\"1.5\" pointer-events=\"none\">\n"
+		"				<line x1=\"-7\" y1=\"-7\" x2=\"-3\" y2=\"-3\"/>\n"
+		"				<line x1=\"7\" y1=\"7\" x2=\"3\" y2=\"3\"/>\n"
+		"				<line x1=\"-7\" y1=\"7\" x2=\"-3\" y2=\"3\"/>\n"
+		"				<line x1=\"7\" y1=\"-7\" x2=\"3\" y2=\"-3\"/>\n"
+		"			</g>\n"
+		"		</symbol>\n"
+		"		<!-- Symbol for Slider -->\n"
+		"		<symbol id=\"sliderSymbol\" overflow=\"visible\" pointer-events=\"none\">\n"
+		"			<line x1=\"0\" y1=\"-5\" x2=\"0\" y2=\"5\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"5\"/>\n"
+		"		</symbol>\n"
+		"		<!-- Symbol for Dragging if zoomed in far -->\n"
+		"		<symbol id=\"myDragCrossSymbol\" overflow=\"visible\" stroke-width=\"2000\" fill=\"none\" stroke=\"darkblue\" pointer-events=\"none\">\n"
+		"			<line x1=\"-7000\" y1=\"0\" x2=\"-2500\" y2=\"0\"/>\n"
+		"			<line x1=\"7000\" y1=\"0\" x2=\"2500\" y2=\"0\"/>\n"
+		"			<line x1=\"0\" y1=\"-3300\" x2=\"0\" y2=\"-7800\"/>\n"
+		"			<line x1=\"0\" y1=\"3300\" x2=\"0\" y2=\"7800\"/>\n"
+		"		</symbol>\n"
+		"		<!-- Marker for Extent-Arrows -->\n"
+		"		<marker id=\"myStartArrow\" overflow=\"visible\" orient=\"auto\">\n"
+		"			<polyline fill=\"dimgray\" points=\"-0.5,0 8,-2 8,2\"/>\n"
+		"		</marker>\n"
+		"		<marker id=\"myEndArrow\" overflow=\"visible\" orient=\"auto\">\n"
+		"			<polyline fill=\"dimgray\" points=\"0.5,0 -8,-2 -8,2\"/>\n"
+		"		</marker>\n"
+		"	</defs>\n"
+		"	<rect x=\"-500\" y=\"-500\" width=\"3000\" height=\"3000\" stroke=\"none\" fill=\"aliceblue\" />\n"
+		"	<!-- Main Map Frame -->\n"
+		"	<svg id=\"mainMap\" x=\"0\" y=\"15\" width=\"550\" height=\"700\"	cursor=\"crosshair\" "
+	));
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CSVG_Interactive_Map::_Add_ReferenceMap(CSG_Shapes *pIndexLayer, CSG_Rect r)
+{
+	int i;
+	CSG_String sViewBox;
+	double Line_Width, Point_Width;
+	double Width, Height;
+	double OffsetX, OffsetY;
+	CSG_Shape *pShape;
+
+	if (r.Get_XRange() / r.Get_YRange()  > MAP_WINDOW_WIDTH / MAP_WINDOW_HEIGHT)
+	{
+		Width = r.Get_XRange();
+		Height =  r.Get_XRange() * MAP_WINDOW_HEIGHT / MAP_WINDOW_WIDTH;
+	}
+	else
+	{
+		Height = r.Get_YRange();
+		Width = r.Get_YRange() / MAP_WINDOW_HEIGHT * MAP_WINDOW_WIDTH;
+	}
+
+	OffsetX = (Width - r.Get_XRange()) / 2.;
+	OffsetY = (Height - r.Get_YRange()) / 2.;
+
+	sViewBox.Append(SG_Get_String(r.Get_XMin() - OffsetX,2));
+	sViewBox.Append(SG_T(" "));
+	sViewBox.Append(SG_Get_String(- r.Get_YMax() - OffsetY,2));
+	sViewBox.Append(SG_T(" "));
+	sViewBox.Append(SG_Get_String(Width,2));
+	sViewBox.Append(SG_T(" "));
+	sViewBox.Append(SG_Get_String(Height,2));
+
+	_AddAttribute(SG_T("viewBox"), sViewBox);	
+
+	m_sSVGCode.Append(_Get_Code_3());
+	
+	if (pIndexLayer)
+	{
+		m_sSVGCode.Append(SG_T("<g id=\"index\">\n"));
+		for (i = 0; i < pIndexLayer->Get_Count(); i++)
+		{
+			pShape = pIndexLayer->Get_Shape(i);
+			Line_Width = Point_Width = m_dWidth / MAP_WINDOW_WIDTH;
+			Point_Width *= 5;
+			_Add_Shape(pShape, 0, 0, Line_Width, Point_Width);
+		}
+		m_sSVGCode.Append(SG_T("</g>\n"));
+	}
+
+	m_sSVGCode.Append(_Get_Code_4());
+		
+	_AddAttribute(SG_T("x"), r.Get_XMin() - OffsetX);
+	_AddAttribute(SG_T("y"), - r.Get_YMax() - OffsetY);
+	_AddAttribute(SG_T("width"), Width);
+	_AddAttribute(SG_T("height"), Height);
+
+	m_sSVGCode.Append(_Get_Code_5());
+
+}
+
+//---------------------------------------------------------
+void CSVG_Interactive_Map::_Add_Grid(CSG_Grid *pLayer)
+{
+/*	CSG_String Filename;
+	wxBitmap BMP;
+	
+	if( pLayer->Get_Image_Grid(BMP) )
+	{
+		Filename	= SG_File_Make_Path(m_Directory.c_str(), pLayer->Get_Name(), SG_T("jpg"));
+		BMP.SaveFile(Filename, wxBITMAP_TYPE_JPEG);
+
+		m_sSVGCode.Append(SG_T("<image "));
+
+		_AddAttribute(SG_T("id")			, pLayer->Get_Name());
+		_AddAttribute(SG_T("x")			, ((CSG_Grid *)pLayer->Get_Object())->Get_XMin());
+		_AddAttribute(SG_T("y")			,-((CSG_Grid *)pLayer->Get_Object())->Get_YMax());
+		_AddAttribute(SG_T("width")		, ((CSG_Grid *)pLayer->Get_Object())->Get_XRange());
+		_AddAttribute(SG_T("height")		, ((CSG_Grid *)pLayer->Get_Object())->Get_YRange());
+		_AddAttribute(SG_T("xlink:href")	, SG_File_Get_Name(Filename, true));
+
+		m_sSVGCode.Append(SG_T("/>"));
+	}
+/**/
+}
+
+//---------------------------------------------------------
+void CSVG_Interactive_Map::_Add_Shapes(CSG_Shapes *pLayer)
+{
+	int i;
+	int Line_Color, Fill_Color; 
+	double Line_Width, Point_Width;
+	CSG_Shape *pShape;
+	CSG_String sLabel;
+
+	m_sSVGCode.Append(SG_T("<g id=\""));
+	m_sSVGCode.Append(pLayer->Get_Name());		
+	m_sSVGCode.Append(SG_T("\" >\n"));
+	
+//	int	iColorField = pLayer->Get_Color_Field();
+
+	m_sSVGCode.Append(SG_T("<g transform=\"scale(1,-1)\">\n"));
+
+	for (i = 0; i < pLayer->Get_Count(); i++)
+	{
+		pShape = pLayer->Get_Shape(i);
+//		Line_Color = Fill_Color = pLayer->Get_Classifier()->Get_Class_Color_byValue(pShape->asDouble(iColorField));
+		Line_Color = SG_COLOR_BLACK;
+		Fill_Color = SG_COLOR_GREEN;
+		Line_Width = Point_Width = m_dWidth / MAP_WINDOW_WIDTH;
+		Point_Width *= 5;
+		_Add_Shape(pShape, Fill_Color, Line_Color, Line_Width, Point_Width);
+	}
+	
+//	if (pLayer->Get_Label_Field() >= 0)
+	{
+/*		m_sSVGCode.Append(SG_T("<g transform=\"scale(0.01,-0.01)\"\n>"));
+		for (i = 0; i < pLayer->Get_Count(); i++)
+		{
+			double	dSize;
+
+			pShape = pLayer->Get_Shape(i);
+			Line_Width = Point_Width = m_dWidth / MAP_WINDOW_WIDTH;
+			sLabel = pShape->asString(pLayer->Get_Label_Field());
+			switch( pLayer->Get_Parameters()->Get_Parameter(SG_T("LABEL_ATTRIB_SIZE_TYPE"))->asInt() )
+			{
+				case 0:	default:
+					dSize = Line_Width * pLayer->Get_Parameters()->Get_Parameter(SG_T("LABEL_ATTRIB_FONT"))->asFont()->GetPointSize();
+					_Add_Label(sLabel, pShape, dSize, SG_T("%"));
+					break;
+				case 1:
+					dSize =  pLayer->Get_Parameters()->Get_Parameter(SG_T("LABEL_ATTRIB_SIZE"))->asDouble();
+					_Add_Label(sLabel, pShape, dSize, SG_T(""));
+					break;
+			}
+		}
+
+		m_sSVGCode.Append(SG_T("</g>\n"));
+/**/
+	}
+
+	m_sSVGCode.Append(SG_T("</g>\n</g>\n"));
+}
+
+//---------------------------------------------------------
+void CSVG_Interactive_Map::_Add_Label(const SG_Char* Label, CSG_Shape *pShape, double dSize, const SG_Char* Unit)
+{
+
+	int iPoint, iPart;
+	TSG_Point Point;
+
+	switch( pShape->Get_Type() )
+	{
+	case SHAPE_TYPE_Point:
+	case SHAPE_TYPE_Points:
+		for(iPoint=0; iPoint < pShape->Get_Point_Count(0); iPoint++)
+		{
+			Point = pShape->Get_Point(iPoint);
+			Draw_Text(100 * Point.x, -100 * Point.y, Label, 0, SG_T("Verdana"), 100 * dSize);
+		}
+		break;
+
+	case SHAPE_TYPE_Line:
+		///************///
+		break;
+
+	case SHAPE_TYPE_Polygon:
+		
+		for (iPart = 0; iPart < pShape->Get_Part_Count(); iPart++)
+		{
+			if(! ((CSG_Shape_Polygon *)pShape)->is_Lake(iPart) )
+			{
+				Point = ((CSG_Shape_Polygon *)pShape)->Get_Centroid(iPart);
+				Draw_Text(100 * Point.x, -100 * Point.y, Label, 0, SG_T("Verdana"), 100 * dSize);
+			}
+		}
+		break;
+	}
+
+}
+
+//---------------------------------------------------------
+bool CSVG_Interactive_Map::_Add_Shape(CSG_Shape *pShape, int Fill_Color, int Line_Color, double Line_Width, double Point_Width)
+{
+	if( pShape && pShape->is_Valid() )
+	{
+		int				iPart, iPoint;
+		TSG_Point		Point;
+		CSG_Points	Points;
+
+		for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
+		{
+			Points.Clear();
+
+			for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
+			{
+				Point = pShape->Get_Point(iPoint, iPart);
+				Points.Add(Point.x, Point.y);
+			}
+
+			switch( pShape->Get_Type() )
+			{
+			case SHAPE_TYPE_Point:
+			case SHAPE_TYPE_Points:
+				for(iPoint=0; iPoint<Points.Get_Count(); iPoint++)
+				{
+					Draw_Circle(Points[iPoint].x, Points[iPoint].y, Point_Width, Fill_Color, 0, Line_Width);
+				}
+				break;
+
+			case SHAPE_TYPE_Line:
+				Draw_Line(Points, Line_Width, Line_Color);
+				break;
+
+			case SHAPE_TYPE_Polygon:
+				if( ((CSG_Shape_Polygon *)pShape)->is_Lake(iPart) )
+				{
+					Draw_Polygon(Points, -1, 0, 0.01);
+				}
+				else
+				{
+					Draw_Polygon(Points, Fill_Color, 0, 0.01);
+				}
+				break;
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+void CSVG_Interactive_Map::_Add_CheckBoxes(CSG_Parameter_Shapes_List *pList)
+{
+
+	int i;
+	CSG_String s;
+	int x,y;
+	int iRow = 1;
+	
+	m_sSVGCode.Append(_Get_Code_1());	// 2* <g> open
+	m_sSVGCode.Append(_TL("Layers"));
+	m_sSVGCode.Append(SG_T("</text>\n"));
+
+	for (i = 0; i < pList->Get_Count(); i++)
+	{
+		y = iRow * 30;
+
+		if (i % 2)
+		{
+			x = 200;		
+			iRow++;
+		}
+		else
+		{
+			x = 0;
+		}
+	
+		m_sSVGCode.Append(SG_T("<g "));
+		s = SG_T("translate(");
+		s.Append(SG_Get_String(x,0));
+		s.Append(SG_T(" "));
+		s.Append(SG_Get_String(y,0));
+		s.Append(SG_T("))"));
+		_AddAttribute(SG_T("transform"), s);
+		m_sSVGCode.Append(SG_T(">\n"));
+
+		m_sSVGCode.Append(SG_T("<use "));
+		s = SG_T("checkBox");
+		s.Append(pList->asShapes(i)->Get_Name());
+		_AddAttribute(SG_T("id"), s);
+		_AddAttribute(SG_T("xlink:href"), SG_T("#checkBoxRect"));
+		s = SG_T("checkBoxScript(evt,'");
+		s.Append(pList->asShapes(i)->Get_Name());
+		s.Append(SG_T("');"));
+		_AddAttribute(SG_T("onclick"), s);
+		m_sSVGCode.Append(SG_T("/>\n"));
+
+		m_sSVGCode.Append(SG_T("<use "));
+		s = SG_T("checkCross");
+		s.Append(pList->asShapes(i)->Get_Name());
+		_AddAttribute(SG_T("id"), s);
+		_AddAttribute(SG_T("xlink:href"), SG_T("#checkBoxCross"));		
+		_AddAttribute(SG_T("visibility"), SG_T("visible"));
+		m_sSVGCode.Append(SG_T("/>\n"));
+
+		m_sSVGCode.Append(SG_T("</g>\n"));
+	}
+
+	m_sSVGCode.Append(SG_T("<g font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"15px\" pointer-events=\"none\">\n"));
+	
+	iRow = 1;
+		
+	for (i = 0; i < pList->Get_Count(); i++)
+	{
+		y = iRow * 30 + 6;
+
+		if (i % 2)
+		{
+			x = 212;
+			iRow++;
+		}
+		else
+		{
+			x = 12;
+		}
+
+		m_sSVGCode.Append(SG_T("<text "));	
+		_AddAttribute(SG_T("x"), x);
+		_AddAttribute(SG_T("y"), y);
+		m_sSVGCode.Append(SG_T(">"));
+		m_sSVGCode.Append(pList->asShapes(i)->Get_Name());
+		m_sSVGCode.Append(SG_T("</text>\n"));	
+
+	}
+
+	m_sSVGCode.Append(SG_T("</g>\n"));
+
+	m_sSVGCode.Append(_Get_Code_2());
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_1(void)
+{
+	return( SG_STR_MBTOSG(
+		"<g>\n"
+		"		<g font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"15px\" pointer-events=\"none\">"
+		"			<text id=\"coordX\" x=\"745\" y=\"145\">X:</text>\n"
+		"			<text id=\"coordY\" x=\"845\" y=\"145\">Y:</text>\n"
+		"		</g>\n"
+		"		<g>"
+		"			<!-- vertical line, displays current height of map extent -->\n"
+		"			<line stroke=\"dimgray\" stroke-width=\"1.5\" marker-start=\"url(#myStartArrow)\" marker-end=\"url(#myEndArrow)\" x1=\"561\" y1=\"15\" x2=\"561\" y2=\"715\"/>\n"
+		"			<rect fill=\"aliceblue\" x=\"555\" y=\"330\" width=\"12\" height=\"70\"/>\n"
+		"			<text id=\"myScaleTextH\" font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"15px\" text-anchor=\"middle\" transform=\"translate(556,365),rotate(90)\" pointer-events=\"none\">-</text>\n"
+		"			<!-- horizontal line, displays current width of map extent -->\n"
+		"			<line stroke=\"dimgray\" stroke-width=\"1.5\" marker-start=\"url(#myStartArrow)\" marker-end=\"url(#myEndArrow)\" x1=\"0\" y1=\"723\" x2=\"553.1\" y2=\"723\"/>\n"
+		"			<rect fill=\"aliceblue\" x=\"242\" y=\"717\" width=\"70\" height=\"12\"/>\n"
+		"			<text id=\"myScaleTextW\" font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"15px\" text-anchor=\"middle\" transform=\"translate(277,728)\" pointer-events=\"none\">-</text>\n"
+		"			<!-- small rectangle in lower right corner, onclick displays current map extent in real world coordinates -->\n"
+		"			<rect fill=\"dimgray\" x=\"558.5\" y=\"720.5\" width=\"5\" height=\"5\" onclick=\"showExtent()\" />\n"
+		"		</g>\n"
+		"		<g transform=\"translate(590 225)\">\n"
+		"			<text font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"18px\" font-weight=\"bold\" x=\"-10\" y=\"0\" pointer-events=\"none\">"
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_2(void)
+{
+	return( SG_STR_MBTOSG(
+		"</g>\n"
+		"   <g text-rendering=\"optimizeLegibility\" font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"12px\">\n"
+		"		<!-- text with this id is required to show help texts -->\n"
+		"		<text id=\"statusText\" x=\"745\" y=\"125\">Statusbar: Your Status Text</text>\n"
+		"   </g>\n"
+		"</g>\n"
+		"<svg id=\"referenceMap\" x=\"580\" y=\"45\" "
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_3(void)
+{
+	return( SG_STR_MBTOSG(
+		"width=\"118.52\" height=\"150\" onmousedown=\"myMapApp.refMapDragger.handleEvent(evt)\" onmousemove=\"myMapApp.refMapDragger.handleEvent(evt)\" onmouseup=\"myMapApp.refMapDragger.handleEvent(evt)\" onmouseout=\"myMapApp.refMapDragger.handleEvent(evt)\" cursor=\"crosshair\">\n"
+		"		<g transform=\"scale(1,-1)\"\n>"
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_4(void)
+{
+	return( SG_STR_MBTOSG(
+		"		</g>\n"
+		"		<rect id=\"dragRectForRefMap\" fill=\"lightskyblue\" fill-opacity=\"0.4\" "
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_5(void)
+{
+	return( SG_STR_MBTOSG(
+		" pointer-events=\"none\" />\n	"
+		"		<use id=\"myDragCross\" x=\"0\" y=\"0\" xlink:href=\"#myDragCrossSymbol\" visibility=\"hidden\" />\n"
+		"	</svg>\n"
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_Closing_1(void)
+{
+	return( SG_STR_MBTOSG(
+		"	<g>\n"
+		"		<!-- empty group where zoomSlider is later appended -->\n"
+		"		<g id=\"mapZoomSlider\"/>\n"
+		"		<!-- button for zoom-in, above slider -->\n"
+		"		<g id=\"zoomIn\" cursor=\"pointer\" />\n"
+		"		<!-- button for zoom-out, below slider -->\n"
+		"		<g id=\"zoomOut\" cursor=\"pointer\" />\n"
+		"		<!-- info button -->\n"
+		"		<g id=\"infoButton\" cursor=\"pointer\" />\n"
+		"		<!-- button for full view (f) -->\n"
+		"		<g id=\"zoomFull\" cursor=\"pointer\" />\n"
+		"		<!-- button for manual zoom (rectangle) -->\n"
+		"		<g id=\"zoomManual\" cursor=\"pointer\" />\n"
+		"		<!-- button for manual pan -->\n"
+		"		<g id=\"panManual\" cursor=\"pointer\" />\n"
+		"		<!-- button for redefining map center -->\n"
+		"		<g id=\"recenterMap\" cursor=\"pointer\" />\n"
+		"		<!-- button for backwarding map extent (extent history) -->\n"
+		"		<g id=\"backwardExtent\" cursor=\"pointer\" />\n"
+		"		<!-- button for forwarding map extent (extent history) -->\n"
+		"		<g id=\"forwardExtent\" cursor=\"pointer\" />\n"
+		"	</g>\n"
+	));
+}
+
+
+///////////////////////////////////////////////////////////
+//														//
+//														//
+//														//
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_CheckBox(void)
+{
+	return( SG_STR_MBTOSG(
+		"function checkBoxScript(evt,myLayer) { //checkBox for toggling layers an contextMenue\n"
+		"	var myLayerObj = document.getElementById(myLayer);\n"
+		"	var myCheckCrossObj = document.getElementById(\"checkCross\"+myLayer);\n"
+		"	var myCheckCrossVisibility = myCheckCrossObj.getAttributeNS(null,\"visibility\"));\n"
+		"	if (evt.type == \"click\" && evt.detail == 1) {\n"
+		"	if (myCheckCrossVisibility == \"visible\")) {\n"
+		"		myLayerObj.setAttributeNS(null,\"visibility\"),\"hidden\"));\n"
+		"		myCheckCrossObj.setAttributeNS(null,\"visibility\"),\"hidden\"));\n"
+		"		//you can do if/else or switch statements to set different actions on activating a checkbox here\n"
+		"		//myLayer holds the currentLayer name\n"
+		"	}\n"
+		"	else {\n"
+		"		myLayerObj.setAttributeNS(null,\"visibility\"),\"visible\"));\n"
+		"		myCheckCrossObj.setAttributeNS(null,\"visibility\"),\"visible\"));\n"
+		"	}\n"
+		"	}\n"
+		"}\n"
+		"\n"
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_MapApp(void)
+{
+	return( SG_STR_MBTOSG(
+		"//holds data on window size\n"
+		"function mapApp() {\n"
+		"	if (!document.documentElement.getScreenCTM) {\n"
+		"	this.resetFactors();\n"
+		"	//add resize event to document element\n"
+		"	document.documentElement.addEventListener(\"SVGResize\"),this,false);\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"mapApp.prototype.handleEvent = function(evt) {\n"
+		"	if (evt.type == \"SVGResize\")) {\n"
+		"	this.resetFactors();\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"mapApp.prototype.resetFactors = function() {\n"
+		"	if (!document.documentElement.getScreenCTM) {\n"
+		"	//case for viewers that don't support .getScreenCTM, such as ASV3\n"
+		"	//calculate ratio and offset values of app window\n"
+		"	var viewBoxArray = document.documentElement.getAttributeNS(null,\"viewBox\")).split(\" \"));\n"
+		"	var myRatio = viewBoxArray[2]/viewBoxArray[3];\n"
+		"	if ((window.innerWidth/window.innerHeight) > myRatio) { //case window is more wide than myRatio\n"
+		"		this.scaleFactor = viewBoxArray[3] / window.innerHeight;\n"
+		"	}\n"
+		"	else { //case window is more tall than myRatio\n"
+		"		this.scaleFactor = viewBoxArray[2] / window.innerWidth;\n"
+		"	}\n"
+		"	this.offsetX = (window.innerWidth - viewBoxArray[2] * 1 / this.scaleFactor) / 2;\n"
+		"	this.offsetY = (window.innerHeight - viewBoxArray[3] * 1 / this.scaleFactor) / 2;\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"mapApp.prototype.calcCoord = function(evt,ctmNode) {\n"
+		"	var svgPoint = document.documentElement.createSVGPoint();\n"
+		"	svgPoint.x = evt.clientX;\n"
+		"	svgPoint.y = evt.clientY;\n"
+		"	if (!document.documentElement.getScreenCTM) {\n"
+		"	//case ASV3 a. Corel\n"
+		"	svgPoint.x = (svgPoint.x	- this.offsetX) * this.scaleFactor;\n"
+		"	svgPoint.y = (svgPoint.y - this.offsetY) * this.scaleFactor;\n"
+		"	//undo the effect of transformations\n"
+		"	if (ctmNode) {\n"
+		"		var ctm = getTransformToRootElement(ctmNode).inverse();\n"
+		"	}\n"
+		"	else {\n"
+		"		var ctm = getTransformToRootElement(evt.target).inverse();\n"
+		"	}\n"
+		"	svgPoint = svgPoint.matrixTransform(ctm);\n"
+		"\n"
+		"	}\n"
+		"	else {\n"
+		"	if (ctmNode) {\n"
+		"		var matrix = ctmNode.getScreenCTM();\n"
+		"	}\n"
+		"	else {\n"
+		"		var matrix = evt.target.getScreenCTM();\n"
+		"	}\n"
+		"	svgPoint = svgPoint.matrixTransform(matrix.inverse());\n"
+		"	}\n"
+		"	return svgPoint;\n"
+		"}\n"
+		"\n"
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_Timer(void)
+{
+	return( SG_STR_MBTOSG(
+		"// source/credits: \"Algorithm\": http://www.codingforums.com/showthread.php?s=&threadid=10531\n"
+		"// The constructor should be called with\n"
+		"// the parent object (optional, defaults to window).\n"
+		"\n"
+		"function Timer(){\n"
+		"	this.obj = (arguments.length)?arguments[0]:window;\n"
+		"	return this;\n"
+		"}\n"
+		"\n"
+		"// The set functions should be called with:\n"
+		"// - The name of the object method (as a string) (required)\n"
+		"// - The millisecond delay (required)\n"
+		"// - Any number of extra arguments, which will all be\n"
+		"//	passed to the method when it is evaluated.\n"
+		"\n"
+		"Timer.prototype.setInterval = function(func, msec){\n"
+		"	var i = Timer.getNew();\n"
+		"	var t = Timer.buildCall(this.obj, i, arguments);\n"
+		"	Timer.set[i].timer = window.setInterval(t,msec);\n"
+		"	return i;\n"
+		"}\n"
+		"Timer.prototype.setTimeout = function(func, msec){\n"
+		"	var i = Timer.getNew();\n"
+		"	Timer.buildCall(this.obj, i, arguments);\n"
+		"	Timer.set[i].timer = window.setTimeout(\"Timer.callOnce(\"+i+\"));\"),msec);\n"
+		"	return i;\n"
+		"}\n"
+		"\n"
+		"// The clear functions should be called with\n"
+		"// the return value from the equivalent set function.\n"
+		"\n"
+		"Timer.prototype.clearInterval = function(i){\n"
+		"	if(!Timer.set[i]) return;\n"
+		"	window.clearInterval(Timer.set[i].timer);\n"
+		"	Timer.set[i] = null;\n"
+		"}\n"
+		"Timer.prototype.clearTimeout = function(i){\n"
+		"	if(!Timer.set[i]) return;\n"
+		"	window.clearTimeout(Timer.set[i].timer);\n"
+		"	Timer.set[i] = null;\n"
+		"}\n"
+		"\n"
+		"// Private data\n"
+		"\n"
+		"Timer.set = new Array();\n"
+		"Timer.buildCall = function(obj, i, args){\n"
+		"	var t = \"\");\n"
+		"	Timer.set[i] = new Array();\n"
+		"	if(obj != window){\n"
+		"	Timer.set[i].obj = obj;\n"
+		"	t = \"Timer.set[\"+i+\"].obj.\");\n"
+		"	}\n"
+		"	t += args[0]+\"(\");\n"
+		"	if(args.length > 2){\n"
+		"	Timer.set[i][0] = args[2];\n"
+		"	t += \"Timer.set[\"+i+\"][0]\");\n"
+		"	for(var j=1; (j+2)<args.length; j++){\n"
+		"		Timer.set[i][j] = args[j+2];\n"
+		"		t += \"), Timer.set[\"+i+\"][\"+j+\"]\");\n"
+		"	}}\n"
+		"	t += \"));\");\n"
+		"	Timer.set[i].call = t;\n"
+		"	return t;\n"
+		"}\n"
+		"Timer.callOnce = function(i){\n"
+		"	if(!Timer.set[i]) return;\n"
+		"	eval(Timer.set[i].call);\n"
+		"	Timer.set[i] = null;\n"
+		"}\n"
+		"Timer.getNew = function(){\n"
+		"	var i = 0;\n"
+		"	while(Timer.set[i]) i++;\n"
+		"	return i;\n"
+		"}\n"
+		"\n"
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_Slider(void)
+{
+	return( SG_STR_MBTOSG(
+		"//slider properties\n"
+		"function slider(x1,y1,value1,x2,y2,value2,startVal,sliderGroupId,sliderColor,visSliderWidth,invisSliderWidth,sliderSymb,functionToCall,mouseMoveBool) {\n"
+		"	this.x1 = x1;\n"
+		"	this.y1 = y1;\n"
+		"	this.value1 = value1;\n"
+		"	this.x2 = x2;\n"
+		"	this.y2 = y2;\n"
+		"	this.value2 = value2;\n"
+		"	this.startVal = startVal;\n"
+		"	this.value = startVal;\n"
+		"	this.sliderGroupId = sliderGroupId;\n"
+		"	this.sliderGroup = document.getElementById(this.sliderGroupId);\n"
+		"	this.sliderColor = sliderColor;\n"
+		"	this.visSliderWidth = visSliderWidth;\n"
+		"	this.invisSliderWidth = invisSliderWidth;\n"
+		"	this.sliderSymb = sliderSymb;\n"
+		"	this.functionToCall = functionToCall;\n"
+		"	this.mouseMoveBool = mouseMoveBool;\n"
+		"	this.length = toPolarDist((this.x2 - this.x1),(this.y2 - this.y1));\n"
+		"	this.direction = toPolarDir((this.x2 - this.x1),(this.y2 - this.y1));\n"
+		"	this.sliderLine = null;\n"
+		"	this.createSlider();\n"
+		"	this.slideStatus = 0;\n"
+		"}\n"
+		"\n"
+		"//create slider\n"
+		"slider.prototype.createSlider = function() {\n"
+		"	this.sliderLine = document.createElementNS(svgNS,\"line\"));\n"
+		"	this.sliderLine.setAttributeNS(null,\"x1\"),this.x1);\n"
+		"	this.sliderLine.setAttributeNS(null,\"y1\"),this.y1);\n"
+		"	this.sliderLine.setAttributeNS(null,\"x2\"),this.x2);\n"
+		"	this.sliderLine.setAttributeNS(null,\"y2\"),this.y2);\n"
+		"	this.sliderLine.setAttributeNS(null,\"stroke\"),this.sliderColor);\n"
+		"	this.sliderLine.setAttributeNS(null,\"stroke-width\"),this.invisSliderWidth);\n"
+		"	this.sliderLine.setAttributeNS(null,\"opacity\"),\"0\"));\n"
+		"	this.sliderLine.setAttributeNS(null,\"stroke-linecap\"),\"square\"));\n"
+		"	this.sliderLine.setAttributeNS(null,\"id\"),this.sliderGroupId+\"_invisibleSliderLine\"));\n"
+		"	this.sliderLine.addEventListener(\"mousedown\"),this,false);\n"
+		"	this.sliderGroup.appendChild(this.sliderLine);\n"
+		"	var mySliderLine = document.createElementNS(svgNS,\"line\"));\n"
+		"	mySliderLine.setAttributeNS(null,\"x1\"),this.x1);\n"
+		"	mySliderLine.setAttributeNS(null,\"y1\"),this.y1);\n"
+		"	mySliderLine.setAttributeNS(null,\"x2\"),this.x2);\n"
+		"	mySliderLine.setAttributeNS(null,\"y2\"),this.y2);\n"
+		"	mySliderLine.setAttributeNS(null,\"stroke\"),this.sliderColor);\n"
+		"	mySliderLine.setAttributeNS(null,\"stroke-width\"),this.visSliderWidth);\n"
+		"	mySliderLine.setAttributeNS(null,\"id\"),this.sliderGroupId+\"_visibleSliderLine\"));\n"
+		"	mySliderLine.setAttributeNS(null,\"pointer-events\"),\"none\"));\n"
+		"	this.sliderGroup.appendChild(mySliderLine);\n"
+		"	mySliderSymb = document.createElementNS(svgNS,\"use\"));\n"
+		"	mySliderSymb.setAttributeNS(xlinkNS,\"xlink:href\"),\"#\"+this.sliderSymb);\n"
+		"	var myStartDistance = this.length - ((this.value2 - this.startVal) / (this.value2 - this.value1)) * this.length;\n"
+		"	var myPosX = this.x1 + toRectX(this.direction,myStartDistance);\n"
+		"	var myPosY = this.y1 + toRectY(this.direction,myStartDistance);\n"
+		"	var myTransformString = \"translate(\"+myPosX+\"),\"+myPosY+\")) rotate(\" + Math.round(this.direction / Math.PI * 180) + \"))\");\n"
+		"	mySliderSymb.setAttributeNS(null,\"transform\"),myTransformString);\n"
+		"	mySliderSymb.setAttributeNS(null,\"id\"),this.sliderGroupId+\"_sliderSymbol\"));\n"
+		"	this.sliderGroup.appendChild(mySliderSymb);\n"
+		"}\n"
+		"\n"
+		"//remove all slider elements\n"
+		"slider.prototype.removeSlider = function() {\n"
+		"	var mySliderSymb = document.getElementById(this.sliderGroup+\"_sliderSymbol\"));\n"
+		"	this.sliderGroup.removeChild(mySliderSymb);\n"
+		"	var mySliderLine = document.getElementById(this.sliderGroup+\"_visibleSliderLine\"));\n"
+		"	this.sliderGroup.removeChild(mySliderLine);\n"
+		"	var mySliderLine = document.getElementById(this.sliderGroup+\"_invisibleSliderLine\"));\n"
+		"	this.sliderGroup.removeChild(mySliderLine);\n"
+		"}\n"
+		"\n"
+		"//handle events\n"
+		"slider.prototype.handleEvent = function(evt) {\n"
+		"	this.drag(evt);\n"
+		"}\n"
+		"\n"
+		"//drag slider\n"
+		"slider.prototype.drag = function(evt) {\n"
+		"	if (evt.type == \"mousedown\" || (evt.type == \"mousemove\" && this.slideStatus == 1)) {\n"
+		"	//get coordinate in slider coordinate system\n"
+		"	var coordPoint = myMapApp.calcCoord(evt,this.sliderLine);\n"
+		"	//draw normal line for first vertex\n"
+		"	var ax = this.x2 - this.x1;\n"
+		"	var ay = this.y2 - this.y1;\n"
+		"	//normal vector 1\n"
+		"	var px1 = parseFloat(this.x1) + ay * -1;\n"
+		"	var py1 = parseFloat(this.y1) + ax;\n"
+		"	//normal vector 2\n"
+		"	var px2 = parseFloat(this.x2) + ay * -1;\n"
+		"	var py2 = parseFloat(this.y2) + ax;\n"
+		"		\n"
+		"	if (leftOfTest(coordPoint.x,coordPoint.y,this.x1,this.y1,px1,py1) == 0 && leftOfTest(coordPoint.x,coordPoint.y,this.x2,this.y2,px2,py2) == 1) {\n"
+		"		if (evt.type == \"mousedown\" && evt.detail == 1) {\n"
+		"		this.slideStatus = 1;\n"
+		"		document.documentElement.addEventListener(\"mousemove\"),this,false);\n"
+		"		document.documentElement.addEventListener(\"mouseup\"),this,false);\n"
+		"		}\n"
+		"		myNewPos = intersect2lines(this.x1,this.y1,this.x2,this.y2,coordPoint.x,coordPoint.y,coordPoint.x + ay * -1,coordPoint.y + ax);\n"
+		"		var myPercentage = toPolarDist(myNewPos['x'] - this.x1,myNewPos['y'] - this.y1) / this.length;\n"
+		"		this.value = this.value1 + myPercentage * (this.value2 - this.value1);\n"
+		"	}\n"
+		"	else {\n"
+		"		var myNewPos = new Array();\n"
+		"		if (leftOfTest(coordPoint.x,coordPoint.y,this.x1,this.y1,px1,py1) == 0 && leftOfTest(coordPoint.x,coordPoint.y,this.x2,this.y2,px2,py2) == 0) {\n"
+		"		//more than max\n"
+		"		this.value = this.value2;\n"
+		"		myNewPos['x'] = this.x2;\n"
+		"		myNewPos['y'] = this.y2;\n"
+		"		}\n"
+		"		if (leftOfTest(coordPoint.x,coordPoint.y,this.x1,this.y1,px1,py1) == 1 && leftOfTest(coordPoint.x,coordPoint.y,this.x2,this.y2,px2,py2) == 1) {\n"
+		"		//less than min\n"
+		"		this.value = this.value1;\n"
+		"		myNewPos['x'] = this.x1;\n"
+		"		myNewPos['y'] = this.y1;\n"
+		"		}\n"
+		"	}\n"
+		"	var myTransformString = \"translate(\"+myNewPos['x']+\"),\"+myNewPos['y']+\")) rotate(\" + Math.round(this.direction / Math.PI * 180) + \"))\");\n"
+		"	document.getElementById(this.sliderGroupId+\"_sliderSymbol\")).setAttributeNS(null,\"transform\"),myTransformString);\n"
+		"	this.getValue();\n"
+		"	}\n"
+		"	if (evt.type == \"mouseup\" && evt.detail == 1) {\n"
+		"	if (this.slideStatus == 1) {\n"
+		"		this.slideStatus = 2;\n"
+		"		document.documentElement.removeEventListener(\"mousemove\"),this,false);\n"
+		"		document.documentElement.removeEventListener(\"mouseup\"),this,false);\n"
+		"		this.getValue();\n"
+		"	}\n"
+		"	this.slideStatus = 0;\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//this code is executed, after the slider is released\n"
+		"//you can use switch/if to detect which slider was used (use this.sliderGroup) for that\n"
+		"slider.prototype.getValue = function() {\n"
+		"	if (this.slideStatus == 1 && this.mouseMoveBool == true) {\n"
+		"	if (typeof(this.functionToCall) == \"function\")) {\n"
+		"		this.functionToCall(\"change\"),this.sliderGroupId,this.value);\n"
+		"	}\n"
+		"	if (typeof(this.functionToCall) == \"object\")) {\n"
+		"		this.functionToCall.getSliderVal(\"change\"),this.sliderGroupId,this.value);\n"
+		"	}\n"
+		"	if (typeof(this.functionToCall) == \"string\")) {\n"
+		"		eval(this.functionToCall+\"('change','\"+this.sliderGroupId+\"',\"+this.value+\"))\"));\n"
+		"	}\n"
+		"	}\n"
+		"	if (this.slideStatus == 2) {\n"
+		"	if (typeof(this.functionToCall) == \"function\")) {\n"
+		"		this.functionToCall(\"release\"),this.sliderGroupId,this.value);\n"
+		"	}\n"
+		"	if (typeof(this.functionToCall) == \"object\")) {\n"
+		"		this.functionToCall.getSliderVal(\"release\"),this.sliderGroupId,this.value);\n"
+		"	}\n"
+		"	if (typeof(this.functionToCall) == \"string\")) {\n"
+		"		eval(this.functionToCall+\"('release','\"+this.sliderGroupId+\"',\"+this.value+\"))\"));\n"
+		"	}\n"
+		"	}\n"
+		"}	\n"
+		"\n"
+		"//this is to set the value from other scripts\n"
+		"slider.prototype.setValue = function(value) {\n"
+		"	var myPercAlLine = (value - this.value1) / (this.value2 - this.value1);\n"
+		"	this.value = myPercAlLine;\n"
+		"	var myPosX = this.x1 + toRectX(this.direction,this.length * myPercAlLine);\n"
+		"	var myPosY = this.y1 + toRectY(this.direction,this.length * myPercAlLine);\n"
+		"	var myTransformString = \"translate(\"+myPosX+\"),\"+myPosY+\")) rotate(\" + Math.round(this.direction / Math.PI * 180) + \"))\");\n"
+		"	document.getElementById(this.sliderGroupId+\"_sliderSymbol\")).setAttributeNS(null,\"transform\"),myTransformString);\n"
+		"}\n"
+		"\n"
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_Helper(void)
+{
+	return( SG_STR_MBTOSG(
+		"/*\n"
+		"ECMAScript helper functions\n"
+		"Copyright (C) <2004>	<Andreas Neumann>\n"
+		"Version 1.1, 2004-11-18\n"
+		"neumann at karto.baug.ethz.ch\n"
+		"http://www.carto.net/\n"
+		"http://www.carto.net/neumann/\n"
+		"\n"
+		"Credits: numerous people on svgdevelopers at yahoogroups.com\n"
+		"\n"
+		"This ECMA script library is free software; you can redistribute it and/or\n"
+		"modify it under the terms of the GNU Lesser General Public\n"
+		"License as published by the Free Software Foundation; either\n"
+		"version 2.1 of the License, or (at your option) any later version.\n"
+		"\n"
+		"This library is distributed in the hope that it will be useful,\n"
+		"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+		"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the GNU\n"
+		"Lesser General Public License for more details.\n"
+		"\n"
+		"You should have received a copy of the GNU Lesser General Public\n"
+		"License along with this library (http://www.carto.net/papers/svg/resources/lesser_gpl.txt); if not, write to the Free Software\n"
+		"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA	02111-1307	USA\n"
+		"\n"
+		"----\n"
+		"\n"
+		"original document site: http://www.carto.net/papers/svg/resources/helper_functions.js\n"
+		"Please contact the author in case you want to use code or ideas commercially.\n"
+		"If you use this code, please include this copyright header, the included full\n"
+		"LGPL 2.1 text and read the terms provided in the LGPL 2.1 license\n"
+		"(http://www.gnu.org/copyleft/lesser.txt)\n"
+		"\n"
+		"-------------------------------\n"
+		"\n"
+		"Please report bugs and send improvements to neumann at karto.baug.ethz.ch\n"
+		"If you use these scripts, please link to the original (http://www.carto.net/papers/svg/navigationTools/)\n"
+		"somewhere in the source-code-comment or the \"about\" of your project and give credits, thanks!\n"
+		"\n"
+		"*/\n"
+		"\n"
+		"//global variables necessary to create elements in these namespaces, do not delete them!!!!\n"
+		"var svgNS = \"http://www.w3.org/2000/svg\");\n"
+		"var xlinkNS = \"http://www.w3.org/1999/xlink\");\n"
+		"var cartoNS = \"http://www.carto.net/attrib\");\n"
+		"var attribNS = \"http://www.carto.net/attrib\");\n"
+		"var batikNS = \"http://xml.apache.org/batik/ext\");\n"
+		"\n"
+		"/* ----------------------- helper functions to calculate stuff ---------------- */\n"
+		"/* ---------------------------------------------------------------------------- */\n"
+		"function toPolarDir(xdiff,ydiff) { // Subroutine for calculating polar Coordinates\n"
+		"	direction = (Math.atan2(ydiff,xdiff));\n"
+		"	//result is angle in radian\n"
+		"	return(direction);\n"
+		"}\n"
+		"\n"
+		"function toPolarDist(xdiff,ydiff) { // Subroutine for calculating polar Coordinates\n"
+		"	distance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n"
+		"	return(distance);\n"
+		"}\n"
+		"\n"
+		"function toRectX(direction,distance) { // Subroutine for calculating cartesic coordinates\n"
+		"	x = distance * Math.cos(direction);\n"
+		"	y = distance * Math.sin(direction);\n"
+		"	return(x);\n"
+		"}\n"
+		"\n"
+		"function toRectY(direction,distance) { // Subroutine for calculating cartesic coordinates\n"
+		"	x = distance * Math.cos(direction);\n"
+		"	y = distance * Math.sin(direction);\n"
+		"	return(y);\n"
+		"}\n"
+		"\n"
+		"//Converts degrees to radians.\n"
+		"function DegToRad(deg) {\n"
+		"	return (deg / 180.0 * Math.PI);\n"
+		"}\n"
+		"\n"
+		"//Converts radians to degrees.\n"
+		"function RadToDeg(rad) {\n"
+		"	return (rad / Math.PI * 180.0);\n"
+		"}\n"
+		"\n"
+		"//converts decimal degrees to degree/minutes/seconds\n"
+		"function dd2dms(dd) {\n"
+		"	var minutes = (dd - Math.floor(dd)) * 60;\n"
+		"	var seconds = (minutes - Math.floor(minutes)) * 60;\n"
+		"	var minutes = Math.floor(minutes);\n"
+		"	var degrees = Math.floor(dd);\n"
+		"	return {deg:degrees,min:minutes,sec:seconds};\n"
+		"}\n"
+		"\n"
+		"//converts degree/minutes/seconds to decimal degrees\n"
+		"function dms2dd(deg,min,sec) {\n"
+		"	return deg + (min / 60) + (sec / 3600);\n"
+		"}\n"
+		"\n"
+		"//log functions that do not exist in Math object\n"
+		"function log(x,b) {\n"
+		"	if(b==null) b=Math.E;\n"
+		"	return Math.log(x)/Math.log(b);\n"
+		"}\n"
+		"\n"
+		"//gets 4 z-values (4 corners), a position, delta x and delty and a cellsize as input and returns interpolated z-value\n"
+		"function intBilinear(za,zb,zc,zd,xpos,ypos,ax,ay,cellsize) { //bilinear interpolation function\n"
+		"	e = (xpos - ax) / cellsize;\n"
+		"	f = (ypos - ay) / cellsize;\n"
+		"\n"
+		"	//calculation of weights\n"
+		"	wa = (1 - e) * (1 - f);\n"
+		"	wb = e * (1 - f);\n"
+		"	wc = e * f;\n"
+		"	wd = f * (1 - e);\n"
+		"\n"
+		"	height_interpol = wa * zc + wb * zd + wc * za + wd * zb;\n"
+		"\n"
+		"	return (height_interpol);	\n"
+		"}\n"
+		"\n"
+		"//test if point is left of or right of, result is 1 (leftof) or 0 (rightof)\n"
+		"function leftOfTest(pointx,pointy,linex1,liney1,linex2,liney2) {\n"
+		"	result = (liney1 - pointy) * (linex2 - linex1) - (linex1 - pointx) * (liney2 - liney1);\n"
+		"	if (result < 0) {\n"
+		"	leftof = 1; //case left of\n"
+		"	}\n"
+		"	else {\n"
+		"	leftof = 0; //case left of	\n"
+		"	}\n"
+		"	return(leftof);\n"
+		"}\n"
+		"\n"
+		"//input is point coordinate, and 2 line coordinates\n"
+		"function distFromLine(xpoint,ypoint,linex1,liney1,linex2,liney2) {\n"
+		"	dx = linex2 - linex1;\n"
+		"	dy = liney2 - liney1;\n"
+		"	distance = (dy * (xpoint - linex1) - dx * (ypoint - liney1)) / Math.sqrt(Math.pow(dx,2) + Math.pow(dy,2));\n"
+		"	return(distance);\n"
+		"}\n"
+		"\n"
+		"//converts radian value to degrees\n"
+		"function radian2deg(radian) {\n"
+		"	deg = radian / Math.PI * 180;\n"
+		"	return(deg);\n"
+		"}\n"
+		"\n"
+		"//input is two vectors (a1,a2 is vector a, b1,b2 is vector b), output is angle in radian\n"
+		"//Formula: Acos from	Scalaproduct of the two vectors divided by ( norm (deutsch Betrag) vector 1 by norm vector 2\n"
+		"//see http://www.mathe-online.at/mathint/vect2/i.html#Winkel\n"
+		"function angleBetwTwoLines(a1,a2,b1,b2) {\n"
+		"	angle = Math.acos((a1 * b1 + a2 * b2) / (Math.sqrt(Math.pow(a1,2) + Math.pow(a2,2)) * Math.sqrt(Math.pow(b1,2) + Math.pow(b2,2))));\n"
+		"	return(angle);\n"
+		"}\n"
+		"\n"
+		"//input is two vectors (a1,a2 is vector a, b1,b2 is vector b), output is new vector c2 returned as array\n"
+		"//Formula: Vektor a divided by Norm Vector a (Betrag) plus Vektor b divided by Norm Vector b (Betrag)\n"
+		"//see http://www.mathe-online.at/mathint/vect1/i.html#Winkelsymmetrale\n"
+		"function calcBisectorVector(a1,a2,b1,b2) {\n"
+		"	betraga = Math.sqrt(Math.pow(a1,2) + Math.pow(a2,2));\n"
+		"	betragb = Math.sqrt(Math.pow(b1,2) + Math.pow(b2,2));\n"
+		"	c = new Array();\n"
+		"	c[0] = a1 / betraga + b1 / betragb;\n"
+		"	c[1] = a2 / betraga + b2 / betragb;\n"
+		"	return(c);\n"
+		"}\n"
+		"\n"
+		"//input is two vectors (a1,a2 is vector a, b1,b2 is vector b), output is angle in radian\n"
+		"//Formula: Vektor a divided by Norm Vector a (Betrag) plus Vektor b divided by Norm Vector b (Betrag)\n"
+		"//see http://www.mathe-online.at/mathint/vect1/i.html#Winkelsymmetrale\n"
+		"function calcBisectorAngle(a1,a2,b1,b2) {\n"
+		"	betraga = Math.sqrt(Math.pow(a1,2) + Math.pow(a2,2));\n"
+		"	betragb = Math.sqrt(Math.pow(b1,2) + Math.pow(b2,2));\n"
+		"	c1 = a1 / betraga + b1 / betragb;\n"
+		"	c2 = a2 / betraga + b2 / betragb;\n"
+		"	angle = toPolarDir(c1,c2);\n"
+		"	return(angle);\n"
+		"}\n"
+		"\n"
+		"function intersect2lines(line1x1,line1y1,line1x2,line1y2,line2x1,line2y1,line2x2,line2y2) {\n"
+		"	//formula see http://astronomy.swin.edu.au/~pbourke/geometry/lineline2d/\n"
+		"	var result = new Array();\n"
+		"	var denominator = (line2y2 - line2y1)*(line1x2 - line1x1) - (line2x2 - line2x1)*(line1y2 - line1y1);\n"
+		"	if (denominator == 0) {\n"
+		"	alert(\"lines are parallel\"));\n"
+		"	}\n"
+		"	else {\n"
+		"	ua = ((line2x2 - line2x1)*(line1y1 - line2y1) - (line2y2 - line2y1)*(line1x1 - line2x1)) / denominator;\n"
+		"	ub = ((line1x2 - line1x1)*(line1y1 - line2y1) - (line1y2 - line1y1)*(line1x1 - line2x1)) / denominator;\n"
+		"	}\n"
+		"	result[\"x\"] = line1x1 + ua * (line1x2 - line1x1);\n"
+		"	result[\"y\"] = line1y1 + ua * (line1y2 - line1y1);\n"
+		"	return(result);\n"
+		"}\n"
+		"\n"
+		"/* ----------------------- helper function to sort arrays ---------------- */\n"
+		"/* ----------------------------------------------------------------------- */\n"
+		"//my own sort function, uses only first part of string (population value)\n"
+		"function mySort(a,b) {\n"
+		"	var myResulta = a.split(\"+\"));\n"
+		"	var myResultb = b.split(\"+\"));\n"
+		"	if (parseFloat(myResulta[0]) < parseFloat(myResultb[0])) {\n"
+		"	return 1;\n"
+		"	}\n"
+		"	else {\n"
+		"	return -1;\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"/* ----------------------- helper function format number strings -------------- */\n"
+		"/* ---------------------------------------------------------------------------- */\n"
+		"//formatting number strings\n"
+		"//this function add's \"'\" to a number every third digit\n"
+		"function formatNumberString(myString) {\n"
+		"	//check if of type string, if number, convert it to string\n"
+		"	if (typeof(myString) == \"number\")) {\n"
+		"	myTempString = myString.toString();\n"
+		"	}\n"
+		"	else {\n"
+		"	myTempString = myString;\n"
+		"	}\n"
+		"	var myNewString=\"\");\n"
+		"	//if it contains a comma, it will be split\n"
+		"	var splitResults = myTempString.split(\".\"));\n"
+		"	var myCounter= splitResults[0].length;\n"
+		"	if (myCounter > 3) {\n"
+		"	while(myCounter > 0) {\n"
+		"		if (myCounter > 3) {\n"
+		"		myNewString = \"),\" + splitResults[0].substr(myCounter - 3,3) + myNewString;\n"
+		"		}\n"
+		"		else {\n"
+		"		myNewString = splitResults[0].substr(0,myCounter) + myNewString;\n"
+		"		}\n"
+		"		myCounter -= 3;\n"
+		"	}\n"
+		"	}\n"
+		"	else {\n"
+		"	myNewString = splitResults[0];\n"
+		"	}\n"
+		"	//concatenate if it contains a comma\n"
+		"	if (splitResults[1]) {\n"
+		"	myNewString = myNewString + \".\" + splitResults[1];\n"
+		"	}\n"
+		"	return myNewString;\n"
+		"}\n"
+		"\n"
+		"//function for status Bar\n"
+		"function statusChange(statusText) {\n"
+		"	document.getElementById(\"statusText\")).firstChild.nodeValue = \"Statusbar: \" + statusText;\n"
+		"}\n"
+		"\n"
+		"//scale an object\n"
+		"function scaleObject(evt,factor) {\n"
+		"//reference to the currently selected object\n"
+		"	var element = evt.currentTarget;\n"
+		"	var myX = element.getAttributeNS(null,\"x\"));\n"
+		"	var myY = element.getAttributeNS(null,\"y\"));\n"
+		"	var newtransform = \"scale(\" + factor + \")) translate(\" + (myX * 1 / factor - myX) + \" \" + (myY * 1 / factor - myY) +\"))\");\n"
+		"	element.setAttributeNS(null,'transform', newtransform);\n"
+		"}\n"
+		"\n"
+		"//this code is copied from Kevin Lindsey\n"
+		"//http://www.kevlindev.com/tutorials/basics/transformations/toUserSpace/index.htm\n"
+		"function getTransformToRootElement(node) {\n"
+		"	try {\n"
+		"	//this part is for fully conformant players\n"
+		"	var CTM = node.getTransformToElement(document.documentElement);\n"
+		"	}\n"
+		"	catch (ex) {\n"
+		"	//this part is for ASV3 or other non-conformant players\n"
+		"	// Initialize our CTM the node's Current Transformation Matrix\n"
+		"	var CTM = node.getCTM();\n"
+		"	// Work our way through the ancestor nodes stopping at the SVG Document\n"
+		"	while ( ( node = node.parentNode ) != document ) {\n"
+		"		// Multiply the new CTM to the one with what we have accumulated so far\n"
+		"		CTM = node.getCTM().multiply(CTM);\n"
+		"	}\n"
+		"	}\n"
+		"	return CTM;\n"
+		"}\n"
+		"\n"
+		"//calculate HSV 2 RGB: HSV (h 0 to 360, sat and val are between 0 and 1), RGB between 0 and 255\n"
+		"function hsv2rgb(hue,sat,val) {\n"
+		"	//alert(\"Hue:\"+hue);\n"
+		"	var rgbArr = new Array();\n"
+		"	if ( sat == 0) {\n"
+		"	rgbArr[\"red\"] = Math.round(val * 255);\n"
+		"	rgbArr[\"green\"] = Math.round(val * 255);\n"
+		"	rgbArr[\"blue\"] = Math.round(val * 255);\n"
+		"	}\n"
+		"	else {\n"
+		"	var h = hue / 60;\n"
+		"	var i = Math.floor(h);\n"
+		"	var f = h - i;\n"
+		"	if (i % 2 == 0) {\n"
+		"		f = 1 - f;\n"
+		"	}\n"
+		"	var m = val * (1 - sat); \n"
+		"	var n = val * (1 - sat * f);\n"
+		"	switch(i) {\n"
+		"		case 0:\n"
+		"		rgbArr[\"red\"] = val;\n"
+		"		rgbArr[\"green\"] = n;\n"
+		"		rgbArr[\"blue\"] = m;\n"
+		"		break;\n"
+		"		case 1:\n"
+		"		rgbArr[\"red\"] = n;\n"
+		"		rgbArr[\"green\"] = val;\n"
+		"		rgbArr[\"blue\"] = m;\n"
+		"		break;\n"
+		"		case 2:\n"
+		"		rgbArr[\"red\"] = m;\n"
+		"		rgbArr[\"green\"] = val;\n"
+		"		rgbArr[\"blue\"] = n;\n"
+		"		break;\n"
+		"		case 3:\n"
+		"		rgbArr[\"red\"] = m;\n"
+		"		rgbArr[\"green\"] = n;\n"
+		"		rgbArr[\"blue\"] = val;\n"
+		"		break;\n"
+		"		case 4:\n"
+		"		rgbArr[\"red\"] = n;\n"
+		"		rgbArr[\"green\"] = m;\n"
+		"		rgbArr[\"blue\"] = val;\n"
+		"		break;\n"
+		"		case 5:\n"
+		"		rgbArr[\"red\"] = val;\n"
+		"		rgbArr[\"green\"] = m;\n"
+		"		rgbArr[\"blue\"] = n;\n"
+		"		break;\n"
+		"		case 6:\n"
+		"		rgbArr[\"red\"] = val;\n"
+		"		rgbArr[\"green\"] = n;\n"
+		"		rgbArr[\"blue\"] = m;\n"
+		"		break;\n"
+		"	}\n"
+		"	rgbArr[\"red\"] = Math.round(rgbArr[\"red\"] * 255);\n"
+		"	rgbArr[\"green\"] = Math.round(rgbArr[\"green\"] * 255);\n"
+		"	rgbArr[\"blue\"] = Math.round(rgbArr[\"blue\"] * 255);\n"
+		"	}\n"
+		"	return rgbArr;\n"
+		"}\n"
+		"\n"
+		"//calculate rgb to hsv values\n"
+		"function rgb2hsv (red,green,blue) {\n"
+		"	//input between 0 and 255 --> normalize to 0 to 1\n"
+		"	//result = \n"
+		"	var hsvArr = new Array();\n"
+		"	red = red / 255;\n"
+		"	green = green / 255;\n"
+		"	blue = blue / 255;\n"
+		"	myMax = Math.max(red, Math.max(green,blue));\n"
+		"	myMin = Math.min(red, Math.min(green,blue));\n"
+		"	v = myMax;\n"
+		"	if (myMax > 0) {\n"
+		"	s = (myMax - myMin) / myMax;\n"
+		"	}\n"
+		"	else {\n"
+		"	s = 0;\n"
+		"	}\n"
+		"	if (s > 0) {\n"
+		"	myDiff = myMax - myMin;\n"
+		"	rc = (myMax - red) / myDiff;\n"
+		"	gc = (myMax - green) / myDiff;\n"
+		"	bc = (myMax - blue) / myDiff;\n"
+		"	if (red == myMax) {\n"
+		"		h = (bc - gc) / 6;\n"
+		"	}\n"
+		"	if (green == myMax) {\n"
+		"		h = (2 + rc - bc) / 6;\n"
+		"	}\n"
+		"	if (blue == myMax) {\n"
+		"		h = (4 + gc - rc) / 6;\n"
+		"	}\n"
+		"	}\n"
+		"	else {\n"
+		"	h = 0;\n"
+		"	}\n"
+		"	if (h < 0) {\n"
+		"	h += 1;\n"
+		"	}\n"
+		"	hsvArr[\"hue\"] = Math.round(h * 360);\n"
+		"	hsvArr[\"sat\"] = s;\n"
+		"	hsvArr[\"val\"] = v;\n"
+		"	return hsvArr;\n"
+		"}\n"
+		"\n"
+		"//populate an array that can be addressed by both a key or an index nr\n"
+		"function assArrayPopulate(arrayKeys,arrayValues) {\n"
+		"	var returnArray = new Array();\n"
+		"	if (arrayKeys.length != arrayValues.length) {\n"
+		"	alert(\"error: arrays do not have same length!\"));\n"
+		"	}\n"
+		"	else {\n"
+		"	for (i=0;i<arrayKeys.length;i++) {\n"
+		"		returnArray[arrayKeys[i]] = arrayValues[i];\n"
+		"	}\n"
+		"	}\n"
+		"	return returnArray;\n"
+		"}\n"
+		"\n"
+		"//replace special (non-ASCII) characters with their charCode\n"
+		"function replaceSpecialChars(myString) {\n"
+		"	for (i=161;i<256;i++) {\n"
+		"		re = new RegExp(\"&#\"+i+\");\"),\"g\"));\n"
+		"		myString = myString.replace(re,String.fromCharCode(i));\n"
+		"	}\n"
+		"	return myString;\n"
+		"}\n"
+		"\n"
+		"/* ----------------------- getXMLData object ----------------------------- */\n"
+		"/* ----------------------------------------------------------------------- */\n"
+		"//this object allows to make network requests using getURL or XMLHttpRequest\n"
+		"//you may specify a url and a callBackFunction\n"
+		"//the callBackFunction receives a XML node representing the rootElement of the fragment received\n"
+		"function getXMLData(url,callBackFunction) {\n"
+		"	this.url = url;\n"
+		"	this.callBackFunction = callBackFunction;\n"
+		"	this.xmlRequest = null;\n"
+		"} \n"
+		"\n"
+		"getXMLData.prototype.getData = function() {\n"
+		"	//call getURL() if available\n"
+		"	if (window.getURL) {\n"
+		"	getURL(this.url,this);\n"
+		"	}\n"
+		"	//or call XMLHttpRequest() if available\n"
+		"	else if (window.XMLHttpRequest) {\n"
+		"	this.xmlRequest = new XMLHttpRequest();\n"
+		"	this.xmlRequest.overrideMimeType(\"text/xml\"));\n"
+		"	this.xmlRequest.open(\"GET\"),this.url,true);\n"
+		"	this.xmlRequest.onreadystatechange = this;\n"
+		"	this.xmlRequest.send(null);\n"
+		"	}\n"
+		"	//write an error message if neither method is available\n"
+		"	else {\n"
+		"	alert(\"your browser/svg viewer neither supports window.getURL nor window.XMLHttpRequest!\"));\n"
+		"	}	\n"
+		"}\n"
+		"\n"
+		"//this is the callback method for the getURL function\n"
+		"getXMLData.prototype.operationComplete = function(data) {\n"
+		"	//check if data has a success property\n"
+		"	if (data.success) {\n"
+		"	//parse content of the XML format to the variable \"node\"\n"
+		"	var node = parseXML(data.content,document);\n"
+		"	this.callBackFunction(node.firstChild);\n"
+		"	}\n"
+		"	else {\n"
+		"	alert(\"something went wrong with dynamic loading of geometry!\"));\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//this method receives data from XMLHttpRequest\n"
+		"getXMLData.prototype.handleEvent = function() {\n"
+		"	if (this.xmlRequest.readyState == 4) {\n"
+		"	this.callBackFunction(this.xmlRequest.responseXML.documentElement);\n"
+		"	}	\n"
+		"}\n"
+		"\n"
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_Buttons(void)
+{
+	return( SG_STR_MBTOSG(
+		"function button(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset) {\n"
+		"	if (arguments.length > 0) {\n"
+		"	this.init(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset);\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"button.prototype.init = function(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset) {\n"
+		"	this.groupId = groupId; //the group id where all new content is appended to\n"
+		"	this.functionToCall = functionToCall; //function to be called if button was pressed\n"
+		"	this.buttonType = buttonType; //button type: currently either \"rect\" or \"ellipse\"\n"
+		"	this.buttonText = buttonText; //default value to be filled in when textbox is created\n"
+		"	this.buttonSymbolId = buttonSymbolId; //id to a symbol to be used as a button graphics\n"
+		"	this.x = x; //left of button rectangle\n"
+		"	this.y = y; //top of button rectangle\n"
+		"	this.width = width; //button rectangle width\n"
+		"	this.height = height; //button rectangle height\n"
+		"	this.fontSize = fontSize; //font size in user units/pixels\n"
+		"	this.fontFamily = fontFamily; //font family for text element, can be an empty string for image buttons\n"
+		"	this.textFill = textFill; //the fill color of the text for text buttons, can be an empty string for image buttons\n"
+		"	this.buttonFill = buttonFill; //the fill color of the button rectangle or ellipse\n"
+		"	this.shadeLightFill = shadeLightFill; //light fill color simulating 3d effect\n"
+		"	this.shadeDarkFill = shadeDarkFill; //dark fill color simulating 3d effect\n"
+		"	this.shadowOffset = shadowOffset; //shadow offset in viewBox units\n"
+		"	this.buttonGroup = document.getElementById(this.groupId); //reference to the button group node\n"
+		"	this.upperLeftLine = null; //later a reference to the upper left line simulating 3d effect\n"
+		"	this.buttonRect = null; //later a reference to the button area (rect)\n"
+		"	this.buttonTextElement = null; //later a reference to the button text\n"
+		"	this.buttonSymbolInstance = null; //later a reference to the button symbol\n"
+		"	this.deActivateRect = null; //later a reference to a rectangle that can be used to deactivate the button\n"
+		"	this.activated = true; //a property indicating if button is activated or not\n"
+		"	this.lowerRightLine = null; //later a reference to the lower right line simulating 3d effect\n"
+		"	this.createButton(); //method to initialize button\n"
+		"	this.timer = new Timer(this); //a Timer instance for calling the functionToCall\n"
+		"	this.timerMs = 200; //a constant of this object that is used in conjunction with the timer - functionToCall is called after 200 ms\n"
+		"}\n"
+		"\n"
+		"//create button\n"
+		"button.prototype.createButton = function() {\n"
+		"	//create upper left button line or ellipse\n"
+		"	if (this.buttonType == \"rect\")) {\n"
+		"	this.upperLeftShadow = document.createElementNS(svgNS,\"rect\"));\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"x\"),this.x - this.shadowOffset);\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"y\"),this.y - this.shadowOffset);\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"width\"),this.width);\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"height\"),this.height);\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"points\"),this.x+\"),\"+(this.y+this.height)+\" \"+this.x+\"),\"+this.y+\" \"+(this.x+this.width)+\"),\"+this.y);\n"
+		"	}\n"
+		"	else if (this.buttonType == \"ellipse\")) {\n"
+		"	this.upperLeftShadow = document.createElementNS(svgNS,\"ellipse\"));\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"cx\"),this.x + this.width * 0.5 - this.shadowOffset);\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"cy\"),this.y + this.height * 0.5 - this.shadowOffset);\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"rx\"),this.width * 0.5);\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"ry\"),this.height * 0.5);\n"
+		"	}\n"
+		"	else {\n"
+		"	alert(\"buttonType '\"+this.buttonType+\"' not supported. You need to specify 'rect' or 'ellipse'\"));\n"
+		"	}\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"fill\"),this.shadeLightFill);\n"
+		"	this.buttonGroup.appendChild(this.upperLeftShadow);\n"
+		"\n"
+		"	//create lower right button line or ellipse\n"
+		"	if (this.buttonType == \"rect\")) {\n"
+		"	this.lowerRightShadow = document.createElementNS(svgNS,\"rect\"));\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"x\"),this.x + this.shadowOffset);\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"y\"),this.y + this.shadowOffset);\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"width\"),this.width);\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"height\"),this.height);\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"points\"),this.x+\"),\"+(this.y+this.height)+\" \"+this.x+\"),\"+this.y+\" \"+(this.x+this.width)+\"),\"+this.y);\n"
+		"	}\n"
+		"	else if (this.buttonType == \"ellipse\")) {\n"
+		"	this.lowerRightShadow = document.createElementNS(svgNS,\"ellipse\"));\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"cx\"),this.x + this.width * 0.5 + this.shadowOffset);\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"cy\"),this.y + this.height * 0.5 + this.shadowOffset);\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"rx\"),this.width * 0.5);\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"ry\"),this.height * 0.5);\n"
+		"	}\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"fill\"),this.shadeDarkFill);\n"
+		"	this.buttonGroup.appendChild(this.lowerRightShadow);\n"
+		"\n"
+		"	//create buttonRect\n"
+		"	if (this.buttonType == \"rect\")) {\n"
+		"	this.buttonRect = document.createElementNS(svgNS,\"rect\"));\n"
+		"	this.buttonRect.setAttributeNS(null,\"x\"),this.x);\n"
+		"	this.buttonRect.setAttributeNS(null,\"y\"),this.y);\n"
+		"	this.buttonRect.setAttributeNS(null,\"width\"),this.width);\n"
+		"	this.buttonRect.setAttributeNS(null,\"height\"),this.height);\n"
+		"	}\n"
+		"	else if (this.buttonType == \"ellipse\")) {\n"
+		"	this.buttonRect = document.createElementNS(svgNS,\"ellipse\"));\n"
+		"	this.buttonRect.setAttributeNS(null,\"cx\"),this.x + this.width * 0.5);\n"
+		"	this.buttonRect.setAttributeNS(null,\"cy\"),this.y + this.height * 0.5);\n"
+		"	this.buttonRect.setAttributeNS(null,\"rx\"),this.width * 0.5);\n"
+		"	this.buttonRect.setAttributeNS(null,\"ry\"),this.height * 0.5);\n"
+		"	}\n"
+		"	this.buttonRect.setAttributeNS(null,\"fill\"),this.buttonFill);\n"
+		"	this.buttonRect.setAttributeNS(null,\"cursor\"),\"pointer\"));\n"
+		"	this.buttonRect.addEventListener(\"mousedown\"),this,false);\n"
+		"	this.buttonRect.addEventListener(\"mouseup\"),this,false);\n"
+		"	this.buttonRect.addEventListener(\"click\"),this,false);\n"
+		"	this.buttonGroup.appendChild(this.buttonRect);\n"
+		"	\n"
+		"	if (this.buttonText != undefined) {\n"
+		"	//create text element and add clipping path attribute\n"
+		"	this.buttonTextElement = document.createElementNS(svgNS,\"text\"));\n"
+		"	this.buttonTextElement.setAttributeNS(null,\"x\"),(this.x + this.width / 2));\n"
+		"	this.buttonTextElement.setAttributeNS(null,\"y\"),(this.y + this.height - ((this.height - this.fontSize) / 1.75)));\n"
+		"	this.buttonTextElement.setAttributeNS(null,\"fill\"),this.textFill);\n"
+		"	this.buttonTextElement.setAttributeNS(null,\"font-family\"),this.fontFamily);\n"
+		"	this.buttonTextElement.setAttributeNS(null,\"font-size\"),this.fontSize+\"px\"));\n"
+		"	this.buttonTextElement.setAttributeNS(null,\"pointer-events\"),\"none\"));\n"
+		"	this.buttonTextElement.setAttributeNS(null,\"text-anchor\"),\"middle\"));\n"
+		"	this.buttonTextElement.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\"),\"space\"),\"preserve\"));\n"
+		"	var textboxTextContent = document.createTextNode(this.buttonText);\n"
+		"	this.buttonTextElement.appendChild(textboxTextContent);\n"
+		"	this.buttonGroup.appendChild(this.buttonTextElement);\n"
+		"	}\n"
+		"	\n"
+		"	if (this.buttonSymbolId != undefined) {\n"
+		"	this.buttonSymbolInstance = document.createElementNS(svgNS,\"use\"));\n"
+		"	this.buttonSymbolInstance.setAttributeNS(null,\"x\"),(this.x + this.width / 2));\n"
+		"	this.buttonSymbolInstance.setAttributeNS(null,\"y\"),(this.y + this.height / 2));\n"
+		"	this.buttonSymbolInstance.setAttributeNS(xlinkNS,\"href\"),\"#\"+this.buttonSymbolId);\n"
+		"	this.buttonSymbolInstance.setAttributeNS(null,\"pointer-events\"),\"none\"));\n"
+		"	this.buttonGroup.appendChild(this.buttonSymbolInstance);\n"
+		"	}\n"
+		"	\n"
+		"	//create rectangle to deactivate the button\n"
+		"	if (this.buttonType == \"rect\")) {\n"
+		"	this.deActivateRect = document.createElementNS(svgNS,\"rect\"));\n"
+		"	this.deActivateRect.setAttributeNS(null,\"x\"),this.x - this.shadowOffset);\n"
+		"	this.deActivateRect.setAttributeNS(null,\"y\"),this.y - this.shadowOffset);\n"
+		"	this.deActivateRect.setAttributeNS(null,\"width\"),this.width + this.shadowOffset * 2);\n"
+		"	this.deActivateRect.setAttributeNS(null,\"height\"),this.height + this.shadowOffset * 2);\n"
+		"	}\n"
+		"	else if (this.buttonType == \"ellipse\")) {\n"
+		"	this.deActivateRect = document.createElementNS(svgNS,\"ellipse\"));\n"
+		"	this.deActivateRect.setAttributeNS(null,\"cx\"),this.x + this.width * 0.5);\n"
+		"	this.deActivateRect.setAttributeNS(null,\"cy\"),this.y + this.height * 0.5);\n"
+		"	this.deActivateRect.setAttributeNS(null,\"rx\"),this.width * 0.5 + this.shadowOffset);\n"
+		"	this.deActivateRect.setAttributeNS(null,\"ry\"),this.height * 0.5 + this.shadowOffset);\n"
+		"	}\n"
+		"	\n"
+		"	this.deActivateRect.setAttributeNS(null,\"fill\"),\"white\"));\n"
+		"	this.deActivateRect.setAttributeNS(null,\"fill-opacity\"),\"0.5\"));\n"
+		"	this.deActivateRect.setAttributeNS(null,\"stroke\"),\"none\"));\n"
+		"	this.deActivateRect.setAttributeNS(null,\"display\"),\"none\"));\n"
+		"	this.deActivateRect.setAttributeNS(null,\"cursor\"),\"default\"));\n"
+		"	this.buttonGroup.appendChild(this.deActivateRect);\n"
+		"}\n"
+		"\n"
+		"//remove all textbox elements\n"
+		"button.prototype.removeButton = function() {\n"
+		"	this.buttonGroup.removeChild(this.upperLeftShadow);\n"
+		"	this.buttonGroup.removeChild(this.lowerRightShadow);\n"
+		"	this.buttonGroup.removeChild(this.buttonRect);\n"
+		"	if (this.buttonTextElement) {\n"
+		"	this.buttonGroup.removeChild(this.buttonTextElement);	\n"
+		"	}\n"
+		"	if (this.buttonSymbolInstance) {\n"
+		"	this.buttonGroup.removeChild(this.buttonSymbolInstance);	\n"
+		"	}\n"
+		"	this.buttonGroup.removeChild(this.deActivateRect);\n"
+		"}\n"
+		"\n"
+		"//click on and write in textbox\n"
+		"button.prototype.handleEvent = function(evt) {\n"
+		"	if (evt.type == \"mousedown\")) {\n"
+		"	this.togglePressed(\"pressed\"));\n"
+		"	document.documentElement.addEventListener(\"mouseup\"),this,false);	\n"
+		"	}\n"
+		"	if (evt.type == \"mouseup\")) {\n"
+		"	this.togglePressed(\"released\"));\n"
+		"	document.documentElement.removeEventListener(\"mouseup\"),this,false);	\n"
+		"	}\n"
+		"	if (evt.type == \"click\")) {\n"
+		"	//for some strange reasons I could not forward the evt object here ;-(, the code below using a literal is a workaround\n"
+		"	//attention: only some of the evt properties are forwarded here, you can add more, if you need them\n"
+		"	var timerEvt = {x:evt.clientX,y:evt.clientY,type:evt.type,detail:evt.detail,timeStamp:evt.timeStamp}\n"
+		"	this.timer.setTimeout(\"fireFunction\"),this.timerMs,timerEvt)\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"button.prototype.togglePressed = function(type) {\n"
+		"	if (type == \"pressed\")) {\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"fill\"),this.shadeDarkFill);	\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"fill\"),this.shadeLightFill);\n"
+		"	}\n"
+		"	if (type == \"released\")) {\n"
+		"	this.upperLeftShadow.setAttributeNS(null,\"fill\"),this.shadeLightFill);	\n"
+		"	this.lowerRightShadow.setAttributeNS(null,\"fill\"),this.shadeDarkFill);	\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"button.prototype.fireFunction = function(evt) {\n"
+		"	if (typeof(this.functionToCall) == \"function\")) {\n"
+		"	if (this.buttonTextElement) {\n"
+		"		this.functionToCall(this.groupId,evt,this.buttonText);\n"
+		"	}\n"
+		"	if (this.buttonSymbolInstance) {\n"
+		"		this.functionToCall(this.groupId,evt);\n"
+		"	}\n"
+		"	}\n"
+		"	if (typeof(this.functionToCall) == \"object\")) {\n"
+		"	if (this.buttonTextElement) {\n"
+		"		this.functionToCall.buttonPressed(this.groupId,evt,this.buttonText);\n"
+		"	}\n"
+		"	if (this.buttonSymbolInstance) {\n"
+		"		this.functionToCall.buttonPressed(this.groupId,evt);\n"
+		"	}\n"
+		"	}\n"
+		"	if (typeof(this.functionToCall) == undefined) {\n"
+		"	return;	\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"button.prototype.getTextValue = function() {\n"
+		"	return this.buttonText;\n"
+		"}	\n"
+		"\n"
+		"button.prototype.setTextValue = function(value) {\n"
+		"	this.buttonText = value;\n"
+		"	this.buttonTextElement.firstChild.nodeValue=this.buttonText;\n"
+		"}\n"
+		"\n"
+		"button.prototype.activate = function(value) {\n"
+		"	this.deActivateRect.setAttributeNS(null,\"display\"),\"none\"));\n"
+		"	this.activated = true;\n"
+		"}\n"
+		"\n"
+		"button.prototype.deactivate = function(value) {\n"
+		"	this.deActivateRect.setAttributeNS(null,\"display\"),\"inherit\"));\n"
+		"	this.activated = false;\n"
+		"}\n"
+		"\n"
+		"//switchbutton\n"
+		"//initialize inheritance\n"
+		"switchbutton.prototype = new button();\n"
+		"switchbutton.prototype.constructor = switchbutton;\n"
+		"switchbutton.superclass = button.prototype;\n"
+		"\n"
+		"function switchbutton(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset) {\n"
+		"	if (arguments.length > 0) {\n"
+		"	this.init(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset);\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"switchbutton.prototype.init = function(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset) {\n"
+		"	switchbutton.superclass.init.call(this,groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset);\n"
+		"	this.on = false;\n"
+		"}\n"
+		"\n"
+		"//overwriting handleEventcode\n"
+		"switchbutton.prototype.handleEvent = function(evt) {\n"
+		"	//for some strange reasons I could not forward the evt object here ;-(, the code below using a literal is a workaround\n"
+		"	//attention: only some of the evt properties are forwarded here, you can add more, if you need them\n"
+		"	var timerEvt = {x:evt.clientX,y:evt.clientY,type:evt.type,detail:evt.detail,timeStamp:evt.timeStamp}\n"
+		"	if (evt.type == \"click\")) {\n"
+		"	if (this.on) {\n"
+		"		this.on = false;\n"
+		"		this.togglePressed(\"released\"));\n"
+		"		this.timer.setTimeout(\"fireFunction\"),this.timerMs,timerEvt);\n"
+		"	}\n"
+		"	else {\n"
+		"		this.on = true;\n"
+		"		this.togglePressed(\"pressed\"));		\n"
+		"		this.timer.setTimeout(\"fireFunction\"),this.timerMs,timerEvt);\n"
+		"	}\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"switchbutton.prototype.getSwitchValue = function() {\n"
+		"	return this.on;\n"
+		"}\n"
+		"\n"
+		"switchbutton.prototype.setSwitchValue = function(onOrOff,firefunction) {\n"
+		"	this.on = onOrOff;\n"
+		"	//artificial timer event - don't use the values!\n"
+		"	var timerEvt = {x:0,y:0,type:\"click\"),detail:1,timeStamp:0}\n"
+		"	if (this.on) {\n"
+		"	this.togglePressed(\"pressed\"));\n"
+		"	if (firefunction) {\n"
+		"		this.timer.setTimeout(\"fireFunction\"),this.timerMs,timerEvt);\n"
+		"	}\n"
+		"	}\n"
+		"	else {\n"
+		"	this.togglePressed(\"released\"));		\n"
+		"	if (firefunction) {\n"
+		"		this.timer.setTimeout(\"fireFunction\"),this.timerMs,timerEvt)\n"
+		"	}\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//overwriting fireFunction code\n"
+		"switchbutton.prototype.fireFunction = function(evt) {\n"
+		"	if (typeof(this.functionToCall) == \"function\")) {\n"
+		"	if (this.buttonTextElement) {\n"
+		"		this.functionToCall(this.groupId,evt,this.on,this.buttonText);\n"
+		"	}\n"
+		"	if (this.buttonSymbolInstance) {\n"
+		"		this.functionToCall(this.groupId,evt,this.on);\n"
+		"	}\n"
+		"	}\n"
+		"	if (typeof(this.functionToCall) == \"object\")) {\n"
+		"	if (this.buttonTextElement) {\n"
+		"		this.functionToCall.buttonPressed(this.groupId,evt,this.on,this.buttonText);\n"
+		"	}\n"
+		"	if (this.buttonSymbolInstance) {\n"
+		"		this.functionToCall.buttonPressed(this.groupId,evt,this.on);\n"
+		"	}\n"
+		"	}\n"
+		"	if (typeof(this.functionToCall) == undefined) {\n"
+		"	return;	\n"
+		"	}\n"
+		"}\n"
+		"\n"
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_Navigation_1(void)
+{
+	return( SG_STR_MBTOSG(
+		"/*\n"
+		"Scripts for SVG only webmapping application navigation tools\n"
+		"Copyright (C) <2005>  <Andreas Neumann>\n"
+		"Version 1.1, 2005-10-05\n"
+		"neumann at karto.baug.ethz.ch\n"
+		"http://www.carto.net/\n"
+		"http://www.carto.net/neumann/\n"
+		"\n"
+		"Credits: numerous people on svgdevelopers at yahoogroups.com\n"
+		"\n"
+		"This ECMA script library is free software; you can redistribute it and/or\n"
+		"modify it under the terms of the GNU Lesser General Public\n"
+		"License as published by the Free Software Foundation; either\n"
+		"version 2.1 of the License, or (at your option) any later version.\n"
+		"\n"
+		"This library is distributed in the hope that it will be useful,\n"
+		"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+		"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
+		"Lesser General Public License for more details.\n"
+		"\n"
+		"You should have received a copy of the GNU Lesser General Public\n"
+		"License along with this library (http://www.carto.net/papers/svg/navigationTools/lesser_gpl.txt); if not, write to the Free Software\n"
+		"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n"
+		"\n"
+		"----\n"
+		"\n"
+		"current version: 1.1\n"
+		"\n"
+		"version history:\n"
+		"1.0 initial version\n"
+		"1.01 (2005-02-15) added cleanUp() method to map and dragObj objects, some fixes in the documentation\n"
+		"1.02 (2005-02-20) fixed problems with double clicks, the second click of a double click is now ignored, using the evt.detail property\n"
+		"1.03 (2005-02-22) introduced timestamp and nrLayerToLoad array for dynamic loading (getUrl)\n"
+		"1.04 (2005-09-15) introduced a few changes with coordinate calculation to support MozillaSVG, introduced epsg and unitsFactor property based on a suggestion by Bruce Rindahl\n"
+		"1.1 (2005-10-05) introduced button object (see button.js file), introduced zoom and pan \"modes\" for repeated actions in the same mode, introduced history of map extents with the ability to go back and forth in the list of previous map extents, some internal changes in the code (e.g. less global variables), added experimental support for the batik SVG 1.2 \"static\" attribute to improve performance while panning the map, added cursors to give better status feedback\n"
+		"\n"
+		"original document site: http://www.carto.net/papers/svg/navigationTools/\n"
+		"Please contact the author in case you want to use code or ideas commercially.\n"
+		"If you use this code, please include this copyright header, the included full\n"
+		"LGPL 2.1 text and read the terms provided in the LGPL 2.1 license\n"
+		"(http://www.gnu.org/copyleft/lesser.txt)\n"
+		"\n"
+		"-------------------------------\n"
+		"\n"
+		"Please report bugs and send improvements to neumann at karto.baug.ethz.ch\n"
+		"If you use these scripts, please link to the original (http://www.carto.net/papers/svg/navigationTools/)\n"
+		"somewhere in the source-code-comment or the \"about\" of your project and give credits, thanks!\n"
+		"\n"
+		"*/\n"
+		"\n"
+		"//constructor: holds data on map and initializes various references\n"
+		"function map(mapName,maxWidth,minWidth,zoomFact,nrDecimals,epsg,units,unitsFactor,showCoords,coordXId,coordYId,dynamicLayers,digiLayers,activeDigiLayer) {\n"
+		"	this.mapName = mapName; //id of svg element containing the map geometry\n"
+		"	this.mapSVG = document.getElementById(this.mapName); //reference to nested SVG element holding the map-graphics\n"
+		"	this.mainMapGroup = document.getElementById(this.mapName+\"Group\")); //group within mainmap - to be transformed when panning manually\n"
+		"	this.dynamicLayers = dynamicLayers; //an associative array holding ids of values that are loaded from the web server dynamically (.getUrl())\n"
+		"	this.nrLayerToLoad = 0; //statusVariable to indicate how many layers are still to load\n"
+		"	this.maxWidth = maxWidth; //max map width\n"
+		"	this.minWidth = minWidth; //min map width, after zooming in\n"
+		"	this.zoomFact = zoomFact; //ratio to zoom in or out in relation to previous viewBox\n"
+		"	this.digiLayers = digiLayers; //references to digiLayers (for digitizing tools)\n"
+		"	this.activeDigiLayer = activeDigiLayer; //active Digi Layer, key is final group id where geometry should be copied to after digitizing\n"
+		"	this.pixXOffset = parseFloat(this.mapSVG.getAttributeNS(null,\"x\"))); //offset from left margin of outer viewBox\n"
+		"	this.pixYOffset = parseFloat(this.mapSVG.getAttributeNS(null,\"y\"))); //offset from top margin of outer viewBox\n"
+		"	var viewBoxArray = this.mapSVG.getAttributeNS(null,\"viewBox\")).split(\" \"));\n"
+		"	this.curxOrig = parseFloat(viewBoxArray[0]); //holds the current xOrig\n"
+		"	this.curyOrig = parseFloat(viewBoxArray[1]); //holds the current yOrig\n"
+		"	this.curWidth = parseFloat(viewBoxArray[2]); //holds the current map width\n"
+		"	this.curHeight = parseFloat(viewBoxArray[3]); //holds the current map height\n"
+		"	this.pixWidth = parseFloat(this.mapSVG.getAttributeNS(null,\"width\"))); //holds width of the map in pixel coordinates\n"
+		"	this.pixHeight = parseFloat(this.mapSVG.getAttributeNS(null,\"height\"))); //holds height of the map in pixel coordinates\n"
+		"	this.pixSize = this.curWidth / this.pixWidth; //size of a screen pixel in map units\n"
+		"	this.zoomVal = this.maxWidth / this.curWidth * 100; //zoomVal in relation to initial zoom\n"
+		"	this.nrDecimals = nrDecimals; //nr of decimal places to be displayed for show coordinates or accuracy when working with digitizing\n"
+		"	this.epsg = epsg; //epsg projection code - can be used for building URL strings for loading data from a WMS or spatial database, if you don't need it just input any number\n"
+		"	this.navStatus = \"info\"); //to indicate status in navigation, default is \"info\"), no navigation mode active\n"
+		"	this.units = units; //holds a string with map units, e.g. \"m\"), alternatively String.fromCharCode(176) for degrees\n"
+		"	this.unitsFactor = unitsFactor; //a factor for unit conversion. Can be used f.e. to output feet coordinates when data is meter, If you don't need a conversion, just use a factor of 1\n"
+		"	this.showCoords = showCoords;\n"
+		"	//initialize array of timestamp/layertoLoad values\n"
+		"	this.nrLayerToLoad = new Array();\n"
+		"	this.timestamp = null; //holds the timestamp after a zoom or pan occured\n"
+		"	//initialize coordinate display if showCoords == true\n"
+		"	if (this.showCoords == true) {\n"
+		"		//add event listener for coordinate display\n"
+		"		this.mapSVG.addEventListener(\"mousemove\"),this,false);\n"
+		"		if (typeof(coordXId) == \"string\")) {\n"
+		"			this.coordXText = document.getElementById(coordXId).firstChild;\n"
+		"		}\n"
+		"		else {\n"
+		"			alert(\"Error: coordXId needs to be an id of type string\"));\n"
+		"		}\n"
+		"		if (typeof(coordYId) == \"string\")) {\n"
+		"			this.coordYText = document.getElementById(coordYId).firstChild;\n"
+		"		}\n"
+		"		else {\n"
+		"			alert(\"Error: coordYId needs to be an id of type string\"));\n"
+		"		}\n"
+		"	}\n"
+		"	//a new array containing map extents\n"
+		"	this.mapExtents = new Array();\n"
+		"	this.mapExtents.push({xmin:this.curxOrig,ymin:((this.curyOrig + this.curHeight) * -1),xmax:(this.curxOrig + this.curWidth),ymax:(this.curyOrig * -1)});\n"
+		"	this.curMapExtentIndex = 0;\n"
+		"	//create background-element to receive events for showing coordinates\n"
+		"	//this rect is also used for manual zooming and panning\n"
+		"	this.backgroundRect = document.createElementNS(svgNS,\"rect\"));\n"
+		"	this.backgroundRect.setAttributeNS(null,\"x\"),this.curxOrig);\n"
+		"	this.backgroundRect.setAttributeNS(null,\"y\"),this.curyOrig);\n"
+		"	this.backgroundRect.setAttributeNS(null,\"width\"),this.curWidth);\n"
+		"	this.backgroundRect.setAttributeNS(null,\"height\"),this.curHeight);\n"
+		"	this.backgroundRect.setAttributeNS(null,\"fill\"),\"none\"));\n"
+		"	this.backgroundRect.setAttributeNS(null,\"stroke\"),\"none\"));\n"
+		"	this.backgroundRect.setAttributeNS(null,\"pointer-events\"),\"fill\"));\n"
+		"	this.backgroundRect.setAttributeNS(null,\"id\"),\"mapBackgroundRect\"));\n"
+		"	this.backgroundRect.addEventListener(\"mousedown\"),this,false);\n"
+		"	this.backgroundRect.addEventListener(\"mousemove\"),this,false);\n"
+		"	this.backgroundRect.addEventListener(\"mouseup\"),this,false);\n"
+		"	this.backgroundRect.addEventListener(\"mouseout\"),this,false);\n"
+		"	this.backgroundRect.addEventListener(\"click\"),this,false);\n"
+		"	this.mainMapGroup.insertBefore(this.backgroundRect,this.mainMapGroup.firstChild);\n"
+		"	//determine if viewer is capable of getScreenCTM\n"
+		"	if (document.documentElement.getScreenCTM) {\n"
+		"		this.getScreenCTM = true;\n"
+		"	}\n"
+		"	else {\n"
+		"		this.getScreenCTM = false;		\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//resets viewBox of main map after zooming and panning\n"
+		"map.prototype.newViewBox = function(refRectId,history) {\n"
+		"	var myRefRect = document.getElementById(refRectId);\n"
+		"	this.curxOrig = parseFloat(myRefRect.getAttributeNS(null,\"x\")));\n"
+		"	this.curyOrig = parseFloat(myRefRect.getAttributeNS(null,\"y\")));\n"
+		"	this.curWidth = parseFloat(myRefRect.getAttributeNS(null,\"width\")));\n"
+		"	this.curHeight = parseFloat(myRefRect.getAttributeNS(null,\"height\")));\n"
+		"	var myViewBoxString = this.curxOrig + \" \" + this.curyOrig + \" \" + this.curWidth + \" \" + this.curHeight;\n"
+		"	this.pixSize = this.curWidth / this.pixWidth;\n"
+		"	this.zoomVal = this.maxWidth / this.curWidth * 100;\n"
+		"	this.mapSVG.setAttributeNS(null,\"viewBox\"),myViewBoxString);\n"
+		"	myMapApp.zoomSlider.setValue(this.curWidth);\n"
+		"	loadProjectSpecific();\n"
+		"	if (history) {\n"
+		"	    this.mapExtents.push({xmin:this.curxOrig,ymin:((this.curyOrig + this.curHeight) * -1),xmax:(this.curxOrig + this.curWidth),ymax:(this.curyOrig * -1)});\n"
+		"               this.curMapExtentIndex = (this.mapExtents.length - 1);\n"
+		"	}\n"
+		"	this.checkButtons();\n"
+		"}\n"
+		"\n"
+		"map.prototype.backwardExtent = function() {\n"
+		"    if (this.curMapExtentIndex != 0) {\n"
+		"        this.curMapExtentIndex--;\n"
+		"        this.setNewViewBox(this.mapExtents[this.curMapExtentIndex].xmin,this.mapExtents[this.curMapExtentIndex].ymin,this.mapExtents[this.curMapExtentIndex].xmax,this.mapExtents[this.curMapExtentIndex].ymax,false);\n"
+		"    }\n"
+		"}\n"
+		"\n"
+		"map.prototype.forwardExtent = function() {\n"
+		"    if (this.mapExtents.length != (this.curMapExtentIndex + 1)) {\n"
+		"        this.curMapExtentIndex++;\n"
+		"        this.setNewViewBox(this.mapExtents[this.curMapExtentIndex].xmin,this.mapExtents[this.curMapExtentIndex].ymin,this.mapExtents[this.curMapExtentIndex].xmax,this.mapExtents[this.curMapExtentIndex].ymax,false);\n"
+		"    }\n"
+		"}\n"
+		"\n"
+		"map.prototype.checkButtons = function() {\n"
+		"           //check extent history\n"
+		"           if (this.curMapExtentIndex == 0) {\n"
+		"                if (myMapApp.buttons[\"backwardExtent\"].activated) {\n"
+		"                  myMapApp.buttons[\"backwardExtent\"].deactivate();\n"
+		"                }\n"
+		"           }\n"
+		"           else {\n"
+		"                if (!myMapApp.buttons[\"backwardExtent\"].activated) {\n"
+		"                  myMapApp.buttons[\"backwardExtent\"].activate();\n"
+		"                }           \n"
+		"           }\n"
+		"           if (this.mapExtents.length == (this.curMapExtentIndex + 1)) {\n"
+		"                if (myMapApp.buttons[\"forwardExtent\"].activated) {\n"
+		"                   myMapApp.buttons[\"forwardExtent\"].deactivate();\n"
+		"                }\n"
+		"           }\n"
+		"           else {\n"
+		"                if (!myMapApp.buttons[\"forwardExtent\"].activated) {\n"
+		"                  myMapApp.buttons[\"forwardExtent\"].activate();\n"
+		"                }           \n"
+		"           }\n"
+		" \n"
+		"           //maximum map width reached, cannot zoom out further\n"
+		"           if (this.curWidth >= this.maxWidth) {\n"
+		"               if (myMapApp.buttons[\"zoomOut\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomOut\"].deactivate();\n"
+		"               }\n"
+		"               if (myMapApp.buttons[\"zoomFull\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomFull\"].deactivate();\n"
+		"               }\n"
+		"               if (myMapApp.buttons[\"panManual\"].activated) {\n"
+		"                   myMapApp.buttons[\"panManual\"].deactivate();\n"
+		"               }\n"
+		"               if (myMapApp.buttons[\"recenterMap\"].activated) {\n"
+		"                   myMapApp.buttons[\"recenterMap\"].deactivate();\n"
+		"               }\n"
+		"               if (!myMapApp.buttons[\"zoomIn\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomIn\"].activate();\n"
+		"               }\n"
+		"               if (!myMapApp.buttons[\"zoomManual\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomManual\"].activate();\n"
+		"               }\n"
+		"           }\n"
+		"           //minimum map width reached, cannot zoom in further\n"
+		"           else if (this.curWidth <= this.minWidth) {\n"
+		"               if (myMapApp.buttons[\"zoomIn\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomIn\"].deactivate();\n"
+		"               }\n"
+		"               if (myMapApp.buttons[\"zoomManual\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomManual\"].deactivate();\n"
+		"               }\n"
+		"               if (!myMapApp.buttons[\"zoomOut\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomOut\"].activate();\n"
+		"               }\n"
+		"               if (!myMapApp.buttons[\"zoomFull\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomFull\"].activate();\n"
+		"               }\n"
+		"               if (!myMapApp.buttons[\"panManual\"].activated) {\n"
+		"                   myMapApp.buttons[\"panManual\"].activate();\n"
+		"               }\n"
+		"               if (!myMapApp.buttons[\"recenterMap\"].activated) {\n"
+		"                   myMapApp.buttons[\"recenterMap\"].activate();\n"
+		"               }           \n"
+		"           }\n"
+		"           //in between\n"
+		"           else {\n"
+		"               if (!myMapApp.buttons[\"zoomIn\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomIn\"].activate();\n"
+		"               }\n"
+		"               if (!myMapApp.buttons[\"zoomManual\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomManual\"].activate();\n"
+		"               }\n"
+		"               if (!myMapApp.buttons[\"zoomOut\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomOut\"].activate();\n"
+		"               }\n"
+		"               if (!myMapApp.buttons[\"zoomFull\"].activated) {\n"
+		"                   myMapApp.buttons[\"zoomFull\"].activate();\n"
+		"               }\n"
+		"               if (!myMapApp.buttons[\"panManual\"].activated) {\n"
+		"                   myMapApp.buttons[\"panManual\"].activate();\n"
+		"               }\n"
+		"               if (!myMapApp.buttons[\"recenterMap\"].activated) {\n"
+		"                   myMapApp.buttons[\"recenterMap\"].activate();\n"
+		"               }           \n"
+		"           }           \n"
+		"}\n"
+		"\n"
+		"map.prototype.setNewViewBox = function(xmin,ymin,xmax,ymax,history) {\n"
+		"	//check if within constraints\n"
+		"	if (xmin < myMapApp.refMapDragger.constrXmin) {\n"
+		"		xmin = myMapApp.refMapDragger.constrXmin;\n"
+		"	}\n"
+		"	if (xmax > myMapApp.refMapDragger.constrXmax) {\n"
+		"		xmax = myMapApp.refMapDragger.constrXmin;\n"
+		"	}\n"
+		"	if (ymin < (myMapApp.refMapDragger.constrYmax * -1)) {\n"
+		"		ymin = myMapApp.refMapDragger.constrYmax * -1;\n"
+		"	}\n"
+		"	if (ymax > (myMapApp.refMapDragger.constrYmin * -1)) {\n"
+		"		ymax = myMapApp.refMapDragger.constrYmin * -1;\n"
+		"	}\n"
+		"	\n"
+		"	var origWidth = xmax - xmin;\n"
+		"	var origHeight = ymax - ymin;\n"
+		"	var myRatio = this.curWidth/this.curHeight;\n"
+		"	\n"
+		"	if (origWidth / origHeight > myRatio) { //case rect is more wide than ratio\n"
+		"		var newWidth = origWidth;\n"
+		"		var newHeight = origWidth * 1 / myRatio;\n"
+		"		ymin = (ymax + (newHeight - origHeight) / 2) * -1;\n"
+		"	}\n"
+		"	else {\n"
+		"		var newHeight = origHeight;\n"
+		"		var newWidth = newHeight * myRatio;\n"
+		"		xmin = xmin - (newWidth - origWidth) / 2;\n"
+		"		ymin = ymax * -1;\n"
+		"	}\n"
+		"	//check if within constraints\n"
+		"	if (xmin < myMapApp.refMapDragger.constrXmin) {\n"
+		"		xmin = myMapApp.refMapDragger.constrXmin;\n"
+		"	}\n"
+		"	if (ymin < myMapApp.refMapDragger.constrYmin) {\n"
+		"		ymin = myMapApp.refMapDragger.constrYmin;\n"
+		"	}\n"
+		"	if ((xmin + newWidth) > myMapApp.refMapDragger.constrXmax) {\n"
+		"		xmin = myMapApp.refMapDragger.constrXmax - newWidth;\n"
+		"	}\n"
+		"	if ((ymin + newHeight) > myMapApp.refMapDragger.constrYmax) {\n"
+		"		ymin = myMapApp.refMapDragger.constrYmax - newHeight;\n"
+		"	}		\n"
+		"	myMapApp.refMapDragger.newView(xmin,ymin,newWidth,newHeight);\n"
+		"	this.newViewBox(myMapApp.refMapDragger.dragId,history);\n"
+		"}\n"
+		"\n"
+		"//handles events associated with navigation\n"
+		"map.prototype.handleEvent = function(evt) {\n"
+		"	var callerId = evt.currentTarget.getAttributeNS(null,\"id\"));\n"
+		"	if (callerId.match(/\\bzoomBgRectManual/)) {\n"
+		"		this.zoomManDragRect(evt);\n"
+		"	}\n"
+		"	if (callerId.match(/\\bzoomBgRectRecenter/)) {\n"
+		"		this.recenterFinally(evt);\n"
+		"	}\n"
+		"	if (callerId.match(/\\bbgPanManual/)) {\n"
+		"		this.panManualFinally(evt);\n"
+		"	}\n"
+		"	if (callerId == \"mainMap\" && evt.type == \"mousemove\")) {\n"
+		"		if (this.navStatus != \"panmanualActive\")) {\n"
+		"		    this.showCoordinates(evt);\n"
+		"		}\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//calcs coordinates; relies on myMapApp to handle different window sizes and resizing of windows\n"
+		"map.prototype.calcCoord = function(evt) {\n"
+		"	//with getScreenCTM the values are already in the inner coordinate system\n"
+		"	if (!this.getScreenCTM) {\n"
+		"		var coords = myMapApp.calcCoord(evt,this.mapSVG);\n"
+		"		coords.x = this.curxOrig + (coords.x - this.pixXOffset) * this.pixSize;\n"
+		"		coords.y = (this.curyOrig + (coords.y - this.pixYOffset) * this.pixSize);\n"
+		"	}\n"
+		"	else {	\n"
+		"		var coords = myMapApp.calcCoord(evt,this.mainMapGroup);\n"
+		"	}\n"
+		"	return coords;\n"
+		"}\n"
+		"\n"
+		"//displays x and y coordinates in two separate text elements\n"
+		"map.prototype.showCoordinates = function(evt) {\n"
+		"	var mapCoords = this.calcCoord(evt);\n"
+		"	this.coordXText.nodeValue = \"X: \" + formatNumberString((mapCoords.x * this.unitsFactor).toFixed(this.nrDecimals)) + this.units;\n"
+		"	this.coordYText.nodeValue = \"Y: \" + formatNumberString((mapCoords.y * this.unitsFactor * -1).toFixed(this.nrDecimals)) + this.units;\n"
+		"}\n"
+		"\n"
+		"//checks for and removes temporary rectangle objects\n"
+		"map.prototype.stopNavModes = function() {\n"
+		"	if (this.navStatus != \"info\")) {\n"
+		"                    	if (this.navStatus == \"zoomManual\")) {\n"
+		"                    	    myMapApp.buttons[\"zoomManual\"].setSwitchValue(false,false);\n"
+		"                    	}\n"
+		"                     	if (this.navStatus == \"panmanual\" || this.navStatus == \"panmanualActive\")) {\n"
+		"                    	    myMapApp.buttons[\"panManual\"].setSwitchValue(false,false);\n"
+		"                    	}\n"
+		"                    	if (this.navStatus == \"recenter\")) {\n"
+		"                    	    myMapApp.buttons[\"recenterMap\"].setSwitchValue(false,false);\n"
+		"                    	}\n"
+		"                              this.backgroundRect.setAttributeNS(null,\"id\"),\"mapBackgroundRect\"));\n"
+		"		myMapApp.buttons[\"infoButton\"].setSwitchValue(true,false);\n"
+		"		this.navStatus = \"info\");\n"
+		"	               this.mapSVG.setAttributeNS(null,\"cursor\"),\"crosshair\"));\n"
+		"		statusChange(\"Mode: Infomode\"));\n"
+		"	               this.mainMapGroup.insertBefore(this.backgroundRect,this.mainMapGroup.firstChild);\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//starts manual zooming mode\n"
+		"map.prototype.zoomManual = function(evt) {\n"
+		"	if (Math.round(myMainMap.curWidth) > myMainMap.minWidth && evt.detail == 1) {\n"
+		"		this.navStatus = \"zoomManual\");\n"
+		"                              this.backgroundRect.setAttributeNS(null,\"id\"),\"zoomBgRectManual\"));	\n"
+		"	               this.mainMapGroup.appendChild(this.backgroundRect);\n"
+		"	               this.mapSVG.setAttributeNS(null,\"cursor\"),\"se-resize\"));\n"
+		"		statusChange(\"Click and drag rectangle for new map extent.\"));\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//manages manual zooming by drawing a rectangle\n"
+		"map.prototype.zoomManDragRect = function(evt) {\n"
+		"	var mapCoords = this.calcCoord(evt);\n"
+		"	var myX = mapCoords.x;\n"
+		"	var myY = mapCoords.y;\n"
+		"	var myYXFact = this.curHeight / this.curWidth;\n"
+		"	if (evt.type == \"mousedown\")) {\n"
+		"		this.manZoomActive = 1;\n"
+		"		this.zoomRect = document.createElementNS(svgNS,\"rect\"));\n"
+		"		var myLineWidth = this.curWidth * 0.003;\n"
+		"		this.zoomRect.setAttributeNS(null,\"id\"),\"zoomRect\"));\n"
+		"		this.zoomRect.setAttributeNS(null,\"fill\"),\"white\"));\n"
+		"		this.zoomRect.setAttributeNS(null,\"fill-opacity\"),\"0.5\"));\n"
+		"		this.zoomRect.setAttributeNS(null,\"stroke\"),\"dimgray\"));\n"
+		"		this.zoomRect.setAttributeNS(null,\"stroke-width\"),myLineWidth);\n"
+		"		this.zoomRect.setAttributeNS(null,\"stroke-dasharray\"),(myLineWidth*3)+\"),\"+myLineWidth);\n"
+		"		this.zoomRect.setAttributeNS(null,\"pointer-events\"),\"none\"));\n"
+		"		this.zoomRect.setAttributeNS(null,\"x\"),myX);\n"
+		"		this.zoomRect.setAttributeNS(null,\"y\"),myY);\n"
+		"		this.zoomRect.setAttributeNS(null,\"width\"),this.minWidth);\n"
+		"		this.zoomRect.setAttributeNS(null,\"height\"),this.minWidth * myYXFact);\n"
+		"		this.mainMapGroup.appendChild(this.zoomRect);\n"
+		"		this.zoomRectOrigX = myX;\n"
+		"		this.zoomRectOrigY = myY;\n"
+		"	}\n"
+		"	if (evt.type == \"mousemove\" && this.manZoomActive == 1) {\n"
+		"		var myZoomWidth = myX - this.zoomRectOrigX;\n"
+		"		if (myZoomWidth < 0) {\n"
+		"			if (Math.abs(myZoomWidth) < this.minWidth) {\n"
+		"				this.zoomRect.setAttributeNS(null,\"x\"),this.zoomRectOrigX - this.minWidth);\n"
+		"				this.zoomRect.setAttributeNS(null,\"y\"),this.zoomRectOrigY - this.minWidth * myYXFact);\n"
+		"				this.zoomRect.setAttributeNS(null,\"width\"),this.minWidth);\n"
+		"				this.zoomRect.setAttributeNS(null,\"height\"),this.minWidth * myYXFact);\n"
+		"			}\n"
+		"			else {\n"
+		"				this.zoomRect.setAttributeNS(null,\"x\"),myX);\n"
+		"				this.zoomRect.setAttributeNS(null,\"y\"),this.zoomRectOrigY - Math.abs(myZoomWidth) * myYXFact);\n"
+		"				this.zoomRect.setAttributeNS(null,\"width\"),Math.abs(myZoomWidth));\n"
+		"				this.zoomRect.setAttributeNS(null,\"height\"),Math.abs(myZoomWidth) * myYXFact);			\n"
+		"			}\n"
+		"		}\n"
+		"		else {\n"
+		"			this.zoomRect.setAttributeNS(null,\"x\"),this.zoomRectOrigX);\n"
+		"			this.zoomRect.setAttributeNS(null,\"y\"),this.zoomRectOrigY);\n"
+		"			if (myZoomWidth < this.minWidth) {\n"
+		"				this.zoomRect.setAttributeNS(null,\"width\"),this.minWidth);\n"
+		"				this.zoomRect.setAttributeNS(null,\"height\"),this.minWidth * myYXFact);		\n"
+		"			}\n"
+		"			else {\n"
+		"				this.zoomRect.setAttributeNS(null,\"width\"),myZoomWidth);\n"
+		"				this.zoomRect.setAttributeNS(null,\"height\"),myZoomWidth * myYXFact);\n"
+		"			}\n"
+		"		}\n"
+		"	}\n"
+		"	if ((evt.type == \"mouseup\" || evt.type == \"mouseout\")) && this.manZoomActive == 1) {\n"
+		"		this.manZoomActive = 0;\n"
+		"		if (parseFloat(this.zoomRect.getAttributeNS(null,\"width\"))) > this.curWidth * 0.02) {\n"
+		"			myMapApp.refMapDragger.newView(parseFloat(this.zoomRect.getAttributeNS(null,\"x\"))),parseFloat(this.zoomRect.getAttributeNS(null,\"y\"))),parseFloat(this.zoomRect.getAttributeNS(null,\"width\"))),parseFloat(this.zoomRect.getAttributeNS(null,\"height\"))));\n"
+		"			this.newViewBox(myMapApp.refMapDragger.dragId,true);\n"
+		"		}\n"
+		"		this.mainMapGroup.removeChild(this.zoomRect);\n"
+		"		statusChange(\"Mode: Manual Zooming\"));\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//initializes recentering mode\n"
+		"map.prototype.recenter = function(evt) {\n"
+		"	if (evt.detail == 1) {\n"
+		"		this.navStatus = \"recenter\");\n"
+		"                              this.backgroundRect.setAttributeNS(null,\"id\"),\"zoomBgRectRecenter\"));	\n"
+		"	               this.mainMapGroup.appendChild(this.backgroundRect);\n"
+		"	               this.mapSVG.setAttributeNS(null,\"cursor\"),\"pointer\"));\n"
+		"		statusChange(\"Click in map to define new map center.\"));\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//finishes recentering after mouse-click\n"
+		"map.prototype.recenterFinally = function(evt) {\n"
+		"	if (evt.type == \"click\")) {\n"
+		"		var mapCoords = this.calcCoord(evt);\n"
+		"		var myX = mapCoords.x;\n"
+		"		var myY = mapCoords.y;\n"
+		"		var myNewX = myX - this.curWidth / 2;\n"
+		"		var myNewY = myY - this.curHeight / 2;\n"
+		"		\n"
+		"		//check if within constraints\n"
+		"		if (myNewX < myMapApp.refMapDragger.constrXmin) {\n"
+		"			myNewX = myMapApp.refMapDragger.constrXmin;\n"
+		"		}\n"
+		"		if (myNewY < myMapApp.refMapDragger.constrYmin) {\n"
+		"			myNewY = myMapApp.refMapDragger.constrYmin;\n"
+		"		}\n"
+		"		if ((myNewX + this.curWidth) > myMapApp.refMapDragger.constrXmax) {\n"
+		"			myNewX = myMapApp.refMapDragger.constrXmax - this.curWidth;\n"
+		"		}\n"
+		"		if ((myNewY + this.curHeight) > myMapApp.refMapDragger.constrYmax) {\n"
+		"			myNewY = myMapApp.refMapDragger.constrYmax - this.curHeight;\n"
+		"		}\n"
+		"		myMapApp.refMapDragger.newView(myNewX,myNewY,this.curWidth,this.curHeight);\n"
+		"		this.newViewBox(myMapApp.refMapDragger.dragId,true);\n"
+		"		statusChange(\"Mode: Recentering Map\"));\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//initializes manual panning\n"
+		"map.prototype.panManual = function(evt) {\n"
+		"	if (evt.detail == 1) {\n"
+		"		this.navStatus = \"panmanual\");\n"
+		"                              this.backgroundRect.setAttributeNS(null,\"id\"),\"bgPanManual\"));	\n"
+		"	               this.mainMapGroup.appendChild(this.backgroundRect);\n"
+		"	               this.mapSVG.setAttributeNS(null,\"cursor\"),\"move\"));\n"
+		"		statusChange(\"Mouse down and move to pan the map\"));\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//manages and finishes manual panning\n"
+		"map.prototype.panManualFinally = function(evt) {\n"
+		"	if (evt.type == \"mousedown\")) {\n"
+		"		this.navStatus = \"panmanualActive\");\n"
+		"		this.panCoords = this.calcCoord(evt);\n"
+		"		this.panCoorX = this.panCoords.x;\n"
+		"		this.panCoorY = this.panCoords.y;\n"
+		"		this.diffX = 0;\n"
+		"		this.diffY = 0;\n"
+		"		this.mainMapGroup.setAttributeNS(batikNS,\"static\"),\"true\"));\n"
+		"	}\n"
+		"	if (evt.type == \"mousemove\" && this.navStatus == \"panmanualActive\")) {\n"
+		"		var mapCoords = this.calcCoord(evt);\n"
+		"		if (this.getScreenCTM) {\n"
+		"			this.diffX = this.panCoorX - mapCoords.x + this.diffX;\n"
+		"			this.diffY = this.panCoorY - mapCoords.y + this.diffY;\n"
+		"		}\n"
+		"		else {\n"
+		"			this.diffX = this.panCoorX - mapCoords.x;\n"
+		"			this.diffY = this.panCoorY - mapCoords.y;		\n"
+		"		}\n"
+		"		var myNewX = this.curxOrig + this.diffX;\n"
+		"		var myNewY = this.curyOrig + this.diffY;\n"
+		"		//check if within constraints\n"
+		"		if (myNewX < myMapApp.refMapDragger.constrXmin) {\n"
+		"			var myNewXTemp = myMapApp.refMapDragger.constrXmin;\n"
+		"			this.diffX = this.diffX + (myNewXTemp - myNewX);\n"
+		"			myNewX = myNewXTemp;\n"
+		"		}\n"
+		"		if (myNewY < myMapApp.refMapDragger.constrYmin) {\n"
+		"			var myNewYTemp = myMapApp.refMapDragger.constrYmin;\n"
+		"			this.diffY = this.diffY + (myNewYTemp - myNewY);\n"
+		"			myNewY = myNewYTemp;\n"
+		"		}\n"
+		"		if ((myNewX + this.curWidth) > myMapApp.refMapDragger.constrXmax) {\n"
+		"			var myNewXTemp = myMapApp.refMapDragger.constrXmax - this.curWidth;\n"
+		"			this.diffX = this.diffX + (myNewXTemp - myNewX);\n"
+		"			myNewX = myNewXTemp;\n"
+		"		}\n"
+		"		if ((myNewY + this.curHeight) > myMapApp.refMapDragger.constrYmax) {\n"
+		"			var myNewYTemp = myMapApp.refMapDragger.constrYmax - this.curHeight;\n"
+		"			this.diffY = this.diffY + (myNewYTemp - myNewY);\n"
+		"			myNewY = myNewYTemp;\n"
+		"		}	\n"
+		"		var transformString = \"translate(\"+(this.diffX * -1) +\"),\"+(this.diffY * -1)+\"))\");\n"
+		"		this.mainMapGroup.setAttributeNS(null,\"transform\"),transformString);\n"
+		"		myMapApp.refMapDragger.newView(myNewX,myNewY,this.curWidth,this.curHeight);\n"
+		"	}\n"
+		"	if ((evt.type == \"mouseup\" || evt.type == \"mouseout\")) && this.navStatus == \"panmanualActive\")) {\n"
+		"		this.navStatus = \"panmanual\");\n"
+		"		this.mainMapGroup.setAttributeNS(batikNS,\"static\"),\"false\"));\n"
+		"		this.mainMapGroup.setAttributeNS(null,\"transform\"),\"translate(0,0)\"));\n"
+		"		this.newViewBox(myMapApp.refMapDragger.dragId,true);			\n"
+		"		statusChange(\"Mode: Manual Panning\"));	\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//remove all temporarily added elements and event listeners\n"
+		"map.prototype.cleanUp = function() {\n"
+		"			//remove background rect\n"
+		"			this.backgroundRect.parentNode.removeChild(this.backgroundRect);\n"
+		"			//remove eventlisteners\n"
+		"			if (this.showCoords == true) {\n"
+		"				//add event listener for coordinate display\n"
+		"				this.mapSVG.removeEventListener(\"mousemove\"),this,false);\n"
+		"			}\n"
+		"\n"
+		"}\n"
+		"\n"
+		"//make an element (rectangle) draggable within constraints\n"
+		"function dragObj(dragId,referenceMap,myDragSymbol,dragSymbThreshold,showCoords,coordXId,coordYId,mainMapObj) {\n"
+		"	this.dragId = dragId;\n"
+		"	this.myDragger = document.getElementById(this.dragId);\n"
+		"	this.myRefMap = document.getElementById(referenceMap);\n"
+		"	this.myDragSymbol = document.getElementById(myDragSymbol);	\n"
+		"	this.dragSymbThreshold = dragSymbThreshold;\n"
+		"	var viewBox = this.myRefMap.getAttributeNS(null,\"viewBox\")).split(\" \"));\n"
+		"	this.constrXmin = parseFloat(viewBox[0]);\n"
+		"	this.constrYmin = parseFloat(viewBox[1]);\n"
+		"	this.constrXmax = this.constrXmin + parseFloat(viewBox[2]);\n"
+		"	this.constrYmax = this.constrYmin + parseFloat(viewBox[3]);\n"
+		"	this.refMapX = parseFloat(this.myRefMap.getAttributeNS(null,\"x\")));\n"
+		"	this.refMapY = parseFloat(this.myRefMap.getAttributeNS(null,\"y\")));\n"
+		"	this.refMapWidth = parseFloat(this.myRefMap.getAttributeNS(null,\"width\")));\n"
+		"	this.pixSize = (this.constrXmax - this.constrXmin) / this.refMapWidth;\n"
+		"	this.mainMapObj = mainMapObj;\n"
+		"	//initialize coordinate display if showCoords == true\n"
+		"	this.showCoords = showCoords;\n"
+		"	if (this.showCoords == true) {\n"
+		"		if (typeof(coordXId) == \"string\")) {\n"
+		"			this.coordXText = document.getElementById(coordXId).firstChild;\n"
+		"		}\n"
+		"		else {\n"
+		"			alert(\"Error: coordXId needs to be an id of type string\"));\n"
+		"		}\n"
+		"		if (typeof(coordYId) == \"string\")) {\n"
+		"			this.coordYText = document.getElementById(coordYId).firstChild;\n"
+		"		}\n"
+		"		else {\n"
+		"			alert(\"Error: coordYId needs to be an id of type string\"));\n"
+		"		}\n"
+		"	}\n"
+		"	//determine if viewer is capable of getScreenCTM\n"
+		"	if (document.documentElement.getScreenCTM) {\n"
+		"		this.getScreenCTM = true;\n"
+		"	}\n"
+		"	else {\n"
+		"		this.getScreenCTM = false;		\n"
+		"	}\n"
+		"	this.status = false;\n"
+		"}\n"
+		"\n"
+		"dragObj.prototype.calcCoord = function(evt) {\n"
+		"	//with getScreenCTM the values are already in the inner coordinate system but without using the outer offset\n"
+		"	var coordPoint = myMapApp.calcCoord(evt,this.myRefMap);\n"
+		"	if (!this.getScreenCTM) {\n"
+		"		coordPoint.x = this.constrXmin + (coordPoint.x - this.refMapX) * this.pixSize;\n"
+		"		coordPoint.y = this.constrYmin + (coordPoint.y - this.refMapY) * this.pixSize;\n"
+		"	}\n"
+		"	return coordPoint;\n"
+		"}\n"
+		"\n"
+		"dragObj.prototype.handleEvent = function(evt) {\n"
+		"	if (evt.type == \"mousemove\")) {\n"
+		"		var mapCoords = this.calcCoord(evt);\n"
+		"		this.coordXText.nodeValue = \"X: \" + formatNumberString(mapCoords.x.toFixed(this.mainMapObj.nrDecimals)) + this.mainMapObj.units;\n"
+		"		this.coordYText.nodeValue = \"Y: \" + formatNumberString((mapCoords.y * -1).toFixed(this.mainMapObj.nrDecimals)) + this.mainMapObj.units;\n"
+		"	}\n"
+		"	this.drag(evt);\n"
+		"}\n"
+		"\n"
+		"dragObj.prototype.newView = function(x,y,width,height) {\n"
+		"	this.myDragger.setAttributeNS(null,\"x\"),x);\n"
+		"	this.myDragger.setAttributeNS(null,\"y\"),y);\n"
+		"	this.myDragger.setAttributeNS(null,\"width\"),width);\n"
+		"	this.myDragger.setAttributeNS(null,\"height\"),height);\n"
+		"	this.myDragSymbol.setAttributeNS(null,\"x\"),(x + width/2));\n"
+		"	this.myDragSymbol.setAttributeNS(null,\"y\"),(y + height/2));\n"
+		"	if (width < this.dragSymbThreshold) {\n"
+		"		this.myDragSymbol.setAttributeNS(null,\"visibility\"),\"visible\"));\n"
+		"	}\n"
+		"	else {\n"
+		"		this.myDragSymbol.setAttributeNS(null,\"visibility\"),\"hidden\"));	\n"
+		"	}\n"
+		"}\n"
+		"\n"
+	));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSVG_Interactive_Map::_Get_Code_Navigation_2(void)
+{
+	return( SG_STR_MBTOSG(
+		"//this method was previously called \"resizeDragger\" - now renamed to .getSliderVal\n"
+		"//this method receives values from the zoom slider\n"
+		"dragObj.prototype.getSliderVal = function(status,sliderGroupName,width) {\n"
+		"	var myX = parseFloat(this.myDragger.getAttributeNS(null,\"x\")));\n"
+		"	var myY = parseFloat(this.myDragger.getAttributeNS(null,\"y\")));\n"
+		"	var myWidth = parseFloat(this.myDragger.getAttributeNS(null,\"width\")));\n"
+		"	var myHeight = parseFloat(this.myDragger.getAttributeNS(null,\"height\")));\n"
+		"	var myCenterX = myX + myWidth / 2;\n"
+		"	var myCenterY = myY + myHeight / 2;\n"
+		"	var myRatio = myHeight / myWidth;\n"
+		"	var toMoveX = myCenterX - width / 2;\n"
+		"	var toMoveY = myCenterY - width * myRatio / 2;\n"
+		"	if (toMoveX < this.constrXmin) {\n"
+		"		toMoveX = this.constrXmin;\n"
+		"	}\n"
+		"	if ((toMoveX + width) > this.constrXmax) {\n"
+		"		toMoveX = this.constrXmax - width;\n"
+		"	}\n"
+		"	if (toMoveY < this.constrYmin) {\n"
+		"		toMoveY = this.constrYmin;\n"
+		"	}\n"
+		"	if ((toMoveY + width * myRatio) > this.constrYmax) {\n"
+		"		toMoveY = this.constrYmax - width * myRatio;\n"
+		"	}\n"
+		"	this.newView(toMoveX,toMoveY,width,width * myRatio);\n"
+		"	if (status == \"release\")) {\n"
+		"	           myMainMap.stopNavModes();\n"
+		"		this.mainMapObj.newViewBox(this.dragId,true);\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"dragObj.prototype.drag = function(evt) {\n"
+		"	if (evt.type == \"mousedown\")) {\n"
+		"		this.myRefMap.setAttributeNS(null,\"cursor\"),\"move\"));\n"
+		"		this.status = true;\n"
+		"	}\n"
+		"	if ((evt.type == \"mousemove\" || evt.type == \"mousedown\")) && this.status == true) {\n"
+		"		var coords = this.calcCoord(evt);\n"
+		"		var newEvtX = coords.x;\n"
+		"		var newEvtY = coords.y;\n"
+		"		var myX = parseFloat(this.myDragger.getAttributeNS(null,\"x\")));\n"
+		"		var myY = parseFloat(this.myDragger.getAttributeNS(null,\"y\")));\n"
+		"		var myWidth = parseFloat(this.myDragger.getAttributeNS(null,\"width\")));\n"
+		"		var myHeight = parseFloat(this.myDragger.getAttributeNS(null,\"height\")));\n"
+		"		var toMoveX = newEvtX - myWidth / 2;\n"
+		"		var toMoveY = newEvtY - myHeight / 2;\n"
+		"		if (toMoveX < this.constrXmin) {\n"
+		"			toMoveX = this.constrXmin;\n"
+		"		}\n"
+		"		if ((toMoveX + myWidth) > this.constrXmax) {\n"
+		"			toMoveX = this.constrXmax - myWidth;\n"
+		"		}\n"
+		"		if (toMoveY < this.constrYmin) {\n"
+		"			toMoveY = this.constrYmin;\n"
+		"		}\n"
+		"		if ((toMoveY + myHeight) > this.constrYmax) {\n"
+		"			toMoveY = this.constrYmax - myHeight;\n"
+		"		}\n"
+		"		this.newView(toMoveX,toMoveY,myWidth,myHeight);\n"
+		"	}\n"
+		"	if ((evt.type == \"mouseup\" || evt.type == \"mouseout\")) && this.status == true) {\n"
+		"		this.status = false;\n"
+		"		if (evt.detail == 1) { //second click is ignored\n"
+		"		               this.myRefMap.setAttributeNS(null,\"cursor\"),\"crosshair\"));\n"
+		"			this.mainMapObj.newViewBox('dragRectForRefMap',true);\n"
+		"		}\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"dragObj.prototype.zoom = function(inOrOut) {\n"
+		"	var myOldX = this.myDragger.getAttributeNS(null,\"x\"));\n"
+		"	var myOldY = this.myDragger.getAttributeNS(null,\"y\"));\n"
+		"	var myOldWidth = this.myDragger.getAttributeNS(null,\"width\"));\n"
+		"	var myOldHeight = this.myDragger.getAttributeNS(null,\"height\"));\n"
+		"	switch (inOrOut) {\n"
+		"		case \"in\":\n"
+		"			var myNewX = parseFloat(myOldX) + myOldWidth / 2 - (myOldWidth * this.mainMapObj.zoomFact * 0.5);\n"
+		"			var myNewY = parseFloat(myOldY) + myOldHeight / 2 - (myOldHeight * this.mainMapObj.zoomFact * 0.5);\n"
+		"			var myNewWidth = myOldWidth * this.mainMapObj.zoomFact;\n"
+		"			var myNewHeight = myOldHeight * this.mainMapObj.zoomFact;\n"
+		"			if (myNewWidth < this.mainMapObj.minWidth) {\n"
+		"				var myYXFact = this.mainMapObj.curHeight / this.mainMapObj.curWidth;\n"
+		"				myNewWidth = this.mainMapObj.minWidth;\n"
+		"				myNewHeight = myNewWidth * myYXFact;\n"
+		"				myNewX = parseFloat(myOldX) + myOldWidth / 2 - (myNewWidth * 0.5);\n"
+		"				myNewY = parseFloat(myOldY) + myOldHeight / 2 - (myNewHeight * 0.5);\n"
+		"			}\n"
+		"			break;\n"
+		"		case \"out\":\n"
+		"			var myNewX = parseFloat(myOldX) + myOldWidth / 2 - (myOldWidth * (1 + this.mainMapObj.zoomFact) * 0.5);\n"
+		"			var myNewY = parseFloat(myOldY) + myOldHeight / 2 - (myOldHeight * (1 + this.mainMapObj.zoomFact) * 0.5);\n"
+		"			var myNewWidth = myOldWidth * (1 + this.mainMapObj.zoomFact);\n"
+		"			var myNewHeight = myOldHeight * (1 + this.mainMapObj.zoomFact);\n"
+		"			break;\n"
+		"		default:\n"
+		"			var myNewX = this.constrXmin;\n"
+		"			var myNewY = this.constrYmin;\n"
+		"			var myNewWidth = this.constrXmax - this.constrXmin;\n"
+		"			var myNewHeight = this.constrYmax - this.constrYmin;\n"
+		"			break;\n"
+		"	}	\n"
+		"	//check if within constraints\n"
+		"	if (myNewWidth > (this.constrXmax - this.constrXmin)) {\n"
+		"		myNewWidth = this.constrXmax - this.constrXmin;\n"
+		"	}\n"
+		"	if (myNewHeight > (this.constrYmax - this.constrYmin)) {\n"
+		"		myNewHeight = this.constrYmax - this.constrYmin;\n"
+		"	}\n"
+		"	if (myNewX < this.constrXmin) {\n"
+		"		myNewX = this.constrXmin;\n"
+		"	}\n"
+		"	if (myNewY < this.constrYmin) {\n"
+		"		myNewY = this.constrYmin;\n"
+		"	}\n"
+		"	if ((myNewX + myNewWidth) > this.constrXmax) {\n"
+		"		myNewX = this.constrXmax - myNewWidth;\n"
+		"	}\n"
+		"	if ((myNewY + myNewHeight) > this.constrYmax) {\n"
+		"		myNewY = this.constrYmax - myNewHeight;\n"
+		"	}\n"
+		"	this.newView(myNewX,myNewY,myNewWidth,myNewHeight);\n"
+		"	this.mainMapObj.newViewBox(this.dragId,true);\n"
+		"}\n"
+		"\n"
+		"dragObj.prototype.pan = function (myX,myY,howmuch) {\n"
+		"	//get values from draggable rectangle\n"
+		"	var xulcorner = parseFloat(this.myDragger.getAttributeNS(null,\"x\")));\n"
+		"	var yulcorner = parseFloat(this.myDragger.getAttributeNS(null,\"y\")));\n"
+		"	var width = parseFloat(this.myDragger.getAttributeNS(null,\"width\")));\n"
+		"	var height = parseFloat(this.myDragger.getAttributeNS(null,\"height\")));\n"
+		"\n"
+		"	//set values of draggable rectangle\n"
+		"	var rectXulcorner = xulcorner + howmuch * width * myX;\n"
+		"	var rectYulcorner = yulcorner + howmuch * height * myY;\n"
+		"	//check if within constraints\n"
+		"	if (rectXulcorner < this.constrXmin) {\n"
+		"		rectXulcorner = this.constrXmin;\n"
+		"	}\n"
+		"	if (rectYulcorner < this.constrYmin) {\n"
+		"		rectYulcorner = this.constrYmin;\n"
+		"	}\n"
+		"	if ((rectXulcorner + width) > this.constrXmax) {\n"
+		"		rectXulcorner = this.constrXmax - width;\n"
+		"	}\n"
+		"	if ((rectYulcorner + height) > this.constrYmax) {\n"
+		"		rectYulcorner = this.constrYmax - height;\n"
+		"	}\n"
+		"	this.newView(rectXulcorner,rectYulcorner,width,height);\n"
+		"\n"
+		"	//set viewport of main map\n"
+		"	if ((xulcorner != rectXulcorner) || (yulcorner != rectYulcorner)) {\n"
+		"		this.mainMapObj.newViewBox(this.dragId,true);\n"
+		"	}\n"
+		"\n"
+		"	statusChange(\"map ready ...\"));\n"
+		"}\n"
+		"\n"
+		"//remove all temporarily used elements and event listeners\n"
+		"dragObj.prototype.cleanUp = function() {\n"
+		"	//remove eventlisteners\n"
+		"	if (this.showCoords == true) {\n"
+		"		//add event listener for coordinate display\n"
+		"		this.myRefMap.removeEventListener(\"mousemove\"),this,false);\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"function zoomIt(evt,inOrOut) {\n"
+		"	if (evt.detail == 1) { //only react on first click, double click: second click is ignored\n"
+		"		if (inOrOut == \"in\")) {\n"
+		"			if (Math.round(myMainMap.curWidth) > myMainMap.minWidth) {\n"
+		"				myMapApp.refMapDragger.zoom(\"in\"));\n"
+		"			}\n"
+		"			else {\n"
+		"				statusChange(\"Maximum zoom factor reached. Cannot zoom in any more.\"));\n"
+		"			}\n"
+		"		}\n"
+		"		if (inOrOut == \"out\")) {\n"
+		"			if (Math.round(myMainMap.curWidth) < myMainMap.maxWidth) {\n"
+		"				myMapApp.refMapDragger.zoom(\"out\"));\n"
+		"			}\n"
+		"			else {\n"
+		"				statusChange(\"Minimum zoom factor reached. Cannot zoom out any more.\"));\n"
+		"			}\n"
+		"		}\n"
+		"		if (inOrOut == \"full\")) {\n"
+		"			if (Math.round(myMainMap.curWidth) < myMainMap.maxWidth) {\n"
+		"				myMapApp.refMapDragger.zoom(\"full\"));\n"
+		"			}\n"
+		"			else {\n"
+		"				statusChange(\"Full view already reached.\"));\n"
+		"			}\n"
+		"		}\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//this function starts various zoom actions or map extent history functions\n"
+		"function zoomImageButtons(id,evt) {\n"
+		"	myMainMap.stopNavModes();\n"
+		"	if (id == \"zoomIn\")) {\n"
+		"		zoomIt(evt,'in');\n"
+		"	}\n"
+		"	if (id == \"zoomOut\")) {\n"
+		"		zoomIt(evt,'out');\n"
+		"	}\n"
+		"	if (id == \"zoomFull\")) {\n"
+		"		zoomIt(evt,'full');\n"
+		"	}\n"
+		"	if (id == \"backwardExtent\")) {\n"
+		"		myMainMap.backwardExtent();\n"
+		"	}\n"
+		"	if (id == \"forwardExtent\")) {\n"
+		"		myMainMap.forwardExtent();\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//this function starts various interactive zoom or pan modes\n"
+		"function zoomImageSwitchButtons(id,evt,onOrOff) {\n"
+		"	myMainMap.stopNavModes();\n"
+		"	if (onOrOff) {\n"
+		"                      if (id == \"infoButton\")) {\n"
+		"                      \n"
+		"                      }\n"
+		"                      else {\n"
+		"		    if (id == \"zoomManual\")) {\n"
+		"			    myMainMap.zoomManual(evt);\n"
+		"		    }\n"
+		"		    if (id == \"panManual\")) {\n"
+		"			    myMainMap.panManual(evt);\n"
+		"		    }\n"
+		"		    if (id == \"recenterMap\")) {\n"
+		"			    myMainMap.recenter(evt);\n"
+		"		    }\n"
+		"		    if (myMapApp.buttons[\"infoButton\"].getSwitchValue()) {\n"
+		"		        myMapApp.buttons[\"infoButton\"].setSwitchValue(false,false);\n"
+		"		    }\n"
+		"		}\n"
+		"	}\n"
+		"	else {\n"
+		"	    if (id == \"infoButton\")) {\n"
+		"	        myMapApp.buttons[\"infoButton\"].setSwitchValue(true,false);\n"
+		"	    }\n"
+		"	}\n"
+		"}\n"
+		"\n"
+		"//alert map extent\n"
+		"function showExtent() {\n"
+		"	with(myMainMap) {\n"
+		"		alert(\n"
+		"         \"Xmin=\"+curxOrig.toFixed(nrDecimals)+units+\n"
+		"         \"); Xmax=\"+(curxOrig + curWidth).toFixed(nrDecimals)+units+\n"
+		"         \"\\nYmin=\"+((curyOrig + curHeight) * -1).toFixed(nrDecimals) +units+\n"
+		"         \"); Ymax=\"+(curyOrig*-1).toFixed(nrDecimals)+units+\n"
+		"         \"\\nWidth=\"+curWidth.toFixed(nrDecimals)+units+\n"
+		"         \"); Height=\"+curHeight.toFixed(nrDecimals)+units);\n"
+		"	}\n"
+		"}\n"
+		"\n"
+	));
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/docs/docs_html/svg_interactive_map.h b/src/modules_io/docs/docs_html/svg_interactive_map.h
new file mode 100644
index 0000000..b7bce4e
--- /dev/null
+++ b/src/modules_io/docs/docs_html/svg_interactive_map.h
@@ -0,0 +1,134 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_html                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//              SVG_Interactive_map.cpp                  //
+//                                                       //
+//          Copyright (C) 2005 by Victor Olaya           //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Victor Olaya                           //
+//                                                       //
+//    e-mail:     volaya at saga-gis.org                    //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef _HEADER_INCLUDED__SAGA_GUI__svg_interactive_map_H
+#define _HEADER_INCLUDED__SAGA_GUI__svg_interactive_map_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "doc_svg.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CSVG_Interactive_Map : public CSG_Doc_SVG, public CSG_Module
+{
+public:
+	CSVG_Interactive_Map(void);
+	virtual ~CSVG_Interactive_Map(void);
+
+protected:
+
+	virtual bool		On_Execute(void);
+
+
+private:
+
+	CSG_String			m_Directory;
+	double				m_dWidth;
+
+
+	bool				Create_From_Map				(CSG_Parameter_Shapes_List *pList, CSG_Shapes *pIndexLayer, const SG_Char *Filename);
+
+	void				_Write_Code					(const SG_Char *FileName, const SG_Char *Code);
+
+	void				_Add_Opening				(CSG_Rect r);
+	const SG_Char *		_Get_Opening_Code_1			(void);
+	const SG_Char *		_Get_Opening_Code_2			(void);
+
+	void				_Add_CheckBoxes				(CSG_Parameter_Shapes_List *pList);
+	void				_Add_Shapes					(CSG_Shapes *pLayer);
+	bool				_Add_Shape					(CSG_Shape *pShape, int Fill_Color, int Line_Color, double Line_Width, double Point_Width);
+	void				_Add_Grid					(CSG_Grid *pLayer);
+	void				_Add_ReferenceMap			(CSG_Shapes *pIndexLayer, CSG_Rect r);
+	void				_Add_Label					(const SG_Char* Label, CSG_Shape *pShape, double dSize, const SG_Char* Unit);
+
+	const SG_Char *		_Get_Code_1					(void);
+	const SG_Char *		_Get_Code_2					(void);
+	const SG_Char *		_Get_Code_3					(void);
+	const SG_Char *		_Get_Code_4					(void);
+	const SG_Char *		_Get_Code_5					(void);
+	const SG_Char *		_Get_Code_Closing_1			(void);
+
+	const SG_Char *		_Get_Code_CheckBox			(void);
+	const SG_Char *		_Get_Code_MapApp			(void);
+	const SG_Char *		_Get_Code_Timer				(void);
+	const SG_Char *		_Get_Code_Slider			(void);
+	const SG_Char *		_Get_Code_Helper			(void);
+	const SG_Char *		_Get_Code_Buttons			(void);
+	const SG_Char *		_Get_Code_Navigation_1		(void);
+	const SG_Char *		_Get_Code_Navigation_2		(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__svg_interactive_map_H
diff --git a/src/modules_io/docs/docs_pdf/MLB_Interface.cpp b/src/modules_io/docs/docs_pdf/MLB_Interface.cpp
new file mode 100644
index 0000000..4227308
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/MLB_Interface.cpp
@@ -0,0 +1,119 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_pdf                        //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   MLB_Interface.cpp                   //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//			The Module Link Library Interface			 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+//---------------------------------------------------------
+const SG_Char * Get_Info(int i)
+{
+	switch( i )
+	{
+	case MLB_INFO_Name:	default:
+		return( _TL("Reports - PDF") );
+
+	case MLB_INFO_Author:
+		return( SG_T("SAGA User Group (c) 2010") );
+
+	case MLB_INFO_Description:
+		return( _TW(
+			"Reports in Portable Document Format (PDF). PDF export is based on "
+			"<a target=\"_blank\" href=\"libharu.org\">libharu</a>."
+		));
+
+	case MLB_INFO_Version:
+		return( SG_T("1.0") );
+
+	case MLB_INFO_Menu_Path:
+		return( _TL("File|Reports") );
+	}
+}
+
+
+//---------------------------------------------------------
+#include "Shapes_Report.h"
+#include "Shapes_Summary.h"
+#include "Profile_Cross_Sections.h"
+
+
+//---------------------------------------------------------
+CSG_Module *		Create_Module(int i)
+{
+	switch( i )
+	{
+	case  0:	return( new CShapes_Report );
+	case  1:	return( new CShapes_Summary );
+	case  2:	return( new CProfile_Cross_Sections );
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+//{{AFX_SAGA
+
+	MLB_INTERFACE
+
+//}}AFX_SAGA
diff --git a/src/modules_io/docs/docs_pdf/MLB_Interface.h b/src/modules_io/docs/docs_pdf/MLB_Interface.h
new file mode 100644
index 0000000..d46d544
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/MLB_Interface.h
@@ -0,0 +1,80 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_pdf                        //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    MLB_Interface.h                    //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Include the SAGA-API here				 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__docs_pdf__mlb_interface_H
+#define HEADER_INCLUDED__docs_pdf__mlb_interface_H
+
+//---------------------------------------------------------
+#include <saga_api/saga_api.h>
+
+//---------------------------------------------------------
+#ifdef docs_pdf_EXPORTS
+	#define	docs_pdf_EXPORT	_SAGA_DLL_EXPORT
+#else
+	#define	docs_pdf_EXPORT	_SAGA_DLL_IMPORT
+#endif
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__docs_pdf__mlb_interface_H
diff --git a/src/modules_io/docs/docs_pdf/Makefile.am b/src/modules_io/docs/docs_pdf/Makefile.am
new file mode 100644
index 0000000..ae16c17
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/Makefile.am
@@ -0,0 +1,31 @@
+#
+# $Id: Makefile.am,v 1.2 2010/11/06 15:16:36 johanvdw Exp $
+#
+if DEBUG
+DBGFLAGS = -g -DDEBUG
+endif
+if SAGA_UNICODE
+UC_DEFS = -D_SAGA_UNICODE
+endif
+if HAVE_HARU 
+DEF_SAGA           = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+CXX_INCS           = -I$(top_srcdir)/src/saga_core
+AM_CXXFLAGS        = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS) $(DISABLELIBHARU)
+AM_LDFLAGS         = -fPIC -shared -avoid-version $(HARU_LIB)
+pkglib_LTLIBRARIES = libdocs_pdf.la
+libdocs_pdf_la_SOURCES =\
+doc_pdf.cpp\
+MLB_Interface.cpp\
+Polygon_Clipper.cpp\
+Profile_Cross_Sections.cpp\
+Shapes_Report.cpp\
+Shapes_Summary.cpp\
+doc_pdf.h\
+MLB_Interface.h\
+Polygon_Clipper.h\
+Profile_Cross_Sections.h\
+Shapes_Report.h\
+Shapes_Summary.h
+
+libdocs_pdf_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+endif
diff --git a/src/modules_io/docs/docs_pdf/Makefile.in b/src/modules_io/docs/docs_pdf/Makefile.in
new file mode 100644
index 0000000..f788e3a
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/Makefile.in
@@ -0,0 +1,589 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_io/docs/docs_pdf
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+ at HAVE_HARU_TRUE@libdocs_pdf_la_DEPENDENCIES = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+am__libdocs_pdf_la_SOURCES_DIST = doc_pdf.cpp MLB_Interface.cpp \
+	Polygon_Clipper.cpp Profile_Cross_Sections.cpp \
+	Shapes_Report.cpp Shapes_Summary.cpp doc_pdf.h MLB_Interface.h \
+	Polygon_Clipper.h Profile_Cross_Sections.h Shapes_Report.h \
+	Shapes_Summary.h
+ at HAVE_HARU_TRUE@am_libdocs_pdf_la_OBJECTS = doc_pdf.lo \
+ at HAVE_HARU_TRUE@	MLB_Interface.lo Polygon_Clipper.lo \
+ at HAVE_HARU_TRUE@	Profile_Cross_Sections.lo Shapes_Report.lo \
+ at HAVE_HARU_TRUE@	Shapes_Summary.lo
+libdocs_pdf_la_OBJECTS = $(am_libdocs_pdf_la_OBJECTS)
+ at HAVE_HARU_TRUE@am_libdocs_pdf_la_rpath = -rpath $(pkglibdir)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libdocs_pdf_la_SOURCES)
+DIST_SOURCES = $(am__libdocs_pdf_la_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#
+# $Id: Makefile.am,v 1.2 2010/11/06 15:16:36 johanvdw Exp $
+#
+ at DEBUG_TRUE@DBGFLAGS = -g -DDEBUG
+ at SAGA_UNICODE_TRUE@UC_DEFS = -D_SAGA_UNICODE
+ at HAVE_HARU_TRUE@DEF_SAGA = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+ at HAVE_HARU_TRUE@CXX_INCS = -I$(top_srcdir)/src/saga_core
+ at HAVE_HARU_TRUE@AM_CXXFLAGS = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS) $(DISABLELIBHARU)
+ at HAVE_HARU_TRUE@AM_LDFLAGS = -fPIC -shared -avoid-version $(HARU_LIB)
+ at HAVE_HARU_TRUE@pkglib_LTLIBRARIES = libdocs_pdf.la
+ at HAVE_HARU_TRUE@libdocs_pdf_la_SOURCES = \
+ at HAVE_HARU_TRUE@doc_pdf.cpp\
+ at HAVE_HARU_TRUE@MLB_Interface.cpp\
+ at HAVE_HARU_TRUE@Polygon_Clipper.cpp\
+ at HAVE_HARU_TRUE@Profile_Cross_Sections.cpp\
+ at HAVE_HARU_TRUE@Shapes_Report.cpp\
+ at HAVE_HARU_TRUE@Shapes_Summary.cpp\
+ at HAVE_HARU_TRUE@doc_pdf.h\
+ at HAVE_HARU_TRUE@MLB_Interface.h\
+ at HAVE_HARU_TRUE@Polygon_Clipper.h\
+ at HAVE_HARU_TRUE@Profile_Cross_Sections.h\
+ at HAVE_HARU_TRUE@Shapes_Report.h\
+ at HAVE_HARU_TRUE@Shapes_Summary.h
+
+ at HAVE_HARU_TRUE@libdocs_pdf_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_io/docs/docs_pdf/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_io/docs/docs_pdf/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+	}
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libdocs_pdf.la: $(libdocs_pdf_la_OBJECTS) $(libdocs_pdf_la_DEPENDENCIES) 
+	$(CXXLINK) $(am_libdocs_pdf_la_rpath) $(libdocs_pdf_la_OBJECTS) $(libdocs_pdf_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Polygon_Clipper.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Profile_Cross_Sections.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Shapes_Report.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Shapes_Summary.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/doc_pdf.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_io/docs/docs_pdf/Polygon_Clipper.cpp b/src/modules_io/docs/docs_pdf/Polygon_Clipper.cpp
new file mode 100644
index 0000000..5a06e8e
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/Polygon_Clipper.cpp
@@ -0,0 +1,2775 @@
+/*
+===========================================================================
+
+Project:   Generic Polygon Clipper
+
+           A new algorithm for calculating the difference, intersection,
+           exclusive-or or union of arbitrary polygon sets.
+
+File:      gpc.h
+Author:    Alan Murta (email: gpc at cs.man.ac.uk)
+Version:   2.31
+Date:      4th June 1999
+
+Copyright: (C) 1997-1999, Advanced Interfaces Group,
+           University of Manchester.
+
+           This software is free for non-commercial use. It may be copied,
+           modified, and redistributed provided that this copyright notice
+           is preserved on all copies. The intellectual property rights of
+           the algorithms used reside with the University of Manchester
+           Advanced Interfaces Group.
+
+           You may not use this software, in whole or in part, in support
+           of any commercial product without the express consent of the
+           author.
+
+           There is no warranty or other guarantee of fitness of this
+           software for any purpose. It is provided solely "as is".
+
+===========================================================================
+*/
+
+#ifndef __gpc_h
+#define __gpc_h
+
+#include <stdio.h>
+
+
+/*
+===========================================================================
+                               Constants
+===========================================================================
+*/
+
+/* Increase GPC_EPSILON to encourage merging of near coincident edges    */
+
+#define GPC_EPSILON (DBL_EPSILON)
+
+#define GPC_VERSION "2.31"
+
+
+/*
+===========================================================================
+                           Public Data Types
+===========================================================================
+*/
+
+typedef enum                        /* Set operation type                */
+{
+  GPC_DIFF,                         /* Difference                        */
+  GPC_INT,                          /* Intersection                      */
+  GPC_XOR,                          /* Exclusive or                      */
+  GPC_UNION                         /* Union                             */
+} gpc_op;
+
+typedef struct                      /* Polygon vertex structure          */
+{
+  double              x;            /* Vertex x component                */
+  double              y;            /* vertex y component                */
+} gpc_vertex;
+
+typedef struct                      /* Vertex list structure             */
+{
+  int                 num_vertices; /* Number of vertices in list        */
+  gpc_vertex         *vertex;       /* Vertex array pointer              */
+} gpc_vertex_list;
+
+typedef struct                      /* Polygon set structure             */
+{
+  int                 num_contours; /* Number of contours in polygon     */
+  int                *hole;         /* Hole / external contour flags     */
+  gpc_vertex_list    *contour;      /* Contour array pointer             */
+} gpc_polygon;
+
+typedef struct                      /* Tristrip set structure            */
+{
+  int                 num_strips;   /* Number of tristrips               */
+  gpc_vertex_list    *strip;        /* Tristrip array pointer            */
+} gpc_tristrip;
+
+
+/*
+===========================================================================
+                       Public Function Prototypes
+===========================================================================
+*/
+
+#ifdef __cplusplus
+extern "C" void gpc_read_polygon        (FILE            *infile_ptr, 
+                              int              read_hole_flags,
+                              gpc_polygon     *polygon);
+
+extern "C" void gpc_write_polygon       (FILE            *outfile_ptr,
+                              int              write_hole_flags,
+                              gpc_polygon     *polygon);
+
+extern "C" void gpc_add_contour         (gpc_polygon     *polygon,
+                              gpc_vertex_list *contour,
+                              int              hole);
+
+extern "C" void gpc_polygon_clip        (gpc_op           set_operation,
+                              gpc_polygon     *subject_polygon,
+                              gpc_polygon     *clip_polygon,
+                              gpc_polygon     *result_polygon);
+
+extern "C" void gpc_tristrip_clip       (gpc_op           set_operation,
+                              gpc_polygon     *subject_polygon,
+                              gpc_polygon     *clip_polygon,
+                              gpc_tristrip    *result_tristrip);
+
+extern "C" void gpc_polygon_to_tristrip (gpc_polygon     *polygon,
+                              gpc_tristrip    *tristrip);
+
+extern "C" void gpc_free_polygon        (gpc_polygon     *polygon);
+
+extern "C" void gpc_free_tristrip       (gpc_tristrip    *tristrip);
+
+#else
+void gpc_read_polygon        (FILE            *infile_ptr, 
+                              int              read_hole_flags,
+                              gpc_polygon     *polygon);
+
+void gpc_write_polygon       (FILE            *outfile_ptr,
+                              int              write_hole_flags,
+                              gpc_polygon     *polygon);
+
+void gpc_add_contour         (gpc_polygon     *polygon,
+                              gpc_vertex_list *contour,
+                              int              hole);
+
+void gpc_polygon_clip        (gpc_op           set_operation,
+                              gpc_polygon     *subject_polygon,
+                              gpc_polygon     *clip_polygon,
+                              gpc_polygon     *result_polygon);
+
+void gpc_tristrip_clip       (gpc_op           set_operation,
+                              gpc_polygon     *subject_polygon,
+                              gpc_polygon     *clip_polygon,
+                              gpc_tristrip    *result_tristrip);
+
+void gpc_polygon_to_tristrip (gpc_polygon     *polygon,
+                              gpc_tristrip    *tristrip);
+
+void gpc_free_polygon        (gpc_polygon     *polygon);
+
+void gpc_free_tristrip       (gpc_tristrip    *tristrip);
+#endif
+
+#endif
+
+/*
+===========================================================================
+                           End of file: gpc.h
+===========================================================================
+*/
+
+/*
+===========================================================================
+
+Project:   Generic Polygon Clipper
+
+           A new algorithm for calculating the difference, intersection,
+           exclusive-or or union of arbitrary polygon sets.
+
+File:      gpc.c
+Author:    Alan Murta (email: gpc at cs.man.ac.uk)
+Version:   2.31
+Date:      4th June 1999
+
+Copyright: (C) 1997-1999, Advanced Interfaces Group,
+           University of Manchester.
+
+           This software is free for non-commercial use. It may be copied,
+           modified, and redistributed provided that this copyright notice
+           is preserved on all copies. The intellectual property rights of
+           the algorithms used reside with the University of Manchester
+           Advanced Interfaces Group.
+
+           You may not use this software, in whole or in part, in support
+           of any commercial product without the express consent of the
+           author.
+
+           There is no warranty or other guarantee of fitness of this
+           software for any purpose. It is provided solely "as is".
+
+===========================================================================
+*/
+
+
+/*
+===========================================================================
+                                Includes
+===========================================================================
+*/
+
+#include <stdlib.h>
+#include <float.h>
+#include <math.h>
+
+
+/*
+===========================================================================
+                                Constants
+===========================================================================
+*/
+
+#ifndef TRUE
+#define FALSE              0
+#define TRUE               1
+#endif
+
+#define LEFT               0
+#define RIGHT              1
+
+#define ABOVE              0
+#define BELOW              1
+
+#define CLIP               0
+#define SUBJ               1
+
+#define INVERT_TRISTRIPS   FALSE
+
+
+/*
+===========================================================================
+                                 Macros 
+===========================================================================
+*/
+
+#define EQ(a, b)           (fabs((a) - (b)) <= GPC_EPSILON)
+
+#define PREV_INDEX(i, n)   ((i - 1 + n) % n)
+#define NEXT_INDEX(i, n)   ((i + 1    ) % n)
+
+#define OPTIMAL(v, i, n)   ((v[PREV_INDEX(i, n)].y != v[i].y) || \
+                            (v[NEXT_INDEX(i, n)].y != v[i].y))
+
+#define FWD_MIN(v, i, n)   ((v[PREV_INDEX(i, n)].vertex.y >= v[i].vertex.y) \
+                         && (v[NEXT_INDEX(i, n)].vertex.y > v[i].vertex.y))
+
+#define NOT_FMAX(v, i, n)   (v[NEXT_INDEX(i, n)].vertex.y > v[i].vertex.y)
+
+#define REV_MIN(v, i, n)   ((v[PREV_INDEX(i, n)].vertex.y > v[i].vertex.y) \
+                         && (v[NEXT_INDEX(i, n)].vertex.y >= v[i].vertex.y))
+
+#define NOT_RMAX(v, i, n)   (v[PREV_INDEX(i, n)].vertex.y > v[i].vertex.y)
+
+#define VERTEX(e,p,s,x,y)  {add_vertex(&((e)->outp[(p)]->v[(s)]), x, y); \
+                            (e)->outp[(p)]->active++;}
+
+#define P_EDGE(d,e,p,i,j)  {(d)= (e); \
+                            do {(d)= (d)->prev;} while (!(d)->outp[(p)]); \
+                            (i)= (d)->bot.x + (d)->dx * ((j)-(d)->bot.y);}
+
+#define N_EDGE(d,e,p,i,j)  {(d)= (e); \
+                            do {(d)= (d)->next;} while (!(d)->outp[(p)]); \
+                            (i)= (d)->bot.x + (d)->dx * ((j)-(d)->bot.y);}
+/*
+#define _MALLOC(p, b, s)    {if ((b) > 0) { \
+                            ((void *)p)= malloc(b); if (!(p)) { \
+                            fprintf(stderr, "gpc malloc failure: %s\n", s); \
+				            exit(0);}} else p= NULL;}
+*/
+#define _MALLOC(p, b, s)    {if ((b) > 0) { \
+							void	**pPointer	= ((void **)&p);\
+                            *pPointer= malloc(b); if (!(p)) { \
+                            fprintf(stderr, "gpc malloc failure: %s\n", s); \
+				            }} else p= NULL;}
+
+#define FREE(p)            {if (p) {free(p); (p)= NULL;}}
+
+
+/*
+===========================================================================
+                            Private Data Types
+===========================================================================
+*/
+
+typedef enum                        /* Edge intersection classes         */
+{
+  NUL,                              /* Empty non-intersection            */
+  EMX,                              /* External maximum                  */
+  ELI,                              /* External left intermediate        */
+  TED,                              /* Top edge                          */
+  ERI,                              /* External right intermediate       */
+  RED,                              /* Right edge                        */
+  IMM,                              /* Internal maximum and minimum      */
+  IMN,                              /* Internal minimum                  */
+  EMN,                              /* External minimum                  */
+  EMM,                              /* External maximum and minimum      */
+  LED,                              /* Left edge                         */
+  ILI,                              /* Internal left intermediate        */
+  BED,                              /* Bottom edge                       */
+  IRI,                              /* Internal right intermediate       */
+  IMX,                              /* Internal maximum                  */
+  FUL                               /* Full non-intersection             */
+} vertex_type;
+
+typedef enum                        /* Horizontal edge states            */
+{
+  NH,                               /* No horizontal edge                */
+  BH,                               /* Bottom horizontal edge            */
+  TH                                /* Top horizontal edge               */
+} h_state;
+
+typedef enum                        /* Edge bundle state                 */
+{
+  UNBUNDLED,                        /* Isolated edge not within a bundle */
+  BUNDLE_HEAD,                      /* Bundle head node                  */
+  BUNDLE_TAIL                       /* Passive bundle tail node          */
+} bundle_state;
+
+typedef struct v_shape              /* Internal vertex list datatype     */
+{
+  double              x;            /* X coordinate component            */
+  double              y;            /* Y coordinate component            */
+  struct v_shape     *next;         /* Pointer to next vertex in list    */
+} vertex_node;
+
+typedef struct p_shape              /* Internal contour / tristrip type  */
+{
+  int                 active;       /* Active flag / vertex count        */
+  int                 hole;         /* Hole / external contour flag      */
+  vertex_node        *v[2];         /* Left and right vertex list ptrs   */
+  struct p_shape     *next;         /* Pointer to next polygon contour   */
+  struct p_shape     *proxy;        /* Pointer to actual structure used  */
+} polygon_node;
+
+typedef struct edge_shape
+{
+  gpc_vertex          vertex;       /* Piggy-backed contour vertex data  */
+  gpc_vertex          bot;          /* Edge lower (x, y) coordinate      */
+  gpc_vertex          top;          /* Edge upper (x, y) coordinate      */
+  double              xb;           /* Scanbeam bottom x coordinate      */
+  double              xt;           /* Scanbeam top x coordinate         */
+  double              dx;           /* Change in x for a unit y increase */
+  int                 type;         /* Clip / subject edge flag          */
+  int                 bundle[2][2]; /* Bundle edge flags                 */
+  int                 bside[2];     /* Bundle left / right indicators    */
+  bundle_state        bstate[2];    /* Edge bundle state                 */
+  polygon_node       *outp[2];      /* Output polygon / tristrip pointer */
+  struct edge_shape  *prev;         /* Previous edge in the AET          */
+  struct edge_shape  *next;         /* Next edge in the AET              */
+  struct edge_shape  *pred;         /* Edge connected at the lower end   */
+  struct edge_shape  *succ;         /* Edge connected at the upper end   */
+  struct edge_shape  *next_bound;   /* Pointer to next bound in LMT      */
+} edge_node;
+
+typedef struct lmt_shape            /* Local minima table                */
+{
+  double              y;            /* Y coordinate at local minimum     */
+  edge_node          *first_bound;  /* Pointer to bound list             */
+  struct lmt_shape   *next;         /* Pointer to next local minimum     */
+} lmt_node;
+
+typedef struct sbt_t_shape          /* Scanbeam tree                     */
+{
+  double              y;            /* Scanbeam node y value             */
+  struct sbt_t_shape *less;         /* Pointer to nodes with lower y     */
+  struct sbt_t_shape *more;         /* Pointer to nodes with higher y    */
+} sb_tree;
+
+typedef struct it_shape             /* Intersection table                */
+{
+  edge_node          *ie[2];        /* Intersecting edge (bundle) pair   */
+  gpc_vertex          point;        /* Point of intersection             */
+  struct it_shape    *next;         /* The next intersection table node  */
+} it_node;
+
+typedef struct st_shape             /* Sorted edge table                 */
+{
+  edge_node          *edge;         /* Pointer to AET edge               */
+  double              xb;           /* Scanbeam bottom x coordinate      */
+  double              xt;           /* Scanbeam top x coordinate         */
+  double              dx;           /* Change in x for a unit y increase */
+  struct st_shape    *prev;         /* Previous edge in sorted list      */
+} st_node;
+
+typedef struct bbox_shape           /* Contour axis-aligned bounding box */
+{
+  double             xmin;          /* Minimum x coordinate              */
+  double             ymin;          /* Minimum y coordinate              */
+  double             xmax;          /* Maximum x coordinate              */
+  double             ymax;          /* Maximum y coordinate              */
+} bbox;
+
+
+/*
+===========================================================================
+                               Global Data
+===========================================================================
+*/
+
+/* Horizontal edge state transitions within scanbeam boundary */
+const h_state next_h_state[3][6]=
+{
+  /*        ABOVE     BELOW     CROSS */
+  /*        L   R     L   R     L   R */  
+  /* NH */ {BH, TH,   TH, BH,   NH, NH},
+  /* BH */ {NH, NH,   NH, NH,   TH, TH},
+  /* TH */ {NH, NH,   NH, NH,   BH, BH}
+};
+
+
+/*
+===========================================================================
+                             Private Functions
+===========================================================================
+*/
+
+static void reset_it(it_node **it)
+{
+  it_node *itn;
+
+  while (*it)
+  {
+    itn= (*it)->next;
+    FREE(*it);
+    *it= itn;
+  }
+}
+
+
+static void reset_lmt(lmt_node **lmt)
+{
+  lmt_node *lmtn;
+
+  while (*lmt)
+  {
+    lmtn= (*lmt)->next;
+    FREE(*lmt);
+    *lmt= lmtn;
+  }
+}
+
+
+static void insert_bound(edge_node **b, edge_node *e)
+{
+  edge_node *existing_bound;
+
+  if (!*b)
+  {
+    /* Link node e to the tail of the list */
+    *b= e;
+  }
+  else
+  {
+    /* Do primary sort on the x field */
+    if (e[0].bot.x < (*b)[0].bot.x)
+    {
+      /* Insert a new node mid-list */
+      existing_bound= *b;
+      *b= e;
+      (*b)->next_bound= existing_bound;
+    }
+    else
+    {
+      if (e[0].bot.x == (*b)[0].bot.x)
+      {
+        /* Do secondary sort on the dx field */
+        if (e[0].dx < (*b)[0].dx)
+        {
+          /* Insert a new node mid-list */
+          existing_bound= *b;
+          *b= e;
+          (*b)->next_bound= existing_bound;
+        }
+        else
+        {
+          /* Head further down the list */
+          insert_bound(&((*b)->next_bound), e);
+        }
+      }
+      else
+      {
+        /* Head further down the list */
+        insert_bound(&((*b)->next_bound), e);
+      }
+    }
+  }
+}
+
+
+static edge_node **bound_list(lmt_node **lmt, double y)
+{
+  lmt_node *existing_node;
+
+  if (!*lmt)
+  {
+    /* Add node onto the tail end of the LMT */
+    _MALLOC(*lmt, sizeof(lmt_node), "LMT insertion");
+    (*lmt)->y= y;
+    (*lmt)->first_bound= NULL;
+    (*lmt)->next= NULL;
+    return &((*lmt)->first_bound);
+  }
+  else
+    if (y < (*lmt)->y)
+    {
+      /* Insert a new LMT node before the current node */
+      existing_node= *lmt;
+      _MALLOC(*lmt, sizeof(lmt_node), "LMT insertion");
+      (*lmt)->y= y;
+      (*lmt)->first_bound= NULL;
+      (*lmt)->next= existing_node;
+      return &((*lmt)->first_bound);
+    }
+    else
+      if (y > (*lmt)->y)
+        /* Head further up the LMT */
+        return bound_list(&((*lmt)->next), y);
+      else
+        /* Use this existing LMT node */
+        return &((*lmt)->first_bound);
+}
+
+
+static void add_to_sbtree(int *entries, sb_tree **sbtree, double y)
+{
+  if (!*sbtree)
+  {
+    /* Add a new tree node here */
+    _MALLOC(*sbtree, sizeof(sb_tree), "scanbeam tree insertion");
+    (*sbtree)->y= y;
+    (*sbtree)->less= NULL;
+    (*sbtree)->more= NULL;
+    (*entries)++;
+  }
+  else
+  {
+    if ((*sbtree)->y > y)
+    {
+    /* Head into the 'less' sub-tree */
+      add_to_sbtree(entries, &((*sbtree)->less), y);
+    }
+    else
+    {
+      if ((*sbtree)->y < y)
+      {
+        /* Head into the 'more' sub-tree */
+        add_to_sbtree(entries, &((*sbtree)->more), y);
+      }
+    }
+  }
+}
+
+
+static void build_sbt(int *entries, double *sbt, sb_tree *sbtree)
+{
+  if (sbtree->less)
+    build_sbt(entries, sbt, sbtree->less);
+  sbt[*entries]= sbtree->y;
+  (*entries)++;
+  if (sbtree->more)
+    build_sbt(entries, sbt, sbtree->more);
+}
+
+
+static void free_sbtree(sb_tree **sbtree)
+{
+  if (*sbtree)
+  {
+    free_sbtree(&((*sbtree)->less));
+    free_sbtree(&((*sbtree)->more));
+    FREE(*sbtree);
+  }
+}
+
+
+static int count_optimal_vertices(gpc_vertex_list c)
+{
+  int result= 0, i;
+
+  /* Ignore non-contributing contours */
+  if (c.num_vertices > 0)
+  {
+    for (i= 0; i < c.num_vertices; i++)
+      /* Ignore superfluous vertices embedded in horizontal edges */
+      if (OPTIMAL(c.vertex, i, c.num_vertices))
+        result++;
+  }
+  return result;
+}
+
+
+static edge_node *build_lmt(lmt_node **lmt, sb_tree **sbtree,
+                            int *sbt_entries, gpc_polygon *p, int type,
+                            gpc_op op)
+{
+  int          c, i, min, max, num_edges, v, num_vertices;
+  int          total_vertices= 0, e_index=0;
+  edge_node   *e, *edge_table;
+
+  for (c= 0; c < p->num_contours; c++)
+    total_vertices+= count_optimal_vertices(p->contour[c]);
+
+  /* Create the entire input polygon edge table in one go */
+  _MALLOC(edge_table, total_vertices * sizeof(edge_node),
+         "edge table creation");
+
+  for (c= 0; c < p->num_contours; c++)
+  {
+    if (p->contour[c].num_vertices < 0)
+    {
+      /* Ignore the non-contributing contour and repair the vertex count */
+      p->contour[c].num_vertices= -p->contour[c].num_vertices;
+    }
+    else
+    {
+      /* Perform contour optimisation */
+      num_vertices= 0;
+      for (i= 0; i < p->contour[c].num_vertices; i++)
+        if (OPTIMAL(p->contour[c].vertex, i, p->contour[c].num_vertices))
+        {
+          edge_table[num_vertices].vertex.x= p->contour[c].vertex[i].x;
+          edge_table[num_vertices].vertex.y= p->contour[c].vertex[i].y;
+
+          /* Record vertex in the scanbeam table */
+          add_to_sbtree(sbt_entries, sbtree,
+                        edge_table[num_vertices].vertex.y);
+
+          num_vertices++;
+        }
+
+      /* Do the contour forward pass */
+      for (min= 0; min < num_vertices; min++)
+      {
+        /* If a forward local minimum... */
+        if (FWD_MIN(edge_table, min, num_vertices))
+        {
+          /* Search for the next local maximum... */
+          num_edges= 1;
+          max= NEXT_INDEX(min, num_vertices);
+          while (NOT_FMAX(edge_table, max, num_vertices))
+          {
+            num_edges++;
+            max= NEXT_INDEX(max, num_vertices);
+          }
+
+          /* Build the next edge list */
+          e= &edge_table[e_index];
+          e_index+= num_edges;
+          v= min;
+          e[0].bstate[BELOW]= UNBUNDLED;
+          e[0].bundle[BELOW][CLIP]= FALSE;
+          e[0].bundle[BELOW][SUBJ]= FALSE;
+          for (i= 0; i < num_edges; i++)
+          {
+            e[i].xb= edge_table[v].vertex.x;
+            e[i].bot.x= edge_table[v].vertex.x;
+            e[i].bot.y= edge_table[v].vertex.y;
+
+            v= NEXT_INDEX(v, num_vertices);
+
+            e[i].top.x= edge_table[v].vertex.x;
+            e[i].top.y= edge_table[v].vertex.y;
+            e[i].dx= (edge_table[v].vertex.x - e[i].bot.x) /
+                       (e[i].top.y - e[i].bot.y);
+            e[i].type= type;
+            e[i].outp[ABOVE]= NULL;
+            e[i].outp[BELOW]= NULL;
+            e[i].next= NULL;
+            e[i].prev= NULL;
+            e[i].succ= ((num_edges > 1) && (i < (num_edges - 1))) ?
+                       &(e[i + 1]) : NULL;
+            e[i].pred= ((num_edges > 1) && (i > 0)) ? &(e[i - 1]) : NULL;
+            e[i].next_bound= NULL;
+            e[i].bside[CLIP]= (op == GPC_DIFF) ? RIGHT : LEFT;
+            e[i].bside[SUBJ]= LEFT;
+          }
+          insert_bound(bound_list(lmt, edge_table[min].vertex.y), e);
+        }
+      }
+
+      /* Do the contour reverse pass */
+      for (min= 0; min < num_vertices; min++)
+      {
+      /* If a reverse local minimum... */
+        if (REV_MIN(edge_table, min, num_vertices))
+        {
+          /* Search for the previous local maximum... */
+          num_edges= 1;
+          max= PREV_INDEX(min, num_vertices);
+          while (NOT_RMAX(edge_table, max, num_vertices))
+          {
+            num_edges++;
+            max= PREV_INDEX(max, num_vertices);
+          }
+
+          /* Build the previous edge list */
+          e= &edge_table[e_index];
+          e_index+= num_edges;
+          v= min;
+          e[0].bstate[BELOW]= UNBUNDLED;
+          e[0].bundle[BELOW][CLIP]= FALSE;
+          e[0].bundle[BELOW][SUBJ]= FALSE;
+          for (i= 0; i < num_edges; i++)
+          {
+            e[i].xb= edge_table[v].vertex.x;
+            e[i].bot.x= edge_table[v].vertex.x;
+            e[i].bot.y= edge_table[v].vertex.y;
+
+            v= PREV_INDEX(v, num_vertices);
+
+            e[i].top.x= edge_table[v].vertex.x;
+            e[i].top.y= edge_table[v].vertex.y;
+            e[i].dx= (edge_table[v].vertex.x - e[i].bot.x) /
+                       (e[i].top.y - e[i].bot.y);
+            e[i].type= type;
+            e[i].outp[ABOVE]= NULL;
+            e[i].outp[BELOW]= NULL;
+            e[i].next= NULL;
+            e[i].prev= NULL;
+            e[i].succ= ((num_edges > 1) && (i < (num_edges - 1))) ?
+                       &(e[i + 1]) : NULL;
+            e[i].pred= ((num_edges > 1) && (i > 0)) ? &(e[i - 1]) : NULL;
+            e[i].next_bound= NULL;
+            e[i].bside[CLIP]= (op == GPC_DIFF) ? RIGHT : LEFT;
+            e[i].bside[SUBJ]= LEFT;
+          }
+          insert_bound(bound_list(lmt, edge_table[min].vertex.y), e);
+        }
+      }
+    }
+  }
+  return edge_table;
+}
+
+
+static void add_edge_to_aet(edge_node **aet, edge_node *edge, edge_node *prev)
+{
+  if (!*aet)
+  {
+    /* Append edge onto the tail end of the AET */
+    *aet= edge;
+    edge->prev= prev;
+    edge->next= NULL;
+  }
+  else
+  {
+    /* Do primary sort on the xb field */
+    if (edge->xb < (*aet)->xb)
+    {
+      /* Insert edge here (before the AET edge) */
+      edge->prev= prev;
+      edge->next= *aet;
+      (*aet)->prev= edge;
+      *aet= edge;
+    }
+    else
+    {
+      if (edge->xb == (*aet)->xb)
+      {
+        /* Do secondary sort on the dx field */
+        if (edge->dx < (*aet)->dx)
+        {
+          /* Insert edge here (before the AET edge) */
+          edge->prev= prev;
+          edge->next= *aet;
+          (*aet)->prev= edge;
+          *aet= edge;
+        }
+        else
+        {
+          /* Head further into the AET */
+          add_edge_to_aet(&((*aet)->next), edge, *aet);
+        }
+      }
+      else
+      {
+        /* Head further into the AET */
+        add_edge_to_aet(&((*aet)->next), edge, *aet);
+      }
+    }
+  }
+}
+
+
+static void add_intersection(it_node **it, edge_node *edge0, edge_node *edge1,
+                             double x, double y)
+{
+  it_node *existing_node;
+
+  if (!*it)
+  {
+    /* Append a new node to the tail of the list */
+    _MALLOC(*it, sizeof(it_node), "IT insertion");
+    (*it)->ie[0]= edge0;
+    (*it)->ie[1]= edge1;
+    (*it)->point.x= x;
+    (*it)->point.y= y;
+    (*it)->next= NULL;
+  }
+  else
+  {
+    if ((*it)->point.y > y)
+    {
+      /* Insert a new node mid-list */
+      existing_node= *it;
+      _MALLOC(*it, sizeof(it_node), "IT insertion");
+      (*it)->ie[0]= edge0;
+      (*it)->ie[1]= edge1;
+      (*it)->point.x= x;
+      (*it)->point.y= y;
+      (*it)->next= existing_node;
+    }
+    else
+      /* Head further down the list */
+      add_intersection(&((*it)->next), edge0, edge1, x, y);
+  }
+}
+
+
+static void add_st_edge(st_node **st, it_node **it, edge_node *edge,
+                        double dy)
+{
+  st_node *existing_node;
+  double   den, r, x, y;
+
+  if (!*st)
+  {
+    /* Append edge onto the tail end of the ST */
+    _MALLOC(*st, sizeof(st_node), "ST insertion");
+    (*st)->edge= edge;
+    (*st)->xb= edge->xb;
+    (*st)->xt= edge->xt;
+    (*st)->dx= edge->dx;
+    (*st)->prev= NULL;
+  }
+  else
+  {
+    den= ((*st)->xt - (*st)->xb) - (edge->xt - edge->xb);
+
+    /* If new edge and ST edge don't cross */
+    if ((edge->xt >= (*st)->xt) || (edge->dx == (*st)->dx) || 
+        (fabs(den) <= DBL_EPSILON))
+    {
+      /* No intersection - insert edge here (before the ST edge) */
+      existing_node= *st;
+      _MALLOC(*st, sizeof(st_node), "ST insertion");
+      (*st)->edge= edge;
+      (*st)->xb= edge->xb;
+      (*st)->xt= edge->xt;
+      (*st)->dx= edge->dx;
+      (*st)->prev= existing_node;
+    }
+    else
+    {
+      /* Compute intersection between new edge and ST edge */
+      r= (edge->xb - (*st)->xb) / den;
+      x= (*st)->xb + r * ((*st)->xt - (*st)->xb);
+      y= r * dy;
+
+      /* Insert the edge pointers and the intersection point in the IT */
+      add_intersection(it, (*st)->edge, edge, x, y);
+
+      /* Head further into the ST */
+      add_st_edge(&((*st)->prev), it, edge, dy);
+    }
+  }
+}
+
+
+static void build_intersection_table(it_node **it, edge_node *aet, double dy)
+{
+  st_node   *st, *stp;
+  edge_node *edge;
+
+  /* Build intersection table for the current scanbeam */
+  reset_it(it);
+  st= NULL;
+
+  /* Process each AET edge */
+  for (edge= aet; edge; edge= edge->next)
+  {
+    if ((edge->bstate[ABOVE] == BUNDLE_HEAD) ||
+         edge->bundle[ABOVE][CLIP] || edge->bundle[ABOVE][SUBJ])
+      add_st_edge(&st, it, edge, dy);
+  }
+
+  /* Free the sorted edge table */
+  while (st)
+  {
+    stp= st->prev;
+    FREE(st);
+    st= stp;
+  }
+}
+
+static int count_contours(polygon_node *polygon)
+{
+  int          nc, nv;
+  vertex_node *v, *nextv;
+
+  for (nc= 0; polygon; polygon= polygon->next)
+    if (polygon->active)
+    {
+      /* Count the vertices in the current contour */
+      nv= 0;
+      for (v= polygon->proxy->v[LEFT]; v; v= v->next)
+        nv++;
+
+      /* Record valid vertex counts in the active field */
+      if (nv > 2)
+      {
+        polygon->active= nv;
+        nc++;
+      }
+      else
+      {
+        /* Invalid contour: just free the heap */
+        for (v= polygon->proxy->v[LEFT]; v; v= nextv)
+        {
+          nextv= v->next;
+          FREE(v);
+        }
+        polygon->active= 0;
+      }
+    }
+  return nc;
+}
+
+
+static void add_left(polygon_node *p, double x, double y)
+{
+  vertex_node *nv;
+
+  /* Create a new vertex node and set its fields */
+  _MALLOC(nv, sizeof(vertex_node), "vertex node creation");
+  nv->x= x;
+  nv->y= y;
+
+  /* Add vertex nv to the left end of the polygon's vertex list */
+  nv->next= p->proxy->v[LEFT];
+
+  /* Update proxy->[LEFT] to point to nv */
+  p->proxy->v[LEFT]= nv;
+}
+
+
+static void merge_left(polygon_node *p, polygon_node *q, polygon_node *list)
+{
+  polygon_node *target;
+
+  /* Label contour as a hole */
+  q->proxy->hole= TRUE;
+
+  if (p->proxy != q->proxy)
+  {
+    /* Assign p's vertex list to the left end of q's list */
+    p->proxy->v[RIGHT]->next= q->proxy->v[LEFT];
+    q->proxy->v[LEFT]= p->proxy->v[LEFT];
+
+    /* Redirect any p->proxy references to q->proxy */
+    
+    for (target= p->proxy; list; list= list->next)
+    {
+      if (list->proxy == target)
+      {
+        list->active= FALSE;
+        list->proxy= q->proxy;
+      }
+    }
+  }
+}
+
+
+static void add_right(polygon_node *p, double x, double y)
+{
+  vertex_node *nv;
+
+  /* Create a new vertex node and set its fields */
+  _MALLOC(nv, sizeof(vertex_node), "vertex node creation");
+  nv->x= x;
+  nv->y= y;
+  nv->next= NULL;
+
+  /* Add vertex nv to the right end of the polygon's vertex list */
+  p->proxy->v[RIGHT]->next= nv;
+
+  /* Update proxy->v[RIGHT] to point to nv */
+  p->proxy->v[RIGHT]= nv;
+}
+
+
+static void merge_right(polygon_node *p, polygon_node *q, polygon_node *list)
+{
+  polygon_node *target;
+
+  /* Label contour as external */
+  q->proxy->hole= FALSE;
+
+  if (p->proxy != q->proxy)
+  {
+    /* Assign p's vertex list to the right end of q's list */
+    q->proxy->v[RIGHT]->next= p->proxy->v[LEFT];
+    q->proxy->v[RIGHT]= p->proxy->v[RIGHT];
+
+    /* Redirect any p->proxy references to q->proxy */
+    for (target= p->proxy; list; list= list->next)
+    {
+      if (list->proxy == target)
+      {
+        list->active= FALSE;
+        list->proxy= q->proxy;
+      }
+    }
+  }
+}
+
+
+static void add_local_min(polygon_node **p, edge_node *edge,
+                          double x, double y)
+{
+  polygon_node *existing_min;
+  vertex_node  *nv;
+
+  existing_min= *p;
+
+  _MALLOC(*p, sizeof(polygon_node), "polygon node creation");
+
+  /* Create a new vertex node and set its fields */
+  _MALLOC(nv, sizeof(vertex_node), "vertex node creation");
+  nv->x= x;
+  nv->y= y;
+  nv->next= NULL;
+
+  /* Initialise proxy to point to p itself */
+  (*p)->proxy= (*p);
+  (*p)->active= TRUE;
+  (*p)->next= existing_min;
+
+  /* Make v[LEFT] and v[RIGHT] point to new vertex nv */
+  (*p)->v[LEFT]= nv;
+  (*p)->v[RIGHT]= nv;
+
+  /* Assign polygon p to the edge */
+  edge->outp[ABOVE]= *p;
+}
+
+
+static int count_tristrips(polygon_node *tn)
+{
+  int total;
+
+  for (total= 0; tn; tn= tn->next)
+    if (tn->active > 2)
+      total++;
+  return total;
+}
+
+
+static void add_vertex(vertex_node **t, double x, double y)
+{
+  if (!(*t))
+  {
+    _MALLOC(*t, sizeof(vertex_node), "tristrip vertex creation");
+    (*t)->x= x;
+    (*t)->y= y;
+    (*t)->next= NULL;
+  }
+  else
+    /* Head further down the list */
+    add_vertex(&((*t)->next), x, y);
+}
+
+
+static void new_tristrip(polygon_node **tn, edge_node *edge,
+                         double x, double y)
+{
+  if (!(*tn))
+  {
+    _MALLOC(*tn, sizeof(polygon_node), "tristrip node creation");
+    (*tn)->next= NULL;
+    (*tn)->v[LEFT]= NULL;
+    (*tn)->v[RIGHT]= NULL;
+    (*tn)->active= 1;
+    add_vertex(&((*tn)->v[LEFT]), x, y); 
+    edge->outp[ABOVE]= *tn;
+  }
+  else
+    /* Head further down the list */
+    new_tristrip(&((*tn)->next), edge, x, y);
+}
+
+
+static bbox *create_contour_bboxes(gpc_polygon *p)
+{
+  bbox *box;
+  int   c, v;
+
+  _MALLOC(box, p->num_contours * sizeof(bbox), "Bounding box creation");
+
+  /* Construct contour bounding boxes */
+  for (c= 0; c < p->num_contours; c++)
+  {
+    /* Initialise bounding box extent */
+    box[c].xmin= DBL_MAX;
+    box[c].ymin= DBL_MAX;
+    box[c].xmax= -DBL_MAX;
+    box[c].ymax= -DBL_MAX;
+
+    for (v= 0; v < p->contour[c].num_vertices; v++)
+    {
+      /* Adjust bounding box */
+      if (p->contour[c].vertex[v].x < box[c].xmin)
+        box[c].xmin= p->contour[c].vertex[v].x;
+      if (p->contour[c].vertex[v].y < box[c].ymin)
+        box[c].ymin= p->contour[c].vertex[v].y;
+      if (p->contour[c].vertex[v].x > box[c].xmax)
+        box[c].xmax= p->contour[c].vertex[v].x;
+      if (p->contour[c].vertex[v].y > box[c].ymax)
+          box[c].ymax= p->contour[c].vertex[v].y;
+    }
+  }
+  return box;  
+}
+
+
+static void minimax_test(gpc_polygon *subj, gpc_polygon *clip, gpc_op op)
+{
+  bbox *s_bbox, *c_bbox;
+  int   s, c, *o_table, overlap;
+
+  s_bbox= create_contour_bboxes(subj);
+  c_bbox= create_contour_bboxes(clip);
+
+  _MALLOC(o_table, subj->num_contours * clip->num_contours * sizeof(int),
+         "overlap table creation");
+
+  /* Check all subject contour bounding boxes against clip boxes */
+  for (s= 0; s < subj->num_contours; s++)
+    for (c= 0; c < clip->num_contours; c++)
+      o_table[c * subj->num_contours + s]=
+             (!((s_bbox[s].xmax < c_bbox[c].xmin) ||
+                (s_bbox[s].xmin > c_bbox[c].xmax))) &&
+             (!((s_bbox[s].ymax < c_bbox[c].ymin) ||
+                (s_bbox[s].ymin > c_bbox[c].ymax)));
+
+  /* For each clip contour, search for any subject contour overlaps */
+  for (c= 0; c < clip->num_contours; c++)
+  {
+    overlap= 0;
+    for (s= 0; (!overlap) && (s < subj->num_contours); s++)
+      overlap= o_table[c * subj->num_contours + s];
+
+    if (!overlap)
+      /* Flag non contributing status by negating vertex count */
+      clip->contour[c].num_vertices = -clip->contour[c].num_vertices;
+  }  
+
+  if (op == GPC_INT)
+  {  
+    /* For each subject contour, search for any clip contour overlaps */
+    for (s= 0; s < subj->num_contours; s++)
+    {
+      overlap= 0;
+      for (c= 0; (!overlap) && (c < clip->num_contours); c++)
+        overlap= o_table[c * subj->num_contours + s];
+
+      if (!overlap)
+        /* Flag non contributing status by negating vertex count */
+        subj->contour[s].num_vertices = -subj->contour[s].num_vertices;
+    }  
+  }
+
+  FREE(s_bbox);
+  FREE(c_bbox);
+  FREE(o_table);
+}
+
+
+/*
+===========================================================================
+                             Public Functions
+===========================================================================
+*/
+
+void gpc_free_polygon(gpc_polygon *p)
+{
+  int c;
+
+  for (c= 0; c < p->num_contours; c++)
+    FREE(p->contour[c].vertex);
+  FREE(p->hole);
+  FREE(p->contour);
+  p->num_contours= 0;
+}
+
+
+void gpc_read_polygon(FILE *fp, int read_hole_flags, gpc_polygon *p)
+{
+  int c, v;
+
+  fscanf(fp, "%d", &(p->num_contours));
+  _MALLOC(p->hole, p->num_contours * sizeof(int),
+         "hole flag array creation");
+  _MALLOC(p->contour, p->num_contours
+         * sizeof(gpc_vertex_list), "contour creation");
+  for (c= 0; c < p->num_contours; c++)
+  {
+    fscanf(fp, "%d", &(p->contour[c].num_vertices));
+
+    if (read_hole_flags)
+      fscanf(fp, "%d", &(p->hole[c]));
+    else
+      p->hole[c]= FALSE; /* Assume all contours to be external */
+
+    _MALLOC(p->contour[c].vertex, p->contour[c].num_vertices
+           * sizeof(gpc_vertex), "vertex creation");
+    for (v= 0; v < p->contour[c].num_vertices; v++)
+      fscanf(fp, "%lf %lf", &(p->contour[c].vertex[v].x),
+                            &(p->contour[c].vertex[v].y));
+  }
+}
+
+
+void gpc_write_polygon(FILE *fp, int write_hole_flags, gpc_polygon *p)
+{
+  int c, v;
+
+  fprintf(fp, "%d\n", p->num_contours);
+  for (c= 0; c < p->num_contours; c++)
+  {
+    fprintf(fp, "%d\n", p->contour[c].num_vertices);
+
+    if (write_hole_flags)
+      fprintf(fp, "%d\n", p->hole[c]);
+    
+    for (v= 0; v < p->contour[c].num_vertices; v++)
+      fprintf(fp, "% .*lf % .*lf\n",
+              DBL_DIG, p->contour[c].vertex[v].x,
+              DBL_DIG, p->contour[c].vertex[v].y);
+  }
+}
+
+
+void gpc_add_contour(gpc_polygon *p, gpc_vertex_list *new_contour, int hole)
+{
+  int             *extended_hole, c, v;
+  gpc_vertex_list *extended_contour;
+
+  /* Create an extended hole array */
+  _MALLOC(extended_hole, (p->num_contours + 1)
+         * sizeof(int), "contour hole addition");
+
+  /* Create an extended contour array */
+  _MALLOC(extended_contour, (p->num_contours + 1)
+         * sizeof(gpc_vertex_list), "contour addition");
+
+  /* Copy the old contour and hole data into the extended arrays */
+  for (c= 0; c < p->num_contours; c++)
+  {
+    extended_hole[c]= p->hole[c];
+    extended_contour[c]= p->contour[c];
+  }
+
+  /* Copy the new contour and hole onto the end of the extended arrays */
+  c= p->num_contours;
+  extended_hole[c]= hole;
+  extended_contour[c].num_vertices= new_contour->num_vertices;
+  _MALLOC(extended_contour[c].vertex, new_contour->num_vertices
+         * sizeof(gpc_vertex), "contour addition");
+  for (v= 0; v < new_contour->num_vertices; v++)
+    extended_contour[c].vertex[v]= new_contour->vertex[v];
+
+  /* Dispose of the old contour */
+  FREE(p->contour);
+  FREE(p->hole);
+
+  /* Update the polygon information */
+  p->num_contours++;
+  p->hole= extended_hole;
+  p->contour= extended_contour;
+}
+
+
+void gpc_polygon_clip(gpc_op op, gpc_polygon *subj, gpc_polygon *clip,
+                      gpc_polygon *result)
+{
+  sb_tree       *sbtree= NULL;
+  it_node       *it= NULL, *intersect;
+  edge_node     *edge, *prev_edge, *next_edge, *succ_edge, *e0, *e1;
+  edge_node     *aet= NULL, *c_heap= NULL, *s_heap= NULL;
+  lmt_node      *lmt= NULL, *local_min;
+  polygon_node  *out_poly= NULL, *p, *q, *poly, *npoly, *cf= NULL;
+  vertex_node   *vtx, *nv;
+  h_state        horiz[2];
+  int            in[2], exists[2], parity[2]= {LEFT, LEFT};
+  int            c, v, contributing, search, scanbeam= 0, sbt_entries= 0;
+  int            vclass, bl, br, tl, tr;
+  double        *sbt= NULL, xb, px, yb, yt, dy, ix, iy;
+
+  /* Test for trivial NULL result cases */
+  if (((subj->num_contours == 0) && (clip->num_contours == 0))
+   || ((subj->num_contours == 0) && ((op == GPC_INT) || (op == GPC_DIFF)))
+   || ((clip->num_contours == 0) &&  (op == GPC_INT)))
+  {
+    result->num_contours= 0;
+    result->hole= NULL;
+    result->contour= NULL;
+    return;
+  }
+
+  /* Identify potentialy contributing contours */
+  if (((op == GPC_INT) || (op == GPC_DIFF))
+   && (subj->num_contours > 0) && (clip->num_contours > 0))
+    minimax_test(subj, clip, op);
+
+  /* Build LMT */
+  if (subj->num_contours > 0)
+    s_heap= build_lmt(&lmt, &sbtree, &sbt_entries, subj, SUBJ, op);
+  if (clip->num_contours > 0)
+    c_heap= build_lmt(&lmt, &sbtree, &sbt_entries, clip, CLIP, op);
+
+  /* Return a NULL result if no contours contribute */
+  if (lmt == NULL)
+  {
+    result->num_contours= 0;
+    result->hole= NULL;
+    result->contour= NULL;
+    reset_lmt(&lmt);
+    FREE(s_heap);
+    FREE(c_heap);
+    return;
+  }
+
+  /* Build scanbeam table from scanbeam tree */
+  _MALLOC(sbt, sbt_entries * sizeof(double), "sbt creation");
+  build_sbt(&scanbeam, sbt, sbtree);
+  scanbeam= 0;
+  free_sbtree(&sbtree);
+
+  /* Allow pointer re-use without causing memory leak */
+  if (subj == result)
+    gpc_free_polygon(subj);
+  if (clip == result)
+    gpc_free_polygon(clip);
+
+  /* Invert clip polygon for difference operation */
+  if (op == GPC_DIFF)
+    parity[CLIP]= RIGHT;
+
+  local_min= lmt;
+
+  /* Process each scanbeam */
+  while (scanbeam < sbt_entries)
+  {
+    /* Set yb and yt to the bottom and top of the scanbeam */
+    yb= sbt[scanbeam++];
+    if (scanbeam < sbt_entries)
+    {
+      yt= sbt[scanbeam];
+      dy= yt - yb;
+    }
+
+    /* === SCANBEAM BOUNDARY PROCESSING ================================ */
+
+    /* If LMT node corresponding to yb exists */
+    if (local_min)
+    {
+      if (local_min->y == yb)
+      {
+        /* Add edges starting at this local minimum to the AET */
+        for (edge= local_min->first_bound; edge; edge= edge->next_bound)
+          add_edge_to_aet(&aet, edge, NULL);
+
+        local_min= local_min->next;
+      }
+    }
+
+    /* Set dummy previous x value */
+    px= -DBL_MAX;
+
+    /* Create bundles within AET */
+    e0= aet;
+    e1= aet;
+
+    /* Set up bundle fields of first edge */
+    aet->bundle[ABOVE][ aet->type]= (aet->top.y != yb);
+    aet->bundle[ABOVE][!aet->type]= FALSE;
+    aet->bstate[ABOVE]= UNBUNDLED;
+
+    for (next_edge= aet->next; next_edge; next_edge= next_edge->next)
+    {
+      /* Set up bundle fields of next edge */
+      next_edge->bundle[ABOVE][ next_edge->type]= (next_edge->top.y != yb);
+      next_edge->bundle[ABOVE][!next_edge->type]= FALSE;
+      next_edge->bstate[ABOVE]= UNBUNDLED;
+
+      /* Bundle edges above the scanbeam boundary if they coincide */
+      if (next_edge->bundle[ABOVE][next_edge->type])
+      {
+        if (EQ(e0->xb, next_edge->xb) && EQ(e0->dx, next_edge->dx)
+	 && (e0->top.y != yb))
+        {
+          next_edge->bundle[ABOVE][ next_edge->type]^= 
+            e0->bundle[ABOVE][ next_edge->type];
+          next_edge->bundle[ABOVE][!next_edge->type]= 
+            e0->bundle[ABOVE][!next_edge->type];
+          next_edge->bstate[ABOVE]= BUNDLE_HEAD;
+          e0->bundle[ABOVE][CLIP]= FALSE;
+          e0->bundle[ABOVE][SUBJ]= FALSE;
+          e0->bstate[ABOVE]= BUNDLE_TAIL;
+        }
+        e0= next_edge;
+      }
+    }
+    
+    horiz[CLIP]= NH;
+    horiz[SUBJ]= NH;
+
+    /* Process each edge at this scanbeam boundary */
+    for (edge= aet; edge; edge= edge->next)
+    {
+      exists[CLIP]= edge->bundle[ABOVE][CLIP] + 
+                   (edge->bundle[BELOW][CLIP] << 1);
+      exists[SUBJ]= edge->bundle[ABOVE][SUBJ] + 
+                   (edge->bundle[BELOW][SUBJ] << 1);
+
+      if (exists[CLIP] || exists[SUBJ])
+      {
+        /* Set bundle side */
+        edge->bside[CLIP]= parity[CLIP];
+        edge->bside[SUBJ]= parity[SUBJ];
+
+        /* Determine contributing status and quadrant occupancies */
+        switch (op)
+        {
+        case GPC_DIFF:
+        case GPC_INT:
+          contributing= (exists[CLIP] && (parity[SUBJ] || horiz[SUBJ]))
+                     || (exists[SUBJ] && (parity[CLIP] || horiz[CLIP]))
+                     || (exists[CLIP] && exists[SUBJ]
+                     && (parity[CLIP] == parity[SUBJ]));
+          br= (parity[CLIP])
+           && (parity[SUBJ]);
+          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
+           && (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
+          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
+           && (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
+          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP]) 
+           && (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
+          break;
+        case GPC_XOR:
+          contributing= exists[CLIP] || exists[SUBJ];
+          br= (parity[CLIP])
+            ^ (parity[SUBJ]);
+          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
+            ^ (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
+          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
+            ^ (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
+          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP]) 
+            ^ (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
+          break;
+        case GPC_UNION:
+          contributing= (exists[CLIP] && (!parity[SUBJ] || horiz[SUBJ]))
+                     || (exists[SUBJ] && (!parity[CLIP] || horiz[CLIP]))
+                     || (exists[CLIP] && exists[SUBJ]
+                     && (parity[CLIP] == parity[SUBJ]));
+          br= (parity[CLIP])
+           || (parity[SUBJ]);
+          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
+           || (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
+          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
+           || (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
+          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP]) 
+           || (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
+          break;
+        }
+
+        /* Update parity */
+        parity[CLIP]^= edge->bundle[ABOVE][CLIP];
+        parity[SUBJ]^= edge->bundle[ABOVE][SUBJ];
+
+        /* Update horizontal state */
+        if (exists[CLIP])         
+          horiz[CLIP]=
+            next_h_state[horiz[CLIP]]
+                        [((exists[CLIP] - 1) << 1) + parity[CLIP]];
+        if (exists[SUBJ])         
+          horiz[SUBJ]=
+            next_h_state[horiz[SUBJ]]
+                        [((exists[SUBJ] - 1) << 1) + parity[SUBJ]];
+
+        vclass= tr + (tl << 1) + (br << 2) + (bl << 3);
+
+        if (contributing)
+        {
+          xb= edge->xb;
+
+          switch (vclass)
+          {
+          case EMN:
+          case IMN:
+            add_local_min(&out_poly, edge, xb, yb);
+            px= xb;
+            cf= edge->outp[ABOVE];
+            break;
+          case ERI:
+            if (xb != px)
+            {
+              add_right(cf, xb, yb);
+              px= xb;
+            }
+            edge->outp[ABOVE]= cf;
+            cf= NULL;
+            break;
+          case ELI:
+            add_left(edge->outp[BELOW], xb, yb);
+            px= xb;
+            cf= edge->outp[BELOW];
+            break;
+          case EMX:
+            if (xb != px)
+            {
+              add_left(cf, xb, yb);
+              px= xb;
+            }
+            merge_right(cf, edge->outp[BELOW], out_poly);
+            cf= NULL;
+            break;
+          case ILI:
+            if (xb != px)
+            {
+              add_left(cf, xb, yb);
+              px= xb;
+            }
+            edge->outp[ABOVE]= cf;
+            cf= NULL;
+            break;
+          case IRI:
+            add_right(edge->outp[BELOW], xb, yb);
+            px= xb;
+            cf= edge->outp[BELOW];
+            edge->outp[BELOW]= NULL;
+            break;
+          case IMX:
+            if (xb != px)
+            {
+              add_right(cf, xb, yb);
+              px= xb;
+            }
+            merge_left(cf, edge->outp[BELOW], out_poly);
+            cf= NULL;
+            edge->outp[BELOW]= NULL;
+            break;
+          case IMM:
+            if (xb != px)
+	    {
+              add_right(cf, xb, yb);
+              px= xb;
+	    }
+            merge_left(cf, edge->outp[BELOW], out_poly);
+            edge->outp[BELOW]= NULL;
+            add_local_min(&out_poly, edge, xb, yb);
+            cf= edge->outp[ABOVE];
+            break;
+          case EMM:
+            if (xb != px)
+	    {
+              add_left(cf, xb, yb);
+              px= xb;
+	    }
+            merge_right(cf, edge->outp[BELOW], out_poly);
+            edge->outp[BELOW]= NULL;
+            add_local_min(&out_poly, edge, xb, yb);
+            cf= edge->outp[ABOVE];
+            break;
+          case LED:
+            if (edge->bot.y == yb)
+              add_left(edge->outp[BELOW], xb, yb);
+            edge->outp[ABOVE]= edge->outp[BELOW];
+            px= xb;
+            break;
+          case RED:
+            if (edge->bot.y == yb)
+              add_right(edge->outp[BELOW], xb, yb);
+            edge->outp[ABOVE]= edge->outp[BELOW];
+            px= xb;
+            break;
+          default:
+            break;
+          } /* End of switch */
+        } /* End of contributing conditional */
+      } /* End of edge exists conditional */
+    } /* End of AET loop */
+
+    /* Delete terminating edges from the AET, otherwise compute xt */
+    for (edge= aet; edge; edge= edge->next)
+    {
+      if (edge->top.y == yb)
+      {
+        prev_edge= edge->prev;
+        next_edge= edge->next;
+        if (prev_edge)
+          prev_edge->next= next_edge;
+        else
+          aet= next_edge;
+        if (next_edge)
+          next_edge->prev= prev_edge;
+
+        /* Copy bundle head state to the adjacent tail edge if required */
+        if ((edge->bstate[BELOW] == BUNDLE_HEAD) && prev_edge)
+	{
+          if (prev_edge->bstate[BELOW] == BUNDLE_TAIL)
+          {
+            prev_edge->outp[BELOW]= edge->outp[BELOW];
+            prev_edge->bstate[BELOW]= UNBUNDLED;
+            if (prev_edge->prev)
+              if (prev_edge->prev->bstate[BELOW] == BUNDLE_TAIL)
+                prev_edge->bstate[BELOW]= BUNDLE_HEAD;
+	  }
+	}
+      }
+      else
+      {
+        if (edge->top.y == yt)
+          edge->xt= edge->top.x;
+        else
+          edge->xt= edge->bot.x + edge->dx * (yt - edge->bot.y);
+      }
+    }
+
+    if (scanbeam < sbt_entries)
+    {
+      /* === SCANBEAM INTERIOR PROCESSING ============================== */
+
+      build_intersection_table(&it, aet, dy);
+
+      /* Process each node in the intersection table */
+      for (intersect= it; intersect; intersect= intersect->next)
+      {
+        e0= intersect->ie[0];
+        e1= intersect->ie[1];
+
+        /* Only generate output for contributing intersections */
+        if ((e0->bundle[ABOVE][CLIP] || e0->bundle[ABOVE][SUBJ])
+         && (e1->bundle[ABOVE][CLIP] || e1->bundle[ABOVE][SUBJ]))
+	{
+          p= e0->outp[ABOVE];
+          q= e1->outp[ABOVE];
+          ix= intersect->point.x;
+          iy= intersect->point.y + yb;
+ 
+          in[CLIP]= ( e0->bundle[ABOVE][CLIP] && !e0->bside[CLIP])
+                 || ( e1->bundle[ABOVE][CLIP] &&  e1->bside[CLIP])
+                 || (!e0->bundle[ABOVE][CLIP] && !e1->bundle[ABOVE][CLIP]
+                     && e0->bside[CLIP] && e1->bside[CLIP]);
+          in[SUBJ]= ( e0->bundle[ABOVE][SUBJ] && !e0->bside[SUBJ])
+                 || ( e1->bundle[ABOVE][SUBJ] &&  e1->bside[SUBJ])
+                 || (!e0->bundle[ABOVE][SUBJ] && !e1->bundle[ABOVE][SUBJ]
+                     && e0->bside[SUBJ] && e1->bside[SUBJ]);
+       
+          /* Determine quadrant occupancies */
+          switch (op)
+          {
+          case GPC_DIFF:
+          case GPC_INT:
+            tr= (in[CLIP])
+             && (in[SUBJ]);
+            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
+             && (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
+            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
+             && (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
+             && (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            break;
+          case GPC_XOR:
+            tr= (in[CLIP])
+              ^ (in[SUBJ]);
+            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
+              ^ (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
+            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
+              ^ (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
+              ^ (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            break;
+          case GPC_UNION:
+            tr= (in[CLIP])
+             || (in[SUBJ]);
+            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
+             || (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
+            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
+             || (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
+             || (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            break;
+          }
+	  
+          vclass= tr + (tl << 1) + (br << 2) + (bl << 3);
+
+          switch (vclass)
+          {
+          case EMN:
+            add_local_min(&out_poly, e0, ix, iy);
+            e1->outp[ABOVE]= e0->outp[ABOVE];
+            break;
+          case ERI:
+            if (p)
+            {
+              add_right(p, ix, iy);
+              e1->outp[ABOVE]= p;
+              e0->outp[ABOVE]= NULL;
+            }
+            break;
+          case ELI:
+            if (q)
+            {
+              add_left(q, ix, iy);
+              e0->outp[ABOVE]= q;
+              e1->outp[ABOVE]= NULL;
+            }
+            break;
+          case EMX:
+            if (p && q)
+            {
+              add_left(p, ix, iy);
+              merge_right(p, q, out_poly);
+              e0->outp[ABOVE]= NULL;
+              e1->outp[ABOVE]= NULL;
+            }
+            break;
+          case IMN:
+            add_local_min(&out_poly, e0, ix, iy);
+            e1->outp[ABOVE]= e0->outp[ABOVE];
+            break;
+          case ILI:
+            if (p)
+            {
+              add_left(p, ix, iy);
+              e1->outp[ABOVE]= p;
+              e0->outp[ABOVE]= NULL;
+            }
+            break;
+          case IRI:
+            if (q)
+            {
+              add_right(q, ix, iy);
+              e0->outp[ABOVE]= q;
+              e1->outp[ABOVE]= NULL;
+            }
+            break;
+          case IMX:
+            if (p && q)
+            {
+              add_right(p, ix, iy);
+              merge_left(p, q, out_poly);
+              e0->outp[ABOVE]= NULL;
+              e1->outp[ABOVE]= NULL;
+            }
+            break;
+          case IMM:
+            if (p && q)
+            {
+              add_right(p, ix, iy);
+              merge_left(p, q, out_poly);
+              add_local_min(&out_poly, e0, ix, iy);
+              e1->outp[ABOVE]= e0->outp[ABOVE];
+            }
+            break;
+          case EMM:
+            if (p && q)
+            {
+              add_left(p, ix, iy);
+              merge_right(p, q, out_poly);
+              add_local_min(&out_poly, e0, ix, iy);
+              e1->outp[ABOVE]= e0->outp[ABOVE];
+            }
+            break;
+          default:
+            break;
+          } /* End of switch */
+	} /* End of contributing intersection conditional */
+
+        /* Swap bundle sides in response to edge crossing */
+        if (e0->bundle[ABOVE][CLIP])
+	  e1->bside[CLIP]= !e1->bside[CLIP];
+        if (e1->bundle[ABOVE][CLIP])
+	  e0->bside[CLIP]= !e0->bside[CLIP];
+        if (e0->bundle[ABOVE][SUBJ])
+	  e1->bside[SUBJ]= !e1->bside[SUBJ];
+        if (e1->bundle[ABOVE][SUBJ])
+	  e0->bside[SUBJ]= !e0->bside[SUBJ];
+
+        /* Swap e0 and e1 bundles in the AET */
+        prev_edge= e0->prev;
+        next_edge= e1->next;
+        if (next_edge)
+          next_edge->prev= e0;
+
+        if (e0->bstate[ABOVE] == BUNDLE_HEAD)
+        {
+          search= TRUE;
+          while (search)
+          {
+            prev_edge= prev_edge->prev;
+            if (prev_edge)
+            {
+              if (prev_edge->bstate[ABOVE] != BUNDLE_TAIL)
+                search= FALSE;
+            }
+            else
+              search= FALSE;
+          }
+        }
+        if (!prev_edge)
+        {
+          aet->prev= e1;
+          e1->next= aet;
+          aet= e0->next;
+        }
+        else
+        {
+          prev_edge->next->prev= e1;
+          e1->next= prev_edge->next;
+          prev_edge->next= e0->next;
+        }
+        e0->next->prev= prev_edge;
+        e1->next->prev= e1;
+        e0->next= next_edge;
+      } /* End of IT loop*/
+
+      /* Prepare for next scanbeam */
+      for (edge= aet; edge; edge= next_edge)
+      {
+        next_edge= edge->next;
+        succ_edge= edge->succ;
+
+        if ((edge->top.y == yt) && succ_edge)
+        {
+          /* Replace AET edge by its successor */
+          succ_edge->outp[BELOW]= edge->outp[ABOVE];
+          succ_edge->bstate[BELOW]= edge->bstate[ABOVE];
+          succ_edge->bundle[BELOW][CLIP]= edge->bundle[ABOVE][CLIP];
+          succ_edge->bundle[BELOW][SUBJ]= edge->bundle[ABOVE][SUBJ];
+          prev_edge= edge->prev;
+          if (prev_edge)
+            prev_edge->next= succ_edge;
+          else
+            aet= succ_edge;
+          if (next_edge)
+            next_edge->prev= succ_edge;
+          succ_edge->prev= prev_edge;
+          succ_edge->next= next_edge;
+        }
+        else
+        {
+          /* Update this edge */
+          edge->outp[BELOW]= edge->outp[ABOVE];
+          edge->bstate[BELOW]= edge->bstate[ABOVE];
+          edge->bundle[BELOW][CLIP]= edge->bundle[ABOVE][CLIP];
+          edge->bundle[BELOW][SUBJ]= edge->bundle[ABOVE][SUBJ];
+          edge->xb= edge->xt;
+	}
+        edge->outp[ABOVE]= NULL;
+      }
+    }
+  } /* === END OF SCANBEAM PROCESSING ================================== */
+
+  /* Generate result polygon from out_poly */
+  result->contour= NULL;
+  result->hole= NULL;
+  result->num_contours= count_contours(out_poly);
+  if (result->num_contours > 0)
+  {
+    _MALLOC(result->hole, result->num_contours
+           * sizeof(int), "hole flag table creation");
+    _MALLOC(result->contour, result->num_contours
+           * sizeof(gpc_vertex_list), "contour creation");
+
+    c= 0;
+    for (poly= out_poly; poly; poly= npoly)
+    {
+      npoly= poly->next;
+      if (poly->active)
+      {
+        result->hole[c]= poly->proxy->hole;
+        result->contour[c].num_vertices= poly->active;
+        _MALLOC(result->contour[c].vertex,
+          result->contour[c].num_vertices * sizeof(gpc_vertex),
+          "vertex creation");
+      
+        v= result->contour[c].num_vertices - 1;
+        for (vtx= poly->proxy->v[LEFT]; vtx; vtx= nv)
+        {
+          nv= vtx->next;
+          result->contour[c].vertex[v].x= vtx->x;
+          result->contour[c].vertex[v].y= vtx->y;
+          FREE(vtx);
+          v--;
+        }
+        c++;
+      }
+      FREE(poly);
+    }
+  }
+
+  /* Tidy up */
+  reset_it(&it);
+  reset_lmt(&lmt);
+  FREE(c_heap);
+  FREE(s_heap);
+  FREE(sbt);
+}
+
+
+void gpc_free_tristrip(gpc_tristrip *t)
+{
+  int s;
+
+  for (s= 0; s < t->num_strips; s++)
+    FREE(t->strip[s].vertex);
+  FREE(t->strip);
+  t->num_strips= 0;
+}
+
+
+void gpc_polygon_to_tristrip(gpc_polygon *s, gpc_tristrip *t)
+{
+  gpc_polygon c;
+
+  c.num_contours= 0;
+  c.hole= NULL;
+  c.contour= NULL;
+  gpc_tristrip_clip(GPC_DIFF, s, &c, t);
+}
+
+
+void gpc_tristrip_clip(gpc_op op, gpc_polygon *subj, gpc_polygon *clip,
+                       gpc_tristrip *result)
+{
+  sb_tree       *sbtree= NULL;
+  it_node       *it= NULL, *intersect;
+  edge_node     *edge, *prev_edge, *next_edge, *succ_edge, *e0, *e1;
+  edge_node     *aet= NULL, *c_heap= NULL, *s_heap= NULL, *cf;
+  lmt_node      *lmt= NULL, *local_min;
+  polygon_node  *tlist= NULL, *tn, *tnn, *p, *q;
+  vertex_node   *lt, *ltn, *rt, *rtn;
+  h_state        horiz[2];
+  vertex_type    cft;
+  int            in[2], exists[2], parity[2]= {LEFT, LEFT};
+  int            s, v, contributing, search, scanbeam= 0, sbt_entries= 0;
+  int            vclass, bl, br, tl, tr;
+  double        *sbt= NULL, xb, px, nx, yb, yt, dy, ix, iy;
+
+  /* Test for trivial NULL result cases */
+  if (((subj->num_contours == 0) && (clip->num_contours == 0))
+   || ((subj->num_contours == 0) && ((op == GPC_INT) || (op == GPC_DIFF)))
+   || ((clip->num_contours == 0) &&  (op == GPC_INT)))
+  {
+    result->num_strips= 0;
+    result->strip= NULL;
+    return;
+  }
+
+  /* Identify potentialy contributing contours */
+  if (((op == GPC_INT) || (op == GPC_DIFF))
+   && (subj->num_contours > 0) && (clip->num_contours > 0))
+    minimax_test(subj, clip, op);
+
+  /* Build LMT */
+  if (subj->num_contours > 0)
+    s_heap= build_lmt(&lmt, &sbtree, &sbt_entries, subj, SUBJ, op);
+  if (clip->num_contours > 0)
+    c_heap= build_lmt(&lmt, &sbtree, &sbt_entries, clip, CLIP, op);
+
+  /* Return a NULL result if no contours contribute */
+  if (lmt == NULL)
+  {
+    result->num_strips= 0;
+    result->strip= NULL;
+    reset_lmt(&lmt);
+    FREE(s_heap);
+    FREE(c_heap);
+    return;
+  }
+
+  /* Build scanbeam table from scanbeam tree */
+  _MALLOC(sbt, sbt_entries * sizeof(double), "sbt creation");
+  build_sbt(&scanbeam, sbt, sbtree);
+  scanbeam= 0;
+  free_sbtree(&sbtree);
+
+  /* Invert clip polygon for difference operation */
+  if (op == GPC_DIFF)
+    parity[CLIP]= RIGHT;
+
+  local_min= lmt;
+
+  /* Process each scanbeam */
+  while (scanbeam < sbt_entries)
+  {
+    /* Set yb and yt to the bottom and top of the scanbeam */
+    yb= sbt[scanbeam++];
+    if (scanbeam < sbt_entries)
+    {
+      yt= sbt[scanbeam];
+      dy= yt - yb;
+    }
+
+    /* === SCANBEAM BOUNDARY PROCESSING ================================ */
+
+    /* If LMT node corresponding to yb exists */
+    if (local_min)
+    {
+      if (local_min->y == yb)
+      {
+        /* Add edges starting at this local minimum to the AET */
+        for (edge= local_min->first_bound; edge; edge= edge->next_bound)
+          add_edge_to_aet(&aet, edge, NULL);
+
+        local_min= local_min->next;
+      }
+    }
+
+    /* Set dummy previous x value */
+    px= -DBL_MAX;
+
+    /* Create bundles within AET */
+    e0= aet;
+    e1= aet;
+
+    /* Set up bundle fields of first edge */
+    aet->bundle[ABOVE][ aet->type]= (aet->top.y != yb);
+    aet->bundle[ABOVE][!aet->type]= FALSE;
+    aet->bstate[ABOVE]= UNBUNDLED;
+
+    for (next_edge= aet->next; next_edge; next_edge= next_edge->next)
+    {
+      /* Set up bundle fields of next edge */
+      next_edge->bundle[ABOVE][ next_edge->type]= (next_edge->top.y != yb);
+      next_edge->bundle[ABOVE][!next_edge->type]= FALSE;
+      next_edge->bstate[ABOVE]= UNBUNDLED;
+
+      /* Bundle edges above the scanbeam boundary if they coincide */
+      if (next_edge->bundle[ABOVE][next_edge->type])
+      {
+        if (EQ(e0->xb, next_edge->xb) && EQ(e0->dx, next_edge->dx)
+	 && (e0->top.y != yb))
+        {
+          next_edge->bundle[ABOVE][ next_edge->type]^= 
+            e0->bundle[ABOVE][ next_edge->type];
+          next_edge->bundle[ABOVE][!next_edge->type]= 
+            e0->bundle[ABOVE][!next_edge->type]; 
+          next_edge->bstate[ABOVE]= BUNDLE_HEAD;
+          e0->bundle[ABOVE][CLIP]= FALSE;
+          e0->bundle[ABOVE][SUBJ]= FALSE;
+          e0->bstate[ABOVE]= BUNDLE_TAIL;
+        }
+        e0= next_edge;
+      }
+    }
+
+    horiz[CLIP]= NH;
+    horiz[SUBJ]= NH;
+
+    /* Process each edge at this scanbeam boundary */
+    for (edge= aet; edge; edge= edge->next)
+    {
+      exists[CLIP]= edge->bundle[ABOVE][CLIP] + 
+                   (edge->bundle[BELOW][CLIP] << 1);
+      exists[SUBJ]= edge->bundle[ABOVE][SUBJ] + 
+                   (edge->bundle[BELOW][SUBJ] << 1);
+
+      if (exists[CLIP] || exists[SUBJ])
+      {
+        /* Set bundle side */
+        edge->bside[CLIP]= parity[CLIP];
+        edge->bside[SUBJ]= parity[SUBJ];
+
+        /* Determine contributing status and quadrant occupancies */
+        switch (op)
+        {
+        case GPC_DIFF:
+        case GPC_INT:
+          contributing= (exists[CLIP] && (parity[SUBJ] || horiz[SUBJ]))
+                     || (exists[SUBJ] && (parity[CLIP] || horiz[CLIP]))
+                     || (exists[CLIP] && exists[SUBJ]
+                     && (parity[CLIP] == parity[SUBJ]));
+          br= (parity[CLIP])
+           && (parity[SUBJ]);
+          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
+           && (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
+          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
+           && (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
+          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP]) 
+           && (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
+          break;
+        case GPC_XOR:
+          contributing= exists[CLIP] || exists[SUBJ];
+          br= (parity[CLIP])
+            ^ (parity[SUBJ]);
+          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
+            ^ (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
+          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
+            ^ (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
+          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP])
+            ^ (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
+          break;
+        case GPC_UNION:
+          contributing= (exists[CLIP] && (!parity[SUBJ] || horiz[SUBJ]))
+                     || (exists[SUBJ] && (!parity[CLIP] || horiz[CLIP]))
+                     || (exists[CLIP] && exists[SUBJ]
+                     && (parity[CLIP] == parity[SUBJ]));
+          br= (parity[CLIP])
+           || (parity[SUBJ]);
+          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
+           || (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
+          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
+           || (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
+          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP])
+           || (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
+          break;
+        }
+
+        /* Update parity */
+        parity[CLIP]^= edge->bundle[ABOVE][CLIP];
+        parity[SUBJ]^= edge->bundle[ABOVE][SUBJ];
+
+        /* Update horizontal state */
+        if (exists[CLIP])         
+          horiz[CLIP]=
+            next_h_state[horiz[CLIP]]
+                        [((exists[CLIP] - 1) << 1) + parity[CLIP]];
+        if (exists[SUBJ])         
+          horiz[SUBJ]=
+            next_h_state[horiz[SUBJ]]
+                        [((exists[SUBJ] - 1) << 1) + parity[SUBJ]];
+        
+        vclass= tr + (tl << 1) + (br << 2) + (bl << 3);
+
+        if (contributing)
+        {
+          xb= edge->xb;
+
+          switch (vclass)
+          {
+          case EMN:
+            new_tristrip(&tlist, edge, xb, yb);
+            cf= edge;
+            break;
+          case ERI:
+            edge->outp[ABOVE]= cf->outp[ABOVE];
+            if (xb != cf->xb)
+              VERTEX(edge, ABOVE, RIGHT, xb, yb);
+            cf= NULL;
+            break;
+          case ELI:
+            VERTEX(edge, BELOW, LEFT, xb, yb);
+            edge->outp[ABOVE]= NULL;
+            cf= edge;
+            break;
+          case EMX:
+            if (xb != cf->xb)
+              VERTEX(edge, BELOW, RIGHT, xb, yb);
+            edge->outp[ABOVE]= NULL;
+            cf= NULL;
+            break;
+          case IMN:
+            if (cft == LED)
+	    {
+              if (cf->bot.y != yb)
+                VERTEX(cf, BELOW, LEFT, cf->xb, yb);
+              new_tristrip(&tlist, cf, cf->xb, yb);
+	    }
+            edge->outp[ABOVE]= cf->outp[ABOVE];
+            VERTEX(edge, ABOVE, RIGHT, xb, yb);
+            break;
+          case ILI:
+            new_tristrip(&tlist, edge, xb, yb);
+            cf= edge;
+            cft= ILI;
+            break;
+          case IRI:
+            if (cft == LED)
+	    {
+              if (cf->bot.y != yb)
+                VERTEX(cf, BELOW, LEFT, cf->xb, yb);
+              new_tristrip(&tlist, cf, cf->xb, yb);
+	    }
+            VERTEX(edge, BELOW, RIGHT, xb, yb);
+            edge->outp[ABOVE]= NULL;
+            break;
+          case IMX:
+            VERTEX(edge, BELOW, LEFT, xb, yb);
+            edge->outp[ABOVE]= NULL;
+            cft= IMX;
+            break;
+	  case IMM:
+            VERTEX(edge, BELOW, LEFT, xb, yb);
+            edge->outp[ABOVE]= cf->outp[ABOVE];
+            if (xb != cf->xb)
+              VERTEX(cf, ABOVE, RIGHT, xb, yb);
+            cf= edge;
+            break;
+          case EMM:
+            VERTEX(edge, BELOW, RIGHT, xb, yb);
+            edge->outp[ABOVE]= NULL;
+            new_tristrip(&tlist, edge, xb, yb);
+            cf= edge;
+            break;
+          case LED:
+            if (edge->bot.y == yb)
+              VERTEX(edge, BELOW, LEFT, xb, yb);
+            edge->outp[ABOVE]= edge->outp[BELOW];
+            cf= edge;
+            cft= LED;
+            break;
+          case RED:
+            edge->outp[ABOVE]= cf->outp[ABOVE];
+            if (cft == LED)
+	    {
+              if (cf->bot.y == yb)
+	      {
+                VERTEX(edge, BELOW, RIGHT, xb, yb);
+	      }
+              else
+	      {
+                if (edge->bot.y == yb)
+		{
+                  VERTEX(cf, BELOW, LEFT, cf->xb, yb);
+                  VERTEX(edge, BELOW, RIGHT, xb, yb);
+		}
+	      }
+	    }
+            else
+	    {
+              VERTEX(edge, BELOW, RIGHT, xb, yb);
+              VERTEX(edge, ABOVE, RIGHT, xb, yb);
+	    }
+            cf= NULL;
+            break;
+          default:
+            break;
+          } /* End of switch */
+        } /* End of contributing conditional */
+      } /* End of edge exists conditional */
+    } /* End of AET loop */
+
+    /* Delete terminating edges from the AET, otherwise compute xt */
+    for (edge= aet; edge; edge= edge->next)
+    {
+      if (edge->top.y == yb)
+      {
+        prev_edge= edge->prev;
+        next_edge= edge->next;
+        if (prev_edge)
+          prev_edge->next= next_edge;
+        else
+          aet= next_edge;
+        if (next_edge)
+          next_edge->prev= prev_edge;
+
+        /* Copy bundle head state to the adjacent tail edge if required */
+        if ((edge->bstate[BELOW] == BUNDLE_HEAD) && prev_edge)
+	{
+          if (prev_edge->bstate[BELOW] == BUNDLE_TAIL)
+          {
+            prev_edge->outp[BELOW]= edge->outp[BELOW];
+            prev_edge->bstate[BELOW]= UNBUNDLED;
+            if (prev_edge->prev)
+              if (prev_edge->prev->bstate[BELOW] == BUNDLE_TAIL)
+                prev_edge->bstate[BELOW]= BUNDLE_HEAD;
+	  }
+	}
+      }
+      else
+      {
+        if (edge->top.y == yt)
+          edge->xt= edge->top.x;
+        else
+          edge->xt= edge->bot.x + edge->dx * (yt - edge->bot.y);
+      }
+    }
+
+    if (scanbeam < sbt_entries)
+    {
+      /* === SCANBEAM INTERIOR PROCESSING ============================== */
+  
+      build_intersection_table(&it, aet, dy);
+
+      /* Process each node in the intersection table */
+      for (intersect= it; intersect; intersect= intersect->next)
+      {
+        e0= intersect->ie[0];
+        e1= intersect->ie[1];
+
+        /* Only generate output for contributing intersections */
+        if ((e0->bundle[ABOVE][CLIP] || e0->bundle[ABOVE][SUBJ])
+         && (e1->bundle[ABOVE][CLIP] || e1->bundle[ABOVE][SUBJ]))
+	{
+          p= e0->outp[ABOVE];
+          q= e1->outp[ABOVE];
+          ix= intersect->point.x;
+          iy= intersect->point.y + yb;
+
+          in[CLIP]= ( e0->bundle[ABOVE][CLIP] && !e0->bside[CLIP])
+                 || ( e1->bundle[ABOVE][CLIP] &&  e1->bside[CLIP])
+                 || (!e0->bundle[ABOVE][CLIP] && !e1->bundle[ABOVE][CLIP]
+                     && e0->bside[CLIP] && e1->bside[CLIP]);
+          in[SUBJ]= ( e0->bundle[ABOVE][SUBJ] && !e0->bside[SUBJ])
+                 || ( e1->bundle[ABOVE][SUBJ] &&  e1->bside[SUBJ])
+                 || (!e0->bundle[ABOVE][SUBJ] && !e1->bundle[ABOVE][SUBJ]
+                     && e0->bside[SUBJ] && e1->bside[SUBJ]);
+
+          /* Determine quadrant occupancies */
+          switch (op)
+          {
+          case GPC_DIFF:
+          case GPC_INT:
+            tr= (in[CLIP])
+             && (in[SUBJ]);
+            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
+             && (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
+            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
+             && (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
+             && (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            break;
+          case GPC_XOR:
+            tr= (in[CLIP])
+              ^ (in[SUBJ]);
+            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
+              ^ (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
+            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
+              ^ (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
+              ^ (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            break;
+          case GPC_UNION:
+            tr= (in[CLIP])
+             || (in[SUBJ]);
+            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
+             || (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
+            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
+             || (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
+             || (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
+            break;
+          }
+
+          vclass= tr + (tl << 1) + (br << 2) + (bl << 3);
+
+          switch (vclass)
+          {
+          case EMN:
+            new_tristrip(&tlist, e1, ix, iy);
+            e0->outp[ABOVE]= e1->outp[ABOVE];
+            break;
+          case ERI:
+            if (p)
+            {
+              P_EDGE(prev_edge, e0, ABOVE, px, iy);
+              VERTEX(prev_edge, ABOVE, LEFT, px, iy);
+              VERTEX(e0, ABOVE, RIGHT, ix, iy);
+              e1->outp[ABOVE]= e0->outp[ABOVE];
+              e0->outp[ABOVE]= NULL;
+            }
+            break;
+          case ELI:
+            if (q)
+            {
+              N_EDGE(next_edge, e1, ABOVE, nx, iy);
+              VERTEX(e1, ABOVE, LEFT, ix, iy);
+              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
+              e0->outp[ABOVE]= e1->outp[ABOVE];
+              e1->outp[ABOVE]= NULL;
+            }
+            break;
+          case EMX:
+            if (p && q)
+            {
+              VERTEX(e0, ABOVE, LEFT, ix, iy);
+              e0->outp[ABOVE]= NULL;
+              e1->outp[ABOVE]= NULL;
+            }
+            break;
+          case IMN:
+            P_EDGE(prev_edge, e0, ABOVE, px, iy);
+            VERTEX(prev_edge, ABOVE, LEFT, px, iy);
+            N_EDGE(next_edge, e1, ABOVE, nx, iy);
+            VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
+            new_tristrip(&tlist, prev_edge, px, iy); 
+            e1->outp[ABOVE]= prev_edge->outp[ABOVE];
+            VERTEX(e1, ABOVE, RIGHT, ix, iy);
+            new_tristrip(&tlist, e0, ix, iy);
+            next_edge->outp[ABOVE]= e0->outp[ABOVE];
+            VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
+            break;
+          case ILI:
+            if (p)
+            {
+              VERTEX(e0, ABOVE, LEFT, ix, iy);
+              N_EDGE(next_edge, e1, ABOVE, nx, iy);
+              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
+              e1->outp[ABOVE]= e0->outp[ABOVE];
+              e0->outp[ABOVE]= NULL;
+            }
+            break;
+          case IRI:
+            if (q)
+            {
+              VERTEX(e1, ABOVE, RIGHT, ix, iy);
+              P_EDGE(prev_edge, e0, ABOVE, px, iy);
+              VERTEX(prev_edge, ABOVE, LEFT, px, iy);
+              e0->outp[ABOVE]= e1->outp[ABOVE];
+              e1->outp[ABOVE]= NULL;
+            }
+            break;
+          case IMX:
+            if (p && q)
+            {
+              VERTEX(e0, ABOVE, RIGHT, ix, iy);
+              VERTEX(e1, ABOVE, LEFT, ix, iy);
+              e0->outp[ABOVE]= NULL;
+              e1->outp[ABOVE]= NULL;
+              P_EDGE(prev_edge, e0, ABOVE, px, iy);
+              VERTEX(prev_edge, ABOVE, LEFT, px, iy);
+              new_tristrip(&tlist, prev_edge, px, iy);
+              N_EDGE(next_edge, e1, ABOVE, nx, iy);
+              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
+              next_edge->outp[ABOVE]= prev_edge->outp[ABOVE];
+              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
+            }
+            break;
+          case IMM:
+            if (p && q)
+            {
+              VERTEX(e0, ABOVE, RIGHT, ix, iy);
+              VERTEX(e1, ABOVE, LEFT, ix, iy);
+              P_EDGE(prev_edge, e0, ABOVE, px, iy);
+              VERTEX(prev_edge, ABOVE, LEFT, px, iy);
+              new_tristrip(&tlist, prev_edge, px, iy);
+              N_EDGE(next_edge, e1, ABOVE, nx, iy);
+              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
+              e1->outp[ABOVE]= prev_edge->outp[ABOVE];
+              VERTEX(e1, ABOVE, RIGHT, ix, iy);
+              new_tristrip(&tlist, e0, ix, iy);
+              next_edge->outp[ABOVE]= e0->outp[ABOVE];
+              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
+            }
+            break;
+          case EMM:
+            if (p && q)
+            {
+              VERTEX(e0, ABOVE, LEFT, ix, iy);
+              new_tristrip(&tlist, e1, ix, iy);
+              e0->outp[ABOVE]= e1->outp[ABOVE];
+            }
+            break;
+          default:
+            break;
+          } /* End of switch */
+	} /* End of contributing intersection conditional */
+
+        /* Swap bundle sides in response to edge crossing */
+        if (e0->bundle[ABOVE][CLIP])
+	  e1->bside[CLIP]= !e1->bside[CLIP];
+        if (e1->bundle[ABOVE][CLIP])
+	  e0->bside[CLIP]= !e0->bside[CLIP];
+        if (e0->bundle[ABOVE][SUBJ])
+	  e1->bside[SUBJ]= !e1->bside[SUBJ];
+        if (e1->bundle[ABOVE][SUBJ])
+	  e0->bside[SUBJ]= !e0->bside[SUBJ];
+
+        /* Swap e0 and e1 bundles in the AET */
+        prev_edge= e0->prev;
+        next_edge= e1->next;
+        if (e1->next)
+          e1->next->prev= e0;
+
+        if (e0->bstate[ABOVE] == BUNDLE_HEAD)
+        {
+          search= TRUE;
+          while (search)
+          {
+            prev_edge= prev_edge->prev;
+            if (prev_edge)
+            {
+              if (prev_edge->bundle[ABOVE][CLIP]
+               || prev_edge->bundle[ABOVE][SUBJ]
+               || (prev_edge->bstate[ABOVE] == BUNDLE_HEAD))
+                search= FALSE;
+            }
+            else
+              search= FALSE;
+          }
+        }
+        if (!prev_edge)
+        {
+           e1->next= aet;
+           aet= e0->next;
+        }
+        else
+        {
+          e1->next= prev_edge->next;
+          prev_edge->next= e0->next;
+        }
+        e0->next->prev= prev_edge;
+        e1->next->prev= e1;
+        e0->next= next_edge;
+      } /* End of IT loop*/
+
+      /* Prepare for next scanbeam */
+      for (edge= aet; edge; edge= next_edge)
+      {
+        next_edge= edge->next;
+        succ_edge= edge->succ;
+
+        if ((edge->top.y == yt) && succ_edge)
+        {
+          /* Replace AET edge by its successor */
+          succ_edge->outp[BELOW]= edge->outp[ABOVE];
+          succ_edge->bstate[BELOW]= edge->bstate[ABOVE];
+          succ_edge->bundle[BELOW][CLIP]= edge->bundle[ABOVE][CLIP];
+          succ_edge->bundle[BELOW][SUBJ]= edge->bundle[ABOVE][SUBJ];
+          prev_edge= edge->prev;
+          if (prev_edge)
+            prev_edge->next= succ_edge;
+          else
+            aet= succ_edge;
+          if (next_edge)
+            next_edge->prev= succ_edge;
+          succ_edge->prev= prev_edge;
+          succ_edge->next= next_edge;
+        }
+        else
+        {
+          /* Update this edge */
+          edge->outp[BELOW]= edge->outp[ABOVE];
+          edge->bstate[BELOW]= edge->bstate[ABOVE];
+          edge->bundle[BELOW][CLIP]= edge->bundle[ABOVE][CLIP];
+          edge->bundle[BELOW][SUBJ]= edge->bundle[ABOVE][SUBJ];
+          edge->xb= edge->xt;
+        }
+        edge->outp[ABOVE]= NULL;
+      }
+    }
+  } /* === END OF SCANBEAM PROCESSING ================================== */
+
+  /* Generate result tristrip from tlist */
+  result->strip= NULL;
+  result->num_strips= count_tristrips(tlist);
+  if (result->num_strips > 0)
+  {
+    _MALLOC(result->strip, result->num_strips * sizeof(gpc_vertex_list),
+           "tristrip list creation");
+
+    s= 0;
+    for (tn= tlist; tn; tn= tnn)
+    {
+      tnn= tn->next;
+
+      if (tn->active > 2)
+      {
+        /* Valid tristrip: copy the vertices and free the heap */
+        result->strip[s].num_vertices= tn->active;
+        _MALLOC(result->strip[s].vertex, tn->active * sizeof(gpc_vertex),
+               "tristrip creation");
+        v= 0;
+        if (INVERT_TRISTRIPS)
+        {
+          lt= tn->v[RIGHT];
+          rt= tn->v[LEFT];
+        }
+        else
+        {
+          lt= tn->v[LEFT];
+          rt= tn->v[RIGHT];
+        }
+        while (lt || rt)
+        {
+          if (lt)
+          {
+            ltn= lt->next;
+            result->strip[s].vertex[v].x= lt->x;
+            result->strip[s].vertex[v].y= lt->y;
+            v++;
+            FREE(lt);
+            lt= ltn;
+          }
+          if (rt)
+          {
+            rtn= rt->next;
+            result->strip[s].vertex[v].x= rt->x;
+            result->strip[s].vertex[v].y= rt->y;
+            v++;
+            FREE(rt);
+            rt= rtn;
+          }
+        }
+        s++;
+      }
+      else
+      {
+        /* Invalid tristrip: just free the heap */
+        for (lt= tn->v[LEFT]; lt; lt= ltn)
+        {
+          ltn= lt->next;
+          FREE(lt);
+        }
+        for (rt= tn->v[RIGHT]; rt; rt=rtn)
+        {
+          rtn= rt->next;
+          FREE(rt);
+        }
+      }
+      FREE(tn);
+    }
+  }
+
+  /* Tidy up */
+  reset_it(&it);
+  reset_lmt(&lmt);
+  FREE(c_heap);
+  FREE(s_heap);
+  FREE(sbt);
+}
+
+/*
+===========================================================================
+                           End of file: gpc.c
+===========================================================================
+*/
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "Polygon_Clipper.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool _GPC_Set_Polygon(CSG_Shape *pShape, gpc_polygon *pPolygon)
+{
+	pPolygon->contour		= NULL;
+	pPolygon->hole			= NULL;
+	pPolygon->num_contours	= 0;
+
+	for(int iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
+	{
+		if( pShape->Get_Point_Count(iPart) > 0 )
+		{
+			gpc_vertex	*Contour	= (gpc_vertex *)malloc(pShape->Get_Point_Count(iPart) * sizeof(gpc_vertex));
+
+			for(int iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
+			{
+				TSG_Point	Point	= pShape->Get_Point(iPoint, iPart);
+				Contour[iPoint].x	= Point.x;
+				Contour[iPoint].y	= Point.y;
+			}
+
+			gpc_vertex_list	vList;
+
+			vList.num_vertices	= pShape->Get_Point_Count(iPart);
+			vList.vertex		= Contour;
+			gpc_add_contour(pPolygon, &vList, ((CSG_Shape_Polygon *)pShape)->is_Lake(iPart) ? 1 : 0);
+
+			free(Contour);
+		}
+	}
+
+	return( pPolygon->num_contours > 0 );
+}
+
+//---------------------------------------------------------
+bool _GPC_Get_Polygon(CSG_Shape *pShape, gpc_polygon *pPolygon)
+{
+	pShape->Del_Parts();
+
+	if( pPolygon->num_contours > 0 )
+	{
+		for(int iPart=0; iPart<pPolygon->num_contours; iPart++)
+		{
+			gpc_vertex	*Contour	= pPolygon->contour[iPart].vertex;
+			int			nPoints		= pPolygon->contour[iPart].num_vertices;
+
+			for(int iPoint=0; iPoint<nPoints; iPoint++)
+			{
+				pShape->Add_Point(Contour[iPoint].x, Contour[iPoint].y, iPart);
+			}
+		}
+	}
+
+	return( pShape->is_Valid() );
+}
+
+//---------------------------------------------------------
+bool _GPC_Clip(gpc_op Clip_Type, CSG_Shape *pShape_A, CSG_Shape *pShape_B, CSG_Shape *pShape_AB)
+{
+	gpc_polygon	poly_A, poly_B, poly_AB;
+
+	if(	_GPC_Set_Polygon(pShape_A, &poly_A) )
+	{
+		if( _GPC_Set_Polygon(pShape_B, &poly_B) )
+		{
+			gpc_polygon_clip(Clip_Type, &poly_A, &poly_B, &poly_AB);
+
+			if( pShape_AB == NULL )
+			{
+				pShape_AB	= pShape_A;
+			}
+
+			_GPC_Get_Polygon(pShape_AB, &poly_AB);
+
+			gpc_free_polygon(&poly_AB);
+			gpc_free_polygon(&poly_B);
+		}
+
+		gpc_free_polygon(&poly_A);
+	}
+
+	return( pShape_AB && pShape_AB->is_Valid() );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool GPC_Intersection(CSG_Shape *pShape_A, CSG_Shape *pShape_B, CSG_Shape *pShape_AB)
+{
+	return( _GPC_Clip(GPC_INT, pShape_A, pShape_B, pShape_AB) );
+}
+
+//---------------------------------------------------------
+bool GPC_Difference(CSG_Shape *pShape_A, CSG_Shape *pShape_B, CSG_Shape *pShape_AB)
+{
+	return( _GPC_Clip(GPC_DIFF, pShape_A, pShape_B, pShape_AB) );
+}
+
+//---------------------------------------------------------
+bool GPC_ExclusiveOr(CSG_Shape *pShape_A, CSG_Shape *pShape_B, CSG_Shape *pShape_AB)
+{
+	return( _GPC_Clip(GPC_XOR, pShape_A, pShape_B, pShape_AB) );
+}
+
+//---------------------------------------------------------
+bool GPC_Union(CSG_Shape *pShape_A, CSG_Shape *pShape_B, CSG_Shape *pShape_AB)
+{
+	return( _GPC_Clip(GPC_UNION, pShape_A, pShape_B, pShape_AB) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Polygon_Clipper.h b/src/modules_io/docs/docs_pdf/Polygon_Clipper.h
similarity index 100%
rename from src/modules_terrain_analysis/terrain_analysis/ta_profiles/Polygon_Clipper.h
rename to src/modules_io/docs/docs_pdf/Polygon_Clipper.h
diff --git a/src/modules_io/docs/docs_pdf/Profile_Cross_Sections.cpp b/src/modules_io/docs/docs_pdf/Profile_Cross_Sections.cpp
new file mode 100644
index 0000000..6b05114
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/Profile_Cross_Sections.cpp
@@ -0,0 +1,1460 @@
+/*******************************************************************************
+    CrossSections.cpp
+    Copyright (C) Victor Olaya
+
+    This program 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.
+
+    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 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 "Profile_Cross_Sections.h"
+
+#include "Polygon_Clipper.h"
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define OFFSET_X 100
+#define OFFSET_Y 50
+#define TABLE_WIDTH 450
+#define TABLE_LANDSCAPE_WIDTH 680
+#define TABLE_OFFSET_X 70
+#define TABLE_CELLPAD 10
+#define SECTIONS_PER_PAGE 3
+#define CROSS_SECTION_HEIGHT 200
+#define CROSS_SECTION_WIDTH 400
+#define PROFILE_HEIGHT 320
+#define PROFILE_WIDTH 1000
+#define GUITAR_LEYEND_WIDTH 50
+#define GUITAR_LEYEND_HEIGHT 230
+#define GUITAR_WIDTH PROFILE_WIDTH
+#define GUITAR_HEIGHT GUITAR_LEYEND_HEIGHT
+#define SEPARATION 35
+#define VOLUMES_TABLE_COLUMNS 7
+#define VOLUMES_TABLE_COLUMN_WIDTH ((596 - 2 * OFFSET_X) / VOLUMES_TABLE_COLUMNS)
+#define VOLUMES_TABLE_ROW_HEIGHT 20
+#define VOLUMES_TABLE_HEADER_SEPARATION 35
+#define VOLUMES_TABLE_MAX_ROWS 30
+#define SLOPE_RATIO (1. / 3.)
+#define LONG_SEGMENT 5000.
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+//Compute the dot product AB ? BC
+double dot(double *A, double *B, double *C){
+    
+	double *AB = new double[2];
+    double *BC = new double[2];
+    AB[0] = B[0]-A[0];
+    AB[1] = B[1]-A[1];
+    BC[0] = C[0]-B[0];
+    BC[1] = C[1]-B[1];
+    double dot = AB[0] * BC[0] + AB[1] * BC[1];
+    
+	return dot;
+}
+
+//---------------------------------------------------------
+//Compute the cross product AB x AC
+double cross(double *A, double *B, double *C){
+    
+	double *AB = new double[2];
+    double *AC = new double[2];
+    AB[0] = B[0]-A[0];
+    AB[1] = B[1]-A[1];
+    AC[0] = C[0]-A[0];
+    AC[1] = C[1]-A[1];
+    double cross = AB[0] * AC[1] - AB[1] * AC[0];
+    
+	return cross;
+}
+
+//---------------------------------------------------------
+//Compute the distance from A to B
+double distance(double *A, double *B){
+    double d1 = A[0] - B[0];
+    double d2 = A[1] - B[1];
+    return sqrt(d1*d1+d2*d2);
+}
+
+//---------------------------------------------------------
+//Compute the distance from AB to C
+double linePointDist(double *A, double *B, double *C){
+    double dist = cross(A,B,C) / distance(A,B);
+
+    return fabs(dist);
+}
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define SLOPE_TRANSITION 1
+#define DITCH_WIDTH 1
+
+CProfile_Cross_Sections_PDF::CProfile_Cross_Sections_PDF(){}
+
+CProfile_Cross_Sections_PDF::~CProfile_Cross_Sections_PDF(){}
+
+void CProfile_Cross_Sections_PDF::AddCrossSections(TSG_Point ** pCrossSections, 
+									 double *pHeight,
+									 TSG_Point * pRoadSection,
+									 int iSections,
+									 int iCrossSectionPoints,
+									 int iRoadPoints){
+	
+	int i,j;
+	std::vector<TSG_Point> ModifiedRoadSection;
+	std::vector<TSG_Point> ModifiedCrossSection;
+	TSG_Point  *pModifiedRoadSection;
+	TSG_Point  *pModifiedCrossSection;
+	int iCrossSectionPointsB;
+	int iRoadPointsB;
+	
+	Add_Page_Title (_TL("Cross Sections"), PDF_TITLE_01, PDF_PAGE_SIZE_A4, PDF_PAGE_ORIENTATION_PORTRAIT);
+
+	for (i = 0; i < iSections; i++){
+		m_iOffsetY = OFFSET_Y + (int)(CROSS_SECTION_HEIGHT * 1.1 * (i % SECTIONS_PER_PAGE));
+		if (m_iOffsetY == OFFSET_Y){
+			Add_Page();
+		}//if
+		
+		iCrossSectionPointsB = iCrossSectionPoints;
+		iRoadPointsB = iRoadPoints;
+		AdjustSections(pCrossSections[i], pRoadSection, ModifiedCrossSection, ModifiedRoadSection,
+						pHeight[i], iCrossSectionPointsB, iRoadPointsB);
+
+		pModifiedCrossSection = new TSG_Point [iCrossSectionPointsB];
+		pModifiedRoadSection = new TSG_Point [iRoadPointsB];
+		for (j = 0; j < iCrossSectionPointsB; j++){
+			pModifiedCrossSection[j] = ModifiedCrossSection[j];
+		}//for
+		for (j = 0; j < iRoadPointsB; j++){
+			pModifiedRoadSection[j] = ModifiedRoadSection[j];
+		}//for
+		
+		AddCrossSection(pModifiedCrossSection, pModifiedRoadSection,
+						 iCrossSectionPointsB, iRoadPointsB);
+
+		delete [] pModifiedRoadSection;
+		delete [] pModifiedCrossSection;
+	}//for
+	
+}//method
+
+void CProfile_Cross_Sections_PDF::AddCrossSection(TSG_Point * pCrossSection,
+									 TSG_Point * pRoadSection,
+									 int iCrossSectionPoints,
+									 int iRoadPoints){
+
+	int i;	
+    int iMag;
+	int iNumLines;
+	int iFirstPoint, iLastPoint;
+    double fMinLine = 0;
+	double fMaxY, fMinY;
+	double fMaxX, fMinX;
+	double fStep;
+    double fX, fY;
+	double fOffsetX;
+	double fDifX, fDifY;
+	double fRatio;
+	double fHeight;
+	CSG_String sValue;
+	CSG_Points Points;
+
+	iFirstPoint = 0;
+	iLastPoint = iCrossSectionPoints - 1;
+
+	for (i = 1; i < iCrossSectionPoints; i++) {
+		if (pCrossSection[i].x > pRoadSection[0].x){
+			iFirstPoint = i - 1;
+			break;
+		}//if
+	}//for
+	for (i = 1; i < iCrossSectionPoints; i++) {
+		if (pCrossSection[i].x > pRoadSection[iRoadPoints - 1].x){
+			iLastPoint = i;
+			break;
+		}//if
+	}//for
+    
+	fMinX = pCrossSection[iFirstPoint].x;
+	fMaxX = pCrossSection[iLastPoint].x;
+
+	fDifX = fMaxX - fMinX;
+
+	fMaxY  = pCrossSection[0].y;
+	fMinY  = pCrossSection[0].y;
+		    		    
+	for (i = iFirstPoint ; i < iLastPoint + 1; i++) {
+	    if (pCrossSection[i].y > fMaxY) {
+	        fMaxY = pCrossSection[i].y;
+	    }// if
+	    if (pCrossSection[i].y < fMinY) {
+	        fMinY = pCrossSection[i].y;
+	    }// if
+    }//for    
+	
+	for (i = 0; i < iRoadPoints; i++) {
+	    if (pRoadSection[i].y > fMaxY) {
+	        fMaxY = pRoadSection[i].y;
+	    }// if
+	    if (pRoadSection[i].y < fMinY) {
+	        fMinY = pRoadSection[i].y;
+	    }// if
+    }//for 
+
+	fDifY = fMaxY - fMinY;
+
+	fRatio = (fDifX / fDifY) / (CROSS_SECTION_WIDTH / CROSS_SECTION_HEIGHT);
+	if (fRatio > 1){
+		fMaxY = fMaxY + fDifY / 2. * (fRatio - 1.);
+		fMinY = fMinY - fDifY / 2. * (fRatio - 1.);
+
+	}//if
+	else{
+		fMaxX = fMaxX + fDifX / 2. * (1. / fRatio - 1.);
+		fMinX = fMinX - fDifX / 2. * (1. / fRatio - 1.);
+	}//else
+
+	fMaxX = fMaxX + fDifX * .05;
+	fMinX = fMinX - fDifX * .05;
+	fMaxY = fMaxY + fDifY * .05;
+	fMinY = fMinY - fDifY * .05;
+
+	iMag = (int) (log(fMaxY - fMinY) / log(10.0));
+	fStep = (double) ((int) pow(10.0, (double) iMag));                
+	if (fStep == 0){
+		fStep = 1.;
+	}//if
+	if (fMinY < 0) {        	
+		iMag = (int) (log(fabs(fMinY)) / log(10.0));
+		fMinLine = -(int) pow(10.0, (double) iMag);
+	}// if
+	else {
+		fMinLine=(int)(((int)(fMinY/fStep)) *fStep);
+	}//else
+
+	iNumLines = (int) ((fMaxY - fMinY) / fStep);
+
+	while (iNumLines < 8) {
+		fStep = fStep / 2.0;
+		iNumLines = (int) ((fMaxY - fMinY) / fStep);
+	}// while
+	iNumLines = (int) ((fMaxY - fMinLine) / fStep);
+
+	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
+
+	//horizontal lines
+
+	for (i = 0; i < iNumLines; i++) {
+        fY = m_iOffsetY + CROSS_SECTION_HEIGHT
+                - ((fMinLine + fStep * i - fMinY) / (fMaxY - fMinY)) * CROSS_SECTION_HEIGHT;		
+        if (fY <= m_iOffsetY + CROSS_SECTION_HEIGHT && fY >= m_iOffsetY) {
+			fY = fHeight - fY;
+			sValue = SG_Get_String(fMinLine + fStep * (double) i);			
+			Draw_Text(OFFSET_X - 10, fY, SG_Get_String(fMinLine + fStep * (double) i).c_str(),
+					9, PDF_STYLE_TEXT_ALIGN_H_RIGHT);
+			Draw_Line(OFFSET_X, fY, OFFSET_X - 5, fY, 0);
+        }// if
+    }// for	
+
+	iMag = (int) (log(fMaxX - fMinX) / log(10.0));
+	fStep = (double) pow(10.0, (double) iMag);                
+
+	iNumLines = (int) ((fMaxX-fMinX) / fStep);
+	
+	while (iNumLines < 3) {
+		fStep = fStep / 2.0;
+		iNumLines = (int) ((fMaxX-fMinX) / fStep);
+	}// while    
+	fMinLine = (int)(((int)(fMinX/fStep)) * fStep);          
+	while (fMinLine<fMinX){
+		fMinLine+=fStep;
+	}//while
+	fOffsetX = fMinX-fMinLine;
+
+	//vertical lines
+
+	for (i = 0; i < iNumLines; i++) {
+		fX = OFFSET_X + ((fStep * (double) i-fOffsetX) / (fMaxX-fMinX)) * CROSS_SECTION_WIDTH;
+		if (fX >= OFFSET_X && fX < OFFSET_X + CROSS_SECTION_WIDTH){
+			if (fabs(fStep * (double)i+fMinLine) > 100000) {
+				sValue = SG_Get_String(fStep * (double)i+fMinLine);
+			}// if 
+			else {
+				sValue = SG_Get_String(fStep * (double)i+fMinLine, 2, true);
+			}// else
+			Draw_Line (fX, fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT,
+						fX, fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT - 10);
+			Draw_Text(fX, fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT - 15, 
+					SG_Get_String(fMinLine + fStep * (double) i).c_str(), 9, 
+					PDF_STYLE_TEXT_ALIGN_H_CENTER | PDF_STYLE_TEXT_ALIGN_V_TOP );
+		}//if
+	}// for
+	
+	//axis
+	
+	Draw_Line (OFFSET_X, fHeight - m_iOffsetY, 
+				OFFSET_X, fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT, 2);
+	Draw_Line (OFFSET_X, fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT, 
+				OFFSET_X + CROSS_SECTION_WIDTH, 
+				fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT, 2);
+
+	//cross sections
+	
+	fY = m_iOffsetY + CROSS_SECTION_HEIGHT 
+			- CROSS_SECTION_HEIGHT * ((pCrossSection[iFirstPoint].y - fMinY) / (fMaxY - fMinY));
+	fY = fHeight - fY;
+	fX = OFFSET_X + CROSS_SECTION_WIDTH * ((pCrossSection[iFirstPoint].x - fMinX) / (fMaxX - fMinX));
+
+	Points.Add(fX,fY);
+	
+	for (i = iFirstPoint + 1; i < iLastPoint + 1; i++) {
+		fY = m_iOffsetY + CROSS_SECTION_HEIGHT 
+			- CROSS_SECTION_HEIGHT * ((pCrossSection[i].y - fMinY) / (fMaxY - fMinY));
+		fY = fHeight - fY;
+		fX = OFFSET_X + CROSS_SECTION_WIDTH * ((pCrossSection[i].x - fMinX) / (fMaxX - fMinX));
+		Points.Add(fX,fY);
+		if (pCrossSection[i].x > fMaxX){
+			break;
+		}//if
+	}// for
+	Draw_Line(Points, 2, 0x00bb00);
+
+	fY = m_iOffsetY + CROSS_SECTION_HEIGHT 
+			- CROSS_SECTION_HEIGHT * ((pRoadSection[0].y - fMinY) / (fMaxY - fMinY));
+	fY = fHeight - fY;
+	fX = OFFSET_X + CROSS_SECTION_WIDTH * ((pRoadSection[0].x - fMinX) / (fMaxX - fMinX));
+
+	Points.Clear();
+	Points.Add(fX,fY);	        
+	
+	for (i = 1; i < iRoadPoints; i++) {
+		fY = m_iOffsetY + CROSS_SECTION_HEIGHT 
+			- CROSS_SECTION_HEIGHT * ((pRoadSection[i].y - fMinY) / (fMaxY - fMinY));
+		fY = fHeight - fY;
+		fX = OFFSET_X + CROSS_SECTION_WIDTH * ((pRoadSection[i].x - fMinX) / (fMaxX - fMinX));
+		Points.Add(fX,fY);	
+	}// for
+	Draw_Line(Points, 0, 0x0000bb);
+
+
+}//method
+
+void CProfile_Cross_Sections_PDF::AddVolumesTable(TSG_Point * pProfile,
+									TSG_Point ** pCrossSections, 
+									 double *pHeight,
+									 TSG_Point * pRoadSection,
+									 int iSections,
+									 int iCrossSectionPoints,
+									 int iRoadPoints){
+
+
+	int i,j;
+	int iRow;
+	int iRowsWritten = 0;
+	double fDist;
+	double fX,fY;
+	double fXBox, fYBox;
+	double fIn, fOut;
+	double fInPrev, fOutPrev;
+	double fVolume;
+	double fHeight;
+	CSG_String sHeader[] = {_TL("Section"),_TL("Dist."),_TL("Area +"),_TL("Area -"),_TL("Partial D."),_TL("Vol. +"), _TL("Vol. -")};
+			
+	Add_Page_Title(_TL("Volumes"), PDF_TITLE_01);
+
+	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
+	
+	for (i = 0; i < iSections; i++){
+		iRow = iRowsWritten % VOLUMES_TABLE_MAX_ROWS;
+		if (iRow == 0){
+			Add_Page();
+			Draw_Rectangle(OFFSET_X, fHeight - OFFSET_Y,
+							OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * VOLUMES_TABLE_COLUMNS,
+							fHeight - OFFSET_Y - VOLUMES_TABLE_ROW_HEIGHT);			
+			fY = OFFSET_Y + VOLUMES_TABLE_ROW_HEIGHT * .6;
+			fY = fHeight - fY;
+			for (j = 0; j < VOLUMES_TABLE_COLUMNS; j++){
+				fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * j + VOLUMES_TABLE_COLUMN_WIDTH / 2.;				
+				Draw_Text(fX, fY, sHeader[j].c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
+
+				fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * (j + 1);
+				Draw_Line(fX, fHeight - OFFSET_Y, 
+							fX, fHeight - (OFFSET_Y + VOLUMES_TABLE_ROW_HEIGHT),
+							0);
+			}//for
+			if (i){
+				i--;
+			}//if
+		}//if
+		for (j = 0; j < 4; j++){
+			fYBox = OFFSET_Y + VOLUMES_TABLE_HEADER_SEPARATION + VOLUMES_TABLE_ROW_HEIGHT * iRow;
+			fYBox = fHeight - fYBox;
+			fXBox = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * j;			
+			Draw_Rectangle(fXBox, fYBox, fXBox + VOLUMES_TABLE_COLUMN_WIDTH, 
+							fYBox - VOLUMES_TABLE_ROW_HEIGHT);			
+		}//for
+		fDist = pProfile[i].x;		
+		fY = OFFSET_Y + VOLUMES_TABLE_HEADER_SEPARATION + VOLUMES_TABLE_ROW_HEIGHT * (iRow + .6);
+		fY = fHeight - fY;
+		fX = OFFSET_X + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
+		Draw_Text(fX, fY, SG_Get_String(i,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
+
+		fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
+		Draw_Text(fX, fY, SG_Get_String(fDist,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
+
+		CalculateAreas(pCrossSections[i], pRoadSection, pHeight[i], iCrossSectionPoints, 
+						iRoadPoints,fIn, fOut);
+
+		fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * 2 + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
+		Draw_Text(fX, fY, SG_Get_String(fIn,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
+
+		fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * 3 + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
+		Draw_Text(fX, fY, SG_Get_String(fOut,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
+
+		if (iRow > 0){
+			for (j = 4; j < 7; j++){
+				fYBox = OFFSET_Y + VOLUMES_TABLE_HEADER_SEPARATION + VOLUMES_TABLE_ROW_HEIGHT * (iRow - .5);
+				fYBox = fHeight - fYBox;
+				fXBox = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * j;			
+				Draw_Rectangle(fXBox, fYBox, fXBox + VOLUMES_TABLE_COLUMN_WIDTH, 
+								fYBox - VOLUMES_TABLE_ROW_HEIGHT);				
+			}//for
+			fY = OFFSET_Y + VOLUMES_TABLE_HEADER_SEPARATION + VOLUMES_TABLE_ROW_HEIGHT * (iRow + .1) ;
+			fY = fHeight - fY;
+
+			fDist = (pProfile[i].x - pProfile[i-1].x);
+			fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * 4 + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
+			Draw_Text(fX, fY, SG_Get_String(fDist,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
+
+			fVolume = (pProfile[i].x - pProfile[i-1].x) * (fIn + fInPrev) / 2.;
+			fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * 5 + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
+			Draw_Text(fX, fY, SG_Get_String(fVolume,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
+			
+			fVolume = (pProfile[i].x - pProfile[i-1].x) * (fOut + fOutPrev) / 2.;
+			fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * 6 + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
+			Draw_Text(fX, fY, SG_Get_String(fVolume,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
+		}//if
+
+		fInPrev = fIn;
+		fOutPrev = fOut;
+		iRowsWritten++;
+
+	}//for
+
+}//Method
+
+void CProfile_Cross_Sections_PDF::AdjustSections(TSG_Point * pCrossSection,
+									TSG_Point * pRoadSection,
+									std::vector<TSG_Point > &ModifiedCrossSection,
+									std::vector<TSG_Point > &ModifiedRoadSection,
+									double fHeight,
+									int &iCrossSectionPoints, 
+									int &iRoadPoints){
+
+	bool bDitchAdded;
+	int i,j;
+	int iSgn;
+	int iRoadPointsToAdd = 0;
+	int iCrossSectionPointsToAdd = 0;
+	double fX, fY;
+	TSG_Point  P;
+
+	ModifiedCrossSection.clear();
+	ModifiedRoadSection.clear();
+
+	//left half
+
+	for (i = 0 ; i < iCrossSectionPoints - 1; i++){
+		if (pCrossSection[i].x < pRoadSection[0].x && 
+				pCrossSection[i+1].x >= pRoadSection[0].x){
+			break;
+		}//if
+	}//for
+
+	if (i == iCrossSectionPoints - 1){
+		if (pRoadSection[0].y  + fHeight < pCrossSection[0].y){
+			P.x = pRoadSection[0].x - 2* DITCH_WIDTH * SLOPE_TRANSITION - DITCH_WIDTH 
+				- fabs(pCrossSection[0].y - pRoadSection[0].y - fHeight) / SLOPE_RATIO;
+			P.y = pCrossSection[0].y - fHeight;
+			ModifiedRoadSection.push_back(P);
+			P.y = pCrossSection[0].y;
+			ModifiedCrossSection.push_back(P);
+			iCrossSectionPointsToAdd++;
+			iRoadPointsToAdd++;			
+			
+			P.x = pRoadSection[0].x - 2* DITCH_WIDTH * SLOPE_TRANSITION - DITCH_WIDTH;
+			P.y = pRoadSection[0].y;
+			ModifiedRoadSection.push_back(P);
+			iRoadPointsToAdd++;
+
+			P.x = pRoadSection[0].x - DITCH_WIDTH * SLOPE_TRANSITION - DITCH_WIDTH;	
+			P.y = pRoadSection[0].y - DITCH_WIDTH / SLOPE_TRANSITION;
+			ModifiedRoadSection.push_back(P);
+			iRoadPointsToAdd++;
+
+			P.x = pRoadSection[0].x - DITCH_WIDTH * SLOPE_TRANSITION;
+			ModifiedRoadSection.push_back(P);
+			iRoadPointsToAdd++;
+		}//if		
+		P.x = pRoadSection[0].x - fabs(pCrossSection[0].y - pRoadSection[0].y - fHeight) / SLOPE_RATIO;
+		P.y = pCrossSection[0].y - fHeight;
+		ModifiedRoadSection.push_back(P);
+		P.y = pCrossSection[0].y;
+		ModifiedCrossSection.push_back(P);
+		iCrossSectionPointsToAdd++;
+		iRoadPointsToAdd++;
+	}//if
+	else{
+		bDitchAdded = false;
+		for (j = 0; j < 4; j++){ //4 dummy points
+			ModifiedRoadSection.push_back(pRoadSection[0]);
+		}//for	
+		for (j = i ; j >= 0; j--){
+			if (ModifiedRoadSection[1].y  + fHeight > pCrossSection[j+1].y){
+				iSgn = -1;
+			}//if
+			else{
+				iSgn = 1;
+			}//else
+			Intersect_Lines(ModifiedRoadSection[1].x, ModifiedRoadSection[1].y + fHeight, 
+							ModifiedRoadSection[1].x - LONG_SEGMENT / SLOPE_RATIO,
+							ModifiedRoadSection[1].y + LONG_SEGMENT * iSgn + fHeight,
+							pCrossSection[j].x, pCrossSection[j].y,
+							pCrossSection[j+1].x, pCrossSection[j+1].y,
+							fX,fY);
+			if (pCrossSection[j].x < fX && pCrossSection[j+1].x >= fX){
+				if (iSgn == 1){
+					if(!bDitchAdded){
+						ModifiedRoadSection[1].x = pRoadSection[0].x - 2* DITCH_WIDTH * SLOPE_TRANSITION - DITCH_WIDTH;
+						ModifiedRoadSection[1].y = pRoadSection[0].y;						
+						iRoadPointsToAdd++;
+
+						ModifiedRoadSection[2].x = pRoadSection[0].x - DITCH_WIDTH * SLOPE_TRANSITION - DITCH_WIDTH;	
+						ModifiedRoadSection[2].y = pRoadSection[0].y - DITCH_WIDTH / SLOPE_TRANSITION;						
+						iRoadPointsToAdd++;
+
+						ModifiedRoadSection[3].x = pRoadSection[0].x - DITCH_WIDTH * SLOPE_TRANSITION;
+						ModifiedRoadSection[3].y = pRoadSection[0].y - DITCH_WIDTH / SLOPE_TRANSITION;						
+						iRoadPointsToAdd++;
+						
+						j = i + 1;
+						bDitchAdded = true;
+					}//if
+					else{
+						ModifiedRoadSection[0].x = fX;
+						ModifiedRoadSection[0].y = fY - fHeight;
+						iRoadPointsToAdd++;
+						break;
+					}//else
+				}//if
+				else{
+					ModifiedRoadSection[0].x = fX;
+					ModifiedRoadSection[0].y = fY - fHeight;
+					iRoadPointsToAdd++;
+					break;
+				}//else
+			}//if
+		}//for
+		if (j < 0){
+			ModifiedRoadSection[0].x = pRoadSection[0].x - fabs(pCrossSection[0].y - pRoadSection[0].y - fHeight) / SLOPE_RATIO;
+			ModifiedRoadSection[0].y = pCrossSection[0].y - fHeight;
+			P.x = ModifiedRoadSection[0].x;
+			P.y = pCrossSection[0].y;
+			ModifiedCrossSection.push_back(P);
+			iCrossSectionPointsToAdd++;
+			iRoadPointsToAdd++;
+		}//if*/
+	}//else
+
+	//add the central points
+
+	for (i = 0; i < iCrossSectionPoints; i++){
+		ModifiedCrossSection.push_back(pCrossSection[i]);
+	}//for
+	
+	ModifiedRoadSection.resize(iRoadPoints + iRoadPointsToAdd);
+	for (i = 0; i < iRoadPoints; i++){
+		ModifiedRoadSection[i + iRoadPointsToAdd].x = pRoadSection[i].x;
+		ModifiedRoadSection[i + iRoadPointsToAdd].y = pRoadSection[i].y;
+	}//for	
+	for (i = 0; i < iRoadPoints + iRoadPointsToAdd; i++){
+		ModifiedRoadSection[i].x = ModifiedRoadSection[i].x;
+		ModifiedRoadSection[i].y = ModifiedRoadSection[i].y + fHeight;
+	}//for
+
+	iRoadPoints += iRoadPointsToAdd;
+	iCrossSectionPoints += iCrossSectionPointsToAdd;
+
+	// right half
+
+	for (i = 0 ; i < iCrossSectionPoints - 1; i++){
+		if (ModifiedCrossSection[i].x < ModifiedRoadSection[iRoadPoints-1].x && 
+				ModifiedCrossSection[i+1].x >= ModifiedRoadSection[iRoadPoints-1].x){
+			break;
+		}//if
+	}//for
+	if (i == iCrossSectionPoints - 1){
+		if (ModifiedRoadSection[iRoadPoints-1].y  + fHeight < ModifiedCrossSection[iCrossSectionPoints-1].y){
+			P.x = ModifiedRoadSection[iRoadPoints-1].x + DITCH_WIDTH * SLOPE_TRANSITION;
+			P.y = ModifiedRoadSection[iRoadPoints-1].y - DITCH_WIDTH / SLOPE_TRANSITION;
+			ModifiedRoadSection.push_back(P);
+			iRoadPoints++;
+
+			P.x = ModifiedRoadSection[iRoadPoints-2].x + DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;	
+			ModifiedRoadSection.push_back(P);
+			iRoadPoints++;
+
+			P.x = ModifiedRoadSection[iRoadPoints-3].x + 2* DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;
+			P.y = ModifiedRoadSection[iRoadPoints-3].y;
+			ModifiedRoadSection.push_back(P);
+			iRoadPoints++;
+		}//if		
+		P.x = ModifiedRoadSection[iRoadPoints-1].x 
+				+ fabs(ModifiedCrossSection[iCrossSectionPoints-1].y 
+				- ModifiedRoadSection[iRoadPoints-1].y) / SLOPE_RATIO;
+		P.y = ModifiedCrossSection[iCrossSectionPoints-1].y ;
+		ModifiedRoadSection.push_back(P);
+		ModifiedCrossSection.push_back(P);
+		iCrossSectionPoints++;
+		iRoadPoints++;
+	}//if
+	else{
+		bDitchAdded = false;
+		for (j = i ; j < iCrossSectionPoints - 1; j++){
+			if (ModifiedRoadSection[iRoadPoints-1].y > ModifiedCrossSection[j].y){
+				iSgn = -1;
+			}//if
+			else{
+				iSgn = 1;
+			}//else
+			if (iSgn == 1 && !bDitchAdded){
+				P.x = ModifiedRoadSection[iRoadPoints-1].x + DITCH_WIDTH * SLOPE_TRANSITION;
+				P.y = ModifiedRoadSection[iRoadPoints-1].y - DITCH_WIDTH / SLOPE_TRANSITION;
+				ModifiedRoadSection.push_back(P);
+				iRoadPoints++;
+
+				P.x = ModifiedRoadSection[iRoadPoints-2].x + DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;	
+				ModifiedRoadSection.push_back(P);
+				iRoadPoints++;
+
+				P.x = ModifiedRoadSection[iRoadPoints-3].x + 2* DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;
+				P.y = ModifiedRoadSection[iRoadPoints-3].y;
+				ModifiedRoadSection.push_back(P);
+				iRoadPoints++;
+				
+				if (ModifiedRoadSection[iRoadPoints-1].y > ModifiedCrossSection[j].y){
+					iSgn = -1;
+				}//if
+				else{
+					iSgn = 1;
+				}//else
+
+				bDitchAdded = true;
+
+			}//if
+
+			Intersect_Lines(ModifiedRoadSection[iRoadPoints-1].x, ModifiedRoadSection[iRoadPoints-1].y, 
+							ModifiedRoadSection[iRoadPoints-1].x + LONG_SEGMENT / SLOPE_RATIO,
+							ModifiedRoadSection[iRoadPoints-1].y + LONG_SEGMENT * iSgn,
+							ModifiedCrossSection[j].x, ModifiedCrossSection[j].y,
+							ModifiedCrossSection[j+1].x, ModifiedCrossSection[j+1].y,
+							fX,fY);
+
+			if (ModifiedCrossSection[j].x < fX && ModifiedCrossSection[j+1].x >= fX){
+				P.x = fX;
+				P.y = fY;
+				ModifiedRoadSection.push_back(P);
+				iRoadPoints++;
+				break;
+			}//if
+		}//for
+		if (j == iCrossSectionPoints - 1){
+			if (ModifiedRoadSection[iRoadPoints-1].y  + fHeight < ModifiedCrossSection[iCrossSectionPoints-1].y
+					&& !bDitchAdded){
+				
+				P.x = ModifiedRoadSection[iRoadPoints-1].x + DITCH_WIDTH * SLOPE_TRANSITION;
+				P.y = ModifiedRoadSection[iRoadPoints-1].y - DITCH_WIDTH / SLOPE_TRANSITION;
+				ModifiedRoadSection.push_back(P);
+				iRoadPoints++;
+
+				P.x = ModifiedRoadSection[iRoadPoints-2].x + DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;	
+				ModifiedRoadSection.push_back(P);
+				iRoadPoints++;
+
+				P.x = ModifiedRoadSection[iRoadPoints-3].x + 2* DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;
+				P.y = ModifiedRoadSection[iRoadPoints-3].y;
+				ModifiedRoadSection.push_back(P);
+				iRoadPoints++;
+
+			}//if		
+			P.x = ModifiedRoadSection[iRoadPoints-1].x 
+					+ fabs(ModifiedCrossSection[iCrossSectionPoints-1].y 
+					- ModifiedRoadSection[iRoadPoints-1].y) / SLOPE_RATIO;
+			P.y = ModifiedCrossSection[iCrossSectionPoints-1].y ;
+			ModifiedRoadSection.push_back(P);
+			ModifiedCrossSection.push_back(P);
+			iCrossSectionPoints++;
+			iRoadPoints++;
+
+		}//if*/
+	}//else
+
+}//method
+
+void CProfile_Cross_Sections_PDF::Intersect_Lines(double x0,double y0,double x1,double y1,
+									double x2,double y2,double x3,double y3,
+									double &xi,double &yi){
+
+	double a1,b1,c1, 
+		  a2,b2,c2,
+		  det_inv,  
+		  m1,m2;    
+
+	if ((x1-x0)!=0)
+	   m1 = (y1-y0)/(x1-x0);
+	else
+	   m1 = (double)1e+10;   
+
+	if ((x3-x2)!=0)
+	   m2 = (y3-y2)/(x3-x2);
+	else
+	   m2 = (double)1e+10;   
+
+	a1 = m1;
+	a2 = m2;
+
+	b1 = -1;
+	b2 = -1;
+
+	c1 = (y0-m1*x0);
+	c2 = (y2-m2*x2);
+
+	det_inv = 1/(a1*b2 - a2*b1);
+
+	xi=((b1*c2 - b2*c1)*det_inv);
+	yi=((a2*c1 - a1*c2)*det_inv);
+
+} //method
+
+void CProfile_Cross_Sections_PDF::CalculateAreas(TSG_Point * pCrossSection,
+									TSG_Point * pRoadSection,
+									double fHeight,
+									int iCrossSectionPoints, 
+									int iRoadPoints,
+									double &fPositiveArea,
+									double &fNegativeArea){
+
+	int i;
+	CSG_Shapes *pRoadShapes, *pCrossSectionShapes, *pResultShapes;
+	CSG_Shape *pRoadShape, *pCrossSectionShape, *pResultShape;
+
+	pResultShapes = new CSG_Shapes;
+	pResultShapes->Create(SHAPE_TYPE_Polygon);
+	pResultShape = pResultShapes->Add_Shape();
+	pRoadShapes = new CSG_Shapes;
+	pRoadShapes->Create(SHAPE_TYPE_Polygon);
+	pRoadShape = pRoadShapes->Add_Shape();
+	pCrossSectionShapes = new CSG_Shapes;
+	pCrossSectionShapes->Create(SHAPE_TYPE_Polygon);
+	pCrossSectionShape = pCrossSectionShapes->Add_Shape();
+	
+	for (i = 0; i < iRoadPoints; i++){
+		pRoadShape->Add_Point(pRoadSection[i].x, pRoadSection[i].y + fHeight);
+	}//for
+	pRoadShape->Add_Point(pRoadSection[iRoadPoints-1].x + LONG_SEGMENT / SLOPE_RATIO,
+						pRoadSection[iRoadPoints-1].y + fHeight + LONG_SEGMENT);
+	
+	pRoadShape->Add_Point(pRoadSection[0].x - LONG_SEGMENT / SLOPE_RATIO,
+						pRoadSection[0].y + fHeight + LONG_SEGMENT);
+						
+	for (i = 0; i < iCrossSectionPoints; i++){
+		pCrossSectionShape->Add_Point(pCrossSection[i].x, pCrossSection[i].y);
+	}//for
+	pCrossSectionShape->Add_Point(pCrossSection[iCrossSectionPoints-1].x + LONG_SEGMENT / SLOPE_RATIO,
+						pCrossSection[iCrossSectionPoints-1].y - LONG_SEGMENT);
+	
+	pCrossSectionShape->Add_Point(pCrossSection[0].x - LONG_SEGMENT / SLOPE_RATIO,
+						pCrossSection[0].y - LONG_SEGMENT);		
+
+	if (GPC_Intersection(pCrossSectionShape, pRoadShape, pResultShape)){
+		fNegativeArea = ((CSG_Shape_Polygon*)pResultShape)->Get_Area();
+	}//if
+	else{
+		fNegativeArea = 0;
+	}//else
+
+	pCrossSectionShape->Del_Parts();
+	pRoadShape->Del_Parts();
+	pResultShape->Del_Parts();
+	
+	for (i = 0; i < iRoadPoints; i++){
+		pRoadShape->Add_Point(pRoadSection[i].x, pRoadSection[i].y + fHeight);
+	}//for
+	pRoadShape->Add_Point(pRoadSection[iRoadPoints-1].x + LONG_SEGMENT / SLOPE_RATIO,
+						pRoadSection[iRoadPoints-1].y + fHeight - LONG_SEGMENT);
+	
+	pRoadShape->Add_Point(pRoadSection[0].x - LONG_SEGMENT / SLOPE_RATIO,
+						pRoadSection[0].y + fHeight - LONG_SEGMENT);
+						
+	for (i = 0; i < iCrossSectionPoints; i++){
+		pCrossSectionShape->Add_Point(pCrossSection[i].x, pCrossSection[i].y);
+	}//for
+	pCrossSectionShape->Add_Point(pCrossSection[iCrossSectionPoints-1].x + LONG_SEGMENT / SLOPE_RATIO,
+						pCrossSection[iCrossSectionPoints-1].y + LONG_SEGMENT);
+	
+	pCrossSectionShape->Add_Point(pCrossSection[0].x - LONG_SEGMENT / SLOPE_RATIO,
+						pCrossSection[0].y + LONG_SEGMENT);		
+	
+	if (GPC_Intersection(pCrossSectionShape, pRoadShape, pResultShape)){
+		fPositiveArea = ((CSG_Shape_Polygon*)pResultShape)->Get_Area();
+	}//if
+	else{
+		fPositiveArea = 0;
+	}//else
+
+	delete pRoadShapes;
+	delete pCrossSectionShapes;
+	delete pResultShapes;
+				
+}//method
+
+void CProfile_Cross_Sections_PDF::AddLongitudinalProfile(TSG_Point * pProfile,
+											double *pHeight,
+											int iNumPoints){
+
+	int i;	
+    int iMag;
+	int iNumLines;
+    double fMinLine = 0;
+	double fMaxY, fMinY;
+	double fMaxX, fMinX;
+	double fStep;
+    double fX, fY;
+	double fOffsetX;
+	CSG_String sValue;
+	CSG_Points Points;
+	double fHeight;
+	
+	Add_Page_Title(_TL("Longitudinal Profile"), PDF_TITLE_01);
+	
+	Add_Page(PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_LANDSCAPE);
+
+	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
+
+	m_iOffsetY = 50;
+
+	fMaxY  = pProfile[0].y;
+	fMinY  = pProfile[0].y;
+		    		    
+	for (i = 0; i < iNumPoints; i++) {
+	    if (pProfile[i].y > fMaxY) {
+	        fMaxY = pProfile[i].y;
+	    }// if
+	    if (pProfile[i].y < fMinY) {
+	        fMinY = pProfile[i].y;
+	    }// if
+		if (pHeight[i] > fMaxY) {
+	        fMaxY = pHeight[i];
+	    }// if
+	    if (pHeight[i] < fMinY) {
+	        fMinY = pHeight[i];
+	    }// if
+    }//for    
+	
+	iMag = (int) (log(fMaxY - fMinY) / log(10.0));
+	fStep = (double) ((int) pow(10.0, (double) iMag));                
+	if (fStep == 0){
+		fStep = 1.;
+	}//if
+	if (fMinY < 0) {        	
+		iMag = (int) (log(fabs(fMinY)) / log(10.0));
+		fMinLine = -(int) pow(10.0, (double) iMag);
+	}// if
+	else {
+		fMinLine=(int)(((int)(fMinY/fStep)) *fStep);
+	}//else
+
+	iNumLines = (int) ((fMaxY - fMinY) / fStep);
+
+	while (iNumLines < 8) {
+		fStep = fStep / 2.0;
+		iNumLines = (int) ((fMaxY - fMinY) / fStep);
+	}// while
+	iNumLines = (int) ((fMaxY - fMinLine) / fStep);
+
+	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
+
+	for (i = 0; i < iNumLines; i++) {
+        fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION;
+		fY = m_iOffsetY + PROFILE_HEIGHT
+                - ((fMinLine + fStep * i - fMinY) / (fMaxY - fMinY)) * PROFILE_HEIGHT;		
+        if (fY <= m_iOffsetY + PROFILE_HEIGHT && fY >= m_iOffsetY) {
+			fY = fHeight - fY;
+			sValue = SG_Get_String(fMinLine + fStep * (double) i);
+			Draw_Text(fX - 10, fY, SG_Get_String(fMinLine + fStep * (double) i).c_str(), 9,
+				PDF_STYLE_TEXT_ALIGN_H_RIGHT);
+			Draw_Line(fX, fY, fX - 5, fY, 0);
+        }// if
+    }// for	
+
+	fMinX = pProfile[0].x;
+	fMaxX = pProfile[iNumPoints - 1].x;
+
+	iMag = (int) (log(fMaxX - fMinX) / log(10.0));
+	fStep = (double) pow(10.0, (double) iMag);                
+
+	iNumLines = (int) ((fMaxX-fMinX) / fStep);
+	
+	while (iNumLines < 3) {
+		fStep = fStep / 2.0;
+		iNumLines = (int) ((fMaxX-fMinX) / fStep);
+	}// while    
+	fMinLine = (int)(((int)(fMinX/fStep)) * fStep);          
+	while (fMinLine<fMinX){
+		fMinLine+=fStep;
+	}//while
+	fOffsetX = fMinX-fMinLine;
+
+	for (i = 0; i < iNumLines; i++) {
+		fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
+				+ ((fStep * (double) i-fOffsetX) / (fMaxX-fMinX)) * PROFILE_WIDTH;
+		if (fX>=OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
+				&& fX < OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION + PROFILE_WIDTH){
+			if (fabs(fStep * (double)i+fMinLine) > 100000) {
+				sValue = SG_Get_String(fStep * (double)i+fMinLine);
+			}// if 
+			else {
+				sValue = SG_Get_String(fStep * (double)i+fMinLine, 2, true);
+			}// else
+			Draw_Text(fX, fHeight - m_iOffsetY - PROFILE_HEIGHT - 15,
+				SG_Get_String(fMinLine + fStep * (double) i).c_str(), 9,
+				PDF_STYLE_TEXT_ALIGN_H_CENTER | PDF_STYLE_TEXT_ALIGN_V_TOP);
+			Draw_Line(fX, fHeight - m_iOffsetY - PROFILE_HEIGHT,
+					fX, fHeight - m_iOffsetY - PROFILE_HEIGHT - 10, 0);
+		}//if
+	}// for
+	
+	Draw_Line(OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION, 	fHeight - m_iOffsetY,
+			OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION, 
+			fHeight - m_iOffsetY - PROFILE_HEIGHT, 2);
+	Draw_Line(OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION, 
+				fHeight - m_iOffsetY - PROFILE_HEIGHT,
+				OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION + PROFILE_WIDTH, 
+				fHeight - m_iOffsetY - PROFILE_HEIGHT, 2);
+		
+	fY = m_iOffsetY + PROFILE_HEIGHT 
+			- PROFILE_HEIGHT * ((pProfile[0].y - fMinY) / (fMaxY - fMinY));
+	fY = fHeight - fY;
+	fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
+		+ PROFILE_WIDTH * ((pProfile[0].x - fMinX) / (fMaxX - fMinX));
+	Points.Add(fX, fY);	        
+	for (i = 1; i < iNumPoints; i++) {
+		fY = m_iOffsetY + PROFILE_HEIGHT 
+			- PROFILE_HEIGHT * ((pProfile[i].y - fMinY) / (fMaxY - fMinY));
+		fY = fHeight - fY;
+		fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
+			+ PROFILE_WIDTH * ((pProfile[i].x - fMinX) / (fMaxX - fMinX));
+		Points.Add(fX, fY);
+	}// for
+	Draw_Line(Points, 2, 0x00bb00);
+
+	Points.Clear();
+	
+	fY = m_iOffsetY + PROFILE_HEIGHT 
+			- PROFILE_HEIGHT * ((pHeight[0] - fMinY) / (fMaxY - fMinY));
+	fY = fHeight - fY;
+	fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
+		+ PROFILE_WIDTH * ((pProfile[0].x - fMinX) / (fMaxX - fMinX));
+	Points.Add(fX,fY);
+	for (i = 1; i < iNumPoints; i++) {
+		fY = m_iOffsetY + PROFILE_HEIGHT 
+			- PROFILE_HEIGHT * ((pHeight[i] - fMinY) / (fMaxY - fMinY));
+		fY = fHeight - fY;
+		fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
+			+ PROFILE_WIDTH * ((pProfile[i].x - fMinX) / (fMaxX - fMinX));
+		Points.Add(fX, fY);
+	}// for
+	Draw_Line(Points, 2, 0x0000bb);
+
+	DrawGuitar(pProfile, pHeight, iNumPoints);
+
+}//method
+
+void CProfile_Cross_Sections_PDF::DrawGuitar(TSG_Point *pProfile, 
+							   double *pHeight, 
+							   int iNumPoints){
+
+	int i;
+	double fY;
+	double fMinX, fMaxX;
+	double fDif;
+	CSG_String sValue;
+	CSG_String sField [] = {"Distancia","Dist. Parcial.", "Elevacion del terreno", "Elevación de la calzada", " ", " "};
+	double fHeight;
+
+	fMinX = pProfile[0].x;
+	fMaxX = pProfile[iNumPoints - 1].x;
+
+	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
+	
+	for (i = 0; i < 7; i++){
+		fY = m_iOffsetY + PROFILE_HEIGHT + SEPARATION + GUITAR_LEYEND_HEIGHT / 6 * i;
+		fY = fHeight - fY;
+		Draw_Line(OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION, fY,
+				OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION + GUITAR_WIDTH, fY, 0, 0x880000);
+		if (i){
+			Draw_Text(OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION - 10, 
+						fY + GUITAR_LEYEND_HEIGHT / 13, 
+						sField[i-1].c_str(),
+						9,
+						PDF_STYLE_TEXT_ALIGN_V_CENTER | PDF_STYLE_TEXT_ALIGN_H_RIGHT);
+		
+		}//if
+	}//for
+	
+	AddGuitarValue(0, 0, fMinX, fMaxX, 1);
+	for (i = 0; i < iNumPoints; i++) {
+		AddGuitarValue(pProfile[i].x, pProfile[i].x / 1000, fMinX, fMaxX, 0);
+		if (i){
+			AddGuitarValue(pProfile[i].x, pProfile[i].x / 1000 - pProfile[i-1].x / 1000, 
+							fMinX, fMaxX, 1);
+		}//if
+		fDif = pProfile[i].y - pHeight[i];
+		AddGuitarValue(pProfile[i].x, pProfile[i].y, fMinX, fMaxX, 2);
+		AddGuitarValue(pProfile[i].x, pHeight[i], fMinX, fMaxX, 3);
+		if (fDif > 0){
+			AddGuitarValue(pProfile[i].x, fDif, fMinX, fMaxX, 4);
+		}//if
+		else{
+			AddGuitarValue(pProfile[i].x, fDif, fMinX, fMaxX, 5);
+		}//else
+
+
+	}// for
+
+}//method
+
+void CProfile_Cross_Sections_PDF::AddGuitarValue(double fXValue,
+								   double fValue,
+								   double fMinX,
+								   double fMaxX,								   
+								   int iLine){
+
+	double fX,fY;
+	double fHeight;
+	
+	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
+	
+	fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
+		+ PROFILE_WIDTH * ((fXValue - fMinX) / (fMaxX - fMinX));
+	fY = m_iOffsetY + PROFILE_HEIGHT + SEPARATION + GUITAR_LEYEND_HEIGHT / 6 * (iLine + 1);
+	fY = fHeight - fY;
+
+	Draw_Line(fX, fY, fX, fY + 3, 0, 0x880000);
+
+	fY += 3;
+	fX += 3;
+	
+	Draw_Text(fX, fY, SG_Get_String(fValue, 2).c_str(), 8, 
+			0, 
+			3.14159/2.);
+		
+	fY = m_iOffsetY + PROFILE_HEIGHT + SEPARATION + GUITAR_LEYEND_HEIGHT / 6 * iLine;
+	fY = fHeight - fY;
+	fX -= 3;
+
+	Draw_Line(fX, fY, fX, fY - 3, 0, 0x880000);
+
+}//method
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CProfile_Cross_Sections::CProfile_Cross_Sections(void){
+
+	CSG_Parameter *pNode;
+
+	Parameters.Set_Name(_TL("Terrain Path Cross Sections"));
+	Parameters.Set_Description(_TW("(c) 2004 Victor Olaya. Cross Sections"));
+
+	Parameters.Add_Grid(NULL,
+						"DEM",
+						_TL("DEM"),
+						_TL("Digital Terrain Model"),
+						PARAMETER_INPUT);
+
+	Parameters.Add_Shapes(NULL,
+						"LINES",
+						_TL("Path"),
+						_TL(""),
+						PARAMETER_INPUT, 
+						SHAPE_TYPE_Line);
+
+	Parameters.Add_Shapes(NULL,
+						"SECTIONS",
+						_TL("Cross Sections"),
+						_TL(""),
+						PARAMETER_OUTPUT);
+
+	Parameters.Add_Value(NULL,
+						"NUMPOINTS",
+						_TL("Number of points"),
+						_TL("Number of points on each side of the section"),
+						PARAMETER_TYPE_Int,
+						10,
+						1,
+						true);
+
+	Parameters.Add_Value(NULL,
+						"INTERVAL",
+						_TL("Interval"),
+						_TL("Interval between points (in grid units)."),
+						PARAMETER_TYPE_Double,
+						10);
+
+	Parameters.Add_Value(NULL,
+						"STEP",
+						_TL("n"),
+						_TL("Draw a section each n points"),
+						PARAMETER_TYPE_Int,
+						2);
+
+	pNode = Parameters.Add_Node(NULL,
+						"PDFNODE",
+						_TL("PDF Documents"),
+						_TL(""));
+
+	Parameters.Add_Value(pNode,
+						"PDF",
+						_TL("Create PDF Documents"),
+						_TL(""),
+						PARAMETER_TYPE_Bool,
+						true);	
+
+	Parameters.Add_FilePath(pNode,
+							"OUTPUTPATH",
+							_TL("Folder for PDF Files"),
+							_TL(""),
+							_TL(""),
+							_TL(""),
+							true,
+							true);
+
+	Parameters.Add_Value(pNode,
+						"WIDTH",
+						_TL("Road Width"),
+						_TL(""),
+						PARAMETER_TYPE_Double,
+						5.);
+
+	Parameters.Add_Value(pNode,
+						"SLOPE",
+						_TL("Side Slope"),
+						_TL(""),
+						PARAMETER_TYPE_Double,
+						.5);
+
+	Parameters.Add_Value(pNode,
+						"THRESHOLD",
+						_TL("Height Threshold"),
+						_TL("Height threshold for optimal profile calculation"),
+						PARAMETER_TYPE_Double,
+						.5);
+}//constructor
+
+
+CProfile_Cross_Sections::~CProfile_Cross_Sections(void){}
+
+bool CProfile_Cross_Sections::On_Execute(void){
+
+	CSG_Shapes *pLines;
+	CSG_Shape *pShape, *pSection;
+	CSG_Grid *pDEM;
+	TSG_Point	Point, Point2;
+	double fInterval;
+	double fStepX, fStepY;
+	int iNumPoints;
+	int i,j,k;
+	int iPoint;
+	int iField = 0;
+	int iStep;
+	double dX, dY;
+	double dX2, dY2;
+	double dDistance;
+	double dHeight;
+	bool bCopy;
+
+	m_pSections = Parameters("SECTIONS")->asShapes();
+	pLines = Parameters("LINES")->asShapes();
+	pDEM = Parameters("DEM")->asGrid();
+	fInterval = (double) Parameters("INTERVAL")->asDouble();
+	iNumPoints = Parameters("NUMPOINTS")->asInt();
+	iStep = Parameters("STEP")->asInt();
+
+	if(pLines == m_pSections){
+		bCopy = true;
+		m_pSections	= SG_Create_Shapes();
+	}//if
+	else{
+		bCopy = false;
+	}//else
+
+	m_pSections->Create(SHAPE_TYPE_Line, _TL("Cross Sections"));
+	for (i = iNumPoints; i > 0; i--){
+		m_pSections->Add_Field(CSG_String::Format(SG_T("-%s"), SG_Get_String(fInterval * i, 2).c_str()),
+										SG_DATATYPE_Double);
+	}//for
+	m_pSections->Add_Field("0", SG_DATATYPE_Double);
+	for (i = 1; i < iNumPoints +1; i++){
+		m_pSections->Add_Field(SG_Get_String(fInterval * i).c_str(), SG_DATATYPE_Double);
+	}//for
+	for(i=0; i<pLines->Get_Count() && Set_Progress(i, pLines->Get_Count()); i++){
+		pShape = pLines->Get_Shape(i);
+		for(j=0; j<pShape->Get_Part_Count(); j++){
+			for(k=0; k<pShape->Get_Point_Count(j)-1; k+=iStep){
+				Point = pShape->Get_Point(k,j);
+				Point2 = pShape->Get_Point(k+1,j);
+				dDistance = sqrt(pow(Point2.x - Point.x,2) + pow(Point2.y - Point.y,2));
+				dX = (Point.x + Point2.x) / 2.;
+				dY = (Point.y + Point2.y) / 2.;
+				fStepX = (Point2.y - Point.y) / dDistance * fInterval;
+				fStepY = -(Point2.x - Point.x) / dDistance * fInterval;
+				pSection = m_pSections->Add_Shape();
+				pSection->Add_Point(dX + iNumPoints * fStepX,
+								dY + iNumPoints * fStepY);
+				pSection->Add_Point(dX - iNumPoints * fStepX,
+								dY - iNumPoints * fStepY);
+				iField = 0;
+				for (iPoint = iNumPoints; iPoint > 0; iPoint--){
+					dX2 = dX - iPoint * fStepX;
+					dY2 = dY - iPoint * fStepY;
+					dHeight = pDEM->Get_Value(dX2, dY2);
+					pSection->Set_Value(iField, dHeight);
+					iField++;
+				}//for
+				dHeight = pDEM->Get_Value(dX, dY);
+				pSection->Set_Value(iField, dHeight);
+				iField++;
+				for (iPoint = 1; iPoint < iNumPoints +1; iPoint++){
+					dX2 = dX + iPoint * fStepX;
+					dY2 = dY + iPoint * fStepY;
+					dHeight = pDEM->Get_Value(dX2, dY2);
+					pSection->Set_Value(iField, dHeight);
+					iField++;
+				}//for*/
+			}//for
+		}//for
+	}//for
+
+	if (Parameters("PDF")->asBool()){
+		CreatePDFDocs();
+	}//if
+
+	if(bCopy){
+		pLines->Assign(m_pSections);
+		delete(m_pSections);
+	}//if
+
+	return true;
+
+}// method
+
+void CProfile_Cross_Sections::CreatePDFDocs(){
+
+	CSG_String sFilePath;
+			
+	if (Parameters("OUTPUTPATH")->asString()){
+		m_DocEngine.Open(_TL("SECTIONS"));
+		sFilePath = SG_File_Make_Path(Parameters("OUTPUTPATH")->asString(), _TL("Sections"), _TL("pdf"));
+	}//if
+	else{
+		Message_Add(_TL("\n** Error : Invalid parameters **\n"));
+		return;
+	}//else
+
+	AddLongitudinalProfiles();
+	AddCrossSections();
+
+	if (m_DocEngine.Save(sFilePath)){
+		if (!m_DocEngine.Close()){
+			Message_Add(_TL("\n\n ** Error : Could not close PDF engine ** \n\n"));
+		}
+	}//if
+	else{
+		Message_Add(_TL("\n\n ** Error : Could not save PDF file ** \n\n"));
+	}//else
+
+
+}//method
+
+
+void CProfile_Cross_Sections::AddLongitudinalProfiles(){
+
+	int i,j,k;
+	int iIndex = 0;	
+	int iNumPoints = Parameters("NUMPOINTS")->asInt();
+	int iStep = Parameters("STEP")->asInt();
+	int iFirstPoint = 0;
+	int iLastPoint;
+	int iSections;
+	double fX1, fY1, fX2, fY2;
+	double fDistance, fDistanceSum = 0;
+	double fDist;
+	double fThreshold = (double)Parameters("THRESHOLD")->asDouble();
+	bool bValid;
+	CSG_Shape *pShape;
+	CSG_Table *pTable;
+	TSG_Point	Point, Point2;
+	CSG_Shapes* pLines = Parameters("LINES")->asShapes();
+
+	pTable = m_pSections;
+	iSections = pTable->Get_Record_Count();
+
+	m_pProfile = new TSG_Point[iSections];
+
+	for(i=0; i<pLines->Get_Count() && Set_Progress(i, pLines->Get_Count()); i++){
+		pShape = pLines->Get_Shape(i);
+		for(j=0; j<pShape->Get_Part_Count(); j++){
+			Point = pShape->Get_Point(0,j);
+			for(k=0; k<pShape->Get_Point_Count(j)-1; k+=iStep){
+				Point2 = pShape->Get_Point(k,j);
+				fDistance = sqrt(pow(Point2.x - Point.x,2) + pow(Point2.y - Point.y,2));
+				m_pProfile[iIndex].x = fDistanceSum + fDistance / 2.;
+				m_pProfile[iIndex].y = pTable->Get_Record(iIndex)->asFloat(iNumPoints);
+				fDistanceSum += fDistance;
+				iIndex++;
+				Point.x = Point2.x;
+				Point.y = Point2.y;
+			}//for
+		}//for
+	}//for*/
+
+	m_pHeight = new double[iSections];
+
+	for (i = 0; i < iSections; i++){
+		m_pHeight[i] = 1500;
+	}
+	
+	iLastPoint = iSections - 1;
+	while(iFirstPoint != iSections - 1){
+		fX1 = m_pProfile[iFirstPoint].x;
+		fY1 = m_pProfile[iFirstPoint].y;
+		fX2 = m_pProfile[iLastPoint].x;
+		fY2 = m_pProfile[iLastPoint].y;
+		bValid = true;
+		for (i = iFirstPoint; i < iLastPoint; i++){			
+			fDist = CalculatePointLineDist(fX1,fY1,fX2,fY2, m_pProfile[i].x, m_pProfile[i].y);
+			if (fDist > fThreshold){
+				iLastPoint--;
+				bValid = false;
+				break;
+			}//if
+		}//for
+		if (bValid){
+			for (j = iFirstPoint; j < iLastPoint + 1; j++){
+				m_pHeight[j] = m_pProfile[iFirstPoint].y + 
+					(m_pProfile[j].x - m_pProfile[iFirstPoint].x) 
+					/ (m_pProfile[iLastPoint].x - m_pProfile[iFirstPoint].x)
+					* (m_pProfile[iLastPoint].y - m_pProfile[iFirstPoint].y);
+			}//for			
+			iFirstPoint = iLastPoint;
+			iLastPoint = iSections - 1;			
+		}//if
+	}//while
+	
+	
+	m_DocEngine.AddLongitudinalProfile(m_pProfile, m_pHeight, iSections);
+
+}//method
+
+double CProfile_Cross_Sections::CalculatePointLineDist(double fX1, double fY1, double fX2, double fY2, double fPX, double fPY){
+
+	double *pA, *pB, *pC;
+
+	pA = new double[2];
+	pA[0] = fX1;
+	pA[1] = fY1;
+	pB = new double[2];
+	pB[0] = fX2;
+	pB[1] = fY2;
+	pC = new double[2];
+	pC[0] = fPX;
+	pC[1] = fPY;
+	
+	return linePointDist(pA, pB, pC);
+
+}//method
+
+void CProfile_Cross_Sections::AddCrossSections(){
+
+	int i,j;
+	int iRoadPoints;
+	int iNumPoints = Parameters("NUMPOINTS")->asInt();
+	double fInterval = (double) Parameters("INTERVAL")->asDouble();
+	CSG_Table *pTable;
+	TSG_Point *pRoadSection;
+	TSG_Point **pCrossSections;
+	double dWidth = Parameters("WIDTH")->asDouble();
+
+	pRoadSection = new TSG_Point [2];
+	pRoadSection[0].x = -dWidth / 2.;
+	pRoadSection[0].y = 0;
+	pRoadSection[1].x = dWidth / 2.;
+	pRoadSection[1].y = 0;
+
+	pTable = m_pSections;
+	pCrossSections = new TSG_Point *[pTable->Get_Record_Count()];
+
+	for (i = 0; i < pTable->Get_Record_Count(); i++){
+		pCrossSections[i] = new TSG_Point [pTable->Get_Field_Count()];
+		for (j = 0; j < pTable->Get_Field_Count(); j++){
+			pCrossSections[i][j].x = -fInterval * iNumPoints + fInterval * j;
+			pCrossSections[i][j].y = pTable->Get_Record(i)->asFloat(j);
+		}//for
+	}//for
+
+	iRoadPoints = 2;
+
+	m_DocEngine.AddCrossSections(pCrossSections, m_pHeight, pRoadSection, pTable->Get_Record_Count(),
+								pTable->Get_Field_Count(), iRoadPoints);
+	m_DocEngine.AddVolumesTable(m_pProfile, pCrossSections, m_pHeight, pRoadSection,
+								pTable->Get_Record_Count(),	pTable->Get_Field_Count(), iRoadPoints);
+
+}//method
+
+///////////////////////////////////////////////////////////
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/docs/docs_pdf/Profile_Cross_Sections.h b/src/modules_io/docs/docs_pdf/Profile_Cross_Sections.h
new file mode 100644
index 0000000..cede493
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/Profile_Cross_Sections.h
@@ -0,0 +1,89 @@
+/*******************************************************************************
+    CrossSections.h
+    Copyright (C) Victor Olaya
+    
+    This program 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.
+
+    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 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 "doc_pdf.h"
+
+#include <vector>
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CProfile_Cross_Sections_PDF : public CSG_Doc_PDF   
+{
+public:
+	CProfile_Cross_Sections_PDF();
+	~CProfile_Cross_Sections_PDF();
+	void AddCrossSections(TSG_Point **,double*,TSG_Point *,int,int,int);	
+	void AddLongitudinalProfile(TSG_Point *, double*, int);
+	void AddVolumesTable(TSG_Point *,TSG_Point **,double*,TSG_Point *,int,int,int);	
+
+private:
+	char *m_pPath;
+	int m_iCanvasHeight;
+	int m_iTableWidth;
+	int m_iOffsetY;
+	CSG_String m_sName;
+
+	void AddCrossSection(TSG_Point *,TSG_Point *,int,int);
+	void DrawGuitar(TSG_Point *,double*, int);
+	void AddGuitarValue(double,double,double,double,int);
+	void AdjustSections(TSG_Point *,TSG_Point *,std::vector<TSG_Point >&,std::vector<TSG_Point >&,double,int&,int&);
+	void Intersect_Lines(double,double,double,double,double,double,double,double,double&,double&);
+	void CalculateAreas(TSG_Point*,TSG_Point*,double,int,int,double&,double&);
+};
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CProfile_Cross_Sections : public CSG_Module_Grid
+{
+public:
+	CProfile_Cross_Sections(void);
+	virtual ~CProfile_Cross_Sections(void);
+
+protected:
+
+	bool On_Execute(void);
+
+private:
+
+	CProfile_Cross_Sections_PDF m_DocEngine;
+	CSG_Shapes *m_pSections;
+	double *m_pHeight;
+	TSG_Point *m_pProfile;
+
+	void CreatePDFDocs();
+	void AddLongitudinalProfiles();
+	void AddCrossSections();
+	double CalculatePointLineDist(double,double,double,double,double,double);
+
+};
+
+///////////////////////////////////////////////////////////
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/docs/docs_pdf/Shapes_Report.cpp b/src/modules_io/docs/docs_pdf/Shapes_Report.cpp
new file mode 100644
index 0000000..7f26a7c
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/Shapes_Report.cpp
@@ -0,0 +1,642 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     Shapes_Tools                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   Shapes_Report.cpp                   //
+//                                                       //
+//                 Copyright (C) 2005 by                 //
+//               Olaf Conrad, Victor Olaya               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "doc_pdf.h"
+#include "Shapes_Report.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CShapes_Report::CShapes_Report(void)
+{
+	CSG_Parameter	*pNode;
+
+	//-----------------------------------------------------
+	Set_Name		(_TL("Shapes Report"));
+
+	Set_Author		(SG_T("(c) 2005 by O.Conrad, V.Olaya"));
+
+	Set_Description	(_TW(
+		""
+	));
+
+	//-----------------------------------------------------
+	pNode	= Parameters.Add_Shapes(
+		NULL	, "SHAPES"		, _TL("Shapes"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Table_Field(
+		pNode	, "SUBTITLE"	, _TL("Subtitle"),
+		_TL("")
+	);
+
+	Parameters.Add_FilePath(
+		NULL	, "FILENAME"	, _TL("PDF File"),
+		_TL(""),
+		_TL("PDF Files (*.pdf)|*.pdf|All Files|*.*"),
+		_TL(""), true, false
+	);
+
+	Parameters.Add_Choice(
+		NULL	, "PAPER_SIZE"	, _TL("Paper Format"),
+		_TL(""),
+
+		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
+			_TL("A4 Portrait"),
+			_TL("A4 Landscape"),
+			_TL("A3 Portrait"),
+			_TL("A3 Landscape")
+		)
+	);
+
+	Parameters.Add_Value(
+		pNode	, "COLOR_LINE"	, _TL("Line Color"),
+		_TL(""),
+		PARAMETER_TYPE_Color, SG_COLOR_BLACK
+	);
+
+	Parameters.Add_Value(
+		pNode	, "COLOR_FILL"	, _TL("Fill Color"),
+		_TL(""),
+		PARAMETER_TYPE_Color, SG_COLOR_GREEN
+	);
+
+	//-----------------------------------------------------
+	pNode	= Parameters.Add_Node(NULL, "NODE_LAYOUT"	, _TL("Layout"), _TL(""));
+
+	Parameters.Add_Choice(
+		pNode	, "LAYOUT_MODE"	, _TL("Layout"),
+		_TL(""),
+
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("horizontal"),
+			_TL("vertical")
+		), 1
+	);
+
+	Parameters.Add_Value(
+		pNode	, "LAYOUT_BREAK", _TL("Map/Table Size Ratio [%]"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 50.0, 0.0, true, 100.0, true
+	);
+
+	//-----------------------------------------------------
+	pNode	= Parameters.Add_Node(NULL, "NODE_TABLE"	, _TL("Attribute Table"), _TL(""));
+
+	Parameters.Add_Value(
+		pNode	, "COLUMNS"		, _TL("Columns"),
+		_TL("Number of atttribute table columns."),
+		PARAMETER_TYPE_Int, 2, 1, true
+	);
+
+	Parameters.Add_Choice(
+		pNode	, "CELL_MODE"	, _TL("Cell Sizes"),
+		_TL(""),
+
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("fit to page"),
+			_TL("fixed cell height")
+		)
+	);
+
+	Parameters.Add_Value(
+		pNode	, "CELL_HEIGHT"	, _TL("Cell Height"),
+		_TL(""),
+		PARAMETER_TYPE_Int, 8, 1, true
+	);
+}
+
+//---------------------------------------------------------
+CShapes_Report::~CShapes_Report(void)
+{
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CShapes_Report::On_Execute(void)
+{
+	int				Page_Orientation;
+	TSG_PDF_Page_Size	Page_Size;
+	CSG_String		FileName(Parameters("FILENAME")	->asString());
+	CSG_Doc_PDF	PDF;
+
+	//-----------------------------------------------------
+	m_pShapes		= Parameters("SHAPES")		->asShapes();
+	m_iSubtitle		= Parameters("SUBTITLE")	->asInt();
+	m_Color_Line	= Parameters("COLOR_LINE")	->asColor();
+	m_Color_Fill	= Parameters("COLOR_FILL")	->asColor();
+	m_nColumns		= Parameters("COLUMNS")		->asInt();
+
+	switch( Parameters("CELL_MODE")->asInt() )
+	{
+	default:
+	case 0:	m_Cell_Height	= 0;										break;
+	case 1:	m_Cell_Height	= Parameters("CELL_HEIGHT")->asDouble();	break;
+	}
+
+	switch( Parameters("PAPER_SIZE")->asInt() )
+	{
+	default:
+	case 0:	Page_Size	= PDF_PAGE_SIZE_A4;	Page_Orientation	= PDF_PAGE_ORIENTATION_PORTRAIT;	break;	// A4 Portrait
+	case 1:	Page_Size	= PDF_PAGE_SIZE_A4;	Page_Orientation	= PDF_PAGE_ORIENTATION_LANDSCAPE;	break;	// A4 Landscape
+	case 2:	Page_Size	= PDF_PAGE_SIZE_A3;	Page_Orientation	= PDF_PAGE_ORIENTATION_PORTRAIT;	break;	// A3 Portrait
+	case 3:	Page_Size	= PDF_PAGE_SIZE_A3;	Page_Orientation	= PDF_PAGE_ORIENTATION_LANDSCAPE;	break;	// A3 Landscape
+	}
+
+	//-----------------------------------------------------
+	if( FileName.Length() > 0 && PDF.Open(Page_Size, Page_Orientation, CSG_String::Format(SG_T("%s: %s"), _TL("Summary"), m_pShapes->Get_Name())) )
+	{
+		double	d	= Parameters("LAYOUT_BREAK")->asDouble();
+
+		switch( Parameters("LAYOUT_MODE")->asInt() )
+		{
+		default:
+		case 0:	// horizontal
+			PDF.Layout_Add_Box(  0,   0, 100,   5, "TITLE");
+			PDF.Layout_Add_Box(  0,   5,   d, 100, "SHAPE");
+			PDF.Layout_Add_Box(  d,   5, 100, 100, "TABLE");
+			break;
+
+		case 1:	// vertical
+			PDF.Layout_Add_Box(  0,   0, 100,   5, "TITLE");
+			PDF.Layout_Add_Box(  0,   5, 100,   d, "SHAPE");
+			PDF.Layout_Add_Box(  0,   d, 100, 100, "TABLE");
+			break;
+		}
+
+		m_pPDF		= &PDF;
+
+		m_rTitle	= PDF.Layout_Get_Box("TITLE");
+		m_rShape	= PDF.Layout_Get_Box("SHAPE");
+		m_rTable	= PDF.Layout_Get_Box("TABLE");
+		
+		return( Add_Shapes() && PDF.Save(FileName) );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CShapes_Report::Add_Shapes(void)
+{
+	if( m_pShapes && m_pShapes->is_Valid() && m_pPDF && m_pPDF->Add_Page() )
+	{
+		bool			bAddAll;
+		CSG_Rect		r(m_rShape), rWorld(m_pShapes->Get_Extent());
+		CSG_String		Title;
+		CSG_Strings	sLeft, sRight;
+
+		//-------------------------------------------------
+		m_pPDF->Draw_Text(m_rTitle.Get_XCenter(), m_rTitle.Get_YCenter(), _TL("Overview"), (int)(0.7 * m_rTitle.Get_YRange()), PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_CENTER|PDF_STYLE_TEXT_UNDERLINE);
+
+		//-------------------------------------------------
+		r.Deflate(10, false);
+		rWorld.Inflate(5, true);
+
+		m_pPDF->Draw_Shapes   (r, m_pShapes, PDF_STYLE_POLYGON_FILLSTROKE, m_Color_Fill, m_Color_Line, 0, &rWorld);
+		m_pPDF->Draw_Graticule(r, rWorld, 10);
+
+		//-------------------------------------------------
+		sLeft	.Add(CSG_String::Format(SG_T("%s:")	, _TL("Name")));
+		sRight	.Add(CSG_String::Format(SG_T("%s")	, m_pShapes->Get_Name()));
+		sLeft	.Add(CSG_String::Format(SG_T("%s:")	, _TL("Count")));
+		sRight	.Add(CSG_String::Format(SG_T("%d")	, m_pShapes->Get_Count()));
+
+		m_pPDF->Draw_Text(m_rTable.Get_XMin()   , m_rTable.Get_YMax(), sLeft , 8, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP);
+		m_pPDF->Draw_Text(m_rTable.Get_XCenter(), m_rTable.Get_YMax(), sRight, 8, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP);
+
+		//-------------------------------------------------
+		bAddAll	= m_pShapes->Get_Selection_Count() == 0;
+
+		for(int iShape=0; iShape<m_pShapes->Get_Count() && Set_Progress(iShape, m_pShapes->Get_Count()); iShape++)
+		{
+			if( bAddAll || m_pShapes->Get_Record(iShape)->is_Selected() )
+			{
+				Title.Printf(SG_T("%s: %s"), m_pShapes->Get_Field_Name(m_iSubtitle), m_pShapes->Get_Shape(iShape)->asString(m_iSubtitle));
+
+				Add_Shape(m_pShapes->Get_Shape(iShape), Title);
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CShapes_Report::Add_Shape(CSG_Shape *pShape, const SG_Char *Title)
+{
+	if( m_pPDF && m_pPDF->Is_Ready_To_Draw() && pShape && pShape->is_Valid() && m_pPDF->Add_Page() )
+	{
+		CSG_Rect	r(m_rShape), rWorld(pShape->Get_Extent());
+
+		//-------------------------------------------------
+		m_pPDF->Add_Outline_Item(Title);
+
+		m_pPDF->Draw_Text(m_rTitle.Get_XCenter(), m_rTitle.Get_YCenter(), Title, (int)(0.7 * m_rTitle.Get_YRange()), PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_CENTER|PDF_STYLE_TEXT_UNDERLINE);
+
+		r.Deflate(10, false);
+		rWorld.Inflate(5, true);
+
+		m_pPDF->Draw_Shape		(r, pShape, PDF_STYLE_POLYGON_FILLSTROKE, m_Color_Fill, m_Color_Line, 0, &rWorld);
+		m_pPDF->Draw_Graticule	(r, rWorld, 10);
+
+		//-------------------------------------------------
+		if( pShape->Get_Table()->Get_Field_Count() > 0 )
+		{
+			CSG_Table_Record	*pRecord;
+			CSG_Table			Table;
+
+			Table.Set_Name(_TL("Attributes"));
+
+			Table.Add_Field(_TL("Attribute"), SG_DATATYPE_String);
+			Table.Add_Field(_TL("Value")	, SG_DATATYPE_String);
+
+			for(int iField=0; iField<pShape->Get_Table()->Get_Field_Count(); iField++)
+			{
+				pRecord	= Table.Add_Record();
+
+				pRecord->Set_Value(0, pShape->Get_Table()->Get_Field_Name(iField));
+				pRecord->Set_Value(1, pShape->asString(iField));
+			}
+
+			m_pPDF->Draw_Table(m_rTable, &Table, m_nColumns, m_Cell_Height, 0.0);
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+/*/---------------------------------------------------------
+void CWKSP_Map::SaveAs_PDF_Indexed(void)
+{
+	static CSG_Parameters	Parameters(NULL, LNG("[CAP] Save to PDF"), LNG(""), NULL, false);
+
+	//-----------------------------------------------------
+	if( Parameters.Get_Count() == 0 )
+	{
+		Parameters.Add_FilePath(
+			NULL	, "FILENAME"	, LNG("[FLD] PDF Document"),
+			LNG(""),
+			CSG_String::Format(
+				wxT("%s (*.pdf)|*pdf|")
+				wxT("%s|*.*"),
+				LNG("PDF Files"),
+				LNG("All Files")
+			), NULL, true, false
+		);
+
+		Parameters.Add_Choice(
+			NULL	, "PAPER_SIZE"	, LNG("[FLD] Paper Format"),
+			LNG(""),
+
+			CSG_String::Format(wxT("%s|%s|%s|%s|"),
+				LNG("A4 Portrait"),
+				LNG("A4 Landscape"),
+				LNG("A3 Portrait"),
+				LNG("A3 Landscape")
+			)
+		);
+
+		Parameters.Add_String(
+			NULL	, "NAME"		, LNG("[FLD] Title"),
+			LNG(""),
+			LNG("")
+		);
+
+		Parameters.Add_Shapes(
+			NULL	, "SHAPES"		, LNG("[FLD] Shapes"),
+			LNG(""),
+			PARAMETER_INPUT_OPTIONAL
+		);
+
+		Parameters.Add_Table_Field(
+			Parameters("SHAPES")	, "FIELD"		, LNG("[FLD] Attribute"),
+			LNG("")
+		);
+
+	//	Parameters.Add_Grid(
+	//		NULL	, "GRID"		, LNG("[FLD] Grid"),
+	//		LNG(""),
+	//		PARAMETER_INPUT_OPTIONAL
+	//	);
+
+		Parameters.Add_FilePath(
+			NULL	, "FILEICON"	, LNG("[FLD] Icon"),
+			LNG(""),
+
+			CSG_String::Format(wxT("%s|*.png;*.jpg|%s|*.png|%s|*.jpg|%s|*.*"),
+				LNG("All Recognised Files"),
+				LNG("PNG Files"),
+				LNG("JPG Files"),
+				LNG("All Files")
+			), NULL, false, false
+		);
+
+		Parameters.Add_Value(
+			NULL	, "ROUNDSCALE"	, LNG("[FLD] Round Scale"),
+			LNG(""),
+			PARAMETER_TYPE_Bool, true
+		);
+	}
+
+	//-----------------------------------------------------
+	if( DLG_Parameters(&Parameters) )
+	{
+		bool			bResult, bRoundScale;
+		int				iField;
+		CSG_String		Name, FileName, FileName_Icon, FilePath_Maps;
+		CSG_Rect		rOverview, rMap;
+		CSG_Shapes			*pShapes;
+	//	CSG_Grid			*pGrid;
+		CSG_Doc_PDF	PDF;
+
+		MSG_General_Add(CSG_String::Format(wxT("%s..."), LNG("[MSG] Save to PDF")), true, true);
+
+		bResult			= false;
+		Name			= Parameters("NAME")		->asString();	if( Name.Length() < 1 )	Name	=  LNG("Maps");
+		FileName		= Parameters("FILENAME")	->asString();
+		FileName_Icon	= Parameters("FILEICON")	->asString();
+		pShapes			= Parameters("SHAPES")		->asShapes();
+	//	pGrid			= Parameters("GRID")		->asGrid();
+		iField			= Parameters("FIELD")		->asInt();
+		bRoundScale		= Parameters("ROUNDSCALE")	->asBool();
+
+		switch( Parameters("PAPER_SIZE")->asInt() )
+		{
+		default:
+		case 0:	PDF.Open(PDF_PAGE_SIZE_A4, PDF_PAGE_ORIENTATION_PORTRAIT , Name);	break;	// A4 Portrait
+		case 1:	PDF.Open(PDF_PAGE_SIZE_A4, PDF_PAGE_ORIENTATION_LANDSCAPE, Name);	break;	// A4 Landscape
+		case 2:	PDF.Open(PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_PORTRAIT , Name);	break;	// A3 Portrait
+		case 3:	PDF.Open(PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_LANDSCAPE, Name);	break;	// A3 Landscape
+		}
+
+		//-------------------------------------------------
+		if( PDF.Is_Open() )
+		{
+			PDF.Layout_Set_Box_Space(5, false);
+
+			PDF.Layout_Add_Box(  0.0,   0.0, 100.0,  75.0, "MAP");
+			PDF.Layout_Add_Box(  0.0,  75.0,  50.0, 100.0, "DIVISIONS");
+			PDF.Layout_Add_Box( 50.0,  75.0,  60.0,  80.0, "ICON");
+			PDF.Layout_Add_Box( 60.0,  75.0, 100.0,  80.0, "TITLE");
+			PDF.Layout_Add_Box( 50.0,  80.0, 100.0, 100.0, "DESCRIPTION");
+
+			FilePath_Maps	= SG_File_Make_Path(SG_File_Get_Path(FileName), SG_File_Get_Name(FileName, false));
+			rOverview		= pShapes ? pShapes->Get_Extent() : Get_Extent();
+		//	rOverview		= pShapes ? pShapes->Get_Extent() : (pGrid ? pGrid->Get_Extent() : Get_Extent());
+
+			//---------------------------------------------
+		//	PDF.Draw_Text		(PDF.Layout_Get_Box("TITLE").Get_XMin(), PDF.Layout_Get_Box("TITLE").Get_YCenter(), LNG("This is a Test!!!"), 24);
+		//	PDF.Draw_Rectangle	(PDF.Layout_Get_Box("DIVISIONS"));
+		//	PDF.Draw_Grid		(PDF.Layout_Get_Box("DIVISIONS"), Parameters("GRID")->asGrid(), CSG_Colors(), 0.0, 0.0, 0, &rOverview);
+		//	PDF.Draw_Shapes		(PDF.Layout_Get_Box("DIVISIONS"), pShapes, PDF_STYLE_POLYGON_STROKE, SG_COLOR_GREEN, SG_COLOR_BLACK, 1, &rOverview);
+		//	PDF.Draw_Graticule	(PDF.Layout_Get_Box("DIVISIONS"), rOverview);
+
+			//---------------------------------------------
+			Draw_PDF(&PDF, FilePath_Maps, -1, FileName_Icon, Name, rOverview, bRoundScale, iField, pShapes);
+
+			if( pShapes )
+			{
+				for(int i=0; i<pShapes->Get_Count() && SG_UI_Process_Set_Progress(i, pShapes->Get_Count()); i++)
+				{
+					Draw_PDF(&PDF, FilePath_Maps, i, FileName_Icon, Name, pShapes->Get_Shape(i)->Get_Extent(), bRoundScale, iField, pShapes);
+				}
+			}
+
+			//---------------------------------------------
+			PROCESS_Set_Okay(true);
+			Set_Buisy_Cursor(true);
+			bResult	= PDF.Save(FileName);
+			Set_Buisy_Cursor(false);
+		}
+
+		MSG_General_Add(bResult ? LNG("[MSG] okay") : LNG("[MSG] failed"), false, false, bResult ? SG_UI_MSG_STYLE_SUCCESS : SG_UI_MSG_STYLE_FAILURE);
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_Map::Draw_PDF(CSG_Doc_PDF *pPDF, const wxChar *FilePath_Maps, int Image_ID, const wxChar *FileName_Icon, const wxChar *Title, CSG_Rect rWorld, bool bRoundScale, int iField, CSG_Shapes *pShapes)
+{
+	int			FrameSize_1	= 20, FrameSize_2	= 10;
+	double		d, e, Scale, Ratio;
+	CSG_String	FileName, Description, s;
+	CSG_Rect	rBox;
+	wxRect		rBMP;
+	wxBitmap	BMP;
+	wxMemoryDC	dc;
+
+	if( pPDF && rWorld.Get_XRange() > 0.0 && rWorld.Get_YRange() > 0.0 && pPDF->Add_Page() )
+	{
+		rWorld.Inflate(5.0, true);
+
+		//-------------------------------------------------
+		rBox	= pPDF->Layout_Get_Box("MAP");
+		rBox.Deflate(FrameSize_1, false);
+
+		rBMP	= wxRect(0, 0, (int)rBox.Get_XRange(), (int)rBox.Get_YRange());
+		BMP.Create(rBMP.GetWidth(), rBMP.GetHeight());
+		dc.SelectObject(BMP);
+		dc.SetBackground(*wxWHITE_BRUSH);
+		dc.Clear();
+
+		if( bRoundScale )
+		{
+			Scale	= rWorld.Get_XRange() / (pPDF->Get_Page_To_Meter() * (double)rBMP.GetWidth());
+
+		//	if( Scale > 1000 )
+		//	{
+				Ratio	= ((ceil(Scale / 1000.)) / (Scale / 1000.) - 1);
+				rWorld.Inflate(Ratio * 100, true);
+		//	}
+		}
+
+		Scale	= rWorld.Get_XRange() / (pPDF->Get_Page_To_Meter() * rBMP.GetWidth());
+
+		Draw_Map(dc, rWorld, 1.0, rBMP, false);
+		dc.SelectObject(wxNullBitmap);
+		SG_Dir_Create(FilePath_Maps);
+		FileName	= SG_File_Make_Path(FilePath_Maps, CSG_String::Format(wxT("image_%03d"), Image_ID + 1), wxT("png"));
+		BMP.SaveFile(FileName.c_str(), wxBITMAP_TYPE_PNG);
+
+		pPDF->Draw_Image	(rBox, FileName);
+		pPDF->Draw_Graticule(rBox, rWorld, FrameSize_1);
+
+		//-------------------------------------------------
+		rBox	= pPDF->Layout_Get_Box("ICON");
+
+		if( FileName_Icon )
+		{
+			pPDF->Draw_Image(rBox, FileName_Icon);
+		}
+		else
+		{
+			pPDF->Draw_Rectangle(rBox);
+		}
+
+		//-------------------------------------------------
+		rBox	= pPDF->Layout_Get_Box("DIVISIONS");
+
+		pPDF->Draw_Rectangle(rBox);
+
+		if( pShapes )
+		{
+			CSG_Rect	rShapes(pShapes->Get_Extent());
+
+			rShapes.Inflate(5.0, true);
+			rBox.Deflate(FrameSize_2, false);
+
+			pPDF->Draw_Graticule(rBox, rShapes, FrameSize_2);
+			pPDF->Draw_Shapes(rBox, pShapes, PDF_STYLE_POLYGON_FILLSTROKE, SG_COLOR_GREEN, SG_COLOR_BLACK, 0, &rShapes);
+
+			if( Image_ID >= 0 && Image_ID < pShapes->Get_Count() )
+			{
+				pPDF->Draw_Shape(rBox, pShapes->Get_Shape(Image_ID), PDF_STYLE_POLYGON_FILLSTROKE, SG_COLOR_YELLOW, SG_COLOR_RED, 1, &rShapes);
+			}
+		}
+
+		//-------------------------------------------------
+		rBox	= pPDF->Layout_Get_Box("TITLE");
+
+		pPDF->Draw_Text(rBox.Get_XMin(), rBox.Get_YCenter(), Title, 20, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_CENTER|PDF_STYLE_TEXT_UNDERLINE);
+
+		//-------------------------------------------------
+		rBox	= pPDF->Layout_Get_Box("DESCRIPTION");
+
+		Description.Append(CSG_String::Format(wxT("%d. %s\n"), Image_ID + 2, LNG("Map")));
+
+		if( pShapes && Image_ID >= 0 && Image_ID < pShapes->Get_Count() )
+		{
+			switch( pShapes->Get_Type() )
+			{
+			default:
+				break;
+
+			case SHAPE_TYPE_Line:
+				d	= ((CSG_Shape_Line    *)pShapes->Get_Shape(Image_ID))->Get_Length();
+				e	= d > 1000.0 ? 1000.0    : 1.0;
+				s	= d > 1000.0 ? wxT("km") : wxT("m");
+				Description.Append(CSG_String::Format(wxT("%s: %f%s\n"), LNG("Length")	, d / e, s.c_str()));
+				break;
+
+			case SHAPE_TYPE_Polygon:
+				d	= ((CSG_Shape_Polygon *)pShapes->Get_Shape(Image_ID))->Get_Area();
+				e	= d > 1000000.0 ? 1000000.0  : (d > 10000.0 ? 10000.0   : 1.0);
+				s	= d > 1000000.0 ? wxT("km\xc2\xb2") : (d > 10000.0 ? wxT("ha") : wxT("m\xc2\xb2"));
+				Description.Append(CSG_String::Format(wxT("%s: %f%s\n"), LNG("Area")		, d / e, s.c_str()));
+
+				d	= ((CSG_Shape_Polygon *)pShapes->Get_Shape(Image_ID))->Get_Perimeter();
+				e	= d > 1000.0 ? 1000.0    : 1.0;
+				s	= d > 1000.0 ? wxT("km") : wxT("m");
+				Description.Append(CSG_String::Format(wxT("%s: %f%s\n"), LNG("Perimeter")	, d / e, s.c_str()));
+
+				Description.Append(CSG_String::Format(wxT("%s: %d\n")  , LNG("Parts")		, ((CSG_Shape_Polygon *)pShapes->Get_Shape(Image_ID))->Get_Part_Count()));
+				break;
+			}
+
+			if( iField >= 0 && iField < pShapes->Get_Field_Count() )
+			{
+				Description.Append(CSG_String::Format(wxT("%s: %s\n"), pShapes->Get_Field_Name(iField), pShapes->Get_Shape(Image_ID)->asString(iField)));
+			}
+		}
+
+		Description.Append(CSG_String::Format(wxT("%s 1:%s"), LNG("Scale"), SG_Get_String(Scale, 2).c_str()));
+
+		pPDF->Draw_Text(rBox.Get_XMin(), rBox.Get_YMax(), Description, 12, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP);
+	}
+}/**/
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/docs/docs_pdf/Shapes_Report.h b/src/modules_io/docs/docs_pdf/Shapes_Report.h
new file mode 100644
index 0000000..22f16d3
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/Shapes_Report.h
@@ -0,0 +1,113 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     Shapes_Tools                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    Shapes_Report.h                    //
+//                                                       //
+//                 Copyright (C) 2005 by                 //
+//               Olaf Conrad, Victor Olaya               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//                                                       //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__Shapes_Report_H
+#define HEADER_INCLUDED__Shapes_Report_H
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CShapes_Report : public CSG_Module
+{
+public:
+	CShapes_Report(void);
+	virtual ~CShapes_Report(void);
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+private:
+
+	int						m_iSubtitle, m_nColumns, m_Color_Line, m_Color_Fill;
+
+	double					m_Cell_Height;
+
+	CSG_Rect				m_rTitle, m_rShape, m_rTable;
+
+	CSG_Shapes					*m_pShapes;
+
+	class CSG_Doc_PDF		*m_pPDF;
+
+
+	bool					Add_Shapes			(void);
+	bool					Add_Shape			(CSG_Shape *pShape, const SG_Char *Title);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__Shapes_Report_H
diff --git a/src/modules_io/docs/docs_pdf/Shapes_Summary.cpp b/src/modules_io/docs/docs_pdf/Shapes_Summary.cpp
new file mode 100644
index 0000000..cc9186b
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/Shapes_Summary.cpp
@@ -0,0 +1,572 @@
+/*******************************************************************************
+    Summarize.cpp
+    Copyright (C) Victor Olaya
+
+    This program 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.
+
+    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 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 "Shapes_Summary.h"
+
+#define VERY_LARGE_NUMBER 9999999999.
+
+CSG_String sParam[] = {"[Sum]", "[Mean]", "[Variance]", "[Minimum]", "[Maximum]"};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define PDF_PAGE_WIDTH_A4       596
+#define PDF_PAGE_HEIGHT_A4      842
+#define PDF_PAGE_WIDTH_A3 PDF_PAGE_HEIGHT_A4
+#define PDF_PAGE_HEIGHT_A3 (sqrt(2.) * PDF_PAGE_HEIGHT_A4)
+#define OFFSET_X 50
+#define OFFSET_Y 50
+#define LINE_SPACEMENT 12
+#define SUMMARY_LAYOUT_HEADER 50
+#define MAX_SUMMARY_LAYOUT_HEIGHT (PDF_PAGE_WIDTH_A3 - 2 * OFFSET_Y - LINE_SPACEMENT)
+#define MAX_SUMMARY_LAYOUT_WIDTH MAX_SUMMARY_LAYOUT_HEIGHT
+#define SUMMARY_LAYOUT_SEPARATION 30
+#define MAX_SUMMARY_TABLE_WIDTH (PDF_PAGE_HEIGHT_A3 - 2 * OFFSET_X - MAX_SUMMARY_LAYOUT_WIDTH - SUMMARY_LAYOUT_SEPARATION)
+#define MAX_ROWS_IN_SUMMARY_LAYOUT (MAX_SUMMARY_LAYOUT_HEIGHT / TABLE_CELL_HEIGHT)
+#define SUMMARY_STATISTICS_GRAPH_HEIGHT 120
+#define SUMMARY_STATISTICS_GRAPH_WIDTH (PDF_PAGE_WIDTH_A4 - 2 * OFFSET_X)
+#define SUMMARY_STATISTICS_GRAPH_SEPARATION 120
+#define GRATICULE_SEPARATION 20
+#define SUMMARY_TABLE_CELL_HEIGHT 13.0
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef min
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+CShapes_Summary_PDF::CShapes_Summary_PDF(){
+
+}//constructor
+
+CShapes_Summary_PDF::~CShapes_Summary_PDF(){}
+
+void CShapes_Summary_PDF::AddClassSummaryPage(CSG_Shapes *pShapes, 
+											   CSG_Table *pTable,
+											   int iClass,
+											   CSG_String sTitle){
+
+	int i;
+	double fPaperHeight;
+	double fRealWidth, fRealHeight;
+	double fX, fY;
+	CSG_Table *pClassTable;
+	CSG_Table_Record *pRecord;
+	CSG_Rect CanvasExtent, TableExtent;
+	TSG_Rect Extent;
+	
+
+	Add_Page(PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_LANDSCAPE);
+	Add_Outline_Item(sTitle.c_str());
+
+	fPaperHeight = Get_Size_Page().Get_YRange();
+
+	Draw_Text(PDF_PAGE_HEIGHT_A3 - OFFSET_X, fPaperHeight - OFFSET_Y, sTitle, 
+				25, PDF_STYLE_TEXT_ALIGN_H_RIGHT, 0.0, SG_GET_RGB(0, 0, 0));
+
+	Draw_Line(OFFSET_X, fPaperHeight - OFFSET_Y - 5, 
+				PDF_PAGE_HEIGHT_A3 - OFFSET_X, fPaperHeight - OFFSET_Y - 5, 4 );
+
+	Extent = pShapes->Get_Extent();
+	fRealWidth = Extent.xMax - Extent.xMin;
+	fRealHeight = Extent.yMax - Extent.yMin;
+
+	CanvasExtent.Assign(OFFSET_X,
+						OFFSET_Y,
+						OFFSET_X + MAX_SUMMARY_LAYOUT_WIDTH,
+						OFFSET_Y + MAX_SUMMARY_LAYOUT_HEIGHT);
+
+	_Fit_Rectangle(CanvasExtent, fRealWidth / fRealHeight, true);
+
+	CanvasExtent.Deflate(GRATICULE_SEPARATION, false);
+
+	Draw_Shapes(CanvasExtent, pShapes);
+
+	CanvasExtent.Inflate(GRATICULE_SEPARATION, false);
+
+	/*CanvasExtent.xMin = OFFSET_X + (MAX_SUMMARY_LAYOUT_WIDTH - fWidth) / 2. - GRATICULE_SEPARATION;
+	CanvasExtent.xMax = CanvasExtent.xMin + fWidth + 2 * GRATICULE_SEPARATION;
+	CanvasExtent.yMin = OFFSET_Y + (MAX_SUMMARY_LAYOUT_HEIGHT - fHeight) / 2. - GRATICULE_SEPARATION;
+	CanvasExtent.yMax = CanvasExtent.yMin + fHeight + 2* GRATICULE_SEPARATION;*/
+
+	Draw_Graticule(CanvasExtent, Extent);
+
+	pClassTable = SG_Create_Table();
+	pClassTable->Add_Field(_TL("Field"), SG_DATATYPE_String );
+	pClassTable->Add_Field(_TL("Value"), SG_DATATYPE_Double);
+
+	for (i = 0; i < pTable->Get_Field_Count(); i++){
+		pRecord = pClassTable->Add_Record();
+		pRecord->Set_Value(0, pTable->Get_Field_Name(i));
+		pRecord->Set_Value(1, pTable->Get_Record(iClass)->asDouble(i));
+	}
+	fY = fPaperHeight - OFFSET_Y - SUMMARY_LAYOUT_HEADER;
+	fX = PDF_PAGE_HEIGHT_A3 - OFFSET_X - MAX_SUMMARY_TABLE_WIDTH;
+	TableExtent.Assign(fX, fY, fX + MAX_SUMMARY_TABLE_WIDTH, OFFSET_Y);
+
+	Draw_Table(TableExtent, pClassTable, SUMMARY_TABLE_CELL_HEIGHT, 0.0);
+	
+}//method
+
+void CShapes_Summary_PDF::AddSummaryStatisticsPage(CSG_Table* pTable){
+
+	int i,j;
+	double fX, fY;
+	double fPaperHeight;
+	CSG_Points Data;
+	CSG_String *pNames;
+	CSG_Rect r;
+
+	fPaperHeight = Get_Size_Page().Get_YRange();
+
+	pNames = new CSG_String [pTable->Get_Record_Count()];
+	for (i = 0; i < pTable->Get_Record_Count(); i++){
+		pNames[i] = pTable->Get_Record(i)->asString(0);
+	}//for
+
+	for (i = 1; i < pTable->Get_Field_Count(); i++){
+		if ((i-1)%3 == 0){
+			Add_Page();
+		}//if
+		Data.Clear();
+		for (j = 0; j < pTable->Get_Record_Count(); j++){
+			Data.Add(0.0, pTable->Get_Record(j)->asDouble(i)); 
+		}//for		
+		fY = OFFSET_Y + ((i-1)%3) * (SUMMARY_STATISTICS_GRAPH_HEIGHT + SUMMARY_STATISTICS_GRAPH_SEPARATION);
+		fY = fPaperHeight - fY;
+		fX = OFFSET_X;		
+		Draw_Text(fX, fY + 10, pTable->Get_Field_Name(i), 14);
+		r.Assign(fX, fY - 25 - SUMMARY_STATISTICS_GRAPH_HEIGHT, fX + SUMMARY_STATISTICS_GRAPH_WIDTH, fY - 25 );
+		AddBarGraphStatistics(Data, pNames, r);
+	}//for*/
+
+
+}//method
+
+void CShapes_Summary_PDF::AddBarGraphStatistics(CSG_Points &Data,
+										CSG_String *pNames,
+										const CSG_Rect &r){
+
+	int i;
+    int iMag;
+	int iNumLines;
+    double fMinLine = 0;
+	double fWidth;
+	double fMax, fMin;
+	double fStep;
+    double fX, fY;
+	double fPaperHeight;
+	double fAngle;
+	CSG_String sValue;
+	CSG_Points Points;
+
+	fPaperHeight = Get_Size_Page().Get_YRange();
+
+	fMin = fMax = Data[0].y;	
+
+	for (i = 0; i < Data.Get_Count(); i++){
+		if (Data[i].y > fMax){
+			fMax = Data[i].y;
+		}
+		if (Data[i].y < fMin){
+			fMin = Data[i].y;
+		}		
+		fMin = M_GET_MIN(0, fMin);		
+    }
+
+	if (fMin != fMax){
+		iMag = (int) (log(fMax - fMin) / log(10.0));
+		fStep =  (pow(10.0, (double) iMag));
+		if (fStep == 0){
+			fStep = 1.;
+		}
+		fMinLine= (long)(((long)(fMin/fStep)) *fStep);
+
+		iNumLines = (int) ((fMax - fMin) / fStep);
+
+		while (iNumLines < 8){
+			fStep = fStep / 2.0;
+			iNumLines = (int) ((fMax - fMin) / fStep);
+		}
+		iNumLines = (int) ((fMax - fMinLine) / fStep);
+	}
+	else{
+		fStep = fMin = 0;
+		iNumLines = 1;
+		fMinLine = fMax;
+	}
+
+
+	for (i = 0; i < iNumLines; i++) {
+        fY = r.Get_YMin() + ((fMinLine + fStep * i - fMin) / (fMax - fMin)) * r.Get_YRange();
+        if (fY <= r.Get_YMax() && fY >= r.Get_YMin()) {
+			Draw_Line(r.Get_XMin(), fY, r.Get_XMax(), fY);
+        }
+    }
+
+	fWidth = (double) r.Get_XRange() / (double) (Data.Get_Count());
+	for (i = 0; i < Data.Get_Count(); i++)
+	{
+	    fX = r.Get_XMin() + i * fWidth;
+		fY = r.Get_YMin();
+		//fY = fPaperHeight - fY;
+		Draw_Rectangle(fX, fY, fX + fWidth,
+				fY + r.Get_YRange() * ((Data[i].y - fMin) / (fMax - fMin)),
+				PDF_STYLE_POLYGON_FILLSTROKE, 0xaa0000);
+	}
+
+	fAngle = 3.14159/ 180 * 60;
+
+	for (i = 0; i < Data.Get_Count(); i++)
+	{
+	    fX = r.Get_XMin() + i * fWidth + fWidth / 2.;
+		Draw_Text(fX - 5, fY - 5, pNames[i], 9, PDF_STYLE_TEXT_ALIGN_V_TOP|PDF_STYLE_TEXT_ALIGN_H_RIGHT, fAngle);
+		Draw_Line(fX, fY, fX, fY - 5, 1);
+    }
+
+	Draw_Line(r.Get_XMin(), r.Get_YMin(), r.Get_XMin(), r.Get_YMax(), 4);
+	Draw_Line(r.Get_XMin(), r.Get_YMin(), r.Get_XMax(), r.Get_YMin(), 4);
+
+										
+}//method
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CShapes_Summary::CShapes_Summary(void){
+
+	CSG_Parameter *pNode;
+	CSG_String sName;
+
+	Parameters.Set_Name(_TL("Shapes Summary Report"));
+	Parameters.Set_Description(_TW("(c) 2004 by Victor Olaya. summary."));
+
+	pNode = Parameters.Add_Shapes(NULL,
+								"SHAPES",
+								_TL("Shapes"),
+								_TL(""),
+								PARAMETER_INPUT);
+
+	Parameters.Add_Table_Field(pNode,
+								"FIELD",
+								_TL("Field"),
+								_TL(""));
+
+	Parameters.Add_Table(NULL,
+						"TABLE",
+						_TL("Summary Table"),
+						_TL(""),
+						PARAMETER_OUTPUT);
+
+	pNode = Parameters.Add_Node(NULL,
+						"PDFNODE",
+						_TL("PDF Docs"),
+						_TL(""));
+
+	Parameters.Add_Value(pNode,
+						"PDF",
+						_TL("Create PDF Docs"),
+						_TL("Create PDF Docs"),
+						PARAMETER_TYPE_Bool,
+						true);
+
+	Parameters.Add_FilePath(pNode,
+							"OUTPUTPATH",
+							_TL("Folder"),
+							_TL("Folder"),
+							_TL(""),
+							_TL(""),
+							true,
+							true);
+
+	m_pExtraParameters	= Add_Parameters("EXTRA",
+										_TL("Field for Summary"),
+										_TL(""));
+
+}//constructor
+
+
+CShapes_Summary::~CShapes_Summary(void)
+{}
+
+bool CShapes_Summary::On_Execute(void){
+
+	int i,j;
+	CSG_Table *pShapesTable;
+	CSG_Parameter **pExtraParameter;
+	CSG_String sName, sFilePath;
+
+	m_iField = Parameters("FIELD")->asInt();
+	m_pShapes = Parameters("SHAPES")->asShapes();
+	m_pTable = Parameters("TABLE")->asTable();
+
+	pShapesTable = m_pShapes;
+	m_bIncludeParam = new bool [pShapesTable->Get_Field_Count() * 5];
+	pExtraParameter = new CSG_Parameter* [pShapesTable->Get_Field_Count() * 5];
+
+	for (i = 0; i < pShapesTable->Get_Field_Count(); i++){
+		for (j = 0; j < 5; j++){
+			if( SG_Data_Type_is_Numeric(pShapesTable->Get_Field_Type(i)) )
+			{ //is numeric field
+				sName = pShapesTable->Get_Field_Name(i);
+				sName.Append(sParam[j]);
+				pExtraParameter[i * 5 + j] = m_pExtraParameters->Add_Value(NULL,
+																			SG_Get_String(i * 5 + j,0).c_str(),
+																			sName.c_str(),
+																			_TL(""),
+																			PARAMETER_TYPE_Bool,
+																			false);
+				m_bIncludeParam[i * 5 + j] = true;
+			}//if
+			else{
+				m_bIncludeParam[i * 5 + j] = false;
+			}//else
+		}//for
+	}//for
+
+	if(Dlg_Parameters("EXTRA")){
+		for (i = 0; i < pShapesTable->Get_Field_Count() * 5; i++){
+			sName = SG_Get_String(i,0);
+			if (m_bIncludeParam[i]){
+				m_bIncludeParam[i] = Get_Parameters("EXTRA")->Get_Parameter(sName.c_str())->asBool();
+			}//if			
+		}//for
+
+		Summarize();
+
+		if (Parameters("PDF")->asBool()){
+			if (Parameters("OUTPUTPATH")->asString()){
+				sName = _TL("Summary_");
+				sName.Append(m_pShapes->Get_Name());
+				m_DocEngine.Open(PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_LANDSCAPE, sName);
+				CreatePDFDocs();
+				sFilePath = SG_File_Make_Path(Parameters("OUTPUTPATH")->asString(), sName, SG_T("pdf"));
+				if (m_DocEngine.Save(sFilePath)){
+					if (!m_DocEngine.Close()){
+						Message_Add(_TL("\n\n ** Error : Could not close PDF engine ** \n\n"));
+					}
+				}//if
+				else{
+					Message_Add(_TL("\n\n ** Error : Could not save PDF file ** \n\n"));
+				}//else
+			}//if
+		}//if
+
+		m_pExtraParameters->Destroy();
+
+		delete [] m_bIncludeParam;
+
+		return true;
+
+	}//if
+
+	m_pExtraParameters->Destroy();
+
+	delete [] m_bIncludeParam;
+
+	return false;
+
+}//method
+
+void CShapes_Summary::CreatePDFDocs(){
+
+	CSG_Shapes *pShapes;
+	CSG_Shape *pShape;
+	CSG_Table *pShapesTable;
+	int i,j;
+	
+	m_DocEngine.Add_Page_Title (_TL("Summary"), PDF_TITLE_01, PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_LANDSCAPE);
+
+	pShapesTable = m_pShapes;
+	pShapes = new CSG_Shapes();
+	for (i = 0; i < (int)m_ClassesID.size(); i++){
+		Set_Progress(i,m_ClassesID.size());
+		pShapes->Create(m_pShapes->Get_Type());
+		for (j = 0; j < m_pShapes->Get_Count(); j++){
+			if (m_pClasses[j] == i){
+				pShape = pShapes->Add_Shape();
+				pShape->Assign(m_pShapes->Get_Shape(j));
+			}//if
+		}//for
+		m_DocEngine.AddClassSummaryPage(pShapes, m_pTable, i, m_ClassesID[i]);
+	}//for
+	
+	if (m_pTable->Get_Record_Count() > 1){
+		m_DocEngine.Add_Page_Title (_TL("Statistics"), PDF_TITLE_01, PDF_PAGE_SIZE_A4, PDF_PAGE_ORIENTATION_PORTRAIT);
+		m_DocEngine.AddSummaryStatisticsPage(m_pTable);
+	}//if
+
+	delete pShapes;
+
+}//method
+
+
+void CShapes_Summary::Summarize(){
+
+	int i,j;
+
+	CSG_Table *pShapesTable;
+	CSG_Table_Record *pRecord;
+	CSG_String sName;
+	float *pSum;
+	float *pMin;
+	float *pMax;
+	float *pVar;
+	float fValue;
+	float fMean;
+	int iLastField = -1;
+	int iField;
+	int iParam;
+
+	m_ClassesID.clear();
+
+	pShapesTable = m_pShapes;
+	m_pClasses = new int[pShapesTable->Get_Record_Count()];
+
+	for (i = 0; i < pShapesTable->Get_Record_Count(); i++){
+		pRecord = pShapesTable->Get_Record(i);
+		sName = pRecord->asString(m_iField);
+		for (j = 0; j < (int)m_ClassesID.size(); j++){
+			if (!m_ClassesID[j].CmpNoCase(sName)){
+				m_pClasses[i] = j;
+				break;
+			}//if
+		}//for
+		if (j == m_ClassesID.size()){
+			m_pClasses[i] = j;
+			m_ClassesID.push_back(sName);
+		}//if
+	}//for
+
+	m_pTable->Create((CSG_Table*)NULL);
+	m_pTable->Set_Name(_TL("Summary Table"));
+	m_pTable->Add_Field(_TL("Class"), SG_DATATYPE_String);
+	m_pTable->Add_Field(_TL("Count"), SG_DATATYPE_Int);
+
+	m_pCount = new int[m_ClassesID.size()];
+	pSum = new float[m_ClassesID.size()];
+	pMax = new float[m_ClassesID.size()];
+	pMin = new float[m_ClassesID.size()];
+	pVar = new float[m_ClassesID.size()];
+
+	for (i = 0; i < (int)m_ClassesID.size(); i++){
+		m_pCount[i] = 0;
+	}//for
+
+	for (i = 0; i < pShapesTable->Get_Record_Count(); i++){
+		m_pCount[m_pClasses[i]]++;
+	}//for
+
+	for (i = 0; i < (int)m_ClassesID.size(); i++){
+		pRecord = m_pTable->Add_Record();
+		sName = m_ClassesID[i];
+		pRecord->Set_Value(0,sName.c_str());
+		pRecord->Set_Value(1,m_pCount[i]);
+	}//for
+
+	for (i = 0; i < pShapesTable->Get_Field_Count() * 5; i++){
+		if (m_bIncludeParam[i]){
+			iField = (int) (i / 5);
+			iParam = i % 5;
+			sName = pShapesTable->Get_Field_Name(iField);
+			sName.Append(sParam[iParam]);
+			m_pTable->Add_Field(sName.c_str(), SG_DATATYPE_Double);
+			if (iField != iLastField){
+				for (j = 0; j < (int)m_ClassesID.size(); j++){
+					pSum[j] = 0;
+					pMax[j] = -(float)VERY_LARGE_NUMBER;
+					pMin[j] =  (float)VERY_LARGE_NUMBER;
+					pVar[j] = 0;
+				}//for
+				for (j = 0; j < pShapesTable->Get_Record_Count(); j++){
+					pRecord = pShapesTable->Get_Record(j);
+					fValue = pRecord->asFloat(iField);
+					pSum[m_pClasses[j]] += fValue;
+					pVar[m_pClasses[j]] += (fValue * fValue);
+					if (fValue > pMax[m_pClasses[j]]){
+						 pMax[m_pClasses[j]] = fValue;
+					}//if
+					if (fValue < pMin[m_pClasses[j]]){
+						 pMin[m_pClasses[j]] = fValue;
+					}//if
+				}//for
+			}//if
+			iField = m_pTable->Get_Field_Count() - 1;
+			for (j = 0; j < (int)m_ClassesID.size(); j++){
+				pRecord = m_pTable->Get_Record(j);
+				switch (iParam){
+				case 0: //sum
+					pRecord->Set_Value(iField, pSum[j]);
+					break;
+				case 1: //average
+					pRecord->Set_Value(iField, pSum[j] / (float) m_pCount[j]);
+					break;
+				case 2: //variance
+					fMean = pSum[j] / (float) m_pCount[j];
+					pRecord->Set_Value(iField, pVar[j] / (float) m_pCount[j] - fMean * fMean);
+					break;
+				case 3: //min
+					pRecord->Set_Value(iField, pMin[j]);
+					break;
+				case 4: //max
+					pRecord->Set_Value(iField, pMax[j]);
+					break;
+				default:
+					break;
+				}//switch
+			}//for
+
+		}//if
+
+	}//for
+
+
+}//method
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/docs/docs_pdf/Shapes_Summary.h b/src/modules_io/docs/docs_pdf/Shapes_Summary.h
new file mode 100644
index 0000000..18cd09c
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/Shapes_Summary.h
@@ -0,0 +1,95 @@
+/*******************************************************************************
+    Summarize.h
+    Copyright (C) Victor Olaya
+
+    This program 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.
+
+    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 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 "doc_pdf.h"
+
+#include <vector>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CShapes_Summary_PDF : public CSG_Doc_PDF 
+{
+public:
+
+	CShapes_Summary_PDF();
+	virtual ~CShapes_Summary_PDF();
+	void AddClassSummaryPage(CSG_Shapes*, CSG_Table*, int, CSG_String);
+	void AddSummaryStatisticsPage(CSG_Table* pTable);
+
+private:
+
+	void AddBarGraphStatistics(CSG_Points &, CSG_String*,	const CSG_Rect &);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CShapes_Summary : public CSG_Module  
+{
+public:
+	CShapes_Summary(void);
+	virtual ~CShapes_Summary(void);
+
+protected:
+
+	virtual bool			On_Execute(void);
+
+private:
+
+	int m_iField;
+	CSG_Shapes *m_pShapes;
+	CSG_Table *m_pTable;
+	bool *m_bIncludeParam;
+	std::vector<CSG_String> m_ClassesID;
+	int *m_pClasses;
+	int *m_pCount;
+	CSG_Parameters *m_pExtraParameters;
+	CShapes_Summary_PDF m_DocEngine;
+
+	void Summarize();
+	void CreatePDFDocs();
+
+};
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/docs/docs_pdf/doc_pdf.cpp b/src/modules_io/docs/docs_pdf/doc_pdf.cpp
new file mode 100644
index 0000000..87bfab6
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/doc_pdf.cpp
@@ -0,0 +1,1730 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_pdf                        //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     doc_pdf.cpp                       //
+//                                                       //
+//                 Copyright (C) 2005 by                 //
+//              Victor Olaya, Olaf Conrad                //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef _SAGA_DONOTUSE_HARU
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <hpdf.h>
+
+#include "doc_pdf.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define PDF_PAGE_WIDTH_A4		595.276
+#define PDF_PAGE_HEIGHT_A4		841.89
+
+#define PDF_PAGE_HEIGHT_A4_M	0.297
+
+#define PDF_PAGE_WIDTH_A3		 PDF_PAGE_HEIGHT_A4
+#define PDF_PAGE_HEIGHT_A3		(PDF_PAGE_HEIGHT_A4 * sqrt(2.0))
+
+#define PDF_METER_TO_POINT		(PDF_PAGE_HEIGHT_A4 / PDF_PAGE_HEIGHT_A4_M)
+#define PDF_POINT_TO_METER		(PDF_PAGE_HEIGHT_A4_M / PDF_PAGE_HEIGHT_A4)
+
+//---------------------------------------------------------
+#define PDF_GET_R(c)			(float)(SG_GET_R(c) / 255.0)
+#define PDF_GET_G(c)			(float)(SG_GET_G(c) / 255.0)
+#define PDF_GET_B(c)			(float)(SG_GET_B(c) / 255.0)
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Doc_PDF::CSG_Doc_PDF(void)
+{
+	m_pPDF	= NULL;
+
+	Layout_Set_Box_Space(5, false);
+
+	Open();
+}
+
+//---------------------------------------------------------
+CSG_Doc_PDF::CSG_Doc_PDF(TSG_PDF_Page_Size Size, int Orientation, const SG_Char *Title)
+{
+	m_pPDF	= NULL;
+
+	Layout_Set_Box_Space(5, false);
+
+	Open(Size, Orientation, Title);
+}
+
+//---------------------------------------------------------
+CSG_Doc_PDF::~CSG_Doc_PDF(void)
+{
+	Close();
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+const SG_Char * CSG_Doc_PDF::Get_Version(void)
+{
+	static CSG_String	s	= CSG_String::Format(SG_T("Haru Free PDF Library, Version %s"), HPDF_VERSION_TEXT);
+
+	return( s );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Open(const SG_Char *Title)
+{
+	return( Open(PDF_PAGE_SIZE_A4, PDF_PAGE_ORIENTATION_PORTRAIT, Title) );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Open(TSG_PDF_Page_Size Size, int Orientation, const SG_Char *Title)
+{
+	if( Close() )
+	{
+		m_pPDF	= HPDF_New(NULL, NULL);
+
+		m_pOutline_Last_Level_0 = NULL;
+		m_pOutline_Last_Level_1 = NULL;
+		m_pOutline_Last_Level_2 = NULL;
+
+		Set_Size_Page(Size, Orientation);
+
+		if( Title && *Title )
+		{
+			Add_Page_Title(Title);
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Close(void)
+{
+	if( m_pPDF )
+	{
+		try
+		{
+			HPDF_Free(m_pPDF);
+		}
+		catch(...)
+		{
+			return( false );
+		}
+	}
+
+	m_pPDF		= NULL;
+	m_pPage		= NULL;
+	m_nPages	= 0;
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Save(const SG_Char *FileName)
+{
+	if( m_pPDF && m_nPages > 0 && SG_Dir_Create(SG_File_Get_Path(FileName)) )
+	{
+		try
+		{
+			return( HPDF_SaveToFile(m_pPDF, SG_STR_SGTOMB(FileName)) == HPDF_OK );
+		}
+		catch(...)
+		{}
+	}
+
+	SG_UI_Msg_Add_Error(LNG("[ERR] Could not save PDF file."));
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+double CSG_Doc_PDF::Get_Page_To_Meter(void)
+{
+	return( PDF_POINT_TO_METER );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+struct _HPDF_Dict_Rec * CSG_Doc_PDF::_Get_Font(TSG_PDF_Font_Type Font)
+{
+	switch( Font )
+	{
+	default:
+	case PDF_FONT_Helvetica:				return( HPDF_GetFont(m_pPDF, "Helvetica"			, NULL) );
+	case PDF_FONT_Helvetica_Bold:			return( HPDF_GetFont(m_pPDF, "Helvetica-Bold"		, NULL) );
+	case PDF_FONT_Helvetica_Oblique:		return( HPDF_GetFont(m_pPDF, "Helvetica-Oblique"	, NULL) );
+	case PDF_FONT_Helvetica_BoldOblique:	return( HPDF_GetFont(m_pPDF, "Helvetica-BoldOblique", NULL) );
+	case PDF_FONT_Times_Roman:				return( HPDF_GetFont(m_pPDF, "Times-Roman"			, NULL) );
+	case PDF_FONT_Times_Bold:				return( HPDF_GetFont(m_pPDF, "Times-Bold"			, NULL) );
+	case PDF_FONT_Times_Italic:				return( HPDF_GetFont(m_pPDF, "Times-Italic"			, NULL) );
+	case PDF_FONT_Times_BoldItalic:			return( HPDF_GetFont(m_pPDF, "Times-BoldItalic"		, NULL) );
+	case PDF_FONT_Courier:					return( HPDF_GetFont(m_pPDF, "Courier"				, NULL) );
+	case PDF_FONT_Courier_Bold:				return( HPDF_GetFont(m_pPDF, "Courier-Bold"			, NULL) );
+	case PDF_FONT_Courier_Oblique:			return( HPDF_GetFont(m_pPDF, "Courier-Oblique"		, NULL) );
+	case PDF_FONT_Courier_BoldOblique:		return( HPDF_GetFont(m_pPDF, "Courier-BoldOblique"	, NULL) );
+	case PDF_FONT_Symbol:					return( HPDF_GetFont(m_pPDF, "Symbol"				, NULL) );
+	case PDF_FONT_ZapfDingbats:				return( HPDF_GetFont(m_pPDF, "ZapfDingbats"			, NULL) );
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Layout_Add_Box(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const SG_Char *ID)
+{
+	if( m_Boxes_Percent.Add(xMin_Percent, yMin_Percent, xMax_Percent, yMax_Percent) )
+	{
+		m_Boxes.Add();
+		m_Boxes_ID.Add(ID);
+
+		_Layout_Set_Box(m_Boxes.Get_Count() - 1);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Layout_Add_Box(const CSG_Rect &Box_Percent, const SG_Char *ID)
+{
+	return( Layout_Add_Box(Box_Percent.Get_XMin(), Box_Percent.Get_YMin(), Box_Percent.Get_XMax(), Box_Percent.Get_YMax(), ID) );
+}
+
+//---------------------------------------------------------
+const CSG_Rect & CSG_Doc_PDF::Layout_Get_Box(const SG_Char *ID)
+{
+	for(int i=0; i<m_Boxes_ID.Get_Count(); i++)
+	{
+		if( !m_Boxes_ID[i].Cmp(ID) )
+		{
+			return( Layout_Get_Box(i) );
+		}
+	}
+
+	return( Layout_Get_Box(-1) );
+}
+
+//---------------------------------------------------------
+void CSG_Doc_PDF::Layout_Set_Box_Space(double Space, bool bPercent)
+{
+	m_Boxes_Space_bPercent	= bPercent;
+	m_Boxes_Space			= Space;
+}
+
+//---------------------------------------------------------
+void CSG_Doc_PDF::_Layout_Set_Boxes(void)
+{
+	for(int i=0; i<m_Boxes.Get_Count(); i++)
+	{
+		_Layout_Set_Box(i);
+	}
+}
+
+//---------------------------------------------------------
+void CSG_Doc_PDF::_Layout_Set_Box(int iBox)
+{
+	if( iBox >= 0 && iBox < m_Boxes.Get_Count() && iBox < m_Boxes_Percent.Get_Count() )
+	{
+		m_Boxes[iBox].Assign(
+			m_Size_Margins.Get_XMin() + 0.01 * m_Boxes_Percent[iBox].Get_XMin() * m_Size_Margins.Get_XRange(),
+			m_Size_Margins.Get_YMax() - 0.01 * m_Boxes_Percent[iBox].Get_YMax() * m_Size_Margins.Get_YRange(),
+			m_Size_Margins.Get_XMin() + 0.01 * m_Boxes_Percent[iBox].Get_XMax() * m_Size_Margins.Get_XRange(),
+			m_Size_Margins.Get_YMax() - 0.01 * m_Boxes_Percent[iBox].Get_YMin() * m_Size_Margins.Get_YRange()
+		);
+
+		m_Boxes[iBox].Deflate(m_Boxes_Space, m_Boxes_Space_bPercent);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::_Fit_Rectangle(double &x, double &y, double &dx, double &dy, double XToY_Ratio, bool bShrink)
+{
+	if( XToY_Ratio != 0.0 && dx != 0.0 && dy != 0.0 )
+	{
+		if( XToY_Ratio > dx / dy )
+		{
+			if( bShrink )
+			{
+				XToY_Ratio	 = dx / XToY_Ratio;
+				y			+= (dy - XToY_Ratio) / 2.0;
+				dy			 = XToY_Ratio;
+			}
+			else
+			{
+				XToY_Ratio	 = dy * XToY_Ratio;
+				x			-= (dx - XToY_Ratio) / 2.0;
+				dx			 = XToY_Ratio;
+			}
+		}
+		else
+		{
+			if( bShrink )
+			{
+				XToY_Ratio	 = dy * XToY_Ratio;
+				x			+= (dx - XToY_Ratio) / 2.0;
+				dx			 = XToY_Ratio;
+			}
+			else
+			{
+				XToY_Ratio	 = dx / XToY_Ratio;
+				y			-= (dy - XToY_Ratio) / 2.0;
+				dy			 = XToY_Ratio;
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::_Fit_Rectangle(CSG_Rect &r, double XToY_Ratio, bool bShrink)
+{
+	double	x, y, dx, dy;
+
+	x	= r.Get_XMin();
+	y	= r.Get_YMin();
+	dx	= r.Get_XRange();
+	dy	= r.Get_YRange();
+
+	if( _Fit_Rectangle(x, y, dx, dy, XToY_Ratio, bShrink) )
+	{
+		r.Assign(x, y, x + dx, y + dy);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::_Add_Outline_Item(const SG_Char *Title, struct _HPDF_Dict_Rec *pPage, TSG_PDF_Title_Level Level)
+{
+	if( m_pPDF && pPage )
+	{
+		HPDF_Outline	pOutlineItem	= NULL;
+
+		switch( Level )
+		{
+		case PDF_TITLE:
+			pOutlineItem	= m_pOutline_Last_Level_0	= HPDF_CreateOutline(m_pPDF, NULL, SG_STR_SGTOMB(Title), NULL);
+			break;
+
+		case PDF_TITLE_01:
+			if( m_pOutline_Last_Level_0 )
+			{
+				pOutlineItem	= m_pOutline_Last_Level_1	= HPDF_CreateOutline(m_pPDF, m_pOutline_Last_Level_0, SG_STR_SGTOMB(Title), NULL);
+			}
+			break;
+
+		case PDF_TITLE_02:
+			if( m_pOutline_Last_Level_1 )
+			{
+				pOutlineItem	= m_pOutline_Last_Level_2	= HPDF_CreateOutline(m_pPDF, m_pOutline_Last_Level_1, SG_STR_SGTOMB(Title), NULL);
+			}
+			break;
+
+		case PDF_TITLE_NONE:
+			if( m_pOutline_Last_Level_2 )
+			{
+				pOutlineItem	= HPDF_CreateOutline(m_pPDF, m_pOutline_Last_Level_2, SG_STR_SGTOMB(Title), NULL);
+			}
+			break;
+
+		}
+
+		if( pOutlineItem )
+		{
+			if( pPage )
+			{
+				struct _HPDF_Array_Rec	*pDestination	= HPDF_Page_CreateDestination(pPage);
+
+				HPDF_Destination_SetFit		(pDestination);
+				HPDF_Outline_SetDestination	(pOutlineItem, pDestination);
+			}
+
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Add_Outline_Item(const SG_Char *Title)
+{
+	return( _Add_Outline_Item(Title, m_pPage, _Get_Lowest_Outline_Level()) );
+}
+
+//---------------------------------------------------------
+TSG_PDF_Title_Level CSG_Doc_PDF::_Get_Lowest_Outline_Level(void)
+{
+	if( m_pOutline_Last_Level_2 )
+	{
+		return( PDF_TITLE_NONE );
+	}
+	else if( m_pOutline_Last_Level_1 )
+	{
+		return( PDF_TITLE_02 );
+	}
+	else if( m_pOutline_Last_Level_0 )
+	{
+		return( PDF_TITLE_01 );
+	}
+
+	return( PDF_TITLE );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Add_Page(void)
+{
+	return( Add_Page(m_Size_Paper.Get_XRange(), m_Size_Paper.Get_YRange()) );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Add_Page(TSG_PDF_Page_Size Size, int Orientation)
+{
+	if( Add_Page() )
+	{
+		return( Set_Size_Page(Size, Orientation) );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Add_Page(double Width, double Height)
+{
+	if( m_pPDF )
+	{
+		m_nPages++;
+
+		m_pPage		= HPDF_AddPage(m_pPDF);
+
+		Set_Size_Page(Width, Height);
+
+		HPDF_Page_SetRGBStroke	(m_pPage, 0.0, 0.0, 0.0);
+		HPDF_Page_SetRGBFill	(m_pPage, 1.0, 1.0, 1.0);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Set_Size_Page(TSG_PDF_Page_Size Size, int Orientation)
+{
+	double	Width, Height;
+
+	switch( Size )
+	{
+	case PDF_PAGE_SIZE_A4:	default:
+		Width	= PDF_PAGE_WIDTH_A4;
+		Height	= PDF_PAGE_HEIGHT_A4;
+		break;
+
+	case PDF_PAGE_SIZE_A3:
+		Width	= PDF_PAGE_WIDTH_A3;
+		Height	= PDF_PAGE_HEIGHT_A3;
+		break;
+	}
+
+	//-----------------------------------------------------
+	if( Orientation == PDF_PAGE_ORIENTATION_LANDSCAPE )
+	{
+		double	a;
+
+		a		= Width;
+		Width	= Height;
+		Height	= a;
+	}
+
+	return( Set_Size_Page(Width, Height) );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Set_Size_Page(double Width, double Height)
+{
+	if( Width > 0.0 && Height > 0.0 )
+	{
+		m_Size_Paper.Assign(0.0, 0.0, Width, Height);
+
+		m_Size_Margins	= m_Size_Paper;
+		m_Size_Margins.Deflate(10.0, false);
+
+		_Layout_Set_Boxes();
+
+		if( m_pPage )
+		{
+			HPDF_Page_SetWidth	(m_pPage, (float)m_Size_Paper.Get_XRange());
+			HPDF_Page_SetHeight	(m_pPage, (float)m_Size_Paper.Get_YRange());
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Add_Page_Title(const SG_Char *Title, TSG_PDF_Title_Level Level, TSG_PDF_Page_Size Size, int Orientation)
+{
+	bool	bLine, bDestination, bPage;
+	int		FontSize;
+
+	//-----------------------------------------------------
+	if( Add_Page() )
+	{
+		if( m_nPages % 2 - 1 )
+		{
+			Add_Page();
+		}
+
+		if( Size != PDF_PAGE_SIZE_PREVIOUS || Orientation != PDF_PAGE_ORIENTATION_PREVIOUS )
+		{
+			Set_Size_Page(Size, Orientation);
+		}
+
+		//-------------------------------------------------
+		switch( Level )
+		{
+		case PDF_TITLE:
+			FontSize		= 26;
+			bLine			= true;
+			bDestination	= true;
+			bPage			= true;
+			break;
+
+		case PDF_TITLE_01:
+			FontSize		= 22;
+			bLine			= true;
+			bDestination	= false;
+			bPage			= true;
+			break;
+
+		case PDF_TITLE_02:
+			FontSize		= 20;
+			bLine			= false;
+			bDestination	= false;
+			bPage			= false;
+			break;
+		}
+
+		_Add_Outline_Item(Title, m_pPage, Level);
+
+		//-------------------------------------------------
+		Draw_Text(Get_Margins().Get_XCenter(), Get_Margins().Get_YCenter(), Title, FontSize, PDF_STYLE_TEXT_ALIGN_H_CENTER, 0.0, SG_GET_RGB(0, 0, 0));
+
+		//-------------------------------------------------
+		if( bLine )
+		{
+			double	y	= Get_Margins().Get_YCenter() - 25.0;
+
+			Draw_Line(Get_Margins().Get_XMin(), y, Get_Margins().Get_XMax(), y, 5, SG_GET_RGB(0, 0, 0), PDF_STYLE_LINE_END_ROUND);
+		}
+
+		if( bPage )
+		{
+			Add_Page();
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::_Set_Style_FillStroke(int Style, int Fill_Color, int Line_Color, int Line_Width)
+{
+	if( Is_Ready_To_Draw() )
+	{
+		if( Style & PDF_STYLE_POLYGON_STROKE )
+		{
+			if( Style & PDF_STYLE_LINE_END_ROUND )
+			{
+				HPDF_Page_SetLineCap(m_pPage, HPDF_ROUND_END);
+			}
+			else if( Style & PDF_STYLE_LINE_END_SQUARE )
+			{
+				HPDF_Page_SetLineCap(m_pPage, HPDF_PROJECTING_SCUARE_END);
+			}
+			else // if( Style & PDF_STYLE_LINE_END_BUTT )
+			{
+				HPDF_Page_SetLineCap(m_pPage, HPDF_BUTT_END);
+			}
+
+			if( Style & PDF_STYLE_LINE_JOIN_ROUND )
+			{
+				HPDF_Page_SetLineJoin(m_pPage, HPDF_ROUND_JOIN);
+			}
+			else if( Style & PDF_STYLE_LINE_JOIN_BEVEL )
+			{
+				HPDF_Page_SetLineJoin(m_pPage, HPDF_BEVEL_JOIN);
+			}
+			else // if( Style & PDF_STYLE_LINE_JOIN_MITER )
+			{
+				HPDF_Page_SetLineJoin(m_pPage, HPDF_MITER_JOIN);
+			}
+
+			HPDF_Page_SetRGBStroke	(m_pPage, PDF_GET_R(Line_Color), PDF_GET_G(Line_Color), PDF_GET_B(Line_Color));
+
+			HPDF_Page_SetLineWidth	(m_pPage, (float)Line_Width);
+		}
+
+		//-------------------------------------------------
+		if( Style & PDF_STYLE_POLYGON_FILL )
+		{
+			HPDF_Page_SetRGBFill(m_pPage, PDF_GET_R(Fill_Color), PDF_GET_G(Fill_Color), PDF_GET_B(Fill_Color));
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Point(double x, double y, double Width, int Style, int Fill_Color, int Line_Color, int Line_Width)
+{
+	if( Is_Ready_To_Draw() )
+	{
+		Width	/= 2.0;
+
+		//-------------------------------------------------
+	//	if( Style & PDF_STYLE_POINT_CIRCLE )
+		{
+		}
+	//	else // if( Style & PDF_STYLE_POINT_SQUARE )
+		{
+			return( Draw_Rectangle(x - Width, y - Width, x + Width, y + Width, Style, Fill_Color, Line_Color, Line_Width) );
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Line(double xa, double ya, double xb, double yb, int Width, int Color, int Style)
+{
+	CSG_Points	Points;
+
+	Points.Add(xa, ya);
+	Points.Add(xb, yb);
+
+	return( Draw_Line(Points, Width, Color, Style) );
+}
+
+bool CSG_Doc_PDF::Draw_Line(CSG_Points &Points, int Width, int Color, int Style)
+{
+	if( Points.Get_Count() > 1 && _Set_Style_FillStroke(Style|PDF_STYLE_POLYGON_STROKE, 0, Color, Width) )
+	{
+		HPDF_Page_MoveTo(m_pPage, (float)Points[0].x, (float)Points[0].y);
+
+		for(int i=1; i<Points.Get_Count(); i++)
+		{
+			HPDF_Page_LineTo(m_pPage, (float)Points[i].x, (float)Points[i].y);
+		}
+
+		//-------------------------------------------------
+		HPDF_Page_Stroke(m_pPage);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Rectangle(double xa, double ya, double xb, double yb, int Style, int Fill_Color, int Line_Color, int Line_Width)
+{
+	CSG_Points	Points;
+
+	Points.Add(xa, ya);
+	Points.Add(xb, ya);
+	Points.Add(xb, yb);
+	Points.Add(xa, yb);
+
+	return( Draw_Polygon(Points, Style, Fill_Color, Line_Color, Line_Width) );
+}
+
+bool CSG_Doc_PDF::Draw_Rectangle(const CSG_Rect &r, int Style, int Fill_Color, int Line_Color, int Line_Width)
+{
+	return( Draw_Rectangle(r.Get_XMin(), r.Get_YMin(), r.Get_XMax(), r.Get_YMax(), Style, Fill_Color, Line_Color, Line_Width) );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Polygon(CSG_Points &Points, int Style, int Fill_Color, int Line_Color, int Line_Width)
+{
+	if( Points.Get_Count() > 2 && _Set_Style_FillStroke(Style, Fill_Color, Line_Color, Line_Width) )
+	{
+		HPDF_Page_MoveTo(m_pPage, (float)Points[0].x, (float)Points[0].y);
+
+		for(int i=1; i<Points.Get_Count(); i++)
+		{
+			HPDF_Page_LineTo(m_pPage, (float)Points[i].x, (float)Points[i].y);
+		}
+
+		HPDF_Page_ClosePath(m_pPage);
+
+		//-------------------------------------------------
+		if( Style & PDF_STYLE_POLYGON_FILL && Style & PDF_STYLE_POLYGON_STROKE )
+		{
+			HPDF_Page_EofillStroke(m_pPage);
+		}
+		else if( Style & PDF_STYLE_POLYGON_FILL )
+		{
+			HPDF_Page_Eofill(m_pPage);
+		}
+		else // if( Style & PDF_STYLE_POLYGON_STROKE )
+		{
+			HPDF_Page_Stroke(m_pPage);
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Text(double x, double y, CSG_Strings &Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)
+{
+	if( Is_Ready_To_Draw() && Text.Get_Count() > 0 )
+	{
+		for(int i=0; i<Text.Get_Count(); i++, y-=Size)
+		{
+			_Draw_Text(x, y, Text[i], Size, Style, Angle, Color, Font);
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Text(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)
+{
+	int				n;
+	CSG_String		String(Text);
+	CSG_Strings	Strings;
+
+	while( (n = String.Find('\n')) >= 0 )
+	{
+		Strings.Add(String.Left(n));
+		String.Remove(0, n + 1);
+	}
+
+	if( Strings.Get_Count() > 0 )
+	{
+		if( String.Length() > 0 )
+		{
+			Strings.Add(String);
+		}
+
+		return( Draw_Text(x, y, Strings, Size, Style, Angle, Color, Font) );
+	}
+
+	return( _Draw_Text(x, y, Text, Size, Style, Angle, Color, Font) );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::_Draw_Text(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)
+{
+	float	Width, Height;
+
+	if( m_pPage && Text && *Text != '\0' )
+	{
+		double	ax, ay, bx, by;
+
+		HPDF_Page_SetFontAndSize(m_pPage, _Get_Font(Font), (float)Size);
+
+		HPDF_Page_SetTextRenderingMode(m_pPage, HPDF_FILL_THEN_STROKE);
+		HPDF_Page_SetLineWidth	(m_pPage, 0);
+		HPDF_Page_SetRGBStroke	(m_pPage, PDF_GET_R(Color), PDF_GET_G(Color), PDF_GET_B(Color));
+		HPDF_Page_SetRGBFill	(m_pPage, PDF_GET_R(Color), PDF_GET_G(Color), PDF_GET_B(Color));
+
+		Width	= HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(Text)) * (float)cos(Angle);
+		Height	= HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(Text)) * (float)sin(Angle) + Size;
+
+		//-------------------------------------------------
+		if( Style & PDF_STYLE_TEXT_ALIGN_H_CENTER )
+		{
+			ax	= x - HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(Text)) / 2.0;
+		}
+		else if( Style & PDF_STYLE_TEXT_ALIGN_H_RIGHT )
+		{
+			ax	= x - HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(Text));
+		}
+		else
+		{
+			ax	= x;
+		}
+
+		bx	= ax + HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(Text));
+
+		if( Style & PDF_STYLE_TEXT_ALIGN_V_CENTER )
+		{
+			ay	= y - Size / 2.0;
+		}
+		else if( Style & PDF_STYLE_TEXT_ALIGN_V_TOP )
+		{
+			ay	= y - Size;
+		}
+		else
+		{
+			ay	= y;
+		}
+
+		by	= ay;
+
+		//-------------------------------------------------
+		HPDF_Page_BeginText(m_pPage);
+
+		if( Angle != 0.0 )
+		{
+			double	dSin, dCos, dx, dy;
+
+			dSin	= sin(-Angle);
+			dCos	= cos(-Angle),
+
+			dx	= ax - x,
+			dy	= ay - y;
+			ax	= x + dCos * dx + dSin * dy;
+			ay	= y - dSin * dx + dCos * dy;
+
+			dx	= bx - x,
+			dy	= by - y;
+			bx	= x + dCos * dx + dSin * dy;
+			by	= y - dSin * dx + dCos * dy;
+
+			dSin	= sin(Angle);
+			dCos	= cos(Angle),
+
+			HPDF_Page_SetTextMatrix(m_pPage, (float)dCos, (float)dSin, -(float)dSin, (float)dCos, (float)ax, (float)ay);
+		}
+		else
+		{
+			HPDF_Page_MoveTextPos(m_pPage, (float)ax, (float)ay);
+		}
+
+		HPDF_Page_ShowText(m_pPage, SG_STR_SGTOMB(Text));
+		HPDF_Page_EndText(m_pPage);
+
+		//-------------------------------------------------
+		if( Style & PDF_STYLE_TEXT_UNDERLINE )
+		{
+			double	dx, dy;
+
+			dy	=  0.2 * Size * (ax - bx) / SG_Get_Distance(ax, ay, bx, by);
+			dx	= -0.2 * Size * (ay - by) / SG_Get_Distance(ax, ay, bx, by);
+
+			Draw_Line(ax + dx, ay + dy, bx + dx, by + dy, (int)(0.1 * Size), Color);
+		}
+
+		if( Style & PDF_STYLE_TEXT_STROKE )
+		{
+			double	dx, dy;
+
+			dy	= -0.4 * Size * (ax - bx) / SG_Get_Distance(ax, ay, bx, by);
+			dx	=  0.4 * Size * (ay - by) / SG_Get_Distance(ax, ay, bx, by);
+
+			Draw_Line(ax + dx, ay + dy, bx + dx, by + dy, (int)(0.1 * Size), Color);
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Image(double x, double y, double dx, double dy, const SG_Char *FileName)
+{
+	bool		bKeepRatio	= true;
+	double		nx, ny;
+	HPDF_Image	pImage		= NULL;
+
+	//-----------------------------------------------------
+	if( m_pPage && SG_File_Exists(FileName) && dx > 0.0 && dy > 0.0 )
+	{
+		if( SG_File_Cmp_Extension(FileName, SG_T("png")) )
+		{
+	try	{	pImage	= HPDF_LoadPngImageFromFile (m_pPDF, SG_STR_SGTOMB(FileName));	}	catch(...)	{}
+		}
+		else if( SG_File_Cmp_Extension(FileName, SG_T("jpg")) )
+		{
+	try	{	pImage	= HPDF_LoadJpegImageFromFile(m_pPDF, SG_STR_SGTOMB(FileName));	}	catch(...)	{}
+		}
+	}
+
+	//-----------------------------------------------------
+	if( pImage && (nx = HPDF_Image_GetWidth(pImage)) > 0 && (ny = HPDF_Image_GetHeight(pImage)) > 0 )
+	{
+		if( bKeepRatio )
+		{
+			_Fit_Rectangle(x, y, dx, dy, nx / ny, true);
+		}
+
+		HPDF_Page_DrawImage(m_pPage, pImage, (float)x, (float)y, (float)dx, (float)dy);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Image(const CSG_Rect &r, const SG_Char *FileName)
+{
+	return( Draw_Image(r.Get_XMin(), r.Get_YMin(), r.Get_XRange(), r.Get_YRange(), FileName) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Graticule(const CSG_Rect &r, const CSG_Rect &rWorld, int Size)
+{
+	if( Is_Ready_To_Draw() )
+	{
+		CSG_Rect	rRuler, rFrame(r);
+
+		rFrame.Inflate(Size, false);
+
+		Draw_Rectangle(rFrame, PDF_STYLE_POLYGON_STROKE);
+		Draw_Rectangle(r     , PDF_STYLE_POLYGON_STROKE);
+
+		rRuler.Assign(r.Get_XMin(), r.Get_YMax(), r.Get_XMax(), rFrame.Get_YMax());
+		_Draw_Ruler(rRuler, rWorld.Get_XMin(), rWorld.Get_XMax()  , true , true , false);
+
+		rRuler.Assign(r.Get_XMin(), r.Get_YMin(), r.Get_XMax(), rFrame.Get_YMin());
+		_Draw_Ruler(rRuler, 0.0              , rWorld.Get_XRange(), true , true , true);
+
+		rRuler.Assign(r.Get_XMin(), r.Get_YMin(), rFrame.Get_XMin(), r.Get_YMax());
+		_Draw_Ruler(rRuler, rWorld.Get_YMin(), rWorld.Get_YMax()  , false, false, false);
+
+		rRuler.Assign(r.Get_XMax(), r.Get_YMin(), rFrame.Get_XMax(), r.Get_YMax());
+		_Draw_Ruler(rRuler, 0.0              , rWorld.Get_YRange(), false, false, true);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+#define RULER_TEXT_SPACE	4
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::_Draw_Ruler(const CSG_Rect &r, double zMin, double zMax, bool bHorizontal, bool bAscendent, bool bTickAtTop)
+{
+	int			Decimals, FontSize;
+	double		xOff, yOff, Width, Height, Height_Tick, z, dz, zToDC, zDC, zPos, tPos;
+	CSG_String	s;
+
+	//-----------------------------------------------------
+	Width	= bHorizontal ? r.Get_XRange() : r.Get_YRange();
+	Height	= bHorizontal ? r.Get_YRange() : r.Get_XRange();
+
+	if( Is_Ready_To_Draw() && zMin < zMax && Width > 0 && Height > 0 )
+	{
+		xOff		= r.Get_XMin();
+		yOff		= r.Get_YMax();
+
+		FontSize	= (int)(0.45 * (double)Height);
+		HPDF_Page_SetFontAndSize(m_pPage, _Get_Font(PDF_FONT_DEFAULT), (float)FontSize);
+
+		Height_Tick	= (int)(0.3 * (double)Height);
+
+		//-------------------------------------------------
+		zToDC		= (double)Width / (zMax - zMin);
+
+		dz			= pow(10.0, floor(log10(zMax - zMin)) - 1.0);
+		Decimals	= dz >= 1.0 ? 0 : (int)fabs(log10(dz));
+
+		s.Printf(SG_T("%.*f"), Decimals, zMax);
+		zDC			= HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(s));
+		while( zToDC * dz < zDC + RULER_TEXT_SPACE )
+		{
+			dz	*= 2;
+		}
+
+		//-------------------------------------------------
+		z			= dz * floor(zMin / dz);
+		if( z < zMin )	z	+= dz;
+
+		for(; z<=zMax; z+=dz)
+		{
+			s.Printf(SG_T("%.*f"), Decimals, z);
+
+			zDC	= bAscendent ? zToDC * (z - zMin) : Width - zToDC * (z - zMin);
+
+			if( bHorizontal )
+			{
+				zPos	= xOff + zDC;
+
+				if( bTickAtTop )
+				{
+					tPos	= yOff;
+					Draw_Line(zPos, tPos - Height_Tick, zPos, yOff);
+					Draw_Text(zPos, tPos - Height_Tick, s, FontSize, PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_TOP, 0.0);
+				}
+				else
+				{
+					tPos	= yOff - Height;
+					Draw_Line(zPos, tPos + Height_Tick, zPos, tPos);
+					Draw_Text(zPos, tPos + Height_Tick, s, FontSize, PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_BOTTOM, 0.0);
+				}
+			}
+			else
+			{
+				zPos	= yOff - zDC;
+
+				if( bTickAtTop )
+				{
+					tPos	= xOff;
+					Draw_Line(tPos + Height_Tick, zPos, tPos, zPos);
+					Draw_Text(tPos + Height_Tick, zPos, s, FontSize, PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_TOP, M_DEG_TO_RAD * 90.0);
+				}
+				else
+				{
+					tPos	= xOff + Height;
+					Draw_Line(tPos - Height_Tick, zPos, tPos, zPos);
+					Draw_Text(tPos - Height_Tick, zPos, s, FontSize, PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_BOTTOM, M_DEG_TO_RAD * 90.0);
+				}
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::_Draw_Table(CSG_Rect r, CSG_Table *pTable, int iRecord, int nRecords, double CellHeight, double HeaderHeightRel)
+{
+	int				iField, dyFont, dyFont_Hdr;
+	double			xPos, yPos, dxPos, dyPos, dyPos_Hdr, xSpace, ySpace, ySpace_Hdr;
+	bool			bAddHeader;
+	CSG_Table_Record	*pRecord;
+
+	if( pTable && pTable->is_Valid() && iRecord < pTable->Get_Record_Count() )
+	{
+	//	Draw_Text(r.Get_XMin(), r.Get_YMax(), pTable->Get_Name(), 16);	// the table's name should not be drawn here...
+
+		dxPos		= r.Get_XRange() / pTable->Get_Field_Count();
+
+		if( HeaderHeightRel < 1.0 )
+			HeaderHeightRel	= 1.0;
+
+		dyPos		= CellHeight > 0.0 ? CellHeight : r.Get_YRange() / (nRecords + HeaderHeightRel);
+		dyPos_Hdr	= dyPos * HeaderHeightRel;
+
+		dyFont		= (int)(0.75 * dyPos);
+		dyFont_Hdr	= (int)(0.75 * dyPos_Hdr);
+
+		ySpace		= 0.1 * dyPos;
+		ySpace_Hdr	= 0.1 * dyPos_Hdr;
+		xSpace		= ySpace;
+
+		nRecords	+= iRecord;
+
+		if( nRecords > pTable->Get_Record_Count() )
+		{
+			nRecords	= pTable->Get_Record_Count();
+		}
+
+		//-------------------------------------------------
+		for(yPos=r.Get_YMax(), bAddHeader=true; iRecord<nRecords; iRecord++, yPos-=dyPos)
+		{
+			if( yPos < r.Get_YMin() - dyPos )
+			{
+				Add_Page();
+
+				yPos		= r.Get_YMax();
+				bAddHeader	= true;
+			}
+
+			if( bAddHeader )
+			{
+				for(iField=0, xPos=r.Get_XMin(); iField<pTable->Get_Field_Count(); iField++, xPos+=dxPos)
+				{
+					Draw_Rectangle(xPos, yPos, xPos + dxPos, yPos - dyPos_Hdr, PDF_STYLE_POLYGON_FILLSTROKE, SG_COLOR_GREY_LIGHT, SG_COLOR_BLACK, 0);
+					Draw_Text(xPos + xSpace, yPos - ySpace_Hdr, pTable->Get_Field_Name(iField), dyFont_Hdr, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP);
+				}
+
+				yPos		-= dyPos_Hdr;
+				bAddHeader	= false;
+			}
+
+			//---------------------------------------------
+			pRecord	= pTable->Get_Record(iRecord);
+
+			for(iField=0, xPos=r.Get_XMin(); iField<pTable->Get_Field_Count(); iField++, xPos+=dxPos)
+			{
+				Draw_Rectangle(xPos, yPos, xPos + dxPos, yPos - dyPos, PDF_STYLE_POLYGON_STROKE, SG_COLOR_WHITE, SG_COLOR_BLACK, 0);
+				Draw_Text(xPos + xSpace, yPos - ySpace, pRecord->asString(iField), dyFont, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP);
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Table(const CSG_Rect &r, CSG_Table *pTable, double CellHeight, double HeaderHeightRel)
+{
+	if( pTable && pTable->is_Valid() )
+	{
+		return( _Draw_Table(r, pTable, 0, pTable->Get_Record_Count(), CellHeight, HeaderHeightRel) );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Table(const CSG_Rect &r, CSG_Table *pTable, int nColumns, double CellHeight, double HeaderHeightRel)
+{
+	if( pTable && pTable->is_Valid() && nColumns > 1 )
+	{
+		int			nRecords;
+		double		dx, dxSpace;
+		CSG_Rect	rColumn(r), rTable(r);
+
+		dxSpace		= 4;
+		rTable.Inflate(dxSpace, 0.0, false);
+		dx			= rTable.Get_XRange() / (double)nColumns;
+		nRecords	= pTable->Get_Record_Count() / nColumns;
+
+		for(int i=0, iRecord=0; i<nColumns; i++, iRecord+=nRecords)
+		{
+			rColumn.m_rect.xMin	= rTable.Get_XMin() + (i + 0) * dx + dxSpace;
+			rColumn.m_rect.xMax	= rTable.Get_XMin() + (i + 1) * dx - dxSpace;
+
+			_Draw_Table(rColumn, pTable, iRecord, nRecords, CellHeight, HeaderHeightRel);
+		}
+
+		return( true );
+	}
+
+	return( Draw_Table(r, pTable, CellHeight, HeaderHeightRel) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::_Draw_Shape(CSG_Rect r, CSG_Shape *pShape, double xMin, double yMin, double World2PDF, int Style, int Fill_Color, int Line_Color, int Line_Width, int Point_Width)
+{
+	if( pShape && pShape->is_Valid() )
+	{
+		int			iPart, iPoint;
+		TSG_Point	Point;
+		CSG_Points	Points;
+
+		for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
+		{
+			Points.Clear();
+
+			for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
+			{
+				Point	= pShape->Get_Point(iPoint, iPart);
+				Point.x	= r.Get_XMin() + World2PDF * (Point.x - xMin);
+				Point.y	= r.Get_YMin() + World2PDF * (Point.y - yMin);
+				Points.Add(Point.x, Point.y);
+			}
+
+			switch( pShape->Get_Type() )
+			{
+			case SHAPE_TYPE_Point:
+			case SHAPE_TYPE_Points:
+				for(iPoint=0; iPoint<Points.Get_Count(); iPoint++)
+				{
+					Draw_Point(Points[iPoint].x, Points[iPoint].y, Point_Width, Style, Fill_Color, Line_Color, Line_Width);
+				}
+				break;
+
+			case SHAPE_TYPE_Line:
+				Draw_Line(Points, Line_Width, Line_Color, Style);
+				break;
+
+			case SHAPE_TYPE_Polygon:
+				if( ((CSG_Shape_Polygon *)pShape)->is_Lake(iPart) )
+				{
+					Draw_Polygon(Points, PDF_STYLE_POLYGON_FILLSTROKE, SG_COLOR_WHITE, Line_Color, Line_Width);
+				}
+				else
+				{
+					Draw_Polygon(Points, Style, Fill_Color, Line_Color, Line_Width);
+				}
+				break;
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Shape(const CSG_Rect &r, CSG_Shape *pShape, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld)
+{
+	double		World2PDF;
+	CSG_Rect	rWorld, rFit;
+
+	if( pShape && pShape->is_Valid() && r.Get_XRange() > 0.0 && r.Get_YRange() > 0.0 )
+	{
+		rWorld	= prWorld ? *prWorld : pShape->Get_Extent();
+
+		if( rWorld.Get_XRange() > 0.0 && rWorld.Get_YRange() > 0.0 )
+		{
+			_Fit_Rectangle(rFit = r, rWorld.Get_XRange() / rWorld.Get_YRange(), true);
+
+			World2PDF	= rFit.Get_XRange() / rWorld.Get_XRange();
+
+			_Draw_Shape(rFit, pShape, rWorld.Get_XMin(), rWorld.Get_YMin(), World2PDF, Style, Fill_Color, Line_Color, Line_Width, Line_Width);
+
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Shapes(const CSG_Rect &r, CSG_Shapes *pShapes, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld)
+{
+	double		World2PDF;
+	CSG_Rect	rWorld, rFit;
+
+	if( pShapes && pShapes->is_Valid() && r.Get_XRange() > 0.0 && r.Get_YRange() > 0.0 )
+	{
+		rWorld	= prWorld ? *prWorld : pShapes->Get_Extent();
+
+		if( rWorld.Get_XRange() > 0.0 && rWorld.Get_YRange() > 0.0 )
+		{
+			_Fit_Rectangle(rFit = r, rWorld.Get_XRange() / rWorld.Get_YRange(), true);
+
+			World2PDF	= rFit.Get_XRange() / rWorld.Get_XRange();
+
+			for(int iShape=0; iShape<pShapes->Get_Count(); iShape++)
+			{
+				_Draw_Shape(rFit, pShapes->Get_Shape(iShape), rWorld.Get_XMin(), rWorld.Get_YMin(), World2PDF, Style, Fill_Color, Line_Color, Line_Width, Line_Width);
+			}
+
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Doc_PDF::Draw_Grid(const CSG_Rect &r, CSG_Grid *pGrid, const CSG_Colors &Colors, double zMin, double zMax, int Style, CSG_Rect *prWorld)
+{
+	double		x, y, z, d, xFit, yFit, dFit;
+	CSG_Rect	rWorld, rFit;
+
+	if( Is_Ready_To_Draw() && pGrid && pGrid->is_Valid() && pGrid->Get_ZRange() > 0.0 )
+	{
+		rWorld	= prWorld ? *prWorld : pGrid->Get_Extent();
+
+		if( rWorld.Get_XRange() > 0.0 && rWorld.Get_YRange() > 0.0 )
+		{
+			_Fit_Rectangle(rFit = r, rWorld.Get_XRange() / rWorld.Get_YRange(), true);
+
+			dFit	= 1.0;
+			d		= dFit * (rWorld.Get_XRange() / rFit.Get_XRange());
+
+			if( zMin >= zMax )
+			{
+				zMin	= pGrid->Get_ZMin();
+				zMax	= pGrid->Get_ZMax();
+			}
+
+			zMax	= Colors.Get_Count() / (zMax - zMin);
+
+			for(y=rWorld.Get_YMin(), yFit=rFit.Get_YMin(); yFit<rFit.Get_YMax() && y<pGrid->Get_Extent().Get_YMax(); y++, yFit+=dFit, y+=d)
+			{
+				for(x=rWorld.Get_XMin(), xFit=rFit.Get_XMin(); xFit<rFit.Get_XMax() && x<pGrid->Get_Extent().Get_XMax(); x++, xFit+=dFit, x+=d)
+				{
+					if( pGrid->Get_Value(x, y, z) )
+					{
+						Draw_Point(xFit, yFit, dFit, PDF_STYLE_POINT_SQUARE|PDF_STYLE_POLYGON_FILL, Colors.Get_Color((int)(zMax * (z - zMin))));
+					}
+				}
+			}
+
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CSG_Doc_PDF::Draw_Curve(CSG_Points &Data, const CSG_Rect &r, int iGraphType)
+{
+/*
+	int i;
+    int iMag;
+	int iNumLines;
+	int iNumData;
+    float fMinLine = 0;
+	float fWidth;
+	float fMax, fMin;
+	float fStep;
+    float fX, fY;
+	float fMaxX, fMinX;
+	float fOffsetX;
+	CSG_String sValue;
+	CSG_Points Points;
+
+	fMin = fMax = Data[0].y;
+
+	for (i = 0; i < Data.Get_Count(); i++)
+	{
+		if (Data[i].y > fMax)
+		{
+			fMax = Data[i].y;
+		}
+		if (Data[i].y < fMin)
+		{
+			fMin = Data[i].y;
+		}
+		if (iGraphType == PDF_GRAPH_TYPE_BARS){
+			fMin = M_GET_MIN(0, fMin);
+		}
+    }
+
+	if (fMin != fMax){
+		iMag = (int) (log(fMax - fMin) / log(10.0));
+		fStep = (float) ((int) pow(10.0, (double) iMag));
+		if (fStep == 0)
+		{
+			fStep = 1.;
+		}
+		if (fMin < 0) 
+		{
+			iMag = (int) (log(fabs(fMin)) / log(10.0));
+			fMinLine = -(int) pow(10.0, (double) iMag);
+		}
+		else 
+		{
+			fMinLine=(int)(((int)(fMin/fStep)) *fStep);
+		}
+
+		iNumLines = (int) ((fMax - fMin) / fStep);
+
+		while (iNumLines < 8) 
+		{
+			fStep = fStep / 2.0;
+			iNumLines = (int) ((fMax - fMin) / fStep);
+		}
+		iNumLines = (int) ((fMax - fMinLine) / fStep);
+	}
+	else{
+		if (fMin > 0)
+		{
+			fStep = fMin = 0;
+			iNumLines = 1;
+			fMinLine = fMax;
+		}
+		else if (fMin < 0)
+		{
+			fStep = 0;
+			fMin = fMin - 1;
+			fMinLine = fMax;
+		}
+		else
+		{
+			return;
+		}		
+	}
+
+	for (i = 0; i < iNumLines; i++) 
+	{
+        fY = r.Get_YMax() - ((fMinLine + fStep * i - fMin) / (fMax - fMin)) * r.Get_YRange();
+        if (fY <= r.Get_YMax() && fY >= r.Get_YMin()) 
+		{
+			fY = HPDF_Page_Height() - fY;
+        }
+    }
+
+	if (iGraphType == PDF_GRAPH_TYPE_BARS)
+	{
+		fWidth = (float) r.Get_XRange() / (float) (Data.Get_Count());
+	    for (i = 0; i < Data.Get_Count(); i++)
+		{
+	        fX = r.Get_XMin() + i * fWidth;
+			fY = r.Get_YMax();
+			fY = HPDF_Page_Height() - fY;
+			Draw_Rectangle(fX, fY, fX + fWidth,
+					fY - r.Get_YRange() * ((Data[i].y - fMin) / (fMax - fMin)),
+					PDF_STYLE_POLYGON_FILLSTROKE, 0x660000);
+	    }
+	}
+	else
+	{
+		fWidth = (float) r.Get_XRange() / (float) (Data.Get_Count() - 1);
+		fY = r.Get_YMin() + r.Get_YRange()
+				- r.Get_YRange() * ((Data[0].y - fMin) / (fMax - fMin));
+		fY = HPDF_Page_Height() - fY;
+		Points.Add(r.Get_XMin(), fY);
+		for (i = 1; i < Data.Get_Count(); i++)
+		{
+			fY = r.Get_YMin() + r.Get_YRange()
+					- r.Get_YRange() * ((Data[i].y - fMin) / (fMax - fMin));
+			fY = HPDF_Page_Height() - fY;
+			Points.Add(r.Get_XMin() + i * fWidth, fY);
+	    }
+		Draw_Line(Points, 3, 0x660000);
+	}
+
+    fMaxX = Data[Data.Get_Count() - 1].x;
+    fMinX = Data[0].x;
+
+	if (fMaxX != fMinX)
+	{
+		iMag = (int) (log(fMaxX - fMinX) / log(10.0));
+		fStep = (float) pow(10.0, (double) iMag);
+
+		iNumData = (int) ((fMaxX-fMinX) / fStep);
+
+		while (iNumData < 3)
+		{
+			fStep = fStep / 2.0;
+			iNumData = (int) ((fMaxX-fMinX) / fStep);
+		}
+		fMinLine = (int)(((int)(fMinX/fStep)) * fStep);
+		while (fMinLine<fMinX)
+		{
+			fMinLine+=fStep;
+		}
+		fOffsetX = fMinX-fMinLine;
+
+		fY = HPDF_Page_Height() - r.Get_YMin() - r.Get_YRange();
+		for (i = 0; i < iNumData; i++)
+		{
+			fX = r.Get_XMin() + ((fStep * (float) i-fOffsetX) / (fMaxX-fMinX)) * r.Get_XRange();
+			if (fX >= r.Get_XMin() && fX < r.Get_XMin() + r.Get_XRange()){
+				if (fabs(fStep * (float)i +fMinLine) > 100000)
+				{
+					sValue = SG_Get_String(fStep * (float)i +fMinLine);
+				}
+				else
+				{
+					sValue = SG_Get_String(fStep * (float)i + fMinLine, 2, true);
+				}
+				Draw_Text(fX, fY, sValue, 9, PDF_STYLE_TEXT_ALIGN_H_RIGHT);
+				Draw_Line(fX, fY, fX, fY - 10, 1);
+			}
+		}
+    }
+
+	Draw_Line(r.Get_XMin(), HPDF_Page_Height() - r.Get_YMin(),
+			r.Get_XMin(), HPDF_Page_Height() - r.Get_YMax(), 4);
+	Draw_Line(r.Get_XMin(), HPDF_Page_Height() - r.Get_YMax(),
+			r.Get_XMax(), HPDF_Page_Height() - r.Get_YMax(), 4);
+*/
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#else // #ifndef _SAGA_DONOTUSE_HARU
+
+#include "doc_pdf.h"
+
+//---------------------------------------------------------
+const SG_Char * CSG_Doc_PDF::Get_Version(void)											{	return( NULL );	}
+CSG_Doc_PDF::CSG_Doc_PDF(void)															{	m_pPDF	= NULL;	}
+CSG_Doc_PDF::CSG_Doc_PDF(TSG_PDF_Page_Size Size, int Orientation, const SG_Char *Title)	{	m_pPDF	= NULL;	}
+CSG_Doc_PDF::~CSG_Doc_PDF(void)															{}
+void CSG_Doc_PDF::Layout_Set_Box_Space(double Space, bool bPercent)						{}
+void CSG_Doc_PDF::_Layout_Set_Boxes(void)												{}
+void CSG_Doc_PDF::_Layout_Set_Box(int iBox)												{}
+double CSG_Doc_PDF::Get_Page_To_Meter(void)												{	return( 1.0 );	}
+struct _HPDF_Dict_Rec * CSG_Doc_PDF::_Get_Font(TSG_PDF_Font_Type Font)					{	return( NULL );	}
+const CSG_Rect & CSG_Doc_PDF::Layout_Get_Box(const SG_Char *ID)							{	return( m_Size_Margins );	}
+TSG_PDF_Title_Level CSG_Doc_PDF::_Get_Lowest_Outline_Level(void)						{	return( PDF_TITLE_NONE );	}
+bool CSG_Doc_PDF::Open(const SG_Char *Title)											{	return( false );	}
+bool CSG_Doc_PDF::Open(TSG_PDF_Page_Size Size, int Orientation, const SG_Char *Title)	{	return( false );	}
+bool CSG_Doc_PDF::Close(void)															{	return( false );	}
+bool CSG_Doc_PDF::Save(const SG_Char *FileName)											{	return( false );	}
+bool CSG_Doc_PDF::Layout_Add_Box(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const SG_Char *ID)	{	return( false );	}
+bool CSG_Doc_PDF::Layout_Add_Box(const CSG_Rect &Box_Percent, const SG_Char *ID)														{	return( false );	}
+bool CSG_Doc_PDF::_Fit_Rectangle(double &x, double &y, double &dx, double &dy, double XToY_Ratio, bool bShrink)							{	return( false );	}
+bool CSG_Doc_PDF::_Fit_Rectangle(CSG_Rect &r, double XToY_Ratio, bool bShrink)															{	return( false );	}
+bool CSG_Doc_PDF::_Add_Outline_Item(const SG_Char *Title, struct _HPDF_Dict_Rec *pPage, TSG_PDF_Title_Level Level)						{	return( false );	}
+bool CSG_Doc_PDF::Add_Outline_Item(const SG_Char *Title)																				{	return( false );	}
+bool CSG_Doc_PDF::Add_Page(void)																																						{	return( false );	}
+bool CSG_Doc_PDF::Add_Page(TSG_PDF_Page_Size Size, int Orientation)																														{	return( false );	}
+bool CSG_Doc_PDF::Add_Page(double Width, double Height)																																{	return( false );	}
+bool CSG_Doc_PDF::Set_Size_Page(TSG_PDF_Page_Size Size, int Orientation)																													{	return( false );	}
+bool CSG_Doc_PDF::Set_Size_Page(double Width, double Height)																															{	return( false );	}
+bool CSG_Doc_PDF::Add_Page_Title(const SG_Char *Title, TSG_PDF_Title_Level Level, TSG_PDF_Page_Size Size, int Orientation)																		{	return( false );	}
+bool CSG_Doc_PDF::_Set_Style_FillStroke(int Style, int Fill_Color, int Line_Color, int Line_Width)																					{	return( false );	}
+bool CSG_Doc_PDF::Draw_Point(double x, double y, double Width, int Style, int Fill_Color, int Line_Color, int Line_Width)																{	return( false );	}
+bool CSG_Doc_PDF::Draw_Line(double xa, double ya, double xb, double yb, int Width, int Color, int Style)																				{	return( false );	}
+bool CSG_Doc_PDF::Draw_Line(CSG_Points &Points, int Width, int Color, int Style)																									{	return( false );	}
+bool CSG_Doc_PDF::Draw_Rectangle(double xa, double ya, double xb, double yb, int Style, int Fill_Color, int Line_Color, int Line_Width)												{	return( false );	}
+bool CSG_Doc_PDF::Draw_Rectangle(const CSG_Rect &r, int Style, int Fill_Color, int Line_Color, int Line_Width)																		{	return( false );	}
+bool CSG_Doc_PDF::Draw_Polygon(CSG_Points &Points, int Style, int Fill_Color, int Line_Color, int Line_Width)																		{	return( false );	}
+bool CSG_Doc_PDF::Draw_Text(double x, double y, CSG_Strings &Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)												{	return( false );	}
+bool CSG_Doc_PDF::Draw_Text(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)													{	return( false );	}
+bool CSG_Doc_PDF::_Draw_Text(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)													{	return( false );	}
+bool CSG_Doc_PDF::Draw_Image(double x, double y, double dx, double dy, const SG_Char *FileName)																							{	return( false );	}
+bool CSG_Doc_PDF::Draw_Image(const CSG_Rect &r, const SG_Char *FileName)																												{	return( false );	}
+bool CSG_Doc_PDF::Draw_Graticule(const CSG_Rect &r, const CSG_Rect &rWorld, int Size)																								{	return( false );	}
+bool CSG_Doc_PDF::_Draw_Ruler(const CSG_Rect &r, double zMin, double zMax, bool bHorizontal, bool bAscendent, bool bTickAtTop)														{	return( false );	}
+bool CSG_Doc_PDF::_Draw_Table(CSG_Rect r, CSG_Table *pTable, int iRecord, int nRecords, double CellHeight, double HeaderHeightRel)														{	return( false );	}
+bool CSG_Doc_PDF::Draw_Table(const CSG_Rect &r, CSG_Table *pTable, double CellHeight, double HeaderHeightRel)																			{	return( false );	}
+bool CSG_Doc_PDF::Draw_Table(const CSG_Rect &r, CSG_Table *pTable, int nColumns, double CellHeight, double HeaderHeightRel)																{	return( false );	}
+bool CSG_Doc_PDF::_Draw_Shape(CSG_Rect r, CSG_Shape *pShape, double xMin, double yMin, double World2PDF, int Style, int Fill_Color, int Line_Color, int Line_Width, int Point_Width)	{	return( false );	}
+bool CSG_Doc_PDF::Draw_Shape(const CSG_Rect &r, CSG_Shape *pShape, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld)										{	return( false );	}
+bool CSG_Doc_PDF::Draw_Shapes(const CSG_Rect &r, CSG_Shapes *pShapes, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld)									{	return( false );	}
+bool CSG_Doc_PDF::Draw_Grid(const CSG_Rect &r, CSG_Grid *pGrid, const CSG_Colors &Colors, double zMin, double zMax, int Style, CSG_Rect *prWorld)											{	return( false );	}
+void CSG_Doc_PDF::Draw_Curve(CSG_Points &Data, const CSG_Rect &r, int iGraphType)	{}
+
+#endif	// #else // #ifndef _SAGA_DONOTUSE_HARU
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifdef _SAGA_UNICODE
+
+bool CSG_Doc_PDF::Layout_Add_Box(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const char *ID)
+{	return( Layout_Add_Box(xMin_Percent, yMin_Percent, xMax_Percent, yMax_Percent, SG_STR_MBTOSG(ID)) );	}
+
+bool CSG_Doc_PDF::Layout_Add_Box(const CSG_Rect &Box_Percent, const char *ID)
+{	return( Layout_Add_Box(Box_Percent, SG_STR_MBTOSG(ID)) );	}
+
+const CSG_Rect & CSG_Doc_PDF::Layout_Get_Box(const char *ID)
+{	return( Layout_Get_Box(SG_STR_MBTOSG(ID)) );	}
+
+#endif
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/docs/docs_pdf/doc_pdf.h b/src/modules_io/docs/docs_pdf/doc_pdf.h
new file mode 100644
index 0000000..73f3903
--- /dev/null
+++ b/src/modules_io/docs/docs_pdf/doc_pdf.h
@@ -0,0 +1,297 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       docs_pdf                        //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                      doc_pdf.h                        //
+//                                                       //
+//                 Copyright (C) 2005 by                 //
+//              Victor Olaya, Olaf Conrad                //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__doc_pdf_H
+#define HEADER_INCLUDED__doc_pdf_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define PDF_TABLE_CELL_HEIGHT_DEFAULT		20.0
+#define PDF_TABLE_HEADER_HEIGHT				40.0
+
+//---------------------------------------------------------
+#define PDF_PAGE_ORIENTATION_PREVIOUS		-1
+#define PDF_PAGE_ORIENTATION_PORTRAIT		0
+#define PDF_PAGE_ORIENTATION_LANDSCAPE		1
+
+//---------------------------------------------------------
+#define PDF_STYLE_POINT_CIRCLE				0x00000001
+#define PDF_STYLE_POINT_SQUARE				0x00000002
+
+#define PDF_STYLE_LINE_END_BUTT				0x00000004
+#define PDF_STYLE_LINE_END_ROUND			0x00000008
+#define PDF_STYLE_LINE_END_SQUARE			0x00000010
+#define PDF_STYLE_LINE_JOIN_MITER			0x00000020
+#define PDF_STYLE_LINE_JOIN_ROUND			0x00000040
+#define PDF_STYLE_LINE_JOIN_BEVEL			0x00000080
+
+#define PDF_STYLE_POLYGON_STROKE			0x00000100
+#define PDF_STYLE_POLYGON_FILL				0x00000200
+#define PDF_STYLE_POLYGON_FILLSTROKE		(PDF_STYLE_POLYGON_STROKE|PDF_STYLE_POLYGON_FILL)
+
+//---------------------------------------------------------
+#define PDF_STYLE_TEXT_ALIGN_H_LEFT			0x00000001
+#define PDF_STYLE_TEXT_ALIGN_H_CENTER		0x00000002
+#define PDF_STYLE_TEXT_ALIGN_H_RIGHT		0x00000004
+
+#define PDF_STYLE_TEXT_ALIGN_V_TOP			0x00000008
+#define PDF_STYLE_TEXT_ALIGN_V_CENTER		0x00000010
+#define PDF_STYLE_TEXT_ALIGN_V_BOTTOM		0x00000020
+
+#define PDF_STYLE_TEXT_UNDERLINE			0x00000040
+#define PDF_STYLE_TEXT_STROKE				0x00000080
+
+//----------------------------------------------------------
+#define PDF_GRAPH_TYPE_BARS					1
+#define PDF_GRAPH_TYPE_LINES				2
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+typedef enum ESG_PDF_Font_Type
+{
+	PDF_FONT_DEFAULT	= 0,
+	PDF_FONT_Helvetica	= 0,
+	PDF_FONT_Helvetica_Bold,
+	PDF_FONT_Helvetica_Oblique,
+	PDF_FONT_Helvetica_BoldOblique,
+	PDF_FONT_Times_Roman,
+	PDF_FONT_Times_Bold,
+	PDF_FONT_Times_Italic,
+	PDF_FONT_Times_BoldItalic,
+	PDF_FONT_Courier,
+	PDF_FONT_Courier_Bold,
+	PDF_FONT_Courier_Oblique,
+	PDF_FONT_Courier_BoldOblique,
+	PDF_FONT_Symbol,
+	PDF_FONT_ZapfDingbats
+}
+TSG_PDF_Font_Type;
+
+//---------------------------------------------------------
+typedef enum ESG_PDF_Page_Size
+{
+	PDF_PAGE_SIZE_A4		= 1,
+	PDF_PAGE_SIZE_A3,
+	PDF_PAGE_SIZE_PREVIOUS
+}
+TSG_PDF_Page_Size;
+
+//---------------------------------------------------------
+typedef enum ESG_PDF_Title_Level
+{
+	PDF_TITLE	= 0,
+	PDF_TITLE_01,
+	PDF_TITLE_02,
+	PDF_TITLE_NONE
+}
+TSG_PDF_Title_Level;
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class docs_pdf_EXPORT CSG_Doc_PDF
+{
+public:
+	CSG_Doc_PDF(void);
+	CSG_Doc_PDF(TSG_PDF_Page_Size Size, int Orientation = PDF_PAGE_ORIENTATION_PORTRAIT, const SG_Char *Title = NULL);
+	virtual ~CSG_Doc_PDF(void);
+
+	static const SG_Char *		Get_Version					(void);
+
+	bool						Open						(TSG_PDF_Page_Size Size = PDF_PAGE_SIZE_A4, int Orientation = PDF_PAGE_ORIENTATION_PORTRAIT, const SG_Char *Title = NULL);
+	bool						Open						(const SG_Char *Title);
+	bool						Close						(void);
+
+	bool						Save						(const SG_Char *FileName);
+
+	bool						Is_Open						(void)	{	return( m_pPDF != NULL );	}
+	bool						Is_Ready_To_Draw			(void)	{	return( m_pPDF != NULL );	}
+
+	static double				Get_Page_To_Meter			(void);
+
+	bool						Add_Page					(void);
+	bool						Add_Page					(TSG_PDF_Page_Size Size, int Orientation = PDF_PAGE_ORIENTATION_PORTRAIT);
+	bool						Add_Page					(double Width, double Height);
+
+	bool						Add_Page_Title				(const SG_Char *Title, TSG_PDF_Title_Level Level = PDF_TITLE, TSG_PDF_Page_Size Size = PDF_PAGE_SIZE_PREVIOUS, int Orientation = PDF_PAGE_ORIENTATION_PREVIOUS);
+	bool						Add_Outline_Item			(const SG_Char *Title);
+
+	bool						Set_Size_Page				(TSG_PDF_Page_Size Size, int Orientation = PDF_PAGE_ORIENTATION_PORTRAIT);
+	bool						Set_Size_Page				(double Width, double Height);
+	const CSG_Rect &			Get_Size_Page				(void)	{	return( m_Size_Paper );		}
+	const CSG_Rect &			Get_Margins					(void)	{	return( m_Size_Margins );	}
+
+	void						Layout_Set_Box_Space		(double Space, bool bPercent);
+	bool						Layout_Add_Box				(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const SG_Char *ID = NULL);
+	bool						Layout_Add_Box				(const CSG_Rect &Box_Percent, const SG_Char *ID = NULL);
+	const CSG_Rect &			Layout_Get_Box				(int iBox)	{	return( iBox >= 0 && iBox < m_Boxes.Get_Count() ? m_Boxes[iBox] : m_Size_Margins );	}
+	const CSG_Rect &			Layout_Get_Box				(const SG_Char *ID);
+#ifdef _SAGA_UNICODE
+	bool						Layout_Add_Box				(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const char *ID);
+	bool						Layout_Add_Box				(const CSG_Rect &Box_Percent, const char *ID);
+	const CSG_Rect &			Layout_Get_Box				(const char *ID);
+#endif
+
+	bool						Draw_Point					(double x, double y, double Width, int Style = PDF_STYLE_POINT_SQUARE|PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_WHITE, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0);
+	bool						Draw_Line					(double xa, double ya, double xb, double yb	, int Width = 0, int Color = SG_COLOR_BLACK, int Style = 0);
+	bool						Draw_Line					(CSG_Points &Points							, int Width = 0, int Color = SG_COLOR_BLACK, int Style = 0);
+	bool						Draw_Rectangle				(double xa, double ya, double xb, double yb	, int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_WHITE, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0);
+	bool						Draw_Rectangle				(const CSG_Rect &r							, int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_WHITE, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0);
+	bool						Draw_Polygon				(CSG_Points &Points							, int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0);
+	bool						Draw_Text					(double x, double y, const SG_Char   *Text, int Size, int Style = PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP, double Angle = 0.0, int Color = SG_COLOR_BLACK, TSG_PDF_Font_Type Font = PDF_FONT_DEFAULT);
+	bool						Draw_Text					(double x, double y, CSG_Strings  &Text, int Size, int Style = PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP, double Angle = 0.0, int Color = SG_COLOR_BLACK, TSG_PDF_Font_Type Font = PDF_FONT_DEFAULT);
+	bool						Draw_Image					(double x, double y, double dx, double dy	, const SG_Char *FileName);
+	bool						Draw_Image					(const CSG_Rect &r							, const SG_Char *FileName);
+
+	bool						Draw_Graticule				(const CSG_Rect &r, const CSG_Rect &rWorld, int Size = 10);
+	void						Draw_Curve					(CSG_Points &Data, const CSG_Rect &r, int iGraphType);
+
+	bool						Draw_Table					(const CSG_Rect &r, CSG_Table *pTable					, double CellHeight = 0.0, double HeaderHeightRel = 1.5);
+	bool						Draw_Table					(const CSG_Rect &r, CSG_Table *pTable, int nColumns	, double CellHeight = 0.0, double HeaderHeightRel = 1.5);
+
+	bool						Draw_Shape					(const CSG_Rect &r, CSG_Shape  *pShape , int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0, CSG_Rect *prWorld = NULL);
+	bool						Draw_Shapes					(const CSG_Rect &r, CSG_Shapes *pShapes, int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0, CSG_Rect *prWorld = NULL);
+
+	bool						Draw_Grid					(const CSG_Rect &r, CSG_Grid *pGrid, const CSG_Colors &Colors, double zMin = 0.0, double zMax = 0.0, int Style = 0, CSG_Rect *prWorld = NULL);
+
+
+protected:
+
+	bool						_Fit_Rectangle				(double &x, double &y, double &dx, double &dy, double XToY_Ratio, bool bShrink);
+	bool						_Fit_Rectangle				(CSG_Rect &r, double XToY_Ratio, bool bShrink);
+
+	bool						_Add_Outline_Item			(const SG_Char *Title, struct _HPDF_Dict_Rec *pPage, TSG_PDF_Title_Level Level = PDF_TITLE);
+
+	bool						_Draw_Ruler					(const CSG_Rect &r, double zMin, double zMax, bool bHorizontal, bool bAscendent, bool bTickAtTop);
+	bool						_Draw_Text					(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font);
+	bool						_Draw_Table					(CSG_Rect r, CSG_Table *pTable, int iRecord, int nRecords, double CellHeight, double HeaderHeightRel);
+	bool						_Draw_Shape					(CSG_Rect r, CSG_Shape *pShape, double xMin, double yMin, double World2PDF, int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0, int Point_Width = 5);
+
+	TSG_PDF_Title_Level			_Get_Lowest_Outline_Level	(void);
+
+
+private:
+
+	bool						m_Boxes_Space_bPercent;
+
+	int							m_nPages;
+
+	double						m_Boxes_Space;
+
+	CSG_Rect					m_Size_Paper, m_Size_Margins;
+
+	CSG_Rects					m_Boxes_Percent, m_Boxes;
+
+	CSG_Strings					m_Boxes_ID;
+
+	struct _HPDF_Doc_Rec		*m_pPDF;
+
+	struct _HPDF_Dict_Rec		*m_pPage;
+
+	struct _HPDF_Dict_Rec		*m_pOutline_Last_Level_0, *m_pOutline_Last_Level_1, *m_pOutline_Last_Level_2;
+
+
+	struct _HPDF_Dict_Rec *		_Get_Font					(TSG_PDF_Font_Type Font);
+
+	void						_Layout_Set_Boxes			(void);
+	void						_Layout_Set_Box				(int iBox);
+
+	bool						_Set_Style_FillStroke		(int Style, int Fill_Color, int Line_Color, int Line_Width);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__doc_pdf_H
diff --git a/src/modules_io/esri_e00/Makefile.in b/src/modules_io/esri_e00/Makefile.in
index fbbc200..5783c2d 100644
--- a/src/modules_io/esri_e00/Makefile.in
+++ b/src/modules_io/esri_e00/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_io/esri_e00
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_io/esri_e00/io_esri_e00/Makefile.in b/src/modules_io/esri_e00/io_esri_e00/Makefile.in
index 8529b66..33e5e8a 100644
--- a/src/modules_io/esri_e00/io_esri_e00/Makefile.in
+++ b/src/modules_io/esri_e00/io_esri_e00/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_io/esri_e00/io_esri_e00
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -106,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_io/gdal/Makefile.in b/src/modules_io/gdal/Makefile.in
index a6a3e7d..0f7530c 100644
--- a/src/modules_io/gdal/Makefile.in
+++ b/src/modules_io/gdal/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_io/gdal
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_io/gdal/io_gdal/MLB_Interface.h b/src/modules_io/gdal/io_gdal/MLB_Interface.h
index f6eb168..498e644 100644
--- a/src/modules_io/gdal/io_gdal/MLB_Interface.h
+++ b/src/modules_io/gdal/io_gdal/MLB_Interface.h
@@ -1,78 +1,79 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                   Library Grid_IO_GDAL                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    MLB_Interface.h                    //
-//                                                       //
-//                 Copyright (C) 2003 by                 //
-//                        Author                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     author at email.de                        //
-//                                                       //
-//    contact:    Author                                 //
-//                Sesame Street. 7                       //
-//                12345 Metropolis                       //
-//                Nirwana                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//				Include the SAGA-API here				 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__io_grid_gdal_H
-#define HEADER_INCLUDED__io_grid_gdal_H
-
-//---------------------------------------------------------
-#include <saga_api/saga_api.h>
-
-//---------------------------------------------------------
-#ifdef io_grid_gdal_EXPORTS
-	#define	io_grid_gdal_EXPORT	_SAGA_DLL_EXPORT
-#else
-	#define	io_grid_gdal_EXPORT	_SAGA_DLL_IMPORT
-#endif
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__io_grid_gdal_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   MLB_Interface.h                     //
+//                                                       //
+//            Copyright (C) 2007 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Include the SAGA-API here				 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__io_gdal_H
+#define HEADER_INCLUDED__io_gdal_H
+
+//---------------------------------------------------------
+#include <saga_api/saga_api.h>
+
+//---------------------------------------------------------
+#ifdef io_gdal_EXPORTS
+	#define	io_gdal_EXPORT	_SAGA_DLL_EXPORT
+#else
+	#define	io_gdal_EXPORT	_SAGA_DLL_IMPORT
+#endif
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__io_gdal_H
diff --git a/src/modules_io/gdal/io_gdal/Makefile.in b/src/modules_io/gdal/io_gdal/Makefile.in
index 770cd2c..ebd3549 100644
--- a/src/modules_io/gdal/io_gdal/Makefile.in
+++ b/src/modules_io/gdal/io_gdal/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_io/gdal/io_gdal
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -106,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_io/gdal/io_gdal/gdal_driver.cpp b/src/modules_io/gdal/io_gdal/gdal_driver.cpp
index 12671a0..e11ff95 100644
--- a/src/modules_io/gdal/io_gdal/gdal_driver.cpp
+++ b/src/modules_io/gdal/io_gdal/gdal_driver.cpp
@@ -1,346 +1,552 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                   gdal_driver.cpp                     //
-//                                                       //
-//            Copyright (C) 2007 by O. Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "gdal_driver.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CGDAL_Driver	g_GDAL_Driver;
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CGDAL_Driver::CGDAL_Driver(void)
-{
-	GDALAllRegister();
-
-	pManager	= GetGDALDriverManager();
-
-	//-----------------------------------------------------
-	for(int i=0; i<Get_Count(); i++)
-    {
-    }
-}
-
-//---------------------------------------------------------
-CGDAL_Driver::~CGDAL_Driver(void)
-{
-	GDALDestroyDriverManager();	
-}
-
-//---------------------------------------------------------
-TSG_Data_Type CGDAL_Driver::Get_Grid_Type(GDALDataType Type)
-{
-	switch( Type )
-	{
-	case GDT_Byte: 		return( SG_DATATYPE_Byte );			// Eight bit unsigned integer
-	case GDT_UInt16:	return( SG_DATATYPE_Word );			// Sixteen bit unsigned integer
-	case GDT_Int16:		return( SG_DATATYPE_Short );		// Sixteen bit signed integer
-	case GDT_UInt32:	return( SG_DATATYPE_DWord );		// Thirty two bit unsigned integer
-	case GDT_Int32: 	return( SG_DATATYPE_Int );			// Thirty two bit signed integer
-	case GDT_Float32: 	return( SG_DATATYPE_Float );		// Thirty two bit floating point
-	case GDT_Float64: 	return( SG_DATATYPE_Double );		// Sixty four bit floating point
-
-	case GDT_CInt16: 	return( SG_DATATYPE_Undefined );	// Complex Int16
-	case GDT_CInt32: 	return( SG_DATATYPE_Undefined );	// Complex Int32
-	case GDT_CFloat32: 	return( SG_DATATYPE_Undefined );	// Complex Float32
-	case GDT_CFloat64: 	return( SG_DATATYPE_Undefined );	// Complex Float64
-
-	default:			return( SG_DATATYPE_Undefined );
-	}
-}
-
-//---------------------------------------------------------
-GDALDataType CGDAL_Driver::Get_GDAL_Type(TSG_Data_Type Type)
-{
-	switch( Type )
-	{
-	case SG_DATATYPE_Bit: 		return( GDT_Byte );			// Eight bit unsigned integer
-	case SG_DATATYPE_Byte: 		return( GDT_Byte );			// Eight bit unsigned integer
-	case SG_DATATYPE_Char: 		return( GDT_Byte );			// Eight bit unsigned integer
-	case SG_DATATYPE_Word:		return( GDT_UInt16 );		// Sixteen bit unsigned integer
-	case SG_DATATYPE_Short:		return( GDT_Int16 );		// Sixteen bit signed integer
-	case SG_DATATYPE_DWord:		return( GDT_UInt32 );		// Thirty two bit unsigned integer
-	case SG_DATATYPE_Int: 		return( GDT_Int32 );		// Thirty two bit signed integer
-	case SG_DATATYPE_Float: 	return( GDT_Float32 );		// Thirty two bit floating point
-	case SG_DATATYPE_Double: 	return( GDT_Float64 );		// Sixty four bit floating point
-
-	default:					return( GDT_Float64 );
-	}
-}
-
-//---------------------------------------------------------
-GDALDataType CGDAL_Driver::Get_GDAL_Type(CSG_Parameter_Grid_List *pGrids)
-{
-	TSG_Data_Type	Type	= SG_DATATYPE_Byte;
-
-	if( pGrids )
-	{
-		for(int i=0; i<pGrids->Get_Count(); i++)
-		{
-			if( SG_Data_Type_Get_Size(Type) <= SG_Data_Type_Get_Size(pGrids->asGrid(i)->Get_Type()) )
-			{
-				Type	= pGrids->asGrid(i)->Get_Type();
-			}
-		}
-	}
-
-	return( Get_GDAL_Type(Type) );
-}
-
-//---------------------------------------------------------
-bool CGDAL_Driver::Set_Transform(GDALDataset *pDataset, CSG_Grid_System *pSystem)
-{
-	if( pDataset && pSystem )
-	{
-		double	Transform[6]	=
-		{
-			pSystem->Get_XMin() - 0.5 * pSystem->Get_Cellsize(), pSystem->Get_Cellsize(), 0.0,
-			pSystem->Get_YMax() + 0.5 * pSystem->Get_Cellsize(), 0.0, -pSystem->Get_Cellsize()
-		};
-
-		pDataset->SetGeoTransform(Transform);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CGDAL_System::CGDAL_System(void)
-{
-	m_pDataSet	= NULL;
-
-	m_TF_A.Create(2);
-	m_TF_B.Create(2, 2);
-}
-
-//---------------------------------------------------------
-CGDAL_System::CGDAL_System(const CSG_String &File_Name, int ioAccess)
-{
-	m_pDataSet	= NULL;
-
-	m_TF_A.Create(2);
-	m_TF_B.Create(2, 2);
-
-	Create(File_Name, ioAccess);
-}
-
-//---------------------------------------------------------
-CGDAL_System::~CGDAL_System(void)
-{
-	Destroy();
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CGDAL_System::Create(const CSG_String &File_Name, int ioAccess)
-{
-	Destroy();
-
-	//-----------------------------------------------------
-	if( ioAccess == IO_READ )
-	{
-		if( (m_pDataSet = (GDALDataset *)GDALOpen(SG_STR_SGTOMB(File_Name), GA_ReadOnly)) != NULL )
-		{
-			double	Transform[6];
-
-			m_Access	= IO_READ;
-
-			m_NX		= m_pDataSet->GetRasterXSize();
-			m_NY		= m_pDataSet->GetRasterYSize();
-
-			if( m_pDataSet->GetGeoTransform(Transform) != CE_None )
-			{
-				m_bTransform	= false;
-				m_Cellsize		= 1.0;
-				m_xMin			= 0.5;
-				m_yMin			= 0.5;
-			}
-			else if( Transform[1] == -Transform[5] && Transform[2] == 0.0 && Transform[4] == 0.0 )	// nothing to transform
-			{
-				m_bTransform	= false;
-				m_Cellsize		= Transform[1];								// pixel width (== pixel height)
-				m_xMin			= Transform[0] + m_Cellsize *  0.5;			// center (x) of left edge pixels
-				m_yMin			= Transform[3] + m_Cellsize * (0.5 - m_NY);	// center (y) of lower edge pixels
-			}
-			else
-			{
-				m_bTransform	= true;
-				m_Cellsize		= 1.0;
-				m_xMin			= 0.5;
-				m_yMin			= 0.5;
-			}
-
-			m_TF_A[0]		= Transform[0];
-			m_TF_A[1]		= Transform[3];
-			m_TF_B[0][0]	= Transform[1];
-			m_TF_B[0][1]	= Transform[2];
-			m_TF_B[1][0]	= Transform[4];
-			m_TF_B[1][1]	= Transform[5];
-			m_TF_BInv		= m_TF_B.Get_Inverse();
-
-			return( true );
-		}
-	}
-
-	//-----------------------------------------------------
-	else if( ioAccess == IO_WRITE )
-	{
-	}
-
-	Destroy();
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CGDAL_System::Destroy(void)
-{
-	if( m_pDataSet )
-	{
-		GDALClose(m_pDataSet);
-
-		m_pDataSet	= NULL;
-	}
-
-	m_Access	= IO_CLOSED;
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Grid * CGDAL_System::Read_Band(int i)
-{
-	GDALRasterBand	*pBand;
-
-	if( is_Reading() && (pBand = m_pDataSet->GetRasterBand(i + 1)) != NULL )
-	{
-		CSG_Grid	*pGrid	= SG_Create_Grid(g_GDAL_Driver.Get_Grid_Type(pBand->GetRasterDataType()),
-			Get_NX(), Get_NY(), Get_Cellsize(), Get_xMin(), Get_yMin()
-		);
-
-		pGrid->Set_Name			(SG_STR_MBTOSG(pBand->GetMetadataItem(GDAL_DMD_LONGNAME)));
-		pGrid->Set_Description	(SG_STR_MBTOSG(pBand->GetMetadataItem(GDAL_DMD_LONGNAME)));
-		pGrid->Set_Unit			(SG_STR_MBTOSG(pBand->GetUnitType()));
-		pGrid->Set_NoData_Value	(pBand->GetNoDataValue());
-		pGrid->Set_ZFactor		(pBand->GetScale());
-
-		//-------------------------------------------------
-		double		zMin, *zLine;
-
-		zLine	= (double *)SG_Malloc(Get_NX() * sizeof(double));
-		zMin	= pBand->GetOffset();
-
-		for(int y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
-		{
-			int	yy	= m_bTransform ? y : Get_NY() - 1 - y;
-
-			if( pBand->RasterIO(GF_Read, 0, y, Get_NX(), 1, zLine, Get_NX(), 1, GDT_Float64, 0, 0) == CE_None )
-			{
-				for(int x=0; x<Get_NX(); x++)
-				{
-				//	double	NaN	= 0.0;	NaN	= -1.0 / NaN;	if( NaN == zLine[x] )	pGrid->Set_NoData(x, yy); else
-
-					pGrid->Set_Value (x, yy, zMin + zLine[x]);
-				}
-			}
-		}
-
-		SG_Free(zLine);
-
-		return( pGrid );
-	}
-
-	return( NULL );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   gdal_driver.cpp                     //
+//                                                       //
+//            Copyright (C) 2007 by O. Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "gdal_driver.h"
+
+#include <gdal_priv.h>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_GDAL_Drivers	gSG_GDAL_Drivers;
+
+const CSG_GDAL_Drivers &	SG_Get_GDAL_Drivers	(void)
+{
+	return( gSG_GDAL_Drivers );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_GDAL_Drivers::CSG_GDAL_Drivers(void)
+{
+	GDALAllRegister();
+
+	m_pDrivers	= GetGDALDriverManager();
+}
+
+//---------------------------------------------------------
+CSG_GDAL_Drivers::~CSG_GDAL_Drivers(void)
+{
+	GDALDestroyDriverManager();	
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CSG_GDAL_Drivers::Get_Count(void) const
+{
+	return( m_pDrivers->GetDriverCount() );
+}
+
+//---------------------------------------------------------
+GDALDriver * CSG_GDAL_Drivers::Get_Driver(const CSG_String &Name) const
+{
+	return( (GDALDriver *)GDALGetDriverByName(SG_STR_SGTOMB(Name)) );
+}
+
+//---------------------------------------------------------
+GDALDriver * CSG_GDAL_Drivers::Get_Driver(int Index) const
+{
+	return( (GDALDriver *)GDALGetDriver(Index) );
+}
+
+//---------------------------------------------------------
+CSG_String CSG_GDAL_Drivers::Get_Name(int Index) const
+{
+	return( SG_STR_MBTOSG(Get_Driver(Index)->GetMetadataItem(GDAL_DMD_LONGNAME)) );
+}
+
+//---------------------------------------------------------
+CSG_String CSG_GDAL_Drivers::Get_Description(int Index) const
+{
+	return( SG_STR_MBTOSG(Get_Driver(Index)->GetDescription()) );
+}
+
+//---------------------------------------------------------
+CSG_String CSG_GDAL_Drivers::Get_Extension(int Index) const
+{
+	return( SG_STR_MBTOSG(Get_Driver(Index)->GetMetadataItem(GDAL_DMD_EXTENSION)) );
+}
+
+//---------------------------------------------------------
+bool CSG_GDAL_Drivers::Can_Read(int Index) const
+{
+	return( Index >= 0 && Index < Get_Count() );	// ? CSLFetchBoolean(Get_Driver(Index)->GetMetadata(), GDAL_DCAP_CREATE, false) != 0 : false );
+}
+
+//---------------------------------------------------------
+bool CSG_GDAL_Drivers::Can_Write(int Index) const
+{
+	return( Index >= 0 && Index < Get_Count() ? CSLFetchBoolean(Get_Driver(Index)->GetMetadata(), GDAL_DCAP_CREATE, false) != 0 : false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CSG_GDAL_Drivers::Get_GDAL_Type(TSG_Data_Type Type)
+{
+	switch( Type )
+	{
+	case SG_DATATYPE_Bit: 		return( GDT_Byte );			// Eight bit unsigned integer
+	case SG_DATATYPE_Byte: 		return( GDT_Byte );			// Eight bit unsigned integer
+	case SG_DATATYPE_Char: 		return( GDT_Byte );			// Eight bit unsigned integer
+	case SG_DATATYPE_Word:		return( GDT_UInt16 );		// Sixteen bit unsigned integer
+	case SG_DATATYPE_Short:		return( GDT_Int16 );		// Sixteen bit signed integer
+	case SG_DATATYPE_DWord:		return( GDT_UInt32 );		// Thirty two bit unsigned integer
+	case SG_DATATYPE_Int: 		return( GDT_Int32 );		// Thirty two bit signed integer
+	case SG_DATATYPE_Float: 	return( GDT_Float32 );		// Thirty two bit floating point
+	case SG_DATATYPE_Double: 	return( GDT_Float64 );		// Sixty four bit floating point
+
+	default:					return( GDT_Float64 );
+	}
+}
+
+//---------------------------------------------------------
+TSG_Data_Type CSG_GDAL_Drivers::Get_SAGA_Type(int Type)
+{
+	switch( Type )
+	{
+	case GDT_Byte: 		return( SG_DATATYPE_Byte );			// Eight bit unsigned integer
+	case GDT_UInt16:	return( SG_DATATYPE_Word );			// Sixteen bit unsigned integer
+	case GDT_Int16:		return( SG_DATATYPE_Short );		// Sixteen bit signed integer
+	case GDT_UInt32:	return( SG_DATATYPE_DWord );		// Thirty two bit unsigned integer
+	case GDT_Int32: 	return( SG_DATATYPE_Int );			// Thirty two bit signed integer
+	case GDT_Float32: 	return( SG_DATATYPE_Float );		// Thirty two bit floating point
+	case GDT_Float64: 	return( SG_DATATYPE_Double );		// Sixty four bit floating point
+
+	case GDT_CInt16: 	return( SG_DATATYPE_Undefined );	// Complex Int16
+	case GDT_CInt32: 	return( SG_DATATYPE_Undefined );	// Complex Int32
+	case GDT_CFloat32: 	return( SG_DATATYPE_Undefined );	// Complex Float32
+	case GDT_CFloat64: 	return( SG_DATATYPE_Undefined );	// Complex Float64
+
+	default:			return( SG_DATATYPE_Undefined );
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_GDAL_DataSet::CSG_GDAL_DataSet(void)
+{
+	m_pDataSet	= NULL;
+
+	m_TF_A.Create(2);
+	m_TF_B.Create(2, 2);
+}
+
+//---------------------------------------------------------
+CSG_GDAL_DataSet::CSG_GDAL_DataSet(const CSG_String &File_Name)
+{
+	m_pDataSet	= NULL;
+
+	m_TF_A.Create(2);
+	m_TF_B.Create(2, 2);
+
+	Open_Read(File_Name);
+}
+
+//---------------------------------------------------------
+CSG_GDAL_DataSet::~CSG_GDAL_DataSet(void)
+{
+	Close();
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_GDAL_DataSet::Open_Read(const CSG_String &File_Name)
+{
+	Close();
+
+	if( (m_pDataSet = (GDALDataset *)GDALOpen(SG_STR_SGTOMB(File_Name), GA_ReadOnly)) == NULL )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	double	Transform[6];
+
+	m_Access	= SG_GDAL_IO_READ;
+
+	m_NX		= m_pDataSet->GetRasterXSize();
+	m_NY		= m_pDataSet->GetRasterYSize();
+
+	if( m_pDataSet->GetGeoTransform(Transform) != CE_None )
+	{
+		m_bTransform	= false;
+		m_Cellsize		= 1.0;
+		m_xMin			= 0.5;
+		m_yMin			= 0.5;
+	}
+	else if( Transform[1] == -Transform[5] && Transform[2] == 0.0 && Transform[4] == 0.0 )	// nothing to transform
+	{
+		m_bTransform	= false;
+		m_Cellsize		= Transform[1];								// pixel width (== pixel height)
+		m_xMin			= Transform[0] + m_Cellsize *  0.5;			// center (x) of left edge pixels
+		m_yMin			= Transform[3] + m_Cellsize * (0.5 - m_NY);	// center (y) of lower edge pixels
+	}
+	else
+	{
+		m_bTransform	= true;
+		m_Cellsize		= 1.0;
+		m_xMin			= 0.5;
+		m_yMin			= 0.5;
+	}
+
+	m_TF_A[0]		= Transform[0];
+	m_TF_A[1]		= Transform[3];
+	m_TF_B[0][0]	= Transform[1];
+	m_TF_B[0][1]	= Transform[2];
+	m_TF_B[1][0]	= Transform[4];
+	m_TF_B[1][1]	= Transform[5];
+	m_TF_BInv		= m_TF_B.Get_Inverse();
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_GDAL_DataSet::Open_Write(const CSG_String &File_Name, const CSG_String &Driver, TSG_Data_Type Type, int NBands, const CSG_Grid_System &System, const CSG_Projection &Projection)
+{
+	char		**pOptions	= NULL;
+	GDALDriver	*pDriver;
+
+	Close();
+
+	//--------------------------------------------------------
+	if( (pDriver = gSG_GDAL_Drivers.Get_Driver(SG_STR_SGTOMB(Driver))) == NULL )
+	{
+		SG_UI_Msg_Add_Error(CSG_String::Format(SG_T("%s: %s"), _TL("driver not found."), Driver.c_str()));
+
+		return( false );
+	}
+
+	if( CSLFetchBoolean(pDriver->GetMetadata(), GDAL_DCAP_CREATE, false) == false )
+	{
+		SG_UI_Msg_Add_Error(_TL("Driver does not support file creation."));
+
+		return( false );
+	}
+
+	if( (m_pDataSet = pDriver->Create(SG_STR_SGTOMB(File_Name), System.Get_NX(), System.Get_NY(), NBands, (GDALDataType)gSG_GDAL_Drivers.Get_GDAL_Type(Type), pOptions)) == NULL )
+	{
+		SG_UI_Msg_Add_Error(_TL("Could not create dataset."));
+
+		return( false );
+	}
+
+	//--------------------------------------------------------
+	m_Access	= SG_GDAL_IO_WRITE;
+
+	if( Projection.is_Okay() )
+	{
+		m_pDataSet->SetProjection(SG_STR_SGTOMB(Projection.Get_WKT()));
+	}
+
+	double	Transform[6]	=
+	{
+		System.Get_XMin() - 0.5 * System.Get_Cellsize(), System.Get_Cellsize(), 0.0,
+		System.Get_YMax() + 0.5 * System.Get_Cellsize(), 0.0, -System.Get_Cellsize()
+	};
+
+	m_pDataSet->SetGeoTransform(Transform);
+
+	m_NX			= m_pDataSet->GetRasterXSize();
+	m_NY			= m_pDataSet->GetRasterYSize();
+
+	m_bTransform	= false;
+	m_Cellsize		= 1.0;
+	m_xMin			= 0.5;
+	m_yMin			= 0.5;
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_GDAL_DataSet::Close(void)
+{
+	if( m_pDataSet )
+	{
+		GDALClose(m_pDataSet);
+
+		m_pDataSet	= NULL;
+	}
+
+	m_Access	= SG_GDAL_IO_CLOSED;
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+GDALDriver * CSG_GDAL_DataSet::Get_Driver(void)	const
+{
+	return( m_pDataSet ? m_pDataSet->GetDriver() : NULL );
+}
+
+//---------------------------------------------------------
+const char * CSG_GDAL_DataSet::Get_Projection(void)	const
+{
+	return( m_pDataSet && m_pDataSet->GetProjectionRef() ? m_pDataSet->GetProjectionRef() : "" );
+}
+
+//---------------------------------------------------------
+const char * CSG_GDAL_DataSet::Get_Name(void)	const
+{
+	return( m_pDataSet ? m_pDataSet->GetMetadataItem(GDAL_DMD_LONGNAME) : "" );
+}
+
+//---------------------------------------------------------
+const char * CSG_GDAL_DataSet::Get_Description(void)	const
+{
+	return( m_pDataSet ? m_pDataSet->GetDescription() : "" );
+}
+
+//---------------------------------------------------------
+const char ** CSG_GDAL_DataSet::Get_MetaData(const char *pszDomain)	const
+{
+	return( m_pDataSet ? (const char **)m_pDataSet->GetMetadata(pszDomain) : NULL );
+}
+
+//---------------------------------------------------------
+const char * CSG_GDAL_DataSet::Get_MetaData_Item(const char *pszName, const char *pszDomain)	const
+{
+	return( m_pDataSet ? m_pDataSet->GetMetadataItem(pszName, pszDomain) : "" );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CSG_GDAL_DataSet::Get_Count(void)	const
+{
+	return( m_pDataSet ? m_pDataSet->GetRasterCount() : 0 );
+}
+
+//---------------------------------------------------------
+CSG_Grid * CSG_GDAL_DataSet::Read(int i)
+{
+	GDALRasterBand	*pBand;
+
+	if( is_Reading() && (pBand = m_pDataSet->GetRasterBand(i + 1)) != NULL )
+	{
+		CSG_String	Name, Description;
+
+		CSG_Grid	*pGrid	= SG_Create_Grid(gSG_GDAL_Drivers.Get_SAGA_Type(pBand->GetRasterDataType()),
+			Get_NX(), Get_NY(), Get_Cellsize(), Get_xMin(), Get_yMin()
+		);
+
+		//-------------------------------------------------
+		char	**pMetaData	= pBand->GetMetadata() + 0;
+
+		if( pMetaData )
+		{
+			while( *pMetaData )
+			{
+				CSG_String	s(*pMetaData);
+
+				pGrid->Get_MetaData().Add_Child(s.BeforeFirst(SG_T('=')), s.AfterFirst(SG_T('=')));
+				Description	+= s + SG_T("\n");
+
+				pMetaData++;
+			}
+		}
+
+		//-------------------------------------------------
+		const char	*s;
+
+		if( (s = pBand->GetMetadataItem("GRIB_COMMENT")) != NULL && *s )
+		{
+			Name	= SG_STR_MBTOSG(s);
+		}
+		else if( (s = pBand->GetMetadataItem(GDAL_DMD_LONGNAME)) != NULL && *s )
+		{
+			Name	= SG_STR_MBTOSG(s);
+		}
+		else
+		{
+			Name.Printf(SG_T("%d"), i + 1);
+		}
+
+		//-------------------------------------------------
+		pGrid->Set_Name			(Name);
+		pGrid->Set_Description	(Description);
+		pGrid->Set_Unit			(SG_STR_MBTOSG(pBand->GetUnitType()));
+		pGrid->Set_NoData_Value	(pBand->GetNoDataValue());
+		pGrid->Set_ZFactor		(pBand->GetScale());
+
+		pGrid->Get_Projection().Create(Get_Projection(), SG_PROJ_FMT_WKT);
+
+		//-------------------------------------------------
+		double		zMin, zScale, *zLine;
+
+		zMin	= pBand->GetOffset();
+		zScale	= pBand->GetScale();
+		zLine	= (double *)SG_Malloc(Get_NX() * sizeof(double));
+
+		for(int y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
+		{
+			int	yy	= m_bTransform ? y : Get_NY() - 1 - y;
+
+			if( pBand->RasterIO(GF_Read, 0, y, Get_NX(), 1, zLine, Get_NX(), 1, GDT_Float64, 0, 0) == CE_None )
+			{
+				for(int x=0; x<Get_NX(); x++)
+				{
+				//	double	NaN	= 0.0;	NaN	= -1.0 / NaN;	if( NaN == zLine[x] )	pGrid->Set_NoData(x, yy); else
+					pGrid->Set_Value (x, yy, zMin + zScale * zLine[x]);
+				}
+			}
+		}
+
+		SG_Free(zLine);
+
+		return( pGrid );
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+bool CSG_GDAL_DataSet::Write(int i, CSG_Grid *pGrid)
+{
+	if( !m_pDataSet || !pGrid || pGrid->Get_NX() != Get_NX() || pGrid->Get_NY() != Get_NY() || i < 0 || i >= Get_Count() )
+	{
+		return( false );
+	}
+
+	GDALRasterBand	*pBand	= m_pDataSet->GetRasterBand(i + 1);
+
+	double	*zLine	= (double *)SG_Malloc(Get_NX() * sizeof(double));
+
+	for(int y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
+	{
+		for(int x=0; x<Get_NX(); x++)
+		{
+			zLine[x]	= pGrid->asDouble(x, Get_NY() - 1 - y);
+		}
+
+		pBand->RasterIO(GF_Write, 0, y, Get_NX(), 1, zLine, Get_NX(), 1, GDT_Float64, 0, 0);
+	}
+
+	SG_Free(zLine);
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+TSG_Data_Type	SG_Get_Grid_Type	(CSG_Parameter_Grid_List *pGrids)
+{
+	TSG_Data_Type	Type	= SG_DATATYPE_Byte;
+
+	if( pGrids )
+	{
+		for(int i=0; i<pGrids->Get_Count(); i++)
+		{
+			if( SG_Data_Type_Get_Size(Type) <= SG_Data_Type_Get_Size(pGrids->asGrid(i)->Get_Type()) )
+			{
+				Type	= pGrids->asGrid(i)->Get_Type();
+			}
+		}
+	}
+
+	return( Type );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/gdal/io_gdal/gdal_driver.h b/src/modules_io/gdal/io_gdal/gdal_driver.h
index 7b49ba7..3118742 100644
--- a/src/modules_io/gdal/io_gdal/gdal_driver.h
+++ b/src/modules_io/gdal/io_gdal/gdal_driver.h
@@ -1,196 +1,216 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    gdal_driver.h                      //
-//                                                       //
-//            Copyright (C) 2007 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__gdal_driver_H
-#define HEADER_INCLUDED__gdal_driver_H
-
-//---------------------------------------------------------
-#include "MLB_Interface.h"
-
-#include <gdal_priv.h>
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CGDAL_Driver
-{
-public:
-	CGDAL_Driver(void);
-	virtual ~CGDAL_Driver(void);
-
-	int						Get_Count		(void)				{	return( pManager->GetDriverCount() );	}
-	const char *			Get_Name		(int Index)			{	return( Get_Driver(Index)->GetMetadataItem(GDAL_DMD_LONGNAME) );	}
-	const char *			Get_Description	(int Index)			{	return( Get_Driver(Index)->GetDescription() );	}
-	GDALDriver *			Get_Driver		(int Index)			{	return( (GDALDriver *)GDALGetDriver(Index) );	}
-	GDALDriver *			Get_Driver		(const char *Name)	{	return( (GDALDriver *)GDALGetDriverByName(Name) );	}
-
-
-	static TSG_Data_Type	Get_Grid_Type	(GDALDataType  Type);
-	static GDALDataType		Get_GDAL_Type	(TSG_Data_Type Type);
-	static GDALDataType		Get_GDAL_Type	(CSG_Parameter_Grid_List *pGrids);
-	static bool				Set_Transform	(GDALDataset *pDataset, CSG_Grid_System *pSystem);
-
-
-private:
-
-	GDALDriverManager		*pManager;
-
-};
-
-//---------------------------------------------------------
-#define IO_CLOSED		0x00
-#define IO_READ		0x01
-#define IO_WRITE		0x02
-#define IO_READWRITE	(IO_READ|IO_WRITE)
-
-//---------------------------------------------------------
-class CGDAL_System
-{
-public:
-	CGDAL_System(void);
-	CGDAL_System(const CSG_String &File_Name, int ioAccess = IO_READ);
-	virtual ~CGDAL_System(void);
-
-	bool					Create			(const CSG_String &File_Name, int ioAccess = IO_READ);
-	bool					Destroy			(void);
-
-	bool					is_Okay			(void)	const	{	return( m_pDataSet != NULL );	}
-	bool					is_Reading		(void)	const	{	return( m_pDataSet != NULL && m_Access & IO_READ );	 }
-	bool					is_Writing		(void)	const	{	return( m_pDataSet != NULL && m_Access & IO_WRITE );	}
-
-	int						Get_NX			(void)	const	{	return( m_NX );			}
-	int						Get_NY			(void)	const	{	return( m_NY );			}
-	double					Get_xMin		(void)	const	{	return( m_xMin );		}
-	double					Get_yMin		(void)	const	{	return( m_yMin );		}
-	double					Get_Cellsize	(void)	const	{	return( m_Cellsize );	}
-
-	bool					Needs_Transform	(void)	const	{	return( m_bTransform );	}
-	void					Get_Transform	(CSG_Vector &A, CSG_Matrix &B)	const	{	A	= m_TF_A;	B	= m_TF_B;	}
-
-	GDALDriver *			Get_Driver		(void)	const	{	return( m_pDataSet ? m_pDataSet->GetDriver() : NULL );	}
-	const char *			Get_Projection	(void)	const	{	return( m_pDataSet && m_pDataSet->GetProjectionRef() ? m_pDataSet->GetProjectionRef() : "" );	}
-
-	int						Get_Count		(void)	const	{	return( m_pDataSet ? m_pDataSet->GetRasterCount() : 0    );	}
-	CSG_Grid *				Read_Band		(int i);
-
-	GDALDataset *			Get_DataSet		(void)	{	return( m_pDataSet );	}
-
-
-private:
-
-	bool					m_bTransform;
-
-	int						m_Access, m_NX, m_NY;
-
-	double					m_xMin, m_yMin, m_Cellsize;
-
-	CSG_Vector				m_TF_A;
-
-	CSG_Matrix				m_TF_B, m_TF_BInv;
-
-	GDALDataset				*m_pDataSet;
-
-
-public:
-
-	bool					to_World		(double x, double y, double &xWorld, double &yWorld)
-	{
-		if( m_pDataSet )
-		{
-			xWorld	= m_TF_A[0] + x * m_TF_B[0][1] + y * m_TF_B[0][1];
-			yWorld	= m_TF_A[1] + x * m_TF_B[1][0] + y * m_TF_B[1][1];
-
-			return( true );
-		}
-
-		return( false );
-	}
-
-	bool					from_World		(double xWorld, double yWorld, double &x, double &y)
-	{
-		if( m_pDataSet )
-		{
-			xWorld	-= m_TF_A[0];
-			yWorld	-= m_TF_A[1];
-
-			x	= xWorld * m_TF_BInv[0][0] + yWorld * m_TF_BInv[0][1];
-			y	= xWorld * m_TF_BInv[1][0] + yWorld * m_TF_BInv[1][1];
-
-			return( true );
-		}
-
-		return( false );
-	}
-
-};
-
-//---------------------------------------------------------
-extern CGDAL_Driver	g_GDAL_Driver;
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__gdal_driver_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    gdal_driver.h                      //
+//                                                       //
+//            Copyright (C) 2007 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__gdal_driver_H
+#define HEADER_INCLUDED__gdal_driver_H
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class io_gdal_EXPORT CSG_GDAL_Drivers
+{
+public:
+	CSG_GDAL_Drivers(void);
+	virtual ~CSG_GDAL_Drivers(void);
+
+	int							Get_Count			(void)						const;
+
+	class GDALDriver *			Get_Driver			(const CSG_String &Name)	const;
+	class GDALDriver *			Get_Driver			(int Index)					const;
+
+	CSG_String					Get_Name			(int Index)					const;
+	CSG_String					Get_Description		(int Index)					const;
+	CSG_String					Get_Extension		(int Index)					const;
+
+	bool						Can_Read			(int Index)					const;
+	bool						Can_Write			(int Index)					const;
+
+	static int					Get_GDAL_Type		(TSG_Data_Type Type);
+	static TSG_Data_Type		Get_SAGA_Type		(int           Type);
+
+
+private:
+
+	class GDALDriverManager		*m_pDrivers;
+
+};
+
+//---------------------------------------------------------
+io_gdal_EXPORT const CSG_GDAL_Drivers &	SG_Get_GDAL_Drivers	(void);
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define SG_GDAL_IO_CLOSED		0x00
+#define SG_GDAL_IO_READ			0x01
+#define SG_GDAL_IO_WRITE		0x02
+#define SG_GDAL_IO_READWRITE	(SG_GDAL_IO_READ|IO_WRITE)
+
+//---------------------------------------------------------
+class io_gdal_EXPORT CSG_GDAL_DataSet
+{
+public:
+	CSG_GDAL_DataSet(void);
+	CSG_GDAL_DataSet(const CSG_String &File_Name);
+	virtual ~CSG_GDAL_DataSet(void);
+
+	bool						Open_Read			(const CSG_String &File_Name);
+	bool						Open_Write			(const CSG_String &File_Name, const CSG_String &Driver, TSG_Data_Type Type, int NBands, const CSG_Grid_System &System, const CSG_Projection &Projection);
+	bool						Close				(void);
+
+	bool						is_Okay				(void)	const	{	return( m_pDataSet != NULL );	}
+	bool						is_Reading			(void)	const	{	return( m_pDataSet != NULL && m_Access & SG_GDAL_IO_READ  );	}
+	bool						is_Writing			(void)	const	{	return( m_pDataSet != NULL && m_Access & SG_GDAL_IO_WRITE );	}
+
+	int							Get_NX				(void)	const	{	return( m_NX );			}
+	int							Get_NY				(void)	const	{	return( m_NY );			}
+	double						Get_xMin			(void)	const	{	return( m_xMin );		}
+	double						Get_yMin			(void)	const	{	return( m_yMin );		}
+	double						Get_Cellsize		(void)	const	{	return( m_Cellsize );	}
+
+	bool						Needs_Transform		(void)	const	{	return( m_bTransform );	}
+	void						Get_Transform		(CSG_Vector &A, CSG_Matrix &B)	const	{	A	= m_TF_A;	B	= m_TF_B;	}
+
+	class GDALDriver *			Get_Driver			(void)	const;
+	const char *				Get_Name			(void)	const;
+	const char *				Get_Description		(void)	const;
+	const char *				Get_Projection		(void)	const;
+	const char **				Get_MetaData		(const char *pszDomain = "")	const;
+	const char *				Get_MetaData_Item	(const char *pszName, const char *pszDomain = "")	const;
+
+	int							Get_Count			(void)	const;
+	CSG_Grid *					Read				(int i);
+	bool						Write				(int i, CSG_Grid *pGrid);
+
+
+private:
+
+	bool						m_bTransform;
+
+	int							m_Access, m_NX, m_NY;
+
+	double						m_xMin, m_yMin, m_Cellsize;
+
+	CSG_Vector					m_TF_A;
+
+	CSG_Matrix					m_TF_B, m_TF_BInv;
+
+	class GDALDataset			*m_pDataSet;
+
+
+public:
+
+	bool						to_World			(double x, double y, double &xWorld, double &yWorld)
+	{
+		if( m_pDataSet )
+		{
+			xWorld	= m_TF_A[0] + x * m_TF_B[0][1] + y * m_TF_B[0][1];
+			yWorld	= m_TF_A[1] + x * m_TF_B[1][0] + y * m_TF_B[1][1];
+
+			return( true );
+		}
+
+		return( false );
+	}
+
+	bool						from_World			(double xWorld, double yWorld, double &x, double &y)
+	{
+		if( m_pDataSet )
+		{
+			xWorld	-= m_TF_A[0];
+			yWorld	-= m_TF_A[1];
+
+			x	= xWorld * m_TF_BInv[0][0] + yWorld * m_TF_BInv[0][1];
+			y	= xWorld * m_TF_BInv[1][0] + yWorld * m_TF_BInv[1][1];
+
+			return( true );
+		}
+
+		return( false );
+	}
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+io_gdal_EXPORT TSG_Data_Type			SG_Get_Grid_Type	(CSG_Parameter_Grid_List *pGrids);
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__gdal_driver_H
diff --git a/src/modules_io/gdal/io_gdal/gdal_export.cpp b/src/modules_io/gdal/io_gdal/gdal_export.cpp
index a4a2b7e..5dd5cec 100644
--- a/src/modules_io/gdal/io_gdal/gdal_export.cpp
+++ b/src/modules_io/gdal/io_gdal/gdal_export.cpp
@@ -1,247 +1,210 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                   gdal_export.cpp                     //
-//                                                       //
-//            Copyright (C) 2007 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "gdal_export.h"
-
-#include <cpl_string.h>
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CGDAL_Export::CGDAL_Export(void)
-{
-	Set_Name	(_TL("GDAL: Export Raster"));
-
-	Set_Author	(SG_T("(c) 2007 by O.Conrad"));
-
-	CSG_String	Description, Formats;
-
-	Description	= _TW(
-		"The \"GDAL Raster Export\" module exports one or more grids to various file formats using the "
-		"\"Geospatial Data Abstraction Library\" (GDAL) by Frank Warmerdam. "
-		"For more information have a look at the GDAL homepage:\n"
-		"  <a target=\"_blank\" href=\"http://www.gdal.org/\">"
-		"  http://www.gdal.org</a>\n"
-		"\n"
-		"Following raster formats are currently supported:\n"
-		"<table border=\"1\"><tr><th>ID</th><th>Name</th></tr>\n"
-	);
-
-	for(int i=0; i<g_GDAL_Driver.Get_Count(); i++)
-    {
-		if( CSLFetchBoolean(g_GDAL_Driver.Get_Driver(i)->GetMetadata(), GDAL_DCAP_CREATE, false) )
-		{
-			Description	+= CSG_String::Format(SG_T("<tr><td>%s</td><td>%s</td></tr>\n"),
-				SG_STR_MBTOSG(g_GDAL_Driver.Get_Description(i)),
-				SG_STR_MBTOSG(g_GDAL_Driver.Get_Name(i))
-			);
-
-			Formats		+= CSG_String::Format(SG_T("%s|"), SG_STR_MBTOSG(g_GDAL_Driver.Get_Name(i)));
-
-			m_DriverNames.Add(SG_STR_MBTOSG(g_GDAL_Driver.Get_Description(i)));
-		}
-    }
-
-	Description	+= SG_T("</table>");
-
-	Set_Description(Description);
-
-	//-----------------------------------------------------
-	Parameters.Add_Grid_List(
-		NULL, "GRIDS"	, _TL("Grid(s)"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	Parameters.Add_FilePath(
-		NULL, "FILE"	, _TL("File"),
-		_TL(""),
-		NULL, NULL, true
-	);
-
-	Parameters.Add_Choice(
-		NULL, "FORMAT"	, _TL("Format"),
-		_TL(""),
-		Formats
-	);
-
-	Parameters.Add_Choice(
-		NULL, "TYPE"	, _TL("Data Type"),
-		_TL(""),
-
-		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|%s|%s|%s|"),
-			_TL("match input data"),
-			_TL("8 bit unsigned integer"),
-			_TL("16 bit unsigned integer"),
-			_TL("16 bit signed integer"),
-			_TL("32 bit unsigned integer"),
-			_TL("32 bit signed integer"),
-			_TL("32 bit floating point"),
-			_TL("64 bit floating point")
-		), 0
-	);
-}
-
-//---------------------------------------------------------
-CGDAL_Export::~CGDAL_Export(void)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CGDAL_Export::On_Execute(void)
-{
-	char					**pOptions	= NULL;
-	int						x, y, n;
-	double					*zLine;
-	CSG_String				File_Name;
-	CSG_Parameter_Grid_List	*pGrids;
-	CSG_Grid				*pGrid;
-	GDALDataType			gdal_Type;
-	GDALDriver				*pDriver;
-	GDALDataset				*pDataset;
-	GDALRasterBand			*pBand;
-
-	//-----------------------------------------------------
-	pGrids		= Parameters("GRIDS")	->asGridList();
-	File_Name	= Parameters("FILE")	->asString();
-
-	//-----------------------------------------------------
-	switch( Parameters("TYPE")->asInt() )
-	{
-	default:
-	case 0:	gdal_Type	= g_GDAL_Driver.Get_GDAL_Type(pGrids);	break;	// match input data
-	case 1:	gdal_Type	= GDT_Byte;		break;	// Eight bit unsigned integer
-	case 2:	gdal_Type	= GDT_UInt16;	break;	// Sixteen bit unsigned integer
-	case 3:	gdal_Type	= GDT_Int16;	break;	// Sixteen bit signed integer
-	case 4:	gdal_Type	= GDT_UInt32;	break;	// Thirty two bit unsigned integer
-	case 5:	gdal_Type	= GDT_Int32;	break;	// Thirty two bit signed integer
-	case 6:	gdal_Type	= GDT_Float32;	break;	// Thirty two bit floating point
-	case 7:	gdal_Type	= GDT_Float64;	break;	// Sixty four bit floating point
-	}
-
-	//-----------------------------------------------------
-	if( (pDriver = g_GDAL_Driver.Get_Driver(SG_STR_SGTOMB(m_DriverNames[Parameters("FORMAT")->asInt()]))) == NULL )
-	{
-		Message_Add(_TL("Driver not found."));
-	}
-	else if( CSLFetchBoolean(pDriver->GetMetadata(), GDAL_DCAP_CREATE, false) == false )
-	{
-		Message_Add(_TL("Driver does not support file creation."));
-	}
-	else if( (pDataset = pDriver->Create(File_Name.b_str(), Get_NX(), Get_NY(), pGrids->Get_Count(), gdal_Type, pOptions)) == NULL )
-	{
-		Message_Add(_TL("Could not create dataset."));
-	}
-	else
-	{
-		g_GDAL_Driver.Set_Transform(pDataset, Get_System());
-
-		if( pGrids->asGrid(0)->Get_Projection().Get_Type() != SG_PROJ_TYPE_CS_Undefined )
-		{
-			pDataset->SetProjection(SG_STR_SGTOMB(pGrids->asGrid(0)->Get_Projection().Get_WKT()));
-		}
-
-		zLine	= (double *)SG_Malloc(Get_NX() * sizeof(double));
-
-		for(n=0; n<pGrids->Get_Count(); n++)
-		{
-			Process_Set_Text(CSG_String::Format(SG_T("%s %d"), _TL("Band"), n + 1));
-
-			pGrid	= pGrids->asGrid(n);
-			pBand	= pDataset->GetRasterBand(n + 1);
-
-			for(y=0; y<Get_NY() && Set_Progress(y, Get_NY()); y++)
-			{
-				for(x=0; x<Get_NX(); x++)
-				{
-					zLine[x]	= pGrid->asDouble(x, Get_NY() - 1 - y);
-				}
-
-				pBand->RasterIO(GF_Write, 0, y, Get_NX(), 1, zLine, Get_NX(), 1, GDT_Float64, 0, 0);
-			}
-		}
-
-		//-------------------------------------------------
-		SG_Free(zLine);
-
-		GDALClose(pDataset);
-
-		return( true );
-	}
-
-	//-----------------------------------------------------
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   gdal_export.cpp                     //
+//                                                       //
+//            Copyright (C) 2007 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "gdal_export.h"
+
+#include <cpl_string.h>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CGDAL_Export::CGDAL_Export(void)
+{
+	Set_Name	(_TL("GDAL: Export Raster"));
+
+	Set_Author	(SG_T("O.Conrad (c) 2007"));
+
+	CSG_String	Description, Formats;
+
+	Description	= _TW(
+		"The \"GDAL Raster Export\" module exports one or more grids to various file formats using the "
+		"\"Geospatial Data Abstraction Library\" (GDAL) by Frank Warmerdam. "
+		"For more information have a look at the GDAL homepage:\n"
+		"  <a target=\"_blank\" href=\"http://www.gdal.org/\">"
+		"  http://www.gdal.org</a>\n"
+		"\n"
+		"Following raster formats are currently supported:\n"
+		"<table border=\"1\"><tr><th>ID</th><th>Name</th></tr>\n"
+	);
+
+	for(int i=0; i<SG_Get_GDAL_Drivers().Get_Count(); i++)
+    {
+		if( SG_Get_GDAL_Drivers().Can_Write(i) )
+		{
+			Description	+= CSG_String::Format(SG_T("<tr><td>%s</td><td>%s</td></tr>\n"),
+				SG_Get_GDAL_Drivers().Get_Description(i).c_str(),
+				SG_Get_GDAL_Drivers().Get_Name       (i).c_str()
+			);
+
+			Formats		+= CSG_String::Format(SG_T("{%s}%s|"),
+				SG_Get_GDAL_Drivers().Get_Description(i).c_str(),
+				SG_Get_GDAL_Drivers().Get_Name       (i).c_str()
+			);
+		}
+    }
+
+	Description	+= SG_T("</table>");
+
+	Set_Description(Description);
+
+	//-----------------------------------------------------
+	Parameters.Add_Grid_List(
+		NULL, "GRIDS"	, _TL("Grid(s)"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_FilePath(
+		NULL, "FILE"	, _TL("File"),
+		_TL(""),
+		NULL, NULL, true
+	);
+
+	Parameters.Add_Choice(
+		NULL, "FORMAT"	, _TL("Format"),
+		_TL(""),
+		Formats
+	);
+
+	Parameters.Add_Choice(
+		NULL, "TYPE"	, _TL("Data Type"),
+		_TL(""),
+
+		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|%s|%s|%s|"),
+			_TL("match input data"),
+			_TL("8 bit unsigned integer"),
+			_TL("16 bit unsigned integer"),
+			_TL("16 bit signed integer"),
+			_TL("32 bit unsigned integer"),
+			_TL("32 bit signed integer"),
+			_TL("32 bit floating point"),
+			_TL("64 bit floating point")
+		), 0
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CGDAL_Export::On_Execute(void)
+{
+	TSG_Data_Type			Type;
+	CSG_String				File_Name, Driver;
+	CSG_Projection			Projection;
+	CSG_Parameter_Grid_List	*pGrids;
+	CSG_GDAL_DataSet		DataSet;
+
+	//-----------------------------------------------------
+	pGrids		= Parameters("GRIDS")	->asGridList();
+	File_Name	= Parameters("FILE")	->asString();
+
+	Get_Projection(Projection);
+
+	//-----------------------------------------------------
+	switch( Parameters("TYPE")->asInt() )
+	{
+	default:
+	case 0:	Type	= SG_Get_Grid_Type(pGrids);	break;	// match input data
+	case 1:	Type	= SG_DATATYPE_Byte;			break;	// Eight bit unsigned integer
+	case 2:	Type	= SG_DATATYPE_Word;			break;	// Sixteen bit unsigned integer
+	case 3:	Type	= SG_DATATYPE_Short;		break;	// Sixteen bit signed integer
+	case 4:	Type	= SG_DATATYPE_DWord;		break;	// Thirty two bit unsigned integer
+	case 5:	Type	= SG_DATATYPE_Int;			break;	// Thirty two bit signed integer
+	case 6:	Type	= SG_DATATYPE_Float;		break;	// Thirty two bit floating point
+	case 7:	Type	= SG_DATATYPE_Double;		break;	// Sixty four bit floating point
+	}
+
+	//-----------------------------------------------------
+	if( !Parameters("FORMAT")->asChoice()->Get_Data(Driver) )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	if( !DataSet.Open_Write(File_Name, Driver, Type, pGrids->Get_Count(), *Get_System(), Projection) )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	for(int i=0; i<pGrids->Get_Count(); i++)
+	{
+		Process_Set_Text(CSG_String::Format(SG_T("%s %d"), _TL("Band"), i + 1));
+
+		DataSet.Write(i, pGrids->asGrid(i));
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/gdal/io_gdal/gdal_export.h b/src/modules_io/gdal/io_gdal/gdal_export.h
index 6e64990..9748681 100644
--- a/src/modules_io/gdal/io_gdal/gdal_export.h
+++ b/src/modules_io/gdal/io_gdal/gdal_export.h
@@ -1,97 +1,92 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    gdal_export.h                      //
-//                                                       //
-//            Copyright (C) 2007 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__gdal_export_H
-#define HEADER_INCLUDED__gdal_export_H
-
-//---------------------------------------------------------
-#include "gdal_driver.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CGDAL_Export : public CSG_Module_Grid
-{
-public:
-	CGDAL_Export(void);
-	virtual ~CGDAL_Export(void);
-
-
-protected:
-
-	virtual bool				On_Execute		(void);
-
-
-private:
-
-	CSG_Strings					m_DriverNames;
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__gdal_export_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    gdal_export.h                      //
+//                                                       //
+//            Copyright (C) 2007 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__gdal_export_H
+#define HEADER_INCLUDED__gdal_export_H
+
+//---------------------------------------------------------
+#include "gdal_driver.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class io_gdal_EXPORT CGDAL_Export : public CSG_Module_Grid
+{
+public:
+	CGDAL_Export(void);
+
+
+protected:
+
+	virtual bool		On_Execute		(void);
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__gdal_export_H
diff --git a/src/modules_io/gdal/io_gdal/gdal_export_geotiff.cpp b/src/modules_io/gdal/io_gdal/gdal_export_geotiff.cpp
index 295d1d6..bdb5917 100644
--- a/src/modules_io/gdal/io_gdal/gdal_export_geotiff.cpp
+++ b/src/modules_io/gdal/io_gdal/gdal_export_geotiff.cpp
@@ -1,190 +1,146 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//               gdal_export_geotiff.cpp                 //
-//                                                       //
-//            Copyright (C) 2007 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "gdal_export_geotiff.h"
-
-#include <cpl_string.h>
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CGDAL_Export_GeoTIFF::CGDAL_Export_GeoTIFF(void)
-{
-	Set_Name		(_TL("GDAL: Export Raster to GeoTIFF"));
-
-	Set_Author		(SG_T("(c) 2007 by O.Conrad"));
-
-	Set_Description	(_TW(
-		"The \"GDAL GeoTIFF Export\" module exports one or more grids to a Geocoded Tagged Image File Format using the "
-		"\"Geospatial Data Abstraction Library\" (GDAL) by Frank Warmerdam. "
-		"For more information have a look at the GDAL homepage:\n"
-		"  <a target=\"_blank\" href=\"http://www.gdal.org/\">"
-		"  http://www.gdal.org</a>\n"
-	));
-
-	//-----------------------------------------------------
-	Parameters.Add_Grid_List(
-		NULL, "GRIDS"	, _TL("Grid(s)"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	Parameters.Add_FilePath(
-		NULL, "FILE"	, _TL("File"),
-		_TL(""),
-
-		CSG_String::Format(
-			SG_T("%s|*.tif;*.tiff|%s|*.*"),
-			_TL("TIFF files (*.tif)"),
-			_TL("All Files")
-		), NULL, true
-	);
-}
-
-//---------------------------------------------------------
-CGDAL_Export_GeoTIFF::~CGDAL_Export_GeoTIFF(void)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CGDAL_Export_GeoTIFF::On_Execute(void)
-{
-	char					**pOptions	= NULL;
-	int						x, y, n;
-	double					*zLine;
-	CSG_String				File_Name;
-	CSG_Parameter_Grid_List	*pGrids;
-	CSG_Grid				*pGrid;
-	GDALDataType			gdal_Type;
-	GDALDriver				*pDriver;
-	GDALDataset				*pDataset;
-	GDALRasterBand			*pBand;
-
-	//-----------------------------------------------------
-	pGrids		= Parameters("GRIDS")	->asGridList();
-	File_Name	= Parameters("FILE")	->asString();
-
-	//-----------------------------------------------------
-	gdal_Type	= g_GDAL_Driver.Get_GDAL_Type(pGrids);
-
-	//-----------------------------------------------------
-	if( (pDriver = g_GDAL_Driver.Get_Driver("GTiff")) == NULL )
-	{
-		Message_Add(_TL("GeoTIFF driver not found."));
-	}
-	else if( CSLFetchBoolean(pDriver->GetMetadata(), GDAL_DCAP_CREATE, false) == false )
-	{
-		Message_Add(_TL("Driver does not support file creation."));
-	}
-	else if( (pDataset = pDriver->Create(File_Name.b_str(), Get_NX(), Get_NY(), pGrids->Get_Count(), gdal_Type, pOptions)) == NULL )
-	{
-		Message_Add(_TL("Could not create dataset."));
-	}
-	else
-	{
-		g_GDAL_Driver.Set_Transform(pDataset, Get_System());
-
-		zLine	= (double *)SG_Malloc(Get_NX() * sizeof(double));
-
-		for(n=0; n<pGrids->Get_Count(); n++)
-		{
-			Process_Set_Text(CSG_String::Format(SG_T("%s %d"), _TL("Band"), n + 1));
-
-			pGrid	= pGrids->asGrid(n);
-			pBand	= pDataset->GetRasterBand(n + 1);
-
-			for(y=0; y<Get_NY() && Set_Progress(y, Get_NY()); y++)
-			{
-				for(x=0; x<Get_NX(); x++)
-				{
-					zLine[x]	= pGrid->asDouble(x, Get_NY() - 1 - y);
-				}
-
-				pBand->RasterIO(GF_Write, 0, y, Get_NX(), 1, zLine, Get_NX(), 1, GDT_Float64, 0, 0);
-			}
-		}
-
-		//-------------------------------------------------
-		SG_Free(zLine);
-
-		GDALClose(pDataset);
-
-		return( true );
-	}
-
-	//-----------------------------------------------------
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//               gdal_export_geotiff.cpp                 //
+//                                                       //
+//            Copyright (C) 2007 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "gdal_export_geotiff.h"
+
+#include <cpl_string.h>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CGDAL_Export_GeoTIFF::CGDAL_Export_GeoTIFF(void)
+{
+	Set_Name		(_TL("GDAL: Export Raster to GeoTIFF"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2007"));
+
+	Set_Description	(_TW(
+		"The \"GDAL GeoTIFF Export\" module exports one or more grids to a Geocoded Tagged Image File Format using the "
+		"\"Geospatial Data Abstraction Library\" (GDAL) by Frank Warmerdam. "
+		"For more information have a look at the GDAL homepage:\n"
+		"  <a target=\"_blank\" href=\"http://www.gdal.org/\">"
+		"  http://www.gdal.org</a>\n"
+	));
+
+	//-----------------------------------------------------
+	Parameters.Add_Grid_List(
+		NULL, "GRIDS"	, _TL("Grid(s)"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_FilePath(
+		NULL, "FILE"	, _TL("File"),
+		_TL(""),
+		CSG_String::Format(
+			SG_T("%s|*.tif;*.tiff|%s|*.*"),
+			_TL("TIFF files (*.tif)"),
+			_TL("All Files")
+		), NULL, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CGDAL_Export_GeoTIFF::On_Execute(void)
+{
+	CSG_String				File_Name;
+	CSG_Projection			Projection;
+	CSG_Parameter_Grid_List	*pGrids;
+	CSG_GDAL_DataSet		DataSet;
+
+	//-----------------------------------------------------
+	pGrids		= Parameters("GRIDS")	->asGridList();
+	File_Name	= Parameters("FILE")	->asString();
+
+	Get_Projection(Projection);
+
+	//-----------------------------------------------------
+	if( !DataSet.Open_Write(File_Name, SG_T("GTiff"), SG_Get_Grid_Type(pGrids), pGrids->Get_Count(), *Get_System(), Projection) )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	for(int i=0; i<pGrids->Get_Count(); i++)
+	{
+		Process_Set_Text(CSG_String::Format(SG_T("%s %d"), _TL("Band"), i + 1));
+
+		DataSet.Write(i, pGrids->asGrid(i));
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/gdal/io_gdal/gdal_export_geotiff.h b/src/modules_io/gdal/io_gdal/gdal_export_geotiff.h
index 3cd0dbb..98175a7 100644
--- a/src/modules_io/gdal/io_gdal/gdal_export_geotiff.h
+++ b/src/modules_io/gdal/io_gdal/gdal_export_geotiff.h
@@ -1,92 +1,91 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                gdal_export_geotiff.h                  //
-//                                                       //
-//            Copyright (C) 2007 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__gdal_export_geotiff_H
-#define HEADER_INCLUDED__gdal_export_geotiff_H
-
-//---------------------------------------------------------
-#include "gdal_driver.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CGDAL_Export_GeoTIFF : public CSG_Module_Grid
-{
-public:
-	CGDAL_Export_GeoTIFF(void);
-	virtual ~CGDAL_Export_GeoTIFF(void);
-
-
-protected:
-
-	virtual bool				On_Execute		(void);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__gdal_export_geotiff_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                gdal_export_geotiff.h                  //
+//                                                       //
+//            Copyright (C) 2007 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__gdal_export_geotiff_H
+#define HEADER_INCLUDED__gdal_export_geotiff_H
+
+//---------------------------------------------------------
+#include "gdal_driver.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class io_gdal_EXPORT CGDAL_Export_GeoTIFF : public CSG_Module_Grid
+{
+public:
+	CGDAL_Export_GeoTIFF(void);
+
+
+protected:
+
+	virtual bool		On_Execute		(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__gdal_export_geotiff_H
diff --git a/src/modules_io/gdal/io_gdal/gdal_import.cpp b/src/modules_io/gdal/io_gdal/gdal_import.cpp
index ca066f7..a1005ff 100644
--- a/src/modules_io/gdal/io_gdal/gdal_import.cpp
+++ b/src/modules_io/gdal/io_gdal/gdal_import.cpp
@@ -1,398 +1,395 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                   gdal_import.cpp                     //
-//                                                       //
-//            Copyright (C) 2007 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "gdal_import.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CGDAL_Import::CGDAL_Import(void)
-{
-	Set_Name	(_TL("GDAL: Import Raster"));
-
-	Set_Author	(SG_T("(c) 2007 by O.Conrad (A.Ringeler)"));
-
-	CSG_String	Description;
-
-	Description	= _TW(
-		"The \"GDAL Raster Import\" module imports grid data from various file formats using the "
-		"\"Geospatial Data Abstraction Library\" (GDAL) by Frank Warmerdam. "
-		"For more information have a look at the GDAL homepage:\n"
-		"  <a target=\"_blank\" href=\"http://www.gdal.org/\">"
-		"  http://www.gdal.org</a>\n"
-		"\n"
-		"Following raster formats are currently supported:\n"
-		"<table border=\"1\"><tr><th>ID</th><th>Name</th></tr>\n"
-	);
-
-	for(int i=0; i<g_GDAL_Driver.Get_Count(); i++)
-    {
-		Description	+= CSG_String::Format(SG_T("<tr><td>%s</td><td>%s</td></tr>\n"),
-			SG_STR_MBTOSG(g_GDAL_Driver.Get_Description(i)),
-			SG_STR_MBTOSG(g_GDAL_Driver.Get_Name(i))
-		);
-    }
-
-	Description	+= SG_T("</table>");
-
-	Set_Description(Description);
-
-	//-----------------------------------------------------
-	Parameters.Add_Grid_List(
-		NULL, "GRIDS"	, _TL("Grids"),
-		_TL(""),
-		PARAMETER_OUTPUT_OPTIONAL, false
-	);
-
-	Parameters.Add_FilePath(
-		NULL, "FILES"	, _TL("Files"),
-		_TL(""),
-		NULL, NULL, false, false, true
-	);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CGDAL_Import::On_Execute(void)
-{
-	CSG_Strings		Files;
-	CGDAL_System	System;
-
-	//-----------------------------------------------------
-	if( !Parameters("FILES")->asFilePath()->Get_FilePaths(Files) )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	m_pGrids	= Parameters("GRIDS")	->asGridList();
-	m_pGrids	->Del_Items();
-
-	for(int i=0; i<Files.Get_Count(); i++)
-	{
-		Message_Add(CSG_String::Format(SG_T("%s: %s"), _TL("loading"), Files[i].c_str()));
-
-		if( System.Create(Files[i], IO_READ) == false )
-		{
-			Message_Add(_TL("failed: could not find a suitable import driver"));
-		}
-		else
-		{
-			if( System.Get_Count() <= 0 )
-			{
-				Load_Sub(System, SG_File_Get_Name(Files[i], false));
-			}
-			else
-			{
-				Load(System, SG_File_Get_Name(Files[i], false));
-			}
-		}
-	}
-
-	return( m_pGrids->Get_Count() > 0 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CGDAL_Import::Load_Sub(CGDAL_System &System, const CSG_String &Name)
-{
-	if( System.is_Reading() )
-	{
-		char	**pMetaData	= System.Get_DataSet()->GetMetadata("SUBDATASETS");
-
-		if( CSLCount(pMetaData) > 0 )
-		{
-			int				i, n;
-			CSG_String		s, sID, sName, sDesc;
-			CSG_Parameters	P;
-
-			for(i=0; pMetaData[i]!=NULL; i++)
-			{
-				Message_Add(CSG_String::Format(SG_T("  %s\n"), pMetaData[i]), false);
-
-				s		= pMetaData[i];
-
-				if( s.Contains(SG_T("SUBDATASET_")) && s.Contains(SG_T("_NAME=")) )
-				{
-					sID		= s.AfterFirst('_').BeforeFirst('_');
-					sName	= s.AfterFirst('=');
-					sDesc	= _TL("no description available");
-
-					if( pMetaData[i + 1] != NULL )
-					{
-						s		= pMetaData[i + 1];
-
-						if( s.Contains(SG_T("SUBDATASET_")) && s.Contains(SG_T("_DESC")) )
-						{
-							sDesc	= s.AfterFirst ('=');
-						}
-					}
-
-					P.Add_Value(NULL, sName, sDesc, SG_T(""), PARAMETER_TYPE_Bool, false);
-				}
-			}
-
-			if( Dlg_Parameters(&P, _TL("Select from Subdatasets...")) )
-			{
-				for(i=0, n=0; i<P.Get_Count() && Process_Get_Okay(false); i++)
-				{
-					if( P(i)->asBool() && System.Create(P(i)->Get_Identifier(), IO_READ) && Load(System, P(i)->Get_Name()) )
-					{
-						n++;
-					}
-				}
-
-				return( n > 0 );
-			}
-		}
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CGDAL_Import::Load(CGDAL_System &System, const CSG_String &Name)
-{
-	//-----------------------------------------------------
-	if( !System.is_Reading() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	CSG_Vector	A;
-	CSG_Matrix	B;
-
-	System.Get_Transform(A, B);
-
-	//-----------------------------------------------------
-	Message_Add(CSG_String::Format(
-		SG_T("\n%s: %s/%s\n"),
-		_TL("Driver"),
-		System.Get_Driver()->GetDescription(), 
-		System.Get_Driver()->GetMetadataItem(GDAL_DMD_LONGNAME)
-	), false);
-
-	Message_Add(CSG_String::Format(
-		SG_T("%s: x %d, y %d\n%s: %d\n%s x' = %.6f + x * %.6f + y * %.6f\n%s y' = %.6f + x * %.6f + y * %.6f"),
-		_TL("Cells")			, System.Get_NX(), System.Get_NY(),
-		_TL("Bands")			, System.Get_Count(),
-		_TL("Transformation")	, A[0], B[0][0], B[0][1],
-		_TL("Transformation")	, A[1], B[1][0], B[1][1]
-	), false);
-
-	//-----------------------------------------------------
-	if( System.Get_Projection() && System.Get_Projection()[0] )
-	{
-		CSG_String	s(System.Get_Projection()), t;
-
-		for(int is=0, nt=0; is<(int)s.Length(); is++)
-		{
-			bool	bNewLine	= false, bPrevious	= true;
-
-			switch( s[is] )
-			{
-			case '[':	bNewLine	= true;	nt++;	break;
-			case ',':	bNewLine	= true;			break;
-			case ']':	nt--;	bPrevious	= false;	break;
-			}
-
-			if( bPrevious )
-				t	+= s[is];
-
-			if( bNewLine )
-			{
-				t	+= '\n';
-				for(int it=0; it<nt; it++)
-					t	+= '\t';
-			}
-
-			if( !bPrevious )
-				t	+= s[is];
-		}
-
-		Message_Add(CSG_String::Format(SG_T("\n%s:\n%s"), _TL("Projection"), t.c_str()), false);
-	}
-
-	//-----------------------------------------------------
-	int			i, n;
-	CSG_Grid	*pGrid;
-
-	for(i=0, n=0; i<System.Get_Count(); i++)
-	{
-		if( (pGrid = System.Read_Band(i)) != NULL )
-		{
-			n++;
-
-			if( System.Needs_Transform() )
-			{
-				Set_Transformation(&pGrid, A, B);
-			}
-
-			pGrid->Set_Name(System.Get_Count() > 1
-				? CSG_String::Format(SG_T("%s [%02d]"), Name.c_str(), i + 1).c_str()
-				: Name.c_str()
-			);
-
-			pGrid->Get_Projection().Create(System.Get_Projection(), SG_PROJ_FMT_WKT);
-			m_pGrids->Add_Item(pGrid);
-
-			DataObject_Add			(pGrid);
-			DataObject_Set_Colors	(pGrid, CSG_Colors(100, SG_COLORS_BLACK_WHITE, false));
-		}
-    }
-
-	//-----------------------------------------------------
-	return( n > 0 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CGDAL_Import::Set_Transformation(CSG_Grid **ppGrid, const CSG_Vector &A, const CSG_Matrix &B)
-{
-	//-----------------------------------------------------
-	int			x, y;
-	double		z;
-	TSG_Rect	r;
-	CSG_Vector	vImage(2), vWorld(2);
-	CSG_Matrix	BInv(B.Get_Inverse());
-	CSG_Grid	*pImage, *pWorld;
-
-	//-----------------------------------------------------
-	pImage		= *ppGrid;
-
-	//-----------------------------------------------------
-	vImage[0]	= pImage->Get_XMin();	vImage[1]	= pImage->Get_YMin();	vWorld	= B * vImage + A;
-	r.xMin	= r.xMax	= vWorld[0];
-	r.yMin	= r.yMax	= vWorld[1];
-
-	vImage[0]	= pImage->Get_XMin();	vImage[1]	= pImage->Get_YMax();	vWorld	= B * vImage + A;
-	if( r.xMin > vWorld[0] )	r.xMin	= vWorld[0];	else if( r.xMax < vWorld[0] )	r.xMax	= vWorld[0];
-	if( r.yMin > vWorld[1] )	r.yMin	= vWorld[1];	else if( r.yMax < vWorld[1] )	r.yMax	= vWorld[1];
-
-	vImage[0]	= pImage->Get_XMax();	vImage[1]	= pImage->Get_YMax();	vWorld	= B * vImage + A;
-	if( r.xMin > vWorld[0] )	r.xMin	= vWorld[0];	else if( r.xMax < vWorld[0] )	r.xMax	= vWorld[0];
-	if( r.yMin > vWorld[1] )	r.yMin	= vWorld[1];	else if( r.yMax < vWorld[1] )	r.yMax	= vWorld[1];
-
-	vImage[0]	= pImage->Get_XMax();	vImage[1]	= pImage->Get_YMin();	vWorld	= B * vImage + A;
-	if( r.xMin > vWorld[0] )	r.xMin	= vWorld[0];	else if( r.xMax < vWorld[0] )	r.xMax	= vWorld[0];
-	if( r.yMin > vWorld[1] )	r.yMin	= vWorld[1];	else if( r.yMax < vWorld[1] )	r.yMax	= vWorld[1];
-
-	z	= fabs(B[0][0]) < fabs(B[1][1]) ? fabs(B[0][0]) : fabs(B[1][1]);	// guess a suitable cellsize; could be improved...
-	x	= 1 + (int)((r.xMax - r.xMin) / z);
-	y	= 1 + (int)((r.yMax - r.yMin) / z);
-
-	//-----------------------------------------------------
-	pWorld		= *ppGrid	= SG_Create_Grid(pImage->Get_Type(), x, y, z, r.xMin, r.yMin);
-
-	for(y=0, vWorld[1]=pWorld->Get_YMin(); y<pWorld->Get_NY() && Set_Progress(y, pWorld->Get_NY()); y++, vWorld[1]+=pWorld->Get_Cellsize())
-	{
-		for(x=0, vWorld[0]=pWorld->Get_XMin(); x<pWorld->Get_NX(); x++, vWorld[0]+=pWorld->Get_Cellsize())
-		{
-			vImage	= BInv * (vWorld - A);
-
-			if( pImage->Get_Value(vImage[0], vImage[1], z, GRID_INTERPOLATION_NearestNeighbour, false, true) )
-			{
-				pWorld->Set_Value(x, y, z);
-			}
-			else
-			{
-				pWorld->Set_NoData(x, y);
-			}
-		}
-	}
-
-	delete(pImage);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   gdal_import.cpp                     //
+//                                                       //
+//            Copyright (C) 2007 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "gdal_import.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CGDAL_Import::CGDAL_Import(void)
+{
+	Set_Name	(_TL("GDAL: Import Raster"));
+
+	Set_Author	(SG_T("(c) 2007 by O.Conrad (A.Ringeler)"));
+
+	CSG_String	Description;
+
+	Description	= _TW(
+		"The \"GDAL Raster Import\" module imports grid data from various file formats using the "
+		"\"Geospatial Data Abstraction Library\" (GDAL) by Frank Warmerdam. "
+		"For more information have a look at the GDAL homepage:\n"
+		"  <a target=\"_blank\" href=\"http://www.gdal.org/\">"
+		"  http://www.gdal.org</a>\n"
+		"\n"
+		"Following raster formats are currently supported:\n"
+		"<table border=\"1\"><tr><th>ID</th><th>Name</th></tr>\n"
+	);
+
+	for(int i=0; i<SG_Get_GDAL_Drivers().Get_Count(); i++)
+    {
+		Description	+= CSG_String::Format(SG_T("<tr><td>%s</td><td>%s</td></tr>\n"),
+			SG_Get_GDAL_Drivers().Get_Description(i).c_str(),
+			SG_Get_GDAL_Drivers().Get_Name       (i).c_str()
+		);
+    }
+
+	Description	+= SG_T("</table>");
+
+	Set_Description(Description);
+
+	//-----------------------------------------------------
+	Parameters.Add_Grid_List(
+		NULL, "GRIDS"	, _TL("Grids"),
+		_TL(""),
+		PARAMETER_OUTPUT_OPTIONAL, false
+	);
+
+	Parameters.Add_FilePath(
+		NULL, "FILES"	, _TL("Files"),
+		_TL(""),
+		NULL, NULL, false, false, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CGDAL_Import::On_Execute(void)
+{
+	CSG_Strings			Files;
+	CSG_GDAL_DataSet	DataSet;
+
+	//-----------------------------------------------------
+	if( !Parameters("FILES")->asFilePath()->Get_FilePaths(Files) )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	m_pGrids	= Parameters("GRIDS")	->asGridList();
+	m_pGrids	->Del_Items();
+
+	for(int i=0; i<Files.Get_Count(); i++)
+	{
+		Message_Add(CSG_String::Format(SG_T("\n%s: %s"), _TL("loading"), Files[i].c_str()), false);
+
+		if( DataSet.Open_Read(Files[i]) == false )
+		{
+			Message_Add(_TL("failed: could not find a suitable import driver"));
+		}
+		else
+		{
+			if( DataSet.Get_Count() <= 0 )
+			{
+				Load_Sub(DataSet, SG_File_Get_Name(Files[i], false));
+			}
+			else
+			{
+				Load(DataSet, SG_File_Get_Name(Files[i], false));
+			}
+		}
+	}
+
+	return( m_pGrids->Get_Count() > 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CGDAL_Import::Load_Sub(CSG_GDAL_DataSet &DataSet, const CSG_String &Name)
+{
+	if( DataSet.is_Reading() )
+	{
+		const char	**pMetaData	= DataSet.Get_MetaData("SUBDATASETS");
+
+		if( pMetaData && pMetaData[0] )
+		{
+			int				i, n;
+			CSG_String		s, sID, sName, sDesc;
+			CSG_Parameters	P;
+
+			for(i=0; pMetaData[i]!=NULL; i++)
+			{
+				Message_Add(CSG_String::Format(SG_T("  %s\n"), pMetaData[i]), false);
+
+				s		= pMetaData[i];
+
+				if( s.Contains(SG_T("SUBDATASET_")) && s.Contains(SG_T("_NAME=")) )
+				{
+					sID		= s.AfterFirst('_').BeforeFirst('_');
+					sName	= s.AfterFirst('=');
+					sDesc	= _TL("no description available");
+
+					if( pMetaData[i + 1] != NULL )
+					{
+						s		= pMetaData[i + 1];
+
+						if( s.Contains(SG_T("SUBDATASET_")) && s.Contains(SG_T("_DESC")) )
+						{
+							sDesc	= s.AfterFirst ('=');
+						}
+					}
+
+					P.Add_Value(NULL, sName, sDesc, SG_T(""), PARAMETER_TYPE_Bool, false);
+				}
+			}
+
+			if( Dlg_Parameters(&P, _TL("Select from Subdatasets...")) )
+			{
+				for(i=0, n=0; i<P.Get_Count() && Process_Get_Okay(false); i++)
+				{
+					if( P(i)->asBool() && DataSet.Open_Read(P(i)->Get_Identifier()) && Load(DataSet, P(i)->Get_Name()) )
+					{
+						n++;
+					}
+				}
+
+				return( n > 0 );
+			}
+		}
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CGDAL_Import::Load(CSG_GDAL_DataSet &DataSet, const CSG_String &Name)
+{
+	//-----------------------------------------------------
+	if( !DataSet.is_Reading() )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	CSG_Vector	A;
+	CSG_Matrix	B;
+
+	DataSet.Get_Transform(A, B);
+
+	//-----------------------------------------------------
+	Message_Add(CSG_String::Format(
+		SG_T("\n%s: %s/%s\n"),
+		_TL("Driver"),
+		DataSet.Get_Description(), 
+		DataSet.Get_Name()
+	), false);
+
+	if( DataSet.Get_Count() > 1 )
+	{
+		Message_Add(CSG_String::Format(SG_T("%d %s\n"), DataSet.Get_Count(), _TL("Bands")), false);
+	}
+
+	Message_Add(CSG_String::Format(
+		SG_T("%s: x %d, y %d\n%s: %d\n%s x' = %.6f + x * %.6f + y * %.6f\n%s y' = %.6f + x * %.6f + y * %.6f"),
+		_TL("Cells")			, DataSet.Get_NX(), DataSet.Get_NY(),
+		_TL("Bands")			, DataSet.Get_Count(),
+		_TL("Transformation")	, A[0], B[0][0], B[0][1],
+		_TL("Transformation")	, A[1], B[1][0], B[1][1]
+	), false);
+
+	//-----------------------------------------------------
+	int			i, n;
+	CSG_Grid	*pGrid;
+
+	for(i=0, n=0; i<DataSet.Get_Count() && Process_Get_Okay(); i++)
+	{
+		if( (pGrid = DataSet.Read(i)) != NULL )
+		{
+			n++;
+
+			if( DataSet.Needs_Transform() )
+			{
+				Set_Transformation(&pGrid, A, B);
+			}
+
+			pGrid->Set_Name(DataSet.Get_Count() > 1
+				? CSG_String::Format(SG_T("%s [%s]"), Name.c_str(), pGrid->Get_Name()).c_str()
+				: Name.c_str()
+			);
+
+			m_pGrids->Add_Item(pGrid);
+
+			DataObject_Add			(pGrid);
+			DataObject_Set_Colors	(pGrid, CSG_Colors(100, SG_COLORS_BLACK_WHITE, false));
+		}
+    }
+
+	//-----------------------------------------------------
+	return( n > 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CGDAL_Import::Set_Transformation(CSG_Grid **ppGrid, const CSG_Vector &A, const CSG_Matrix &B)
+{
+	//-----------------------------------------------------
+	int			x, y;
+	double		z;
+	TSG_Rect	r;
+	CSG_Vector	vImage(2), vWorld(2);
+	CSG_Matrix	BInv(B.Get_Inverse());
+	CSG_Grid	*pImage, *pWorld;
+
+	//-----------------------------------------------------
+	pImage		= *ppGrid;
+
+	//-----------------------------------------------------
+	vImage[0]	= pImage->Get_XMin();	vImage[1]	= pImage->Get_YMin();	vWorld	= B * vImage + A;
+	r.xMin	= r.xMax	= vWorld[0];
+	r.yMin	= r.yMax	= vWorld[1];
+
+	vImage[0]	= pImage->Get_XMin();	vImage[1]	= pImage->Get_YMax();	vWorld	= B * vImage + A;
+	if( r.xMin > vWorld[0] )	r.xMin	= vWorld[0];	else if( r.xMax < vWorld[0] )	r.xMax	= vWorld[0];
+	if( r.yMin > vWorld[1] )	r.yMin	= vWorld[1];	else if( r.yMax < vWorld[1] )	r.yMax	= vWorld[1];
+
+	vImage[0]	= pImage->Get_XMax();	vImage[1]	= pImage->Get_YMax();	vWorld	= B * vImage + A;
+	if( r.xMin > vWorld[0] )	r.xMin	= vWorld[0];	else if( r.xMax < vWorld[0] )	r.xMax	= vWorld[0];
+	if( r.yMin > vWorld[1] )	r.yMin	= vWorld[1];	else if( r.yMax < vWorld[1] )	r.yMax	= vWorld[1];
+
+	vImage[0]	= pImage->Get_XMax();	vImage[1]	= pImage->Get_YMin();	vWorld	= B * vImage + A;
+	if( r.xMin > vWorld[0] )	r.xMin	= vWorld[0];	else if( r.xMax < vWorld[0] )	r.xMax	= vWorld[0];
+	if( r.yMin > vWorld[1] )	r.yMin	= vWorld[1];	else if( r.yMax < vWorld[1] )	r.yMax	= vWorld[1];
+
+	z	= fabs(B[0][0]) < fabs(B[1][1]) ? fabs(B[0][0]) : fabs(B[1][1]);	// guess a suitable cellsize; could be improved...
+	x	= 1 + (int)((r.xMax - r.xMin) / z);
+	y	= 1 + (int)((r.yMax - r.yMin) / z);
+
+	//-----------------------------------------------------
+	pWorld		= *ppGrid	= SG_Create_Grid(pImage->Get_Type(), x, y, z, r.xMin, r.yMin);
+
+	for(y=0, vWorld[1]=pWorld->Get_YMin(); y<pWorld->Get_NY() && Set_Progress(y, pWorld->Get_NY()); y++, vWorld[1]+=pWorld->Get_Cellsize())
+	{
+		for(x=0, vWorld[0]=pWorld->Get_XMin(); x<pWorld->Get_NX(); x++, vWorld[0]+=pWorld->Get_Cellsize())
+		{
+			vImage	= BInv * (vWorld - A);
+
+			if( pImage->Get_Value(vImage[0], vImage[1], z, GRID_INTERPOLATION_NearestNeighbour, false, true) )
+			{
+				pWorld->Set_Value(x, y, z);
+			}
+			else
+			{
+				pWorld->Set_NoData(x, y);
+			}
+		}
+	}
+
+	delete(pImage);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool	SG_GDAL_Import	(const CSG_String &File_Name)
+{
+	CGDAL_Import	Import;
+
+	if(	!Import.Get_Parameters()->Set_Parameter(SG_T("FILES"), PARAMETER_TYPE_FilePath, File_Name) )
+	{
+		return( false );
+	}
+
+	if(	!Import.Execute() )
+	{
+		return( false );
+	}
+
+	CSG_Parameter_Grid_List	*pGrids	= Import.Get_Parameters()->Get_Parameter(SG_T("GRIDS"))->asGridList();
+
+	for(int i=0; i<pGrids->Get_Count(); i++)
+	{
+		SG_UI_DataObject_Add(pGrids->asGrid(i), SG_UI_DATAOBJECT_UPDATE_ONLY);
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/gdal/io_gdal/gdal_import.h b/src/modules_io/gdal/io_gdal/gdal_import.h
index 0bbc714..89146aa 100644
--- a/src/modules_io/gdal/io_gdal/gdal_import.h
+++ b/src/modules_io/gdal/io_gdal/gdal_import.h
@@ -1,102 +1,110 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    gdal_import.h                      //
-//                                                       //
-//            Copyright (C) 2007 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__gdal_import_H
-#define HEADER_INCLUDED__gdal_import_H
-
-//---------------------------------------------------------
-#include "gdal_driver.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CGDAL_Import : public CSG_Module
-{
-public:
-	CGDAL_Import(void);
-
-
-protected:
-
-	virtual bool				On_Execute			(void);
-
-
-private:
-
-	CSG_Parameter_Grid_List		*m_pGrids;
-
-
-	bool						Load_Sub			(CGDAL_System &System, const CSG_String &Name);
-	bool						Load				(CGDAL_System &System, const CSG_String &Name);
-
-	void						Set_Transformation	(CSG_Grid **ppGrid, const CSG_Vector &A, const CSG_Matrix &B);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__gdal_import_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    gdal_import.h                      //
+//                                                       //
+//            Copyright (C) 2007 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__gdal_import_H
+#define HEADER_INCLUDED__gdal_import_H
+
+//---------------------------------------------------------
+#include "gdal_driver.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class io_gdal_EXPORT CGDAL_Import : public CSG_Module
+{
+public:
+	CGDAL_Import(void);
+
+
+protected:
+
+	virtual bool				On_Execute			(void);
+
+
+private:
+
+	CSG_Parameter_Grid_List		*m_pGrids;
+
+
+	bool						Load_Sub			(CSG_GDAL_DataSet &DataSet, const CSG_String &Name);
+	bool						Load				(CSG_GDAL_DataSet &DataSet, const CSG_String &Name);
+
+	void						Set_Transformation	(CSG_Grid **ppGrid, const CSG_Vector &A, const CSG_Matrix &B);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+io_gdal_EXPORT	bool	SG_GDAL_Import	(const CSG_String &File_Name);
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__gdal_import_H
diff --git a/src/modules_io/gdal/io_gdal/ogr_driver.cpp b/src/modules_io/gdal/io_gdal/ogr_driver.cpp
index 4f4641c..f1c61ad 100644
--- a/src/modules_io/gdal/io_gdal/ogr_driver.cpp
+++ b/src/modules_io/gdal/io_gdal/ogr_driver.cpp
@@ -1,687 +1,723 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    ogr_driver.cpp                     //
-//                                                       //
-//            Copyright (C) 2008 by O. Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "ogr_driver.h"
-
-#include <ogr_core.h>
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-COGR_Driver		g_OGR_Driver;
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-COGR_Driver::COGR_Driver(void)
-{
-	OGRRegisterAll();
-
-	m_pManager	= OGRSFDriverRegistrar::GetRegistrar();
-}
-
-//---------------------------------------------------------
-COGR_Driver::~COGR_Driver(void)
-{
-//	OGRCleanupAll();	
-}
-
-//---------------------------------------------------------
-OGRSFDriver * COGR_Driver::Get_Driver(const CSG_String &Name)
-{
-	return( m_pManager ? m_pManager->GetDriverByName(SG_STR_SGTOMB(Name)) : NULL );
-}
-
-//---------------------------------------------------------
-bool COGR_Driver::Can_Read(int iDriver)
-{
-	return( Get_Driver(iDriver) != NULL );
-}
-
-bool COGR_Driver::Can_Write(int iDriver)
-{
-	return( Get_Driver(iDriver) != NULL );//&& Get_Driver(iDriver)->TestCapability(ODrCCreateDataSource) );
-}
-
-//---------------------------------------------------------
-CSG_String COGR_Driver::Get_Description(int iDriver)
-{
-	OGRSFDriver	*pDriver	= m_pManager->GetDriver(iDriver);
-	CSG_String	s;
-
-	s	+= pDriver->TestCapability(ODrCCreateDataSource)	? SG_T("\n[x] ") : SG_T("\n[ ] ");
-	s	+= _TL("create data source");
-
-	s	+= pDriver->TestCapability(ODrCDeleteDataSource)	? SG_T("\n[x] ") : SG_T("\n[ ] ");
-	s	+= _TL("delete data source");
-
-/*	s	+= pDriver->TestCapability(ODsCCreateLayer)			? SG_T("\n[x]") : SG_T("\n[ ]");
-	s	+= _TL("create layer");
-
-	s	+= pDriver->TestCapability(ODsCDeleteLayer)			? SG_T("\n[x]") : SG_T("\n[ ]");
-	s	+= _TL("delete layer");
-
-	s	+= pDriver->TestCapability(OLCDeleteFeature)		? SG_T("\n[x]") : SG_T("\n[ ]");
-	s	+= _TL("delete feature");
-
-	s	+= pDriver->TestCapability(OLCRandomRead)			? SG_T("\n[x]") : SG_T("\n[ ]");
-	s	+= _TL("random read");
-
-	s	+= pDriver->TestCapability(OLCRandomWrite)			? SG_T("\n[x]") : SG_T("\n[ ]");
-	s	+= _TL("random write");
-
-	s	+= pDriver->TestCapability(OLCSequentialWrite)		? SG_T("\n[x]") : SG_T("\n[ ]");
-	s	+= _TL("sequential write");
-/**/
-
-	return( SG_STR_MBTOSG(s) );
-}
-
-//---------------------------------------------------------
-TSG_Shape_Type COGR_Driver::Get_Type(OGRwkbGeometryType Type)
-{
-	switch( Type )
-	{
-	case wkbPoint:					// 0-dimensional geometric object, standard WKB
-		return( SHAPE_TYPE_Point );
-
-	case wkbMultiPoint:				// GeometryCollection of Points, standard WKB
-		return( SHAPE_TYPE_Points );
-
-	case wkbLineString:				// 1-dimensional geometric object with linear interpolation between Points, standard WKB
-	case wkbMultiLineString:		// GeometryCollection of LineStrings, standard WKB
-		return( SHAPE_TYPE_Line );
-
-	case wkbPolygon:				// planar 2-dimensional geometric object defined by 1 exterior boundary and 0 or more interior boundaries, standard WKB
-	case wkbMultiPolygon:			// GeometryCollection of Polygons, standard WKB
-		return( SHAPE_TYPE_Polygon );
-
-	default:
-	case wkbUnknown:				// unknown type, non-standard
-	case wkbGeometryCollection:		// geometric object that is a collection of 1 or more geometric objects, standard WKB
-	case wkbNone:					// non-standard, for pure attribute records
-	case wkbLinearRing:				// non-standard, just for createGeometry()
-	case wkbPoint25D:				// 2.5D extension as per 99-402
-	case wkbLineString25D:			// 2.5D extension as per 99-402
-	case wkbPolygon25D:				// 2.5D extension as per 99-402
-	case wkbMultiPoint25D:			// 2.5D extension as per 99-402
-	case wkbMultiLineString25D:		// 2.5D extension as per 99-402
-	case wkbMultiPolygon25D:		// 2.5D extension as per 99-402
-	case wkbGeometryCollection25D:	// 2.5D extension as per 99-402 
-		return( SHAPE_TYPE_Undefined );
-	}
-}
-
-//---------------------------------------------------------
-OGRwkbGeometryType COGR_Driver::Get_Type(TSG_Shape_Type Type)
-{
-	switch( Type )
-	{
-	case SHAPE_TYPE_Point:	 	return( wkbPoint );				// point
-	case SHAPE_TYPE_Points: 	return( wkbMultiPoint );		// points
-	case SHAPE_TYPE_Line: 		return( wkbMultiLineString );	// line
-	case SHAPE_TYPE_Polygon:	return( wkbMultiPolygon );		// polygon
-
-	default:					return( wkbUnknown );
-	}
-}
-
-//---------------------------------------------------------
-TSG_Data_Type COGR_Driver::Get_Type(OGRFieldType Type)
-{
-	switch( Type )
-	{
-	case OFTInteger:		// Simple 32bit integer
-		return( SG_DATATYPE_Int );
-
-	case OFTReal:			// Double Precision floating point
-		return( SG_DATATYPE_Double );
-
-	case OFTString:			// String of ASCII chars
-		return( SG_DATATYPE_String );
-
-	case OFTDateTime:		// Date and Time 
-		return( SG_DATATYPE_Date );
-
-	default:
-	case OFTIntegerList:	// List of 32bit integers
-	case OFTRealList:		// List of doubles
-	case OFTStringList:		// Array of strings
-	case OFTWideString:		// deprecated
-	case OFTWideStringList:	// deprecated
-	case OFTBinary:			// Raw Binary data
-	case OFTDate:			// Date
-	case OFTTime:			// Time
-		return( SG_DATATYPE_Undefined );
-	}
-}
-
-//---------------------------------------------------------
-OGRFieldType COGR_Driver::Get_Type(TSG_Data_Type Type)
-{
-	switch( Type )
-	{
-	default:
-	case SG_DATATYPE_String:
-	case SG_DATATYPE_Date:
-		return( OFTString );
-
-	case SG_DATATYPE_Byte:
-	case SG_DATATYPE_Char:
-	case SG_DATATYPE_Word:
-	case SG_DATATYPE_Short:
-	case SG_DATATYPE_DWord:
-	case SG_DATATYPE_Int:
-	case SG_DATATYPE_ULong:
-	case SG_DATATYPE_Long:
-	case SG_DATATYPE_Color:
-		return( OFTInteger );
-
-	case SG_DATATYPE_Float:
-	case SG_DATATYPE_Double:
-		return( OFTReal );
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-COGR_DataSource::COGR_DataSource(void)
-{
-	m_pDataSource	= NULL;
-}
-
-COGR_DataSource::COGR_DataSource(const CSG_String &File)
-{
-	m_pDataSource	= NULL;
-
-	Create(File);
-}
-
-//---------------------------------------------------------
-COGR_DataSource::~COGR_DataSource(void)
-{
-	Destroy();
-}
-
-//---------------------------------------------------------
-bool COGR_DataSource::Create(const CSG_String &File)
-{
-	Destroy();
-
-	m_pDataSource	= OGRSFDriverRegistrar::Open(SG_STR_SGTOMB(File));
-
-	return( m_pDataSource != NULL );
-}
-
-bool COGR_DataSource::Create(const CSG_String &File, const CSG_String &DriverName)
-{
-	OGRSFDriver	*pDriver;
-
-	Destroy();
-
-	if( (pDriver = g_OGR_Driver.Get_Driver(DriverName)) != NULL )
-	{
-		m_pDataSource	= pDriver->CreateDataSource(SG_STR_SGTOMB(File), NULL);
-	}
-
-	return( m_pDataSource != NULL );
-}
-
-//---------------------------------------------------------
-bool COGR_DataSource::Destroy(void)
-{
-	if( m_pDataSource )
-	{
-		OGRDataSource::DestroyDataSource(m_pDataSource);
-
-		m_pDataSource	= NULL;
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int COGR_DataSource::Get_Count(void)
-{
-	if( m_pDataSource )
-	{
-		return( m_pDataSource->GetLayerCount() );
-	}
-
-	return( 0 );
-}
-
-//---------------------------------------------------------
-OGRLayer * COGR_DataSource::Get_Layer(int iLayer)
-{
-	if( m_pDataSource && iLayer >= 0 && iLayer < m_pDataSource->GetLayerCount() )
-	{
-		return( m_pDataSource->GetLayer(iLayer) );
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-TSG_Shape_Type COGR_DataSource::Get_Type(int iLayer)
-{
-	if( m_pDataSource && iLayer >= 0 && iLayer < m_pDataSource->GetLayerCount() )
-	{
-		return( COGR_Driver::Get_Type(m_pDataSource->GetLayer(iLayer)->GetLayerDefn()->GetGeomType()) );
-	}
-
-	return( SHAPE_TYPE_Undefined );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Shapes * COGR_DataSource::Read_Shapes(int iLayer)
-{
-	OGRLayer	*pLayer	= Get_Layer(iLayer);
-
-	//-----------------------------------------------------
-	if( pLayer && Get_Type(iLayer) != SHAPE_TYPE_Undefined )
-	{
-		int				iField;
-		OGRFeature		*pFeature;
-		OGRFeatureDefn	*pDef		= pLayer->GetLayerDefn();
-		CSG_Shapes		*pShapes	= SG_Create_Shapes(Get_Type(iLayer), CSG_String(pDef->GetName()));
-
-		for(iField=0; iField<pDef->GetFieldCount(); iField++)
-		{
-			OGRFieldDefn	*pDefField	= pDef->GetFieldDefn(iField);
-
-			pShapes->Add_Field(pDefField->GetNameRef(), COGR_Driver::Get_Type(pDefField->GetType()));
-		}
-
-		pLayer->ResetReading();
-
-		//-------------------------------------------------
-		while( (pFeature = pLayer->GetNextFeature()) != NULL && SG_UI_Process_Get_Okay(false) )
-		{
-			OGRGeometry	*pGeometry	= pFeature->GetGeometryRef();
-
-			if( pGeometry != NULL )
-			{
-				CSG_Shape	*pShape	= pShapes->Add_Shape();
-
-				for(iField=0; iField<pDef->GetFieldCount(); iField++)
-				{
-					OGRFieldDefn	*pDefField	= pDef->GetFieldDefn(iField);
-
-					switch( pDefField->GetType() )
-					{
-					default:			pShape->Set_Value(iField, SG_STR_MBTOSG(pFeature->GetFieldAsString (iField)));	break;
-					case OFTString:		pShape->Set_Value(iField, SG_STR_MBTOSG(pFeature->GetFieldAsString (iField)));	break;
-					case OFTInteger:	pShape->Set_Value(iField, pFeature->GetFieldAsInteger(iField));	break;
-					case OFTReal:		pShape->Set_Value(iField, pFeature->GetFieldAsDouble (iField));	break;
-					}
-				}
-
-				//-----------------------------------------
-				if( _Read_Geometry(pShape, pGeometry) == false )
-				{
-					pShapes->Del_Shape(pShape);
-				}
-			}
-
-			OGRFeature::DestroyFeature(pFeature);
-		}
-
-		return( pShapes );
-	}
-
-	//-----------------------------------------------------
-	return( NULL );
-}
-
-//---------------------------------------------------------
-bool COGR_DataSource::_Read_Geometry(CSG_Shape *pShape, OGRGeometry *pGeometry)
-{
-	if( pShape && pGeometry )
-	{
-		switch( pGeometry->getGeometryType() )
-		{
-		//-------------------------------------------------
-		case wkbPoint:				// 0-dimensional geometric object, standard WKB
-			pShape->Add_Point(((OGRPoint *)pGeometry)->getX(), ((OGRPoint *)pGeometry)->getY());
-			return( true );
-
-		//-------------------------------------------------
-		case wkbLineString:			// 1-dimensional geometric object with linear interpolation between Points, standard WKB
-			return( _Read_Line(pShape, (OGRLineString *)pGeometry) );
-
-		//-------------------------------------------------
-		case wkbPolygon:			// planar 2-dimensional geometric object defined by 1 exterior boundary and 0 or more interior boundaries, standard WKB
-			return( _Read_Polygon(pShape, (OGRPolygon *)pGeometry) );
-
-		//-------------------------------------------------
-		case wkbMultiPoint:			// GeometryCollection of Points, standard WKB
-		case wkbMultiLineString:	// GeometryCollection of LineStrings, standard WKB
-		case wkbMultiPolygon:		// GeometryCollection of Polygons, standard WKB
-			{
-				for(int i=0; i<((OGRGeometryCollection *)pGeometry)->getNumGeometries(); i++)
-				{
-					if( _Read_Geometry(pShape, ((OGRGeometryCollection *)pGeometry)->getGeometryRef(i)) == false )
-					{
-						return( false );
-					}
-				}
-			}
-
-			return( true );
-
-		//-------------------------------------------------
-		default:
-			break;
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool COGR_DataSource::_Read_Line(CSG_Shape *pShape, OGRLineString *pLine)
-{
-	if( pShape && pLine && pLine->getNumPoints() > 0 )
-	{
-		int		iPart	= pShape->Get_Part_Count();
-
-		for(int iPoint=0; iPoint<pLine->getNumPoints(); iPoint++)
-		{
-			pShape->Add_Point(pLine->getX(iPoint), pLine->getY(iPoint), iPart);
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool COGR_DataSource::_Read_Polygon(CSG_Shape *pShape, OGRPolygon *pPolygon)
-{
-	if( pShape && pPolygon )
-	{
-		_Read_Line(pShape, pPolygon->getExteriorRing());
-
-		for(int i=0; i<pPolygon->getNumInteriorRings(); i++)
-		{
-			pPolygon->getInteriorRing(i);
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool COGR_DataSource::Write_Shapes(CSG_Shapes *pShapes)
-{
-	OGRLayer	*pLayer;
-
-	//-----------------------------------------------------
-	if( m_pDataSource && pShapes && pShapes->is_Valid() && (pLayer = m_pDataSource->CreateLayer(SG_STR_SGTOMB(pShapes->Get_Name()), NULL, g_OGR_Driver.Get_Type(pShapes->Get_Type()))) != NULL )
-	{
-		bool			bResult	= true;
-		int				iField;
-
-		//-------------------------------------------------
-		for(iField=0; iField<pShapes->Get_Field_Count() && bResult; iField++)
-		{
-			OGRFieldDefn	DefField(SG_STR_SGTOMB(pShapes->Get_Field_Name(iField)), g_OGR_Driver.Get_Type(pShapes->Get_Field_Type(iField)));
-
-			//	DefField.SetWidth(32);
-
-			if( pLayer->CreateField(&DefField) != OGRERR_NONE )
-			{
-				bResult	= false;
-			}
-		}
-
-		//-------------------------------------------------
-		for(int iShape=0; iShape<pShapes->Get_Count() && bResult && SG_UI_Process_Set_Progress(iShape, pShapes->Get_Count()); iShape++)
-		{
-			CSG_Shape	*pShape		= pShapes->Get_Shape(iShape);
-			OGRFeature	*pFeature	= OGRFeature::CreateFeature(pLayer->GetLayerDefn());
-
-			for(iField=0; iField<pShapes->Get_Field_Count(); iField++)
-			{
-				switch( pShapes->Get_Field_Type(iField) )
-				{
-				default:
-				case SG_DATATYPE_Char:
-				case SG_DATATYPE_String:
-				case SG_DATATYPE_Date:
-					pFeature->SetField(iField, SG_STR_SGTOMB(pShape->asString(iField)));
-					break;
-
-				case SG_DATATYPE_Short:
-				case SG_DATATYPE_Int:
-				case SG_DATATYPE_Long:
-				case SG_DATATYPE_Color:
-					pFeature->SetField(iField, pShape->asInt(iField));
-					break;
-
-				case SG_DATATYPE_Float:
-				case SG_DATATYPE_Double:
-					pFeature->SetField(iField, pShape->asDouble(iField));
-					break;
-				}
-			}
-
-			if( !_Write_Geometry(pShape, pFeature) || pLayer->CreateFeature(pFeature) != OGRERR_NONE )
-			{
-				bResult	= false;
-			}
-
-			OGRFeature::DestroyFeature(pFeature);
-		}
-
-		//-------------------------------------------------
-		return( bResult );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool COGR_DataSource::_Write_Geometry(CSG_Shape *pShape, OGRFeature *pFeature)
-{
-	if( pShape && pFeature )
-	{
-		int					iPoint, iPart;
-		TSG_Point			sgPoint;
-		OGRPoint			Point;
-		OGRMultiPoint		Points;
-		OGRLineString		Line;
-		OGRMultiLineString	Lines;
-		OGRLinearRing		Ring;
-		OGRPolygon			Polygon;
-
-		switch( pShape->Get_Type() )
-		{
-		//-------------------------------------------------
-		case SHAPE_TYPE_Point:
-			sgPoint	= pShape->Get_Point(0);
-			Point.setX(sgPoint.x);
-			Point.setY(sgPoint.y);
-
-			return( pFeature->SetGeometry(&Point) == OGRERR_NONE );
-
-		//-------------------------------------------------
-		case SHAPE_TYPE_Points:
-			for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
-			{
-				for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
-				{
-					sgPoint	= pShape->Get_Point(iPoint, iPart);
-					Point.setX(sgPoint.x);
-					Point.setY(sgPoint.y);
-
-					Points.addGeometry(&Point);
-				}
-			}
-
-			return( pFeature->SetGeometry(&Points) == OGRERR_NONE );
-
-		//-------------------------------------------------
-		case SHAPE_TYPE_Line:
-			if( pShape->Get_Part_Count() == 1 )
-			{
-				_Write_Line(pShape, &Line, 0);
-
-				return( pFeature->SetGeometry(&Line) == OGRERR_NONE );
-			}
-			else
-			{
-				for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
-				{
-					if( _Write_Line(pShape, &Line, iPart) )
-					{
-						Lines.addGeometry(&Line);
-					}
-				}
-
-				return( pFeature->SetGeometry(&Lines) == OGRERR_NONE );
-			}
-
-		//-------------------------------------------------
-		case SHAPE_TYPE_Polygon:
-			for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
-			{
-				if( _Write_Line(pShape, &Ring, iPart) )
-				{
-					Polygon.addRing(&Ring);
-				}
-			}
-
-			return( pFeature->SetGeometry(&Polygon) == OGRERR_NONE );
-
-		//-------------------------------------------------
-		default:
-			break;
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool COGR_DataSource::_Write_Line(CSG_Shape *pShape, OGRLineString *pLine, int iPart)
-{
-	if( pLine && pShape && iPart >= 0 && iPart < pShape->Get_Part_Count() )
-	{
-		pLine->empty();
-
-		for(int iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
-		{
-			TSG_Point	sgPoint	= pShape->Get_Point(iPoint, iPart);
-
-			pLine->addPoint(sgPoint.x, sgPoint.y);
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    ogr_driver.cpp                     //
+//                                                       //
+//            Copyright (C) 2008 by O. Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "ogr_driver.h"
+
+#include <gdal_priv.h>
+#include <ogrsf_frmts.h>
+#include <ogr_core.h>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_OGR_Drivers		gSG_OGR_Drivers;
+
+const CSG_OGR_Drivers &	SG_Get_OGR_Drivers	(void)
+{
+	return( gSG_OGR_Drivers );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_OGR_Drivers::CSG_OGR_Drivers(void)
+{
+	OGRRegisterAll();
+
+	m_pDrivers	= OGRSFDriverRegistrar::GetRegistrar();
+}
+
+//---------------------------------------------------------
+CSG_OGR_Drivers::~CSG_OGR_Drivers(void)
+{
+//	OGRCleanupAll();	
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CSG_OGR_Drivers::Get_Count(void) const
+{
+	return( m_pDrivers->GetDriverCount() );
+}
+
+//---------------------------------------------------------
+OGRSFDriver * CSG_OGR_Drivers::Get_Driver(int Index) const
+{
+	return( m_pDrivers->GetDriver(Index) );
+}
+
+//---------------------------------------------------------
+OGRSFDriver * CSG_OGR_Drivers::Get_Driver(const CSG_String &Name) const
+{
+	return( m_pDrivers ? m_pDrivers->GetDriverByName(SG_STR_SGTOMB(Name)) : NULL );
+}
+
+//---------------------------------------------------------
+CSG_String CSG_OGR_Drivers::Get_Name(int Index) const
+{
+	return( SG_STR_MBTOSG(m_pDrivers->GetDriver(Index)->GetName()) );
+}
+
+//---------------------------------------------------------
+CSG_String CSG_OGR_Drivers::Get_Description(int Index) const
+{
+	OGRSFDriver	*pDriver	= m_pDrivers->GetDriver(Index);
+	CSG_String	s;
+
+	s	+= pDriver->TestCapability(ODrCCreateDataSource)	? SG_T("\n[x] ") : SG_T("\n[ ] ");
+	s	+= _TL("create data source");
+
+	s	+= pDriver->TestCapability(ODrCDeleteDataSource)	? SG_T("\n[x] ") : SG_T("\n[ ] ");
+	s	+= _TL("delete data source");
+
+/*	s	+= pDriver->TestCapability(ODsCCreateLayer)			? SG_T("\n[x]") : SG_T("\n[ ]");
+	s	+= _TL("create layer");
+
+	s	+= pDriver->TestCapability(ODsCDeleteLayer)			? SG_T("\n[x]") : SG_T("\n[ ]");
+	s	+= _TL("delete layer");
+
+	s	+= pDriver->TestCapability(OLCDeleteFeature)		? SG_T("\n[x]") : SG_T("\n[ ]");
+	s	+= _TL("delete feature");
+
+	s	+= pDriver->TestCapability(OLCRandomRead)			? SG_T("\n[x]") : SG_T("\n[ ]");
+	s	+= _TL("random read");
+
+	s	+= pDriver->TestCapability(OLCRandomWrite)			? SG_T("\n[x]") : SG_T("\n[ ]");
+	s	+= _TL("random write");
+
+	s	+= pDriver->TestCapability(OLCSequentialWrite)		? SG_T("\n[x]") : SG_T("\n[ ]");
+	s	+= _TL("sequential write");
+/**/
+
+	return( SG_STR_MBTOSG(s) );
+}
+
+//---------------------------------------------------------
+bool CSG_OGR_Drivers::Can_Read(int Index) const
+{
+	return( Get_Driver(Index) != NULL );
+}
+
+//---------------------------------------------------------
+bool CSG_OGR_Drivers::Can_Write(int Index) const
+{
+	return( Get_Driver(Index) != NULL );//&& Get_Driver(Index)->TestCapability(ODrCCreateDataSource) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+TSG_Shape_Type CSG_OGR_Drivers::Get_Shape_Type(int Type)
+{
+	switch( Type )
+	{
+	case wkbPoint:					// 0-dimensional geometric object, standard WKB
+		return( SHAPE_TYPE_Point );
+
+	case wkbMultiPoint:				// GeometryCollection of Points, standard WKB
+		return( SHAPE_TYPE_Points );
+
+	case wkbLineString:				// 1-dimensional geometric object with linear interpolation between Points, standard WKB
+	case wkbMultiLineString:		// GeometryCollection of LineStrings, standard WKB
+		return( SHAPE_TYPE_Line );
+
+	case wkbPolygon:				// planar 2-dimensional geometric object defined by 1 exterior boundary and 0 or more interior boundaries, standard WKB
+	case wkbMultiPolygon:			// GeometryCollection of Polygons, standard WKB
+		return( SHAPE_TYPE_Polygon );
+
+	default:
+	case wkbUnknown:				// unknown type, non-standard
+	case wkbGeometryCollection:		// geometric object that is a collection of 1 or more geometric objects, standard WKB
+	case wkbNone:					// non-standard, for pure attribute records
+	case wkbLinearRing:				// non-standard, just for createGeometry()
+	case wkbPoint25D:				// 2.5D extension as per 99-402
+	case wkbLineString25D:			// 2.5D extension as per 99-402
+	case wkbPolygon25D:				// 2.5D extension as per 99-402
+	case wkbMultiPoint25D:			// 2.5D extension as per 99-402
+	case wkbMultiLineString25D:		// 2.5D extension as per 99-402
+	case wkbMultiPolygon25D:		// 2.5D extension as per 99-402
+	case wkbGeometryCollection25D:	// 2.5D extension as per 99-402 
+		return( SHAPE_TYPE_Undefined );
+	}
+}
+
+//---------------------------------------------------------
+int CSG_OGR_Drivers::Get_Shape_Type(TSG_Shape_Type Type)
+{
+	switch( Type )
+	{
+	case SHAPE_TYPE_Point:	 	return( wkbPoint );				// point
+	case SHAPE_TYPE_Points: 	return( wkbMultiPoint );		// points
+	case SHAPE_TYPE_Line: 		return( wkbMultiLineString );	// line
+	case SHAPE_TYPE_Polygon:	return( wkbMultiPolygon );		// polygon
+
+	default:					return( wkbUnknown );
+	}
+}
+
+//---------------------------------------------------------
+TSG_Data_Type CSG_OGR_Drivers::Get_Data_Type(int Type)
+{
+	switch( Type )
+	{
+	case OFTInteger:		// Simple 32bit integer
+		return( SG_DATATYPE_Int );
+
+	case OFTReal:			// Double Precision floating point
+		return( SG_DATATYPE_Double );
+
+	case OFTString:			// String of ASCII chars
+		return( SG_DATATYPE_String );
+
+	case OFTDateTime:		// Date and Time 
+		return( SG_DATATYPE_Date );
+
+	default:
+	case OFTIntegerList:	// List of 32bit integers
+	case OFTRealList:		// List of doubles
+	case OFTStringList:		// Array of strings
+	case OFTWideString:		// deprecated
+	case OFTWideStringList:	// deprecated
+	case OFTBinary:			// Raw Binary data
+	case OFTDate:			// Date
+	case OFTTime:			// Time
+		return( SG_DATATYPE_Undefined );
+	}
+}
+
+//---------------------------------------------------------
+int CSG_OGR_Drivers::Get_Data_Type(TSG_Data_Type Type)
+{
+	switch( Type )
+	{
+	default:
+	case SG_DATATYPE_String:
+	case SG_DATATYPE_Date:
+		return( OFTString );
+
+	case SG_DATATYPE_Byte:
+	case SG_DATATYPE_Char:
+	case SG_DATATYPE_Word:
+	case SG_DATATYPE_Short:
+	case SG_DATATYPE_DWord:
+	case SG_DATATYPE_Int:
+	case SG_DATATYPE_ULong:
+	case SG_DATATYPE_Long:
+	case SG_DATATYPE_Color:
+		return( OFTInteger );
+
+	case SG_DATATYPE_Float:
+	case SG_DATATYPE_Double:
+		return( OFTReal );
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_OGR_DataSource::CSG_OGR_DataSource(void)
+{
+	m_pDataSource	= NULL;
+}
+
+CSG_OGR_DataSource::CSG_OGR_DataSource(const CSG_String &File)
+{
+	m_pDataSource	= NULL;
+
+	Create(File);
+}
+
+//---------------------------------------------------------
+CSG_OGR_DataSource::~CSG_OGR_DataSource(void)
+{
+	Destroy();
+}
+
+//---------------------------------------------------------
+bool CSG_OGR_DataSource::Create(const CSG_String &File)
+{
+	Destroy();
+
+	m_pDataSource	= OGRSFDriverRegistrar::Open(SG_STR_SGTOMB(File));
+
+	return( m_pDataSource != NULL );
+}
+
+bool CSG_OGR_DataSource::Create(const CSG_String &File, const CSG_String &DriverName)
+{
+	OGRSFDriver	*pDriver;
+
+	Destroy();
+
+	if( (pDriver = gSG_OGR_Drivers.Get_Driver(DriverName)) != NULL )
+	{
+		m_pDataSource	= pDriver->CreateDataSource(SG_STR_SGTOMB(File), NULL);
+	}
+
+	return( m_pDataSource != NULL );
+}
+
+//---------------------------------------------------------
+bool CSG_OGR_DataSource::Destroy(void)
+{
+	if( m_pDataSource )
+	{
+		OGRDataSource::DestroyDataSource(m_pDataSource);
+
+		m_pDataSource	= NULL;
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CSG_OGR_DataSource::Get_Count(void)
+{
+	if( m_pDataSource )
+	{
+		return( m_pDataSource->GetLayerCount() );
+	}
+
+	return( 0 );
+}
+
+//---------------------------------------------------------
+OGRLayer * CSG_OGR_DataSource::Get_Layer(int iLayer)
+{
+	if( m_pDataSource && iLayer >= 0 && iLayer < m_pDataSource->GetLayerCount() )
+	{
+		return( m_pDataSource->GetLayer(iLayer) );
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+TSG_Shape_Type CSG_OGR_DataSource::Get_Type(int iLayer)
+{
+	if( m_pDataSource && iLayer >= 0 && iLayer < m_pDataSource->GetLayerCount() )
+	{
+		return( CSG_OGR_Drivers::Get_Shape_Type(m_pDataSource->GetLayer(iLayer)->GetLayerDefn()->GetGeomType()) );
+	}
+
+	return( SHAPE_TYPE_Undefined );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Shapes * CSG_OGR_DataSource::Read(int iLayer)
+{
+	OGRLayer	*pLayer	= Get_Layer(iLayer);
+
+	//-----------------------------------------------------
+	if( pLayer && Get_Type(iLayer) != SHAPE_TYPE_Undefined )
+	{
+		int				iField;
+		OGRFeature		*pFeature;
+		OGRFeatureDefn	*pDef		= pLayer->GetLayerDefn();
+		CSG_Shapes		*pShapes	= SG_Create_Shapes(Get_Type(iLayer), CSG_String(pDef->GetName()));
+
+		for(iField=0; iField<pDef->GetFieldCount(); iField++)
+		{
+			OGRFieldDefn	*pDefField	= pDef->GetFieldDefn(iField);
+
+			pShapes->Add_Field(pDefField->GetNameRef(), CSG_OGR_Drivers::Get_Data_Type(pDefField->GetType()));
+		}
+
+		pLayer->ResetReading();
+
+		//-------------------------------------------------
+		while( (pFeature = pLayer->GetNextFeature()) != NULL && SG_UI_Process_Get_Okay(false) )
+		{
+			OGRGeometry	*pGeometry	= pFeature->GetGeometryRef();
+
+			if( pGeometry != NULL )
+			{
+				CSG_Shape	*pShape	= pShapes->Add_Shape();
+
+				for(iField=0; iField<pDef->GetFieldCount(); iField++)
+				{
+					OGRFieldDefn	*pDefField	= pDef->GetFieldDefn(iField);
+
+					switch( pDefField->GetType() )
+					{
+					default:			pShape->Set_Value(iField, SG_STR_MBTOSG(pFeature->GetFieldAsString (iField)));	break;
+					case OFTString:		pShape->Set_Value(iField, SG_STR_MBTOSG(pFeature->GetFieldAsString (iField)));	break;
+					case OFTInteger:	pShape->Set_Value(iField, pFeature->GetFieldAsInteger(iField));	break;
+					case OFTReal:		pShape->Set_Value(iField, pFeature->GetFieldAsDouble (iField));	break;
+					}
+				}
+
+				//-----------------------------------------
+				if( _Read_Geometry(pShape, pGeometry) == false )
+				{
+					pShapes->Del_Shape(pShape);
+				}
+			}
+
+			OGRFeature::DestroyFeature(pFeature);
+		}
+
+		return( pShapes );
+	}
+
+	//-----------------------------------------------------
+	return( NULL );
+}
+
+//---------------------------------------------------------
+bool CSG_OGR_DataSource::_Read_Geometry(CSG_Shape *pShape, OGRGeometry *pGeometry)
+{
+	if( pShape && pGeometry )
+	{
+		switch( pGeometry->getGeometryType() )
+		{
+		//-------------------------------------------------
+		case wkbPoint:				// 0-dimensional geometric object, standard WKB
+			pShape->Add_Point(((OGRPoint *)pGeometry)->getX(), ((OGRPoint *)pGeometry)->getY());
+			return( true );
+
+		//-------------------------------------------------
+		case wkbLineString:			// 1-dimensional geometric object with linear interpolation between Points, standard WKB
+			return( _Read_Line(pShape, (OGRLineString *)pGeometry) );
+
+		//-------------------------------------------------
+		case wkbPolygon:			// planar 2-dimensional geometric object defined by 1 exterior boundary and 0 or more interior boundaries, standard WKB
+			return( _Read_Polygon(pShape, (OGRPolygon *)pGeometry) );
+
+		//-------------------------------------------------
+		case wkbMultiPoint:			// GeometryCollection of Points, standard WKB
+		case wkbMultiLineString:	// GeometryCollection of LineStrings, standard WKB
+		case wkbMultiPolygon:		// GeometryCollection of Polygons, standard WKB
+			{
+				for(int i=0; i<((OGRGeometryCollection *)pGeometry)->getNumGeometries(); i++)
+				{
+					if( _Read_Geometry(pShape, ((OGRGeometryCollection *)pGeometry)->getGeometryRef(i)) == false )
+					{
+						return( false );
+					}
+				}
+			}
+
+			return( true );
+
+		//-------------------------------------------------
+		default:
+			break;
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_OGR_DataSource::_Read_Line(CSG_Shape *pShape, OGRLineString *pLine)
+{
+	if( pShape && pLine && pLine->getNumPoints() > 0 )
+	{
+		int		iPart	= pShape->Get_Part_Count();
+
+		for(int iPoint=0; iPoint<pLine->getNumPoints(); iPoint++)
+		{
+			pShape->Add_Point(pLine->getX(iPoint), pLine->getY(iPoint), iPart);
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_OGR_DataSource::_Read_Polygon(CSG_Shape *pShape, OGRPolygon *pPolygon)
+{
+	if( pShape && pPolygon )
+	{
+		_Read_Line(pShape, pPolygon->getExteriorRing());
+
+		for(int i=0; i<pPolygon->getNumInteriorRings(); i++)
+		{
+			pPolygon->getInteriorRing(i);
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_OGR_DataSource::Write(CSG_Shapes *pShapes)
+{
+	OGRLayer	*pLayer;
+
+	//-----------------------------------------------------
+	if( m_pDataSource && pShapes && pShapes->is_Valid() && (pLayer = m_pDataSource->CreateLayer(SG_STR_SGTOMB(pShapes->Get_Name()), NULL, (OGRwkbGeometryType)gSG_OGR_Drivers.Get_Shape_Type(pShapes->Get_Type()))) != NULL )
+	{
+		bool			bResult	= true;
+		int				iField;
+
+		//-------------------------------------------------
+		for(iField=0; iField<pShapes->Get_Field_Count() && bResult; iField++)
+		{
+			OGRFieldDefn	DefField(SG_STR_SGTOMB(pShapes->Get_Field_Name(iField)), (OGRFieldType)gSG_OGR_Drivers.Get_Data_Type(pShapes->Get_Field_Type(iField)));
+
+			//	DefField.SetWidth(32);
+
+			if( pLayer->CreateField(&DefField) != OGRERR_NONE )
+			{
+				bResult	= false;
+			}
+		}
+
+		//-------------------------------------------------
+		for(int iShape=0; iShape<pShapes->Get_Count() && bResult && SG_UI_Process_Set_Progress(iShape, pShapes->Get_Count()); iShape++)
+		{
+			CSG_Shape	*pShape		= pShapes->Get_Shape(iShape);
+			OGRFeature	*pFeature	= OGRFeature::CreateFeature(pLayer->GetLayerDefn());
+
+			for(iField=0; iField<pShapes->Get_Field_Count(); iField++)
+			{
+				switch( pShapes->Get_Field_Type(iField) )
+				{
+				default:
+				case SG_DATATYPE_Char:
+				case SG_DATATYPE_String:
+				case SG_DATATYPE_Date:
+					pFeature->SetField(iField, SG_STR_SGTOMB(pShape->asString(iField)));
+					break;
+
+				case SG_DATATYPE_Short:
+				case SG_DATATYPE_Int:
+				case SG_DATATYPE_Long:
+				case SG_DATATYPE_Color:
+					pFeature->SetField(iField, pShape->asInt(iField));
+					break;
+
+				case SG_DATATYPE_Float:
+				case SG_DATATYPE_Double:
+					pFeature->SetField(iField, pShape->asDouble(iField));
+					break;
+				}
+			}
+
+			if( !_Write_Geometry(pShape, pFeature) || pLayer->CreateFeature(pFeature) != OGRERR_NONE )
+			{
+				bResult	= false;
+			}
+
+			OGRFeature::DestroyFeature(pFeature);
+		}
+
+		//-------------------------------------------------
+		return( bResult );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_OGR_DataSource::_Write_Geometry(CSG_Shape *pShape, OGRFeature *pFeature)
+{
+	if( pShape && pFeature )
+	{
+		int					iPoint, iPart;
+		TSG_Point			sgPoint;
+		OGRPoint			Point;
+		OGRMultiPoint		Points;
+		OGRLineString		Line;
+		OGRMultiLineString	Lines;
+		OGRLinearRing		Ring;
+		OGRPolygon			Polygon;
+
+		switch( pShape->Get_Type() )
+		{
+		//-------------------------------------------------
+		case SHAPE_TYPE_Point:
+			sgPoint	= pShape->Get_Point(0);
+			Point.setX(sgPoint.x);
+			Point.setY(sgPoint.y);
+
+			return( pFeature->SetGeometry(&Point) == OGRERR_NONE );
+
+		//-------------------------------------------------
+		case SHAPE_TYPE_Points:
+			for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
+			{
+				for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
+				{
+					sgPoint	= pShape->Get_Point(iPoint, iPart);
+					Point.setX(sgPoint.x);
+					Point.setY(sgPoint.y);
+
+					Points.addGeometry(&Point);
+				}
+			}
+
+			return( pFeature->SetGeometry(&Points) == OGRERR_NONE );
+
+		//-------------------------------------------------
+		case SHAPE_TYPE_Line:
+			if( pShape->Get_Part_Count() == 1 )
+			{
+				_Write_Line(pShape, &Line, 0);
+
+				return( pFeature->SetGeometry(&Line) == OGRERR_NONE );
+			}
+			else
+			{
+				for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
+				{
+					if( _Write_Line(pShape, &Line, iPart) )
+					{
+						Lines.addGeometry(&Line);
+					}
+				}
+
+				return( pFeature->SetGeometry(&Lines) == OGRERR_NONE );
+			}
+
+		//-------------------------------------------------
+		case SHAPE_TYPE_Polygon:
+			for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
+			{
+				if( _Write_Line(pShape, &Ring, iPart) )
+				{
+					Polygon.addRing(&Ring);
+				}
+			}
+
+			return( pFeature->SetGeometry(&Polygon) == OGRERR_NONE );
+
+		//-------------------------------------------------
+		default:
+			break;
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_OGR_DataSource::_Write_Line(CSG_Shape *pShape, OGRLineString *pLine, int iPart)
+{
+	if( pLine && pShape && iPart >= 0 && iPart < pShape->Get_Part_Count() )
+	{
+		pLine->empty();
+
+		for(int iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
+		{
+			TSG_Point	sgPoint	= pShape->Get_Point(iPoint, iPart);
+
+			pLine->addPoint(sgPoint.x, sgPoint.y);
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/gdal/io_gdal/ogr_driver.h b/src/modules_io/gdal/io_gdal/ogr_driver.h
index 75a730a..80953d9 100644
--- a/src/modules_io/gdal/io_gdal/ogr_driver.h
+++ b/src/modules_io/gdal/io_gdal/ogr_driver.h
@@ -1,147 +1,152 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     ogr_driver.h                      //
-//                                                       //
-//            Copyright (C) 2008 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__ogr_driver_H
-#define HEADER_INCLUDED__ogr_driver_H
-
-//---------------------------------------------------------
-#include "MLB_Interface.h"
-
-#include <gdal_priv.h>
-#include <ogrsf_frmts.h>
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class COGR_Driver
-{
-public:
-	COGR_Driver(void);
-	virtual ~COGR_Driver(void);
-
-	int							Get_Count		(void)				{	return( m_pManager->GetDriverCount() );	}
-	CSG_String					Get_Name		(int iDriver)		{	return( SG_STR_MBTOSG(m_pManager->GetDriver(iDriver)->GetName()) );	}
-	CSG_String					Get_Description	(int iDriver);
-	OGRSFDriver *				Get_Driver		(int iDriver)		{	return( m_pManager->GetDriver(iDriver) );			}
-	OGRSFDriver *				Get_Driver		(const CSG_String &Name);
-
-	bool						Can_Read		(int iDriver);
-	bool						Can_Write		(int iDriver);
-
-	static TSG_Shape_Type		Get_Type		(OGRwkbGeometryType   Type);
-	static OGRwkbGeometryType	Get_Type		(TSG_Shape_Type       Type);
-	static TSG_Data_Type	Get_Type		(OGRFieldType         Type);
-	static OGRFieldType			Get_Type		(TSG_Data_Type Type);
-
-
-private:
-
-	OGRSFDriverRegistrar		*m_pManager;
-
-};
-
-//---------------------------------------------------------
-class COGR_DataSource
-{
-public:
-	COGR_DataSource(void);
-	COGR_DataSource(const CSG_String &File);
-	COGR_DataSource(const CSG_String &File, const CSG_String &DriverName);
-	virtual ~COGR_DataSource(void);
-
-	bool						Create			(const CSG_String &File);
-	bool						Create			(const CSG_String &File, const CSG_String &DriverName);
-	bool						Destroy			(void);
-
-	int							Get_Count		(void);
-	OGRLayer *					Get_Layer		(int iLayer);
-	TSG_Shape_Type				Get_Type		(int iLayer);
-
-	CSG_Shapes *				Read_Shapes		(int iLayer);
-	bool						Write_Shapes	(CSG_Shapes *pShapes);
-
-
-private:
-
-	OGRDataSource				*m_pDataSource;
-
-
-	bool						_Read_Geometry	(CSG_Shape *pShape, OGRGeometry *pGeometry);
-	bool						_Read_Line		(CSG_Shape *pShape, OGRLineString *pLine);
-	bool						_Read_Polygon	(CSG_Shape *pShape, OGRPolygon *pPolygon);
-
-	bool						_Write_Geometry	(CSG_Shape *pShape, OGRFeature *pFeature);
-	bool						_Write_Line		(CSG_Shape *pShape, OGRLineString *pLine, int iPart);
-
-};
-
-//---------------------------------------------------------
-extern COGR_Driver	g_OGR_Driver;
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__ogr_driver_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     ogr_driver.h                      //
+//                                                       //
+//            Copyright (C) 2008 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__ogr_driver_H
+#define HEADER_INCLUDED__ogr_driver_H
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class io_gdal_EXPORT CSG_OGR_Drivers
+{
+public:
+	CSG_OGR_Drivers(void);
+	virtual ~CSG_OGR_Drivers(void);
+
+	int							Get_Count			(void)						const;
+
+	class OGRSFDriver *			Get_Driver			(const CSG_String &Name)	const;
+	class OGRSFDriver *			Get_Driver			(int Index)					const;
+
+	CSG_String					Get_Name			(int Index)					const;
+	CSG_String					Get_Description		(int Index)					const;
+
+	bool						Can_Read			(int Index)					const;
+	bool						Can_Write			(int Index)					const;
+
+	static TSG_Shape_Type		Get_Shape_Type		(int            Type);
+	static int					Get_Shape_Type		(TSG_Shape_Type Type);
+
+	static TSG_Data_Type		Get_Data_Type		(int            Type);
+	static int					Get_Data_Type		(TSG_Data_Type  Type);
+
+
+private:
+
+	class OGRSFDriverRegistrar	*m_pDrivers;
+
+};
+
+//---------------------------------------------------------
+io_gdal_EXPORT const CSG_OGR_Drivers &	SG_Get_OGR_Drivers	(void);
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class io_gdal_EXPORT CSG_OGR_DataSource
+{
+public:
+	CSG_OGR_DataSource(void);
+	CSG_OGR_DataSource(const CSG_String &File);
+	CSG_OGR_DataSource(const CSG_String &File, const CSG_String &DriverName);
+	virtual ~CSG_OGR_DataSource(void);
+
+	bool						Create				(const CSG_String &File);
+	bool						Create				(const CSG_String &File, const CSG_String &DriverName);
+	bool						Destroy				(void);
+
+	int							Get_Count			(void);
+	class OGRLayer *			Get_Layer			(int iLayer);
+	TSG_Shape_Type				Get_Type			(int iLayer);
+
+	CSG_Shapes *				Read				(int iLayer);
+	bool						Write				(CSG_Shapes *pShapes);
+
+
+private:
+
+	class OGRDataSource			*m_pDataSource;
+
+
+	bool						_Read_Geometry		(CSG_Shape *pShape, class OGRGeometry *pGeometry);
+	bool						_Read_Line			(CSG_Shape *pShape, class OGRLineString *pLine);
+	bool						_Read_Polygon		(CSG_Shape *pShape, class OGRPolygon *pPolygon);
+
+	bool						_Write_Geometry		(CSG_Shape *pShape, class OGRFeature *pFeature);
+	bool						_Write_Line			(CSG_Shape *pShape, class OGRLineString *pLine, int iPart);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__ogr_driver_H
diff --git a/src/modules_io/gdal/io_gdal/ogr_export.cpp b/src/modules_io/gdal/io_gdal/ogr_export.cpp
index 20e4ca1..591b94e 100644
--- a/src/modules_io/gdal/io_gdal/ogr_export.cpp
+++ b/src/modules_io/gdal/io_gdal/ogr_export.cpp
@@ -1,165 +1,161 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    ogr_export.cpp                     //
-//                                                       //
-//            Copyright (C) 2008 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "ogr_export.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-COGR_Export::COGR_Export(void)
-{
-	Set_Name		(_TL("OGR: Export Vector Data"));
-
-	Set_Author		(SG_T("(c) 2008 by O.Conrad"));
-
-	CSG_String	Description, Formats;
-
-	Description	= _TW(
-		"The \"GDAL Vector Data Export\" module exports vector data to various file formats using the "
-		"\"Geospatial Data Abstraction Library\" (GDAL) by Frank Warmerdam. "
-		"For more information have a look at the GDAL homepage:\n"
-		"  <a target=\"_blank\" href=\"http://www.gdal.org/\">"
-		"  http://www.gdal.org</a>\n"
-		"\n"
-		"Following vector formats are currently supported:\n"
-		"<table border=\"1\"><tr><th>Name</th><th>Description</th></tr>\n"
-	);
-
-	for(int i=0; i<g_OGR_Driver.Get_Count(); i++)
-    {
-		if( g_OGR_Driver.Can_Write(i) )
-		{
-			Description	+= CSG_String::Format(SG_T("<tr><td>%s</td><td>%s</td></tr>\n"),
-				g_OGR_Driver.Get_Name(i).c_str(),
-				g_OGR_Driver.Get_Description(i).c_str()
-			);
-
-			Formats		+= CSG_String::Format(SG_T("%s|"), g_OGR_Driver.Get_Name(i).c_str());
-		}
-    }
-
-	Description	+= SG_T("</table>");
-
-	Set_Description(Description);
-
-	//-----------------------------------------------------
-	Parameters.Add_Shapes(
-		NULL, "SHAPES"	, _TL("Shapes"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	Parameters.Add_FilePath(
-		NULL, "FILE"	, _TL("File"),
-		_TL(""),
-		NULL, NULL, true
-	);
-
-	Parameters.Add_Choice(
-		NULL, "FORMAT"	, _TL("Format"),
-		_TL(""),
-		Formats
-	);
-}
-
-//---------------------------------------------------------
-COGR_Export::~COGR_Export(void)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool COGR_Export::On_Execute(void)
-{
-	CSG_String		File_Name;
-	CSG_Shapes		*pShapes;
-	COGR_DataSource	ds;
-
-	//-----------------------------------------------------
-	pShapes		= Parameters("SHAPES")	->asShapes();
-	File_Name	= Parameters("FILE")	->asString();
-
-	//-----------------------------------------------------
-	if( ds.Create(File_Name, Parameters("FORMAT")->asString()) == false )
-	{
-		Message_Add(_TL("Could not create data source."));
-	}
-	else if( ds.Write_Shapes(pShapes) )
-	{
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    ogr_export.cpp                     //
+//                                                       //
+//            Copyright (C) 2008 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "ogr_export.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+COGR_Export::COGR_Export(void)
+{
+	Set_Name		(_TL("OGR: Export Vector Data"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2008"));
+
+	CSG_String	Description, Formats;
+
+	Description	= _TW(
+		"The \"GDAL Vector Data Export\" module exports vector data to various file formats using the "
+		"\"Geospatial Data Abstraction Library\" (GDAL) by Frank Warmerdam. "
+		"For more information have a look at the GDAL homepage:\n"
+		"  <a target=\"_blank\" href=\"http://www.gdal.org/\">"
+		"  http://www.gdal.org</a>\n"
+		"\n"
+		"Following vector formats are currently supported:\n"
+		"<table border=\"1\"><tr><th>Name</th><th>Description</th></tr>\n"
+	);
+
+	for(int i=0; i<SG_Get_OGR_Drivers().Get_Count(); i++)
+    {
+		if( SG_Get_OGR_Drivers().Can_Write(i) )
+		{
+			Description	+= CSG_String::Format(SG_T("<tr><td>%s</td><td>%s</td></tr>\n"),
+				SG_Get_OGR_Drivers().Get_Name(i).c_str(),
+				SG_Get_OGR_Drivers().Get_Description(i).c_str()
+			);
+
+			Formats		+= CSG_String::Format(SG_T("%s|"), SG_Get_OGR_Drivers().Get_Name(i).c_str());
+		}
+    }
+
+	Description	+= SG_T("</table>");
+
+	Set_Description(Description);
+
+	//-----------------------------------------------------
+	Parameters.Add_Shapes(
+		NULL, "SHAPES"	, _TL("Shapes"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_FilePath(
+		NULL, "FILE"	, _TL("File"),
+		_TL(""),
+		NULL, NULL, true
+	);
+
+	Parameters.Add_Choice(
+		NULL, "FORMAT"	, _TL("Format"),
+		_TL(""),
+		Formats
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool COGR_Export::On_Execute(void)
+{
+	CSG_String			File_Name;
+	CSG_Shapes			*pShapes;
+	CSG_OGR_DataSource	DataSource;
+
+	//-----------------------------------------------------
+	pShapes		= Parameters("SHAPES")	->asShapes();
+	File_Name	= Parameters("FILE")	->asString();
+
+	//-----------------------------------------------------
+	if( DataSource.Create(File_Name, Parameters("FORMAT")->asString()) == false )
+	{
+		Message_Add(_TL("Could not create data source."));
+	}
+	else if( DataSource.Write(pShapes) )
+	{
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/gdal/io_gdal/ogr_export.h b/src/modules_io/gdal/io_gdal/ogr_export.h
index 449050e..b9ea3bf 100644
--- a/src/modules_io/gdal/io_gdal/ogr_export.h
+++ b/src/modules_io/gdal/io_gdal/ogr_export.h
@@ -1,92 +1,91 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     ogr_export.h                      //
-//                                                       //
-//            Copyright (C) 2008 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__ogr_export_H
-#define HEADER_INCLUDED__ogr_export_H
-
-//---------------------------------------------------------
-#include "ogr_driver.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class COGR_Export : public CSG_Module
-{
-public:
-	COGR_Export(void);
-	virtual ~COGR_Export(void);
-
-
-protected:
-
-	virtual bool				On_Execute		(void);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__ogr_export_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     ogr_export.h                      //
+//                                                       //
+//            Copyright (C) 2008 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__ogr_export_H
+#define HEADER_INCLUDED__ogr_export_H
+
+//---------------------------------------------------------
+#include "ogr_driver.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class COGR_Export : public CSG_Module
+{
+public:
+	COGR_Export(void);
+
+
+protected:
+
+	virtual bool		On_Execute		(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__ogr_export_H
diff --git a/src/modules_io/gdal/io_gdal/ogr_import.cpp b/src/modules_io/gdal/io_gdal/ogr_import.cpp
index ef79084..73c6248 100644
--- a/src/modules_io/gdal/io_gdal/ogr_import.cpp
+++ b/src/modules_io/gdal/io_gdal/ogr_import.cpp
@@ -1,177 +1,203 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    ogr_import.cpp                     //
-//                                                       //
-//            Copyright (C) 2008 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "ogr_import.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-COGR_Import::COGR_Import(void)
-{
-	Set_Name	(_TL("OGR: Import Vector Data"));
-
-	Set_Author	(SG_T("(c) 2008 by O.Conrad"));
-
-	CSG_String	Description;
-
-	Description	= _TW(
-		"The \"GDAL Vector Data Import\" module imports vector data from various file/database formats using the "
-		"\"Geospatial Data Abstraction Library\" (GDAL) by Frank Warmerdam. "
-		"For more information have a look at the GDAL homepage:\n"
-		"  <a target=\"_blank\" href=\"http://www.gdal.org/\">"
-		"  http://www.gdal.org</a>\n"
-		"\n"
-		"Following vector data formats are currently supported:\n"
-		"<table border=\"1\"><tr><th>Name</th><th>Description</th></tr>\n"
-	);
-
-	for(int i=0; i<g_OGR_Driver.Get_Count(); i++)
-    {
-		if( g_OGR_Driver.Can_Read(i) )
-		{
-			Description	+= CSG_String::Format(SG_T("<tr><td>%s</td><td>%s</td></tr>\n"),
-				g_OGR_Driver.Get_Name(i).c_str(),
-				g_OGR_Driver.Get_Description(i).c_str()
-			);
-		}
-    }
-
-	Description	+= SG_T("</table>");
-
-	Set_Description(Description);
-
-	//-----------------------------------------------------
-	Parameters.Add_Shapes_List(
-		NULL, "SHAPES"	, _TL("Shapes"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_FilePath(
-		NULL, "FILES"	, _TL("Files"),
-		_TL(""),
-		NULL, NULL, false, false, true
-	);
-}
-
-//---------------------------------------------------------
-COGR_Import::~COGR_Import(void)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool COGR_Import::On_Execute(void)
-{
-	CSG_Strings		Files;
-	COGR_DataSource	ds;
-
-	//-----------------------------------------------------
-	if( !Parameters("FILES")->asFilePath()->Get_FilePaths(Files) )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	Parameters("SHAPES")->asShapesList()->Del_Items();
-
-	for(int i=0; i<Files.Get_Count(); i++)
-	{
-		Message_Add(CSG_String::Format(SG_T("%s: %s"), _TL("loading"), Files[i].c_str()));
-
-		if( !ds.Create(Files[i]) )
-		{
-			Message_Add(_TL("could not open data source"));
-		}
-		else if( ds.Get_Count() <= 0 )
-		{
-			Message_Add(_TL("no layers in data source"));
-		}
-		else
-		{
-			for(int iLayer=0; iLayer<ds.Get_Count(); iLayer++)
-			{
-				CSG_Shapes	*pShapes	= ds.Read_Shapes(iLayer);
-
-				if( pShapes )
-				{
-					Parameters("SHAPES")->asShapesList()->Add_Item(pShapes);
-				}
-			}
-		}
-	}
-
-	return( Parameters("SHAPES")->asShapesList()->Get_Count() > 0 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    ogr_import.cpp                     //
+//                                                       //
+//            Copyright (C) 2008 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "ogr_import.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+COGR_Import::COGR_Import(void)
+{
+	Set_Name	(_TL("OGR: Import Vector Data"));
+
+	Set_Author	(SG_T("O.Conrad (c) 2008"));
+
+	CSG_String	Description;
+
+	Description	= _TW(
+		"The \"GDAL Vector Data Import\" module imports vector data from various file/database formats using the "
+		"\"Geospatial Data Abstraction Library\" (GDAL) by Frank Warmerdam. "
+		"For more information have a look at the GDAL homepage:\n"
+		"  <a target=\"_blank\" href=\"http://www.gdal.org/\">"
+		"  http://www.gdal.org</a>\n"
+		"\n"
+		"Following vector data formats are currently supported:\n"
+		"<table border=\"1\"><tr><th>Name</th><th>Description</th></tr>\n"
+	);
+
+	for(int i=0; i<SG_Get_OGR_Drivers().Get_Count(); i++)
+    {
+		if( SG_Get_OGR_Drivers().Can_Read(i) )
+		{
+			Description	+= CSG_String::Format(SG_T("<tr><td>%s</td><td>%s</td></tr>\n"),
+				SG_Get_OGR_Drivers().Get_Name(i).c_str(),
+				SG_Get_OGR_Drivers().Get_Description(i).c_str()
+			);
+		}
+    }
+
+	Description	+= SG_T("</table>");
+
+	Set_Description(Description);
+
+	//-----------------------------------------------------
+	Parameters.Add_Shapes_List(
+		NULL, "SHAPES"	, _TL("Shapes"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_FilePath(
+		NULL, "FILES"	, _TL("Files"),
+		_TL(""),
+		NULL, NULL, false, false, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool COGR_Import::On_Execute(void)
+{
+	CSG_Strings			Files;
+	CSG_OGR_DataSource	DataSource;
+
+	//-----------------------------------------------------
+	if( !Parameters("FILES")->asFilePath()->Get_FilePaths(Files) )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	Parameters("SHAPES")->asShapesList()->Del_Items();
+
+	for(int iFile=0; iFile<Files.Get_Count(); iFile++)
+	{
+		Message_Add(CSG_String::Format(SG_T("%s: %s"), _TL("loading"), Files[iFile].c_str()));
+
+		if( !DataSource.Create(Files[iFile]) )
+		{
+			Message_Add(_TL("could not open data source"));
+		}
+		else if( DataSource.Get_Count() <= 0 )
+		{
+			Message_Add(_TL("no layers in data source"));
+		}
+		else
+		{
+			for(int iLayer=0; iLayer<DataSource.Get_Count(); iLayer++)
+			{
+				CSG_Shapes	*pShapes	= DataSource.Read(iLayer);
+
+				if( pShapes )
+				{
+					Parameters("SHAPES")->asShapesList()->Add_Item(pShapes);
+				}
+			}
+		}
+	}
+
+	return( Parameters("SHAPES")->asShapesList()->Get_Count() > 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool	SG_OGR_Import	(const CSG_String &File_Name)
+{
+	COGR_Import	Import;
+
+	if(	!Import.Get_Parameters()->Set_Parameter(SG_T("FILES"), PARAMETER_TYPE_FilePath, File_Name) )
+	{
+		return( false );
+	}
+
+	if(	!Import.Execute() )
+	{
+		return( false );
+	}
+
+	CSG_Parameter_Shapes_List	*pShapes	= Import.Get_Parameters()->Get_Parameter(SG_T("SHAPES"))->asShapesList();
+
+	for(int i=0; i<pShapes->Get_Count(); i++)
+	{
+		SG_UI_DataObject_Add(pShapes->asShapes(i), SG_UI_DATAOBJECT_UPDATE_ONLY);
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/gdal/io_gdal/ogr_import.h b/src/modules_io/gdal/io_gdal/ogr_import.h
index e1d0b05..83b40fa 100644
--- a/src/modules_io/gdal/io_gdal/ogr_import.h
+++ b/src/modules_io/gdal/io_gdal/ogr_import.h
@@ -1,92 +1,99 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library                     //
-//                                                       //
-//                       io_gdal                         //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     ogr_import.h                      //
-//                                                       //
-//            Copyright (C) 2008 O. Conrad               //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.de                    //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Bundesstr. 55                          //
-//                D-20146 Hamburg                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__ogr_import_H
-#define HEADER_INCLUDED__ogr_import_H
-
-//---------------------------------------------------------
-#include "ogr_driver.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class COGR_Import : public CSG_Module
-{
-public:
-	COGR_Import(void);
-	virtual ~COGR_Import(void);
-
-
-protected:
-
-	virtual bool				On_Execute		(void);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__ogr_import_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library                     //
+//                                                       //
+//                       io_gdal                         //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     ogr_import.h                      //
+//                                                       //
+//            Copyright (C) 2008 O. Conrad               //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.de                    //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Bundesstr. 55                          //
+//                D-20146 Hamburg                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__ogr_import_H
+#define HEADER_INCLUDED__ogr_import_H
+
+//---------------------------------------------------------
+#include "ogr_driver.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class COGR_Import : public CSG_Module
+{
+public:
+	COGR_Import(void);
+
+
+protected:
+
+	virtual bool		On_Execute		(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+io_gdal_EXPORT	bool	SG_OGR_Import	(const CSG_String &File_Name);
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__ogr_import_H
diff --git a/src/modules_io/gps/Makefile.in b/src/modules_io/gps/Makefile.in
index 03fd7fe..dbefc2f 100644
--- a/src/modules_io/gps/Makefile.in
+++ b/src/modules_io/gps/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_io/gps
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_io/gps/io_gps/Makefile.in b/src/modules_io/gps/io_gps/Makefile.in
index 365f228..10136ff 100644
--- a/src/modules_io/gps/io_gps/Makefile.in
+++ b/src/modules_io/gps/io_gps/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_io/gps/io_gps
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -104,6 +110,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -153,14 +161,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -204,9 +225,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_io/grid/Makefile.in b/src/modules_io/grid/Makefile.in
index 8949dd3..54e400a 100644
--- a/src/modules_io/grid/Makefile.in
+++ b/src/modules_io/grid/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_io/grid
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_io/grid/io_grid/Makefile.in b/src/modules_io/grid/io_grid/Makefile.in
index c91f3e5..88af7e3 100644
--- a/src/modules_io/grid/io_grid/Makefile.in
+++ b/src/modules_io/grid/io_grid/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_io/grid/io_grid
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -106,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_io/grid/io_grid/bmp_export.cpp b/src/modules_io/grid/io_grid/bmp_export.cpp
index 7e02e95..e01be96 100644
--- a/src/modules_io/grid/io_grid/bmp_export.cpp
+++ b/src/modules_io/grid/io_grid/bmp_export.cpp
@@ -177,9 +177,14 @@ bool CBMP_Export::On_Execute(void)
 
 		SG_Free(Line);
 
-		//-------------------------------------------------
 		fclose(Stream);
 
+		//-------------------------------------------------
+		FileName	= SG_File_Make_Path(SG_File_Get_Path(FileName), SG_File_Get_Name(FileName, false), SG_T("prj"));
+
+		pGrid->Get_Projection().Save(FileName);
+
+		//-------------------------------------------------
 		FileName	= SG_File_Make_Path(SG_File_Get_Path(FileName), SG_File_Get_Name(FileName, false), SG_T("bpw"));
 
 		if( (Stream = fopen(FileName.b_str(), "w")) != NULL )
diff --git a/src/modules_io/grid/io_grid/esri_arcinfo.cpp b/src/modules_io/grid/io_grid/esri_arcinfo.cpp
index 2c9ca02..e3cdce1 100644
--- a/src/modules_io/grid/io_grid/esri_arcinfo.cpp
+++ b/src/modules_io/grid/io_grid/esri_arcinfo.cpp
@@ -122,18 +122,68 @@ CESRI_ArcInfo_Import::CESRI_ArcInfo_Import(void)
 			_TL("All Files")
 		)
 	);
+
+	CSG_Parameter	*pNode;
+
+	pNode = Parameters.Add_Node(
+		NULL	, "NODE_ASCII"	, _TL("ASCII Grid Options"),
+		_TL("")
+	);
+
+	Parameters.Add_Choice(
+		pNode	, "GRID_TYPE"	, _TL("Target Grid Type"),
+		_TL(""),
+
+		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
+			_TL("Integer (2 byte)"),
+			_TL("Integer (4 byte)"),
+			_TL("Floating Point (4 byte)"),
+			_TL("Floating Point (8 byte)")
+		), 2
+	);
+
+	Parameters.Add_Choice(
+		pNode	, "NODATA"	, _TL("NoData Value"),
+		_TL("Choose whether the input file's NoData value or a user specified NoData value is written"),
+
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("Input File's NoData Value"),
+			_TL("User Defined NoData Value")
+		), 0
+	);
+
+	Parameters.Add_Value(
+		pNode	, "NODATA_VAL"	, _TL("User Defined NoData Value"),
+		_TL(""),
+		PARAMETER_TYPE_Double	, -99999.0
+	);
 }
 
 //---------------------------------------------------------
 bool CESRI_ArcInfo_Import::On_Execute(void)
 {
-	CSG_File	Stream;
-	CSG_String	fName;
-	CSG_Grid	*pGrid;
+	CSG_File		Stream;
+	CSG_String		fName;
+	CSG_Grid		*pGrid;
+	TSG_Data_Type	Datatype;
+	int				iNoData;
+	double			dNoData;
 
 	//-----------------------------------------------------
-	pGrid	= NULL;
-	fName	= Parameters("FILE")->asString();
+	pGrid		= NULL;
+	fName		= Parameters("FILE")->asString();
+	iNoData		= Parameters("NODATA")->asInt();
+	dNoData		= Parameters("NODATA_VAL")->asDouble();
+
+	switch( Parameters("GRID_TYPE")->asInt() )
+	{
+	case 0:		Datatype = SG_DATATYPE_Short;	break;
+	case 1:		Datatype = SG_DATATYPE_Int;		break;
+	case 2:
+	default:	Datatype = SG_DATATYPE_Float;	break;
+	case 3:		Datatype = SG_DATATYPE_Double;	break;
+	}
+
 
 	//-------------------------------------------------
 	// Binary...
@@ -167,15 +217,27 @@ bool CESRI_ArcInfo_Import::On_Execute(void)
 	//-------------------------------------------------
 	// ASCII...
 
-	else if( Stream.Open(fName, SG_FILE_R, false) && (pGrid = Read_Header(Stream)) != NULL )
+	else if( Stream.Open(fName, SG_FILE_R, false) && (pGrid = Read_Header(Stream, Datatype)) != NULL )
 	{
+		double	dValue;
+
 		for(int iy=0, y=pGrid->Get_NY()-1; iy<pGrid->Get_NY() && !Stream.is_EOF() && Set_Progress(iy, pGrid->Get_NY()); iy++, y--)
 		{
 			for(int x=0; x<pGrid->Get_NX(); x++)
 			{
-				pGrid->Set_Value(x, y, Read_Value(Stream));
+				dValue	= Read_Value(Stream);
+
+				if( iNoData == 1 && dValue == pGrid->Get_NoData_Value() )
+					dValue	= dNoData;
+
+				pGrid->Set_Value(x, y, dValue);
 			}
 		}
+
+		if( iNoData == 1 )
+		{
+			pGrid->Set_NoData_Value(dNoData);
+		}
 	}
 
 	//-------------------------------------------------
@@ -184,8 +246,11 @@ bool CESRI_ArcInfo_Import::On_Execute(void)
 		return( false );
 	}
 
+	//-------------------------------------------------
 	pGrid->Set_Name(SG_File_Get_Name(fName, false));
 
+	pGrid->Get_Projection().Load(SG_File_Make_Path(NULL, fName, SG_T("prj")));
+
 	Parameters("GRID")->Set_Value(pGrid);
 
 	return( true );
@@ -295,7 +360,7 @@ bool CESRI_ArcInfo_Import::Read_Header_Value(const CSG_String &sKey, CSG_String
 }
 
 //---------------------------------------------------------
-CSG_Grid * CESRI_ArcInfo_Import::Read_Header(CSG_File &Stream)
+CSG_Grid * CESRI_ArcInfo_Import::Read_Header(CSG_File &Stream, TSG_Data_Type Datatype)
 {
 	bool		bCorner_X, bCorner_Y;
 	int			NX, NY;
@@ -359,7 +424,7 @@ CSG_Grid * CESRI_ArcInfo_Import::Read_Header(CSG_File &Stream)
 			yMin	+= CellSize / 2.0;
 
 		//-------------------------------------------------
-		if( (pGrid = SG_Create_Grid(SG_DATATYPE_Float, NX, NY, CellSize, xMin, yMin)) != NULL )
+		if( (pGrid = SG_Create_Grid(Datatype, NX, NY, CellSize, xMin, yMin)) != NULL )
 		{
 			pGrid->Set_NoData_Value(NoData);
 
@@ -507,6 +572,8 @@ bool CESRI_ArcInfo_Export::On_Execute(void)
 			}
 
 			SG_Free(Line);
+
+			pGrid->Get_Projection().Save(SG_File_Make_Path(NULL, fName, SG_T("prj")));
 
 			return( true );
 		}
@@ -532,6 +599,8 @@ bool CESRI_ArcInfo_Export::On_Execute(void)
 
 			fprintf(Stream.Get_Stream(), "\n");
 		}
+
+		pGrid->Get_Projection().Save(SG_File_Make_Path(NULL, fName, SG_T("prj")));
 
 		return( true );
 	}
@@ -541,8 +610,8 @@ bool CESRI_ArcInfo_Export::On_Execute(void)
 }
 
 //---------------------------------------------------------
-inline CSG_String CESRI_ArcInfo_Export::Write_Value(double Value, int Precision, bool bComma)
-{
+inline CSG_String CESRI_ArcInfo_Export::Write_Value(double Value, int Precision, bool bComma)
+{
 	CSG_String	s;
 
 	if( Precision < 0 )
@@ -568,7 +637,7 @@ inline CSG_String CESRI_ArcInfo_Export::Write_Value(double Value, int Precision,
 	}
 
 	return( s );
-}
+}
 
 //---------------------------------------------------------
 bool CESRI_ArcInfo_Export::Write_Header(CSG_File &Stream, CSG_Grid *pGrid, bool bComma)
diff --git a/src/modules_io/grid/io_grid/esri_arcinfo.h b/src/modules_io/grid/io_grid/esri_arcinfo.h
index cc87397..e1c541d 100644
--- a/src/modules_io/grid/io_grid/esri_arcinfo.h
+++ b/src/modules_io/grid/io_grid/esri_arcinfo.h
@@ -1,136 +1,136 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                        Grid_IO                        //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    ESRI_ArcInfo.h                     //
-//                                                       //
-//                 Copyright (C) 2007 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//					ESRI_ArcInfo.h						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__ESRI_ArcInfo_H
-#define HEADER_INCLUDED__ESRI_ArcInfo_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "MLB_Interface.h"
-
-//---------------------------------------------------------
-class CESRI_ArcInfo_Import : public CSG_Module
-{
-public:
-	CESRI_ArcInfo_Import(void);
-
-	virtual const SG_Char *	Get_MenuPath		(void)		{	return( _TL("R:Import") );	}
-
-
-protected:
-
-	virtual bool			On_Execute			(void);
-
-
-private:
-
-	double					Read_Value			(CSG_File &Stream);
-
-	bool					Read_Header_Value	(const CSG_String &sKey, CSG_String &sLine, int    &Value);
-	bool					Read_Header_Value	(const CSG_String &sKey, CSG_String &sLine, double &Value);
-	bool					Read_Header_Line	(CSG_File &Stream, CSG_String &sLine);
-	CSG_Grid *				Read_Header			(CSG_File &Stream);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CESRI_ArcInfo_Export : public CSG_Module_Grid
-{
-public:
-	CESRI_ArcInfo_Export(void);
-
-	virtual const SG_Char *	Get_MenuPath		(void)		{	return( _TL("R:Export") );	}
-
-
-protected:
-
-	virtual bool			On_Execute			(void);
-
-
-private:
-
-	CSG_String				Write_Value			(double Value, int Precision, bool bComma);
-
-	bool					Write_Header		(CSG_File &Stream, CSG_Grid *pGrid, bool bComma);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__ESRI_ArcInfo_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                        Grid_IO                        //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    ESRI_ArcInfo.h                     //
+//                                                       //
+//                 Copyright (C) 2007 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//					ESRI_ArcInfo.h						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__ESRI_ArcInfo_H
+#define HEADER_INCLUDED__ESRI_ArcInfo_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+//---------------------------------------------------------
+class CESRI_ArcInfo_Import : public CSG_Module
+{
+public:
+	CESRI_ArcInfo_Import(void);
+
+	virtual const SG_Char *	Get_MenuPath		(void)		{	return( _TL("R:Import") );	}
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+private:
+
+	double					Read_Value			(CSG_File &Stream);
+
+	bool					Read_Header_Value	(const CSG_String &sKey, CSG_String &sLine, int    &Value);
+	bool					Read_Header_Value	(const CSG_String &sKey, CSG_String &sLine, double &Value);
+	bool					Read_Header_Line	(CSG_File &Stream, CSG_String &sLine);
+	CSG_Grid *				Read_Header			(CSG_File &Stream, TSG_Data_Type Datatype = SG_DATATYPE_Float);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CESRI_ArcInfo_Export : public CSG_Module_Grid
+{
+public:
+	CESRI_ArcInfo_Export(void);
+
+	virtual const SG_Char *	Get_MenuPath		(void)		{	return( _TL("R:Export") );	}
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+
+private:
+
+	CSG_String				Write_Value			(double Value, int Precision, bool bComma);
+
+	bool					Write_Header		(CSG_File &Stream, CSG_Grid *pGrid, bool bComma);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__ESRI_ArcInfo_H
diff --git a/src/modules_io/grid/io_grid/srtm30.cpp b/src/modules_io/grid/io_grid/srtm30.cpp
index 21792cf..68d46f4 100644
--- a/src/modules_io/grid/io_grid/srtm30.cpp
+++ b/src/modules_io/grid/io_grid/srtm30.cpp
@@ -179,7 +179,7 @@ bool CSRTM30_Import::On_Execute(void)
 	double		xMin, xMax, yMin, yMax;
 	TSG_Rect	rOut, rTile;
 	CSG_String	sTile;
-	CSG_Grid		*pOut;
+	CSG_Grid	*pOut;
 
 	//-----------------------------------------------------
 	xMin		= Parameters("XMIN")->asInt();
@@ -204,6 +204,7 @@ bool CSRTM30_Import::On_Execute(void)
 	pOut->Set_NoData_Value(-9999);
 	pOut->Assign_NoData();
 	pOut->Set_Name(SG_T("SRTM30"));
+	pOut->Get_Projection().Create(SG_T("GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]"));
 
 	//-----------------------------------------------------
 	for(yTile=0, rTile.yMin=0, rTile.yMax=Y_WIDTH; yTile<3; yTile++, rTile.yMin+=Y_WIDTH, rTile.yMax+=Y_WIDTH)
diff --git a/src/modules_io/grid/io_grid/usgs_srtm.cpp b/src/modules_io/grid/io_grid/usgs_srtm.cpp
index f246e16..b1f6552 100644
--- a/src/modules_io/grid/io_grid/usgs_srtm.cpp
+++ b/src/modules_io/grid/io_grid/usgs_srtm.cpp
@@ -180,7 +180,7 @@ CSG_Grid * CUSGS_SRTM_Import::Load(CSG_String File, int N, double D)
 	int			x, y;
 	short		*sLine;
 	double		xMin, yMin;
-	FILE		*Stream;
+	CSG_File	Stream;
 	CSG_String	fName;
 	CSG_Grid	*pGrid;
 
@@ -198,19 +198,20 @@ CSG_Grid * CUSGS_SRTM_Import::Load(CSG_String File, int N, double D)
 		xMin	= (fName[3] == 'W' ? -1.0 :  1.0) * fName.Right(3).asInt();
 
 		//-------------------------------------------------
-		if( (Stream = fopen(File.b_str(), "rb")) != NULL )
+		if( Stream.Open(File, SG_FILE_R, true) )
 		{
-			if( (pGrid = SG_Create_Grid(SG_DATATYPE_Float, N, N, D, xMin, yMin)) != NULL )
+			if( (pGrid = SG_Create_Grid(SG_DATATYPE_Short, N, N, D, xMin, yMin)) != NULL )
 			{
 				pGrid->Set_Name			(fName);
+				pGrid->Get_Projection().Create(SG_T("GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]"));
 				pGrid->Set_NoData_Value	(-32768);
 
 				//-----------------------------------------
 				sLine	= (short *)SG_Malloc(N * sizeof(short));
 
-				for(y=0; y<N && !feof(Stream) && Set_Progress(y, N); y++)
+				for(y=0; y<N && !Stream.is_EOF() && Set_Progress(y, N); y++)
 				{
-					fread(sLine, N, sizeof(short), Stream);
+					Stream.Read(sLine, sizeof(short), N);
 
 					for(x=0; x<N; x++)
 					{
@@ -222,8 +223,6 @@ CSG_Grid * CUSGS_SRTM_Import::Load(CSG_String File, int N, double D)
 
 				SG_Free(sLine);
 			}
-
-			fclose(Stream);
 		}
 	}
 
diff --git a/src/modules_io/grid/io_grid_grib2/Makefile.in b/src/modules_io/grid/io_grid_grib2/Makefile.in
index 6e149d2..b9d3c17 100644
--- a/src/modules_io/grid/io_grid_grib2/Makefile.in
+++ b/src/modules_io/grid/io_grid_grib2/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_io/grid/io_grid_grib2
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -114,6 +120,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -163,14 +171,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -214,9 +235,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/cmplxpack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/cmplxpack.c
new file mode 100755
index 0000000..4d9908c
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/cmplxpack.c
@@ -0,0 +1,75 @@
+#include "grib2.h"
+
+void cmplxpack(g2float *fld,g2int ndpts, g2int idrsnum,g2int *idrstmpl,
+               unsigned char *cpack, g2int *lcpack)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    cmplxpack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2004-08-27
+//
+// ABSTRACT: This subroutine packs up a data field using a complex
+//   packing algorithm as defined in the GRIB2 documention.  It
+//   supports GRIB2 complex packing templates with or without
+//   spatial differences (i.e. DRTs 5.2 and 5.3).
+//   It also fills in GRIB2 Data Representation Template 5.2 or 5.3 
+//   with the appropriate values.
+//
+// PROGRAM HISTORY LOG:
+// 2004-08-27  Gilbert
+//
+// USAGE:    cmplxpack(g2float *fld,g2int ndpts, g2int idrsnum,g2int *idrstmpl,
+//             unsigned char *cpack, g2int *lcpack)
+//   INPUT ARGUMENT LIST:
+//     fld[]    - Contains the data values to pack
+//     ndpts    - The number of data values in array fld[]
+//     idrsnum  - Data Representation Template number 5.N
+//                Must equal 2 or 3.
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.2 or 5.3
+//                [0] = Reference value - ignored on input
+//                [1] = Binary Scale Factor
+//                [2] = Decimal Scale Factor
+//                    .
+//                    .
+//                [6] = Missing value management
+//                [7] = Primary missing value
+//                [8] = Secondary missing value
+//                    .
+//                    .
+//               [16] = Order of Spatial Differencing  ( 1 or 2 )
+//                    .
+//                    .
+//
+//   OUTPUT ARGUMENT LIST: 
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.3
+//                [0] = Reference value - set by compack routine.
+//                [1] = Binary Scale Factor - unchanged from input
+//                [2] = Decimal Scale Factor - unchanged from input
+//                    .
+//                    .
+//     cpack    - The packed data field (character*1 array)
+//     lcpack   - length of packed field cpack[].
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$
+{
+      
+
+      if ( idrstmpl[6] == 0 ) {       // No internal missing values
+         compack(fld,ndpts,idrsnum,idrstmpl,cpack,lcpack);
+      }
+      else if ( idrstmpl[6] == 1  ||  idrstmpl[6] == 2) {
+         misspack(fld,ndpts,idrsnum,idrstmpl,cpack,lcpack);
+      }
+      else {
+         printf("cmplxpack: Don:t recognize Missing value option.");
+         *lcpack=-1;
+      }
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/compack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/compack.c
new file mode 100755
index 0000000..50fb01f
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/compack.c
@@ -0,0 +1,416 @@
+#include <stdlib.h>
+#include <math.h>
+#include "grib2.h"
+
+
+void compack(g2float *fld,g2int ndpts,g2int idrsnum,g2int *idrstmpl,
+             unsigned char *cpack,g2int *lcpack)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    compack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2002-11-07
+//
+// ABSTRACT: This subroutine packs up a data field using a complex
+//   packing algorithm as defined in the GRIB2 documention.  It
+//   supports GRIB2 complex packing templates with or without
+//   spatial differences (i.e. DRTs 5.2 and 5.3).
+//   It also fills in GRIB2 Data Representation Template 5.2 or 5.3 
+//   with the appropriate values.
+//
+// PROGRAM HISTORY LOG:
+// 2002-11-07  Gilbert
+//
+// USAGE:    void compack(g2float *fld,g2int ndpts,g2int idrsnum,
+//                g2int *idrstmpl,unsigned char *cpack,g2int *lcpack)
+//
+//   INPUT ARGUMENTS:
+//     fld[]    - Contains the data values to pack
+//     ndpts    - The number of data values in array fld[]
+//     idrsnum  - Data Representation Template number 5.N
+//                Must equal 2 or 3.
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.2 or 5.3
+//                [0] = Reference value - ignored on input
+//                [1] = Binary Scale Factor
+//                [2] = Decimal Scale Factor
+//                    .
+//                    .
+//                [6] = Missing value management
+//                [7] = Primary missing value
+//                [8] = Secondary missing value
+//                    .
+//                    .
+//               [16] = Order of Spatial Differencing  ( 1 or 2 )
+//                    .
+//                    .
+//
+//   OUTPUT ARGUMENTS: 
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.3
+//                [0] = Reference value - set by compack routine.
+//                [1] = Binary Scale Factor - unchanged from input
+//                [2] = Decimal Scale Factor - unchanged from input
+//                    .
+//                    .
+//     cpack    - The packed data field
+//     lcpack   - length of packed field cpack.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:
+//
+//$$$
+{
+
+      static g2int zero=0;
+      g2int  *ifld,*gref,*glen,*gwidth;
+      g2int  *jmin, *jmax, *lbit;
+      g2int  i,j,n,nbits,imin,imax,left;
+      g2int  isd,itemp,ilmax,ngwidthref=0,nbitsgwidth=0;
+      g2int  nglenref=0,nglenlast=0,iofst,ival1,ival2;
+      g2int  minsd,nbitsd=0,maxorig,nbitorig,ngroups;
+      g2int  lg,ng,igmax,iwmax,nbitsgref;
+      g2int  glength,grpwidth,nbitsglen=0;
+      g2int  kfildo, minpk, inc, maxgrps, ibit, jbit, kbit, novref, lbitref;
+      g2int  missopt, miss1, miss2, ier;
+      g2float  bscale,dscale,rmax,rmin,temp;
+      static g2int simple_alg = 0;
+      static g2float alog2=0.69314718;       //  ln(2.0)
+      static g2int one=1;
+
+      bscale=int_power(2.0,-idrstmpl[1]);
+      dscale=int_power(10.0,idrstmpl[2]);
+//
+//  Find max and min values in the data
+//
+      rmax=fld[0];
+      rmin=fld[0];
+      for (j=1;j<ndpts;j++) {
+        if (fld[j] > rmax) rmax=fld[j];
+        if (fld[j] < rmin) rmin=fld[j];
+      }
+
+//
+//  If max and min values are not equal, pack up field.
+//  If they are equal, we have a constant field, and the reference
+//  value (rmin) is the value for each point in the field and
+//  set nbits to 0.
+//
+      if (rmin != rmax) {
+        iofst=0;
+        ifld=calloc(ndpts,sizeof(g2int));
+        gref=calloc(ndpts,sizeof(g2int));
+        gwidth=calloc(ndpts,sizeof(g2int));
+        glen=calloc(ndpts,sizeof(g2int));
+        //
+        //  Scale original data
+        //
+        if (idrstmpl[1] == 0) {        //  No binary scaling
+           imin=(g2int)rint(rmin*dscale);
+           //imax=(g2int)rint(rmax*dscale);
+           rmin=(g2float)imin;
+           for (j=0;j<ndpts;j++) 
+              ifld[j]=(g2int)rint(fld[j]*dscale)-imin;
+        }
+        else {                             //  Use binary scaling factor
+           rmin=rmin*dscale;
+           //rmax=rmax*dscale;
+           for (j=0;j<ndpts;j++) 
+             ifld[j]=(g2int)rint(((fld[j]*dscale)-rmin)*bscale);
+        }
+        //
+        //  Calculate Spatial differences, if using DRS Template 5.3
+        //
+        if (idrsnum == 3) {        // spatial differences
+           if (idrstmpl[16]!=1 && idrstmpl[16]!=2) idrstmpl[16]=1;
+           if (idrstmpl[16] == 1) {      // first order
+              ival1=ifld[0];
+              for (j=ndpts-1;j>0;j--) 
+                 ifld[j]=ifld[j]-ifld[j-1];
+              ifld[0]=0;
+           }
+           else if (idrstmpl[16] == 2) {      // second order
+              ival1=ifld[0];
+              ival2=ifld[1];
+              for (j=ndpts-1;j>1;j--) 
+                 ifld[j]=ifld[j]-(2*ifld[j-1])+ifld[j-2];
+              ifld[0]=0;
+              ifld[1]=0;
+           }
+           //
+           //  subtract min value from spatial diff field
+           //
+           isd=idrstmpl[16];
+           minsd=ifld[isd];
+           for (j=isd;j<ndpts;j++)  if ( ifld[j] < minsd ) minsd=ifld[j];
+           for (j=isd;j<ndpts;j++)  ifld[j]=ifld[j]-minsd;
+           //
+           //   find num of bits need to store minsd and add 1 extra bit
+           //   to indicate sign
+           //
+           temp=log((double)(abs(minsd)+1))/alog2;
+           nbitsd=(g2int)ceil(temp)+1;
+           //
+           //   find num of bits need to store ifld[0] ( and ifld[1]
+           //   if using 2nd order differencing )
+           //
+           maxorig=ival1;
+           if (idrstmpl[16]==2 && ival2>ival1) maxorig=ival2;
+           temp=log((double)(maxorig+1))/alog2;
+           nbitorig=(g2int)ceil(temp)+1;
+           if (nbitorig > nbitsd) nbitsd=nbitorig;
+           //   increase number of bits to even multiple of 8 ( octet )
+           if ( (nbitsd%8) != 0) nbitsd=nbitsd+(8-(nbitsd%8));
+           //
+           //  Store extra spatial differencing info into the packed
+           //  data section.
+           //
+           if (nbitsd != 0) {
+              //   pack first original value
+              if (ival1 >= 0) {
+                 sbit(cpack,&ival1,iofst,nbitsd);
+                 iofst=iofst+nbitsd;
+              }
+              else {
+                 sbit(cpack,&one,iofst,1);
+                 iofst=iofst+1;
+                 itemp=abs(ival1);
+                 sbit(cpack,&itemp,iofst,nbitsd-1);
+                 iofst=iofst+nbitsd-1;
+              }
+              if (idrstmpl[16] == 2) {
+               //  pack second original value
+                 if (ival2 >= 0) {
+                    sbit(cpack,&ival2,iofst,nbitsd);
+                    iofst=iofst+nbitsd;
+                 }
+                 else {
+                    sbit(cpack,&one,iofst,1);
+                    iofst=iofst+1;
+                    itemp=abs(ival2);
+                    sbit(cpack,&itemp,iofst,nbitsd-1);
+                    iofst=iofst+nbitsd-1;
+                 }
+              }
+              //  pack overall min of spatial differences
+              if (minsd >= 0) {
+                 sbit(cpack,&minsd,iofst,nbitsd);
+                 iofst=iofst+nbitsd;
+              }
+              else {
+                 sbit(cpack,&one,iofst,1);
+                 iofst=iofst+1;
+                 itemp=abs(minsd);
+                 sbit(cpack,&itemp,iofst,nbitsd-1);
+                 iofst=iofst+nbitsd-1;
+              }
+           }
+           //printf("SDp %ld %ld %ld %ld\n",ival1,ival2,minsd,nbitsd);
+        }     //  end of spatial diff section
+        //
+        //   Determine Groups to be used.
+        //
+        if ( simple_alg == 1 ) {
+           //  set group length to 10;  calculate number of groups
+           //  and length of last group
+           ngroups=ndpts/10;
+           for (j=0;j<ngroups;j++) glen[j]=10;
+           itemp=ndpts%10;
+           if (itemp != 0) {
+              ngroups=ngroups+1;
+              glen[ngroups-1]=itemp;
+           }
+        }
+        else {
+           // Use Dr. Glahn's algorithm for determining grouping.
+           //
+           kfildo=6;
+           minpk=10;
+           inc=1;
+           maxgrps=(ndpts/minpk)+1;
+           jmin = calloc(maxgrps,sizeof(g2int));
+           jmax = calloc(maxgrps,sizeof(g2int));
+           lbit = calloc(maxgrps,sizeof(g2int));
+           missopt=0;
+           pack_gp(&kfildo,ifld,&ndpts,&missopt,&minpk,&inc,&miss1,&miss2,
+                        jmin,jmax,lbit,glen,&maxgrps,&ngroups,&ibit,&jbit,
+                        &kbit,&novref,&lbitref,&ier);
+           //print *,'SAGier = ',ier,ibit,jbit,kbit,novref,lbitref
+           for ( ng=0; ng<ngroups; ng++) glen[ng]=glen[ng]+novref;
+           free(jmin);
+           free(jmax);
+           free(lbit);
+        }
+        //  
+        //  For each group, find the group's reference value
+        //  and the number of bits needed to hold the remaining values
+        //
+        n=0;
+        for (ng=0;ng<ngroups;ng++) {
+           //    find max and min values of group
+           gref[ng]=ifld[n];
+           imax=ifld[n];
+           j=n+1;
+           for (lg=1;lg<glen[ng];lg++) {
+              if (ifld[j] < gref[ng]) gref[ng]=ifld[j]; 
+              if (ifld[j] > imax) imax=ifld[j];
+              j++;
+           }
+           //   calc num of bits needed to hold data
+           if ( gref[ng] != imax ) {
+              temp=log((double)(imax-gref[ng]+1))/alog2;
+              gwidth[ng]=(g2int)ceil(temp);
+           }
+           else 
+              gwidth[ng]=0;
+           //   Subtract min from data
+           j=n;
+           for (lg=0;lg<glen[ng];lg++) {
+              ifld[j]=ifld[j]-gref[ng];
+              j++;
+           }
+           //   increment fld array counter
+           n=n+glen[ng];
+        }
+        //  
+        //  Find max of the group references and calc num of bits needed 
+        //  to pack each groups reference value, then
+        //  pack up group reference values
+        //
+        igmax=gref[0];
+        for (j=1;j<ngroups;j++) if (gref[j] > igmax) igmax=gref[j];
+        if (igmax != 0) {
+           temp=log((double)(igmax+1))/alog2;
+           nbitsgref=(g2int)ceil(temp);
+           sbits(cpack,gref,iofst,nbitsgref,0,ngroups);
+           itemp=nbitsgref*ngroups;
+           iofst=iofst+itemp;
+           //         Pad last octet with Zeros, if necessary,
+           if ( (itemp%8) != 0) {
+              left=8-(itemp%8);
+              sbit(cpack,&zero,iofst,left);
+              iofst=iofst+left;
+           }
+        }
+        else
+           nbitsgref=0;
+        //
+        //  Find max/min of the group widths and calc num of bits needed
+        //  to pack each groups width value, then
+        //  pack up group width values
+        //
+        iwmax=gwidth[0];
+        ngwidthref=gwidth[0];
+        for (j=1;j<ngroups;j++) {
+           if (gwidth[j] > iwmax) iwmax=gwidth[j];
+           if (gwidth[j] < ngwidthref) ngwidthref=gwidth[j];
+        }
+        if (iwmax != ngwidthref) {
+           temp=log((double)(iwmax-ngwidthref+1))/alog2;
+           nbitsgwidth=(g2int)ceil(temp);
+           for (i=0;i<ngroups;i++) 
+              gwidth[i]=gwidth[i]-ngwidthref;
+           sbits(cpack,gwidth,iofst,nbitsgwidth,0,ngroups);
+           itemp=nbitsgwidth*ngroups;
+           iofst=iofst+itemp;
+           //         Pad last octet with Zeros, if necessary,
+           if ( (itemp%8) != 0) {
+              left=8-(itemp%8);
+              sbit(cpack,&zero,iofst,left);
+              iofst=iofst+left;
+           }
+        }
+        else {
+           nbitsgwidth=0;
+           for (i=0;i<ngroups;i++) gwidth[i]=0;
+        }
+        //
+        //  Find max/min of the group lengths and calc num of bits needed
+        //  to pack each groups length value, then
+        //  pack up group length values
+        //
+        //write(77,*)'GLENS: ',(glen(j),j=1,ngroups)
+        ilmax=glen[0];
+        nglenref=glen[0];
+        for (j=1;j<ngroups-1;j++) {
+           if (glen[j] > ilmax) ilmax=glen[j];
+           if (glen[j] < nglenref) nglenref=glen[j];
+        }
+        nglenlast=glen[ngroups-1];
+        if (ilmax != nglenref) {
+           temp=log((double)(ilmax-nglenref+1))/alog2;
+           nbitsglen=(g2int)ceil(temp);
+           for (i=0;i<ngroups-1;i++)  glen[i]=glen[i]-nglenref;
+           sbits(cpack,glen,iofst,nbitsglen,0,ngroups);
+           itemp=nbitsglen*ngroups;
+           iofst=iofst+itemp;
+           //         Pad last octet with Zeros, if necessary,
+           if ( (itemp%8) != 0) {
+              left=8-(itemp%8);
+              sbit(cpack,&zero,iofst,left);
+              iofst=iofst+left;
+           }
+        }
+        else {
+           nbitsglen=0;
+           for (i=0;i<ngroups;i++) glen[i]=0;
+        }
+        //
+        //  For each group, pack data values
+        //
+        n=0;
+        for (ng=0;ng<ngroups;ng++) {
+           glength=glen[ng]+nglenref;
+           if (ng == (ngroups-1) ) glength=nglenlast;
+           grpwidth=gwidth[ng]+ngwidthref;
+           if ( grpwidth != 0 ) {
+              sbits(cpack,ifld+n,iofst,grpwidth,0,glength);
+              iofst=iofst+(grpwidth*glength);
+           }
+           n=n+glength;
+        }
+        //         Pad last octet with Zeros, if necessary,
+        if ( (iofst%8) != 0) {
+           left=8-(iofst%8);
+           sbit(cpack,&zero,iofst,left);
+           iofst=iofst+left;
+        }
+        *lcpack=iofst/8;
+        //
+        if ( ifld!=0 ) free(ifld);
+        if ( gref!=0 ) free(gref);
+        if ( gwidth!=0 ) free(gwidth);
+        if ( glen!=0 ) free(glen);
+      }
+      else {          //   Constant field ( max = min )
+        nbits=0;
+        *lcpack=0;
+        nbitsgref=0;
+        ngroups=0;
+      }
+
+//
+//  Fill in ref value and number of bits in Template 5.2
+//
+      mkieee(&rmin,idrstmpl+0,1);   // ensure reference value is IEEE format
+      idrstmpl[3]=nbitsgref;
+      idrstmpl[4]=0;         // original data were reals
+      idrstmpl[5]=1;         // general group splitting
+      idrstmpl[6]=0;         // No internal missing values
+      idrstmpl[7]=0;         // Primary missing value
+      idrstmpl[8]=0;         // secondary missing value
+      idrstmpl[9]=ngroups;          // Number of groups
+      idrstmpl[10]=ngwidthref;       // reference for group widths
+      idrstmpl[11]=nbitsgwidth;      // num bits used for group widths
+      idrstmpl[12]=nglenref;         // Reference for group lengths
+      idrstmpl[13]=1;                // length increment for group lengths
+      idrstmpl[14]=nglenlast;        // True length of last group
+      idrstmpl[15]=nbitsglen;        // num bits used for group lengths
+      if (idrsnum == 3) {
+         idrstmpl[17]=nbitsd/8;      // num bits used for extra spatial
+                                     // differencing values
+      }
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/comunpack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/comunpack.c
new file mode 100755
index 0000000..ee650ef
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/comunpack.c
@@ -0,0 +1,330 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+
+int comunpack(unsigned char *cpack,g2int lensec,g2int idrsnum,g2int *idrstmpl,g2int ndpts,g2float *fld)
+////$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    comunpack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2002-10-29
+//
+// ABSTRACT: This subroutine unpacks a data field that was packed using a
+//   complex packing algorithm as defined in the GRIB2 documention,
+//   using info from the GRIB2 Data Representation Template 5.2 or 5.3.
+//   Supports GRIB2 complex packing templates with or without
+//   spatial differences (i.e. DRTs 5.2 and 5.3).
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-29  Gilbert
+// 2004-12-16  Gilbert  -  Added test ( provided by Arthur Taylor/MDL )
+//                         to verify that group widths and lengths are
+//                         consistent with section length.
+//
+// USAGE:    int comunpack(unsigned char *cpack,g2int lensec,g2int idrsnum,
+//                         g2int *idrstmpl, g2int ndpts,g2float *fld)
+//   INPUT ARGUMENT LIST:
+//     cpack    - pointer to the packed data field.
+//     lensec   - length of section 7 (used for error checking).
+//     idrsnum  - Data Representation Template number 5.N
+//                Must equal 2 or 3.
+//     idrstmpl - pointer to the array of values for Data Representation
+//                Template 5.2 or 5.3
+//     ndpts    - The number of data values to unpack
+//
+//   OUTPUT ARGUMENT LIST:
+//     fld      - Contains the unpacked data values.  fld must be allocated
+//                with at least ndpts*sizeof(g2float) bytes before
+//                calling this routine.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE: 
+//
+//$$$//
+{
+
+      g2int   nbitsd=0,isign;
+      g2int  j,iofst,ival1,ival2,minsd,itemp,l,k,n,non=0;
+      g2int  *ifld,*ifldmiss=0;
+      g2int  *gref,*gwidth,*glen;
+      g2int  itype,ngroups,nbitsgref,nbitsgwidth,nbitsglen;
+      g2int  msng1,msng2;
+      g2float ref,bscale,dscale,rmiss1,rmiss2;
+      g2int totBit, totLen;
+
+      //printf('IDRSTMPL: ',(idrstmpl(j),j=1,16)
+      rdieee(idrstmpl+0,&ref,1);
+//      printf("SAGTref: %f\n",ref);
+      bscale = (g2float)int_power(2.0,idrstmpl[1]);
+      dscale = (g2float)int_power(10.0,-idrstmpl[2]);
+      nbitsgref = idrstmpl[3];
+      itype = idrstmpl[4];
+      ngroups = idrstmpl[9];
+      nbitsgwidth = idrstmpl[11];
+      nbitsglen = idrstmpl[15];
+      if (idrsnum == 3)
+         nbitsd=idrstmpl[17]*8;
+
+      //   Constant field
+
+      if (ngroups == 0) {
+         for (j=0;j<ndpts;j++) fld[j]=ref;
+         return(0);
+      }
+
+      iofst=0;
+      ifld=(g2int *)calloc(ndpts,sizeof(g2int));
+      //printf("ALLOC ifld: %d %x\n",(int)ndpts,ifld);
+      gref=(g2int *)calloc(ngroups,sizeof(g2int));
+      //printf("ALLOC gref: %d %x\n",(int)ngroups,gref);
+      gwidth=(g2int *)calloc(ngroups,sizeof(g2int));
+      //printf("ALLOC gwidth: %d %x\n",(int)ngroups,gwidth);
+//
+//  Get missing values, if supplied
+//
+      if ( idrstmpl[6] == 1 ) {
+         if (itype == 0) 
+            rdieee(idrstmpl+7,&rmiss1,1);
+         else 
+            rmiss1=(g2float)idrstmpl[7];
+      }
+      if ( idrstmpl[6] == 2 ) {
+         if (itype == 0) {
+            rdieee(idrstmpl+7,&rmiss1,1);
+            rdieee(idrstmpl+8,&rmiss2,1);
+         }
+         else {
+            rmiss1=(g2float)idrstmpl[7];
+            rmiss2=(g2float)idrstmpl[8];
+         }
+      }
+      
+      //printf("RMISSs: %f %f %f \n",rmiss1,rmiss2,ref);
+// 
+//  Extract Spatial differencing values, if using DRS Template 5.3
+//
+      if (idrsnum == 3) {
+         if (nbitsd != 0) {
+              gbit(cpack,&isign,iofst,1);
+              iofst=iofst+1;
+              gbit(cpack,&ival1,iofst,nbitsd-1);
+              iofst=iofst+nbitsd-1;
+              if (isign == 1) ival1=-ival1;
+              if (idrstmpl[16] == 2) {
+                 gbit(cpack,&isign,iofst,1);
+                 iofst=iofst+1;
+                 gbit(cpack,&ival2,iofst,nbitsd-1);
+                 iofst=iofst+nbitsd-1;
+                 if (isign == 1) ival2=-ival2;
+              }
+              gbit(cpack,&isign,iofst,1);
+              iofst=iofst+1;
+              gbit(cpack,&minsd,iofst,nbitsd-1);
+              iofst=iofst+nbitsd-1;
+              if (isign == 1) minsd=-minsd;
+         }
+         else {
+              ival1=0;
+              ival2=0;
+              minsd=0;
+         }
+       //printf("SDu %ld %ld %ld %ld \n",ival1,ival2,minsd,nbitsd);
+      }
+//
+//  Extract Each Group's reference value
+//
+      //printf("SAG1: %ld %ld %ld \n",nbitsgref,ngroups,iofst);
+      if (nbitsgref != 0) {
+         gbits(cpack,gref+0,iofst,nbitsgref,0,ngroups);
+         itemp=nbitsgref*ngroups;
+         iofst=iofst+itemp;
+         if (itemp%8 != 0) iofst=iofst+(8-(itemp%8));
+      }
+      else {
+         for (j=0;j<ngroups;j++)
+              gref[j]=0;
+      }
+//
+//  Extract Each Group's bit width
+//
+      //printf("SAG2: %ld %ld %ld %ld \n",nbitsgwidth,ngroups,iofst,idrstmpl[10]);
+      if (nbitsgwidth != 0) {
+         gbits(cpack,gwidth+0,iofst,nbitsgwidth,0,ngroups);
+         itemp=nbitsgwidth*ngroups;
+         iofst=iofst+itemp;
+         if (itemp%8 != 0) iofst=iofst+(8-(itemp%8));
+      }
+      else {
+         for (j=0;j<ngroups;j++)
+                gwidth[j]=0;
+      }
+
+      for (j=0;j<ngroups;j++)
+          gwidth[j]=gwidth[j]+idrstmpl[10];
+      
+//
+//  Extract Each Group's length (number of values in each group)
+//
+      glen=(g2int *)calloc(ngroups,sizeof(g2int));
+      //printf("ALLOC glen: %d %x\n",(int)ngroups,glen);
+      //printf("SAG3: %ld %ld %ld %ld %ld \n",nbitsglen,ngroups,iofst,idrstmpl[13],idrstmpl[12]);
+      if (nbitsglen != 0) {
+         gbits(cpack,glen,iofst,nbitsglen,0,ngroups);
+         itemp=nbitsglen*ngroups;
+         iofst=iofst+itemp;
+         if (itemp%8 != 0) iofst=iofst+(8-(itemp%8));
+      }
+      else {
+         for (j=0;j<ngroups;j++)
+              glen[j]=0;
+      }
+      for (j=0;j<ngroups;j++) 
+           glen[j]=(glen[j]*idrstmpl[13])+idrstmpl[12];
+      glen[ngroups-1]=idrstmpl[14];
+//
+//  Test to see if the group widths and lengths are consistent with number of
+//  values, and length of section 7.
+//
+      totBit = 0;
+      totLen = 0;
+      for (j=0;j<ngroups;j++) {
+        totBit += (gwidth[j]*glen[j]);
+        totLen += glen[j];
+      }
+      if (totLen != ndpts) {
+        return 1;
+      }
+      if (totBit / 8. > lensec) {
+        return 1;
+      }
+//
+//  For each group, unpack data values
+//
+      if ( idrstmpl[6] == 0 ) {        // no missing values
+         n=0;
+         for (j=0;j<ngroups;j++) {
+           if (gwidth[j] != 0) {
+             gbits(cpack,ifld+n,iofst,gwidth[j],0,glen[j]);
+             for (k=0;k<glen[j];k++) {
+               ifld[n]=ifld[n]+gref[j];
+               n=n+1;
+             }
+           }
+           else {
+             for (l=n;l<n+glen[j];l++) ifld[l]=gref[j];
+             n=n+glen[j];
+           }
+           iofst=iofst+(gwidth[j]*glen[j]);
+         }
+      }
+      else if ( idrstmpl[6]==1 || idrstmpl[6]==2 ) {
+         // missing values included
+         ifldmiss=(g2int *)malloc(ndpts*sizeof(g2int));
+         //printf("ALLOC ifldmiss: %d %x\n",(int)ndpts,ifldmiss);
+         //for (j=0;j<ndpts;j++) ifldmiss[j]=0;
+         n=0;
+         non=0;
+         for (j=0;j<ngroups;j++) {
+           //printf(" SAGNGP %d %d %d %d\n",j,gwidth[j],glen[j],gref[j]);
+           if (gwidth[j] != 0) {
+             msng1=(g2int)int_power(2.0,gwidth[j])-1;
+             msng2=msng1-1;
+             gbits(cpack,ifld+n,iofst,gwidth[j],0,glen[j]);
+             iofst=iofst+(gwidth[j]*glen[j]);
+             for (k=0;k<glen[j];k++) {
+               if (ifld[n] == msng1) {
+                  ifldmiss[n]=1;
+                  //ifld[n]=0;
+               }
+               else if (idrstmpl[6]==2 && ifld[n]==msng2) {
+                  ifldmiss[n]=2;
+                  //ifld[n]=0;
+               }
+               else {
+                  ifldmiss[n]=0;
+                  ifld[non++]=ifld[n]+gref[j];
+               }
+               n++;
+             }
+           }
+           else {
+             msng1=(g2int)int_power(2.0,nbitsgref)-1;
+             msng2=msng1-1;
+             if (gref[j] == msng1) {
+                for (l=n;l<n+glen[j];l++) ifldmiss[l]=1;
+             }
+             else if (idrstmpl[6]==2 && gref[j]==msng2) {
+                for (l=n;l<n+glen[j];l++) ifldmiss[l]=2;
+             }
+             else {
+                for (l=n;l<n+glen[j];l++) ifldmiss[l]=0;
+                for (l=non;l<non+glen[j];l++) ifld[l]=gref[j];
+                non += glen[j];
+             }
+             n=n+glen[j];
+           }
+         }
+      }
+
+      if ( gref != 0 ) free(gref);
+      if ( gwidth != 0 ) free(gwidth);
+      if ( glen != 0 ) free(glen);
+//
+//  If using spatial differences, add overall min value, and
+//  sum up recursively
+//
+      //printf("SAGod: %ld %ld\n",idrsnum,idrstmpl[16]);
+      if (idrsnum == 3) {         // spatial differencing
+         if (idrstmpl[16] == 1) {      // first order
+            ifld[0]=ival1;
+            if ( idrstmpl[6] == 0 ) itemp=ndpts;        // no missing values
+            else  itemp=non;
+            for (n=1;n<itemp;n++) {
+               ifld[n]=ifld[n]+minsd;
+               ifld[n]=ifld[n]+ifld[n-1];
+            }
+         }
+         else if (idrstmpl[16] == 2) {    // second order
+            ifld[0]=ival1;
+            ifld[1]=ival2;
+            if ( idrstmpl[6] == 0 ) itemp=ndpts;        // no missing values
+            else  itemp=non;
+            for (n=2;n<itemp;n++) {
+               ifld[n]=ifld[n]+minsd;
+               ifld[n]=ifld[n]+(2*ifld[n-1])-ifld[n-2];
+            }
+         }
+      }
+//
+//  Scale data back to original form
+//
+      //printf("SAGT: %f %f %f\n",ref,bscale,dscale);
+      if ( idrstmpl[6] == 0 ) {        // no missing values
+         for (n=0;n<ndpts;n++) {
+            fld[n]=(((g2float)ifld[n]*bscale)+ref)*dscale;
+         }
+      }
+      else if ( idrstmpl[6]==1 || idrstmpl[6]==2 ) {
+         // missing values included
+         non=0;
+         for (n=0;n<ndpts;n++) {
+            if ( ifldmiss[n] == 0 ) {
+               fld[n]=(((g2float)ifld[non++]*bscale)+ref)*dscale;
+               //printf(" SAG %d %f %d %f %f %f\n",n,fld[n],ifld[non-1],bscale,ref,dscale);
+            }
+            else if ( ifldmiss[n] == 1 ) 
+               fld[n]=rmiss1;
+            else if ( ifldmiss[n] == 2 ) 
+               fld[n]=rmiss2;
+         }
+         if ( ifldmiss != 0 ) free(ifldmiss);
+      }
+
+      if ( ifld != 0 ) free(ifld);
+
+      return(0);
+      
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/dec_jpeg2000.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/dec_jpeg2000.c
new file mode 100644
index 0000000..94666a9
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/dec_jpeg2000.c
@@ -0,0 +1,144 @@
+#ifndef USE_JPEG2000
+#include "grib2.h"
+ int dec_jpeg2000(char *injpc,g2int bufsize,g2int *outfld)
+ {	return( 0 );	}
+#else   /* USE_JPEG2000 */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "grib2.h"
+#include "jasper/jasper.h"
+#define JAS_1_700_2
+
+
+   int dec_jpeg2000(char *injpc,g2int bufsize,g2int *outfld)
+/*$$$  SUBPROGRAM DOCUMENTATION BLOCK
+*                .      .    .                                       .
+* SUBPROGRAM:    dec_jpeg2000      Decodes JPEG2000 code stream
+*   PRGMMR: Gilbert          ORG: W/NP11     DATE: 2002-12-02
+*
+* ABSTRACT: This Function decodes a JPEG2000 code stream specified in the
+*   JPEG2000 Part-1 standard (i.e., ISO/IEC 15444-1) using JasPer 
+*   Software version 1.500.4 (or 1.700.2) written by the University of British
+*   Columbia and Image Power Inc, and others.
+*   JasPer is available at http://www.ece.uvic.ca/~mdadams/jasper/.
+*
+* PROGRAM HISTORY LOG:
+* 2002-12-02  Gilbert
+*
+* USAGE:     int dec_jpeg2000(char *injpc,g2int bufsize,g2int *outfld)
+*
+*   INPUT ARGUMENTS:
+*      injpc - Input JPEG2000 code stream.
+*    bufsize - Length (in bytes) of the input JPEG2000 code stream.
+*
+*   OUTPUT ARGUMENTS:
+*     outfld - Output matrix of grayscale image values.
+*
+*   RETURN VALUES :
+*          0 = Successful decode
+*         -3 = Error decode jpeg2000 code stream.
+*         -5 = decoded image had multiple color components.
+*              Only grayscale is expected.
+*
+* REMARKS:
+*
+*      Requires JasPer Software version 1.500.4 or 1.700.2
+*
+* ATTRIBUTES:
+*   LANGUAGE: C
+*   MACHINE:  IBM SP
+*
+*$$$*/
+
+{
+    int ier;
+    g2int i,j,k;
+    jas_image_t *image=0;
+    jas_stream_t *jpcstream;
+    jas_image_cmpt_t *pcmpt;
+    char *opts=0;
+    jas_matrix_t *data;
+
+//    jas_init();
+
+    ier=0;
+//   
+//     Create jas_stream_t containing input JPEG200 codestream in memory.
+//       
+
+    jpcstream=jas_stream_memopen(injpc,bufsize);
+
+//   
+//     Decode JPEG200 codestream into jas_image_t structure.
+//       
+    image=jpc_decode(jpcstream,opts);
+    if ( image == 0 ) {
+       printf(" jpc_decode return = %d \n",ier);
+       return -3;
+    }
+    
+    pcmpt=image->cmpts_[0];
+/*
+    printf(" SAGOUT DECODE:\n");
+    printf(" tlx %d \n",image->tlx_);
+    printf(" tly %d \n",image->tly_);
+    printf(" brx %d \n",image->brx_);
+    printf(" bry %d \n",image->bry_);
+    printf(" numcmpts %d \n",image->numcmpts_);
+    printf(" maxcmpts %d \n",image->maxcmpts_);
+#ifdef JAS_1_500_4
+    printf(" colormodel %d \n",image->colormodel_);
+#endif
+#ifdef JAS_1_700_2
+    printf(" colorspace %d \n",image->clrspc_);
+#endif
+    printf(" inmem %d \n",image->inmem_);
+    printf(" COMPONENT:\n");
+    printf(" tlx %d \n",pcmpt->tlx_);
+    printf(" tly %d \n",pcmpt->tly_);
+    printf(" hstep %d \n",pcmpt->hstep_);
+    printf(" vstep %d \n",pcmpt->vstep_);
+    printf(" width %d \n",pcmpt->width_);
+    printf(" height %d \n",pcmpt->height_);
+    printf(" prec %d \n",pcmpt->prec_);
+    printf(" sgnd %d \n",pcmpt->sgnd_);
+    printf(" cps %d \n",pcmpt->cps_);
+#ifdef JAS_1_700_2
+    printf(" type %d \n",pcmpt->type_);
+#endif
+*/
+
+//   Expecting jpeg2000 image to be grayscale only.
+//   No color components.
+//
+    if (image->numcmpts_ != 1 ) {
+       printf("dec_jpeg2000: Found color image.  Grayscale expected.\n");
+       return (-5);
+    }
+
+// 
+//    Create a data matrix of grayscale image values decoded from
+//    the jpeg2000 codestream.
+//
+    data=jas_matrix_create(jas_image_height(image), jas_image_width(image));
+    jas_image_readcmpt(image,0,0,0,jas_image_width(image),
+                       jas_image_height(image),data);
+//
+//    Copy data matrix to output integer array.
+//
+    k=0;
+    for (i=0;i<pcmpt->height_;i++) 
+      for (j=0;j<pcmpt->width_;j++) 
+        outfld[k++]=data->rows_[i][j];
+//
+//     Clean up JasPer work structures.
+//
+    jas_matrix_destroy(data);
+    ier=jas_stream_close(jpcstream);
+    jas_image_destroy(image);
+
+    return 0;
+
+}
+#endif   /* USE_JPEG2000 */
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/dec_png.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/dec_png.c
new file mode 100644
index 0000000..27987c3
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/dec_png.c
@@ -0,0 +1,141 @@
+#ifndef USE_PNG
+#include "grib2.h"
+ int dec_png(unsigned char *pngbuf,g2int *width,g2int *height,char *cout)
+ {	return( 0 );	}
+#else   /* USE_PNG */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <png.h>
+#include "grib2.h"
+
+
+struct png_stream {
+   unsigned char *stream_ptr;     /*  location to write PNG stream  */
+   g2int stream_len;               /*  number of bytes written       */
+};
+typedef struct png_stream png_stream;
+
+void user_read_data(png_structp , png_bytep , png_uint_32 );
+
+void user_read_data(png_structp png_ptr,png_bytep data, png_uint_32 length)
+/*
+        Custom read function used so that libpng will read a PNG stream
+        from memory instead of a file on disk.
+*/
+{
+     char *ptr;
+     g2int offset;
+     png_stream *mem;
+
+     mem=(png_stream *)png_get_io_ptr(png_ptr);
+     ptr=(void *)mem->stream_ptr;
+     offset=mem->stream_len;
+/*     printf("SAGrd %ld %ld %x\n",offset,length,ptr);  */
+     memcpy(data,ptr+offset,length);
+     mem->stream_len += length;
+}
+
+
+
+int dec_png(unsigned char *pngbuf,g2int *width,g2int *height,char *cout)
+{
+    int interlace,color,compres,filter,bit_depth;
+    g2int j,k,n,bytes,clen;
+    png_structp png_ptr;
+    png_infop info_ptr,end_info;
+    png_bytepp row_pointers;
+    png_stream read_io_ptr;
+
+/*  check if stream is a valid PNG format   */
+
+    if ( png_sig_cmp(pngbuf,0,8) != 0) 
+       return (-3);
+
+/* create and initialize png_structs  */
+
+    png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, 
+                                      NULL, NULL);
+    if (!png_ptr)
+       return (-1);
+
+    info_ptr = png_create_info_struct(png_ptr);
+    if (!info_ptr)
+    {
+       png_destroy_read_struct(&png_ptr,(png_infopp)NULL,(png_infopp)NULL);
+       return (-2);
+    }
+
+    end_info = png_create_info_struct(png_ptr);
+    if (!end_info)
+    {
+       png_destroy_read_struct(&png_ptr,(png_infopp)info_ptr,(png_infopp)NULL);
+       return (-2);
+    }
+
+/*     Set Error callback   */
+
+    if (setjmp(png_jmpbuf(png_ptr)))
+    {
+       png_destroy_read_struct(&png_ptr, &info_ptr,&end_info);
+       return (-3);
+    }
+
+/*    Initialize info for reading PNG stream from memory   */
+
+    read_io_ptr.stream_ptr=(png_voidp)pngbuf;
+    read_io_ptr.stream_len=0;
+
+/*    Set new custom read function    */
+
+    png_set_read_fn(png_ptr,(voidp)&read_io_ptr,(png_rw_ptr)user_read_data);
+/*     png_init_io(png_ptr, fptr);   */
+
+/*     Read and decode PNG stream   */
+
+    png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
+
+/*     Get pointer to each row of image data   */
+
+    row_pointers = png_get_rows(png_ptr, info_ptr);
+
+/*     Get image info, such as size, depth, colortype, etc...   */
+
+    /*printf("SAGT:png %d %d %d\n",info_ptr->width,info_ptr->height,info_ptr->bit_depth);*/
+    (void)png_get_IHDR(png_ptr, info_ptr, (png_uint_32 *)width, (png_uint_32 *)height,
+               &bit_depth, &color, &interlace, &compres, &filter);
+
+/*     Check if image was grayscale      */
+
+/*
+    if (color != PNG_COLOR_TYPE_GRAY ) {
+       fprintf(stderr,"dec_png: Grayscale image was expected. \n");
+    }
+*/
+    if ( color == PNG_COLOR_TYPE_RGB ) {
+       bit_depth=24;
+    }
+    else if ( color == PNG_COLOR_TYPE_RGB_ALPHA ) {
+       bit_depth=32;
+    }
+/*     Copy image data to output string   */
+
+    n=0;
+    bytes=bit_depth/8;
+    clen=(*width)*bytes;
+    for (j=0;j<*height;j++) {
+      for (k=0;k<clen;k++) {
+        cout[n]=*(row_pointers[j]+k);
+        n++;
+      }
+    }
+
+/*      Clean up   */
+
+    png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
+    return 0;
+
+}
+
+#endif   /* USE_PNG */
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/drstemplates.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/drstemplates.c
new file mode 100755
index 0000000..2609dac
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/drstemplates.c
@@ -0,0 +1,154 @@
+#include <stdlib.h>
+#include "grib2.h"
+#include "drstemplates.h"
+
+g2int getdrsindex(g2int number)
+/*!$$$  SUBPROGRAM DOCUMENTATION BLOCK
+!                .      .    .                                       .
+! SUBPROGRAM:    getdrsindex 
+!   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2001-06-28
+!
+! ABSTRACT: This function returns the index of specified Data 
+!   Representation Template 5.NN (NN=number) in array templates.
+!
+! PROGRAM HISTORY LOG:
+! 2001-06-28  Gilbert
+!
+! USAGE:    index=getdrsindex(number)
+!   INPUT ARGUMENT LIST:
+!     number   - NN, indicating the number of the Data Representation 
+!                Template 5.NN that is being requested.
+!
+! RETURNS:  Index of DRT 5.NN in array templates, if template exists.
+!           = -1, otherwise.
+!
+! REMARKS: None
+!
+! ATTRIBUTES:
+!   LANGUAGE: C
+!   MACHINE:  IBM SP
+!
+!$$$*/
+{
+           g2int j,getdrsindex=-1;
+
+           for (j=0;j<MAXDRSTEMP;j++) {
+              if (number == templatesdrs[j].template_num) {
+                 getdrsindex=j;
+                 return(getdrsindex);
+              }
+           }
+
+           return(getdrsindex);
+}
+
+
+template *getdrstemplate(g2int number)
+/*!$$$  SUBPROGRAM DOCUMENTATION BLOCK
+!                .      .    .                                       .
+! SUBPROGRAM:    getdrstemplate 
+!   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2000-05-11
+!
+! ABSTRACT: This subroutine returns DRS template information for a 
+!   specified Data Representation Template 5.NN.
+!   The number of entries in the template is returned along with a map
+!   of the number of octets occupied by each entry.  Also, a flag is
+!   returned to indicate whether the template would need to be extended.
+!
+! PROGRAM HISTORY LOG:
+! 2000-05-11  Gilbert
+!
+! USAGE:    new=getdrstemplate(number);
+!   INPUT ARGUMENT LIST:
+!     number   - NN, indicating the number of the Data Representation 
+!                Template 5.NN that is being requested.
+!
+!   RETURN VALUE:      
+!        - Pointer to the returned template struct. 
+!          Returns NULL pointer, if template not found.
+!
+! REMARKS: None
+!
+! ATTRIBUTES:
+!   LANGUAGE: C
+!   MACHINE:  IBM SP
+!
+!$$$*/
+{
+           g2int index;
+           template *new;
+
+           index=getdrsindex(number);
+
+           if (index != -1) {
+              new=(template *)malloc(sizeof(template));
+              new->type=5;
+              new->num=templatesdrs[index].template_num;
+              new->maplen=templatesdrs[index].mapdrslen;
+              new->needext=templatesdrs[index].needext;
+              new->map=(g2int *)templatesdrs[index].mapdrs;
+              new->extlen=0;
+              new->ext=0;        //NULL
+              return(new);
+           }
+           else {
+             printf("getdrstemplate: DRS Template 5.%d not defined.\n",(int)number);
+             return(0);        //NULL
+           }
+
+         return(0);        //NULL
+}
+
+template *extdrstemplate(g2int number,g2int *list)
+/*!$$$  SUBPROGRAM DOCUMENTATION BLOCK
+!                .      .    .                                       .
+! SUBPROGRAM:    extdrstemplate 
+!   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2000-05-11
+!
+! ABSTRACT: This subroutine generates the remaining octet map for a
+!   given Data Representation Template, if required.  Some Templates can
+!   vary depending on data values given in an earlier part of the 
+!   Template, and it is necessary to know some of the earlier entry
+!   values to generate the full octet map of the Template.
+!
+! PROGRAM HISTORY LOG:
+! 2000-05-11  Gilbert
+!
+! USAGE:    new=extdrstemplate(number,list);
+!   INPUT ARGUMENT LIST:
+!     number   - NN, indicating the number of the Data Representation 
+!                Template 5.NN that is being requested.
+!     list()   - The list of values for each entry in the 
+!                the Data Representation Template 5.NN.
+!
+!   RETURN VALUE:      
+!        - Pointer to the returned template struct. 
+!          Returns NULL pointer, if template not found.
+!
+! ATTRIBUTES:
+!   LANGUAGE: C
+!   MACHINE:  IBM SP
+!
+!$$$*/
+{
+           template *new;
+           g2int index,i;
+
+           index=getdrsindex(number);
+           if (index == -1) return(0);
+
+           new=getdrstemplate(number);
+
+           if ( ! new->needext ) return(new);
+
+           if ( number == 1 ) {
+              new->extlen=list[10]+list[12];
+              new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+              for (i=0;i<new->extlen;i++) {
+                new->ext[i]=4;
+              }
+           }
+           return(new);
+
+}
+
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/drstemplates.h b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/drstemplates.h
new file mode 100755
index 0000000..5e4c733
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/drstemplates.h
@@ -0,0 +1,69 @@
+#ifndef _drstemplates_H
+#define _drstemplates_H
+#include "grib2.h"
+
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-26
+//
+// ABSTRACT: This Fortran Module contains info on all the available 
+//   GRIB2 Data Representation Templates used in Section 5 (DRS).
+//   The information decribing each template is stored in the
+//   drstemplate structure defined below.
+//
+//   Each Template has three parts: The number of entries in the template
+//   (mapdrslen);  A map of the template (mapdrs), which contains the
+//   number of octets in which to pack each of the template values; and
+//   a logical value (needext) that indicates whether the Template needs 
+//   to be extended.  In some cases the number of entries in a template 
+//   can vary depending upon values specified in the "static" part of 
+//   the template.  ( See Template 5.1 as an example )
+//
+//   NOTE:  Array mapdrs contains the number of octets in which the 
+//   corresponding template values will be stored.  A negative value in
+//   mapdrs is used to indicate that the corresponding template entry can
+//   contain negative values.  This information is used later when packing
+//   (or unpacking) the template data values.  Negative data values in GRIB
+//   are stored with the left most bit set to one, and a negative number
+//   of octets value in mapdrs[] indicates that this possibility should
+//   be considered.  The number of octets used to store the data value
+//   in this case would be the absolute value of the negative value in 
+//   mapdrs[].
+//  
+//
+///////////////////////////////////////////////////////////////////////
+
+      #define MAXDRSTEMP 9              // maximum number of templates
+      #define MAXDRSMAPLEN 200          // maximum template map length
+
+      struct drstemplate
+      {
+          g2int template_num;
+          g2int mapdrslen;
+          g2int needext;
+          g2int mapdrs[MAXDRSMAPLEN];
+      };
+
+      const struct drstemplate templatesdrs[MAXDRSTEMP] = {
+             // 5.0: Grid point data - Simple Packing
+         { 0, 5, 0, {4,-2,-2,1,1} },
+             // 5.2: Grid point data - Complex Packing
+         { 2, 16, 0, {4,-2,-2,1,1,1,1,4,4,4,1,1,4,1,4,1} },
+             // 5.3: Grid point data - Complex Packing and spatial differencing
+         { 3, 18, 0, {4,-2,-2,1,1,1,1,4,4,4,1,1,4,1,4,1,1,1} },
+             // 5.50: Spectral Data - Simple Packing
+         { 50, 5, 0, {4,-2,-2,1,4} },
+             // 5.51: Spherical Harmonics data - Complex packing 
+         { 51, 10, 0, {4,-2,-2,1,-4,2,2,2,4,1} },
+//           // 5.1: Matrix values at gridpoint - Simple packing
+//         { 1, 15, 1, {4,-2,-2,1,1,1,4,2,2,1,1,1,1,1,1} },
+             // 5.40: Grid point data - JPEG2000 encoding
+         { 40, 7, 0, {4,-2,-2,1,1,1,1} },
+             // 5.41: Grid point data - PNG encoding
+         { 41, 5, 0, {4,-2,-2,1,1} },
+             // 5.40000: Grid point data - JPEG2000 encoding
+         { 40000, 7, 0, {4,-2,-2,1,1,1,1} },
+             // 5.40010: Grid point data - PNG encoding
+         { 40010, 5, 0, {4,-2,-2,1,1} }
+      } ;
+
+
+#endif  /*  _drstemplates_H  */
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/enc_jpeg2000.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/enc_jpeg2000.c
new file mode 100644
index 0000000..e082970
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/enc_jpeg2000.c
@@ -0,0 +1,187 @@
+#ifndef USE_JPEG2000
+#include "grib2.h"
+ int enc_jpeg2000(unsigned char *cin,g2int width,g2int height,g2int nbits,
+                 g2int ltype, g2int ratio, g2int retry, char *outjpc, 
+                 g2int jpclen)
+ {	return( 0 );	}
+#else   /* USE_JPEG2000 */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+#include "jasper/jasper.h"
+#define JAS_1_700_2
+
+
+int enc_jpeg2000(unsigned char *cin,g2int width,g2int height,g2int nbits,
+                 g2int ltype, g2int ratio, g2int retry, char *outjpc, 
+                 g2int jpclen)
+/*$$$  SUBPROGRAM DOCUMENTATION BLOCK
+*                .      .    .                                       .
+* SUBPROGRAM:    enc_jpeg2000      Encodes JPEG2000 code stream
+*   PRGMMR: Gilbert          ORG: W/NP11     DATE: 2002-12-02
+*
+* ABSTRACT: This Function encodes a grayscale image into a JPEG2000 code stream
+*   specified in the JPEG2000 Part-1 standard (i.e., ISO/IEC 15444-1) 
+*   using JasPer Software version 1.500.4 (or 1.700.2 ) written by the 
+*   University of British Columbia, Image Power Inc, and others.
+*   JasPer is available at http://www.ece.uvic.ca/~mdadams/jasper/.
+*
+* PROGRAM HISTORY LOG:
+* 2002-12-02  Gilbert
+* 2004-12-16  Gilbert - Added retry argument/option to allow option of
+*                       increasing the maximum number of guard bits to the
+*                       JPEG2000 algorithm.
+*
+* USAGE:    int enc_jpeg2000(unsigned char *cin,g2int width,g2int height,
+*                            g2int nbits, g2int ltype, g2int ratio, 
+*                            g2int retry, char *outjpc, g2int jpclen)
+*
+*   INPUT ARGUMENTS:
+*      cin   - Packed matrix of Grayscale image values to encode.
+*     width  - width of image
+*     height - height of image
+*     nbits  - depth (in bits) of image.  i.e number of bits
+*              used to hold each data value
+*    ltype   - indicator of lossless or lossy compression
+*              = 1, for lossy compression
+*              != 1, for lossless compression
+*    ratio   - target compression ratio.  (ratio:1)
+*              Used only when ltype == 1.
+*    retry   - Pointer to option type.
+*              1 = try increasing number of guard bits
+*              otherwise, no additional options
+*    jpclen  - Number of bytes allocated for new JPEG2000 code stream in
+*              outjpc.
+*
+*   INPUT ARGUMENTS:
+*     outjpc - Output encoded JPEG2000 code stream
+*
+*   RETURN VALUES :
+*        > 0 = Length in bytes of encoded JPEG2000 code stream
+*         -3 = Error decode jpeg2000 code stream.
+*         -5 = decoded image had multiple color components.
+*              Only grayscale is expected.
+*
+* REMARKS:
+*
+*      Requires JasPer Software version 1.500.4 or 1.700.2
+*
+* ATTRIBUTES:
+*   LANGUAGE: C
+*   MACHINE:  IBM SP
+*
+*$$$*/
+{
+    int ier,rwcnt;
+    jas_image_t image;
+    jas_stream_t *jpcstream,*istream;
+    jas_image_cmpt_t cmpt,*pcmpt;
+#define MAXOPTSSIZE 1024
+    char opts[MAXOPTSSIZE];
+
+/*
+    printf(" enc_jpeg2000:width %ld\n",width);
+    printf(" enc_jpeg2000:height %ld\n",height);
+    printf(" enc_jpeg2000:nbits %ld\n",nbits);
+    printf(" enc_jpeg2000:jpclen %ld\n",jpclen);
+*/
+//    jas_init();
+
+//
+//    Set lossy compression options, if requested.
+//
+    if ( ltype != 1 ) {
+       opts[0]=(char)0;
+    }
+    else {
+#ifdef _SAGA_MSW
+       sprintf(opts,"mode=real\nrate=%f",1.0/(float)ratio);
+#else
+       snprintf(opts,MAXOPTSSIZE,"mode=real\nrate=%f",1.0/(float)ratio);
+#endif	// _SAGA_MSW
+    }
+    if ( retry == 1 ) {             // option to increase number of guard bits
+       strcat(opts,"\nnumgbits=4");
+    }
+    //printf("SAGopts: %s\n",opts);
+    
+//
+//     Initialize the JasPer image structure describing the grayscale
+//     image to encode into the JPEG2000 code stream.
+//
+    image.tlx_=0;
+    image.tly_=0;
+#ifdef JAS_1_500_4 
+    image.brx_=(uint_fast32_t)width;
+    image.bry_=(uint_fast32_t)height;
+#endif 
+#ifdef JAS_1_700_2
+    image.brx_=(jas_image_coord_t)width;
+    image.bry_=(jas_image_coord_t)height;
+#endif
+    image.numcmpts_=1;
+    image.maxcmpts_=1;
+#ifdef JAS_1_500_4
+    image.colormodel_=JAS_IMAGE_CM_GRAY;         /* grayscale Image */
+#endif
+#ifdef JAS_1_700_2
+    image.clrspc_=JAS_CLRSPC_SGRAY;         /* grayscale Image */
+    image.cmprof_=0; 
+#endif
+    image.inmem_=1;
+
+    cmpt.tlx_=0;
+    cmpt.tly_=0;
+    cmpt.hstep_=1;
+    cmpt.vstep_=1;
+#ifdef JAS_1_500_4
+    cmpt.width_=(uint_fast32_t)width;
+    cmpt.height_=(uint_fast32_t)height;
+#endif
+#ifdef JAS_1_700_2
+    cmpt.width_=(jas_image_coord_t)width;
+    cmpt.height_=(jas_image_coord_t)height;
+    cmpt.type_=JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_GRAY_Y);
+#endif
+    cmpt.prec_=nbits;
+    cmpt.sgnd_=0;
+    cmpt.cps_=(nbits+7)/8;
+
+    pcmpt=&cmpt;
+    image.cmpts_=&pcmpt;
+
+//
+//    Open a JasPer stream containing the input grayscale values
+//
+    istream=jas_stream_memopen((char *)cin,height*width*cmpt.cps_);
+    cmpt.stream_=istream;
+
+//
+//    Open an output stream that will contain the encoded jpeg2000
+//    code stream.
+//
+    jpcstream=jas_stream_memopen(outjpc,(int)jpclen);
+
+//
+//     Encode image.
+//
+    ier=jpc_encode(&image,jpcstream,opts);
+    if ( ier != 0 ) {
+       printf(" jpc_encode return = %d \n",ier);
+       return -3;
+    }
+//
+//     Clean up JasPer work structures.
+//    
+    rwcnt=jpcstream->rwcnt_;
+    ier=jas_stream_close(istream);
+    ier=jas_stream_close(jpcstream);
+//
+//      Return size of jpeg2000 code stream
+//
+    return (rwcnt);
+
+}
+
+#endif   /* USE_JPEG2000 */
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/enc_png.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/enc_png.c
new file mode 100644
index 0000000..0a216a8
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/enc_png.c
@@ -0,0 +1,135 @@
+#ifndef USE_PNG
+#include "grib2.h"
+ int enc_png(char *data,g2int width,g2int height,g2int nbits,char *pngbuf)	{	return( 0 );	}
+#else   /* USE_PNG */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <png.h>
+#include "grib2.h"
+
+
+struct png_stream {
+   unsigned char *stream_ptr;     /*  location to write PNG stream  */
+   g2int stream_len;               /*  number of bytes written       */
+};
+typedef struct png_stream png_stream;
+
+void user_write_data(png_structp ,png_bytep , png_uint_32 );
+void user_flush_data(png_structp );
+
+void user_write_data(png_structp png_ptr,png_bytep data, png_uint_32 length)
+/*
+        Custom write function used to that libpng will write
+        to memory location instead of a file on disk
+*/
+{
+     unsigned char *ptr;
+     g2int offset;
+     png_stream *mem;
+
+     mem=(png_stream *)png_get_io_ptr(png_ptr);
+     ptr=mem->stream_ptr;
+     offset=mem->stream_len;
+/*     printf("SAGwr %ld %ld %x\n",offset,length,ptr);    */
+     /*for (j=offset,k=0;k<length;j++,k++) ptr[j]=data[k];*/
+     memcpy(ptr+offset,data,length);
+     mem->stream_len += length;
+}
+
+
+void user_flush_data(png_structp png_ptr)
+/*
+        Dummy Custom flush function
+*/
+{
+   int *do_nothing;
+   do_nothing=NULL;
+}
+
+
+int enc_png(char *data,g2int width,g2int height,g2int nbits,char *pngbuf)
+{
+ 
+    int color_type;
+    g2int j,bytes,pnglen,bit_depth;
+    png_structp png_ptr;
+    png_infop info_ptr;
+//    png_bytep *row_pointers[height];
+    png_bytep **row_pointers;
+    png_stream write_io_ptr;
+
+/* create and initialize png_structs  */
+
+    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, 
+                                      NULL, NULL);
+    if (!png_ptr)
+       return (-1);
+
+    info_ptr = png_create_info_struct(png_ptr);
+    if (!info_ptr)
+    {
+       png_destroy_write_struct(&png_ptr,(png_infopp)NULL);
+       return (-2);
+    }
+
+/*     Set Error callback   */
+
+    if (setjmp(png_jmpbuf(png_ptr)))
+    {
+       png_destroy_write_struct(&png_ptr, &info_ptr);
+       return (-3);
+    }
+
+/*    Initialize info for writing PNG stream to memory   */
+
+    write_io_ptr.stream_ptr=(png_voidp)pngbuf;
+    write_io_ptr.stream_len=0;
+
+/*    Set new custom write functions    */
+
+    png_set_write_fn(png_ptr,(voidp)&write_io_ptr,(png_rw_ptr)user_write_data,
+                    (png_flush_ptr)user_flush_data);
+/*    png_init_io(png_ptr, fptr);   */
+/*    png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);  */
+
+/*     Set the image size, colortype, filter type, etc...      */
+
+/*    printf("SAGTsettingIHDR %d %d %d\n",width,height,bit_depth); */
+    bit_depth=nbits;
+    color_type=PNG_COLOR_TYPE_GRAY;
+    if (nbits == 24 ) {
+        bit_depth=8;
+        color_type=PNG_COLOR_TYPE_RGB;
+    }
+    else if (nbits == 32 ) {
+        bit_depth=8;
+        color_type=PNG_COLOR_TYPE_RGB_ALPHA;
+    }
+    png_set_IHDR(png_ptr, info_ptr, width, height,
+       bit_depth, color_type, PNG_INTERLACE_NONE,
+       PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
+
+/*     Put image data into the PNG info structure    */
+
+    /*bytes=bit_depth/8;*/
+    bytes=nbits/8;
+    row_pointers=malloc(height*sizeof(png_bytep));
+    for (j=0;j<height;j++) row_pointers[j]=(png_bytep *)(data+(j*width*bytes));
+    png_set_rows(png_ptr, info_ptr, (png_bytepp)row_pointers);
+
+/*     Do the PNG encoding, and write out PNG stream  */
+
+    png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
+
+/*     Clean up   */
+
+    png_destroy_write_struct(&png_ptr, &info_ptr);
+    free(row_pointers);
+    pnglen=write_io_ptr.stream_len;
+    return pnglen;
+
+}
+
+#endif   /* USE_PNG */
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addfield.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addfield.c
new file mode 100755
index 0000000..ef633a0
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addfield.c
@@ -0,0 +1,510 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+g2int getdim(unsigned char *,g2int *,g2int *,g2int *);
+g2int getpoly(unsigned char *,g2int *,g2int *,g2int *);
+void simpack(g2float *, g2int, g2int *, unsigned char *, g2int *);
+void cmplxpack(g2float *, g2int, g2int, g2int *, unsigned char *, g2int *);
+void specpack(g2float *,g2int,g2int,g2int,g2int,g2int *,unsigned char *,
+              g2int *);
+#ifdef USE_PNG
+  void pngpack(g2float *,g2int,g2int,g2int *,unsigned char *,g2int *);
+#endif  /* USE_PNG */
+#ifdef USE_JPEG2000
+  void jpcpack(g2float *,g2int,g2int,g2int *,unsigned char *,g2int *);
+#endif  /* USE_JPEG2000 */
+
+
+g2int g2_addfield(unsigned char *cgrib,g2int ipdsnum,g2int *ipdstmpl,
+                g2float *coordlist,g2int numcoord,g2int idrsnum,g2int *idrstmpl,
+                g2float *fld,g2int ngrdpts,g2int ibmap,g2int *bmap)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_addfield 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-11-05
+//
+// ABSTRACT: This routine packs up Sections 4 through 7 for a given field
+//   and adds them to a GRIB2 message.  They are Product Definition Section,
+//   Data Representation Section, Bit-Map Section and Data Section, 
+//   respectively.
+//   This routine is used with routines "g2_create", "g2_addlocal", 
+//   "g2_addgrid", and "g2_gribend" to create a complete GRIB2 message.  
+//   g2_create must be called first to initialize a new GRIB2 message.
+//   Also, routine g2_addgrid must be called after g2_create and
+//   before this routine to add the appropriate grid description to
+//   the GRIB2 message.   Also, a call to g2_gribend is required to complete 
+//   GRIB2 message after all fields have been added.
+//
+// PROGRAM HISTORY LOG:
+// 2002-11-05  Gilbert
+// 2002-12-23  Gilbert  -  Added complex spherical harmonic packing
+// 2003-08-27  Gilbert  - Added support for new templates using
+//                        PNG and JPEG2000 algorithms/templates.
+// 2004-11-29  Gilbert  - JPEG2000 now allowed to use WMO Template no. 5.40
+//                        PNG now allowed to use WMO Template no. 5.41
+//                      - Added check to determine if packing algorithm failed.
+// 2005-05-10  Gilbert -  Imposed minimum size on cpack, used to hold encoded
+//                        bit string.
+//
+// USAGE:    int g2_addfield(unsigned char *cgrib,g2int ipdsnum,g2int *ipdstmpl,
+//              g2float *coordlist,g2int numcoord,g2int idrsnum,g2int *idrstmpl,
+//              g2float *fld,g2int ngrdpts,g2int ibmap,g2int *bmap)
+//   INPUT ARGUMENT LIST:
+//     cgrib    - Char array that contains the GRIB2 message to which sections
+//                4 through 7 should be added.
+//     ipdsnum  - Product Definition Template Number ( see Code Table 4.0)
+//     ipdstmpl - Contains the data values for the specified Product Definition
+//                Template ( N=ipdsnum ).  Each element of this integer 
+//                array contains an entry (in the order specified) of Product
+//                Defintion Template 4.N
+//     coordlist- Array containg floating point values intended to document
+//                the vertical discretisation associated to model data
+//                on hybrid coordinate vertical levels.
+//     numcoord - number of values in array coordlist.
+//     idrsnum  - Data Representation Template Number ( see Code Table 5.0 )
+//     idrstmpl - Contains the data values for the specified Data Representation
+//                Template ( N=idrsnum ).  Each element of this integer 
+//                array contains an entry (in the order specified) of Data
+//                Representation Template 5.N
+//                Note that some values in this template (eg. reference
+//                values, number of bits, etc...) may be changed by the
+//                data packing algorithms.
+//                Use this to specify scaling factors and order of
+//                spatial differencing, if desired.
+//     fld[]    - Array of data points to pack.
+//     ngrdpts  - Number of data points in grid.
+//                i.e.  size of fld and bmap.
+//     ibmap    - Bitmap indicator ( see Code Table 6.0 )
+//                0 = bitmap applies and is included in Section 6.
+//                1-253 = Predefined bitmap applies
+//                254 = Previously defined bitmap applies to this field
+//                255 = Bit map does not apply to this product.
+//     bmap[]   - Integer array containing bitmap to be added. ( if ibmap=0 )
+//
+//   OUTPUT ARGUMENT LIST:      
+//     cgrib    - Character array to contain the updated GRIB2 message.
+//                Must be allocated large enough to store the entire
+//                GRIB2 message.
+//
+//   RETURN VALUES:
+//     ierr     - Return code.
+//              > 0 = Current size of updated GRIB2 message
+//               -1 = GRIB message was not initialized.  Need to call
+//                    routine g2_create first.
+//               -2 = GRIB message already complete.  Cannot add new section.
+//               -3 = Sum of Section byte counts doesn't add to total byte count
+//               -4 = Previous Section was not 3 or 7.
+//               -5 = Could not find requested Product Definition Template.
+//               -6 = Section 3 (GDS) not previously defined in message
+//               -7 = Tried to use unsupported Data Representationi Template
+//               -8 = Specified use of a previously defined bitmap, but one
+//                    does not exist in the GRIB message.
+//               -9 = GDT of one of 5.50 through 5.53 required to pack field
+//                    using DRT 5.51.
+//              -10 = Error packing data field.
+//
+// REMARKS: Note that the Sections 4 through 7 can only follow
+//          Section 3 or Section 7 in a GRIB2 message.
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$
+{
+      g2int ierr;
+      static unsigned char G=0x47;       // 'G'
+      static unsigned char R=0x52;       // 'R'
+      static unsigned char I=0x49;       // 'I'
+      static unsigned char B=0x42;       // 'B'
+      static unsigned char s7=0x37;   // '7'
+
+      unsigned char *cpack;
+      static g2int  zero=0,one=1,four=4,five=5,six=6,seven=7;
+      const g2int  minsize=50000;
+      g2int   iofst,ibeg,lencurr,len,nsize;
+      g2int   ilen,isecnum,i,nbits,temp,left;
+      g2int   ibmprev,j,lcpack,ioctet,newlen,ndpts;
+      g2int   lensec4,lensec5,lensec6,lensec7;
+      g2int   issec3,isprevbmap,lpos3=0,JJ,KK,MM;
+      g2int   *coordieee;
+      g2int   width,height,iscan,itemp;
+      g2float *pfld;
+      template  *mappds,*mapdrs;
+      unsigned int allones=4294967295u;
+ 
+      ierr=0;
+//
+//  Check to see if beginning of GRIB message exists
+//
+      if ( cgrib[0]!=G || cgrib[1]!=R || cgrib[2]!=I || cgrib[3]!=B ) {
+        printf("g2_addfield: GRIB not found in given message.\n");
+        printf("g2_addfield: Call to routine g2_create required to initialize GRIB messge.\n");
+        ierr=-1;
+        return(ierr);
+      }
+//
+//  Get current length of GRIB message
+//  
+      gbit(cgrib,&lencurr,96,32);
+//
+//  Check to see if GRIB message is already complete
+//  
+      if ( cgrib[lencurr-4]==s7 && cgrib[lencurr-3]==s7 &&
+           cgrib[lencurr-2]==s7 && cgrib[lencurr-1]==s7 ) {
+        printf("g2_addfield: GRIB message already complete.  Cannot add new section.\n");
+        ierr=-2;
+        return(ierr);
+      }
+//
+//  Loop through all current sections of the GRIB message to
+//  find the last section number.
+//
+      issec3=0;
+      isprevbmap=0;
+      len=16;    // length of Section 0
+      for (;;) { 
+      //    Get number and length of next section
+        iofst=len*8;
+        gbit(cgrib,&ilen,iofst,32);
+        iofst=iofst+32;
+        gbit(cgrib,&isecnum,iofst,8);
+        iofst=iofst+8;
+      //  Check if previous Section 3 exists
+        if (isecnum == 3) {
+            issec3=1;
+            lpos3=len;
+        }
+      //  Check if a previous defined bitmap exists
+        if (isecnum == 6) {
+          gbit(cgrib,&ibmprev,iofst,8);
+          iofst=iofst+8;
+          if ((ibmprev >= 0) && (ibmprev <= 253)) isprevbmap=1;
+        }
+        len=len+ilen;
+      //    Exit loop if last section reached
+        if ( len == lencurr ) break;
+      //    If byte count for each section doesn't match current
+      //    total length, then there is a problem.
+        if ( len > lencurr ) {
+          printf("g2_addfield: Section byte counts don''t add to total.\n");
+          printf("g2_addfield: Sum of section byte counts = %ld\n",len);
+          printf("g2_addfield: Total byte count in Section 0 = %ld\n",lencurr);
+          ierr=-3;
+          return(ierr);
+        }
+      }
+//
+//  Sections 4 through 7 can only be added after section 3 or 7.
+//
+      if ( (isecnum != 3) && (isecnum != 7) ) {
+        printf("g2_addfield: Sections 4-7 can only be added after Section 3 or 7.\n");
+        printf("g2_addfield: Section ',isecnum,' was the last found in given GRIB message.\n");
+        ierr=-4;
+        return(ierr);
+//
+//  Sections 4 through 7 can only be added if section 3 was previously defined.
+//
+      }
+      else if ( ! issec3) {
+        printf("g2_addfield: Sections 4-7 can only be added if Section 3 was previously included.\n");
+        printf("g2_addfield: Section 3 was not found in given GRIB message.\n");
+        printf("g2_addfield: Call to routine addgrid required to specify Grid definition.\n");
+        ierr=-6;
+        return(ierr);
+      }
+//
+//  Add Section 4  - Product Definition Section
+//
+      ibeg=lencurr*8;        //   Calculate offset for beginning of section 4
+      iofst=ibeg+32;         //   leave space for length of section
+      sbit(cgrib,&four,iofst,8);     // Store section number ( 4 )
+      iofst=iofst+8;
+      sbit(cgrib,&numcoord,iofst,16);   // Store num of coordinate values
+      iofst=iofst+16;
+      sbit(cgrib,&ipdsnum,iofst,16);    // Store Prod Def Template num.
+      iofst=iofst+16;
+      //
+      //   Get Product Definition Template
+      //
+      mappds=getpdstemplate(ipdsnum);
+      if (mappds == 0) {          // undefined template
+        ierr=-5;
+        return(ierr);
+      }
+      //
+      //   Extend the Product Definition Template, if necessary.
+      //   The number of values in a specific template may vary
+      //   depending on data specified in the "static" part of the
+      //   template.
+      //
+      if ( mappds->needext ) {
+        free(mappds);
+        mappds=extpdstemplate(ipdsnum,ipdstmpl);
+      }
+      //
+      //   Pack up each input value in array ipdstmpl into the
+      //   the appropriate number of octets, which are specified in
+      //   corresponding entries in array mappds.
+      //
+      for (i=0;i<mappds->maplen;i++) {
+        nbits=abs(mappds->map[i])*8;
+        if ( (mappds->map[i] >= 0) || (ipdstmpl[i] >= 0) )
+          sbit(cgrib,ipdstmpl+i,iofst,nbits);
+        else {
+          sbit(cgrib,&one,iofst,1);
+          temp=abs(ipdstmpl[i]);
+          sbit(cgrib,&temp,iofst+1,nbits-1);
+        }
+        iofst=iofst+nbits;
+      }
+      //  Pack template extension, if appropriate
+      j=mappds->maplen;
+      if ( mappds->needext && (mappds->extlen > 0) ) {
+         for (i=0;i<mappds->extlen;i++) {
+           nbits=abs(mappds->ext[i])*8;
+           if ( (mappds->ext[i] >= 0) || (ipdstmpl[j] >= 0) )
+             sbit(cgrib,ipdstmpl+j,iofst,nbits);
+           else {
+             sbit(cgrib,&one,iofst,1);
+             temp=abs(ipdstmpl[j]);
+             sbit(cgrib,&temp,iofst+1,nbits-1);
+           }
+           iofst=iofst+nbits;
+           j++;
+         }
+      }
+      free(mappds);
+      //
+      //   Add Optional list of vertical coordinate values
+      //   after the Product Definition Template, if necessary.
+      //
+      if ( numcoord != 0 ) {
+        coordieee=(g2int *)calloc(numcoord,sizeof(g2int));
+        mkieee(coordlist,coordieee,numcoord);
+        sbits(cgrib,coordieee,iofst,32,0,numcoord);
+        iofst=iofst+(32*numcoord);
+        free(coordieee);
+      }
+      //
+      //   Calculate length of section 4 and store it in octets
+      //   1-4 of section 4.
+      //
+      lensec4=(iofst-ibeg)/8;
+      sbit(cgrib,&lensec4,ibeg,32);
+//
+//  Pack Data using appropriate algorithm
+//
+      //
+      //   Get Data Representation Template
+      //
+      mapdrs=getdrstemplate(idrsnum);
+      if (mapdrs == 0) {
+        ierr=-5;
+        return(ierr);
+      }
+      //
+      //  contract data field, removing data at invalid grid points,
+      //  if bit-map is provided with field.
+      //
+      if ( ibmap == 0 || ibmap==254 ) {
+         pfld=(g2float *)malloc(ngrdpts*sizeof(g2float));
+         ndpts=0;
+         for (j=0;j<ngrdpts;j++) {
+             if ( bmap[j]==1 ) pfld[ndpts++]=fld[j];
+         }
+      }
+      else {
+         ndpts=ngrdpts;
+         pfld=fld;
+      }
+      nsize=ndpts*4;
+      if ( nsize < minsize ) nsize=minsize;
+      cpack=malloc(nsize);
+      if (idrsnum == 0)           //  Simple Packing
+        simpack(pfld,ndpts,idrstmpl,cpack,&lcpack);
+      else if (idrsnum==2 || idrsnum==3)           //  Complex Packing
+        cmplxpack(pfld,ndpts,idrsnum,idrstmpl,cpack,&lcpack);
+      else if (idrsnum == 50) {         //  Sperical Harmonic Simple Packing 
+        simpack(pfld+1,ndpts-1,idrstmpl,cpack,&lcpack);
+        mkieee(pfld+0,idrstmpl+4,1);  // ensure RE(0,0) value is IEEE format
+      }
+      else if (idrsnum == 51) {         //  Sperical Harmonic Complex Packing 
+        getpoly(cgrib+lpos3,&JJ,&KK,&MM);
+        if ( JJ!=0 && KK!=0 && MM!=0 )
+           specpack(pfld,ndpts,JJ,KK,MM,idrstmpl,cpack,&lcpack);
+        else {
+           printf("g2_addfield: Cannot pack DRT 5.51.\n");
+           return (-9);
+        }
+      }
+#ifdef USE_JPEG2000
+      else if (idrsnum == 40 || idrsnum == 40000) {    /*  JPEG2000 encoding  */
+        if (ibmap == 255) {
+           getdim(cgrib+lpos3,&width,&height,&iscan);
+           if ( width==0 || height==0 ) {
+              width=ndpts;
+              height=1;
+           }
+           else if ( width==allones || height==allones ) {
+              width=ndpts;
+              height=1;
+           }
+           else if ( (iscan&32) == 32) {   /* Scanning mode: bit 3  */
+              itemp=width;
+              width=height;
+              height=itemp;
+           }
+        }
+        else {
+           width=ndpts;
+           height=1;
+        }
+        lcpack=nsize;
+        jpcpack(pfld,width,height,idrstmpl,cpack,&lcpack);
+      }
+#endif  /* USE_JPEG2000 */
+#ifdef USE_PNG
+      else if (idrsnum == 41 || idrsnum == 40010) {      /*  PNG encoding   */
+        if (ibmap == 255) {
+           getdim(cgrib+lpos3,&width,&height,&iscan);
+           if ( width==0 || height==0 ) {
+              width=ndpts;
+              height=1;
+           }
+           else if ( width==allones || height==allones ) {
+              width=ndpts;
+              height=1;
+           }
+           else if ( (iscan&32) == 32) {   /* Scanning mode: bit 3  */
+              itemp=width;
+              width=height;
+              height=itemp;
+           }
+        }
+        else {
+           width=ndpts;
+           height=1;
+        }
+        pngpack(pfld,width,height,idrstmpl,cpack,&lcpack);
+      }
+#endif  /* USE_PNG */
+      else {
+        printf("g2_addfield: Data Representation Template 5.%ld not yet implemented.\n",idrsnum);
+        ierr=-7;
+        return(ierr);
+      }
+      if ( ibmap == 0 || ibmap==254 ) {      // free temp space
+         if (fld != pfld) free(pfld);
+      }
+      if ( lcpack < 0 ) {
+        if( cpack != 0 ) free(cpack);
+        ierr=-10;
+        return(ierr);
+      }
+
+//
+//  Add Section 5  - Data Representation Section
+//
+      ibeg=iofst;            //   Calculate offset for beginning of section 5
+      iofst=ibeg+32;         //   leave space for length of section
+      sbit(cgrib,&five,iofst,8);     // Store section number ( 5 )
+      iofst=iofst+8;
+      sbit(cgrib,&ndpts,iofst,32);    // Store num of actual data points
+      iofst=iofst+32;
+      sbit(cgrib,&idrsnum,iofst,16);    // Store Data Repr. Template num.
+      iofst=iofst+16;
+      //
+      //   Pack up each input value in array idrstmpl into the
+      //   the appropriate number of octets, which are specified in
+      //   corresponding entries in array mapdrs.
+      //
+      for (i=0;i<mapdrs->maplen;i++) {
+        nbits=abs(mapdrs->map[i])*8;
+        if ( (mapdrs->map[i] >= 0) || (idrstmpl[i] >= 0) )
+          sbit(cgrib,idrstmpl+i,iofst,nbits);
+        else {
+          sbit(cgrib,&one,iofst,1);
+          temp=abs(idrstmpl[i]);
+          sbit(cgrib,&temp,iofst+1,nbits-1);
+        }
+        iofst=iofst+nbits;
+      }
+      free(mapdrs);
+      //
+      //   Calculate length of section 5 and store it in octets
+      //   1-4 of section 5.
+      //
+      lensec5=(iofst-ibeg)/8;
+      sbit(cgrib,&lensec5,ibeg,32);
+
+//
+//  Add Section 6  - Bit-Map Section
+//
+      ibeg=iofst;            //   Calculate offset for beginning of section 6
+      iofst=ibeg+32;         //   leave space for length of section
+      sbit(cgrib,&six,iofst,8);     // Store section number ( 6 )
+      iofst=iofst+8;
+      sbit(cgrib,&ibmap,iofst,8);    // Store Bit Map indicator
+      iofst=iofst+8;
+      //
+      //  Store bitmap, if supplied
+      //
+      if (ibmap == 0) {
+        sbits(cgrib,bmap,iofst,1,0,ngrdpts);    // Store BitMap
+        iofst=iofst+ngrdpts;
+      }
+      //
+      //  If specifying a previously defined bit-map, make sure
+      //  one already exists in the current GRIB message.
+      //
+      if ((ibmap==254) && ( ! isprevbmap)) {
+        printf("g2_addfield: Requested previously defined bitmap,");
+        printf(" but one does not exist in the current GRIB message.\n");
+        ierr=-8;
+        return(ierr);
+      }
+      //
+      //   Calculate length of section 6 and store it in octets
+      //   1-4 of section 6.  Pad to end of octect, if necessary.
+      //
+      left=8-(iofst%8);
+      if (left != 8) {
+        sbit(cgrib,&zero,iofst,left);     // Pad with zeros to fill Octet
+        iofst=iofst+left;
+      }
+      lensec6=(iofst-ibeg)/8;
+      sbit(cgrib,&lensec6,ibeg,32);
+
+//
+//  Add Section 7  - Data Section
+//
+      ibeg=iofst;            //   Calculate offset for beginning of section 7
+      iofst=ibeg+32;        //   leave space for length of section
+      sbit(cgrib,&seven,iofst,8);    // Store section number ( 7 )
+      iofst=iofst+8;
+      //      Store Packed Binary Data values, if non-constant field
+      if (lcpack != 0) {
+        ioctet=iofst/8;
+        //cgrib(ioctet+1:ioctet+lcpack)=cpack(1:lcpack)
+        for (j=0;j<lcpack;j++) cgrib[ioctet+j]=cpack[j];
+        iofst=iofst+(8*lcpack);
+      }
+      //
+      //   Calculate length of section 7 and store it in octets
+      //   1-4 of section 7.  
+      //
+      lensec7=(iofst-ibeg)/8;
+      sbit(cgrib,&lensec7,ibeg,32);
+
+      if( cpack != 0 ) free(cpack);
+//
+//  Update current byte total of message in Section 0
+//
+      newlen=lencurr+lensec4+lensec5+lensec6+lensec7;
+      sbit(cgrib,&newlen,96,32);
+
+      return(newlen);
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addgrid.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addgrid.c
new file mode 100755
index 0000000..31db32c
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addgrid.c
@@ -0,0 +1,243 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+
+g2int g2_addgrid(unsigned char *cgrib,g2int *igds,g2int *igdstmpl,g2int *ideflist,g2int idefnum)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_addgrid 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-11-01
+//
+// ABSTRACT: This routine packs up a Grid Definition Section (Section 3) 
+//   and adds it to a GRIB2 message.  It is used with routines "g2_create",
+//   "g2_addlocal", "g2_addfield",
+//   and "g2_gribend" to create a complete GRIB2 message.
+//   g2_create must be called first to initialize a new GRIB2 message.
+//
+// PROGRAM HISTORY LOG:
+// 2002-11-01  Gilbert
+//
+// USAGE:    int g2_addgrid(unsigned char *cgrib,g2int *igds,g2int *igdstmpl,
+//                          g2int *ideflist,g2int idefnum)
+//   INPUT ARGUMENTS:
+//     cgrib    - Char array that contains the GRIB2 message to which
+//                section should be added.
+//     igds     - Contains information needed for GRIB Grid Definition Section 3
+//                Must be dimensioned >= 5.
+//                igds[0]=Source of grid definition (see Code Table 3.0)
+//                igds[1]=Number of grid points in the defined grid.
+//                igds[2]=Number of octets needed for each 
+//                            additional grid points definition.  
+//                            Used to define number of
+//                            points in each row ( or column ) for
+//                            non-regular grids.  
+//                            = 0, if using regular grid.
+//                igds[3]=Interpretation of list for optional points 
+//                            definition.  (Code Table 3.11)
+//                igds[4]=Grid Definition Template Number (Code Table 3.1)
+//     igdstmpl - Contains the data values for the specified Grid Definition
+//                Template ( NN=igds[4] ).  Each element of this integer 
+//                array contains an entry (in the order specified) of Grid
+//                Defintion Template 3.NN
+//     ideflist - (Used if igds[2] != 0)  This array contains the
+//                number of grid points contained in each row ( or column )
+//      idefnum - (Used if igds[2] != 0)  The number of entries
+//                in array ideflist.  i.e. number of rows ( or columns )
+//                for which optional grid points are defined.
+//
+//   OUTPUT ARGUMENTS:      
+//     cgrib    - Char array to contain the updated GRIB2 message.
+//                Must be allocated large enough to store the entire
+//                GRIB2 message.
+//
+//   RETURN VALUES:
+//     ierr     - Return code.
+//              > 0 = Current size of updated GRIB2 message
+//               -1 = GRIB message was not initialized.  Need to call
+//                    routine gribcreate first.
+//               -2 = GRIB message already complete.  Cannot add new section.
+//               -3 = Sum of Section byte counts doesn't add to total byte count
+//               -4 = Previous Section was not 1, 2 or 7.
+//               -5 = Could not find requested Grid Definition Template.
+//
+// REMARKS: Note that the Grid Def Section ( Section 3 ) can only follow
+//          Section 1, 2 or Section 7 in a GRIB2 message.
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$
+{
+
+      g2int ierr;
+      static unsigned char G=0x47;       // 'G'
+      static unsigned char R=0x52;       // 'R'
+      static unsigned char I=0x49;       // 'I'
+      static unsigned char B=0x42;       // 'B'
+      static unsigned char seven=0x37;   // '7'
+
+      static g2int one=1,three=3,miss=65535;
+      g2int   lensec3,iofst,ibeg,lencurr,len;
+      g2int   i,j,temp,ilen,isecnum,nbits;
+      template *mapgrid=0;
+ 
+      ierr=0;
+//
+//  Check to see if beginning of GRIB message exists
+//
+      if ( cgrib[0]!=G || cgrib[1]!=R || cgrib[2]!=I || cgrib[3]!=B ) {
+        printf("g2_addgrid: GRIB not found in given message.\n");
+        printf("g2_addgrid: Call to routine gribcreate required to initialize GRIB messge.\n");
+        ierr=-1;
+        return(ierr);
+      }
+//
+//  Get current length of GRIB message
+//  
+      gbit(cgrib,&lencurr,96,32);
+//
+//  Check to see if GRIB message is already complete
+//  
+      if ( cgrib[lencurr-4]==seven && cgrib[lencurr-3]==seven &&
+           cgrib[lencurr-2]==seven && cgrib[lencurr-1]==seven ) {
+        printf("g2_addgrid: GRIB message already complete.  Cannot add new section.\n");
+        ierr=-2;
+        return(ierr);
+      }
+//
+//  Loop through all current sections of the GRIB message to
+//  find the last section number.
+//
+      len=16;    // length of Section 0
+      for (;;) { 
+      //    Get section number and length of next section
+        iofst=len*8;
+        gbit(cgrib,&ilen,iofst,32);
+        iofst=iofst+32;
+        gbit(cgrib,&isecnum,iofst,8);
+        len=len+ilen;
+      //    Exit loop if last section reached
+        if ( len == lencurr ) break;
+      //    If byte count for each section doesn't match current
+      //    total length, then there is a problem.
+        if ( len > lencurr ) {
+          printf("g2_addgrid: Section byte counts don''t add to total.\n");
+          printf("g2_addgrid: Sum of section byte counts = %ld\n",len);
+          printf("g2_addgrid: Total byte count in Section 0 = %ld\n",lencurr);
+          ierr=-3;
+          return(ierr);
+        }
+      }
+//
+//  Section 3 can only be added after sections 1, 2 and 7.
+//
+      if ( (isecnum!=1) && (isecnum!=2) && (isecnum!=7) ) {
+        printf("g2_addgrid: Section 3 can only be added after Section 1, 2 or 7.\n");
+        printf("g2_addgrid: Section ',isecnum,' was the last found in given GRIB message.\n");
+        ierr=-4;
+        return(ierr);
+      }
+//
+//  Add Section 3  - Grid Definition Section
+//
+      ibeg=lencurr*8;        //   Calculate offset for beginning of section 3
+      iofst=ibeg+32;         //   leave space for length of section
+      sbit(cgrib,&three,iofst,8);     // Store section number ( 3 )
+      iofst=iofst+8;
+      sbit(cgrib,igds+0,iofst,8);     // Store source of Grid def.
+      iofst=iofst+8;
+      sbit(cgrib,igds+1,iofst,32);    // Store number of data pts.
+      iofst=iofst+32;
+      sbit(cgrib,igds+2,iofst,8);     // Store number of extra octets.
+      iofst=iofst+8;
+      sbit(cgrib,igds+3,iofst,8);     // Store interp. of extra octets.
+      iofst=iofst+8;
+      //   if Octet 6 is not equal to zero, Grid Definition Template may
+      //   not be supplied.
+      if ( igds[0] == 0 )
+        sbit(cgrib,igds+4,iofst,16);  // Store Grid Def Template num.
+      else
+        sbit(cgrib,&miss,iofst,16);   // Store missing value as Grid Def Template num.
+      iofst=iofst+16;
+      //
+      //   Get Grid Definition Template
+      //
+      if (igds[0] == 0) {
+        mapgrid=getgridtemplate(igds[4]);
+        if (mapgrid == 0) {       // undefined template
+          ierr=-5;
+          return(ierr);
+        }
+        //
+        //   Extend the Grid Definition Template, if necessary.
+        //   The number of values in a specific template may vary
+        //   depending on data specified in the "static" part of the
+        //   template.
+        //
+        if ( mapgrid->needext ) {
+          free(mapgrid);
+          mapgrid=extgridtemplate(igds[4],igdstmpl);
+        }
+      }
+      //
+      //   Pack up each input value in array igdstmpl into the
+      //   the appropriate number of octets, which are specified in
+      //   corresponding entries in array mapgrid.
+      //
+      for (i=0;i<mapgrid->maplen;i++) {
+        nbits=abs(mapgrid->map[i])*8;
+        if ( (mapgrid->map[i] >= 0) || (igdstmpl[i] >= 0) )
+          sbit(cgrib,igdstmpl+i,iofst,nbits);
+        else {
+          sbit(cgrib,&one,iofst,1);
+          temp=abs(igdstmpl[i]);
+          sbit(cgrib,&temp,iofst+1,nbits-1);
+        }
+        iofst=iofst+nbits;
+      }
+      //  Pack template extension, if appropriate
+      j=mapgrid->maplen;
+      if ( mapgrid->needext && (mapgrid->extlen > 0) ) {
+         for (i=0;i<mapgrid->extlen;i++) {
+           nbits=abs(mapgrid->ext[i])*8;
+           if ( (mapgrid->ext[i] >= 0) || (igdstmpl[j] >= 0) )
+             sbit(cgrib,igdstmpl+j,iofst,nbits);
+           else {
+             sbit(cgrib,&one,iofst,1);
+             temp=abs(igdstmpl[j]);
+             sbit(cgrib,&temp,iofst+1,nbits-1);
+           }
+           iofst=iofst+nbits;
+           j++;
+         }
+      }
+      free(mapgrid);
+      //
+      //   If requested,
+      //   Insert optional list of numbers defining number of points
+      //   in each row or column.  This is used for non regular
+      //   grids.
+      //
+      if ( igds[2] != 0 ) {
+         nbits=igds[2]*8;
+         sbits(cgrib,ideflist,iofst,nbits,0,idefnum);
+         iofst=iofst+(nbits*idefnum);
+      }
+      //
+      //   Calculate length of section 3 and store it in octets
+      //   1-4 of section 3.
+      //
+      lensec3=(iofst-ibeg)/8;
+      sbit(cgrib,&lensec3,ibeg,32);
+
+//
+//  Update current byte total of message in Section 0
+//
+      lencurr+=lensec3;
+      sbit(cgrib,&lencurr,96,32);
+
+      return(lencurr);
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addlocal.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addlocal.c
new file mode 100755
index 0000000..c291367
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_addlocal.c
@@ -0,0 +1,147 @@
+#include <stdio.h>
+#include "grib2.h"
+
+g2int g2_addlocal(unsigned char *cgrib,unsigned char *csec2,g2int lcsec2)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_addlocal 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-11-01
+//
+// ABSTRACT: This routine adds a Local Use Section (Section 2) to 
+//   a GRIB2 message.  It is used with routines "g2_create", 
+//   "g2_addgrid", "g2_addfield",
+//   and "g2_gribend" to create a complete GRIB2 message.  
+//   g2_create must be called first to initialize a new GRIB2 message.
+//
+// PROGRAM HISTORY LOG:
+// 2002-11-01  Gilbert
+//
+// USAGE:    int g2_addlocal(unsigned char *cgrib,unsigned char *csec2,
+//                           g2int lcsec2)
+//   INPUT ARGUMENTS:
+//     cgrib    - Char array that contains the GRIB2 message to which section
+//                2 should be added.
+//     csec2    - Character array containing information to be added in
+//                Section 2.
+//     lcsec2   - Number of bytes of character array csec2 to be added to
+//                Section 2.
+//
+//   OUTPUT ARGUMENT:      
+//     cgrib    - Char array to contain the updated GRIB2 message.
+//                Must be allocated large enough to store the entire
+//                GRIB2 message.
+//
+//   RETURN VALUES:
+//     ierr     - Return code.
+//              > 0 = Current size of updated GRIB2 message
+//               -1 = GRIB message was not initialized.  Need to call
+//                    routine gribcreate first.
+//               -2 = GRIB message already complete.  Cannot add new section.
+//               -3 = Sum of Section byte counts doesn't add to total byte count
+//               -4 = Previous Section was not 1 or 7.
+//
+// REMARKS: Note that the Local Use Section ( Section 2 ) can only follow
+//          Section 1 or Section 7 in a GRIB2 message.
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE: 
+//
+//$$$
+{
+
+      g2int ierr; 
+      static unsigned char G=0x47;       // 'G'
+      static unsigned char R=0x52;       // 'R'
+      static unsigned char I=0x49;       // 'I'
+      static unsigned char B=0x42;       // 'B'
+      static unsigned char seven=0x37;   // '7'
+
+      static g2int two=2;
+      g2int   j,k,lensec2,iofst,ibeg,lencurr,ilen,len,istart;
+      g2int   isecnum;
+ 
+      ierr=0;
+//
+//  Check to see if beginning of GRIB message exists
+//
+      if ( cgrib[0]!=G || cgrib[1]!=R || cgrib[2]!=I || cgrib[3]!=B ) {
+        printf("g2_addlocal: GRIB not found in given message.\n");
+        printf("g2_addlocal: Call to routine g2_create required to initialize GRIB messge.\n");
+        ierr=-1;
+        return(ierr);
+      }
+//
+//  Get current length of GRIB message
+//  
+      gbit(cgrib,&lencurr,96,32);
+//
+//  Check to see if GRIB message is already complete
+//  
+      if ( cgrib[lencurr-4]==seven && cgrib[lencurr-3]==seven && 
+           cgrib[lencurr-2]==seven && cgrib[lencurr-1]==seven ) {
+        printf("g2_addlocal: GRIB message already complete.  Cannot add new section.\n");
+        ierr=-2;
+        return(ierr);
+      }
+//
+//  Loop through all current sections of the GRIB message to
+//  find the last section number.
+//
+      len=16;    // length of Section 0
+      for (;;) { 
+      //    Get section number and length of next section
+        iofst=len*8;
+        gbit(cgrib,&ilen,iofst,32);
+        iofst=iofst+32;
+        gbit(cgrib,&isecnum,iofst,8);
+        len=len+ilen;
+      //    Exit loop if last section reached
+        if ( len == lencurr ) break;
+      //    If byte count for each section doesn't match current
+      //    total length, then there is a problem.
+        if ( len > lencurr ) {
+          printf("g2_addlocal: Section byte counts don't add to total.\n");
+          printf("g2_addlocal: Sum of section byte counts = %ld\n",len);
+          printf("g2_addlocal: Total byte count in Section 0 = %ld\n",lencurr);
+          ierr=-3;
+          return(ierr);
+        }
+      }
+//
+//  Section 2 can only be added after sections 1 and 7.
+//
+      if ( (isecnum!=1) && (isecnum!=7) ) {
+        printf("g2_addlocal: Section 2 can only be added after Section 1 or Section 7.\n");
+        printf("g2_addlocal: Section %ld was the last found in given GRIB message.\n",isecnum);
+        ierr=-4;
+        return(ierr);
+      }
+//
+//  Add Section 2  - Local Use Section
+//
+      ibeg=lencurr*8;        //   Calculate offset for beginning of section 2
+      iofst=ibeg+32;         //   leave space for length of section
+      sbit(cgrib,&two,iofst,8);     // Store section number ( 2 )
+      istart=lencurr+5;
+      //cgrib(istart+1:istart+lcsec2)=csec2(1:lcsec2)
+      k=0;
+      for (j=istart;j<istart+lcsec2;j++) {
+         cgrib[j]=csec2[k++];
+      }
+      //
+      //   Calculate length of section 2 and store it in octets
+      //   1-4 of section 2.
+      //
+      lensec2=lcsec2+5;      // bytes
+      sbit(cgrib,&lensec2,ibeg,32);
+
+//
+//  Update current byte total of message in Section 0
+//
+      lencurr+=lensec2;
+      sbit(cgrib,&lencurr,96,32);
+
+      return(lencurr);
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_create.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_create.c
new file mode 100755
index 0000000..5791485
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_create.c
@@ -0,0 +1,127 @@
+#include <stdio.h>
+#include "grib2.h"
+
+#define MAPSEC1LEN 13
+
+g2int g2_create(unsigned char *cgrib,g2int *listsec0,g2int *listsec1)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_create 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-31
+//
+// ABSTRACT: This routine initializes a new GRIB2 message and packs
+//   GRIB2 sections 0 (Indicator Section) and 1 (Identification Section).
+//   This routine is used with routines "g2_addlocal", "g2_addgrid", 
+//   "g2_addfield", and "g2_gribend" to create a complete GRIB2 message.  
+//   g2_create must be called first to initialize a new GRIB2 message.
+//   Also, a call to g2_gribend is required to complete GRIB2 message
+//   after all fields have been added.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-31  Gilbert
+//
+// USAGE:    int g2_create(unsigned char *cgrib,g2int *listsec0,g2int *listsec1)
+//   INPUT ARGUMENTS:
+//     cgrib    - Character array to contain the GRIB2 message
+//     listsec0 - Contains information needed for GRIB Indicator Section 0.
+//                Must be dimensioned >= 2.
+//                listsec0[0]=Discipline-GRIB Master Table Number
+//                            (see Code Table 0.0)
+//                listsec0[1]=GRIB Edition Number (currently 2)
+//     listsec1 - Contains information needed for GRIB Identification Section 1.
+//                Must be dimensioned >= 13.
+//                listsec1[0]=Id of orginating centre (Common Code Table C-1)
+//                listsec1[1]=Id of orginating sub-centre (local table)
+//                listsec1[2]=GRIB Master Tables Version Number (Code Table 1.0)
+//                listsec1[3]=GRIB Local Tables Version Number (Code Table 1.1)
+//                listsec1[4]=Significance of Reference Time (Code Table 1.2)
+//                listsec1[5]=Reference Time - Year (4 digits)
+//                listsec1[6]=Reference Time - Month
+//                listsec1[7]=Reference Time - Day
+//                listsec1[8]=Reference Time - Hour
+//                listsec1[9]=Reference Time - Minute
+//                listsec1[10]=Reference Time - Second
+//                listsec1[11]=Production status of data (Code Table 1.3)
+//                listsec1[12]=Type of processed data (Code Table 1.4)
+//
+//   OUTPUT ARGUMENTS:      
+//     cgrib    - Char array to contain the new GRIB2 message.
+//                Must be allocated large enough to store the entire
+//                GRIB2 message.
+//
+//   RETURN VALUES:
+//     ierr     - return code.
+//              > 0 = Current size of new GRIB2 message
+//               -1 = Tried to use for version other than GRIB Edition 2
+//
+// REMARKS: This routine is intended for use with routines "g2_addlocal", 
+//          "g2_addgrid", "g2_addfield", and "g2_gribend" to create a complete 
+//          GRIB2 message.
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$
+{
+
+      g2int  ierr;
+      g2int   zero=0,one=1;
+      g2int   mapsec1len=MAPSEC1LEN;
+      g2int   mapsec1[MAPSEC1LEN]={ 2,2,1,1,1,2,1,1,1,1,1,1,1 };
+      g2int   i,lensec0,lensec1,iofst,ibeg,nbits,len;
+
+      ierr=0;
+//
+//  Currently handles only GRIB Edition 2.
+//  
+      if (listsec0[1] != 2) {
+        printf("g2_create: can only code GRIB edition 2.");
+        ierr=-1;
+        return (ierr);
+      }
+//
+//  Pack Section 0 - Indicator Section 
+//  ( except for total length of GRIB message )
+//
+      cgrib[0]=0x47;   // 'G'            // Beginning of GRIB message
+      cgrib[1]=0x52;   // 'R'
+      cgrib[2]=0x49;   // 'I'
+      cgrib[3]=0x42;   // 'B'
+      sbit(cgrib,&zero,32,16);           // reserved for future use
+      sbit(cgrib,listsec0+0,48,8);       // Discipline
+      sbit(cgrib,listsec0+1,56,8);       // GRIB edition number
+      lensec0=16;      // bytes (octets)
+//
+//  Pack Section 1 - Identification Section
+//
+      ibeg=lensec0*8;        //   Calculate offset for beginning of section 1
+      iofst=ibeg+32;         //   leave space for length of section
+      sbit(cgrib,&one,iofst,8);     // Store section number ( 1 )
+      iofst=iofst+8;
+      //
+      //   Pack up each input value in array listsec1 into the
+      //   the appropriate number of octets, which are specified in
+      //   corresponding entries in array mapsec1.
+      //
+      for (i=0;i<mapsec1len;i++) {
+        nbits=mapsec1[i]*8;
+        sbit(cgrib,listsec1+i,iofst,nbits);
+        iofst=iofst+nbits;
+      }
+      //
+      //   Calculate length of section 1 and store it in octets
+      //   1-4 of section 1.
+      //
+      lensec1=(iofst-ibeg)/8;
+      sbit(cgrib,&lensec1,ibeg,32);
+//
+//  Put current byte total of message into Section 0
+//
+      sbit(cgrib,&zero,64,32);
+      len=lensec0+lensec1;
+      sbit(cgrib,&len,96,32);
+
+      return (len);
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_free.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_free.c
new file mode 100755
index 0000000..04a1792
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_free.c
@@ -0,0 +1,44 @@
+#include <stdlib.h>
+#include  "grib2.h"
+
+void g2_free(gribfield *gfld)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_free 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-28
+//
+// ABSTRACT: This routine frees up memory that was allocated for
+//   struct gribfield.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-28  Gilbert
+//
+// USAGE:    g2_free(gribfield *gfld)
+//   ARGUMENT:
+//     gfld - pointer to gribfield structure (defined in include file grib2.h)
+//            returned from routine g2_getfld.
+//
+// REMARKS:  This routine must be called to free up memory used by
+//           the decode routine, g2_getfld, when user no longer needs to
+//           reference this data.
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$
+{ 
+
+      if (gfld->idsect != 0 ) free(gfld->idsect);
+      if (gfld->local != 0 ) free(gfld->local);
+      if (gfld->list_opt != 0 ) free(gfld->list_opt);
+      if (gfld->igdtmpl != 0 ) free(gfld->igdtmpl);
+      if (gfld->ipdtmpl != 0 ) free(gfld->ipdtmpl);
+      if (gfld->coord_list != 0 ) free(gfld->coord_list);
+      if (gfld->idrtmpl != 0 ) free(gfld->idrtmpl);
+      if (gfld->bmap != 0 ) free(gfld->bmap);
+      if (gfld->fld != 0 ) free(gfld->fld);
+      free(gfld);
+
+      return;
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_getfld.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_getfld.c
new file mode 100755
index 0000000..baf5466
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_getfld.c
@@ -0,0 +1,550 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+g2int g2_unpack1(unsigned char *,g2int *,g2int **,g2int *);
+g2int g2_unpack2(unsigned char *,g2int *,g2int *,unsigned char **);
+g2int g2_unpack3(unsigned char *,g2int *,g2int **,g2int **,
+                         g2int *,g2int **,g2int *);
+g2int g2_unpack4(unsigned char *,g2int *,g2int *,g2int **,
+                         g2int *,g2float **,g2int *);
+g2int g2_unpack5(unsigned char *,g2int *,g2int *,g2int *, g2int **,g2int *);
+g2int g2_unpack6(unsigned char *,g2int *,g2int ,g2int *, g2int **);
+g2int g2_unpack7(unsigned char *,g2int *,g2int ,g2int *,
+                         g2int ,g2int *,g2int ,g2float **);
+
+g2int g2_getfld(unsigned char *cgrib,g2int ifldnum,g2int unpack,g2int expand,
+                gribfield **gfld)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_getfld 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-28
+//
+// ABSTRACT: This subroutine returns all the metadata, template values, 
+//   Bit-map ( if applicable ), and the unpacked data for a given data
+//   field.  All of the information returned is stored in a gribfield
+//   structure, which is defined in file grib2.h.
+//   Users of this routine will need to include "grib2.h" in their source
+//   code that calls this routine.  Each component of the gribfield
+//   struct is also described in the OUTPUT ARGUMENTS section below.
+//
+//   Since there can be multiple data fields packed into a GRIB2
+//   message, the calling routine indicates which field is being requested
+//   with the ifldnum argument.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-28  Gilbert
+//
+// USAGE:    #include "grib2.h"
+//           int g2_getfld(unsigned char *cgrib,g2int ifldnum,g2int unpack,
+//                         g2int expand,gribfield **gfld)
+//   INPUT ARGUMENTS:
+//     cgrib    - Character pointer to the GRIB2 message
+//     ifldnum  - Specifies which field in the GRIB2 message to return.
+//     unpack   - Boolean value indicating whether to unpack bitmap/data field
+//                1 = unpack bitmap (if present) and data values
+//                0 = do not unpack bitmap and data values
+//     expand   - Boolean value indicating whether the data points should be 
+//                expanded to the correspond grid, if a bit-map is present.
+//                1 = if possible, expand data field to grid, inserting zero 
+//                    values at gridpoints that are bitmapped out. 
+//                    (SEE REMARKS2)
+//                0 = do not expand data field, leaving it an array of
+//                    consecutive data points for each "1" in the bitmap.
+//                This argument is ignored if unpack == 0 OR if the
+//                returned field does not contain a bit-map.
+//
+//   OUTPUT ARGUMENT:      
+//     gribfield gfld; - pointer to structure gribfield containing
+//                       all decoded data for the data field.
+// 
+//        gfld->version = GRIB edition number ( currently 2 )
+//        gfld->discipline = Message Discipline ( see Code Table 0.0 )
+//        gfld->idsect = Contains the entries in the Identification
+//                        Section ( Section 1 )
+//                        This element is a pointer to an array
+//                        that holds the data.
+//            gfld->idsect[0]  = Identification of originating Centre
+//                                    ( see Common Code Table C-1 )
+//                             7 - US National Weather Service
+//            gfld->idsect[1]  = Identification of originating Sub-centre
+//            gfld->idsect[2]  = GRIB Master Tables Version Number
+//                                    ( see Code Table 1.0 )
+//                             0 - Experimental
+//                             1 - Initial operational version number
+//            gfld->idsect[3]  = GRIB Local Tables Version Number
+//                                    ( see Code Table 1.1 )
+//                             0     - Local tables not used
+//                             1-254 - Number of local tables version used
+//            gfld->idsect[4]  = Significance of Reference Time (Code Table 1.2)
+//                             0 - Analysis
+//                             1 - Start of forecast
+//                             2 - Verifying time of forecast
+//                             3 - Observation time
+//            gfld->idsect[5]  = Year ( 4 digits )
+//            gfld->idsect[6]  = Month
+//            gfld->idsect[7)  = Day
+//            gfld->idsect[8]  = Hour
+//            gfld->idsect[9]  = Minute
+//            gfld->idsect[10]  = Second
+//            gfld->idsect[11]  = Production status of processed data
+//                                    ( see Code Table 1.3 )
+//                              0 - Operational products
+//                              1 - Operational test products
+//                              2 - Research products
+//                              3 - Re-analysis products
+//            gfld->idsect[12]  = Type of processed data ( see Code Table 1.4 )
+//                              0  - Analysis products
+//                              1  - Forecast products
+//                              2  - Analysis and forecast products
+//                              3  - Control forecast products
+//                              4  - Perturbed forecast products
+//                              5  - Control and perturbed forecast products
+//                              6  - Processed satellite observations
+//                              7  - Processed radar observations
+//        gfld->idsectlen = Number of elements in gfld->idsect[].
+//        gfld->local   = Pointer to character array containing contents
+//                       of Local Section 2, if included
+//        gfld->locallen = length of array gfld->local[]
+//        gfld->ifldnum = field number within GRIB message
+//        gfld->griddef = Source of grid definition (see Code Table 3.0)
+//                      0 - Specified in Code table 3.1
+//                      1 - Predetermined grid Defined by originating centre
+//        gfld->ngrdpts = Number of grid points in the defined grid.
+//        gfld->numoct_opt = Number of octets needed for each
+//                          additional grid points definition.
+//                          Used to define number of
+//                          points in each row ( or column ) for
+//                          non-regular grids.
+//                          = 0, if using regular grid.
+//        gfld->interp_opt = Interpretation of list for optional points
+//                          definition.  (Code Table 3.11)
+//        gfld->igdtnum = Grid Definition Template Number (Code Table 3.1)
+//        gfld->igdtmpl  = Contains the data values for the specified Grid
+//                         Definition Template ( NN=gfld->igdtnum ).  Each
+//                         element of this integer array contains an entry (in
+//                         the order specified) of Grid Defintion Template 3.NN
+//                         This element is a pointer to an array
+//                         that holds the data.
+//        gfld->igdtlen = Number of elements in gfld->igdtmpl[].  i.e. number of
+//                       entries in Grid Defintion Template 3.NN
+//                       ( NN=gfld->igdtnum ).
+//        gfld->list_opt  = (Used if gfld->numoct_opt .ne. 0)  This array
+//                          contains the number of grid points contained in
+//                          each row ( or column ).  (part of Section 3)
+//                          This element is a pointer to an array
+//                          that holds the data.  This pointer is nullified
+//                          if gfld->numoct_opt=0.
+//        gfld->num_opt = (Used if gfld->numoct_opt .ne. 0) 
+//                        The number of entries
+//                       in array ideflist.  i.e. number of rows ( or columns )
+//                       for which optional grid points are defined.  This value
+//                       is set to zero, if gfld->numoct_opt=0.
+//        gfdl->ipdtnum = Product Definition Template Number(see Code Table 4.0)
+//        gfld->ipdtmpl  = Contains the data values for the specified Product
+//                         Definition Template ( N=gfdl->ipdtnum ). Each element
+//                         of this integer array contains an entry (in the
+//                         order specified) of Product Defintion Template 4.N.
+//                         This element is a pointer to an array
+//                         that holds the data.
+//        gfld->ipdtlen = Number of elements in gfld->ipdtmpl[].  i.e. number of
+//                       entries in Product Defintion Template 4.N
+//                       ( N=gfdl->ipdtnum ).
+//        gfld->coord_list  = Real array containing floating point values
+//                            intended to document the vertical discretisation
+//                            associated to model data on hybrid coordinate
+//                            vertical levels.  (part of Section 4)
+//                            This element is a pointer to an array
+//                            that holds the data.
+//        gfld->num_coord = number of values in array gfld->coord_list[].
+//        gfld->ndpts = Number of data points unpacked and returned.
+//        gfld->idrtnum = Data Representation Template Number
+//                       ( see Code Table 5.0)
+//        gfld->idrtmpl  = Contains the data values for the specified Data
+//                         Representation Template ( N=gfld->idrtnum ).  Each
+//                         element of this integer array contains an entry
+//                         (in the order specified) of Product Defintion
+//                         Template 5.N.
+//                         This element is a pointer to an array
+//                         that holds the data.
+//        gfld->idrtlen = Number of elements in gfld->idrtmpl[].  i.e. number
+//                       of entries in Data Representation Template 5.N
+//                       ( N=gfld->idrtnum ).
+//        gfld->unpacked = logical value indicating whether the bitmap and
+//                        data values were unpacked.  If false,
+//                        gfld->bmap and gfld->fld pointers are nullified.
+//        gfld->expanded = Logical value indicating whether the data field 
+//                         was expanded to the grid in the case where a 
+//                         bit-map is present.  If true, the data points in
+//                         gfld->fld match the grid points and zeros were 
+//                         inserted at grid points where data was bit-mapped
+//                         out.  If false, the data values in gfld->fld were
+//                         not expanded to the grid and are just a consecutive
+//                         array of data points corresponding to each value of
+//                         "1" in gfld->bmap.
+//        gfld->ibmap = Bitmap indicator ( see Code Table 6.0 )
+//                     0 = bitmap applies and is included in Section 6.
+//                     1-253 = Predefined bitmap applies
+//                     254 = Previously defined bitmap applies to this field
+//                     255 = Bit map does not apply to this product.
+//        gfld->bmap  = integer array containing decoded bitmap,
+//                      if gfld->ibmap=0 or gfld->ibap=254.  Otherwise nullified
+//                      This element is a pointer to an array
+//                      that holds the data.
+//        gfld->fld  = Array of gfld->ndpts unpacked data points.
+//                     This element is a pointer to an array
+//                     that holds the data.
+//
+// 
+//   RETURN VALUES:
+//     ierr     - Error return code.
+//                0 = no error
+//                1 = Beginning characters "GRIB" not found.
+//                2 = GRIB message is not Edition 2.
+//                3 = The data field request number was not positive.
+//                4 = End string "7777" found, but not where expected.
+//                6 = GRIB message did not contain the requested number of
+//                    data fields.
+//                7 = End string "7777" not found at end of message.
+//                8 = Unrecognized Section encountered.
+//                9 = Data Representation Template 5.NN not yet implemented.
+//               15 = Error unpacking Section 1.
+//               16 = Error unpacking Section 2.
+//               10 = Error unpacking Section 3.
+//               11 = Error unpacking Section 4.
+//               12 = Error unpacking Section 5.
+//               13 = Error unpacking Section 6.
+//               14 = Error unpacking Section 7.
+//               17 = Previous bitmap specified, yet none exists.
+//
+// REMARKS: Note that struct gribfield is allocated by this routine and it
+//          also contains pointers to many arrays of data that were allocated
+//          during decoding.  Users are encouraged to free up this memory, 
+//          when it is no longer needed, by an explicit call to routine g2_free.
+//          EXAMPLE:
+//              #include "grib2.h"
+//              gribfield *gfld;
+//              ret=g2_getfld(cgrib,1,1,1,&gfld);
+//                ...
+//              g2_free(gfld);
+//
+//          Routine g2_info can be used to first determine
+//          how many data fields exist in a given GRIB message.
+//
+// REMARKS2: It may not always be possible to expand a bit-mapped data field.
+//           If a pre-defined bit-map is used and not included in the GRIB2
+//           message itself, this routine would not have the necessary 
+//           information to expand the data.  In this case, gfld->expanded would
+//           would be set to 0 (false), regardless of the value of input 
+//           argument expand.
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$
+{
+    
+      g2int have3,have4,have5,have6,have7,ierr,jerr;
+      g2int numfld,j,n,istart,iofst,ipos;
+      g2int disc,ver,lensec0,lengrib,lensec,isecnum;
+      g2int  *igds;
+      g2int *bmpsave;
+      g2float *newfld;
+      gribfield  *lgfld;
+
+      have3=0;
+      have4=0;
+      have5=0;
+      have6=0;
+      have7=0;
+      ierr=0;
+      numfld=0;
+
+      lgfld=(gribfield *)malloc(sizeof(gribfield));
+      *gfld=lgfld;
+
+      lgfld->locallen=0;
+      lgfld->idsect=0;
+      lgfld->local=0;
+      lgfld->list_opt=0;
+      lgfld->igdtmpl=0;
+      lgfld->ipdtmpl=0;
+      lgfld->idrtmpl=0;
+      lgfld->coord_list=0;
+      lgfld->bmap=0;
+      lgfld->fld=0;
+//
+//  Check for valid request number
+//  
+      if (ifldnum <= 0) {
+        printf("g2_getfld: Request for field number must be positive.\n");
+        ierr=3;
+        return(ierr);
+      }
+//
+//  Check for beginning of GRIB message in the first 100 bytes
+//
+      istart=-1;
+      for (j=0;j<100;j++) {
+        if (cgrib[j]=='G' && cgrib[j+1]=='R' &&cgrib[j+2]=='I' && 
+            cgrib[j+3]=='B') {
+          istart=j;
+          break;
+        }
+      }
+      if (istart == -1) {
+        printf("g2_getfld:  Beginning characters GRIB not found.\n");
+        ierr=1;
+        return(ierr);
+      }
+//
+//  Unpack Section 0 - Indicator Section 
+//
+      iofst=8*(istart+6);
+      gbit(cgrib,&disc,iofst,8);     // Discipline
+      iofst=iofst+8;
+      gbit(cgrib,&ver,iofst,8);     // GRIB edition number
+      iofst=iofst+8;
+      iofst=iofst+32;
+      gbit(cgrib,&lengrib,iofst,32);        // Length of GRIB message
+      iofst=iofst+32;
+      lensec0=16;
+      ipos=istart+lensec0;
+//
+//  Currently handles only GRIB Edition 2.
+//  
+      if (ver != 2) {
+        printf("g2_getfld: can only decode GRIB edition 2.\n");
+        ierr=2;
+        return(ierr);
+      }
+//
+//  Loop through the remaining sections keeping track of the 
+//  length of each.  Also keep the latest Grid Definition Section info.
+//  Unpack the requested field number.
+//
+      for (;;) {
+        //    Check to see if we are at end of GRIB message
+        if (cgrib[ipos]=='7' && cgrib[ipos+1]=='7' && cgrib[ipos+2]=='7' && 
+            cgrib[ipos+3]=='7') {
+          ipos=ipos+4;
+          //    If end of GRIB message not where expected, issue error
+          if (ipos != (istart+lengrib)) {
+            printf("g2_getfld: '7777' found, but not where expected.\n");
+            ierr=4;
+            return(ierr);
+          }
+          break;
+        }
+        //     Get length of Section and Section number
+        iofst=(ipos-1)*8;
+        iofst=ipos*8;
+        gbit(cgrib,&lensec,iofst,32);        // Get Length of Section
+        iofst=iofst+32;
+        gbit(cgrib,&isecnum,iofst,8);         // Get Section number
+        iofst=iofst+8;
+        //printf(" lensec= %ld    secnum= %ld \n",lensec,isecnum);
+        //
+        //  Check to see if section number is valid
+        //
+        if ( isecnum<1 || isecnum>7 ) {
+          printf("g2_getfld: Unrecognized Section Encountered=%ld\n",isecnum);
+          ierr=8;
+          return(ierr);
+        }
+        //
+        //   If found Section 1, decode elements in Identification Section
+        //
+        if (isecnum == 1) {
+          iofst=iofst-40;       // reset offset to beginning of section
+          jerr=g2_unpack1(cgrib,&iofst,&lgfld->idsect,&lgfld->idsectlen);
+          if (jerr !=0 ) {
+            ierr=15;
+            return(ierr);
+          }
+        }
+        //
+        //   If found Section 2, Grab local section
+        //   Save in case this is the latest one before the requested field.
+        //
+        if (isecnum == 2) {
+          iofst=iofst-40;       // reset offset to beginning of section
+          if (lgfld->local!=0) free(lgfld->local);
+          jerr=g2_unpack2(cgrib,&iofst,&lgfld->locallen,&lgfld->local);
+          if (jerr != 0) {
+            ierr=16;
+            return(ierr);
+          }
+        }
+        //
+        //   If found Section 3, unpack the GDS info using the 
+        //   appropriate template.  Save in case this is the latest
+        //   grid before the requested field.
+        //
+        if (isecnum == 3) {
+          iofst=iofst-40;       // reset offset to beginning of section
+          if (lgfld->igdtmpl!=0) free(lgfld->igdtmpl);
+          if (lgfld->list_opt!=0) free(lgfld->list_opt);
+          jerr=g2_unpack3(cgrib,&iofst,&igds,&lgfld->igdtmpl,
+                          &lgfld->igdtlen,&lgfld->list_opt,&lgfld->num_opt);
+          if (jerr == 0) {
+            have3=1;
+            lgfld->griddef=igds[0];
+            lgfld->ngrdpts=igds[1];
+            lgfld->numoct_opt=igds[2];
+            lgfld->interp_opt=igds[3];
+            lgfld->igdtnum=igds[4];
+          }
+          else {
+            ierr=10;
+            return(ierr);
+          }
+        }
+        //
+        //   If found Section 4, check to see if this field is the
+        //   one requested.
+        //
+        if (isecnum == 4) {
+          numfld=numfld+1;
+          if (numfld == ifldnum) {
+            lgfld->discipline=disc;
+            lgfld->version=ver;
+            lgfld->ifldnum=ifldnum;
+            lgfld->unpacked=unpack;
+            lgfld->expanded=0;
+            iofst=iofst-40;       // reset offset to beginning of section
+            jerr=g2_unpack4(cgrib,&iofst,&lgfld->ipdtnum,
+                            &lgfld->ipdtmpl,&lgfld->ipdtlen,&lgfld->coord_list,
+                            &lgfld->num_coord);
+            if (jerr == 0)
+              have4=1;
+            else {
+              ierr=11;
+              return(ierr);
+            }
+          }
+        }
+        //
+        //   If found Section 5, check to see if this field is the
+        //   one requested.
+        //
+        if (isecnum == 5 && numfld == ifldnum) {
+          iofst=iofst-40;       // reset offset to beginning of section
+          jerr=g2_unpack5(cgrib,&iofst,&lgfld->ndpts,&lgfld->idrtnum,
+                          &lgfld->idrtmpl,&lgfld->idrtlen);
+          if (jerr == 0)
+            have5=1;
+          else {
+            ierr=12;
+            return(ierr);
+          }
+        }
+        //
+        //   If found Section 6, Unpack bitmap.
+        //   Save in case this is the latest
+        //   bitmap before the requested field.
+        //
+        if (isecnum == 6) {
+          if (unpack) {   // unpack bitmap
+            iofst=iofst-40;           // reset offset to beginning of section
+            bmpsave=lgfld->bmap;      // save pointer to previous bitmap
+            jerr=g2_unpack6(cgrib,&iofst,lgfld->ngrdpts,&lgfld->ibmap,
+                         &lgfld->bmap);
+            if (jerr == 0) {
+              have6=1;
+              if (lgfld->ibmap == 254)     // use previously specified bitmap
+                 if( bmpsave!=0 ) 
+                    lgfld->bmap=bmpsave;
+                 else {
+                    printf("g2_getfld: Prev bit-map specified, but none exist.\n");
+                    ierr=17;
+                    return(ierr);
+                 }
+              else                         // get rid of it
+                 if( bmpsave!=0 ) free(bmpsave);
+            }
+            else {
+              ierr=13;
+              return(ierr);
+            }
+          }
+          else {    // do not unpack bitmap
+            gbit(cgrib,&lgfld->ibmap,iofst,8);      // Get BitMap Indicator
+            have6=1;
+          }
+        }
+        //
+        //   If found Section 7, check to see if this field is the
+        //   one requested.
+        //
+        if (isecnum==7 && numfld==ifldnum && unpack) {
+          iofst=iofst-40;       // reset offset to beginning of section
+          jerr=g2_unpack7(cgrib,&iofst,lgfld->igdtnum,lgfld->igdtmpl,
+                          lgfld->idrtnum,lgfld->idrtmpl,lgfld->ndpts,
+                          &lgfld->fld);
+          if (jerr == 0) {
+            have7=1;
+            //  If bitmap is used with this field, expand data field 
+            //  to grid, if possible.
+            if ( lgfld->ibmap != 255 && lgfld->bmap != 0 ) {
+               if ( expand == 1 ) {
+                  n=0;
+                  newfld=(g2float *)calloc(lgfld->ngrdpts,sizeof(g2float));
+                  for (j=0;j<lgfld->ngrdpts;j++) {
+                      if (lgfld->bmap[j]==1) newfld[j]=lgfld->fld[n++];
+                  }
+                  free(lgfld->fld);
+                  lgfld->fld=newfld;
+                  lgfld->expanded=1;
+               }
+               else {
+                  lgfld->expanded=0;
+               }
+            }
+            else {
+               lgfld->expanded=1;
+            }
+          }
+          else {
+            printf("g2_getfld: return from g2_unpack7 = %d \n",(int)jerr);
+            ierr=14;
+            return(ierr);
+          }
+        }
+        //
+        //   Check to see if we read pass the end of the GRIB
+        //   message and missed the terminator string '7777'.
+        //
+        ipos=ipos+lensec;                // Update beginning of section pointer
+        if (ipos > (istart+lengrib)) {
+          printf("g2_getfld: '7777'  not found at end of GRIB message.\n");
+          ierr=7;
+          return(ierr);
+        }
+        //
+        //  If unpacking requested, return when all sections have been
+        //  processed
+        //
+        if (unpack && have3 && have4 && have5 && have6 && have7)
+            return(ierr);
+        //
+        //  If unpacking is not requested, return when sections 
+        //  3 through 6 have been processed
+        //
+        if ((! unpack) && have3 && have4 && have5 && have6)
+            return(ierr);
+        
+      }
+
+//
+//  If exited from above loop, the end of the GRIB message was reached
+//  before the requested field was found.
+//
+      printf("g2_getfld: GRIB message contained %ld different fields.\n",numfld);
+      printf("g2_getfld: The request was for field %ld.\n",ifldnum);
+      ierr=6;
+
+      return(ierr);
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_gribend.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_gribend.c
new file mode 100755
index 0000000..5373aaa
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_gribend.c
@@ -0,0 +1,122 @@
+#include <stdio.h>
+#include "grib2.h"
+
+g2int g2_gribend(unsigned char *cgrib)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_gribend 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-31
+//
+// ABSTRACT: This routine finalizes a GRIB2 message after all grids
+//   and fields have been added.  It adds the End Section ( "7777" )
+//   to the end of the GRIB message and calculates the length and stores
+//   it in the appropriate place in Section 0.
+//   This routine is used with routines "g2_create", "g2_addlocal", 
+//   "g2_addgrid", and "g2_addfield" to create a complete GRIB2 message.
+//   g2_create must be called first to initialize a new GRIB2 message.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-31  Gilbert
+//
+// USAGE:    int g2_gribend(unsigned char *cgrib)
+//   INPUT ARGUMENT:
+//     cgrib    - Char array containing all the data sections added
+//                be previous calls to g2_create, g2_addlocal, g2_addgrid,
+//                and g2_addfield.
+//
+//   OUTPUT ARGUMENTS:      
+//     cgrib    - Char array containing the finalized GRIB2 message
+//
+//   RETURN VALUES:
+//     ierr     - Return code.
+//              > 0 = Length of the final GRIB2 message in bytes.
+//               -1 = GRIB message was not initialized.  Need to call
+//                    routine g2_create first.
+//               -2 = GRIB message already complete.  
+//               -3 = Sum of Section byte counts doesn't add to total byte count
+//               -4 = Previous Section was not 7.
+//
+// REMARKS: This routine is intended for use with routines "g2_create", 
+//          "g2_addlocal", "g2_addgrid", and "g2_addfield" to create a complete 
+//          GRIB2 message.
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:
+//
+//$$$
+{
+
+      g2int iofst,lencurr,len,ilen,isecnum;
+      g2int   ierr,lengrib;
+      static unsigned char G=0x47;       // 'G'
+      static unsigned char R=0x52;       // 'R'
+      static unsigned char I=0x49;       // 'I'
+      static unsigned char B=0x42;       // 'B'
+      static unsigned char seven=0x37;   // '7'
+ 
+      ierr=0;
+//
+//  Check to see if beginning of GRIB message exists
+//
+      if ( cgrib[0]!=G || cgrib[1]!=R || cgrib[2]!=I || cgrib[3]!=B ) {
+        printf("g2_gribend: GRIB not found in given message.\n");
+        ierr=-1;
+        return (ierr);
+      }
+//
+//  Get current length of GRIB message
+//  
+      gbit(cgrib,&lencurr,96,32);
+//
+//  Loop through all current sections of the GRIB message to
+//  find the last section number.
+//
+      len=16;    // Length of Section 0
+      for (;;) { 
+      //    Get number and length of next section
+        iofst=len*8;
+        gbit(cgrib,&ilen,iofst,32);
+        iofst=iofst+32;
+        gbit(cgrib,&isecnum,iofst,8);
+        len=len+ilen;
+      //    Exit loop if last section reached
+        if ( len == lencurr ) break;
+      //    If byte count for each section doesn't match current
+      //    total length, then there is a problem.
+        if ( len > lencurr ) {
+          printf("g2_gribend: Section byte counts don''t add to total.\n");
+          printf("g2_gribend: Sum of section byte counts = %d\n",(int)len);
+          printf("g2_gribend: Total byte count in Section 0 = %d\n",(int)lencurr);
+          ierr=-3;
+          return (ierr);
+        }
+      }
+//
+//  Can only add End Section (Section 8) after Section 7.
+//
+      if ( isecnum != 7 ) {
+        printf("g2_gribend: Section 8 can only be added after Section 7.\n");
+        printf("g2_gribend: Section %ld was the last found in given GRIB message.\n",isecnum);
+        ierr=-4;
+        return (ierr);
+      }
+//
+//  Add Section 8  - End Section
+//
+      //cgrib(lencurr+1:lencurr+4)=c7777
+      cgrib[lencurr]=seven;
+      cgrib[lencurr+1]=seven;
+      cgrib[lencurr+2]=seven;
+      cgrib[lencurr+3]=seven;
+
+//
+//  Update current byte total of message in Section 0
+//
+      lengrib=lencurr+4;
+      sbit(cgrib,&lengrib,96,32);
+
+      return (lengrib);
+
+}
+
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_info.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_info.c
new file mode 100755
index 0000000..443a5b8
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_info.c
@@ -0,0 +1,190 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+g2int g2_info(unsigned char *cgrib,g2int *listsec0,g2int *listsec1,
+            g2int *numfields,g2int *numlocal)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_info 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-28
+//
+// ABSTRACT: This subroutine searches through a GRIB2 message and
+//   returns the number of gridded fields found in the message and
+//   the number (and maximum size) of Local Use Sections.
+//   Also various checks  are performed
+//   to see if the message is a valid GRIB2 message.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-28  Gilbert
+//
+// USAGE:   int g2_info(unsigned char *cgrib,g2int *listsec0,g2int *listsec1,
+//            g2int *numfields,g2int *numlocal)
+//   INPUT ARGUMENT:
+//     cgrib    - Character pointer to the GRIB2 message
+//
+//   OUTPUT ARGUMENTS:      
+//     listsec0 - pointer to an array containing information decoded from 
+//                GRIB Indicator Section 0.
+//                Must be allocated with >= 3 elements.
+//                listsec0[0]=Discipline-GRIB Master Table Number
+//                            (see Code Table 0.0)
+//                listsec0[1]=GRIB Edition Number (currently 2)
+//                listsec0[2]=Length of GRIB message
+//     listsec1 - pointer to an array containing information read from GRIB 
+//                Identification Section 1.
+//                Must be allocated with >= 13 elements.
+//                listsec1[0]=Id of orginating centre (Common Code Table C-1)
+//                listsec1[1]=Id of orginating sub-centre (local table)
+//                listsec1[2]=GRIB Master Tables Version Number (Code Table 1.0)
+//                listsec1[3]=GRIB Local Tables Version Number 
+//                listsec1[4]=Significance of Reference Time (Code Table 1.1)
+//                listsec1[5]=Reference Time - Year (4 digits)
+//                listsec1[6]=Reference Time - Month
+//                listsec1[7]=Reference Time - Day
+//                listsec1[8]=Reference Time - Hour
+//                listsec1[9]=Reference Time - Minute
+//                listsec1[10]=Reference Time - Second
+//                listsec1[11]=Production status of data (Code Table 1.2)
+//                listsec1[12]=Type of processed data (Code Table 1.3)
+//     numfields- The number of gridded fields found in the GRIB message.
+//                That is, the number of occurences of Sections 4 - 7.
+//     numlocal - The number of Local Use Sections ( Section 2 ) found in 
+//                the GRIB message.
+//
+//     RETURN VALUES:
+//     ierr     - Error return code.
+//                0 = no error
+//                1 = Beginning characters "GRIB" not found.
+//                2 = GRIB message is not Edition 2.
+//                3 = Could not find Section 1, where expected.
+//                4 = End string "7777" found, but not where expected.
+//                5 = End string "7777" not found at end of message.
+//                6 = Invalid section number found.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$
+{
+ 
+      g2int ierr,mapsec1len=13;
+      g2int mapsec1[13]={2,2,1,1,1,2,1,1,1,1,1,1,1};
+      g2int  i,j,istart,iofst,lengrib,lensec0,lensec1;
+      g2int ipos,isecnum,nbits,lensec;
+
+      ierr=0;
+      *numlocal=0;
+      *numfields=0;
+//
+//  Check for beginning of GRIB message in the first 100 bytes
+//
+      istart=-1;
+      for (j=0;j<100;j++) {
+        if (cgrib[j]=='G' && cgrib[j+1]=='R' &&cgrib[j+2]=='I' &&
+            cgrib[j+3]=='B') {
+          istart=j;
+          break;
+        }
+      }
+      if (istart == -1) {
+        printf("g2_info:  Beginning characters GRIB not found.");
+        ierr=1;
+        return(ierr);
+      }
+//
+//  Unpack Section 0 - Indicator Section 
+//
+      iofst=8*(istart+6);
+      gbit(cgrib,listsec0+0,iofst,8);     // Discipline
+      iofst=iofst+8;
+      gbit(cgrib,listsec0+1,iofst,8);     // GRIB edition number
+      iofst=iofst+8;
+      iofst=iofst+32;
+      gbit(cgrib,&lengrib,iofst,32);        // Length of GRIB message
+      iofst=iofst+32;
+      listsec0[2]=lengrib;
+      lensec0=16;
+      ipos=istart+lensec0;
+//
+//  Currently handles only GRIB Edition 2.
+//  
+      if (listsec0[1] != 2) {
+        printf("g2_info: can only decode GRIB edition 2.");
+        ierr=2;
+        return(ierr);
+      }
+//
+//  Unpack Section 1 - Identification Section
+//
+      gbit(cgrib,&lensec1,iofst,32);        // Length of Section 1
+      iofst=iofst+32;
+      gbit(cgrib,&isecnum,iofst,8);         // Section number ( 1 )
+      iofst=iofst+8;
+      if (isecnum != 1) {
+        printf("g2_info: Could not find section 1.");
+        ierr=3;
+        return(ierr);
+      }
+      //
+      //   Unpack each input value in array listsec1 into the
+      //   the appropriate number of octets, which are specified in
+      //   corresponding entries in array mapsec1.
+      //
+      for (i=0;i<mapsec1len;i++) {
+        nbits=mapsec1[i]*8;
+        gbit(cgrib,listsec1+i,iofst,nbits);
+        iofst=iofst+nbits;
+      }
+      ipos=ipos+lensec1;
+//
+//  Loop through the remaining sections to see if they are valid.
+//  Also count the number of times Section 2
+//  and Section 4 appear.
+//
+      for (;;) {
+        if (cgrib[ipos]=='7' && cgrib[ipos+1]=='7' && cgrib[ipos+2]=='7' &&
+            cgrib[ipos+3]=='7') {
+          ipos=ipos+4;
+          if (ipos != (istart+lengrib)) {
+            printf("g2_info: '7777' found, but not where expected.\n");
+            ierr=4;
+            return(ierr);
+          }
+          break;
+        }
+        
+        iofst=ipos*8;
+        gbit(cgrib,&lensec,iofst,32);        // Get Length of Section
+        iofst=iofst+32;
+        gbit(cgrib,&isecnum,iofst,8);         // Get Section number
+        iofst=iofst+8;
+        ipos=ipos+lensec;                 // Update beginning of section pointer
+        if (ipos > (istart+lengrib)) {
+          printf("g2_info: '7777'  not found at end of GRIB message.\n");
+          ierr=5;
+          return(ierr);
+        }
+        if ( isecnum>=2 && isecnum<=7 ) {
+           if (isecnum == 2)      // Local Section 2
+              //   increment counter for total number of local sections found
+              (*numlocal)++;
+            
+           else if (isecnum == 4)
+              //   increment counter for total number of fields found
+              (*numfields)++;
+        }
+        else {
+           printf("g2_info: Invalid section number found in GRIB message: %ld\n"                   ,isecnum);
+           ierr=6;
+           return(ierr);
+        }
+        
+      }
+
+      return(0);
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_miss.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_miss.c
new file mode 100644
index 0000000..3dab744
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_miss.c
@@ -0,0 +1,69 @@
+#include "grib2.h"
+
+void g2_miss( gribfield *gfld, float *rmiss, int *nmiss )
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_miss 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2004-12-16
+//
+// ABSTRACT: This routine checks the Data Representation Template to see if
+// missing value management is used, and returns the missing value(s) 
+// in the data field.
+//
+// PROGRAM HISTORY LOG:
+// 2004-12-16  Gilbert
+//
+// USAGE:    g2_miss( gribfield *gfld, float *rmiss, int *nmiss )
+//                   
+//   INPUT ARGUMENT LIST:
+//     *gfld    - pointer to gribfield structure (defined in include file 
+//                   grib2.h)
+//
+//   OUTPUT ARGUMENT LIST:      
+//     rmiss    - List of the missing values used
+//     nmiss    - NUmber of the missing values included in the field
+//
+// REMARKS:  rmiss must be allocated in the calling program with enough space 
+//           hold all the missing values.
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$
+{
+    g2int     itype;    
+
+    /*
+     *  Missing value management currnetly only used in
+     *  DRT's 5.2 and 5.3.
+     */
+    if ( gfld->idrtnum != 2  &&  gfld->idrtnum != 3 ) {
+       *nmiss=0;
+       return;
+    }
+                                                                                
+    itype = gfld->idrtmpl[4];
+    if ( gfld->idrtmpl[6] == 1 ) {
+         *nmiss=1;
+         if (itype == 0)
+            rdieee(gfld->idrtmpl+7,rmiss+0,1);
+         else
+            rmiss[0]=(float)gfld->idrtmpl[7];
+    }
+    else if ( gfld->idrtmpl[6] == 2 ) {
+         *nmiss=2;
+         if (itype == 0) {
+            rdieee(gfld->idrtmpl+7,rmiss+0,1);
+            rdieee(gfld->idrtmpl+8,rmiss+1,1);
+         }
+         else {
+            rmiss[0]=(float)gfld->idrtmpl[7];
+            rmiss[1]=(float)gfld->idrtmpl[8];
+         }
+    }
+    else {
+       *nmiss=0;
+    }
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack1.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack1.c
new file mode 100755
index 0000000..02114e9
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack1.c
@@ -0,0 +1,99 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+g2int g2_unpack1(unsigned char *cgrib,g2int *iofst,g2int **ids,g2int *idslen)
+/*//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_unpack1 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-29
+//
+// ABSTRACT: This subroutine unpacks Section 1 (Identification Section)
+//           as defined in GRIB Edition 2.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-29  Gilbert
+//
+// USAGE:    int g2_unpack1(unsigned char *cgrib,g2int *iofst,g2int **ids,
+//                          g2int *idslen)
+//   INPUT ARGUMENTS:
+//     cgrib    - char array containing Section 1 of the GRIB2 message
+//     iofst    - Bit offset for the beginning of Section 1 in cgrib.
+//
+//   OUTPUT ARGUMENTS:      
+//     iofst    - Bit offset at the end of Section 1, returned.
+//     ids      - address of pointer to integer array containing information 
+//                read from Section 1, the Identification section.
+//            ids[0]  = Identification of originating Centre
+//                                 ( see Common Code Table C-1 )
+//            ids[1]  = Identification of originating Sub-centre
+//            ids[2]  = GRIB Master Tables Version Number
+//                                 ( see Code Table 1.0 )
+//            ids[3]  = GRIB Local Tables Version Number
+//                                 ( see Code Table 1.1 )
+//            ids[4]  = Significance of Reference Time (Code Table 1.2)
+//            ids[5]  = Year ( 4 digits )
+//            ids[6]  = Month
+//            ids[7]  = Day
+//            ids[8]  = Hour
+//            ids[9]  = Minute
+//            ids[10]  = Second
+//            ids[11]  = Production status of processed data
+//                                 ( see Code Table 1.3 )
+//            ids[12]  = Type of processed data ( see Code Table 1.4 )
+//     idslen   - Number of elements in ids[].
+//
+//   RETURN VALUES:
+//     ierr     - Error return code.
+//                0 = no error
+//                2 = Array passed is not section 1
+//                6 = memory allocation error
+//
+// REMARKS: 
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:
+//
+//$$$
+*/
+{
+
+      g2int i,lensec,nbits,ierr,isecnum;
+      g2int mapid[13]={2,2,1,1,1,2,1,1,1,1,1,1,1};
+
+      ierr=0;
+      *idslen=13;
+      *ids=0;
+
+      gbit(cgrib,&lensec,*iofst,32);        // Get Length of Section
+      *iofst=*iofst+32;
+      gbit(cgrib,&isecnum,*iofst,8);         // Get Section Number
+      *iofst=*iofst+8;
+
+      if ( isecnum != 1 ) {
+         ierr=2;
+         *idslen=13;
+         fprintf(stderr,"g2_unpack1: Not Section 1 data.\n");
+         return(ierr);
+      }
+
+      //
+      //   Unpack each value into array ids from the
+      //   the appropriate number of octets, which are specified in
+      //   corresponding entries in array mapid.
+      //
+      *ids=(g2int *)calloc(*idslen,sizeof(g2int));
+      if (*ids == 0) {
+         ierr=6;
+         return(ierr);
+      }
+      
+      for (i=0;i<*idslen;i++) {
+        nbits=mapid[i]*8;
+        gbit(cgrib,*ids+i,*iofst,nbits);
+        *iofst=*iofst+nbits;
+      }
+      
+      return(ierr);    // End of Section 1 processing
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack2.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack2.c
new file mode 100755
index 0000000..ebab94b
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack2.c
@@ -0,0 +1,79 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+g2int g2_unpack2(unsigned char *cgrib,g2int *iofst,g2int *lencsec2,unsigned char **csec2)
+////$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_unpack2 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-31
+//
+// ABSTRACT: This subroutine unpacks Section 2 (Local Use Section)
+//           as defined in GRIB Edition 2.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-31  Gilbert
+//
+// USAGE:    int g2_unpack2(unsigned char *cgrib,g2int *iofst,g2int *lencsec2,
+//                          unsigned char **csec2)
+//   INPUT ARGUMENT LIST:
+//     cgrib    - char array containing Section 2 of the GRIB2 message
+//     iofst    - Bit offset for the beginning of Section 2 in cgrib.
+//
+//   OUTPUT ARGUMENT LIST:      
+//     iofst    - Bit offset at the end of Section 2, returned.
+//     lencsec2 - Length (in octets) of Local Use data
+//     csec2    - Pointer to a char array containing local use data
+//
+//   RETURN VALUES:
+//     ierr     - Error return code.
+//                0 = no error
+//                2 = Array passed is not section 2
+//                6 = memory allocation error
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE: 
+//
+//$$$//
+{
+
+      g2int ierr,isecnum;
+      g2int lensec,ipos,j;
+
+      ierr=0;
+      *lencsec2=0;
+      *csec2=0;    // NULL
+
+      gbit(cgrib,&lensec,*iofst,32);        // Get Length of Section
+      *iofst=*iofst+32;
+      *lencsec2=lensec-5;
+      gbit(cgrib,&isecnum,*iofst,8);         // Get Section Number
+      *iofst=*iofst+8;
+      ipos=(*iofst/8);
+
+      if ( isecnum != 2 ) {
+         ierr=2;
+         *lencsec2=0;
+         fprintf(stderr,"g2_unpack2: Not Section 2 data.\n");
+         return(ierr);
+      }
+
+      *csec2=(unsigned char *)malloc(*lencsec2);
+      if (*csec2 == 0) {
+         ierr=6;
+         *lencsec2=0;
+         return(ierr);
+      }
+      
+      //printf(" SAGIPO %d \n",(int)ipos);
+      for (j=0;j<*lencsec2;j++) {
+         *(*csec2+j)=cgrib[ipos+j];
+      }
+      *iofst=*iofst+(*lencsec2*8);
+
+      return(ierr);    // End of Section 2 processing
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack3.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack3.c
new file mode 100755
index 0000000..5df9eb5
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack3.c
@@ -0,0 +1,213 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+
+g2int g2_unpack3(unsigned char *cgrib,g2int *iofst,g2int **igds,g2int **igdstmpl,
+                         g2int *mapgridlen,g2int **ideflist,g2int *idefnum)
+////$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_unpack3 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-31
+//
+// ABSTRACT: This routine unpacks Section 3 (Grid Definition Section)
+//           as defined in GRIB Edition 2.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-31  Gilbert
+//
+// USAGE:    int g2_unpack3(unsigned char *cgrib,g2int *iofst,g2int **igds,
+//                          g2int **igdstmpl,g2int *mapgridlen,
+//                          g2int **ideflist,g2int *idefnum)
+//   INPUT ARGUMENTS:
+//     cgrib    - Char array ontaining Section 3 of the GRIB2 message
+//     iofst    - Bit offset for the beginning of Section 3 in cgrib.
+//
+//   OUTPUT ARGUMENTS:      
+//     iofst    - Bit offset at the end of Section 3, returned.
+//     igds     - Contains information read from the appropriate GRIB Grid 
+//                Definition Section 3 for the field being returned.
+//                igds[0]=Source of grid definition (see Code Table 3.0)
+//                igds[1]=Number of grid points in the defined grid.
+//                igds[2]=Number of octets needed for each 
+//                            additional grid points definition.  
+//                            Used to define number of
+//                            points in each row ( or column ) for
+//                            non-regular grids.  
+//                            = 0, if using regular grid.
+//                igds[3]=Interpretation of list for optional points 
+//                            definition.  (Code Table 3.11)
+//                igds[4]=Grid Definition Template Number (Code Table 3.1)
+//     igdstmpl - Pointer to integer array containing the data values for 
+//                the specified Grid Definition
+//                Template ( NN=igds[4] ).  Each element of this integer 
+//                array contains an entry (in the order specified) of Grid
+//                Defintion Template 3.NN
+//     mapgridlen- Number of elements in igdstmpl[].  i.e. number of entries
+//                in Grid Defintion Template 3.NN  ( NN=igds[4] ).
+//     ideflist - (Used if igds[2] .ne. 0)  Pointer to integer array containing
+//                the number of grid points contained in each row ( or column ).
+//                (part of Section 3)
+//     idefnum  - (Used if igds[2] .ne. 0)  The number of entries
+//                in array ideflist.  i.e. number of rows ( or columns )
+//                for which optional grid points are defined.
+//     ierr     - Error return code.
+//                0 = no error
+//                2 = Not Section 3
+//                5 = "GRIB" message contains an undefined Grid Definition
+//                    Template.
+//                6 = memory allocation error
+//
+// REMARKS: 
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:
+//
+//$$$
+
+{
+      g2int ierr,i,j,nbits,isecnum;
+      g2int lensec,ibyttem=0,isign,newlen;
+      g2int *ligds,*ligdstmpl=0,*lideflist=0;
+      template *mapgrid;
+
+      ierr=0;
+      *igds=0;       // NULL
+      *igdstmpl=0;       // NULL
+      *ideflist=0;       // NULL
+
+      gbit(cgrib,&lensec,*iofst,32);        // Get Length of Section
+      *iofst=*iofst+32;
+      gbit(cgrib,&isecnum,*iofst,8);         // Get Section Number
+      *iofst=*iofst+8;
+
+      if ( isecnum != 3 ) {
+         ierr=2;
+         *idefnum=0;
+         *mapgridlen=0;
+        // fprintf(stderr,"g2_unpack3: Not Section 3 data.\n");
+         return(ierr);
+      }
+
+      ligds=(g2int *)calloc(5,sizeof(g2int));
+      *igds=ligds;
+
+      gbit(cgrib,ligds+0,*iofst,8);     // Get source of Grid def.
+      *iofst=*iofst+8;
+      gbit(cgrib,ligds+1,*iofst,32);    // Get number of grid pts.
+      *iofst=*iofst+32;
+      gbit(cgrib,ligds+2,*iofst,8);     // Get num octets for opt. list
+      *iofst=*iofst+8;
+      gbit(cgrib,ligds+3,*iofst,8);     // Get interpret. for opt. list
+      *iofst=*iofst+8;
+      gbit(cgrib,ligds+4,*iofst,16);    // Get Grid Def Template num.
+      *iofst=*iofst+16;
+
+      if (ligds[4] != 65535) {
+        //   Get Grid Definition Template
+        mapgrid=getgridtemplate(ligds[4]);
+        if (mapgrid == 0) {         // undefined template
+          ierr=5;
+          return(ierr);
+        }
+        *mapgridlen=mapgrid->maplen;
+        //
+        //   Unpack each value into array igdstmpl from the
+        //   the appropriate number of octets, which are specified in
+        //   corresponding entries in array mapgrid.
+        //
+        if (*mapgridlen > 0) {
+           ligdstmpl=0;
+           ligdstmpl=(g2int *)calloc(*mapgridlen,sizeof(g2int));
+           if (ligdstmpl == 0) {
+              ierr=6;
+              *mapgridlen=0;
+              *igdstmpl=0;    //NULL
+              if( mapgrid != 0 ) free(mapgrid);
+              return(ierr);
+           }
+           else {
+              *igdstmpl=ligdstmpl;
+           }
+        }
+        ibyttem=0;
+        for (i=0;i<*mapgridlen;i++) {
+          nbits=abs(mapgrid->map[i])*8;
+          if ( mapgrid->map[i] >= 0 ) {
+            gbit(cgrib,ligdstmpl+i,*iofst,nbits);
+          }
+          else {
+            gbit(cgrib,&isign,*iofst,1);
+            gbit(cgrib,ligdstmpl+i,*iofst+1,nbits-1);
+            if (isign == 1) ligdstmpl[i]=-1*ligdstmpl[i];
+          }
+          *iofst=*iofst+nbits;
+          ibyttem=ibyttem+abs(mapgrid->map[i]);
+        }
+        //
+        //   Check to see if the Grid Definition Template needs to be
+        //   extended.
+        //   The number of values in a specific template may vary
+        //   depending on data specified in the "static" part of the
+        //   template.
+        //
+        if ( mapgrid->needext == 1 ) {
+          free(mapgrid);
+          mapgrid=extgridtemplate(ligds[4],ligdstmpl);
+          //   Unpack the rest of the Grid Definition Template
+          newlen=mapgrid->maplen+mapgrid->extlen;
+          ligdstmpl=(g2int *)realloc(ligdstmpl,newlen*sizeof(g2int));
+          *igdstmpl=ligdstmpl;
+          j=0;
+          for (i=*mapgridlen;i<newlen;i++) {
+            nbits=abs(mapgrid->ext[j])*8;
+            if ( mapgrid->ext[j] >= 0 ) {
+              gbit(cgrib,ligdstmpl+i,*iofst,nbits);
+            }
+            else {
+              gbit(cgrib,&isign,*iofst,1);
+              gbit(cgrib,ligdstmpl+i,*iofst+1,nbits-1);
+              if (isign == 1) ligdstmpl[i]=-1*ligdstmpl[i];
+            }
+            *iofst=*iofst+nbits;
+            ibyttem=ibyttem+abs(mapgrid->ext[j]);
+            j++;
+          }
+          *mapgridlen=newlen;
+        }
+        if( mapgrid->ext != 0 ) free(mapgrid->ext);
+        if( mapgrid != 0 ) free(mapgrid);
+      }
+      else {              // No Grid Definition Template
+        *mapgridlen=0;
+        *igdstmpl=0;
+      }
+      //
+      //   Unpack optional list of numbers defining number of points
+      //   in each row or column, if included.  This is used for non regular
+      //   grids.
+      //
+      if ( ligds[2] != 0 ) {
+         nbits=ligds[2]*8;
+         *idefnum=(lensec-14-ibyttem)/ligds[2];
+         if (*idefnum > 0) lideflist=(g2int *)calloc(*idefnum,sizeof(g2int));
+         if (lideflist == 0) {
+            ierr=6;
+            *idefnum=0;
+            *ideflist=0;   //NULL
+            return(ierr);
+         }
+         else {
+            *ideflist=lideflist;
+         }
+         gbits(cgrib,lideflist,*iofst,nbits,0,*idefnum);
+         *iofst=*iofst+(nbits*(*idefnum));
+      }
+      else {
+         *idefnum=0;
+         *ideflist=0;    // NULL
+      }
+      
+      return(ierr);    // End of Section 3 processing
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack4.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack4.c
new file mode 100755
index 0000000..bc0cd00
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack4.c
@@ -0,0 +1,184 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+
+g2int g2_unpack4(unsigned char *cgrib,g2int *iofst,g2int *ipdsnum,g2int **ipdstmpl,
+               g2int *mappdslen,g2float **coordlist,g2int *numcoord)
+////$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_unpack4 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-31
+//
+// ABSTRACT: This subroutine unpacks Section 4 (Product Definition Section)
+//           as defined in GRIB Edition 2.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-31  Gilbert
+//
+// USAGE:    int g2_unpack4(unsigned char *cgrib,g2int *iofst,g2int *ipdsnum,
+//                          g2int **ipdstmpl,g2int *mappdslen,
+//                          g2float **coordlist,g2int *numcoord)
+//   INPUT ARGUMENTS:
+//     cgrib    - Char array containing Section 4 of the GRIB2 message
+//     iofst    - Bit offset of the beginning of Section 4 in cgrib.
+//
+//   OUTPUT ARGUMENTS:      
+//     iofst    - Bit offset of the end of Section 4, returned.
+//     ipdsnum  - Product Definition Template Number ( see Code Table 4.0)
+//     ipdstmpl - Pointer to integer array containing the data values for 
+//                the specified Product Definition
+//                Template ( N=ipdsnum ).  Each element of this integer
+//                array contains an entry (in the order specified) of Product
+//                Defintion Template 4.N
+//     mappdslen- Number of elements in ipdstmpl[].  i.e. number of entries
+//                in Product Defintion Template 4.N  ( N=ipdsnum ).
+//     coordlist- Pointer to real array containing floating point values 
+//                intended to document
+//                the vertical discretisation associated to model data
+//                on hybrid coordinate vertical levels.  (part of Section 4)
+//     numcoord - number of values in array coordlist.
+//
+//   RETURN VALUES:
+//     ierr     - Error return code.
+//                0 = no error
+//                2 = Not section 4
+//                5 = "GRIB" message contains an undefined Product Definition
+//                    Template.
+//                6 = memory allocation error
+//
+// REMARKS: 
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$//
+{
+
+      g2int ierr,needext,i,j,nbits,isecnum;
+      g2int lensec,isign,newlen;
+      g2int *coordieee;
+      g2int *lipdstmpl=0;
+      g2float *lcoordlist;
+      template *mappds;
+
+      ierr=0;
+      *ipdstmpl=0;    // NULL
+      *coordlist=0;    // NULL
+
+      gbit(cgrib,&lensec,*iofst,32);        // Get Length of Section
+      *iofst=*iofst+32;
+      gbit(cgrib,&isecnum,*iofst,8);         // Get Section Number
+      *iofst=*iofst+8;
+
+      if ( isecnum != 4 ) {
+         ierr=2;
+         *numcoord=0;
+         *mappdslen=0;
+        // fprintf(stderr,"g2_unpack4: Not Section 4 data.\n");
+         return(ierr);
+      }
+
+      gbit(cgrib,numcoord,*iofst,16);    // Get num of coordinate values
+      *iofst=*iofst+16;
+      gbit(cgrib,ipdsnum,*iofst,16);    // Get Prod. Def Template num.
+      *iofst=*iofst+16;
+
+      //   Get Product Definition Template
+      mappds=getpdstemplate(*ipdsnum);
+      if (mappds == 0) {       // undefine template
+        ierr=5;
+        *mappdslen=0;
+        return(ierr);
+      }
+      *mappdslen=mappds->maplen;
+      needext=mappds->needext;
+      //
+      //   Unpack each value into array ipdstmpl from the
+      //   the appropriate number of octets, which are specified in
+      //   corresponding entries in array mappds.
+      //
+      if (*mappdslen > 0) lipdstmpl=(g2int *)calloc(*mappdslen,sizeof(g2int));
+      if (lipdstmpl == 0) {
+         ierr=6;
+         *mappdslen=0;
+         *ipdstmpl=0;     //NULL
+         if ( mappds != 0 ) free(mappds);
+         return(ierr);
+      }
+      else {
+         *ipdstmpl=lipdstmpl;
+      }
+      for (i=0;i<mappds->maplen;i++) {
+        nbits=abs(mappds->map[i])*8;
+        if ( mappds->map[i] >= 0 ) {
+          gbit(cgrib,lipdstmpl+i,*iofst,nbits);
+        }
+        else {
+          gbit(cgrib,&isign,*iofst,1);
+          gbit(cgrib,lipdstmpl+i,*iofst+1,nbits-1);
+          if (isign == 1) lipdstmpl[i]=-1*lipdstmpl[i];
+        }
+        *iofst=*iofst+nbits;
+      }
+      //
+      //   Check to see if the Product Definition Template needs to be
+      //   extended.
+      //   The number of values in a specific template may vary
+      //   depending on data specified in the "static" part of the
+      //   template.
+      //
+      if ( needext ==1 ) {
+        free(mappds);
+        mappds=extpdstemplate(*ipdsnum,lipdstmpl);
+        newlen=mappds->maplen+mappds->extlen;
+        lipdstmpl=(g2int *)realloc(lipdstmpl,newlen*sizeof(g2int));
+        *ipdstmpl=lipdstmpl;
+        //   Unpack the rest of the Product Definition Template
+        j=0;
+        for (i=*mappdslen;i<newlen;i++) {
+          nbits=abs(mappds->ext[j])*8;
+          if ( mappds->ext[j] >= 0 ) {
+            gbit(cgrib,lipdstmpl+i,*iofst,nbits);
+          }
+          else {
+            gbit(cgrib,&isign,*iofst,1);
+            gbit(cgrib,lipdstmpl+i,*iofst+1,nbits-1);
+            if (isign == 1) lipdstmpl[i]=-1*lipdstmpl[i];
+          }
+          *iofst=*iofst+nbits;
+          j++;
+        }
+        *mappdslen=newlen;
+      }
+      if( mappds->ext != 0 ) free(mappds->ext);
+      if( mappds != 0 ) free(mappds);
+      //
+      //   Get Optional list of vertical coordinate values
+      //   after the Product Definition Template, if necessary.
+      //
+      *coordlist=0;    // NULL
+      if ( *numcoord != 0 ) {
+         coordieee=(g2int *)calloc(*numcoord,sizeof(g2int));
+         lcoordlist=(g2float *)calloc(*numcoord,sizeof(g2float));
+         if (coordieee == 0 || lcoordlist == 0) {
+            ierr=6;
+            *numcoord=0;
+            *coordlist=0;    // NULL
+            if( coordieee != 0 ) free(coordieee);
+            if( lcoordlist != 0 ) free(lcoordlist);
+            return(ierr);
+         }
+         else {
+            *coordlist=lcoordlist;
+         }
+        gbits(cgrib,coordieee,*iofst,32,0,*numcoord);
+        rdieee(coordieee,*coordlist,*numcoord);
+        free(coordieee);
+        *iofst=*iofst+(32*(*numcoord));
+      }
+      
+      return(ierr);    // End of Section 4 processing
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack5.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack5.c
new file mode 100755
index 0000000..7c87285
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack5.c
@@ -0,0 +1,151 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+
+g2int g2_unpack5(unsigned char *cgrib,g2int *iofst,g2int *ndpts,g2int *idrsnum,
+               g2int **idrstmpl,g2int *mapdrslen)
+////$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_unpack5 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-31
+//
+// ABSTRACT: This subroutine unpacks Section 5 (Data Representation Section)
+//           as defined in GRIB Edition 2.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-31  Gilbert
+//
+// USAGE:    int g2_unpack5(unsigned char *cgrib,g2int *iofst,g2int *ndpts,
+//                          g2int *idrsnum,g2int **idrstmpl,g2int *mapdrslen)
+//   INPUT ARGUMENTS:
+//     cgrib    - char array containing Section 5 of the GRIB2 message
+//     iofst    - Bit offset for the beginning of Section 5 in cgrib.
+//
+//   OUTPUT ARGUMENTS:      
+//     iofst    - Bit offset at the end of Section 5, returned.
+//     ndpts    - Number of data points unpacked and returned.
+//     idrsnum  - Data Representation Template Number ( see Code Table 5.0)
+//     idrstmpl - Pointer to an integer array containing the data values for 
+//                the specified Data Representation
+//                Template ( N=idrsnum ).  Each element of this integer
+//                array contains an entry (in the order specified) of Data
+//                Representation Template 5.N
+//     mapdrslen- Number of elements in idrstmpl[].  i.e. number of entries
+//                in Data Representation Template 5.N  ( N=idrsnum ).
+//
+//   RETURN VALUES:
+//     ierr     - Error return code.
+//                0 = no error
+//                2 = Not Section 5
+//                6 = memory allocation error
+//                7 = "GRIB" message contains an undefined Data
+//                    Representation Template.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$//
+{
+      g2int ierr,needext,i,j,nbits,isecnum;
+      g2int lensec,isign,newlen;
+      g2int *lidrstmpl=0;
+      template *mapdrs;
+
+      ierr=0;
+      *idrstmpl=0;       //NULL
+
+      gbit(cgrib,&lensec,*iofst,32);        // Get Length of Section
+      *iofst=*iofst+32;
+      gbit(cgrib,&isecnum,*iofst,8);         // Get Section Number
+      *iofst=*iofst+8;
+
+      if ( isecnum != 5 ) {
+         ierr=2;
+         *ndpts=0;
+         *mapdrslen=0;
+        // fprintf(stderr,"g2_unpack5: Not Section 5 data.\n");
+         return(ierr);
+      }
+
+      gbit(cgrib,ndpts,*iofst,32);    // Get num of data points
+      *iofst=*iofst+32;
+      gbit(cgrib,idrsnum,*iofst,16);     // Get Data Rep Template Num.
+      *iofst=*iofst+16;
+
+      //   Gen Data Representation Template
+      mapdrs=getdrstemplate(*idrsnum);
+      if (mapdrs == 0) {
+        ierr=7;
+        *mapdrslen=0;
+        return(ierr);
+      }
+      *mapdrslen=mapdrs->maplen;
+      needext=mapdrs->needext;
+      //
+      //   Unpack each value into array ipdstmpl from the
+      //   the appropriate number of octets, which are specified in
+      //   corresponding entries in array mapdrs.
+      //
+      if (*mapdrslen > 0) lidrstmpl=(g2int *)calloc(*mapdrslen,sizeof(g2int));
+      if (lidrstmpl == 0) {
+         ierr=6;
+         *mapdrslen=0;
+         *idrstmpl=0;     //NULL
+         if ( mapdrs != 0 ) free(mapdrs);
+         return(ierr);
+      }
+      else {
+         *idrstmpl=lidrstmpl;
+      }
+      for (i=0;i<mapdrs->maplen;i++) {
+        nbits=abs(mapdrs->map[i])*8;
+        if ( mapdrs->map[i] >= 0 ) {
+          gbit(cgrib,lidrstmpl+i,*iofst,nbits);
+        }
+        else {
+          gbit(cgrib,&isign,*iofst,1);
+          gbit(cgrib,lidrstmpl+i,*iofst+1,nbits-1);
+          if (isign == 1) lidrstmpl[i]=-1*lidrstmpl[i];
+        }
+        *iofst=*iofst+nbits;
+      }
+      //
+      //   Check to see if the Data Representation Template needs to be
+      //   extended.
+      //   The number of values in a specific template may vary
+      //   depending on data specified in the "static" part of the
+      //   template.
+      //
+      if ( needext == 1 ) {
+        free(mapdrs);
+        mapdrs=extdrstemplate(*idrsnum,lidrstmpl);
+        newlen=mapdrs->maplen+mapdrs->extlen;
+        lidrstmpl=(g2int *)realloc(lidrstmpl,newlen*sizeof(g2int));
+        *idrstmpl=lidrstmpl;
+        //   Unpack the rest of the Data Representation Template
+        j=0;
+        for (i=*mapdrslen;i<newlen;i++) {
+          nbits=abs(mapdrs->ext[j])*8;
+          if ( mapdrs->ext[j] >= 0 ) {
+            gbit(cgrib,lidrstmpl+i,*iofst,nbits);
+          }
+          else {
+            gbit(cgrib,&isign,*iofst,1);
+            gbit(cgrib,lidrstmpl+i,*iofst+1,nbits-1);
+            if (isign == 1) lidrstmpl[i]=-1*lidrstmpl[i];
+          }
+          *iofst=*iofst+nbits;
+          j++;
+        }
+        *mapdrslen=newlen;
+      }
+      if( mapdrs->ext != 0 ) free(mapdrs->ext);
+      if( mapdrs != 0 ) free(mapdrs);
+
+      return(ierr);    // End of Section 5 processing
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack6.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack6.c
new file mode 100755
index 0000000..9f6da7e
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack6.c
@@ -0,0 +1,97 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+g2int g2_unpack6(unsigned char *cgrib,g2int *iofst,g2int ngpts,g2int *ibmap,
+               g2int **bmap)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_unpack6 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-31
+//
+// ABSTRACT: This subroutine unpacks Section 6 (Bit-Map Section)
+//           as defined in GRIB Edition 2.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-31  Gilbert
+//
+// USAGE:    int g2_unpack6(unsigned char *cgrib,g2int *iofst,g2int ngpts,
+//                          g2int *ibmap,g2int **bmap)
+//   INPUT ARGUMENTS:
+//     cgrib    - char array containing Section 6 of the GRIB2 message
+//     iofst    - Bit offset of the beginning of Section 6 in cgrib.
+//     ngpts    - Number of grid points specified in the bit-map
+//
+//   OUTPUT ARGUMENTS:      
+//     iofst    - Bit offset at the end of Section 6, returned.
+//     ibmap    - Bitmap indicator ( see Code Table 6.0 )
+//                0 = bitmap applies and is included in Section 6.
+//                1-253 = Predefined bitmap applies
+//                254 = Previously defined bitmap applies to this field
+//                255 = Bit map does not apply to this product.
+//     bmap     - Pointer to an integer array containing decoded bitmap. 
+//                ( if ibmap=0 )
+//
+//   RETURN VALUES:
+//     ierr     - Error return code.
+//                0 = no error
+//                2 = Not Section 6
+//                4 = Unrecognized pre-defined bit-map.
+//                6 = memory allocation error
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:
+//
+//$$$//
+{
+      g2int j,ierr,isecnum;
+      g2int *lbmap=0;
+      g2int *intbmap;
+
+      ierr=0;
+      *bmap=0;    //NULL
+
+      *iofst=*iofst+32;    // skip Length of Section
+      gbit(cgrib,&isecnum,*iofst,8);         // Get Section Number
+      *iofst=*iofst+8; 
+
+      if ( isecnum != 6 ) {
+         ierr=2;
+         fprintf(stderr,"g2_unpack6: Not Section 6 data.\n");
+         return(ierr);
+      }
+
+      gbit(cgrib,ibmap,*iofst,8);    // Get bit-map indicator
+      *iofst=*iofst+8;
+
+      if (*ibmap == 0) {               // Unpack bitmap
+         if (ngpts > 0) lbmap=(g2int *)calloc(ngpts,sizeof(g2int));
+         if (lbmap == 0) {
+            ierr=6;
+            return(ierr);
+         }
+         else {
+            *bmap=lbmap;
+         }
+         intbmap=(g2int *)calloc(ngpts,sizeof(g2int));  
+         gbits(cgrib,intbmap,*iofst,1,0,ngpts);
+         *iofst=*iofst+ngpts;
+         for (j=0;j<ngpts;j++) {
+           lbmap[j]=(g2int)intbmap[j];
+         }
+         free(intbmap);
+//      else if (*ibmap.eq.254)               ! Use previous bitmap
+//        return(ierr);
+//      else if (*ibmap.eq.255)               ! No bitmap in message
+//        bmap(1:ngpts)=.true.
+//      else {
+//        print *,'gf_unpack6: Predefined bitmap ',*ibmap,' not recognized.'
+//        ierr=4;
+      }
+      
+      return(ierr);    // End of Section 6 processing
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack7.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack7.c
new file mode 100755
index 0000000..e291a87
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/g2_unpack7.c
@@ -0,0 +1,151 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
+#include <string.h>
+#include "grib2.h"
+
+g2int simunpack(unsigned char *,g2int *, g2int,g2float *);
+int comunpack(unsigned char *,g2int,g2int,g2int *,g2int,g2float *);
+g2int specunpack(unsigned char *,g2int *,g2int,g2int,g2int, g2int, g2float *);
+#ifdef USE_PNG
+  g2int pngunpack(unsigned char *,g2int,g2int *,g2int, g2float *);
+#endif  /* USE_PNG */
+#ifdef USE_JPEG2000
+  g2int jpcunpack(unsigned char *,g2int,g2int *,g2int, g2float *);
+#endif  /* USE_JPEG2000 */
+
+g2int g2_unpack7(unsigned char *cgrib,g2int *iofst,g2int igdsnum,g2int *igdstmpl,
+               g2int idrsnum,g2int *idrstmpl,g2int ndpts,g2float **fld)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    g2_unpack7 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-31
+//
+// ABSTRACT: This subroutine unpacks Section 7 (Data Section)
+//           as defined in GRIB Edition 2.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-31  Gilbert
+// 2002-12-20  Gilbert - Added GDT info to arguments
+//                       and added 5.51 processing.
+// 2003-08-29  Gilbert  - Added support for new templates using
+//                        PNG and JPEG2000 algorithms/templates.
+// 2004-11-29  Gilbert  - JPEG2000 now allowed to use WMO Template no. 5.40
+//                        PNG now allowed to use WMO Template no. 5.41
+// 2004-12-16  Taylor   - Added check on comunpack return code.
+//
+// USAGE:    int g2_unpack7(unsigned char *cgrib,g2int *iofst,g2int igdsnum,
+//                          g2int *igdstmpl, g2int idrsnum,
+//                          g2int *idrstmpl, g2int ndpts,g2float **fld)
+//   INPUT ARGUMENTS:
+//     cgrib    - char array containing Section 7 of the GRIB2 message
+//     iofst    - Bit offset of the beginning of Section 7 in cgrib.
+//     igdsnum  - Grid Definition Template Number ( see Code Table 3.0)
+//                ( Only used for DRS Template 5.51 )
+//     igdstmpl - Pointer to an integer array containing the data values for
+//                the specified Grid Definition
+//                Template ( N=igdsnum ).  Each element of this integer
+//                array contains an entry (in the order specified) of Grid
+//                Definition Template 3.N
+//                ( Only used for DRS Template 5.51 )
+//     idrsnum  - Data Representation Template Number ( see Code Table 5.0)
+//     idrstmpl - Pointer to an integer array containing the data values for
+//                the specified Data Representation
+//                Template ( N=idrsnum ).  Each element of this integer
+//                array contains an entry (in the order specified) of Data
+//                Representation Template 5.N
+//     ndpts    - Number of data points unpacked and returned.
+//
+//   OUTPUT ARGUMENTS:      
+//     iofst    - Bit offset at the end of Section 7, returned.
+//     fld      - Pointer to a float array containing the unpacked data field.
+//
+//   RETURN VALUES:
+//     ierr     - Error return code.
+//                0 = no error
+//                2 = Not section 7
+//                4 = Unrecognized Data Representation Template
+//                5 = need one of GDT 3.50 through 3.53 to decode DRT 5.51
+//                6 = memory allocation error
+//                7 = corrupt section 7.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:
+//
+//$$$//
+{
+      g2int ierr,isecnum;
+      g2int ipos,lensec;
+      g2float *lfld;
+
+      ierr=0;
+      *fld=0;     //NULL
+
+      gbit(cgrib,&lensec,*iofst,32);        // Get Length of Section
+      *iofst=*iofst+32;    
+      gbit(cgrib,&isecnum,*iofst,8);         // Get Section Number
+      *iofst=*iofst+8;
+
+      if ( isecnum != 7 ) {
+         ierr=2;
+         //fprintf(stderr,"g2_unpack7: Not Section 7 data.\n");
+         return(ierr);
+      }
+
+      ipos=(*iofst/8);
+      lfld=(g2float *)calloc(ndpts,sizeof(g2float));
+      if (lfld == 0) {
+         ierr=6;
+         return(ierr);
+      }
+      else {
+         *fld=lfld;
+      }
+
+      if (idrsnum == 0) 
+        simunpack(cgrib+ipos,idrstmpl,ndpts,lfld);
+      else if (idrsnum == 2 || idrsnum == 3) {
+        if (comunpack(cgrib+ipos,lensec,idrsnum,idrstmpl,ndpts,lfld) != 0) {
+          return 7;
+        }
+      }
+      else if (idrsnum == 50) {            // Spectral Simple
+        simunpack(cgrib+ipos,idrstmpl,ndpts-1,lfld+1);
+        rdieee(idrstmpl+4,lfld+0,1);
+      }
+      else if (idrsnum == 51)              //  Spectral complex
+        if ( igdsnum>=50 && igdsnum <=53 ) 
+          specunpack(cgrib+ipos,idrstmpl,ndpts,igdstmpl[0],igdstmpl[2],igdstmpl[2],lfld);
+        else {
+          fprintf(stderr,"g2_unpack7: Cannot use GDT 3.%d to unpack Data Section 5.51.\n",(int)igdsnum);
+          ierr=5;
+          if ( lfld != 0 ) free(lfld);
+          *fld=0;     //NULL
+          return(ierr);
+        }
+#ifdef USE_JPEG2000
+      else if (idrsnum == 40 || idrsnum == 40000) {
+        jpcunpack(cgrib+ipos,lensec-5,idrstmpl,ndpts,lfld);
+        }
+#endif  /* USE_JPEG2000 */
+#ifdef USE_PNG
+      else if (idrsnum == 41 || idrsnum == 40010) {
+        pngunpack(cgrib+ipos,lensec-5,idrstmpl,ndpts,lfld);
+        }
+#endif  /* USE_PNG */
+      else {
+        fprintf(stderr,"g2_unpack7: Data Representation Template 5.%d not yet implemented.\n",(int)idrsnum);
+        ierr=4;
+        if ( lfld != 0 ) free(lfld);
+        *fld=0;     //NULL
+        return(ierr);
+      }
+
+      *iofst=*iofst+(8*lensec);
+      
+      return(ierr);    // End of Section 7 processing
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gbits.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gbits.c
new file mode 100755
index 0000000..34709da
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gbits.c
@@ -0,0 +1,124 @@
+#include "grib2.h"
+
+void gbit(unsigned char *in,g2int *iout,g2int iskip,g2int nbyte)
+{
+      gbits(in,iout,iskip,nbyte,(g2int)0,(g2int)1);
+}
+
+void sbit(unsigned char *out,g2int *in,g2int iskip,g2int nbyte)
+{
+      sbits(out,in,iskip,nbyte,(g2int)0,(g2int)1);
+}
+
+
+void gbits(unsigned char *in,g2int *iout,g2int iskip,g2int nbyte,g2int nskip,
+           g2int n)
+/*          Get bits - unpack bits:  Extract arbitrary size values from a
+/          packed bit string, right justifying each value in the unpacked
+/          iout array.
+/           *in    = pointer to character array input
+/           *iout  = pointer to unpacked array output
+/            iskip = initial number of bits to skip
+/            nbyte = number of bits to take
+/            nskip = additional number of bits to skip on each iteration
+/            n     = number of iterations
+/ v1.1
+*/
+{
+      g2int i,tbit,bitcnt,ibit,itmp;
+      g2int nbit,index;
+      static g2int ones[]={1,3,7,15,31,63,127,255};
+
+//     nbit is the start position of the field in bits
+      nbit = iskip;
+      for (i=0;i<n;i++) {
+         bitcnt = nbyte;
+         index=nbit/8;
+         ibit=nbit%8;
+         nbit = nbit + nbyte + nskip;
+
+//        first byte
+         tbit= ( bitcnt < (8-ibit) ) ? bitcnt : 8-ibit;  // find min
+         itmp = (int)*(in+index) & ones[7-ibit];
+         if (tbit != 8-ibit) itmp >>= (8-ibit-tbit);
+         index++;
+         bitcnt = bitcnt - tbit;
+
+//        now transfer whole bytes
+         while (bitcnt >= 8) {
+             itmp = itmp<<8 | (int)*(in+index);
+             bitcnt = bitcnt - 8;
+             index++;
+         }
+
+//        get data from last byte
+         if (bitcnt > 0) {
+             itmp = ( itmp << bitcnt ) | ( ((int)*(in+index) >> (8-bitcnt)) & ones[bitcnt-1] );
+         }
+
+         *(iout+i) = itmp;
+      }
+}
+
+
+void sbits(unsigned char *out,g2int *in,g2int iskip,g2int nbyte,g2int nskip,
+           g2int n)
+/*C          Store bits - pack bits:  Put arbitrary size values into a
+/          packed bit string, taking the low order bits from each value
+/          in the unpacked array.
+/           *iout  = pointer to packed array output
+/           *in    = pointer to unpacked array input
+/            iskip = initial number of bits to skip
+/            nbyte = number of bits to pack
+/            nskip = additional number of bits to skip on each iteration
+/            n     = number of iterations
+/ v1.1
+*/
+{
+      g2int i,bitcnt,tbit,ibit,itmp,imask,itmp2,itmp3;
+      g2int nbit,index;
+      static g2int ones[]={1,3,7,15,31,63,127,255};
+
+//     number bits from zero to ...
+//     nbit is the last bit of the field to be filled
+
+      nbit = iskip + nbyte - 1;
+      for (i=0;i<n;i++) {
+         itmp = *(in+i);
+         bitcnt = nbyte;
+         index=nbit/8;
+         ibit=nbit%8;
+         nbit = nbit + nbyte + nskip;
+
+//        make byte aligned 
+         if (ibit != 7) {
+             tbit= ( bitcnt < (ibit+1) ) ? bitcnt : ibit+1;  // find min
+             imask = ones[tbit-1] << (7-ibit);
+             itmp2 = (itmp << (7-ibit)) & imask;
+             itmp3 = (int)*(out+index) & (255-imask);
+             out[index] = (unsigned char)(itmp2 | itmp3);
+             bitcnt = bitcnt - tbit;
+             itmp = itmp >> tbit;
+             index--;
+         }
+
+//        now byte aligned
+
+//        do by bytes
+         while (bitcnt >= 8) {
+             out[index] = (unsigned char)(itmp & 255);
+             itmp = itmp >> 8;
+             bitcnt = bitcnt - 8;
+             index--;
+         }
+
+//        do last byte
+
+         if (bitcnt > 0) {
+             itmp2 = itmp & ones[bitcnt-1];
+             itmp3 = (int)*(out+index) & (255-ones[bitcnt-1]);
+             out[index] = (unsigned char)(itmp2 | itmp3);
+         }
+      }
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/getdim.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/getdim.c
new file mode 100644
index 0000000..c86228f
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/getdim.c
@@ -0,0 +1,127 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+g2int g2_unpack3(unsigned char *,g2int *,g2int **,g2int **,
+                         g2int *,g2int **,g2int *);
+
+g2int getdim(unsigned char *csec3,g2int *width,g2int *height,g2int *iscan)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    getdim 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-12-11
+//
+// ABSTRACT: This subroutine returns the dimensions and scanning mode of 
+//   a grid definition packed in GRIB2 Grid Definition Section 3 format.
+//
+// PROGRAM HISTORY LOG:
+// 2002-12-11  Gilbert
+//
+// USAGE:    int getdim(unsigned char *csec3,g2int *width,
+//                      g2int *height, g2int *iscan)
+//   INPUT ARGUMENT LIST:
+//     csec3    - Character array that contains the packed GRIB2 GDS
+//
+//   OUTPUT ARGUMENT LIST:      
+//     width    - x (or i) dimension of the grid.
+//     height   - y (or j) dimension of the grid.
+//     iscan    - Scanning mode ( see Code Table 3.4 )
+//
+// REMARKS:  Returns width and height set to zero, if grid template
+//           not recognized.
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$
+{
+    
+      g2int  *igdstmpl,*list_opt;
+      g2int  *igds;
+      g2int  iofst,igdtlen,num_opt,jerr;
+
+      igdstmpl=0;
+      list_opt=0;
+      igds=0;
+      iofst=0;       // set offset to beginning of section
+      jerr= g2_unpack3(csec3,&iofst,&igds,&igdstmpl,
+                       &igdtlen,&list_opt,&num_opt);
+      if (jerr == 0) {
+         switch ( igds[4] )     //  Template number
+         {
+           case 0:    // Lat/Lon
+           case 1:
+           case 2:
+           case 3:
+           {
+              *width=igdstmpl[7];
+              *height=igdstmpl[8];
+              *iscan=igdstmpl[18];
+              break;
+           }
+           case 10:   // Mercator
+           {
+              *width=igdstmpl[7];
+              *height=igdstmpl[8];
+              *iscan=igdstmpl[15];
+              break;
+           }
+           case 20:   // Polar Stereographic
+           {
+              *width=igdstmpl[7];
+              *height=igdstmpl[8];
+              *iscan=igdstmpl[17];
+              break;
+           }
+           case 30:   // Lambert Conformal
+           {
+              *width=igdstmpl[7];
+              *height=igdstmpl[8];
+              *iscan=igdstmpl[17];
+              break;
+           }
+           case 40:   // Gaussian
+           case 41:
+           case 42:
+           case 43:
+           {
+              *width=igdstmpl[7];
+              *height=igdstmpl[8];
+              *iscan=igdstmpl[18];
+              break;
+           }
+           case 90:   // Space View/Orthographic
+           {
+              *width=igdstmpl[7];
+              *height=igdstmpl[8];
+              *iscan=igdstmpl[16];
+              break;
+           }
+           case 110:   // Equatorial Azimuthal
+           {
+              *width=igdstmpl[7];
+              *height=igdstmpl[8];
+              *iscan=igdstmpl[15];
+              break;
+           }
+           default:
+           {
+              *width=0;
+              *height=0;
+              *iscan=0;
+              break;
+           }
+         }  // end switch
+      }
+      else {
+         *width=0;
+         *height=0;
+      }
+
+      if (igds != 0) free(igds);
+      if (igdstmpl != 0) free(igdstmpl);
+      if (list_opt != 0) free(list_opt);
+
+      return 0;
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/getpoly.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/getpoly.c
new file mode 100644
index 0000000..9e2a5a6
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/getpoly.c
@@ -0,0 +1,80 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+g2int g2_unpack3(unsigned char *,g2int *,g2int **,g2int **,
+                         g2int *,g2int **,g2int *);
+
+g2int getpoly(unsigned char *csec3,g2int *jj,g2int *kk,g2int *mm)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    getpoly 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-12-11
+//
+// ABSTRACT: This subroutine returns the J, K, and M pentagonal resolution
+//   parameters specified in a GRIB Grid Definition Section used
+//   spherical harmonic coefficients using GDT 5.50 through 5.53
+//
+// PROGRAM HISTORY LOG:
+// 2002-12-11  Gilbert
+//
+// USAGE:    int getpoly(unsigned char *csec3,g2int *jj,g2int *kk,g2int *mm)
+//   INPUT ARGUMENTS:
+//     csec3    - Character array that contains the packed GRIB2 GDS
+//
+//   OUTPUT ARGUMENTS:      
+//         JJ   = J - pentagonal resolution parameter
+//         KK   = K - pentagonal resolution parameter
+//         MM   = M - pentagonal resolution parameter
+//
+// REMARKS:  Returns JJ, KK, and MM set to zero, if grid template
+//           not recognized.
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$
+{
+    
+      g2int   *igdstmpl,*list_opt;
+      g2int   *igds;
+      g2int   iofst,igdtlen,num_opt,jerr;
+
+      iofst=0;       // set offset to beginning of section
+      jerr=g2_unpack3(csec3,&iofst,&igds,&igdstmpl,
+                      &igdtlen,&list_opt,&num_opt);
+      if (jerr == 0) {
+         switch ( igds[4] )     //  Template number
+         {
+           case 50:     // Spherical harmonic coefficients
+           case 51:
+           case 52:
+           case 53:
+           {
+              *jj=igdstmpl[0];
+              *kk=igdstmpl[1];
+              *mm=igdstmpl[2];
+              break;
+           }
+           default:
+           {
+              *jj=0;
+              *kk=0;
+              *mm=0;
+              break;
+           }
+         }     // end switch
+      }
+      else {
+         *jj=0;
+         *kk=0;
+         *mm=0;
+      }
+        
+      if (igds != 0) free(igds);
+      if (igdstmpl != 0) free(igdstmpl);
+      if (list_opt != 0) free(list_opt);
+
+      return 0;
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/grib2.h b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/grib2.h
new file mode 100755
index 0000000..f4692ad
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/grib2.h
@@ -0,0 +1,251 @@
+#ifndef _grib2_H
+#define _grib2_H
+#include<stdio.h>
+
+#ifdef _SAGA_MSW
+extern double rint(double x);
+#endif
+
+#define G2_VERSION "g2clib-1.0.4"
+/*                .      .    .                                       .
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-25
+//
+//   Each element of structure gribfield is defined as:
+//   
+//   gribfield gfld;
+//
+//        gfld->version = GRIB edition number ( currently 2 )
+//        gfld->discipline = Message Discipline ( see Code Table 0.0 )
+//        gfld->idsect = Contains the entries in the Identification
+//                        Section ( Section 1 )
+//                        This element is a pointer to an array
+//                        that holds the data.
+//            gfld->idsect[0]  = Identification of originating Centre
+//                                    ( see Common Code Table C-1 )
+//                             7 - US National Weather Service
+//            gfld->idsect[1]  = Identification of originating Sub-centre
+//            gfld->idsect[2]  = GRIB Master Tables Version Number
+//                                    ( see Code Table 1.0 )
+//                             0 - Experimental
+//                             1 - Initial operational version number
+//            gfld->idsect[3]  = GRIB Local Tables Version Number
+//                                    ( see Code Table 1.1 )
+//                             0     - Local tables not used
+//                             1-254 - Number of local tables version used
+//            gfld->idsect[4]  = Significance of Reference Time (Code Table 1.2)
+//                             0 - Analysis
+//                             1 - Start of forecast
+//                             2 - Verifying time of forecast
+//                             3 - Observation time
+//            gfld->idsect[5]  = Year ( 4 digits )
+//            gfld->idsect[6]  = Month
+//            gfld->idsect[7)  = Day
+//            gfld->idsect[8]  = Hour
+//            gfld->idsect[9]  = Minute
+//            gfld->idsect[10]  = Second
+//            gfld->idsect[11]  = Production status of processed data
+//                                    ( see Code Table 1.3 )
+//                              0 - Operational products
+//                              1 - Operational test products
+//                              2 - Research products
+//                              3 - Re-analysis products
+//            gfld->idsect[12]  = Type of processed data ( see Code Table 1.4 )
+//                              0  - Analysis products
+//                              1  - Forecast products
+//                              2  - Analysis and forecast products
+//                              3  - Control forecast products
+//                              4  - Perturbed forecast products
+//                              5  - Control and perturbed forecast products
+//                              6  - Processed satellite observations
+//                              7  - Processed radar observations
+//        gfld->idsectlen = Number of elements in gfld->idsect[].
+//        gfld->local   = Pointer to character array containing contents
+//                       of Local Section 2, if included
+//        gfld->locallen = length of array gfld->local[]
+//        gfld->ifldnum = field number within GRIB message
+//        gfld->griddef = Source of grid definition (see Code Table 3.0)
+//                      0 - Specified in Code table 3.1
+//                      1 - Predetermined grid Defined by originating centre
+//        gfld->ngrdpts = Number of grid points in the defined grid.
+//        gfld->numoct_opt = Number of octets needed for each
+//                          additional grid points definition.
+//                          Used to define number of
+//                          points in each row ( or column ) for
+//                          non-regular grids.
+//                          = 0, if using regular grid.
+//        gfld->interp_opt = Interpretation of list for optional points
+//                          definition.  (Code Table 3.11)
+//        gfld->igdtnum = Grid Definition Template Number (Code Table 3.1)
+//        gfld->igdtmpl  = Contains the data values for the specified Grid
+//                         Definition Template ( NN=gfld->igdtnum ).  Each
+//                         element of this integer array contains an entry (in
+//                         the order specified) of Grid Defintion Template 3.NN
+//                         This element is a pointer to an array
+//                         that holds the data.
+//        gfld->igdtlen = Number of elements in gfld->igdtmpl[].  i.e. number of
+//                       entries in Grid Defintion Template 3.NN
+//                       ( NN=gfld->igdtnum ).
+//        gfld->list_opt  = (Used if gfld->numoct_opt .ne. 0)  This array
+//                          contains the number of grid points contained in
+//                          each row ( or column ).  (part of Section 3)
+//                          This element is a pointer to an array
+//                          that holds the data.  This pointer is nullified
+//                          if gfld->numoct_opt=0.
+//        gfld->num_opt = (Used if gfld->numoct_opt .ne. 0)  The number of entries
+//                       in array ideflist.  i.e. number of rows ( or columns )
+//                       for which optional grid points are defined.  This value
+//                       is set to zero, if gfld->numoct_opt=0.
+//        gfdl->ipdtnum = Product Definition Template Number (see Code Table 4.0)
+//        gfld->ipdtmpl  = Contains the data values for the specified Product
+//                         Definition Template ( N=gfdl->ipdtnum ).  Each element
+//                         of this integer array contains an entry (in the
+//                         order specified) of Product Defintion Template 4.N.
+//                         This element is a pointer to an array
+//                         that holds the data.
+//        gfld->ipdtlen = Number of elements in gfld->ipdtmpl[].  i.e. number of
+//                       entries in Product Defintion Template 4.N
+//                       ( N=gfdl->ipdtnum ).
+//        gfld->coord_list  = Real array containing floating point values
+//                            intended to document the vertical discretisation
+//                            associated to model data on hybrid coordinate
+//                            vertical levels.  (part of Section 4)
+//                            This element is a pointer to an array
+//                            that holds the data.
+//        gfld->num_coord = number of values in array gfld->coord_list[].
+//        gfld->ndpts = Number of data points unpacked and returned.
+//        gfld->idrtnum = Data Representation Template Number
+//                       ( see Code Table 5.0)
+//        gfld->idrtmpl  = Contains the data values for the specified Data
+//                         Representation Template ( N=gfld->idrtnum ).  Each
+//                         element of this integer array contains an entry
+//                         (in the order specified) of Product Defintion
+//                         Template 5.N.
+//                         This element is a pointer to an array
+//                         that holds the data.
+//        gfld->idrtlen = Number of elements in gfld->idrtmpl[].  i.e. number
+//                       of entries in Data Representation Template 5.N
+//                       ( N=gfld->idrtnum ).
+//        gfld->unpacked = logical value indicating whether the bitmap and
+//                        data values were unpacked.  If false,
+//                        gfld->bmap and gfld->fld pointers are nullified.
+//        gfld->expanded = Logical value indicating whether the data field 
+//                         was expanded to the grid in the case where a 
+//                         bit-map is present.  If true, the data points in
+//                         gfld->fld match the grid points and zeros were 
+//                         inserted at grid points where data was bit-mapped
+//                         out.  If false, the data values in gfld->fld were
+//                         not expanded to the grid and are just a consecutive
+//                         array of data points corresponding to each value of
+//                         "1" in gfld->bmap.
+//        gfld->ibmap = Bitmap indicator ( see Code Table 6.0 )
+//                     0 = bitmap applies and is included in Section 6.
+//                     1-253 = Predefined bitmap applies
+//                     254 = Previously defined bitmap applies to this field
+//                     255 = Bit map does not apply to this product.
+//        gfld->bmap  = integer array containing decoded bitmap,
+//                      if gfld->ibmap=0 or gfld->ibap=254.  Otherwise nullified.
+//                      This element is a pointer to an array
+//                      that holds the data.
+//        gfld->fld  = Array of gfld->ndpts unpacked data points.
+//                     This element is a pointer to an array
+//                     that holds the data.
+*/
+
+#ifdef __64BIT__
+typedef int g2int;
+typedef unsigned int g2intu;
+#else
+typedef long g2int;
+typedef unsigned long g2intu;
+#endif
+typedef float g2float;
+
+struct _template {
+   g2int type;           /* 3=Grid Defintion Template.                       */
+                         /* 4=Product Defintion Template.                    */
+                         /* 5=Data Representation Template.                  */
+   g2int num;            /* template number.                                 */
+   g2int maplen;         /* number of entries in the static part             */
+                         /*                    of the template.              */
+   g2int *map;           /* num of octets of each entry in the               */
+                         /*         static part of the template.             */
+   g2int needext;        /* indicates whether or not the template needs      */
+                         /*     to be extended.                              */
+   g2int extlen;         /* number of entries in the template extension.     */
+   g2int *ext;           /* num of octets of each entry in the extension     */
+                         /*                      part of the template.       */
+};
+
+typedef struct _template _template;
+
+#define template _template
+
+struct gribfield {
+   g2int   version,discipline;
+   g2int   *idsect;
+   g2int   idsectlen;
+   unsigned char *local;
+   g2int   locallen;
+   g2int   ifldnum;
+   g2int   griddef,ngrdpts;
+   g2int   numoct_opt,interp_opt,num_opt;
+   g2int   *list_opt;
+   g2int   igdtnum,igdtlen;
+   g2int   *igdtmpl;
+   g2int   ipdtnum,ipdtlen;
+   g2int   *ipdtmpl;
+   g2int   num_coord;
+   g2float *coord_list;
+   g2int   ndpts,idrtnum,idrtlen;
+   g2int   *idrtmpl;
+   g2int   unpacked;
+   g2int   expanded;
+   g2int   ibmap;
+   g2int   *bmap;
+   g2float *fld;
+};
+
+typedef struct gribfield gribfield;
+
+
+/*  Prototypes for unpacking API  */
+void seekgb(FILE *,g2int ,g2int ,g2int *,g2int *);
+g2int g2_info(unsigned char *,g2int *,g2int *,g2int *,g2int *);
+g2int g2_getfld(unsigned char *,g2int ,g2int ,g2int ,gribfield **);
+void g2_free(gribfield *);
+
+/*  Prototypes for packing API  */
+g2int g2_create(unsigned char *,g2int *,g2int *);
+g2int g2_addlocal(unsigned char *,unsigned char *,g2int );
+g2int g2_addgrid(unsigned char *,g2int *,g2int *,g2int *,g2int ); 
+g2int g2_addfield(unsigned char *,g2int ,g2int *,
+                       g2float *,g2int ,g2int ,g2int *,
+                       g2float *,g2int ,g2int ,g2int *);
+g2int g2_gribend(unsigned char *);
+
+/*  Prototypes for supporting routines  */
+extern double int_power(double, g2int );
+extern void mkieee(g2float *,g2int *,g2int);
+void rdieee(g2int *,g2float *,g2int );
+extern _template *getpdstemplate(g2int);
+extern _template *extpdstemplate(g2int,g2int *);
+extern _template *getdrstemplate(g2int);
+extern _template *extdrstemplate(g2int,g2int *);
+extern _template *getgridtemplate(g2int);
+extern _template *extgridtemplate(g2int,g2int *);
+extern void simpack(g2float *,g2int,g2int *,unsigned char *,g2int *);
+extern void compack(g2float *,g2int,g2int,g2int *,unsigned char *,g2int *);
+void misspack(g2float *,g2int ,g2int ,g2int *, unsigned char *, g2int *);
+void gbit(unsigned char *,g2int *,g2int ,g2int );
+void sbit(unsigned char *,g2int *,g2int ,g2int );
+void gbits(unsigned char *,g2int *,g2int ,g2int ,g2int ,g2int );
+void sbits(unsigned char *,g2int *,g2int ,g2int ,g2int ,g2int );
+
+int pack_gp(g2int *, g2int *, g2int *,
+            g2int *, g2int *, g2int *, g2int *, g2int *,
+            g2int *, g2int *, g2int *, g2int *,
+            g2int *, g2int *, g2int *, g2int *, g2int *,
+            g2int *, g2int *, g2int *);
+
+#endif  /*  _grib2_H  */
+
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gridtemplates.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gridtemplates.c
new file mode 100755
index 0000000..c04d344
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gridtemplates.c
@@ -0,0 +1,173 @@
+#include <stdlib.h>
+#include "grib2.h"
+#include "gridtemplates.h"
+
+g2int getgridindex(g2int number)
+/*!$$$  SUBPROGRAM DOCUMENTATION BLOCK
+!                .      .    .                                       .
+! SUBPROGRAM:    getgridindex
+!   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2001-06-28
+!
+! ABSTRACT: This function returns the index of specified Grid
+!   Definition Template 3.NN (NN=number) in array templates.
+!
+! PROGRAM HISTORY LOG:
+! 2001-06-28  Gilbert
+!
+! USAGE:    index=getgridindex(number)
+!   INPUT ARGUMENT LIST:
+!     number   - NN, indicating the number of the Grid Definition
+!                Template 3.NN that is being requested.
+!
+! RETURNS:  Index of GDT 3.NN in array templates, if template exists.
+!           = -1, otherwise.
+!
+! REMARKS: None
+!
+! ATTRIBUTES:
+!   LANGUAGE: C
+!   MACHINE:  IBM SP
+!
+!$$$*/
+{
+           g2int j,getgridindex=-1;
+
+           for (j=0;j<MAXGRIDTEMP;j++) {
+              if (number == templatesgrid[j].template_num) {
+                 getgridindex=j;
+                 return(getgridindex);
+              }
+           }
+
+           return(getgridindex);
+}
+
+template *getgridtemplate(g2int number)
+/*!$$$  SUBPROGRAM DOCUMENTATION BLOCK
+!                .      .    .                                       .
+! SUBPROGRAM:    getgridtemplate 
+!   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2000-05-09
+!
+! ABSTRACT: This subroutine returns grid template information for a 
+!   specified Grid Definition Template 3.NN.
+!   The number of entries in the template is returned along with a map
+!   of the number of octets occupied by each entry.  Also, a flag is
+!   returned to indicate whether the template would need to be extended.
+!
+! PROGRAM HISTORY LOG:
+! 2000-05-09  Gilbert
+!
+! USAGE:    template *getgridtemplate(number)
+!   INPUT ARGUMENT LIST:
+!     number   - NN, indicating the number of the Grid Definition 
+!                Template 3.NN that is being requested.
+!
+!   RETURN VALUE:
+!        - Pointer to the returned template struct.
+!          Returns NULL pointer, if template not found.
+!
+! REMARKS: None
+!
+! ATTRIBUTES:
+!   LANGUAGE: C
+!   MACHINE:  IBM SP
+!
+!$$$*/
+{
+           g2int index;
+           template *new;
+
+           index=getgridindex(number);
+
+           if (index != -1) {
+              new=(template *)malloc(sizeof(template));
+              new->type=3;
+              new->num=templatesgrid[index].template_num;
+              new->maplen=templatesgrid[index].mapgridlen;
+              new->needext=templatesgrid[index].needext;
+              new->map=(g2int *)templatesgrid[index].mapgrid;
+              new->extlen=0;
+              new->ext=0;        //NULL
+              return(new);
+           }
+           else {
+             printf("getgridtemplate: GDT Template 3.%d not defined.\n",(int)number);
+             return(0);        //NULL
+           }
+
+         return(0);        //NULL
+}
+
+
+template *extgridtemplate(g2int number,g2int *list)
+/*!$$$  SUBPROGRAM DOCUMENTATION BLOCK
+!                .      .    .                                       .
+! SUBPROGRAM:    extgridtemplate 
+!   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2000-05-09
+!
+! ABSTRACT: This subroutine generates the remaining octet map for a 
+!   given Grid Definition Template, if required.  Some Templates can 
+!   vary depending on data values given in an earlier part of the 
+!   Template, and it is necessary to know some of the earlier entry
+!   values to generate the full octet map of the Template.
+!
+! PROGRAM HISTORY LOG:
+! 2000-05-09  Gilbert
+!
+! USAGE:    CALL extgridtemplate(number,list)
+!   INPUT ARGUMENT LIST:
+!     number   - NN, indicating the number of the Grid Definition 
+!                Template 3.NN that is being requested.
+!     list()   - The list of values for each entry in 
+!                the Grid Definition Template.
+!
+!   RETURN VALUE:
+!        - Pointer to the returned template struct.
+!          Returns NULL pointer, if template not found.
+!
+! ATTRIBUTES:
+!   LANGUAGE: C
+!   MACHINE:  IBM SP
+!
+!$$$*/
+{
+           template *new;
+           g2int index,i;
+
+           index=getgridindex(number);
+           if (index == -1) return(0);
+
+           new=getgridtemplate(number);
+
+           if ( ! new->needext ) return(new);
+
+           if ( number == 120 ) {
+              new->extlen=list[1]*2;
+              new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+              for (i=0;i<new->extlen;i++) {
+                 if ( i%2 == 0 ) {
+                    new->ext[i]=2;
+                 }
+                 else {
+                    new->ext[i]=-2;
+                 }
+              }
+           }
+           else if ( number == 1000 ) {
+              new->extlen=list[19];
+              new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+              for (i=0;i<new->extlen;i++) {
+                 new->ext[i]=4;
+              }
+           }
+           else if ( number == 1200 ) {
+              new->extlen=list[15];
+              new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+              for (i=0;i<new->extlen;i++) {
+                 new->ext[i]=4;
+              }
+           }
+
+           return(new);
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gridtemplates.h b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gridtemplates.h
new file mode 100755
index 0000000..cf82c7c
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/gridtemplates.h
@@ -0,0 +1,96 @@
+#ifndef _gridtemplates_H
+#define _gridtemplates_H
+#include "grib2.h"
+
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2001-10-26
+//
+// ABSTRACT: This Fortran Module contains info on all the available 
+//   GRIB2 Grid Definition Templates used in Section 3 (GDS).
+//   The information decribing each template is stored in the
+//   gridtemplate structure defined below.
+//
+//   Each Template has three parts: The number of entries in the template
+//   (mapgridlen);  A map of the template (mapgrid), which contains the
+//   number of octets in which to pack each of the template values; and
+//   a logical value (needext) that indicates whether the Template needs 
+//   to be extended.  In some cases the number of entries in a template 
+//   can vary depending upon values specified in the "static" part of 
+//   the template.  ( See Template 3.120 as an example )
+//
+//   NOTE:  Array mapgrid contains the number of octets in which the 
+//   corresponding template values will be stored.  A negative value in
+//   mapgrid is used to indicate that the corresponding template entry can
+//   contain negative values.  This information is used later when packing
+//   (or unpacking) the template data values.  Negative data values in GRIB
+//   are stored with the left most bit set to one, and a negative number
+//   of octets value in mapgrid[] indicates that this possibility should
+//   be considered.  The number of octets used to store the data value
+//   in this case would be the absolute value of the negative value in 
+//   mapgrid[].
+//  
+//
+////////////////////////////////////////////////////////////////////
+
+      #define MAXGRIDTEMP 23              // maximum number of templates
+      #define MAXGRIDMAPLEN 200           // maximum template map length
+
+      struct gridtemplate
+      {
+          g2int template_num;
+          g2int mapgridlen;
+          g2int needext;
+          g2int mapgrid[MAXGRIDMAPLEN];
+      };
+
+      const struct gridtemplate templatesgrid[MAXGRIDTEMP] = {
+             // 3.0: Lat/Lon grid
+         { 0, 19, 0, {1,1,4,1,4,1,4,4,4,4,4,-4,4,1,-4,4,4,4,1} },
+             // 3.1: Rotated Lat/Lon grid
+         { 1, 22, 0, {1,1,4,1,4,1,4,4,4,4,4,-4,4,1,-4,4,4,4,1,-4,4,4} },
+             // 3.2: Stretched Lat/Lon grid
+         { 2, 22, 0, {1,1,4,1,4,1,4,4,4,4,4,-4,4,1,-4,4,4,4,1,-4,4,-4} },
+             // 3.3: Stretched & Rotated Lat/Lon grid
+         { 3, 25, 0, {1,1,4,1,4,1,4,4,4,4,4,-4,4,1,-4,4,4,4,1,-4,4,4,-4,4,-4} },
+             // 3.10: Mercator
+         {10, 19, 0, {1,1,4,1,4,1,4,4,4,-4,4,1,-4,-4,4,1,4,4,4} },
+             // 3.20: Polar Stereographic Projection
+         {20, 18, 0, {1,1,4,1,4,1,4,4,4,-4,4,1,-4,4,4,4,1,1} },
+             // 3.30: Lambert Conformal
+         {30, 22, 0, {1,1,4,1,4,1,4,4,4,-4,4,1,-4,4,4,4,1,1,-4,-4,-4,4} },
+             // 3.31: Albers equal area
+         {31, 22, 0, {1,1,4,1,4,1,4,4,4,-4,4,1,-4,4,4,4,1,1,-4,-4,-4,4} },
+             // 3.40: Guassian Lat/Lon
+         {40, 19, 0, {1,1,4,1,4,1,4,4,4,4,4,-4,4,1,-4,4,4,4,1} },
+             // 3.41: Rotated Gaussian Lat/Lon
+         {41, 22, 0, {1,1,4,1,4,1,4,4,4,4,4,-4,4,1,-4,4,4,4,1,-4,4,4} },
+             // 3.42: Stretched Gaussian Lat/Lon
+         {42, 22, 0, {1,1,4,1,4,1,4,4,4,4,4,-4,4,1,-4,4,4,4,1,-4,4,-4} },
+             // 3.43: Stretched and Rotated Gaussian Lat/Lon
+         {43, 25, 0, {1,1,4,1,4,1,4,4,4,4,4,-4,4,1,-4,4,4,4,1,-4,4,4,-4,4,-4} },
+             // 3.50: Spherical Harmonic Coefficients
+         {50, 5, 0, {4,4,4,1,1} },
+             // 3.51: Rotated Spherical Harmonic Coefficients
+         {51, 8, 0, {4,4,4,1,1,-4,4,4} },
+             // 3.52: Stretched Spherical Harmonic Coefficients
+         {52, 8, 0, {4,4,4,1,1,-4,4,-4} },
+             // 3.53: Stretched and Rotated Spherical Harmonic Coefficients
+         {53, 11, 0, {4,4,4,1,1,-4,4,4,-4,4,-4} },
+             // 3.90: Space View Perspective or orthographic
+         {90, 21, 0, {1,1,4,1,4,1,4,4,4,-4,4,1,4,4,4,4,1,4,4,4,4} },
+             // 3.100: Triangular grid based on an icosahedron
+         {100, 11, 0, {1,1,2,1,-4,4,4,1,1,1,4} },
+             // 3.110: Equatorial Azimuthal equidistant
+         {110, 16, 0, {1,1,4,1,4,1,4,4,4,-4,4,1,4,4,1,1} },
+             // 3.120: Azimuth-range projection
+         {120, 7, 1, {4,4,-4,4,4,4,1} },
+             // 3.1000: Cross Section Grid
+         {1000, 20, 1, {1,1,4,1,4,1,4,4,4,4,-4,4,1,4,4,1,2,1,1,2} },
+             // 3.1100: Hovmoller Diagram Grid
+         {1100, 28, 0, {1,1,4,1,4,1,4,4,4,4,-4,4,1,-4,4,1,4,1,-4,1,1,-4,2,1,1,1,1,1} },
+             // 3.1200: Time Section Grid
+         {1200, 16, 1, {4,1,-4,1,1,-4,2,1,1,1,1,1,2,1,1,2} }
+
+      } ;
+
+
+#endif  /*  _gridtemplates_H  */
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/int_power.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/int_power.c
new file mode 100755
index 0000000..76f645a
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/int_power.c
@@ -0,0 +1,30 @@
+#include "grib2.h"
+/*
+ * w. ebisuzaki
+ *
+ *  return x**y
+ *
+ *
+ *  input: double x
+ *         int y
+ */
+double int_power(double x, g2int y) {
+
+        double value;
+
+        if (y < 0) {
+                y = -y;
+                x = 1.0 / x;
+        }
+        value = 1.0;
+
+        while (y) {
+                if (y & 1) {
+                        value *= x;
+                }
+                x = x * x;
+                y >>= 1;
+        }
+        return value;
+}
+
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/jpcpack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/jpcpack.c
new file mode 100755
index 0000000..2666668
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/jpcpack.c
@@ -0,0 +1,175 @@
+#include <stdlib.h>
+#include <math.h>
+#include "grib2.h"
+
+int enc_jpeg2000(unsigned char *,g2int ,g2int ,g2int ,
+                 g2int , g2int, g2int , char *, g2int );
+
+void jpcpack(g2float *fld,g2int width,g2int height,g2int *idrstmpl,
+             unsigned char *cpack,g2int *lcpack)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    jpcpack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2003-08-17
+//
+// ABSTRACT: This subroutine packs up a data field into a JPEG2000 code stream.
+//   After the data field is scaled, and the reference value is subtracted out,
+//   it is treated as a grayscale image and passed to a JPEG2000 encoder.
+//   It also fills in GRIB2 Data Representation Template 5.40 or 5.40000 with 
+//   the appropriate values.
+//
+// PROGRAM HISTORY LOG:
+// 2003-08-17  Gilbert
+// 2004-11-92  Gilbert  - Fixed bug encountered when packing a near constant
+//                        field.
+// 2004-07-19  Gilbert - Added check on whether the jpeg2000 encoding was
+//                       successful.  If not, try again with different encoder
+//                       options.
+// 2005-05-10  Gilbert - Imposed minimum size on cpack, used to hold encoded
+//                       bit string.
+//
+// USAGE:    jpcpack(g2float *fld,g2int width,g2int height,g2int *idrstmpl,
+//                   unsigned char *cpack,g2int *lcpack);
+//   INPUT ARGUMENT LIST:
+//     fld[]    - Contains the data values to pack
+//     width    - number of points in the x direction
+//     height   - number of points in the y direction
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.40 or 5.40000
+//                [0] = Reference value - ignored on input
+//                [1] = Binary Scale Factor
+//                [2] = Decimal Scale Factor
+//                [3] = number of bits for each data value - ignored on input
+//                [4] = Original field type - currently ignored on input
+//                      Data values assumed to be reals.
+//                [5] = 0 - use lossless compression
+//                    = 1 - use lossy compression
+//                [6] = Desired compression ratio, if idrstmpl[5]=1.
+//                      Set to 255, if idrstmpl[5]=0.
+//     lcpack   - size of array cpack[]
+//
+//   OUTPUT ARGUMENT LIST: 
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.0
+//                [0] = Reference value - set by jpcpack routine.
+//                [1] = Binary Scale Factor - unchanged from input
+//                [2] = Decimal Scale Factor - unchanged from input
+//                [3] = Number of bits containing each grayscale pixel value
+//                [4] = Original field type - currently set = 0 on output.
+//                      Data values assumed to be reals.
+//                [5] = 0 - use lossless compression
+//                    = 1 - use lossy compression
+//                [6] = Desired compression ratio, if idrstmpl[5]=1
+//     cpack    - The packed data field 
+//     lcpack   - length of packed field in cpack.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$
+{
+      g2int  *ifld;
+      static g2float alog2=0.69314718;       //  ln(2.0)
+      g2int  j,nbits,imin,imax,maxdif;
+      g2int  ndpts,nbytes,nsize,retry;
+      g2float  bscale,dscale,rmax,rmin,temp;
+      unsigned char *ctemp;
+      
+      ifld=0;
+      ndpts=width*height;
+      bscale=int_power(2.0,-idrstmpl[1]);
+      dscale=int_power(10.0,idrstmpl[2]);
+//
+//  Find max and min values in the data
+//
+      rmax=fld[0];
+      rmin=fld[0];
+      for (j=1;j<ndpts;j++) {
+        if (fld[j] > rmax) rmax=fld[j];
+        if (fld[j] < rmin) rmin=fld[j];
+      }
+      if (idrstmpl[1] == 0) 
+         maxdif = (g2int) (rint(rmax*dscale) - rint(rmin*dscale));
+      else
+         maxdif = (g2int)rint( (rmax-rmin)*dscale*bscale );
+//
+//  If max and min values are not equal, pack up field.
+//  If they are equal, we have a constant field, and the reference
+//  value (rmin) is the value for each point in the field and
+//  set nbits to 0.
+//
+      if ( rmin != rmax  &&  maxdif != 0 ) {
+        ifld=(g2int *)malloc(ndpts*sizeof(g2int));
+        //
+        //  Determine which algorithm to use based on user-supplied 
+        //  binary scale factor and number of bits.
+        //
+        if (idrstmpl[1] == 0) {
+           //
+           //  No binary scaling and calculate minumum number of 
+           //  bits in which the data will fit.
+           //
+           imin=(g2int)rint(rmin*dscale);
+           imax=(g2int)rint(rmax*dscale);
+           maxdif=imax-imin;
+           temp=log((double)(maxdif+1))/alog2;
+           nbits=(g2int)ceil(temp);
+           rmin=(g2float)imin;
+           //   scale data
+           for(j=0;j<ndpts;j++)
+             ifld[j]=(g2int)rint(fld[j]*dscale)-imin;
+        }
+        else {
+           //
+           //  Use binary scaling factor and calculate minumum number of 
+           //  bits in which the data will fit.
+           //
+           rmin=rmin*dscale;
+           rmax=rmax*dscale;
+           maxdif=(g2int)rint((rmax-rmin)*bscale);
+           temp=log((double)(maxdif+1))/alog2;
+           nbits=(g2int)ceil(temp);
+           //   scale data
+           for (j=0;j<ndpts;j++)
+             ifld[j]=(g2int)rint(((fld[j]*dscale)-rmin)*bscale);
+        }
+        //
+        //  Pack data into full octets, then do JPEG 2000 encode.
+        //  and calculate the length of the packed data in bytes
+        //
+        retry=0;
+        nbytes=(nbits+7)/8;
+        nsize=*lcpack;          // needed for input to enc_jpeg2000
+        ctemp=calloc(ndpts,nbytes);
+        sbits(ctemp,ifld,0,nbytes*8,0,ndpts);
+        *lcpack=(g2int)enc_jpeg2000(ctemp,width,height,nbits,idrstmpl[5],idrstmpl[6],retry,(char *)cpack,nsize);
+        if (*lcpack <= 0) {
+           printf("jpcpack: ERROR Packing JPC = %d\n",(int)*lcpack);
+           if ( *lcpack == -3 ) {
+              retry=1;
+              *lcpack=(g2int)enc_jpeg2000(ctemp,width,height,nbits,idrstmpl[5],idrstmpl[6],retry,(char *)cpack,nsize);
+              if ( *lcpack <= 0 ) printf("jpcpack: Retry Failed.\n");
+              else printf("jpcpack: Retry Successful.\n");
+           }
+        }
+        free(ctemp);
+
+      }
+      else {
+        nbits=0;
+        *lcpack=0;
+      }
+
+//
+//  Fill in ref value and number of bits in Template 5.0
+//
+      mkieee(&rmin,idrstmpl+0,1);   // ensure reference value is IEEE format
+      idrstmpl[3]=nbits;
+      idrstmpl[4]=0;         // original data were reals
+      if (idrstmpl[5] == 0) idrstmpl[6]=255;       // lossy not used
+      if (ifld != 0) free(ifld);
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/jpcunpack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/jpcunpack.c
new file mode 100755
index 0000000..d3744ba
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/jpcunpack.c
@@ -0,0 +1,72 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+   int dec_jpeg2000(char *,g2int ,g2int *);
+
+g2int jpcunpack(unsigned char *cpack,g2int len,g2int *idrstmpl,g2int ndpts,
+                g2float *fld)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    jpcunpack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2003-08-27
+//
+// ABSTRACT: This subroutine unpacks a data field that was packed into a 
+//   JPEG2000 code stream
+//   using info from the GRIB2 Data Representation Template 5.40 or 5.40000.
+//
+// PROGRAM HISTORY LOG:
+// 2003-08-27  Gilbert
+//
+// USAGE:    jpcunpack(unsigned char *cpack,g2int len,g2int *idrstmpl,g2int ndpts,
+//                     g2float *fld)
+//   INPUT ARGUMENT LIST:
+//     cpack    - The packed data field (character*1 array)
+//     len      - length of packed field cpack().
+//     idrstmpl - Pointer to array of values for Data Representation
+//                Template 5.40 or 5.40000
+//     ndpts    - The number of data values to unpack
+//
+//   OUTPUT ARGUMENT LIST:
+//     fld[]    - Contains the unpacked data values
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$
+{
+
+      g2int  *ifld;
+      g2int  j,nbits,iret;
+      g2float  ref,bscale,dscale;
+
+      rdieee(idrstmpl+0,&ref,1);
+      bscale = int_power(2.0,idrstmpl[1]);
+      dscale = int_power(10.0,-idrstmpl[2]);
+      nbits = idrstmpl[3];
+//
+//  if nbits equals 0, we have a constant field where the reference value
+//  is the data value at each gridpoint
+//
+      if (nbits != 0) {
+
+         ifld=(g2int *)calloc(ndpts,sizeof(g2int));
+         if ( ifld == 0 ) {
+            fprintf(stderr,"Could not allocate space in jpcunpack.\n  Data field NOT upacked.\n");
+            return(1);
+         }
+         iret=(g2int)dec_jpeg2000(cpack,len,ifld);
+         for (j=0;j<ndpts;j++) {
+           fld[j]=(((g2float)ifld[j]*bscale)+ref)*dscale;
+         }
+         free(ifld);
+      }
+      else {
+         for (j=0;j<ndpts;j++) fld[j]=ref;
+      }
+
+      return(0);
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/misspack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/misspack.c
new file mode 100755
index 0000000..e631ddd
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/misspack.c
@@ -0,0 +1,532 @@
+#include <stdlib.h>
+#include <math.h>
+#include "grib2.h"
+
+void misspack(g2float *fld,g2int ndpts,g2int idrsnum,g2int *idrstmpl,
+              unsigned char *cpack, g2int *lcpack)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    misspack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2000-06-21
+//
+// ABSTRACT: This subroutine packs up a data field using a complex
+//   packing algorithm as defined in the GRIB2 documention.  It
+//   supports GRIB2 complex packing templates with or without
+//   spatial differences (i.e. DRTs 5.2 and 5.3).
+//   It also fills in GRIB2 Data Representation Template 5.2 or 5.3 
+//   with the appropriate values.
+//   This version assumes that Missing Value Management is being used and that
+//   1 or 2 missing values appear in the data.
+//
+// PROGRAM HISTORY LOG:
+// 2000-06-21  Gilbert
+//
+// USAGE:    misspack(g2float *fld,g2int ndpts,g2int idrsnum,g2int *idrstmpl,
+//                    unsigned char *cpack, g2int *lcpack)
+//   INPUT ARGUMENT LIST:
+//     fld[]    - Contains the data values to pack
+//     ndpts    - The number of data values in array fld[]
+//     idrsnum  - Data Representation Template number 5.N
+//                Must equal 2 or 3.
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.2 or 5.3
+//                [0] = Reference value - ignored on input
+//                [1] = Binary Scale Factor
+//                [2] = Decimal Scale Factor
+//                    .
+//                    .
+//                [6] = Missing value management
+//                [7] = Primary missing value
+//                [8] = Secondary missing value
+//                    .
+//                    .
+//               [16] = Order of Spatial Differencing  ( 1 or 2 )
+//                    .
+//                    .
+//
+//   OUTPUT ARGUMENT LIST: 
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.3
+//                [0] = Reference value - set by misspack routine.
+//                [1] = Binary Scale Factor - unchanged from input
+//                [2] = Decimal Scale Factor - unchanged from input
+//                    .
+//                    .
+//     cpack    - The packed data field (character*1 array)
+//     *lcpack   - length of packed field cpack().
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$
+{
+
+      g2int  *ifld, *ifldmiss, *jfld;
+      g2int  *jmin, *jmax, *lbit;
+      static g2int zero=0;
+      g2int  *gref, *gwidth, *glen;
+      g2int  glength, grpwidth;
+      g2int  i, n, iofst, imin, ival1, ival2, isd, minsd, nbitsd;
+      g2int  nbitsgref, left, iwmax, ngwidthref, nbitsgwidth, ilmax;
+      g2int  nglenref, nglenlast, nbitsglen, ij;
+      g2int  j, missopt, nonmiss, itemp, maxorig, nbitorig, miss1, miss2;
+      g2int  ngroups, ng, num0, num1, num2;
+      g2int  imax, lg, mtemp, ier, igmax;
+      g2int  kfildo, minpk, inc, maxgrps, ibit, jbit, kbit, novref, lbitref;
+      g2float  rmissp, rmisss, bscale, dscale, rmin, temp;
+      static g2int simple_alg = 0;
+      static g2float alog2=0.69314718;       //  ln(2.0)
+      static g2int one=1;
+      
+      bscale=int_power(2.0,-idrstmpl[1]);
+      dscale=int_power(10.0,idrstmpl[2]);
+      missopt=idrstmpl[6];
+      if ( missopt != 1 && missopt != 2 ) {
+         printf("misspack: Unrecognized option.\n");
+         *lcpack=-1;
+         return;
+      }
+      else {    //  Get missing values
+         rdieee(idrstmpl+7,&rmissp,1);
+         if (missopt == 2) rdieee(idrstmpl+8,&rmisss,1);
+      }
+//
+//  Find min value of non-missing values in the data,
+//  AND set up missing value mapping of the field.
+//
+      ifldmiss = calloc(ndpts,sizeof(g2int));
+      rmin=1E+37;
+      if ( missopt ==  1 ) {        // Primary missing value only
+         for ( j=0; j<ndpts; j++) {
+           if (fld[j] == rmissp) {
+              ifldmiss[j]=1;
+           }
+           else {
+              ifldmiss[j]=0;
+              if (fld[j] < rmin) rmin=fld[j];
+           }
+         }
+      }
+      if ( missopt ==  2 ) {        // Primary and secondary missing values
+         for ( j=0; j<ndpts; j++ ) {
+           if (fld[j] == rmissp) {
+              ifldmiss[j]=1;
+           }
+           else if (fld[j] == rmisss) {
+              ifldmiss[j]=2;
+           }
+           else {
+              ifldmiss[j]=0;
+              if (fld[j] < rmin) rmin=fld[j];
+           }
+         }
+      }
+//
+//  Allocate work arrays:
+//  Note: -ifldmiss[j],j=0,ndpts-1 is a map of original field indicating 
+//         which of the original data values
+//         are primary missing (1), sencondary missing (2) or non-missing (0).
+//        -jfld[j],j=0,nonmiss-1 is a subarray of just the non-missing values 
+//         from the original field.
+//
+      //if (rmin != rmax) {
+        iofst=0;
+        ifld = calloc(ndpts,sizeof(g2int));
+        jfld = calloc(ndpts,sizeof(g2int));
+        gref = calloc(ndpts,sizeof(g2int));
+        gwidth = calloc(ndpts,sizeof(g2int));
+        glen = calloc(ndpts,sizeof(g2int));
+        //
+        //  Scale original data
+        //
+        nonmiss=0;
+        if (idrstmpl[1] == 0) {        //  No binary scaling
+           imin=(g2int)rint(rmin*dscale);
+           //imax=(g2int)rint(rmax*dscale);
+           rmin=(g2float)imin;
+           for ( j=0; j<ndpts; j++) {
+              if (ifldmiss[j] == 0) {
+                jfld[nonmiss]=(g2int)rint(fld[j]*dscale)-imin;
+                nonmiss++;
+              }
+           }
+        }
+        else {                             //  Use binary scaling factor
+           rmin=rmin*dscale;
+           //rmax=rmax*dscale;
+           for ( j=0; j<ndpts; j++ ) {
+              if (ifldmiss[j] == 0) {
+                jfld[nonmiss]=(g2int)rint(((fld[j]*dscale)-rmin)*bscale);
+                nonmiss++;
+              }
+           }
+        }
+        //
+        //  Calculate Spatial differences, if using DRS Template 5.3
+        //
+        if (idrsnum == 3) {        // spatial differences
+           if (idrstmpl[16]!=1 && idrstmpl[16]!=2) idrstmpl[16]=2;
+           if (idrstmpl[16] == 1) {      // first order
+              ival1=jfld[0];
+              for ( j=nonmiss-1; j>0; j--)
+                 jfld[j]=jfld[j]-jfld[j-1];
+              jfld[0]=0;
+           }
+           else if (idrstmpl[16] == 2) {      // second order
+              ival1=jfld[0];
+              ival2=jfld[1];
+              for ( j=nonmiss-1; j>1; j--)
+                 jfld[j]=jfld[j]-(2*jfld[j-1])+jfld[j-2];
+              jfld[0]=0;
+              jfld[1]=0;
+           }
+           //
+           //  subtract min value from spatial diff field
+           //
+           isd=idrstmpl[16];
+           minsd=jfld[isd];
+           for ( j=isd; j<nonmiss; j++ ) if ( jfld[j] < minsd ) minsd=jfld[j];
+           for ( j=isd; j<nonmiss; j++ ) jfld[j]=jfld[j]-minsd;
+           //
+           //   find num of bits need to store minsd and add 1 extra bit
+           //   to indicate sign
+           //
+           temp=log((double)(abs(minsd)+1))/alog2;
+           nbitsd=(g2int)ceil(temp)+1;
+           //
+           //   find num of bits need to store ifld[0] ( and ifld[1]
+           //   if using 2nd order differencing )
+           //
+           maxorig=ival1;
+           if (idrstmpl[16]==2 && ival2>ival1) maxorig=ival2;
+           temp=log((double)(maxorig+1))/alog2;
+           nbitorig=(g2int)ceil(temp)+1;
+           if (nbitorig > nbitsd) nbitsd=nbitorig;
+           //   increase number of bits to even multiple of 8 ( octet )
+           if ( (nbitsd%8) != 0) nbitsd=nbitsd+(8-(nbitsd%8));
+           //
+           //  Store extra spatial differencing info into the packed
+           //  data section.
+           //
+           if (nbitsd != 0) {
+              //   pack first original value
+              if (ival1 >= 0) {
+                 sbit(cpack,&ival1,iofst,nbitsd);
+                 iofst=iofst+nbitsd;
+              }
+              else {
+                 sbit(cpack,&one,iofst,1);
+                 iofst=iofst+1;
+                 itemp=abs(ival1);
+                 sbit(cpack,&itemp,iofst,nbitsd-1);
+                 iofst=iofst+nbitsd-1;
+              }
+              if (idrstmpl[16] == 2) {
+               //  pack second original value
+                 if (ival2 >= 0) {
+                    sbit(cpack,&ival2,iofst,nbitsd);
+                    iofst=iofst+nbitsd;
+                 }
+                 else {
+                    sbit(cpack,&one,iofst,1);
+                    iofst=iofst+1;
+                    itemp=abs(ival2);
+                    sbit(cpack,&itemp,iofst,nbitsd-1);
+                    iofst=iofst+nbitsd-1;
+                 }
+              }
+              //  pack overall min of spatial differences
+              if (minsd >= 0) {
+                 sbit(cpack,&minsd,iofst,nbitsd);
+                 iofst=iofst+nbitsd;
+              }
+              else {
+                 sbit(cpack,&one,iofst,1);
+                 iofst=iofst+1;
+                 itemp=abs(minsd);
+                 sbit(cpack,&itemp,iofst,nbitsd-1);
+                 iofst=iofst+nbitsd-1;
+              }
+           }
+         //print *,'SDp ',ival1,ival2,minsd,nbitsd
+        }       //  end of spatial diff section
+        //
+        //  Expand non-missing data values to original grid.
+        //
+        miss1=jfld[0];
+        for ( j=0; j<nonmiss; j++) if (jfld[j] < miss1) miss1 = jfld[j];
+        miss1--;
+        miss2=miss1-1;
+        n=0;
+        for ( j=0; j<ndpts; j++) {
+           if ( ifldmiss[j] == 0 ) {
+              ifld[j]=jfld[n];
+              n++;
+           }
+           else if ( ifldmiss[j] == 1 ) {
+              ifld[j]=miss1;
+           }
+           else if ( ifldmiss[j] == 2 ) {
+              ifld[j]=miss2;
+           }
+        }
+        //
+        //   Determine Groups to be used.
+        //
+        if ( simple_alg == 1 ) {
+           //  set group length to 10 :  calculate number of groups
+           //  and length of last group
+           ngroups=ndpts/10;
+           for (j=0;j<ngroups;j++) glen[j]=10;
+           itemp=ndpts%10;
+           if (itemp != 0) {
+              ngroups++;
+              glen[ngroups-1]=itemp;
+           }
+        }
+        else {
+           // Use Dr. Glahn's algorithm for determining grouping.
+           //
+           kfildo=6;
+           minpk=10;
+           inc=1;
+           maxgrps=(ndpts/minpk)+1;
+           jmin = calloc(maxgrps,sizeof(g2int));
+           jmax = calloc(maxgrps,sizeof(g2int));
+           lbit = calloc(maxgrps,sizeof(g2int));
+           pack_gp(&kfildo,ifld,&ndpts,&missopt,&minpk,&inc,&miss1,&miss2,
+                        jmin,jmax,lbit,glen,&maxgrps,&ngroups,&ibit,&jbit,
+                        &kbit,&novref,&lbitref,&ier);
+           //printf("SAGier = %d %d %d %d %d %d\n",ier,ibit,jbit,kbit,novref,lbitref);
+           for ( ng=0; ng<ngroups; ng++) glen[ng]=glen[ng]+novref;
+           free(jmin);
+           free(jmax);
+           free(lbit);
+        }
+        //  
+        //  For each group, find the group's reference value (min)
+        //  and the number of bits needed to hold the remaining values
+        //
+        n=0;
+        for ( ng=0; ng<ngroups; ng++) {
+           //  how many of each type?
+           num0=num1=num2=0;
+           for (j=n; j<n+glen[ng]; j++) {
+               if (ifldmiss[j] == 0 ) num0++;
+               if (ifldmiss[j] == 1 ) num1++;
+               if (ifldmiss[j] == 2 ) num2++;
+           }
+           if ( num0 == 0 ) {      // all missing values
+              if ( num1 == 0 ) {       // all secondary missing
+                gref[ng]=-2;
+                gwidth[ng]=0;
+              }
+              else if ( num2 == 0 ) {       // all primary missing
+                gref[ng]=-1;
+                gwidth[ng]=0;
+              }
+              else {                          // both primary and secondary
+                gref[ng]=0;
+                gwidth[ng]=1;
+              }
+           }
+           else {                      // contains some non-missing data
+             //    find max and min values of group
+             gref[ng]=2147483647;
+             imax=-2147483647;
+             j=n;
+             for ( lg=0; lg<glen[ng]; lg++ ) {
+                if ( ifldmiss[j] == 0 ) {
+                  if (ifld[j] < gref[ng]) gref[ng]=ifld[j];
+                  if (ifld[j] > imax) imax=ifld[j]; 
+                }
+                j++;
+             }
+             if (missopt == 1) imax=imax+1;
+             if (missopt == 2) imax=imax+2;
+             //   calc num of bits needed to hold data
+             if ( gref[ng] != imax ) {
+                temp=log((double)(imax-gref[ng]+1))/alog2;
+                gwidth[ng]=(g2int)ceil(temp);
+             }
+             else {
+                gwidth[ng]=0;
+             }
+           }
+           //   Subtract min from data
+           j=n;
+           mtemp=(g2int)int_power(2.,gwidth[ng]);
+           for ( lg=0; lg<glen[ng]; lg++ ) {
+              if (ifldmiss[j] == 0)            // non-missing
+                 ifld[j]=ifld[j]-gref[ng];
+              else if (ifldmiss[j] == 1)         // primary missing
+                 ifld[j]=mtemp-1;
+              else if (ifldmiss[j] == 2)         // secondary missing
+                 ifld[j]=mtemp-2;
+              
+              j++;
+           }
+           //   increment fld array counter
+           n=n+glen[ng];
+        }
+        //  
+        //  Find max of the group references and calc num of bits needed 
+        //  to pack each groups reference value, then
+        //  pack up group reference values
+        //
+        //printf(" GREFS: ");
+        //for (j=0;j<ngroups;j++) printf(" %d",gref[j]); printf("\n");
+        igmax=gref[0];
+        for (j=1;j<ngroups;j++) if (gref[j] > igmax) igmax=gref[j];
+        if (missopt == 1) igmax=igmax+1;
+        if (missopt == 2) igmax=igmax+2;
+        if (igmax != 0) {
+           temp=log((double)(igmax+1))/alog2;
+           nbitsgref=(g2int)ceil(temp);
+           // reset the ref values of any "missing only" groups.
+           mtemp=(g2int)int_power(2.,nbitsgref);
+           for ( j=0; j<ngroups; j++ ) {
+               if (gref[j] == -1) gref[j]=mtemp-1;
+               if (gref[j] == -2) gref[j]=mtemp-2;
+           }
+           sbits(cpack,gref,iofst,nbitsgref,0,ngroups);
+           itemp=nbitsgref*ngroups;
+           iofst=iofst+itemp;
+           //         Pad last octet with Zeros, if necessary,
+           if ( (itemp%8) != 0) {
+              left=8-(itemp%8);
+              sbit(cpack,&zero,iofst,left);
+              iofst=iofst+left;
+           }
+        }
+        else {
+           nbitsgref=0;
+        }
+        //
+        //  Find max/min of the group widths and calc num of bits needed
+        //  to pack each groups width value, then
+        //  pack up group width values
+        //
+        //write(77,*)'GWIDTHS: ',(gwidth(j),j=1,ngroups)
+        iwmax=gwidth[0];
+        ngwidthref=gwidth[0];
+        for (j=1;j<ngroups;j++) {
+           if (gwidth[j] > iwmax) iwmax=gwidth[j];
+           if (gwidth[j] < ngwidthref) ngwidthref=gwidth[j];
+        }
+        if (iwmax != ngwidthref) {
+           temp=log((double)(iwmax-ngwidthref+1))/alog2;
+           nbitsgwidth=(g2int)ceil(temp);
+           for ( i=0; i<ngroups; i++) gwidth[i]=gwidth[i]-ngwidthref;
+           sbits(cpack,gwidth,iofst,nbitsgwidth,0,ngroups);
+           itemp=nbitsgwidth*ngroups;
+           iofst=iofst+itemp;
+           //         Pad last octet with Zeros, if necessary,
+           if ( (itemp%8) != 0) {
+              left=8-(itemp%8);
+              sbit(cpack,&zero,iofst,left);
+              iofst=iofst+left;
+           }
+        }
+        else {
+           nbitsgwidth=0;
+           for (i=0;i<ngroups;i++) gwidth[i]=0;
+        }
+        //
+        //  Find max/min of the group lengths and calc num of bits needed
+        //  to pack each groups length value, then
+        //  pack up group length values
+        //
+        //printf(" GLENS: ");
+        //for (j=0;j<ngroups;j++) printf(" %d",glen[j]); printf("\n");
+        ilmax=glen[0];
+        nglenref=glen[0];
+        for (j=1;j<ngroups-1;j++) {
+           if (glen[j] > ilmax) ilmax=glen[j];
+           if (glen[j] < nglenref) nglenref=glen[j];
+        }
+        nglenlast=glen[ngroups-1];
+        if (ilmax != nglenref) {
+           temp=log((double)(ilmax-nglenref+1))/alog2;
+           nbitsglen=(g2int)ceil(temp);
+           for ( i=0; i<ngroups-1; i++) glen[i]=glen[i]-nglenref;
+           sbits(cpack,glen,iofst,nbitsglen,0,ngroups);
+           itemp=nbitsglen*ngroups;
+           iofst=iofst+itemp;
+           //         Pad last octet with Zeros, if necessary,
+           if ( (itemp%8) != 0) {
+              left=8-(itemp%8);
+              sbit(cpack,&zero,iofst,left);
+              iofst=iofst+left;
+           }
+        }
+        else {
+           nbitsglen=0;
+           for (i=0;i<ngroups;i++) glen[i]=0;
+        }
+        //
+        //  For each group, pack data values
+        //
+        //write(77,*)'IFLDS: ',(ifld(j),j=1,ndpts)
+        n=0;
+        ij=0;
+        for ( ng=0; ng<ngroups; ng++) {
+           glength=glen[ng]+nglenref;
+           if (ng == (ngroups-1) ) glength=nglenlast;
+           grpwidth=gwidth[ng]+ngwidthref;
+       //write(77,*)'NGP ',ng,grpwidth,glength,gref(ng)
+           if ( grpwidth != 0 ) {
+              sbits(cpack,ifld+n,iofst,grpwidth,0,glength);
+              iofst=iofst+(grpwidth*glength);
+           }
+       //  do kk=1,glength
+       //     ij=ij+1
+       //write(77,*)'SAG ',ij,fld(ij),ifld(ij),gref(ng),bscale,rmin,dscale
+       //  enddo
+           n=n+glength;
+        }
+        //         Pad last octet with Zeros, if necessary,
+        if ( (iofst%8) != 0) {
+           left=8-(iofst%8);
+           sbit(cpack,&zero,iofst,left);
+           iofst=iofst+left;
+        }
+        *lcpack=iofst/8;
+        //
+        if ( ifld != 0 ) free(ifld);
+        if ( jfld != 0 ) free(jfld);
+        if ( ifldmiss != 0 ) free(ifldmiss);
+        if ( gref != 0 ) free(gref);
+        if ( gwidth != 0 ) free(gwidth);
+        if ( glen != 0 ) free(glen);
+      //}
+      //else {          //   Constant field ( max = min )
+      //  nbits=0;
+      //  *lcpack=0;
+      //  nbitsgref=0;
+      //  ngroups=0;
+      //}
+
+//
+//  Fill in ref value and number of bits in Template 5.2
+//
+      mkieee(&rmin,idrstmpl+0,1);   // ensure reference value is IEEE format
+      idrstmpl[3]=nbitsgref;
+      idrstmpl[4]=0;         // original data were reals
+      idrstmpl[5]=1;         // general group splitting
+      idrstmpl[9]=ngroups;          // Number of groups
+      idrstmpl[10]=ngwidthref;       // reference for group widths
+      idrstmpl[11]=nbitsgwidth;      // num bits used for group widths
+      idrstmpl[12]=nglenref;         // Reference for group lengths
+      idrstmpl[13]=1;                // length increment for group lengths
+      idrstmpl[14]=nglenlast;        // True length of last group
+      idrstmpl[15]=nbitsglen;        // num bits used for group lengths
+      if (idrsnum == 3) {
+         idrstmpl[17]=nbitsd/8;      // num bits used for extra spatial
+                                     // differencing values
+      }
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/mkieee.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/mkieee.c
new file mode 100755
index 0000000..2cac991
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/mkieee.c
@@ -0,0 +1,123 @@
+#include <stdlib.h>
+#include <math.h>
+#include "grib2.h"
+
+
+void mkieee(g2float *a,g2int *rieee,g2int num)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    mkieee 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-29
+//
+// ABSTRACT: This subroutine stores a list of real values in 
+//   32-bit IEEE floating point format.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-29  Gilbert
+//
+// USAGE:    mkieee(g2float *a,g2int *rieee,g2int num);
+//   INPUT ARGUMENT LIST:
+//     a        - Input array of floating point values.
+//     num      - Number of floating point values to convert.
+//
+//   OUTPUT ARGUMENT LIST:      
+//     rieee    - Output array of data values in 32-bit IEEE format
+//                stored in g2int integer array.  rieee must be allocated
+//                with at least 4*num bytes of memory before calling this
+//                function.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$
+{
+
+      g2int  j,n,ieee,iexp,imant;
+      double  alog2,atemp;
+
+      static double  two23,two126;
+      static g2int test=0;
+    //g2intu msk1=0x80000000;        // 10000000000000000000000000000000 binary
+    //g2int msk2=0x7F800000;         // 01111111100000000000000000000000 binary
+    //g2int msk3=0x007FFFFF;         // 00000000011111111111111111111111 binary
+
+      if ( test == 0 ) {
+         two23=(double)int_power(2.0,23);
+         two126=(double)int_power(2.0,126);
+         test=1;
+      }
+
+      alog2=0.69314718;       //  ln(2.0)
+
+      for (j=0;j<num;j++) {
+      
+        ieee=0;
+
+        if (a[j] == 0.0) {
+          rieee[j]=ieee;
+          continue;
+        }
+        
+//
+//  Set Sign bit (bit 31 - leftmost bit)
+//
+        if (a[j] < 0.0) {
+          ieee= 1 << 31;
+          atemp=-1.0*a[j];
+        }
+        else {
+          ieee= 0 << 31;
+          atemp=a[j];
+        }
+        //printf("sign %ld %x \n",ieee,ieee);
+//
+//  Determine exponent n with base 2
+//
+        if ( atemp >= 1.0 ) {
+           n = 0;
+           while ( int_power(2.0,n+1) <= atemp ) {
+              n++;
+           }
+        }
+        else {
+           n = -1;
+           while ( int_power(2.0,n) > atemp ) {
+              n--;
+           }
+        }
+        //n=(g2int)floor(log(atemp)/alog2);
+        iexp=n+127;
+        if (n >  127) iexp=255;     // overflow
+        if (n < -127) iexp=0;
+        //printf("exp %ld %ld \n",iexp,n);
+        //      set exponent bits ( bits 30-23 )
+        ieee = ieee | ( iexp << 23 );
+//
+//  Determine Mantissa
+// 
+        if (iexp != 255) {
+          if (iexp != 0) 
+            atemp=(atemp/int_power(2.0,n))-1.0;
+          else
+            atemp=atemp*two126;
+          imant=(g2int)rint(atemp*two23);
+        }
+        else {
+          imant=0;
+        }
+        //printf("mant %ld %x \n",imant,imant);
+        //      set mantissa bits ( bits 22-0 )
+        ieee = ieee | imant;
+//
+//  Transfer IEEE bit string to rieee array
+//
+        rieee[j]=ieee;
+
+      }
+
+      return;
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pack_gp.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pack_gp.c
new file mode 100644
index 0000000..2eaa00e
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pack_gp.c
@@ -0,0 +1,1447 @@
+/* pack_gp.f -- translated by f2c (version 20031025).
+   You must link the resulting object file with libf2c:
+	on Microsoft Windows system, link with libf2c.lib;
+	on Linux or Unix systems, link with .../path/to/libf2c.a -lm
+	or, if you install libf2c.a in a standard place, with -lf2c -lm
+	-- in that order, at the end of the command line, as in
+		cc *.o -lf2c -lm
+	Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
+
+		http://www.netlib.org/f2c/libf2c.zip
+*/
+
+/*#include "f2c.h"*/
+#include <stdlib.h>
+#include "grib2.h"
+typedef g2int integer;
+typedef g2int logical;
+#define TRUE_ (1)
+#define FALSE_ (0)
+
+/* Subroutine */ int pack_gp(integer *kfildo, integer *ic, integer *nxy, 
+	integer *is523, integer *minpk, integer *inc, integer *missp, integer 
+	*misss, integer *jmin, integer *jmax, integer *lbit, integer *nov, 
+	integer *ndg, integer *lx, integer *ibit, integer *jbit, integer *
+	kbit, integer *novref, integer *lbitref, integer *ier)
+{
+    /* Initialized data */
+
+    const  integer mallow = 1073741825;   /*  MALLOW=2**30+1  */
+    static integer ifeed = 12;
+    static integer ifirst = 0;
+
+    /* System generated locals */
+    integer i__1, i__2, i__3;
+
+    /* Local variables */
+    static integer j, k, l;
+    static logical adda;
+    static integer ired, kinc, mina, maxa, minb, maxb, minc, maxc, ibxx2[31];
+    static char cfeed[1];
+    static integer nenda, nendb, ibita, ibitb, minak, minbk, maxak, maxbk, 
+	    minck, maxck, nouta, lmiss, itest, nount;
+    extern /* Subroutine */ int reduce(integer *, integer *, integer *, 
+	    integer *, integer *, integer *, integer *, integer *, integer *, 
+	    integer *, integer *, integer *, integer *);
+    static integer ibitbs, mislla, misllb, misllc, iersav, lminpk, ktotal, 
+	    kounta, kountb, kstart, mstart, mintst, maxtst, 
+	    kounts, mintstk, maxtstk;
+    integer *misslx;
+
+
+/*        FEBRUARY 1994   GLAHN   TDL   MOS-2000 */
+/*        JUNE     1995   GLAHN   MODIFIED FOR LMISS ERROR. */
+/*        JULY     1996   GLAHN   ADDED MISSS */
+/*        FEBRUARY 1997   GLAHN   REMOVED 4 REDUNDANT TESTS FOR */
+/*                                MISSP.EQ.0; INSERTED A TEST TO BETTER */
+/*                                HANDLE A STRING OF 9999'S */
+/*        FEBRUARY 1997   GLAHN   ADDED LOOPS TO ELIMINATE TEST FOR */
+/*                                MISSS WHEN MISSS = 0 */
+/*        MARCH    1997   GLAHN   CORRECTED FOR SECONDARY MISSING VALUE */
+/*        MARCH    1997   GLAHN   CORRECTED FOR USE OF LOCAL VALUE */
+/*                                OF MINPK */
+/*        MARCH    1997   GLAHN   CORRECTED FOR SECONDARY MISSING VALUE */
+/*        MARCH    1997   GLAHN   CHANGED CALCULATING NUMBER OF BITS */
+/*                                THROUGH EXPONENTS TO AN ARRAY (IMPROVED */
+/*                                OVERALL PACKING PERFORMANCE BY ABOUT */
+/*                                35 PERCENT!).  ALLOWED 0 BITS FOR */
+/*                                PACKING JMIN( ), LBIT( ), AND NOV( ). */
+/*        MAY      1997   GLAHN   A NUMBER OF CHANGES FOR EFFICIENCY. */
+/*                                MOD FUNCTIONS ELIMINATED AND ONE */
+/*                                IFTHEN ADDED.  JOUNT REMOVED. */
+/*                                RECOMPUTATION OF BITS NOT MADE UNLESS */
+/*                                NECESSARY AFTER MOVING POINTS FROM */
+/*                                ONE GROUP TO ANOTHER.  NENDB ADJUSTED */
+/*                                TO ELIMINATE POSSIBILITY OF VERY */
+/*                                SMALL GROUP AT THE END. */
+/*                                ABOUT 8 PERCENT IMPROVEMENT IN */
+/*                                OVERALL PACKING.  ISKIPA REMOVED; */
+/*                                THERE IS ALWAYS A GROUP B THAT CAN */
+/*                                BECOME GROUP A.  CONTROL ON SIZE */
+/*                                OF GROUP B (STATEMENT BELOW 150) */
+/*                                ADDED.  ADDED ADDA, AND USE */
+/*                                OF GE AND LE INSTEAD OF GT AND LT */
+/*                                IN LOOPS BETWEEN 150 AND 160. */
+/*                                IBITBS ADDED TO SHORTEN TRIPS */
+/*                                THROUGH LOOP. */
+/*        MARCH    2000   GLAHN   MODIFIED FOR GRIB2; CHANGED NAME FROM */
+/*                                PACKGP */
+/*        JANUARY  2001   GLAHN   COMMENTS; IER = 706 SUBSTITUTED FOR */
+/*                                STOPS; ADDED RETURN1; REMOVED STATEMENT */
+/*                                NUMBER 110; ADDED IER AND * RETURN */
+/*        NOVEMBER 2001   GLAHN   CHANGED SOME DIAGNOSTIC FORMATS TO */
+/*                                ALLOW PRINTING LARGER NUMBERS */
+/*        NOVEMBER 2001   GLAHN   ADDED MISSLX( ) TO PUT MAXIMUM VALUE */
+/*                                INTO JMIN( ) WHEN ALL VALUES MISSING */
+/*                                TO AGREE WITH GRIB STANDARD. */
+/*        NOVEMBER 2001   GLAHN   CHANGED TWO TESTS ON MISSP AND MISSS */
+/*                                EQ 0 TO TESTS ON IS523.  HOWEVER, */
+/*                                MISSP AND MISSS CANNOT IN GENERAL BE */
+/*                                = 0. */
+/*        NOVEMBER 2001   GLAHN   ADDED CALL TO REDUCE; DEFINED ITEST */
+/*                                BEFORE LOOPS TO REDUCE COMPUTATION; */
+/*                                STARTED LARGE GROUP WHEN ALL SAME */
+/*                                VALUE */
+/*        DECEMBER 2001   GLAHN   MODIFIED AND ADDED A FEW COMMENTS */
+/*        JANUARY  2002   GLAHN   REMOVED LOOP BEFORE 150 TO DETERMINE */
+/*                                A GROUP OF ALL SAME VALUE */
+/*        JANUARY  2002   GLAHN   CHANGED MALLOW FROM 9999999 TO 2**30+1, */
+/*                                AND MADE IT A PARAMETER */
+/*        MARCH    2002   GLAHN   ADDED NON FATAL IER = 716, 717; */
+/*                                REMOVED NENDB=NXY ABOVE 150; */
+/*                                ADDED IERSAV=0; COMMENTS */
+
+/*        PURPOSE */
+/*            DETERMINES GROUPS OF VARIABLE SIZE, BUT AT LEAST OF */
+/*            SIZE MINPK, THE ASSOCIATED MAX (JMAX( )) AND MIN (JMIN( )), */
+/*            THE NUMBER OF BITS NECESSARY TO HOLD THE VALUES IN EACH */
+/*            GROUP (LBIT( )), THE NUMBER OF VALUES IN EACH GROUP */
+/*            (NOV( )), THE NUMBER OF BITS NECESSARY TO PACK THE JMIN( ) */
+/*            VALUES (IBIT), THE NUMBER OF BITS NECESSARY TO PACK THE */
+/*            LBIT( ) VALUES (JBIT), AND THE NUMBER OF BITS NECESSARY */
+/*            TO PACK THE NOV( ) VALUES (KBIT).  THE ROUTINE IS DESIGNED */
+/*            TO DETERMINE THE GROUPS SUCH THAT A SMALL NUMBER OF BITS */
+/*            IS NECESSARY TO PACK THE DATA WITHOUT EXCESSIVE */
+/*            COMPUTATIONS.  IF ALL VALUES IN THE GROUP ARE ZERO, THE */
+/*            NUMBER OF BITS TO USE IN PACKING IS DEFINED AS ZERO WHEN */
+/*            THERE CAN BE NO MISSING VALUES; WHEN THERE CAN BE MISSING */
+/*            VALUES, THE NUMBER OF BITS MUST BE AT LEAST 1 TO HAVE */
+/*            THE CAPABILITY TO RECOGNIZE THE MISSING VALUE.  HOWEVER, */
+/*            IF ALL VALUES IN A GROUP ARE MISSING, THE NUMBER OF BITS */
+/*            NEEDED IS 0, AND THE UNPACKER RECOGNIZES THIS. */
+/*            ALL VARIABLES ARE INTEGER.  EVEN THOUGH THE GROUPS ARE */
+/*            INITIALLY OF SIZE MINPK OR LARGER, AN ADJUSTMENT BETWEEN */
+/*            TWO GROUPS (THE LOOKBACK PROCEDURE) MAY MAKE A GROUP */
+/*            SMALLER THAN MINPK.  THE CONTROL ON GROUP SIZE IS THAT */
+/*            THE SUM OF THE SIZES OF THE TWO CONSECUTIVE GROUPS, EACH OF */
+/*            SIZE MINPK OR LARGER, IS NOT DECREASED.  WHEN DETERMINING */
+/*            THE NUMBER OF BITS NECESSARY FOR PACKING, THE LARGEST */
+/*            VALUE THAT CAN BE ACCOMMODATED IN, SAY, MBITS, IS */
+/*            2**MBITS-1; THIS LARGEST VALUE (AND THE NEXT SMALLEST */
+/*            VALUE) IS RESERVED FOR THE MISSING VALUE INDICATOR (ONLY) */
+/*            WHEN IS523 NE 0.  IF THE DIMENSION NDG */
+/*            IS NOT LARGE ENOUGH TO HOLD ALL THE GROUPS, THE LOCAL VALUE */
+/*            OF MINPK IS INCREASED BY 50 PERCENT.  THIS IS REPEATED */
+/*            UNTIL NDG WILL SUFFICE.  A DIAGNOSTIC IS PRINTED WHENEVER */
+/*            THIS HAPPENS, WHICH SHOULD BE VERY RARELY.  IF IT HAPPENS */
+/*            OFTEN, NDG IN SUBROUTINE PACK SHOULD BE INCREASED AND */
+/*            A CORRESPONDING INCREASE IN SUBROUTINE UNPACK MADE. */
+/*            CONSIDERABLE CODE IS PROVIDED SO THAT NO MORE CHECKING */
+/*            FOR MISSING VALUES WITHIN LOOPS IS DONE THAN NECESSARY; */
+/*            THE ADDED EFFICIENCY OF THIS IS RELATIVELY MINOR, */
+/*            BUT DOES NO HARM.  FOR GRIB2, THE REFERENCE VALUE FOR */
+/*            THE LENGTH OF GROUPS IN NOV( ) AND FOR THE NUMBER OF */
+/*            BITS NECESSARY TO PACK GROUP VALUES ARE DETERMINED, */
+/*            AND SUBTRACTED BEFORE JBIT AND KBIT ARE DETERMINED. */
+
+/*            WHEN 1 OR MORE GROUPS ARE LARGE COMPARED TO THE OTHERS, */
+/*            THE WIDTH OF ALL GROUPS MUST BE AS LARGE AS THE LARGEST. */
+/*            A SUBROUTINE REDUCE BREAKS UP LARGE GROUPS INTO 2 OR */
+/*            MORE TO REDUCE TOTAL BITS REQUIRED.  IF REDUCE SHOULD */
+/*            ABORT, PACK_GP WILL BE EXECUTED AGAIN WITHOUT THE CALL */
+/*            TO REDUCE. */
+
+/*        DATA SET USE */
+/*           KFILDO - UNIT NUMBER FOR OUTPUT (PRINT) FILE. (OUTPUT) */
+
+/*        VARIABLES IN CALL SEQUENCE */
+/*              KFILDO = UNIT NUMBER FOR OUTPUT (PRINT) FILE.  (INPUT) */
+/*               IC( ) = ARRAY TO HOLD DATA FOR PACKING.  THE VALUES */
+/*                       DO NOT HAVE TO BE POSITIVE AT THIS POINT, BUT */
+/*                       MUST BE IN THE RANGE -2**30 TO +2**30 (THE */
+/*                       THE VALUE OF MALLOW).  THESE INTEGER VALUES */
+/*                       WILL BE RETAINED EXACTLY THROUGH PACKING AND */
+/*                       UNPACKING.  (INPUT) */
+/*                 NXY = NUMBER OF VALUES IN IC( ).  ALSO TREATED */
+/*                       AS ITS DIMENSION.  (INPUT) */
+/*              IS523  = missing value management */
+/*                       0=data contains no missing values */
+/*                       1=data contains Primary missing values */
+/*                       2=data contains Primary and secondary missing values */
+/*                       (INPUT) */
+/*               MINPK = THE MINIMUM SIZE OF EACH GROUP, EXCEPT POSSIBLY */
+/*                       THE LAST ONE.  (INPUT) */
+/*                 INC = THE NUMBER OF VALUES TO ADD TO AN ALREADY */
+/*                       EXISTING GROUP IN DETERMINING WHETHER OR NOT */
+/*                       TO START A NEW GROUP.  IDEALLY, THIS WOULD BE */
+/*                       1, BUT EACH TIME INC VALUES ARE ATTEMPTED, THE */
+/*                       MAX AND MIN OF THE NEXT MINPK VALUES MUST BE */
+/*                       FOUND.  THIS IS "A LOOP WITHIN A LOOP," AND */
+/*                       A SLIGHTLY LARGER VALUE MAY GIVE ABOUT AS GOOD */
+/*                       RESULTS WITH SLIGHTLY LESS COMPUTATIONAL TIME. */
+/*                       IF INC IS LE 0, 1 IS USED, AND A DIAGNOSTIC IS */
+/*                       OUTPUT.  NOTE:  IT IS EXPECTED THAT INC WILL */
+/*                       EQUAL 1.  THE CODE USES INC PRIMARILY IN THE */
+/*                       LOOPS STARTING AT STATEMENT 180.  IF INC */
+/*                       WERE 1, THERE WOULD NOT NEED TO BE LOOPS */
+/*                       AS SUCH.  HOWEVER, KINC (THE LOCAL VALUE OF */
+/*                       INC) IS SET GE 1 WHEN NEAR THE END OF THE DATA */
+/*                       TO FORESTALL A VERY SMALL GROUP AT THE END. */
+/*                       (INPUT) */
+/*               MISSP = WHEN MISSING POINTS CAN BE PRESENT IN THE DATA, */
+/*                       THEY WILL HAVE THE VALUE MISSP OR MISSS. */
+/*                       MISSP IS THE PRIMARY MISSING VALUE AND  MISSS */
+/*                       IS THE SECONDARY MISSING VALUE .  THESE MUST */
+/*                       NOT BE VALUES THAT WOULD OCCUR WITH SUBTRACTING */
+/*                       THE MINIMUM (REFERENCE) VALUE OR SCALING. */
+/*                       FOR EXAMPLE, MISSP = 0 WOULD NOT BE ADVISABLE. */
+/*                       (INPUT) */
+/*               MISSS = SECONDARY MISSING VALUE INDICATOR (SEE MISSP). */
+/*                       (INPUT) */
+/*             JMIN(J) = THE MINIMUM OF EACH GROUP (J=1,LX).  (OUTPUT) */
+/*             JMAX(J) = THE MAXIMUM OF EACH GROUP (J=1,LX).  THIS IS */
+/*                       NOT REALLY NEEDED, BUT SINCE THE MAX OF EACH */
+/*                       GROUP MUST BE FOUND, SAVING IT HERE IS CHEAP */
+/*                       IN CASE THE USER WANTS IT.  (OUTPUT) */
+/*             LBIT(J) = THE NUMBER OF BITS NECESSARY TO PACK EACH GROUP */
+/*                       (J=1,LX).  IT IS ASSUMED THE MINIMUM OF EACH */
+/*                       GROUP WILL BE REMOVED BEFORE PACKING, AND THE */
+/*                       VALUES TO PACK WILL, THEREFORE, ALL BE POSITIVE. */
+/*                       HOWEVER, IC( ) DOES NOT NECESSARILY CONTAIN */
+/*                       ALL POSITIVE VALUES.  IF THE OVERALL MINIMUM */
+/*                       HAS BEEN REMOVED (THE USUAL CASE), THEN IC( ) */
+/*                       WILL CONTAIN ONLY POSITIVE VALUES.  (OUTPUT) */
+/*              NOV(J) = THE NUMBER OF VALUES IN EACH GROUP (J=1,LX). */
+/*                       (OUTPUT) */
+/*                 NDG = THE DIMENSION OF JMIN( ), JMAX( ), LBIT( ), AND */
+/*                       NOV( ).  (INPUT) */
+/*                  LX = THE NUMBER OF GROUPS DETERMINED.  (OUTPUT) */
+/*                IBIT = THE NUMBER OF BITS NECESSARY TO PACK THE JMIN(J) */
+/*                       VALUES, J=1,LX.  (OUTPUT) */
+/*                JBIT = THE NUMBER OF BITS NECESSARY TO PACK THE LBIT(J) */
+/*                       VALUES, J=1,LX.  (OUTPUT) */
+/*                KBIT = THE NUMBER OF BITS NECESSARY TO PACK THE NOV(J) */
+/*                       VALUES, J=1,LX.  (OUTPUT) */
+/*              NOVREF = REFERENCE VALUE FOR NOV( ).  (OUTPUT) */
+/*             LBITREF = REFERENCE VALUE FOR LBIT( ).  (OUTPUT) */
+/*                 IER = ERROR RETURN. */
+/*                       706 = VALUE WILL NOT PACK IN 30 BITS--FATAL */
+/*                       714 = ERROR IN REDUCE--NON-FATAL */
+/*                       715 = NGP NOT LARGE ENOUGH IN REDUCE--NON-FATAL */
+/*                       716 = MINPK INCEASED--NON-FATAL */
+/*                       717 = INC SET = 1--NON-FATAL */
+/*                       (OUTPUT) */
+/*                   * = ALTERNATE RETURN WHEN IER NE 0 AND FATAL ERROR. */
+
+/*        INTERNAL VARIABLES */
+/*               CFEED = CONTAINS THE CHARACTER REPRESENTATION */
+/*                       OF A PRINTER FORM FEED. */
+/*               IFEED = CONTAINS THE INTEGER VALUE OF A PRINTER */
+/*                       FORM FEED. */
+/*                KINC = WORKING COPY OF INC.  MAY BE MODIFIED. */
+/*                MINA = MINIMUM VALUE IN GROUP A. */
+/*                MAXA = MAXIMUM VALUE IN GROUP A. */
+/*               NENDA = THE PLACE IN IC( ) WHERE GROUP A ENDS. */
+/*              KSTART = THE PLACE IN IC( ) WHERE GROUP A STARTS. */
+/*               IBITA = NUMBER OF BITS NEEDED TO HOLD VALUES IN GROUP A. */
+/*                MINB = MINIMUM VALUE IN GROUP B. */
+/*                MAXB = MAXIMUM VALUE IN GROUP B. */
+/*               NENDB = THE PLACE IN IC( ) WHERE GROUP B ENDS. */
+/*               IBITB = NUMBER OF BITS NEEDED TO HOLD VALUES IN GROUP B. */
+/*                MINC = MINIMUM VALUE IN GROUP C. */
+/*                MAXC = MAXIMUM VALUE IN GROUP C. */
+/*              KTOTAL = COUNT OF NUMBER OF VALUES IN IC( ) PROCESSED. */
+/*               NOUNT = NUMBER OF VALUES ADDED TO GROUP A. */
+/*               LMISS = 0 WHEN IS523 = 0.  WHEN PACKING INTO A */
+/*                       SPECIFIC NUMBER OF BITS, SAY MBITS, */
+/*                       THE MAXIMUM VALUE THAT CAN BE HANDLED IS */
+/*                       2**MBITS-1.  WHEN IS523 = 1, INDICATING */
+/*                       PRIMARY MISSING VALUES, THIS MAXIMUM VALUE */
+/*                       IS RESERVED TO HOLD THE PRIMARY MISSING VALUE */
+/*                       INDICATOR AND LMISS = 1.  WHEN IS523 = 2, */
+/*                       THE VALUE JUST BELOW THE MAXIMUM (I.E., */
+/*                       2**MBITS-2) IS RESERVED TO HOLD THE SECONDARY */
+/*                       MISSING VALUE INDICATOR AND LMISS = 2. */
+/*              LMINPK = LOCAL VALUE OF MINPK.  THIS WILL BE ADJUSTED */
+/*                       UPWARD WHENEVER NDG IS NOT LARGE ENOUGH TO HOLD */
+/*                       ALL THE GROUPS. */
+/*              MALLOW = THE LARGEST ALLOWABLE VALUE FOR PACKING. */
+/*              MISLLA = SET TO 1 WHEN ALL VALUES IN GROUP A ARE MISSING. */
+/*                       THIS IS USED TO DISTINGUISH BETWEEN A REAL */
+/*                       MINIMUM WHEN ALL VALUES ARE NOT MISSING */
+/*                       AND A MINIMUM THAT HAS BEEN SET TO ZERO WHEN */
+/*                       ALL VALUES ARE MISSING.  0 OTHERWISE. */
+/*                       NOTE THAT THIS DOES NOT DISTINGUISH BETWEEN */
+/*                       PRIMARY AND SECONDARY MISSINGS WHEN SECONDARY */
+/*                       MISSINGS ARE PRESENT.  THIS MEANS THAT */
+/*                       LBIT( ) WILL NOT BE ZERO WITH THE RESULTING */
+/*                       COMPRESSION EFFICIENCY WHEN SECONDARY MISSINGS */
+/*                       ARE PRESENT.  ALSO NOTE THAT A CHECK HAS BEEN */
+/*                       MADE EARLIER TO DETERMINE THAT SECONDARY */
+/*                       MISSINGS ARE REALLY THERE. */
+/*              MISLLB = SET TO 1 WHEN ALL VALUES IN GROUP B ARE MISSING. */
+/*                       THIS IS USED TO DISTINGUISH BETWEEN A REAL */
+/*                       MINIMUM WHEN ALL VALUES ARE NOT MISSING */
+/*                       AND A MINIMUM THAT HAS BEEN SET TO ZERO WHEN */
+/*                       ALL VALUES ARE MISSING.  0 OTHERWISE. */
+/*              MISLLC = PERFORMS THE SAME FUNCTION FOR GROUP C THAT */
+/*                       MISLLA AND MISLLB DO FOR GROUPS B AND C, */
+/*                       RESPECTIVELY. */
+/*            IBXX2(J) = AN ARRAY THAT WHEN THIS ROUTINE IS FIRST ENTERED */
+/*                       IS SET TO 2**J, J=0,30. IBXX2(30) = 2**30, WHICH */
+/*                       IS THE LARGEST VALUE PACKABLE, BECAUSE 2**31 */
+/*                       IS LARGER THAN THE INTEGER WORD SIZE. */
+/*              IFIRST = SET BY DATA STATEMENT TO 0.  CHANGED TO 1 ON */
+/*                       FIRST */
+/*                       ENTRY WHEN IBXX2( ) IS FILLED. */
+/*               MINAK = KEEPS TRACK OF THE LOCATION IN IC( ) WHERE THE */
+/*                       MINIMUM VALUE IN GROUP A IS LOCATED. */
+/*               MAXAK = DOES THE SAME AS MINAK, EXCEPT FOR THE MAXIMUM. */
+/*               MINBK = THE SAME AS MINAK FOR GROUP B. */
+/*               MAXBK = THE SAME AS MAXAK FOR GROUP B. */
+/*               MINCK = THE SAME AS MINAK FOR GROUP C. */
+/*               MAXCK = THE SAME AS MAXAK FOR GROUP C. */
+/*                ADDA = KEEPS TRACK WHETHER OR NOT AN ATTEMPT TO ADD */
+/*                       POINTS TO GROUP A WAS MADE.  IF SO, THEN ADDA */
+/*                       KEEPS FROM TRYING TO PUT ONE BACK INTO B. */
+/*                       (LOGICAL) */
+/*              IBITBS = KEEPS CURRENT VALUE IF IBITB SO THAT LOOP */
+/*                       ENDING AT 166 DOESN'T HAVE TO START AT */
+/*                       IBITB = 0 EVERY TIME. */
+/*           MISSLX(J) = MALLOW EXCEPT WHEN A GROUP IS ALL ONE VALUE (AND */
+/*                       LBIT(J) = 0) AND THAT VALUE IS MISSING.  IN */
+/*                       THAT CASE, MISSLX(J) IS MISSP OR MISSS.  THIS */
+/*                       GETS INSERTED INTO JMIN(J) LATER AS THE */
+/*                       MISSING INDICATOR; IT CAN'T BE PUT IN UNTIL */
+/*                       THE END, BECAUSE JMIN( ) IS USED TO CALCULATE */
+/*                       THE MAXIMUM NUMBER OF BITS (IBITS) NEEDED TO */
+/*                       PACK JMIN( ). */
+/*        1         2         3         4         5         6         7 X */
+
+/*        NON SYSTEM SUBROUTINES CALLED */
+/*           NONE */
+
+
+
+/*        MISSLX( ) was AN AUTOMATIC ARRAY. */
+    misslx = (integer *)calloc(*ndg,sizeof(integer));
+
+
+    /* Parameter adjustments */
+    --ic;
+    --nov;
+    --lbit;
+    --jmax;
+    --jmin;
+
+    /* Function Body */
+
+    *ier = 0;
+    iersav = 0;
+/*     CALL TIMPR(KFILDO,KFILDO,'START PACK_GP        ') */
+    *(unsigned char *)cfeed = (char) ifeed;
+
+    ired = 0;
+/*        IRED IS A FLAG.  WHEN ZERO, REDUCE WILL BE CALLED. */
+/*        IF REDUCE ABORTS, IRED = 1 AND IS NOT CALLED.  IN */
+/*        THIS CASE PACK_GP EXECUTES AGAIN EXCEPT FOR REDUCE. */
+
+    if (*inc <= 0) {
+	iersav = 717;
+/*        WRITE(KFILDO,101)INC */
+/* 101     FORMAT(/' ****INC ='I8,' NOT CORRECT IN PACK_GP.  1 IS USED.') */
+    }
+
+/*        THERE WILL BE A RESTART OF PACK_GP IF SUBROUTINE REDUCE */
+/*        ABORTS.  THIS SHOULD NOT HAPPEN, BUT IF IT DOES, PACK_GP */
+/*        WILL COMPLETE WITHOUT SUBROUTINE REDUCE.  A NON FATAL */
+/*        DIAGNOSTIC RETURN IS PROVIDED. */
+
+L102:
+    /*kinc = max(*inc,1);*/
+    kinc = (*inc > 1) ? *inc : 1;
+    lminpk = *minpk;
+
+/*         CALCULATE THE POWERS OF 2 THE FIRST TIME ENTERED. */
+
+    if (ifirst == 0) {
+	ifirst = 1;
+	ibxx2[0] = 1;
+
+	for (j = 1; j <= 30; ++j) {
+	    ibxx2[j] = ibxx2[j - 1] << 1;
+/* L104: */
+	}
+
+    }
+
+/*        THERE WILL BE A RESTART AT 105 IS NDG IS NOT LARGE ENOUGH. */
+/*        A NON FATAL DIAGNOSTIC RETURN IS PROVIDED. */
+
+L105:
+    kstart = 1;
+    ktotal = 0;
+    *lx = 0;
+    adda = FALSE_;
+    lmiss = 0;
+    if (*is523 == 1) {
+	lmiss = 1;
+    }
+    if (*is523 == 2) {
+	lmiss = 2;
+    }
+
+/*        ************************************* */
+
+/*        THIS SECTION COMPUTES STATISTICS FOR GROUP A.  GROUP A IS */
+/*        A GROUP OF SIZE LMINPK. */
+
+/*        ************************************* */
+
+    ibita = 0;
+    mina = mallow;
+    maxa = -mallow;
+    minak = mallow;
+    maxak = -mallow;
+
+/*        FIND THE MIN AND MAX OF GROUP A.  THIS WILL INITIALLY BE OF */
+/*        SIZE LMINPK (IF THERE ARE STILL LMINPK VALUES IN IC( )), BUT */
+/*        WILL INCREASE IN SIZE IN INCREMENTS OF INC UNTIL A NEW */
+/*        GROUP IS STARTED.  THE DEFINITION OF GROUP A IS DONE HERE */
+/*        ONLY ONCE (UPON INITIAL ENTRY), BECAUSE A GROUP B CAN ALWAYS */
+/*        BECOME A NEW GROUP A AFTER A IS PACKED, EXCEPT IF LMINPK */
+/*        HAS TO BE INCREASED BECAUSE NDG IS TOO SMALL.  THEREFORE, */
+/*        THE SEPARATE LOOPS FOR MISSING AND NON-MISSING HERE BUYS */
+/*        ALMOST NOTHING. */
+
+/* Computing MIN */
+    i__1 = kstart + lminpk - 1;
+    /*nenda = min(i__1,*nxy);*/
+    nenda = (i__1 < *nxy) ? i__1 : *nxy;
+    if (*nxy - nenda <= lminpk / 2) {
+	nenda = *nxy;
+    }
+/*        ABOVE STATEMENT GUARANTEES THE LAST GROUP IS GT LMINPK/2 BY */
+/*        MAKING THE ACTUAL GROUP LARGER.  IF A PROVISION LIKE THIS IS */
+/*        NOT INCLUDED, THERE WILL MANY TIMES BE A VERY SMALL GROUP */
+/*        AT THE END.  USE SEPARATE LOOPS FOR MISSING AND NO MISSING */
+/*        VALUES FOR EFFICIENCY. */
+
+/*        DETERMINE WHETHER THERE IS A LONG STRING OF THE SAME VALUE */
+/*        UNLESS NENDA = NXY.  THIS MAY ALLOW A LARGE GROUP A TO */
+/*        START WITH, AS WITH MISSING VALUES.   SEPARATE LOOPS FOR */
+/*        MISSING OPTIONS.  THIS SECTION IS ONLY EXECUTED ONCE, */
+/*        IN DETERMINING THE FIRST GROUP.  IT HELPS FOR AN ARRAY */
+/*        OF MOSTLY MISSING VALUES OR OF ONE VALUE, SUCH AS */
+/*        RADAR OR PRECIP DATA. */
+
+    if (nenda != *nxy && ic[kstart] == ic[kstart + 1]) {
+/*           NO NEED TO EXECUTE IF FIRST TWO VALUES ARE NOT EQUAL. */
+
+	if (*is523 == 0) {
+/*              THIS LOOP IS FOR NO MISSING VALUES. */
+
+	    i__1 = *nxy;
+	    for (k = kstart + 1; k <= i__1; ++k) {
+
+		if (ic[k] != ic[kstart]) {
+/* Computing MAX */
+		    i__2 = nenda, i__3 = k - 1;
+		    /*nenda = max(i__2,i__3);*/
+		    nenda = (i__2 > i__3) ? i__2 : i__3;
+		    goto L114;
+		}
+
+/* L111: */
+	    }
+
+	    nenda = *nxy;
+/*              FALL THROUGH THE LOOP MEANS ALL VALUES ARE THE SAME. */
+
+	} else if (*is523 == 1) {
+/*              THIS LOOP IS FOR PRIMARY MISSING VALUES ONLY. */
+
+	    i__1 = *nxy;
+	    for (k = kstart + 1; k <= i__1; ++k) {
+
+		if (ic[k] != *missp) {
+
+		    if (ic[k] != ic[kstart]) {
+/* Computing MAX */
+			i__2 = nenda, i__3 = k - 1;
+			/*nenda = max(i__2,i__3);*/
+			nenda = (i__2 > i__3) ? i__2 : i__3;
+			goto L114;
+		    }
+
+		}
+
+/* L112: */
+	    }
+
+	    nenda = *nxy;
+/*              FALL THROUGH THE LOOP MEANS ALL VALUES ARE THE SAME. */
+
+	} else {
+/*              THIS LOOP IS FOR PRIMARY AND SECONDARY MISSING VALUES. */
+
+	    i__1 = *nxy;
+	    for (k = kstart + 1; k <= i__1; ++k) {
+
+		if (ic[k] != *missp && ic[k] != *misss) {
+
+		    if (ic[k] != ic[kstart]) {
+/* Computing MAX */
+			i__2 = nenda, i__3 = k - 1;
+			/*nenda = max(i__2,i__3);*/
+			nenda = (i__2 > i__3) ? i__2 : i__3;
+			goto L114;
+		    }
+
+		}
+
+/* L113: */
+	    }
+
+	    nenda = *nxy;
+/*              FALL THROUGH THE LOOP MEANS ALL VALUES ARE THE SAME. */
+	}
+
+    }
+
+L114:
+    if (*is523 == 0) {
+
+	i__1 = nenda;
+	for (k = kstart; k <= i__1; ++k) {
+	    if (ic[k] < mina) {
+		mina = ic[k];
+		minak = k;
+	    }
+	    if (ic[k] > maxa) {
+		maxa = ic[k];
+		maxak = k;
+	    }
+/* L115: */
+	}
+
+    } else if (*is523 == 1) {
+
+	i__1 = nenda;
+	for (k = kstart; k <= i__1; ++k) {
+	    if (ic[k] == *missp) {
+		goto L117;
+	    }
+	    if (ic[k] < mina) {
+		mina = ic[k];
+		minak = k;
+	    }
+	    if (ic[k] > maxa) {
+		maxa = ic[k];
+		maxak = k;
+	    }
+L117:
+	    ;
+	}
+
+    } else {
+
+	i__1 = nenda;
+	for (k = kstart; k <= i__1; ++k) {
+	    if (ic[k] == *missp || ic[k] == *misss) {
+		goto L120;
+	    }
+	    if (ic[k] < mina) {
+		mina = ic[k];
+		minak = k;
+	    }
+	    if (ic[k] > maxa) {
+		maxa = ic[k];
+		maxak = k;
+	    }
+L120:
+	    ;
+	}
+
+    }
+
+    kounta = nenda - kstart + 1;
+
+/*        INCREMENT KTOTAL AND FIND THE BITS NEEDED TO PACK THE A GROUP. */
+
+    ktotal += kounta;
+    mislla = 0;
+    if (mina != mallow) {
+	goto L125;
+    }
+/*        ALL MISSING VALUES MUST BE ACCOMMODATED. */
+    mina = 0;
+    maxa = 0;
+    mislla = 1;
+    ibitb = 0;
+    if (*is523 != 2) {
+	goto L130;
+    }
+/*        WHEN ALL VALUES ARE MISSING AND THERE ARE NO */
+/*        SECONDARY MISSING VALUES, IBITA = 0. */
+/*        OTHERWISE, IBITA MUST BE CALCULATED. */
+
+L125:
+    itest = maxa - mina + lmiss;
+
+    for (ibita = 0; ibita <= 30; ++ibita) {
+	if (itest < ibxx2[ibita]) {
+	    goto L130;
+	}
+/* ***        THIS TEST IS THE SAME AS: */
+/* ***     IF(MAXA-MINA.LT.IBXX2(IBITA)-LMISS)GO TO 130 */
+/* L126: */
+    }
+
+/*     WRITE(KFILDO,127)MAXA,MINA */
+/* 127  FORMAT(' ****ERROR IN PACK_GP.  VALUE WILL NOT PACK IN 30 BITS.', */
+/*    1       '  MAXA ='I13,'  MINA ='I13,'.  ERROR AT 127.') */
+    *ier = 706;
+    goto L900;
+
+L130:
+
+/* ***D     WRITE(KFILDO,131)KOUNTA,KTOTAL,MINA,MAXA,IBITA,MISLLA */
+/* ***D131  FORMAT(' AT 130, KOUNTA ='I8,'  KTOTAL ='I8,'  MINA ='I8, */
+/* ***D    1       '  MAXA ='I8,'  IBITA ='I3,'  MISLLA ='I3) */
+
+L133:
+    if (ktotal >= *nxy) {
+	goto L200;
+    }
+
+/*        ************************************* */
+
+/*        THIS SECTION COMPUTES STATISTICS FOR GROUP B.  GROUP B IS A */
+/*        GROUP OF SIZE LMINPK IMMEDIATELY FOLLOWING GROUP A. */
+
+/*        ************************************* */
+
+L140:
+    minb = mallow;
+    maxb = -mallow;
+    minbk = mallow;
+    maxbk = -mallow;
+    ibitbs = 0;
+    mstart = ktotal + 1;
+
+/*        DETERMINE WHETHER THERE IS A LONG STRING OF THE SAME VALUE. */
+/*        THIS WORKS WHEN THERE ARE NO MISSING VALUES. */
+
+    nendb = 1;
+
+    if (mstart < *nxy) {
+
+	if (*is523 == 0) {
+/*              THIS LOOP IS FOR NO MISSING VALUES. */
+
+	    i__1 = *nxy;
+	    for (k = mstart + 1; k <= i__1; ++k) {
+
+		if (ic[k] != ic[mstart]) {
+		    nendb = k - 1;
+		    goto L150;
+		}
+
+/* L145: */
+	    }
+
+	    nendb = *nxy;
+/*              FALL THROUGH THE LOOP MEANS ALL REMAINING VALUES */
+/*              ARE THE SAME. */
+	}
+
+    }
+
+L150:
+/* Computing MAX */
+/* Computing MIN */
+    i__3 = ktotal + lminpk;
+    /*i__1 = nendb, i__2 = min(i__3,*nxy);*/
+    i__1 = nendb, i__2 = (i__3 < *nxy) ? i__3 : *nxy;
+    /*nendb = max(i__1,i__2);*/
+    nendb = (i__1 > i__2) ? i__1 : i__2;
+/* **** 150  NENDB=MIN(KTOTAL+LMINPK,NXY) */
+
+    if (*nxy - nendb <= lminpk / 2) {
+	nendb = *nxy;
+    }
+/*        ABOVE STATEMENT GUARANTEES THE LAST GROUP IS GT LMINPK/2 BY */
+/*        MAKING THE ACTUAL GROUP LARGER.  IF A PROVISION LIKE THIS IS */
+/*        NOT INCLUDED, THERE WILL MANY TIMES BE A VERY SMALL GROUP */
+/*        AT THE END.  USE SEPARATE LOOPS FOR MISSING AND NO MISSING */
+
+/*        USE SEPARATE LOOPS FOR MISSING AND NO MISSING VALUES */
+/*        FOR EFFICIENCY. */
+
+    if (*is523 == 0) {
+
+	i__1 = nendb;
+	for (k = mstart; k <= i__1; ++k) {
+	    if (ic[k] <= minb) {
+		minb = ic[k];
+/*              NOTE LE, NOT LT.  LT COULD BE USED BUT THEN A */
+/*              RECOMPUTE OVER THE WHOLE GROUP WOULD BE NEEDED */
+/*              MORE OFTEN.  SAME REASONING FOR GE AND OTHER */
+/*              LOOPS BELOW. */
+		minbk = k;
+	    }
+	    if (ic[k] >= maxb) {
+		maxb = ic[k];
+		maxbk = k;
+	    }
+/* L155: */
+	}
+
+    } else if (*is523 == 1) {
+
+	i__1 = nendb;
+	for (k = mstart; k <= i__1; ++k) {
+	    if (ic[k] == *missp) {
+		goto L157;
+	    }
+	    if (ic[k] <= minb) {
+		minb = ic[k];
+		minbk = k;
+	    }
+	    if (ic[k] >= maxb) {
+		maxb = ic[k];
+		maxbk = k;
+	    }
+L157:
+	    ;
+	}
+
+    } else {
+
+	i__1 = nendb;
+	for (k = mstart; k <= i__1; ++k) {
+	    if (ic[k] == *missp || ic[k] == *misss) {
+		goto L160;
+	    }
+	    if (ic[k] <= minb) {
+		minb = ic[k];
+		minbk = k;
+	    }
+	    if (ic[k] >= maxb) {
+		maxb = ic[k];
+		maxbk = k;
+	    }
+L160:
+	    ;
+	}
+
+    }
+
+    kountb = nendb - ktotal;
+    misllb = 0;
+    if (minb != mallow) {
+	goto L165;
+    }
+/*        ALL MISSING VALUES MUST BE ACCOMMODATED. */
+    minb = 0;
+    maxb = 0;
+    misllb = 1;
+    ibitb = 0;
+
+    if (*is523 != 2) {
+	goto L170;
+    }
+/*        WHEN ALL VALUES ARE MISSING AND THERE ARE NO SECONDARY */
+/*        MISSING VALUES, IBITB = 0.  OTHERWISE, IBITB MUST BE */
+/*        CALCULATED. */
+
+L165:
+    for (ibitb = ibitbs; ibitb <= 30; ++ibitb) {
+	if (maxb - minb < ibxx2[ibitb] - lmiss) {
+	    goto L170;
+	}
+/* L166: */
+    }
+
+/*     WRITE(KFILDO,167)MAXB,MINB */
+/* 167  FORMAT(' ****ERROR IN PACK_GP.  VALUE WILL NOT PACK IN 30 BITS.', */
+/*    1       '  MAXB ='I13,'  MINB ='I13,'.  ERROR AT 167.') */
+    *ier = 706;
+    goto L900;
+
+/*        COMPARE THE BITS NEEDED TO PACK GROUP B WITH THOSE NEEDED */
+/*        TO PACK GROUP A.  IF IBITB GE IBITA, TRY TO ADD TO GROUP A. */
+/*        IF NOT, TRY TO ADD A'S POINTS TO B, UNLESS ADDITION TO A */
+/*        HAS BEEN DONE.  THIS LATTER IS CONTROLLED WITH ADDA. */
+
+L170:
+
+/* ***D     WRITE(KFILDO,171)KOUNTA,KTOTAL,MINA,MAXA,IBITA,MISLLA, */
+/* ***D    1                               MINB,MAXB,IBITB,MISLLB */
+/* ***D171  FORMAT(' AT 171, KOUNTA ='I8,'  KTOTAL ='I8,'  MINA ='I8, */
+/* ***D    1       '  MAXA ='I8,'  IBITA ='I3,'  MISLLA ='I3, */
+/* ***D    2       '  MINB ='I8,'  MAXB ='I8,'  IBITB ='I3,'  MISLLB ='I3) */
+
+    if (ibitb >= ibita) {
+	goto L180;
+    }
+    if (adda) {
+	goto L200;
+    }
+
+/*        ************************************* */
+
+/*        GROUP B REQUIRES LESS BITS THAN GROUP A.  PUT AS MANY OF A'S */
+/*        POINTS INTO B AS POSSIBLE WITHOUT EXCEEDING THE NUMBER OF */
+/*        BITS NECESSARY TO PACK GROUP B. */
+
+/*        ************************************* */
+
+    kounts = kounta;
+/*        KOUNTA REFERS TO THE PRESENT GROUP A. */
+    mintst = minb;
+    maxtst = maxb;
+    mintstk = minbk;
+    maxtstk = maxbk;
+
+/*        USE SEPARATE LOOPS FOR MISSING AND NO MISSING VALUES */
+/*        FOR EFFICIENCY. */
+
+    if (*is523 == 0) {
+
+	i__1 = kstart;
+	for (k = ktotal; k >= i__1; --k) {
+/*           START WITH THE END OF THE GROUP AND WORK BACKWARDS. */
+	    if (ic[k] < minb) {
+		mintst = ic[k];
+		mintstk = k;
+	    } else if (ic[k] > maxb) {
+		maxtst = ic[k];
+		maxtstk = k;
+	    }
+	    if (maxtst - mintst >= ibxx2[ibitb]) {
+		goto L174;
+	    }
+/*           NOTE THAT FOR THIS LOOP, LMISS = 0. */
+	    minb = mintst;
+	    maxb = maxtst;
+	    minbk = mintstk;
+	    maxbk = maxtstk;
+	    --kounta;
+/*           THERE IS ONE LESS POINT NOW IN A. */
+/* L1715: */
+	}
+
+    } else if (*is523 == 1) {
+
+	i__1 = kstart;
+	for (k = ktotal; k >= i__1; --k) {
+/*           START WITH THE END OF THE GROUP AND WORK BACKWARDS. */
+	    if (ic[k] == *missp) {
+		goto L1718;
+	    }
+	    if (ic[k] < minb) {
+		mintst = ic[k];
+		mintstk = k;
+	    } else if (ic[k] > maxb) {
+		maxtst = ic[k];
+		maxtstk = k;
+	    }
+	    if (maxtst - mintst >= ibxx2[ibitb] - lmiss) {
+		goto L174;
+	    }
+/*           FOR THIS LOOP, LMISS = 1. */
+	    minb = mintst;
+	    maxb = maxtst;
+	    minbk = mintstk;
+	    maxbk = maxtstk;
+	    misllb = 0;
+/*           WHEN THE POINT IS NON MISSING, MISLLB SET = 0. */
+L1718:
+	    --kounta;
+/*           THERE IS ONE LESS POINT NOW IN A. */
+/* L1719: */
+	}
+
+    } else {
+
+	i__1 = kstart;
+	for (k = ktotal; k >= i__1; --k) {
+/*           START WITH THE END OF THE GROUP AND WORK BACKWARDS. */
+	    if (ic[k] == *missp || ic[k] == *misss) {
+		goto L1729;
+	    }
+	    if (ic[k] < minb) {
+		mintst = ic[k];
+		mintstk = k;
+	    } else if (ic[k] > maxb) {
+		maxtst = ic[k];
+		maxtstk = k;
+	    }
+	    if (maxtst - mintst >= ibxx2[ibitb] - lmiss) {
+		goto L174;
+	    }
+/*           FOR THIS LOOP, LMISS = 2. */
+	    minb = mintst;
+	    maxb = maxtst;
+	    minbk = mintstk;
+	    maxbk = maxtstk;
+	    misllb = 0;
+/*           WHEN THE POINT IS NON MISSING, MISLLB SET = 0. */
+L1729:
+	    --kounta;
+/*           THERE IS ONE LESS POINT NOW IN A. */
+/* L173: */
+	}
+
+    }
+
+/*        AT THIS POINT, KOUNTA CONTAINS THE NUMBER OF POINTS TO CLOSE */
+/*        OUT GROUP A WITH.  GROUP B NOW STARTS WITH KSTART+KOUNTA AND */
+/*        ENDS WITH NENDB.  MINB AND MAXB HAVE BEEN ADJUSTED AS */
+/*        NECESSARY TO REFLECT GROUP B (EVEN THOUGH THE NUMBER OF BITS */
+/*        NEEDED TO PACK GROUP B HAVE NOT INCREASED, THE END POINTS */
+/*        OF THE RANGE MAY HAVE). */
+
+L174:
+    if (kounta == kounts) {
+	goto L200;
+    }
+/*        ON TRANSFER, GROUP A WAS NOT CHANGED.  CLOSE IT OUT. */
+
+/*        ONE OR MORE POINTS WERE TAKEN OUT OF A.  RANGE AND IBITA */
+/*        MAY HAVE TO BE RECOMPUTED; IBITA COULD BE LESS THAN */
+/*        ORIGINALLY COMPUTED.  IN FACT, GROUP A CAN NOW CONTAIN */
+/*        ONLY ONE POINT AND BE PACKED WITH ZERO BITS */
+/*        (UNLESS MISSS NE 0). */
+
+    nouta = kounts - kounta;
+    ktotal -= nouta;
+    kountb += nouta;
+    if (nenda - nouta > minak && nenda - nouta > maxak) {
+	goto L200;
+    }
+/*        WHEN THE ABOVE TEST IS MET, THE MIN AND MAX OF THE */
+/*        CURRENT GROUP A WERE WITHIN THE OLD GROUP A, SO THE */
+/*        RANGE AND IBITA DO NOT NEED TO BE RECOMPUTED. */
+/*        NOTE THAT MINAK AND MAXAK ARE NO LONGER NEEDED. */
+    ibita = 0;
+    mina = mallow;
+    maxa = -mallow;
+
+/*        USE SEPARATE LOOPS FOR MISSING AND NO MISSING VALUES */
+/*        FOR EFFICIENCY. */
+
+    if (*is523 == 0) {
+
+	i__1 = nenda - nouta;
+	for (k = kstart; k <= i__1; ++k) {
+	    if (ic[k] < mina) {
+		mina = ic[k];
+	    }
+	    if (ic[k] > maxa) {
+		maxa = ic[k];
+	    }
+/* L1742: */
+	}
+
+    } else if (*is523 == 1) {
+
+	i__1 = nenda - nouta;
+	for (k = kstart; k <= i__1; ++k) {
+	    if (ic[k] == *missp) {
+		goto L1744;
+	    }
+	    if (ic[k] < mina) {
+		mina = ic[k];
+	    }
+	    if (ic[k] > maxa) {
+		maxa = ic[k];
+	    }
+L1744:
+	    ;
+	}
+
+    } else {
+
+	i__1 = nenda - nouta;
+	for (k = kstart; k <= i__1; ++k) {
+	    if (ic[k] == *missp || ic[k] == *misss) {
+		goto L175;
+	    }
+	    if (ic[k] < mina) {
+		mina = ic[k];
+	    }
+	    if (ic[k] > maxa) {
+		maxa = ic[k];
+	    }
+L175:
+	    ;
+	}
+
+    }
+
+    mislla = 0;
+    if (mina != mallow) {
+	goto L1750;
+    }
+/*        ALL MISSING VALUES MUST BE ACCOMMODATED. */
+    mina = 0;
+    maxa = 0;
+    mislla = 1;
+    if (*is523 != 2) {
+	goto L177;
+    }
+/*        WHEN ALL VALUES ARE MISSING AND THERE ARE NO SECONDARY */
+/*        MISSING VALUES IBITA = 0 AS ORIGINALLY SET.  OTHERWISE, */
+/*        IBITA MUST BE CALCULATED. */
+
+L1750:
+    itest = maxa - mina + lmiss;
+
+    for (ibita = 0; ibita <= 30; ++ibita) {
+	if (itest < ibxx2[ibita]) {
+	    goto L177;
+	}
+/* ***        THIS TEST IS THE SAME AS: */
+/* ***         IF(MAXA-MINA.LT.IBXX2(IBITA)-LMISS)GO TO 177 */
+/* L176: */
+    }
+
+/*     WRITE(KFILDO,1760)MAXA,MINA */
+/* 1760 FORMAT(' ****ERROR IN PACK_GP.  VALUE WILL NOT PACK IN 30 BITS.', */
+/*    1       '  MAXA ='I13,'  MINA ='I13,'.  ERROR AT 1760.') */
+    *ier = 706;
+    goto L900;
+
+L177:
+    goto L200;
+
+/*        ************************************* */
+
+/*        AT THIS POINT, GROUP B REQUIRES AS MANY BITS TO PACK AS GROUPA. */
+/*        THEREFORE, TRY TO ADD INC POINTS TO GROUP A WITHOUT INCREASING */
+/*        IBITA.  THIS AUGMENTED GROUP IS CALLED GROUP C. */
+
+/*        ************************************* */
+
+L180:
+    if (mislla == 1) {
+	minc = mallow;
+	minck = mallow;
+	maxc = -mallow;
+	maxck = -mallow;
+    } else {
+	minc = mina;
+	maxc = maxa;
+	minck = minak;
+	maxck = minak;
+    }
+
+    nount = 0;
+    if (*nxy - (ktotal + kinc) <= lminpk / 2) {
+	kinc = *nxy - ktotal;
+    }
+/*        ABOVE STATEMENT CONSTRAINS THE LAST GROUP TO BE NOT LESS THAN */
+/*        LMINPK/2 IN SIZE.  IF A PROVISION LIKE THIS IS NOT INCLUDED, */
+/*        THERE WILL MANY TIMES BE A VERY SMALL GROUP AT THE END. */
+
+/*        USE SEPARATE LOOPS FOR MISSING AND NO MISSING VALUES */
+/*        FOR EFFICIENCY.  SINCE KINC IS USUALLY 1, USING SEPARATE */
+/*        LOOPS HERE DOESN'T BUY MUCH.  A MISSING VALUE WILL ALWAYS */
+/*        TRANSFER BACK TO GROUP A. */
+
+    if (*is523 == 0) {
+
+/* Computing MIN */
+	i__2 = ktotal + kinc;
+	/*i__1 = min(i__2,*nxy);*/
+	i__1 = (i__2 < *nxy) ? i__2 : *nxy;
+	for (k = ktotal + 1; k <= i__1; ++k) {
+	    if (ic[k] < minc) {
+		minc = ic[k];
+		minck = k;
+	    }
+	    if (ic[k] > maxc) {
+		maxc = ic[k];
+		maxck = k;
+	    }
+	    ++nount;
+/* L185: */
+	}
+
+    } else if (*is523 == 1) {
+
+/* Computing MIN */
+	i__2 = ktotal + kinc;
+	/*i__1 = min(i__2,*nxy);*/
+	i__1 = (i__2 < *nxy) ? i__2 : *nxy;
+	for (k = ktotal + 1; k <= i__1; ++k) {
+	    if (ic[k] == *missp) {
+		goto L186;
+	    }
+	    if (ic[k] < minc) {
+		minc = ic[k];
+		minck = k;
+	    }
+	    if (ic[k] > maxc) {
+		maxc = ic[k];
+		maxck = k;
+	    }
+L186:
+	    ++nount;
+/* L187: */
+	}
+
+    } else {
+
+/* Computing MIN */
+	i__2 = ktotal + kinc;
+	/*i__1 = min(i__2,*nxy);*/
+	i__1 = (i__2 < *nxy) ? i__2 : *nxy;
+	for (k = ktotal + 1; k <= i__1; ++k) {
+	    if (ic[k] == *missp || ic[k] == *misss) {
+		goto L189;
+	    }
+	    if (ic[k] < minc) {
+		minc = ic[k];
+		minck = k;
+	    }
+	    if (ic[k] > maxc) {
+		maxc = ic[k];
+		maxck = k;
+	    }
+L189:
+	    ++nount;
+/* L190: */
+	}
+
+    }
+
+/* ***D     WRITE(KFILDO,191)KOUNTA,KTOTAL,MINA,MAXA,IBITA,MISLLA, */
+/* ***D    1   MINC,MAXC,NOUNT,IC(KTOTAL),IC(KTOTAL+1) */
+/* ***D191  FORMAT(' AT 191, KOUNTA ='I8,'  KTOTAL ='I8,'  MINA ='I8, */
+/* ***D    1       '  MAXA ='I8,'  IBITA ='I3,'  MISLLA ='I3, */
+/* ***D    2       '  MINC ='I8,'  MAXC ='I8, */
+/* ***D    3       '  NOUNT ='I5,'  IC(KTOTAL) ='I9,'  IC(KTOTAL+1) =',I9) */
+
+/*        IF THE NUMBER OF BITS NEEDED FOR GROUP C IS GT IBITA, */
+/*        THEN THIS GROUP A IS A GROUP TO PACK. */
+
+    if (minc == mallow) {
+	minc = mina;
+	maxc = maxa;
+	minck = minak;
+	maxck = maxak;
+	misllc = 1;
+	goto L195;
+/*           WHEN THE NEW VALUE(S) ARE MISSING, THEY CAN ALWAYS */
+/*           BE ADDED. */
+
+    } else {
+	misllc = 0;
+    }
+
+    if (maxc - minc >= ibxx2[ibita] - lmiss) {
+	goto L200;
+    }
+
+/*        THE BITS NECESSARY FOR GROUP C HAS NOT INCREASED FROM THE */
+/*        BITS NECESSARY FOR GROUP A.  ADD THIS POINT(S) TO GROUP A. */
+/*        COMPUTE THE NEXT GROUP B, ETC., UNLESS ALL POINTS HAVE BEEN */
+/*        USED. */
+
+L195:
+    ktotal += nount;
+    kounta += nount;
+    mina = minc;
+    maxa = maxc;
+    minak = minck;
+    maxak = maxck;
+    mislla = misllc;
+    adda = TRUE_;
+    if (ktotal >= *nxy) {
+	goto L200;
+    }
+
+    if (minbk > ktotal && maxbk > ktotal) {
+	mstart = nendb + 1;
+/*           THE MAX AND MIN OF GROUP B WERE NOT FROM THE POINTS */
+/*           REMOVED, SO THE WHOLE GROUP DOES NOT HAVE TO BE LOOKED */
+/*           AT TO DETERMINE THE NEW MAX AND MIN.  RATHER START */
+/*           JUST BEYOND THE OLD NENDB. */
+	ibitbs = ibitb;
+	nendb = 1;
+	goto L150;
+    } else {
+	goto L140;
+    }
+
+/*        ************************************* */
+
+/*        GROUP A IS TO BE PACKED.  STORE VALUES IN JMIN( ), JMAX( ), */
+/*        LBIT( ), AND NOV( ). */
+
+/*        ************************************* */
+
+L200:
+    ++(*lx);
+    if (*lx <= *ndg) {
+	goto L205;
+    }
+    lminpk += lminpk / 2;
+/*     WRITE(KFILDO,201)NDG,LMINPK,LX */
+/* 201  FORMAT(' ****NDG ='I5,' NOT LARGE ENOUGH.', */
+/*    1       '  LMINPK IS INCREASED TO 'I3,' FOR THIS FIELD.'/ */
+/*    2       '  LX = 'I10) */
+    iersav = 716;
+    goto L105;
+
+L205:
+    jmin[*lx] = mina;
+    jmax[*lx] = maxa;
+    lbit[*lx] = ibita;
+    nov[*lx] = kounta;
+    kstart = ktotal + 1;
+
+    if (mislla == 0) {
+	misslx[*lx - 1] = mallow;
+    } else {
+	misslx[*lx - 1] = ic[ktotal];
+/*           IC(KTOTAL) WAS THE LAST VALUE PROCESSED.  IF MISLLA NE 0, */
+/*           THIS MUST BE THE MISSING VALUE FOR THIS GROUP. */
+    }
+
+/* ***D     WRITE(KFILDO,206)MISLLA,IC(KTOTAL),KTOTAL,LX,JMIN(LX),JMAX(LX), */
+/* ***D    1                 LBIT(LX),NOV(LX),MISSLX(LX) */
+/* ***D206  FORMAT(' AT 206,  MISLLA ='I2,'  IC(KTOTAL) ='I5,'  KTOTAL ='I8, */
+/* ***D    1       '  LX ='I6,'  JMIN(LX) ='I8,'  JMAX(LX) ='I8, */
+/* ***D    2       '  LBIT(LX) ='I5,'  NOV(LX) ='I8,'  MISSLX(LX) =',I7) */
+
+    if (ktotal >= *nxy) {
+	goto L209;
+    }
+
+/*        THE NEW GROUP A WILL BE THE PREVIOUS GROUP B.  SET LIMITS, ETC. */
+
+    ibita = ibitb;
+    mina = minb;
+    maxa = maxb;
+    minak = minbk;
+    maxak = maxbk;
+    mislla = misllb;
+    nenda = nendb;
+    kounta = kountb;
+    ktotal += kounta;
+    adda = FALSE_;
+    goto L133;
+
+/*        ************************************* */
+
+/*        CALCULATE IBIT, THE NUMBER OF BITS NEEDED TO HOLD THE GROUP */
+/*        MINIMUM VALUES. */
+
+/*        ************************************* */
+
+L209:
+    *ibit = 0;
+
+    i__1 = *lx;
+    for (l = 1; l <= i__1; ++l) {
+L210:
+	if (jmin[l] < ibxx2[*ibit]) {
+	    goto L220;
+	}
+	++(*ibit);
+	goto L210;
+L220:
+	;
+    }
+
+/*        INSERT THE VALUE IN JMIN( ) TO BE USED FOR ALL MISSING */
+/*        VALUES WHEN LBIT( ) = 0.  WHEN SECONDARY MISSING */
+/*        VALUES CAN BE PRESENT, LBIT(L) WILL NOT = 0. */
+
+    if (*is523 == 1) {
+
+	i__1 = *lx;
+	for (l = 1; l <= i__1; ++l) {
+
+	    if (lbit[l] == 0) {
+
+		if (misslx[l - 1] == *missp) {
+		    jmin[l] = ibxx2[*ibit] - 1;
+		}
+
+	    }
+
+/* L226: */
+	}
+
+    }
+
+/*        ************************************* */
+
+/*        CALCULATE JBIT, THE NUMBER OF BITS NEEDED TO HOLD THE BITS */
+/*        NEEDED TO PACK THE VALUES IN THE GROUPS.  BUT FIND AND */
+/*        REMOVE THE REFERENCE VALUE FIRST. */
+
+/*        ************************************* */
+
+/*     WRITE(KFILDO,228)CFEED,LX */
+/* 228  FORMAT(A1,/' *****************************************' */
+/*    1          /' THE GROUP WIDTHS LBIT( ) FOR ',I8,' GROUPS' */
+/*    2          /' *****************************************') */
+/*     WRITE(KFILDO,229) (LBIT(J),J=1,MIN(LX,100)) */
+/* 229  FORMAT(/' '20I6) */
+
+    *lbitref = lbit[1];
+
+    i__1 = *lx;
+    for (k = 1; k <= i__1; ++k) {
+	if (lbit[k] < *lbitref) {
+	    *lbitref = lbit[k];
+	}
+/* L230: */
+    }
+
+    if (*lbitref != 0) {
+
+	i__1 = *lx;
+	for (k = 1; k <= i__1; ++k) {
+	    lbit[k] -= *lbitref;
+/* L240: */
+	}
+
+    }
+
+/*     WRITE(KFILDO,241)CFEED,LBITREF */
+/* 241  FORMAT(A1,/' *****************************************' */
+/*    1          /' THE GROUP WIDTHS LBIT( ) AFTER REMOVING REFERENCE ', */
+/*    2             I8, */
+/*    3          /' *****************************************') */
+/*     WRITE(KFILDO,242) (LBIT(J),J=1,MIN(LX,100)) */
+/* 242  FORMAT(/' '20I6) */
+
+    *jbit = 0;
+
+    i__1 = *lx;
+    for (k = 1; k <= i__1; ++k) {
+L310:
+	if (lbit[k] < ibxx2[*jbit]) {
+	    goto L320;
+	}
+	++(*jbit);
+	goto L310;
+L320:
+	;
+    }
+
+/*        ************************************* */
+
+/*        CALCULATE KBIT, THE NUMBER OF BITS NEEDED TO HOLD THE NUMBER */
+/*        OF VALUES IN THE GROUPS.  BUT FIND AND REMOVE THE */
+/*        REFERENCE FIRST. */
+
+/*        ************************************* */
+
+/*     WRITE(KFILDO,321)CFEED,LX */
+/* 321  FORMAT(A1,/' *****************************************' */
+/*    1          /' THE GROUP SIZES NOV( ) FOR ',I8,' GROUPS' */
+/*    2          /' *****************************************') */
+/*     WRITE(KFILDO,322) (NOV(J),J=1,MIN(LX,100)) */
+/* 322  FORMAT(/' '20I6) */
+
+    *novref = nov[1];
+
+    i__1 = *lx;
+    for (k = 1; k <= i__1; ++k) {
+	if (nov[k] < *novref) {
+	    *novref = nov[k];
+	}
+/* L400: */
+    }
+
+    if (*novref > 0) {
+
+	i__1 = *lx;
+	for (k = 1; k <= i__1; ++k) {
+	    nov[k] -= *novref;
+/* L405: */
+	}
+
+    }
+
+/*     WRITE(KFILDO,406)CFEED,NOVREF */
+/* 406  FORMAT(A1,/' *****************************************' */
+/*    1          /' THE GROUP SIZES NOV( ) AFTER REMOVING REFERENCE ',I8, */
+/*    2          /' *****************************************') */
+/*     WRITE(KFILDO,407) (NOV(J),J=1,MIN(LX,100)) */
+/* 407  FORMAT(/' '20I6) */
+/*     WRITE(KFILDO,408)CFEED */
+/* 408  FORMAT(A1,/' *****************************************' */
+/*    1          /' THE GROUP REFERENCES JMIN( )' */
+/*    2          /' *****************************************') */
+/*     WRITE(KFILDO,409) (JMIN(J),J=1,MIN(LX,100)) */
+/* 409  FORMAT(/' '20I6) */
+
+    *kbit = 0;
+
+    i__1 = *lx;
+    for (k = 1; k <= i__1; ++k) {
+L410:
+	if (nov[k] < ibxx2[*kbit]) {
+	    goto L420;
+	}
+	++(*kbit);
+	goto L410;
+L420:
+	;
+    }
+
+/*        DETERMINE WHETHER THE GROUP SIZES SHOULD BE REDUCED */
+/*        FOR SPACE EFFICIENCY. */
+
+    if (ired == 0) {
+	reduce(kfildo, &jmin[1], &jmax[1], &lbit[1], &nov[1], lx, ndg, ibit, 
+		jbit, kbit, novref, ibxx2, ier);
+
+	if (*ier == 714 || *ier == 715) {
+/*              REDUCE HAS ABORTED.  REEXECUTE PACK_GP WITHOUT REDUCE. */
+/*              PROVIDE FOR A NON FATAL RETURN FROM REDUCE. */
+	    iersav = *ier;
+	    ired = 1;
+	    *ier = 0;
+	    goto L102;
+	}
+
+    }
+
+    if ( misslx != 0 ) {
+         free(misslx);
+         misslx=0;
+    }
+/*     CALL TIMPR(KFILDO,KFILDO,'END   PACK_GP        ') */
+    if (iersav != 0) {
+	*ier = iersav;
+	return 0;
+    }
+
+/* 900  IF(IER.NE.0)RETURN1 */
+
+L900:
+    if ( misslx != 0 ) free(misslx);
+    return 0;
+} /* pack_gp__ */
+
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pdstemplates.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pdstemplates.c
new file mode 100755
index 0000000..5beafb6
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pdstemplates.c
@@ -0,0 +1,268 @@
+#include <stdlib.h>
+#include "grib2.h"
+#include "pdstemplates.h"
+
+g2int getpdsindex(g2int number)
+///$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    getpdsindex
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2001-06-28
+//
+// ABSTRACT: This function returns the index of specified Product
+//   Definition Template 4.NN (NN=number) in array templates.
+//
+// PROGRAM HISTORY LOG:
+// 2001-06-28  Gilbert
+//
+// USAGE:    index=getpdsindex(number)
+//   INPUT ARGUMENT LIST:
+//     number   - NN, indicating the number of the Product Definition
+//                Template 4.NN that is being requested.
+//
+// RETURNS:  Index of PDT 4.NN in array templates, if template exists.
+//           = -1, otherwise.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$/
+{
+           g2int j,getpdsindex=-1;
+
+           for (j=0;j<MAXPDSTEMP;j++) {
+              if (number == templatespds[j].template_num) {
+                 getpdsindex=j;
+                 return(getpdsindex);
+              }
+           }
+
+           return(getpdsindex);
+}
+
+
+template *getpdstemplate(g2int number)
+///$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    getpdstemplate 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2000-05-11
+//
+// ABSTRACT: This subroutine returns PDS template information for a 
+//   specified Product Definition Template 4.NN.
+//   The number of entries in the template is returned along with a map
+//   of the number of octets occupied by each entry.  Also, a flag is
+//   returned to indicate whether the template would need to be extended.
+//
+// PROGRAM HISTORY LOG:
+// 2000-05-11  Gilbert
+//
+// USAGE:    CALL getpdstemplate(number)
+//   INPUT ARGUMENT LIST:
+//     number   - NN, indicating the number of the Product Definition 
+//                Template 4.NN that is being requested.
+//
+//   RETURN VALUE:
+//        - Pointer to the returned template struct.
+//          Returns NULL pointer, if template not found.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$/
+{
+           g2int index;
+           template *new;
+
+           index=getpdsindex(number);
+
+           if (index != -1) {
+              new=(template *)malloc(sizeof(template));
+              new->type=4;
+              new->num=templatespds[index].template_num;
+              new->maplen=templatespds[index].mappdslen;
+              new->needext=templatespds[index].needext;
+              new->map=(g2int *)templatespds[index].mappds;
+              new->extlen=0;
+              new->ext=0;        //NULL
+              return(new);
+           }
+           else {
+             printf("getpdstemplate: PDS Template 4.%d not defined.\n",(int)number);
+             return(0);        //NULL
+           }
+
+         return(0);        //NULL
+}
+         
+        
+template *extpdstemplate(g2int number,g2int *list)
+///$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    extpdstemplate 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2000-05-11
+//
+// ABSTRACT: This subroutine generates the remaining octet map for a
+//   given Product Definition Template, if required.  Some Templates can
+//   vary depending on data values given in an earlier part of the 
+//   Template, and it is necessary to know some of the earlier entry
+//   values to generate the full octet map of the Template.
+//
+// PROGRAM HISTORY LOG:
+// 2000-05-11  Gilbert
+//
+// USAGE:    CALL extpdstemplate(number,list)
+//   INPUT ARGUMENT LIST:
+//     number   - NN, indicating the number of the Product Definition 
+//                Template 4.NN that is being requested.
+//     list()   - The list of values for each entry in the 
+//                the Product Definition Template 4.NN.
+//
+//   RETURN VALUE:
+//        - Pointer to the returned template struct.
+//          Returns NULL pointer, if template not found.
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$
+{
+           template *new;
+           g2int index,i,j,k,l;
+
+           index=getpdsindex(number);
+           if (index == -1) return(0);
+
+           new=getpdstemplate(number);
+
+           if ( ! new->needext ) return(new);
+
+           if ( number == 3 ) {
+              new->extlen=list[26];
+              new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+              for (i=0;i<new->extlen;i++) {
+                 new->ext[i]=1;
+              }
+           }
+           else if ( number == 4 ) {
+              new->extlen=list[25];
+              new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+              for (i=0;i<new->extlen;i++) {
+                 new->ext[i]=1;
+              }
+           }
+           else if ( number == 8 ) {
+              if ( list[21] > 1 ) {
+                 new->extlen=(list[21]-1)*6;
+                 new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+                 for (j=2;j<=list[21];j++) {
+                    l=(j-2)*6;
+                    for (k=0;k<6;k++) {
+                       new->ext[l+k]=new->map[23+k];
+                    }
+                 }
+              }
+           }
+           else if ( number == 9 ) {
+              if ( list[28] > 1 ) {
+                 new->extlen=(list[28]-1)*6;
+                 new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+                 for (j=2;j<=list[28];j++) {
+                    l=(j-2)*6;
+                    for (k=0;k<6;k++) {
+                       new->ext[l+k]=new->map[30+k];
+                    }
+                 }
+              }
+           }
+           else if ( number == 10 ) {
+              if ( list[22] > 1 ) {
+                 new->extlen=(list[22]-1)*6;
+                 new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+                 for (j=2;j<=list[22];j++) {
+                    l=(j-2)*6;
+                    for (k=0;k<6;k++) {
+                       new->ext[l+k]=new->map[24+k];
+                    }
+                 }
+              }
+           }
+           else if ( number == 11 ) {
+              if ( list[24] > 1 ) {
+                 new->extlen=(list[24]-1)*6;
+                 new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+                 for (j=2;j<=list[24];j++) {
+                    l=(j-2)*6;
+                    for (k=0;k<6;k++) {
+                       new->ext[l+k]=new->map[26+k];
+                    }
+                 }
+              }
+           }
+           else if ( number == 12 ) {
+              if ( list[23] > 1 ) {
+                 new->extlen=(list[23]-1)*6;
+                 new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+                 for (j=2;j<=list[23];j++) {
+                    l=(j-2)*6;
+                    for (k=0;k<6;k++) {
+                       new->ext[l+k]=new->map[25+k];
+                    }
+                 }
+              }
+           }
+           else if ( number == 13 ) {
+              new->extlen=((list[37]-1)*6)+list[26];
+              new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+              if ( list[37] > 1 ) {
+                 for (j=2;j<=list[37];j++) {
+                    l=(j-2)*6;
+                    for (k=0;k<6;k++) {
+                       new->ext[l+k]=new->map[39+k];
+                    }
+                 }
+              }
+              l=(list[37]-1)*6;
+              if ( l<0 ) l=0;
+              for (i=0;i<list[26];i++) {
+                new->ext[l+i]=1;
+              }
+           }
+           else if ( number == 14 ) {
+              new->extlen=((list[36]-1)*6)+list[25];
+              new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+              if ( list[36] > 1 ) {
+                 for (j=2;j<=list[36];j++) {
+                    l=(j-2)*6;
+                    for (k=0;k<6;k++) {
+                       new->ext[l+k]=new->map[38+k];
+                    }
+                 }
+              }
+              l=(list[36]-1)*6;
+              if ( l<0 ) l=0;
+              for (i=0;i<list[25];i++) {
+                new->ext[l+i]=1;
+              }
+           }
+           else if ( number == 30 ) {
+              new->extlen=list[4]*5;
+              new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
+              for (i=0;i<list[4];i++) {
+                 l=i*5;
+                 new->ext[l]=2;
+                 new->ext[l+1]=2;
+                 new->ext[l+2]=1;
+                 new->ext[l+3]=1;
+                 new->ext[l+4]=4;
+              }
+           }
+           return(new);
+
+}
+
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pdstemplates.h b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pdstemplates.h
new file mode 100755
index 0000000..2dbe012
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pdstemplates.h
@@ -0,0 +1,118 @@
+#ifndef _pdstemplates_H
+#define _pdstemplates_H
+#include "grib2.h"
+
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-26
+//
+// ABSTRACT: This inculde file contains info on all the available 
+//   GRIB2 Product Definition Templates used in Section 4 (PDS).
+//   The information decribing each template is stored in the
+//   pdstemplate structure defined below.
+//
+//   Each Template has three parts: The number of entries in the template
+//   (mappdslen);  A map of the template (mappds), which contains the
+//   number of octets in which to pack each of the template values; and
+//   a logical value (needext) that indicates whether the Template needs 
+//   to be extended.  In some cases the number of entries in a template 
+//   can vary depending upon values specified in the "static" part of 
+//   the template.  ( See Template 4.3 as an example )
+//
+//   NOTE:  Array mappds contains the number of octets in which the 
+//   corresponding template values will be stored.  A negative value in
+//   mappds is used to indicate that the corresponding template entry can
+//   contain negative values.  This information is used later when packing
+//   (or unpacking) the template data values.  Negative data values in GRIB
+//   are stored with the left most bit set to one, and a negative number
+//   of octets value in mappds[] indicates that this possibility should
+//   be considered.  The number of octets used to store the data value
+//   in this case would be the absolute value of the negative value in 
+//   mappds[].
+//  
+// 2005-12-08  Gilbert  -  Allow negative scale factors and limits for
+//                         Templates 4.5 and 4.9
+//
+//$$$
+
+      #define MAXPDSTEMP 23           // maximum number of templates
+      #define MAXPDSMAPLEN 200        // maximum template map length
+
+      struct pdstemplate 
+      {
+          g2int template_num;
+          g2int mappdslen;
+          g2int needext;
+          g2int mappds[MAXPDSMAPLEN];
+      };
+
+      const struct pdstemplate templatespds[MAXPDSTEMP] = {
+             // 4.0: Analysis or Forecast at Horizontal Level/Layer
+             //      at a point in time
+         {0,15,0, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4} },
+             // 4.1: Individual Ensemble Forecast at Horizontal Level/Layer
+             //      at a point in time
+         {1,18,0, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1,1,1} },
+             // 4.2: Derived Fcst based on whole Ensemble at Horiz Level/Layer
+             //      at a point in time
+         {2,17,0, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1,1} },
+             // 4.3: Derived Fcst based on Ensemble cluster over rectangular
+             //      area at Horiz Level/Layer at a point in time
+         {3,31,1, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1,1,1,1,1,1,1,-4,-4,4,4,1,-1,4,-1,4} },
+             // 4.4: Derived Fcst based on Ensemble cluster over circular
+             //      area at Horiz Level/Layer at a point in time
+         {4,30,1, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1,1,1,1,1,1,1,-4,4,4,1,-1,4,-1,4} },
+             // 4.5: Probablility Forecast at Horiz Level/Layer
+             //      at a point in time
+         {5,22,0, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1,1,1,-1,-4,-1,-4} },
+             // 4.6: Percentile Forecast at Horiz Level/Layer
+             //      at a point in time
+         {6,16,0, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1} },
+             // 4.7: Analysis or Forecast Error at Horizontal Level/Layer
+             //      at a point in time
+         {7,15,0, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4} },
+             // 4.8: Ave/Accum/etc... at Horiz Level/Layer
+             //      in a time interval
+         {8,29,1, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,2,1,1,1,1,1,1,4,1,1,1,4,1,4} },
+             // 4.9: Probablility Forecast at Horiz Level/Layer
+             //      in a time interval
+         {9,36,1, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1,1,1,-1,-4,-1,-4,2,1,1,1,1,1,1,4,1,1,1,4,1,4} },
+             // 4.10: Percentile Forecast at Horiz Level/Layer
+             //       in a time interval
+         {10,30,1, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1,2,1,1,1,1,1,1,4,1,1,1,4,1,4} },
+             // 4.11: Individual Ensemble Forecast at Horizontal Level/Layer
+             //       in a time interval
+         {11,32,1, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1,1,1,2,1,1,1,1,1,1,4,1,1,1,4,1,4} },
+             // 4.12: Derived Fcst based on whole Ensemble at Horiz Level/Layer
+             //       in a time interval
+         {12,31,1, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1,1,2,1,1,1,1,1,1,4,1,1,1,4,1,4} },
+             // 4.13: Derived Fcst based on Ensemble cluster over rectangular
+             //       area at Horiz Level/Layer in a time interval
+         {13,45,1, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1,1,1,1,1,1,1,-4,-4,4,4,1,-1,4,-1,4,2,1,1,1,1,1,1,4,1,1,1,4,1,4} },
+             // 4.14: Derived Fcst based on Ensemble cluster over circular
+             //       area at Horiz Level/Layer in a time interval
+         {14,44,1, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,1,1,1,1,1,1,1,-4,4,4,1,-1,4,-1,4,2,1,1,1,1,1,1,4,1,1,1,4,1,4} },
+             // 4.20: Radar Product
+         {20,19,0, {1,1,1,1,1,-4,4,2,4,2,1,1,1,1,1,2,1,3,2} },
+             // 4.30: Satellite Product
+         {30,5,1, {1,1,1,1,1} },
+             // 4.254: CCITT IA5 Character String
+         {254,3,0, {1,1,4} },
+             // 4.1000: Cross section of analysis or forecast
+             //         at a point in time
+         {1000,9,0, {1,1,1,1,1,2,1,1,4} },
+             // 4.1001: Cross section of Ave/Accum/etc... analysis or forecast
+             //         in a time interval
+         {1001,16,0, {1,1,1,1,1,2,1,1,4,4,1,1,1,4,1,4} },
+             // 4.1001: Cross section of Ave/Accum/etc... analysis or forecast
+             //         over latitude or longitude
+         {1002,15,0, {1,1,1,1,1,2,1,1,4,1,1,1,4,4,2} },
+             // 4.1100: Hovmoller-type grid w/ no averaging or other
+             //         statistical processing
+         {1100,15,0, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4} },
+             // 4.1100: Hovmoller-type grid with averaging or other
+             //         statistical processing
+         {1101,22,0, {1,1,1,1,1,2,1,1,4,1,-1,-4,1,-1,-4,4,1,1,1,4,1,4} }
+
+      } ;
+
+
+#endif  /*  _pdstemplates_H  */
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pngpack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pngpack.c
new file mode 100755
index 0000000..f81ee41
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pngpack.c
@@ -0,0 +1,162 @@
+#include <stdlib.h>
+#include <math.h>
+#include "grib2.h"
+
+int enc_png(char *,g2int ,g2int ,g2int ,char *);
+
+void pngpack(g2float *fld,g2int width,g2int height,g2int *idrstmpl,
+             unsigned char *cpack,g2int *lcpack)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    pngpack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2003-08-27
+//
+// ABSTRACT: This subroutine packs up a data field into PNG image format.
+//   After the data field is scaled, and the reference value is subtracted out,
+//   it is treated as a grayscale image and passed to a PNG encoder.
+//   It also fills in GRIB2 Data Representation Template 5.41 or 5.40010 with 
+//   the appropriate values.
+//
+// PROGRAM HISTORY LOG:
+// 2003-08-27  Gilbert
+//
+// USAGE:    pngpack(g2float *fld,g2int width,g2int height,g2int *idrstmpl,
+//                   unsigned char *cpack,g2int *lcpack);
+//   INPUT ARGUMENT LIST:
+//     fld[]    - Contains the data values to pack
+//     width    - number of points in the x direction
+//     height   - number of points in the y direction
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.41 or 5.40010
+//                [0] = Reference value - ignored on input
+//                [1] = Binary Scale Factor
+//                [2] = Decimal Scale Factor
+//                [3] = number of bits for each data value - ignored on input
+//                [4] = Original field type - currently ignored on input
+//                      Data values assumed to be reals.
+//
+//   OUTPUT ARGUMENT LIST: 
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.41 or 5.40010
+//                [0] = Reference value - set by pngpack routine.
+//                [1] = Binary Scale Factor - unchanged from input
+//                [2] = Decimal Scale Factor - unchanged from input
+//                [3] = Number of bits containing each grayscale pixel value
+//                [4] = Original field type - currently set = 0 on output.
+//                      Data values assumed to be reals.
+//     cpack    - The packed data field 
+//     lcpack   - length of packed field cpack.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$
+{
+      g2int  *ifld;
+      static g2float alog2=0.69314718;       //  ln(2.0)
+      g2int  j,nbits,imin,imax,maxdif;
+      g2int  ndpts,nbytes;
+      g2float  bscale,dscale,rmax,rmin,temp;
+      unsigned char *ctemp;
+      
+      ifld=0;
+      ndpts=width*height;
+      bscale=int_power(2.0,-idrstmpl[1]);
+      dscale=int_power(10.0,idrstmpl[2]);
+//
+//  Find max and min values in the data
+//
+      rmax=fld[0];
+      rmin=fld[0];
+      for (j=1;j<ndpts;j++) {
+        if (fld[j] > rmax) rmax=fld[j];
+        if (fld[j] < rmin) rmin=fld[j];
+      }
+      maxdif = (g2int)rint( (rmax-rmin)*dscale*bscale );
+//
+//  If max and min values are not equal, pack up field.
+//  If they are equal, we have a constant field, and the reference
+//  value (rmin) is the value for each point in the field and
+//  set nbits to 0.
+//
+      if (rmin != rmax  &&  maxdif != 0 ) {
+        ifld=(g2int *)malloc(ndpts*sizeof(g2int));
+        //
+        //  Determine which algorithm to use based on user-supplied 
+        //  binary scale factor and number of bits.
+        //
+        if (idrstmpl[1] == 0) {
+           //
+           //  No binary scaling and calculate minumum number of 
+           //  bits in which the data will fit.
+           //
+           imin=(g2int)rint(rmin*dscale);
+           imax=(g2int)rint(rmax*dscale);
+           maxdif=imax-imin;
+           temp=log((double)(maxdif+1))/alog2;
+           nbits=(g2int)ceil(temp);
+           rmin=(g2float)imin;
+           //   scale data
+           for(j=0;j<ndpts;j++)
+             ifld[j]=(g2int)rint(fld[j]*dscale)-imin;
+        }
+        else {
+           //
+           //  Use binary scaling factor and calculate minumum number of 
+           //  bits in which the data will fit.
+           //
+           rmin=rmin*dscale;
+           rmax=rmax*dscale;
+           maxdif=(g2int)rint((rmax-rmin)*bscale);
+           temp=log((double)(maxdif+1))/alog2;
+           nbits=(g2int)ceil(temp);
+           //   scale data
+           for (j=0;j<ndpts;j++)
+             ifld[j]=(g2int)rint(((fld[j]*dscale)-rmin)*bscale);
+        }
+        //
+        //  Pack data into full octets, then do PNG encode.
+        //  and calculate the length of the packed data in bytes
+        //
+        if (nbits <= 8) {
+            nbits=8;
+        }
+        else if (nbits <= 16) {
+            nbits=16;
+        }
+        else if (nbits <= 24) {
+            nbits=24;
+        }
+        else {
+            nbits=32;
+        }
+        nbytes=(nbits/8)*ndpts;
+        ctemp=calloc(nbytes,1);
+        sbits(ctemp,ifld,0,nbits,0,ndpts);
+        //
+        //  Encode data into PNG Format.
+        //
+        *lcpack=(g2int)enc_png((char *)ctemp,width,height,nbits,(char *)cpack);
+        if (*lcpack <= 0) {
+           printf("pngpack: ERROR Packing PNG = %d\n",(int)*lcpack);
+        }
+        free(ctemp);
+
+      }
+      else {
+        nbits=0;
+        *lcpack=0;
+      }
+
+//
+//  Fill in ref value and number of bits in Template 5.0
+//
+      mkieee(&rmin,idrstmpl+0,1);   // ensure reference value is IEEE format
+      idrstmpl[3]=nbits;
+      idrstmpl[4]=0;         // original data were reals
+      if (ifld != 0) free(ifld);
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pngunpack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pngunpack.c
new file mode 100755
index 0000000..407a358
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/pngunpack.c
@@ -0,0 +1,76 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+int dec_png(unsigned char *,g2int *,g2int *,char *);
+
+g2int pngunpack(unsigned char *cpack,g2int len,g2int *idrstmpl,g2int ndpts,
+                g2float *fld)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    pngunpack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2003-08-27
+//
+// ABSTRACT: This subroutine unpacks a data field that was packed into a 
+//   PNG image format
+//   using info from the GRIB2 Data Representation Template 5.41 or 5.40010.
+//
+// PROGRAM HISTORY LOG:
+// 2003-08-27  Gilbert
+//
+// USAGE:    pngunpack(unsigned char *cpack,g2int len,g2int *idrstmpl,g2int ndpts,
+//                     g2float *fld)
+//   INPUT ARGUMENT LIST:
+//     cpack    - The packed data field (character*1 array)
+//     len      - length of packed field cpack().
+//     idrstmpl - Pointer to array of values for Data Representation
+//                Template 5.41 or 5.40010
+//     ndpts    - The number of data values to unpack
+//
+//   OUTPUT ARGUMENT LIST:
+//     fld[]    - Contains the unpacked data values
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$
+{
+
+      g2int  *ifld;
+      g2int  j,nbits,iret,width,height;
+      g2float  ref,bscale,dscale;
+      unsigned char *ctemp;
+
+      rdieee(idrstmpl+0,&ref,1);
+      bscale = int_power(2.0,idrstmpl[1]);
+      dscale = int_power(10.0,-idrstmpl[2]);
+      nbits = idrstmpl[3];
+//
+//  if nbits equals 0, we have a constant field where the reference value
+//  is the data value at each gridpoint
+//
+      if (nbits != 0) {
+
+         ifld=(g2int *)calloc(ndpts,sizeof(g2int));
+         ctemp=(unsigned char *)calloc(ndpts*4,1);
+         if ( ifld == 0 || ctemp == 0) {
+            fprintf(stderr,"Could not allocate space in jpcunpack.\n  Data field NOT upacked.\n");
+            return(1);
+         }
+         iret=(g2int)dec_png(cpack,&width,&height,ctemp);
+         gbits(ctemp,ifld,0,nbits,0,ndpts);
+         for (j=0;j<ndpts;j++) {
+           fld[j]=(((g2float)ifld[j]*bscale)+ref)*dscale;
+         }
+         free(ctemp);
+         free(ifld);
+      }
+      else {
+         for (j=0;j<ndpts;j++) fld[j]=ref;
+      }
+
+      return(0);
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/rdieee.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/rdieee.c
new file mode 100755
index 0000000..35fe338
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/rdieee.c
@@ -0,0 +1,78 @@
+#include "grib2.h"
+
+void rdieee(g2int *rieee,g2float *a,g2int num)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    rdieee 
+//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-25
+//
+// ABSTRACT: This subroutine reads a list of real values in 
+//   32-bit IEEE floating point format.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-25  Gilbert
+//
+// USAGE:    void rdieee(g2int *rieee,g2float *a,g2int num)
+//   INPUT ARGUMENT LIST:
+//     rieee    - g2int array of floating point values in 32-bit IEEE format.
+//     num      - Number of floating point values to convert.
+//
+//   OUTPUT ARGUMENT LIST:      
+//     a        - float array of real values.  a must be allocated with at
+//                least 4*num bytes of memory before calling this function.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$
+{
+
+      g2int  j;
+      g2int  isign,iexp,imant;
+
+      g2float  sign,temp;
+      static g2float  two23,two126;
+      static g2int test=0;
+      g2intu msk1=0x80000000;        // 10000000000000000000000000000000 binary
+      g2int msk2=0x7F800000;         // 01111111100000000000000000000000 binary
+      g2int msk3=0x007FFFFF;         // 00000000011111111111111111111111 binary
+
+      if ( test == 0 ) {
+         two23=(g2float)int_power(2.0,-23);
+         two126=(g2float)int_power(2.0,-126);
+         test=1;
+      }
+
+      for (j=0;j<num;j++) {
+//
+//  Extract sign bit, exponent, and mantissa
+//
+        isign=(rieee[j]&msk1)>>31;
+        iexp=(rieee[j]&msk2)>>23;
+        imant=(rieee[j]&msk3);
+        //printf("SAGieee= %ld %ld %ld\n",isign,iexp,imant);
+
+        sign=1.0;
+        if (isign == 1) sign=-1.0;
+        
+        if ( (iexp > 0) && (iexp < 255) ) {
+          temp=(g2float)int_power(2.0,(iexp-127));
+          a[j]=sign*temp*(1.0+(two23*(g2float)imant));
+        }
+        else if ( iexp == 0 ) {
+          if ( imant != 0 )
+            a[j]=sign*two126*two23*(g2float)imant;
+          else
+            a[j]=sign*0.0;
+          
+        }
+        else if ( iexp == 255 )
+           a[j]=sign*(1E+37);
+
+
+      }
+
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/reduce.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/reduce.c
new file mode 100644
index 0000000..b1c3502
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/reduce.c
@@ -0,0 +1,410 @@
+/* reduce.f -- translated by f2c (version 20031025).
+   You must link the resulting object file with libf2c:
+	on Microsoft Windows system, link with libf2c.lib;
+	on Linux or Unix systems, link with .../path/to/libf2c.a -lm
+	or, if you install libf2c.a in a standard place, with -lf2c -lm
+	-- in that order, at the end of the command line, as in
+		cc *.o -lf2c -lm
+	Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
+
+		http://www.netlib.org/f2c/libf2c.zip
+*/
+
+/*#include "f2c.h"*/
+#include <stdlib.h>
+#include "grib2.h"
+typedef g2int integer;
+typedef g2float real;
+
+/* Subroutine */ int reduce(integer *kfildo, integer *jmin, integer *jmax, 
+	integer *lbit, integer *nov, integer *lx, integer *ndg, integer *ibit,
+	 integer *jbit, integer *kbit, integer *novref, integer *ibxx2, 
+	integer *ier)
+{
+    /* Initialized data */
+
+    static integer ifeed = 12;
+
+    /* System generated locals */
+    integer i__1, i__2;
+
+    /* Local variables */
+    static integer newboxtp, j, l, m, jj, lxn, left;
+    static real pimp;
+    static integer move, novl;
+    static char cfeed[1];
+    static integer nboxj[31], lxnkp, iorigb, ibxx2m1, movmin,
+	     ntotbt[31], ntotpr, newboxt;
+    integer *newbox, *newboxp;
+
+
+/*        NOVEMBER 2001   GLAHN   TDL   GRIB2 */
+/*        MARCH    2002   GLAHN   COMMENT IER = 715 */
+/*        MARCH    2002   GLAHN   MODIFIED TO ACCOMMODATE LX=1 ON ENTRY */
+
+/*        PURPOSE */
+/*            DETERMINES WHETHER THE NUMBER OF GROUPS SHOULD BE */
+/*            INCREASED IN ORDER TO REDUCE THE SIZE OF THE LARGE */
+/*            GROUPS, AND TO MAKE THAT ADJUSTMENT.  BY REDUCING THE */
+/*            SIZE OF THE LARGE GROUPS, LESS BITS MAY BE NECESSARY */
+/*            FOR PACKING THE GROUP SIZES AND ALL THE INFORMATION */
+/*            ABOUT THE GROUPS. */
+
+/*            THE REFERENCE FOR NOV( ) WAS REMOVED IN THE CALLING */
+/*            ROUTINE SO THAT KBIT COULD BE DETERMINED.  THIS */
+/*            FURNISHES A STARTING POINT FOR THE ITERATIONS IN REDUCE. */
+/*            HOWEVER, THE REFERENCE MUST BE CONSIDERED. */
+
+/*        DATA SET USE */
+/*           KFILDO - UNIT NUMBER FOR OUTPUT (PRINT) FILE. (OUTPUT) */
+
+/*        VARIABLES IN CALL SEQUENCE */
+/*              KFILDO = UNIT NUMBER FOR OUTPUT (PRINT) FILE.  (INPUT) */
+/*             JMIN(J) = THE MINIMUM OF EACH GROUP (J=1,LX).  IT IS */
+/*                       POSSIBLE AFTER SPLITTING THE GROUPS, JMIN( ) */
+/*                       WILL NOT BE THE MINIMUM OF THE NEW GROUP. */
+/*                       THIS DOESN'T MATTER; JMIN( ) IS REALLY THE */
+/*                       GROUP REFERENCE AND DOESN'T HAVE TO BE THE */
+/*                       SMALLEST VALUE.  (INPUT/OUTPUT) */
+/*             JMAX(J) = THE MAXIMUM OF EACH GROUP (J=1,LX). */
+/*                       (INPUT/OUTPUT) */
+/*             LBIT(J) = THE NUMBER OF BITS NECESSARY TO PACK EACH GROUP */
+/*                       (J=1,LX).  (INPUT/OUTPUT) */
+/*              NOV(J) = THE NUMBER OF VALUES IN EACH GROUP (J=1,LX). */
+/*                       (INPUT/OUTPUT) */
+/*                  LX = THE NUMBER OF GROUPS.  THIS WILL BE INCREASED */
+/*                       IF GROUPS ARE SPLIT.  (INPUT/OUTPUT) */
+/*                 NDG = THE DIMENSION OF JMIN( ), JMAX( ), LBIT( ), AND */
+/*                       NOV( ).  (INPUT) */
+/*                IBIT = THE NUMBER OF BITS NECESSARY TO PACK THE JMIN(J) */
+/*                       VALUES, J=1,LX.  (INPUT) */
+/*                JBIT = THE NUMBER OF BITS NECESSARY TO PACK THE LBIT(J) */
+/*                       VALUES, J=1,LX.  (INPUT) */
+/*                KBIT = THE NUMBER OF BITS NECESSARY TO PACK THE NOV(J) */
+/*                       VALUES, J=1,LX.  IF THE GROUPS ARE SPLIT, KBIT */
+/*                       IS REDUCED.  (INPUT/OUTPUT) */
+/*              NOVREF = REFERENCE VALUE FOR NOV( ).  (INPUT) */
+/*            IBXX2(J) = 2**J (J=0,30).  (INPUT) */
+/*                 IER = ERROR RETURN.  (OUTPUT) */
+/*                         0 = GOOD RETURN. */
+/*                       714 = PROBLEM IN ALGORITHM.  REDUCE ABORTED. */
+/*                       715 = NGP NOT LARGE ENOUGH.  REDUCE ABORTED. */
+/*           NTOTBT(J) = THE TOTAL BITS USED FOR THE PACKING BITS J */
+/*                       (J=1,30).  (INTERNAL) */
+/*            NBOXJ(J) = NEW BOXES NEEDED FOR THE PACKING BITS J */
+/*                       (J=1,30).  (INTERNAL) */
+/*           NEWBOX(L) = NUMBER OF NEW BOXES (GROUPS) FOR EACH ORIGINAL */
+/*                       GROUP (L=1,LX) FOR THE CURRENT J.  (AUTOMATIC) */
+/*                       (INTERNAL) */
+/*          NEWBOXP(L) = SAME AS NEWBOX( ) BUT FOR THE PREVIOUS J. */
+/*                       THIS ELIMINATES RECOMPUTATION.  (AUTOMATIC) */
+/*                       (INTERNAL) */
+/*               CFEED = CONTAINS THE CHARACTER REPRESENTATION */
+/*                       OF A PRINTER FORM FEED.  (CHARACTER) (INTERNAL) */
+/*               IFEED = CONTAINS THE INTEGER VALUE OF A PRINTER */
+/*                       FORM FEED.  (INTERNAL) */
+/*              IORIGB = THE ORIGINAL NUMBER OF BITS NECESSARY */
+/*                       FOR THE GROUP VALUES.  (INTERNAL) */
+/*        1         2         3         4         5         6         7 X */
+
+/*        NON SYSTEM SUBROUTINES CALLED */
+/*           NONE */
+
+
+/*        NEWBOX( ) AND NEWBOXP( ) were AUTOMATIC ARRAYS. */
+    newbox = (integer *)calloc(*ndg,sizeof(integer));
+    newboxp = (integer *)calloc(*ndg,sizeof(integer));
+
+    /* Parameter adjustments */
+    --nov;
+    --lbit;
+    --jmax;
+    --jmin;
+
+    /* Function Body */
+
+    *ier = 0;
+    if (*lx == 1) {
+	goto L410;
+    }
+/*        IF THERE IS ONLY ONE GROUP, RETURN. */
+
+    *(unsigned char *)cfeed = (char) ifeed;
+
+/*        INITIALIZE NUMBER OF NEW BOXES PER GROUP TO ZERO. */
+
+    i__1 = *lx;
+    for (l = 1; l <= i__1; ++l) {
+	newbox[l - 1] = 0;
+/* L110: */
+    }
+
+/*        INITIALIZE NUMBER OF TOTAL NEW BOXES PER J TO ZERO. */
+
+    for (j = 1; j <= 31; ++j) {
+	ntotbt[j - 1] = 999999999;
+	nboxj[j - 1] = 0;
+/* L112: */
+    }
+
+    iorigb = (*ibit + *jbit + *kbit) * *lx;
+/*        IBIT = BITS TO PACK THE JMIN( ). */
+/*        JBIT = BITS TO PACK THE LBIT( ). */
+/*        KBIT = BITS TO PACK THE NOV( ). */
+/*        LX = NUMBER OF GROUPS. */
+    ntotbt[*kbit - 1] = iorigb;
+/*           THIS IS THE VALUE OF TOTAL BITS FOR THE ORIGINAL LX */
+/*           GROUPS, WHICH REQUIRES KBITS TO PACK THE GROUP */
+/*           LENGHTS.  SETTING THIS HERE MAKES ONE LESS LOOPS */
+/*           NECESSARY BELOW. */
+
+/*        COMPUTE BITS NOW USED FOR THE PARAMETERS DEFINED. */
+
+/*        DETERMINE OTHER POSSIBILITES BY INCREASING LX AND DECREASING */
+/*        NOV( ) WITH VALUES GREATER THAN THRESHOLDS.  ASSUME A GROUP IS */
+/*        SPLIT INTO 2 OR MORE GROUPS SO THAT KBIT IS REDUCED WITHOUT */
+/*        CHANGING IBIT OR JBIT. */
+
+    jj = 0;
+
+/* Computing MIN */
+    i__1 = 30, i__2 = *kbit - 1;
+    /*for (j = min(i__1,i__2); j >= 2; --j) {*/
+    for (j = (i__1 < i__2) ? i__1 : i__2; j >= 2; --j) {
+/*           VALUES GE KBIT WILL NOT REQUIRE SPLITS.  ONCE THE TOTAL */
+/*           BITS START INCREASING WITH DECREASING J, STOP.  ALSO, THE */
+/*           NUMBER OF BITS REQUIRED IS KNOWN FOR KBITS = NTOTBT(KBIT). */
+
+	newboxt = 0;
+
+	i__1 = *lx;
+	for (l = 1; l <= i__1; ++l) {
+
+	    if (nov[l] < ibxx2[j]) {
+		newbox[l - 1] = 0;
+/*                 NO SPLITS OR NEW BOXES. */
+		goto L190;
+	    } else {
+		novl = nov[l];
+
+		m = (nov[l] - 1) / (ibxx2[j] - 1) + 1;
+/*                 M IS FOUND BY SOLVING THE EQUATION BELOW FOR M: */
+/*                 (NOV(L)+M-1)/M LT IBXX2(J) */
+/*                 M GT (NOV(L)-1)/(IBXX2(J)-1) */
+/*                 SET M = (NOV(L)-1)/(IBXX2(J)-1)+1 */
+L130:
+		novl = (nov[l] + m - 1) / m;
+/*                 THE +M-1 IS NECESSARY.  FOR INSTANCE, 15 WILL FIT */
+/*                 INTO A BOX 4 BITS WIDE, BUT WON'T DIVIDE INTO */
+/*                 TWO BOXES 3 BITS WIDE EACH. */
+
+		if (novl < ibxx2[j]) {
+		    goto L185;
+		} else {
+		    ++m;
+/* ***                  WRITE(KFILDO,135)L,NOV(L),NOVL,M,J,IBXX2(J) */
+/* *** 135              FORMAT(/' AT 135--L,NOV(L),NOVL,M,J,IBXX2(J)',6I10) */
+		    goto L130;
+		}
+
+/*                 THE ABOVE DO LOOP WILL NEVER COMPLETE. */
+	    }
+
+L185:
+	    newbox[l - 1] = m - 1;
+	    newboxt = newboxt + m - 1;
+L190:
+	    ;
+	}
+
+	nboxj[j - 1] = newboxt;
+	ntotpr = ntotbt[j];
+	ntotbt[j - 1] = (*ibit + *jbit) * (*lx + newboxt) + j * (*lx + 
+		newboxt);
+
+	if (ntotbt[j - 1] >= ntotpr) {
+	    jj = j + 1;
+/*              THE PLUS IS USED BECAUSE J DECREASES PER ITERATION. */
+	    goto L250;
+	} else {
+
+/*              SAVE THE TOTAL NEW BOXES AND NEWBOX( ) IN CASE THIS */
+/*              IS THE J TO USE. */
+
+	    newboxtp = newboxt;
+
+	    i__1 = *lx;
+	    for (l = 1; l <= i__1; ++l) {
+		newboxp[l - 1] = newbox[l - 1];
+/* L195: */
+	    }
+
+/*           WRITE(KFILDO,197)NEWBOXT,IBXX2(J) */
+/* 197        FORMAT(/' *****************************************' */
+/*    1             /' THE NUMBER OF NEWBOXES PER GROUP OF THE TOTAL', */
+/*    2              I10,' FOR GROUP MAXSIZE PLUS 1 ='I10 */
+/*    3             /' *****************************************') */
+/*           WRITE(KFILDO,198) (NEWBOX(L),L=1,LX) */
+/* 198        FORMAT(/' '20I6/(' '20I6)) */
+	}
+
+/* 205     WRITE(KFILDO,209)KBIT,IORIGB */
+/* 209     FORMAT(/' ORIGINAL BITS WITH KBIT OF',I5,' =',I10) */
+/*        WRITE(KFILDO,210)(N,N=2,10),(IBXX2(N),N=2,10), */
+/*    1                    (NTOTBT(N),N=2,10),(NBOXJ(N),N=2,10), */
+/*    2                    (N,N=11,20),(IBXX2(N),N=11,20), */
+/*    3                    (NTOTBT(N),N=11,20),(NBOXJ(N),N=11,20), */
+/*    4                    (N,N=21,30),(IBXX2(N),N=11,20), */
+/*    5                    (NTOTBT(N),N=21,30),(NBOXJ(N),N=21,30) */
+/* 210     FORMAT(/' THE TOTAL BYTES FOR MAXIMUM GROUP LENGTHS BY ROW'// */
+/*    1      '   J         = THE NUMBER OF BITS PER GROUP LENGTH'/ */
+/*    2      '   IBXX2(J)  = THE MAXIMUM GROUP LENGTH PLUS 1 FOR THIS J'/ */
+/*    3      '   NTOTBT(J) = THE TOTAL BITS FOR THIS J'/ */
+/*    4      '   NBOXJ(J)  = THE NEW GROUPS FOR THIS J'/ */
+/*    5      4(/10X,9I10)/4(/10I10)/4(/10I10)) */
+
+/* L200: */
+    }
+
+L250:
+    pimp = (iorigb - ntotbt[jj - 1]) / (real) iorigb * 100.f;
+/*     WRITE(KFILDO,252)PIMP,KBIT,JJ */
+/* 252  FORMAT(/' PERCENT IMPROVEMENT =',F6.1, */
+/*    1        ' BY DECREASING GROUP LENGTHS FROM',I4,' TO',I4,' BITS') */
+    if (pimp >= 2.f) {
+
+/*        WRITE(KFILDO,255)CFEED,NEWBOXTP,IBXX2(JJ) */
+/* 255     FORMAT(A1,/' *****************************************' */
+/*    1             /' THE NUMBER OF NEWBOXES PER GROUP OF THE TOTAL', */
+/*    2             I10,' FOR GROUP MAXSIZE PLUS 1 ='I10 */
+/*    2             /' *****************************************') */
+/*        WRITE(KFILDO,256) (NEWBOXP(L),L=1,LX) */
+/* 256     FORMAT(/' '20I6) */
+
+/*           ADJUST GROUP LENGTHS FOR MAXIMUM LENGTH OF JJ BITS. */
+/*           THE MIN PER GROUP AND THE NUMBER OF BITS REQUIRED */
+/*           PER GROUP ARE NOT CHANGED.  THIS MAY MEAN THAT A */
+/*           GROUP HAS A MIN (OR REFERENCE) THAT IS NOT ZERO. */
+/*           THIS SHOULD NOT MATTER TO THE UNPACKER. */
+
+	lxnkp = *lx + newboxtp;
+/*           LXNKP = THE NEW NUMBER OF BOXES */
+
+	if (lxnkp > *ndg) {
+/*              DIMENSIONS NOT LARGE ENOUGH.  PROBABLY AN ERROR */
+/*              OF SOME SORT.  ABORT. */
+/*           WRITE(KFILDO,257)NDG,LXNPK */
+/*        1         2         3         4         5         6         7 X */
+/* 257        FORMAT(/' DIMENSIONS OF JMIN, ETC. IN REDUCE =',I8, */
+/*    1              ' NOT LARGE ENOUGH FOR THE EXPANDED NUMBER OF', */
+/*    2              ' GROUPS =',I8,'.  ABORT REDUCE.') */
+	    *ier = 715;
+	    goto L410;
+/*              AN ABORT CAUSES THE CALLING PROGRAM TO REEXECUTE */
+/*              WITHOUT CALLING REDUCE. */
+	}
+
+	lxn = lxnkp;
+/*           LXN IS THE NUMBER OF THE BOX IN THE NEW SERIES BEING */
+/*           FILLED.  IT DECREASES PER ITERATION. */
+	ibxx2m1 = ibxx2[jj] - 1;
+/*           IBXX2M1 IS THE MAXIMUM NUMBER OF VALUES PER GROUP. */
+
+	for (l = *lx; l >= 1; --l) {
+
+/*              THE VALUES IS NOV( ) REPRESENT THOSE VALUES + NOVREF. */
+/*              WHEN VALUES ARE MOVED TO ANOTHER BOX, EACH VALUE */
+/*              MOVED TO A NEW BOX REPRESENTS THAT VALUE + NOVREF. */
+/*              THIS HAS TO BE CONSIDERED IN MOVING VALUES. */
+
+	    if (newboxp[l - 1] * (ibxx2m1 + *novref) + *novref > nov[l] + *
+		    novref) {
+/*                 IF THE ABOVE TEST IS MET, THEN MOVING IBXX2M1 VALUES */
+/*                 FOR ALL NEW BOXES WILL LEAVE A NEGATIVE NUMBER FOR */
+/*                 THE LAST BOX.  NOT A TOLERABLE SITUATION. */
+		movmin = (nov[l] - newboxp[l - 1] * *novref) / newboxp[l - 1];
+		left = nov[l];
+/*                 LEFT = THE NUMBER OF VALUES TO MOVE FROM THE ORIGINAL */
+/*                 BOX TO EACH NEW BOX EXCEPT THE LAST.  LEFT IS THE */
+/*                 NUMBER LEFT TO MOVE. */
+	    } else {
+		movmin = ibxx2m1;
+/*                 MOVMIN VALUES CAN BE MOVED FOR EACH NEW BOX. */
+		left = nov[l];
+/*                 LEFT IS THE NUMBER OF VALUES LEFT TO MOVE. */
+	    }
+
+	    if (newboxp[l - 1] > 0) {
+		if ((movmin + *novref) * newboxp[l - 1] + *novref <= nov[l] + 
+			*novref && (movmin + *novref) * (newboxp[l - 1] + 1) 
+			>= nov[l] + *novref) {
+		    goto L288;
+		} else {
+/* ***D                 WRITE(KFILDO,287)L,MOVMIN,NOVREF,NEWBOXP(L),NOV(L) */
+/* ***D287              FORMAT(/' AT 287 IN REDUCE--L,MOVMIN,NOVREF,', */
+/* ***D    1                    'NEWBOXP(L),NOV(L)',5I12 */
+/* ***D    2                    ' REDUCE ABORTED.') */
+/*              WRITE(KFILDO,2870) */
+/* 2870          FORMAT(/' AN ERROR IN REDUCE ALGORITHM.  ABORT REDUCE.') */
+		    *ier = 714;
+		    goto L410;
+/*                 AN ABORT CAUSES THE CALLING PROGRAM TO REEXECUTE */
+/*                 WITHOUT CALLING REDUCE. */
+		}
+
+	    }
+
+L288:
+	    i__1 = newboxp[l - 1] + 1;
+	    for (j = 1; j <= i__1; ++j) {
+		/*move = min(movmin,left);*/
+		move = (movmin < left) ? movmin : left;
+		jmin[lxn] = jmin[l];
+		jmax[lxn] = jmax[l];
+		lbit[lxn] = lbit[l];
+		nov[lxn] = move;
+		--lxn;
+		left -= move + *novref;
+/*                 THE MOVE OF MOVE VALUES REALLY REPRESENTS A MOVE OF */
+/*                 MOVE + NOVREF VALUES. */
+/* L290: */
+	    }
+
+	    if (left != -(*novref)) {
+/* ***               WRITE(KFILDO,292)L,LXN,MOVE,LXNKP,IBXX2(JJ),LEFT,NOV(L), */
+/* ***     1                          MOVMIN */
+/* *** 292           FORMAT(' AT 292 IN REDUCE--L,LXN,MOVE,LXNKP,', */
+/* ***     1                'IBXX2(JJ),LEFT,NOV(L),MOVMIN'/8I12) */
+	    }
+
+/* L300: */
+	}
+
+	*lx = lxnkp;
+/*           LX IS NOW THE NEW NUMBER OF GROUPS. */
+	*kbit = jj;
+/*           KBIT IS NOW THE NEW NUMBER OF BITS REQUIRED FOR PACKING */
+/*           GROUP LENGHTS. */
+    }
+
+/*     WRITE(KFILDO,406)CFEED,LX */
+/* 406  FORMAT(A1,/' *****************************************' */
+/*    1          /' THE GROUP SIZES NOV( ) AFTER REDUCTION IN SIZE', */
+/*    2           ' FOR'I10,' GROUPS', */
+/*    3          /' *****************************************') */
+/*     WRITE(KFILDO,407) (NOV(J),J=1,LX) */
+/* 407  FORMAT(/' '20I6) */
+/*     WRITE(KFILDO,408)CFEED,LX */
+/* 408  FORMAT(A1,/' *****************************************' */
+/*    1          /' THE GROUP MINIMA JMIN( ) AFTER REDUCTION IN SIZE', */
+/*    2           ' FOR'I10,' GROUPS', */
+/*    3          /' *****************************************') */
+/*     WRITE(KFILDO,409) (JMIN(J),J=1,LX) */
+/* 409  FORMAT(/' '20I6) */
+
+L410:
+    if ( newbox != 0 ) free(newbox);
+    if ( newboxp != 0 ) free(newboxp);
+    return 0;
+} /* reduce_ */
+
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/seekgb.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/seekgb.c
new file mode 100755
index 0000000..b1fb9b7
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/seekgb.c
@@ -0,0 +1,80 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+void seekgb(FILE *lugb,g2int iseek,g2int mseek,g2int *lskip,g2int *lgrib)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//
+// SUBPROGRAM: seekgb         Searches a file for the next GRIB message.
+//   PRGMMR: Gilbert          ORG: W/NP11      DATE: 2002-10-28
+//
+// ABSTRACT: This subprogram searches a file for the next GRIB Message.
+//   The search is done starting at byte offset iseek of the file referenced 
+//   by lugb for mseek bytes at a time.
+//   If found, the starting position and length of the message are returned
+//   in lskip and lgrib, respectively.
+//   The search is terminated when an EOF or I/O error is encountered.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-28  GILBERT   Modified from Iredell's skgb subroutine
+//
+// USAGE:    seekgb(FILE *lugb,g2int iseek,g2int mseek,int *lskip,int *lgrib)
+//   INPUT ARGUMENTS:
+//     lugb       - FILE pointer for the file to search.  File must be
+//                  opened before this routine is called.
+//     iseek      - number of bytes in the file to skip before search
+//     mseek      - number of bytes to search at a time
+//   OUTPUT ARGUMENTS:
+//     lskip      - number of bytes to skip from the beggining of the file
+//                  to where the GRIB message starts
+//     lgrib      - number of bytes in message (set to 0, if no message found)
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//
+//$$$
+{
+      g2int  ret;
+      g2int k,k4,ipos,nread,lim,start,vers,end,lengrib;
+      unsigned char *cbuf;
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+      *lgrib=0;
+      cbuf=(unsigned char *)malloc(mseek);
+      nread=mseek;
+      ipos=iseek;
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+//  LOOP UNTIL GRIB MESSAGE IS FOUND
+
+      while (*lgrib==0 && nread==mseek) {
+
+//  READ PARTIAL SECTION
+
+        ret=fseek(lugb,ipos,SEEK_SET);
+        nread=fread(cbuf,sizeof(unsigned char),mseek,lugb);
+        lim=nread-8;
+
+//  LOOK FOR 'GRIB...' IN PARTIAL SECTION
+
+        for (k=0;k<lim;k++) {
+          gbit(cbuf,&start,(k+0)*8,4*8);
+          gbit(cbuf,&vers,(k+7)*8,1*8);
+          if (start==1196575042 && (vers==1 || vers==2)) {
+//  LOOK FOR '7777' AT END OF GRIB MESSAGE
+            if (vers == 1) gbit(cbuf,&lengrib,(k+4)*8,3*8);
+            if (vers == 2) gbit(cbuf,&lengrib,(k+12)*8,4*8);
+            ret=fseek(lugb,ipos+k+lengrib-4,SEEK_SET);
+            k4=fread(&end,sizeof(g2int),1,lugb);
+            if (k4 == 1 && end == 926365495) {      //GRIB message found
+                *lskip=ipos+k;
+                *lgrib=lengrib;
+                break;
+            }
+          }
+        }
+        ipos=ipos+lim;
+      }
+
+      free(cbuf);
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/simpack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/simpack.c
new file mode 100755
index 0000000..da389e7
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/simpack.c
@@ -0,0 +1,181 @@
+#include <stdlib.h>
+#include <math.h>
+#include "grib2.h"
+
+
+void simpack(g2float *fld,g2int ndpts,g2int *idrstmpl,unsigned char *cpack,g2int *lcpack)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    simpack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2002-11-06
+//
+// ABSTRACT: This subroutine packs up a data field using the simple
+//   packing algorithm as defined in the GRIB2 documention.  It
+//   also fills in GRIB2 Data Representation Template 5.0 with the
+//   appropriate values.
+//
+// PROGRAM HISTORY LOG:
+// 2002-11-06  Gilbert
+//
+// USAGE:    CALL simpack(fld,ndpts,idrstmpl,cpack,lcpack)
+//   INPUT ARGUMENT LIST:
+//     fld[]    - Contains the data values to pack
+//     ndpts    - The number of data values in array fld[]
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.0
+//                [0] = Reference value - ignored on input
+//                [1] = Binary Scale Factor
+//                [2] = Decimal Scale Factor
+//                [3] = Number of bits used to pack data, if value is
+//                      > 0 and  <= 31.
+//                      If this input value is 0 or outside above range
+//                      then the num of bits is calculated based on given 
+//                      data and scale factors.
+//                [4] = Original field type - currently ignored on input
+//                      Data values assumed to be reals.
+//
+//   OUTPUT ARGUMENT LIST: 
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.0
+//                [0] = Reference value - set by simpack routine.
+//                [1] = Binary Scale Factor - unchanged from input
+//                [2] = Decimal Scale Factor - unchanged from input
+//                [3] = Number of bits used to pack data, unchanged from 
+//                      input if value is between 0 and 31.
+//                      If this input value is 0 or outside above range
+//                      then the num of bits is calculated based on given 
+//                      data and scale factors.
+//                [4] = Original field type - currently set = 0 on output.
+//                      Data values assumed to be reals.
+//     cpack    - The packed data field
+//     lcpack   - length of packed field starting at cpack.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$
+{
+
+      static g2int zero=0;
+      g2int  *ifld;
+      g2int  j,nbits,imin,imax,maxdif,nbittot,left;
+      g2float  bscale,dscale,rmax,rmin,temp;
+      double maxnum;
+      static g2float alog2=0.69314718;       //  ln(2.0)
+      
+      bscale=int_power(2.0,-idrstmpl[1]);
+      dscale=int_power(10.0,idrstmpl[2]);
+      if (idrstmpl[3] <= 0 || idrstmpl[3] > 31)
+         nbits=0;
+      else
+         nbits=idrstmpl[3];
+//
+//  Find max and min values in the data
+//
+      rmax=fld[0];
+      rmin=fld[0];
+      for (j=1;j<ndpts;j++) {
+        if (fld[j] > rmax) rmax=fld[j];
+        if (fld[j] < rmin) rmin=fld[j];
+      }
+     
+      ifld=calloc(ndpts,sizeof(g2int));
+//
+//  If max and min values are not equal, pack up field.
+//  If they are equal, we have a constant field, and the reference
+//  value (rmin) is the value for each point in the field and
+//  set nbits to 0.
+//
+      if (rmin != rmax) {
+        //
+        //  Determine which algorithm to use based on user-supplied 
+        //  binary scale factor and number of bits.
+        //
+        if (nbits==0 && idrstmpl[1]==0) {
+           //
+           //  No binary scaling and calculate minumum number of 
+           //  bits in which the data will fit.
+           //
+           imin=(g2int)rint(rmin*dscale);
+           imax=(g2int)rint(rmax*dscale);
+           maxdif=imax-imin;
+           temp=log((double)(maxdif+1))/alog2;
+           nbits=(g2int)ceil(temp);
+           rmin=(g2float)imin;
+           //   scale data
+           for(j=0;j<ndpts;j++)
+             ifld[j]=(g2int)rint(fld[j]*dscale)-imin;
+        }
+        else if (nbits!=0 && idrstmpl[1]==0) {
+           //
+           //  Use minimum number of bits specified by user and
+           //  adjust binary scaling factor to accomodate data.
+           //
+           rmin=rmin*dscale;
+           rmax=rmax*dscale;
+           maxnum=int_power(2.0,nbits)-1;
+           temp=log(maxnum/(rmax-rmin))/alog2;
+           idrstmpl[1]=(g2int)ceil(-1.0*temp);
+           bscale=int_power(2.0,-idrstmpl[1]);
+           //   scale data
+           for (j=0;j<ndpts;j++)
+             ifld[j]=(g2int)rint(((fld[j]*dscale)-rmin)*bscale);
+        }
+        else if (nbits==0 && idrstmpl[1]!=0) {
+           //
+           //  Use binary scaling factor and calculate minumum number of 
+           //  bits in which the data will fit.
+           //
+           rmin=rmin*dscale;
+           rmax=rmax*dscale;
+           maxdif=(g2int)rint((rmax-rmin)*bscale);
+           temp=log((double)(maxdif+1))/alog2;
+           nbits=(g2int)ceil(temp);
+           //   scale data
+           for (j=0;j<ndpts;j++)
+             ifld[j]=(g2int)rint(((fld[j]*dscale)-rmin)*bscale);
+        }
+        else if (nbits!=0 && idrstmpl[1]!=0) {
+           //
+           //  Use binary scaling factor and use minumum number of 
+           //  bits specified by user.   Dangerous - may loose
+           //  information if binary scale factor and nbits not set
+           //  properly by user.
+           //
+           rmin=rmin*dscale;
+           //   scale data
+           for (j=0;j<ndpts;j++)
+             ifld[j]=(g2int)rint(((fld[j]*dscale)-rmin)*bscale);
+        }
+        //
+        //  Pack data, Pad last octet with Zeros, if necessary,
+        //  and calculate the length of the packed data in bytes
+        //
+        sbits(cpack,ifld+0,0,nbits,0,ndpts);
+        nbittot=nbits*ndpts;
+        left=8-(nbittot%8);
+        if (left != 8) {
+          sbit(cpack,&zero,nbittot,left);   // Pad with zeros to fill Octet
+          nbittot=nbittot+left;
+        }
+        *lcpack=nbittot/8;
+      }
+      else {
+        nbits=0;
+        *lcpack=0;
+      }
+
+//
+//  Fill in ref value and number of bits in Template 5.0
+//
+      //printf("SAGmkieee %f\n",rmin);
+      mkieee(&rmin,idrstmpl+0,1);   // ensure reference value is IEEE format
+      //printf("SAGmkieee %ld\n",idrstmpl[0]);
+      idrstmpl[3]=nbits;
+      idrstmpl[4]=0;         // original data were reals
+
+      free(ifld);
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/simunpack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/simunpack.c
new file mode 100755
index 0000000..dfa431b
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/simunpack.c
@@ -0,0 +1,76 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "grib2.h"
+
+
+g2int simunpack(unsigned char *cpack,g2int *idrstmpl,g2int ndpts,g2float *fld)
+////$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    simunpack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2002-10-29
+//
+// ABSTRACT: This subroutine unpacks a data field that was packed using a 
+//   simple packing algorithm as defined in the GRIB2 documention,
+//   using info from the GRIB2 Data Representation Template 5.0.
+//
+// PROGRAM HISTORY LOG:
+// 2002-10-29  Gilbert
+//
+// USAGE:    int simunpack(unsigned char *cpack,g2int *idrstmpl,g2int ndpts,
+//                         g2float *fld)
+//   INPUT ARGUMENT LIST:
+//     cpack    - pointer to the packed data field.
+//     idrstmpl - pointer to the array of values for Data Representation
+//                Template 5.0
+//     ndpts    - The number of data values to unpack
+//
+//   OUTPUT ARGUMENT LIST:
+//     fld      - Contains the unpacked data values.  fld must be allocated
+//                with at least ndpts*sizeof(g2float) bytes before
+//                calling this routine.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$//
+{
+
+      g2int  *ifld;
+      g2int  j,nbits,itype;
+      g2float ref,bscale,dscale;
+
+      
+      rdieee(idrstmpl+0,&ref,1);
+      bscale = int_power(2.0,idrstmpl[1]);
+      dscale = int_power(10.0,-idrstmpl[2]);
+      nbits = idrstmpl[3];
+      itype = idrstmpl[4];
+
+      ifld=(g2int *)calloc(ndpts,sizeof(g2int));
+      if ( ifld == 0 ) {
+         fprintf(stderr,"Could not allocate space in simunpack.\n  Data field NOT upacked.\n");
+         return(1);
+      }
+      
+//
+//  if nbits equals 0, we have a constant field where the reference value
+//  is the data value at each gridpoint
+//
+      if (nbits != 0) {
+         gbits(cpack,ifld,0,nbits,0,ndpts);
+         for (j=0;j<ndpts;j++) {
+           fld[j]=(((g2float)ifld[j]*bscale)+ref)*dscale;
+         }
+      }
+      else {
+         for (j=0;j<ndpts;j++) {
+           fld[j]=ref;
+         }
+      }
+
+      free(ifld);
+      return(0);
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/specpack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/specpack.c
new file mode 100644
index 0000000..66c16f0
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/specpack.c
@@ -0,0 +1,128 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include "grib2.h"
+
+
+void specpack(g2float *fld,g2int ndpts,g2int JJ,g2int KK,g2int MM,
+              g2int *idrstmpl,unsigned char *cpack,g2int *lcpack)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    specpack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2002-12-19
+//
+// ABSTRACT: This subroutine packs a spectral data field using the complex
+//   packing algorithm for spherical harmonic data as 
+//   defined in the GRIB2 Data Representation Template 5.51.
+//
+// PROGRAM HISTORY LOG:
+// 2002-12-19  Gilbert
+//
+// USAGE:    void specpack(g2float *fld,g2int ndpts,g2int JJ,g2int KK,g2int MM,
+//                        g2int *idrstmpl,insigned char *cpack,g2int *lcpack)
+//   INPUT ARGUMENT LIST:
+//     fld[]    - Contains the packed data values
+//     ndpts    - The number of data values to pack
+//     JJ       - J - pentagonal resolution parameter
+//     KK       - K - pentagonal resolution parameter
+//     MM       - M - pentagonal resolution parameter
+//     idrstmpl - Contains the array of values for Data Representation
+//                Template 5.51
+//
+//   OUTPUT ARGUMENT LIST:
+//     cpack    - The packed data field (character*1 array)
+//     lcpack   - length of packed field cpack().
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  IBM SP
+//
+//$$$
+{
+
+      g2int    *ifld,tmplsim[5];
+      g2float  bscale,dscale,*unpk,*tfld;
+      g2float  *pscale,tscale;
+      g2int    Js,Ks,Ms,Ts,Ns,inc,incu,incp,n,Nm,m,ipos;
+
+      bscale = int_power(2.0,-idrstmpl[1]);
+      dscale = int_power(10.0,idrstmpl[2]);
+      Js=idrstmpl[5];
+      Ks=idrstmpl[6];
+      Ms=idrstmpl[7];
+      Ts=idrstmpl[8];
+
+//
+//   Calculate Laplacian scaling factors for each possible wave number.
+//
+      pscale=(g2float *)malloc((JJ+MM)*sizeof(g2float));
+      tscale=(g2float)idrstmpl[4]*1E-6;
+      for (n=Js;n<=JJ+MM;n++)
+           pscale[n]=pow((g2float)(n*(n+1)),tscale);
+//
+//   Separate spectral coeffs into two lists; one to contain unpacked
+//   values within the sub-spectrum Js, Ks, Ms, and the other with values 
+//   outside of the sub-spectrum to be packed.
+//
+      tfld=(g2float *)malloc(ndpts*sizeof(g2float));
+      unpk=(g2float *)malloc(ndpts*sizeof(g2float));
+      ifld=(g2int *)malloc(ndpts*sizeof(g2int));
+      inc=0;
+      incu=0;
+      incp=0;
+      for (m=0;m<=MM;m++) {
+         Nm=JJ;      // triangular or trapezoidal
+         if ( KK == JJ+MM ) Nm=JJ+m;          // rhombodial
+         Ns=Js;      // triangular or trapezoidal
+         if ( Ks == Js+Ms ) Ns=Js+m;          // rhombodial
+         for (n=m;n<=Nm;n++) {
+            if (n<=Ns && m<=Ms) {       // save unpacked value
+               unpk[incu++]=fld[inc++];         // real part
+               unpk[incu++]=fld[inc++];     // imaginary part
+            }
+            else {                       // Save value to be packed and scale
+                                         // Laplacian scale factor
+               tfld[incp++]=fld[inc++]*pscale[n];      // real part
+               tfld[incp++]=fld[inc++]*pscale[n];      // imaginary part
+            }
+         }
+      }
+
+      free(pscale);
+
+      if (incu != Ts) {
+         printf("specpack: Incorrect number of unpacked values %d given:\n",(int)Ts);
+         printf("specpack: Resetting idrstmpl[8] to %d\n",(int)incu);
+         Ts=incu;
+      }
+//
+//  Add unpacked values to the packed data array in 32-bit IEEE format
+//
+      mkieee(unpk,(g2int *)cpack,Ts);
+      ipos=4*Ts;
+//
+//  Scale and pack the rest of the coefficients
+// 
+      tmplsim[1]=idrstmpl[1];
+      tmplsim[2]=idrstmpl[2];
+      tmplsim[3]=idrstmpl[3];
+      simpack(tfld,ndpts-Ts,tmplsim,cpack+ipos,lcpack);
+      *lcpack=(*lcpack)+ipos;
+//
+//  Fill in Template 5.51
+//
+      idrstmpl[0]=tmplsim[0];
+      idrstmpl[1]=tmplsim[1];
+      idrstmpl[2]=tmplsim[2];
+      idrstmpl[3]=tmplsim[3];
+      idrstmpl[8]=Ts;
+      idrstmpl[9]=1;         // Unpacked spectral data is 32-bit IEEE
+
+      free(tfld);
+      free(unpk);
+      free(ifld);
+
+      return;
+}
diff --git a/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/specunpack.c b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/specunpack.c
new file mode 100755
index 0000000..5b35459
--- /dev/null
+++ b/src/modules_io/grid/io_grid_grib2/g2clib-1.0.4/specunpack.c
@@ -0,0 +1,115 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include "grib2.h"
+
+
+g2int specunpack(unsigned char *cpack,g2int *idrstmpl,g2int ndpts,g2int JJ,
+               g2int KK, g2int MM, g2float *fld)
+//$$$  SUBPROGRAM DOCUMENTATION BLOCK
+//                .      .    .                                       .
+// SUBPROGRAM:    specunpack
+//   PRGMMR: Gilbert          ORG: W/NP11    DATE: 2000-06-21
+//
+// ABSTRACT: This subroutine unpacks a spectral data field that was packed 
+//   using the complex packing algorithm for spherical harmonic data as 
+//   defined in the GRIB2 documention,
+//   using info from the GRIB2 Data Representation Template 5.51.
+//
+// PROGRAM HISTORY LOG:
+// 2000-06-21  Gilbert
+//
+// USAGE:    int specunpack(unsigned char *cpack,g2int *idrstmpl,
+//                          g2int ndpts,g2int JJ,g2int KK,g2int MM,g2float *fld)
+//   INPUT ARGUMENT LIST:
+//     cpack    - pointer to the packed data field.
+//     idrstmpl - pointer to the array of values for Data Representation
+//                Template 5.51
+//     ndpts    - The number of data values to unpack (real and imaginary parts)
+//     JJ       - J - pentagonal resolution parameter
+//     KK       - K - pentagonal resolution parameter
+//     MM       - M - pentagonal resolution parameter
+//
+//   OUTPUT ARGUMENT LIST:
+//     fld()    - Contains the unpacked data values.   fld must be allocated
+//                with at least ndpts*sizeof(g2float) bytes before
+//                calling this routine.
+//
+// REMARKS: None
+//
+// ATTRIBUTES:
+//   LANGUAGE: C
+//   MACHINE:  
+//
+//$$$
+{
+
+      g2int  *ifld,j,iofst,nbits;
+      g2float  ref,bscale,dscale,*unpk;
+      g2float  *pscale,tscale;
+      g2int   Js,Ks,Ms,Ts,Ns,Nm,n,m;
+      g2int   inc,incu,incp;
+
+      rdieee(idrstmpl+0,&ref,1);
+      bscale = int_power(2.0,idrstmpl[1]);
+      dscale = int_power(10.0,-idrstmpl[2]);
+      nbits = idrstmpl[3];
+      Js=idrstmpl[5];
+      Ks=idrstmpl[6];
+      Ms=idrstmpl[7];
+      Ts=idrstmpl[8];
+
+      if (idrstmpl[9] == 1) {           // unpacked floats are 32-bit IEEE
+
+         unpk=(g2float *)malloc(ndpts*sizeof(g2float));
+         ifld=(g2int *)malloc(ndpts*sizeof(g2int));
+
+         gbits(cpack,ifld,0,32,0,Ts);
+         iofst=32*Ts;
+         rdieee(ifld,unpk,Ts);          // read IEEE unpacked floats
+         gbits(cpack,ifld,iofst,nbits,0,ndpts-Ts);  // unpack scaled data
+//
+//   Calculate Laplacian scaling factors for each possible wave number.
+//
+         pscale=(g2float *)malloc((JJ+MM+1)*sizeof(g2float));
+         tscale=(g2float)idrstmpl[4]*1E-6;
+         for (n=Js;n<=JJ+MM;n++) 
+              pscale[n]=pow((g2float)(n*(n+1)),-tscale);
+//
+//   Assemble spectral coeffs back to original order.
+//
+         inc=0;
+         incu=0;
+         incp=0;
+         for (m=0;m<=MM;m++) {
+            Nm=JJ;      // triangular or trapezoidal
+            if ( KK == JJ+MM ) Nm=JJ+m;          // rhombodial
+            Ns=Js;      // triangular or trapezoidal
+            if ( Ks == Js+Ms ) Ns=Js+m;          // rhombodial
+            for (n=m;n<=Nm;n++) {
+               if (n<=Ns && m<=Ms) {    // grab unpacked value
+                  fld[inc++]=unpk[incu++];         // real part
+                  fld[inc++]=unpk[incu++];     // imaginary part
+               }
+               else {                       // Calc coeff from packed value
+                  fld[inc++]=(((g2float)ifld[incp++]*bscale)+ref)*
+                            dscale*pscale[n];          // real part
+                  fld[inc++]=(((g2float)ifld[incp++]*bscale)+ref)*
+                            dscale*pscale[n];          // imaginary part
+               }
+            }
+         }
+
+         free(pscale);
+         free(unpk);
+         free(ifld);
+
+      }
+      else {
+         printf("specunpack: Cannot handle 64 or 128-bit floats.\n");
+         for (j=0;j<ndpts;j++) fld[j]=0.0;
+         return -3;
+      }
+
+      return 0;
+}
diff --git a/src/modules_io/grid/io_grid_image/Makefile.in b/src/modules_io/grid/io_grid_image/Makefile.in
index 014845c..485e88d 100644
--- a/src/modules_io/grid/io_grid_image/Makefile.in
+++ b/src/modules_io/grid/io_grid_image/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_io/grid/io_grid_image
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -105,6 +111,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -154,14 +162,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -205,9 +226,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_io/grid/io_grid_image/grid_export.cpp b/src/modules_io/grid/io_grid_image/grid_export.cpp
index 9dae85d..cb6a107 100644
--- a/src/modules_io/grid/io_grid_image/grid_export.cpp
+++ b/src/modules_io/grid/io_grid_image/grid_export.cpp
@@ -291,7 +291,7 @@ bool CGrid_Export::On_Execute(void)
 	//-------------------------------------------------
 	if( img.SaveFile(fName.c_str()) )
 	{
-		pGrid->Get_Projection().Save(fName, SG_PROJ_FMT_WKT);
+		pGrid->Get_Projection().Save(SG_File_Make_Path(NULL, fName, SG_T("prj")), SG_PROJ_FMT_WKT);
 
 		if( Stream.Open(SG_File_Make_Path(NULL, fName, fExt), SG_FILE_W, false) )
 		{
diff --git a/src/modules_io/grid/io_grid_image/grid_import.cpp b/src/modules_io/grid/io_grid_image/grid_import.cpp
index 1c9d0c5..2cd3328 100644
--- a/src/modules_io/grid/io_grid_image/grid_import.cpp
+++ b/src/modules_io/grid/io_grid_image/grid_import.cpp
@@ -233,6 +233,7 @@ bool CGrid_Import::On_Execute(void)
 		}
 
 		pImage->Set_Name(Name);
+		pImage->Get_Projection().Load(SG_File_Make_Path(NULL, fImage, SG_T("prj")));
 		Parameters("OUT_GRID")->Set_Value(pImage);
 		DataObject_Set_Colors(pImage, Colors);
 		DataObject_Update(pImage, 0, Colors.Get_Count() - 1);
@@ -264,6 +265,7 @@ bool CGrid_Import::On_Execute(void)
 		{
 			pImage->Get_Projection().Load(fImage, SG_PROJ_FMT_WKT);
 			pImage->Set_Name(Name);
+			pImage->Get_Projection().Load(SG_File_Make_Path(NULL, fImage, SG_T("prj")));
 			Parameters("OUT_GRID")->Set_Value(pImage);
 			DataObject_Set_Colors(pImage, 100, SG_COLORS_BLACK_WHITE);
 			DataObject_Set_Parameter(pImage, "COLORS_TYPE", 3);	// Color Classification Type: RGB
@@ -296,6 +298,10 @@ bool CGrid_Import::On_Execute(void)
 			pG->Set_Name(CSG_String::Format(SG_T("%s [G]"), Name.c_str()));
 			pB->Set_Name(CSG_String::Format(SG_T("%s [B]"), Name.c_str()));
 
+			pR->Get_Projection().Load(SG_File_Make_Path(NULL, fImage, SG_T("prj")));
+			pG->Get_Projection().Load(SG_File_Make_Path(NULL, fImage, SG_T("prj")));
+			pB->Get_Projection().Load(SG_File_Make_Path(NULL, fImage, SG_T("prj")));
+
 			Parameters("OUT_RED")	->Set_Value(pR);
 			Parameters("OUT_GREEN")	->Set_Value(pG);
 			Parameters("OUT_BLUE")	->Set_Value(pB);
diff --git a/src/modules_io/shapes/Makefile.am b/src/modules_io/shapes/Makefile.am
index 6601b64..128f4a4 100644
--- a/src/modules_io/shapes/Makefile.am
+++ b/src/modules_io/shapes/Makefile.am
@@ -1 +1 @@
-SUBDIRS = io_shapes io_shapes_dxf
+SUBDIRS = io_shapes io_shapes_dxf io_shapes_las
diff --git a/src/modules_io/shapes/Makefile.in b/src/modules_io/shapes/Makefile.in
index 4977653..4516627 100644
--- a/src/modules_io/shapes/Makefile.in
+++ b/src/modules_io/shapes/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_io/shapes
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -203,7 +228,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = io_shapes io_shapes_dxf
+SUBDIRS = io_shapes io_shapes_dxf io_shapes_las
 all: all-recursive
 
 .SUFFIXES:
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_io/shapes/io_shapes/MLB_Interface.cpp b/src/modules_io/shapes/io_shapes/MLB_Interface.cpp
index ab26c5e..787b47f 100644
--- a/src/modules_io/shapes/io_shapes/MLB_Interface.cpp
+++ b/src/modules_io/shapes/io_shapes/MLB_Interface.cpp
@@ -101,6 +101,7 @@ const SG_Char * Get_Info(int i)
 #include "gpx.h"
 #include "pointcloud_from_file.h"
 #include "pointcloud_from_text_file.h"
+#include "svg.h"
 
 
 //---------------------------------------------------------
@@ -127,6 +128,7 @@ CSG_Module *		Create_Module(int i)
 	case 14:	return( new CGPX_Export );
 	case 15:	return( new CPointCloud_From_File );
 	case 16:	return( new CPointCloud_From_Text_File );
+	case 17:	return( new CSVG_Export );
 	}
 
 	return( NULL );
diff --git a/src/modules_io/shapes/io_shapes/Makefile.am b/src/modules_io/shapes/io_shapes/Makefile.am
index a41278c..9679f01 100644
--- a/src/modules_io/shapes/io_shapes/Makefile.am
+++ b/src/modules_io/shapes/io_shapes/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.14 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.15 2010/09/20 16:20:00 oconrad Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
@@ -22,6 +22,7 @@ pointcloud_from_file.cpp\
 pointcloud_from_text_file.cpp\
 stl.cpp\
 surfer_bln.cpp\
+svg.cpp\
 xyz.cpp\
 wasp_map.cpp\
 atlas_bna.h\
@@ -33,6 +34,7 @@ pointcloud_from_file.h\
 pointcloud_from_text_file.h\
 stl.h\
 surfer_bln.h\
+svg.h\
 wasp_map.h\
 xyz.h
 
diff --git a/src/modules_io/shapes/io_shapes/Makefile.in b/src/modules_io/shapes/io_shapes/Makefile.in
index d476339..1cc5eb7 100644
--- a/src/modules_io/shapes/io_shapes/Makefile.in
+++ b/src/modules_io/shapes/io_shapes/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_io/shapes/io_shapes
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -70,8 +76,8 @@ libio_shapes_la_DEPENDENCIES =  \
 	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
 am_libio_shapes_la_OBJECTS = atlas_bna.lo generate.lo gpx.lo gstat.lo \
 	MLB_Interface.lo pointcloud_from_file.lo \
-	pointcloud_from_text_file.lo stl.lo surfer_bln.lo xyz.lo \
-	wasp_map.lo
+	pointcloud_from_text_file.lo stl.lo surfer_bln.lo svg.lo \
+	xyz.lo wasp_map.lo
 libio_shapes_la_OBJECTS = $(am_libio_shapes_la_OBJECTS)
 DEFAULT_INCLUDES = -I. at am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -107,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -156,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -207,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -220,7 +245,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.14 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.15 2010/09/20 16:20:00 oconrad Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_TRUE at UC_DEFS = -D_SAGA_UNICODE
@@ -239,6 +264,7 @@ pointcloud_from_file.cpp\
 pointcloud_from_text_file.cpp\
 stl.cpp\
 surfer_bln.cpp\
+svg.cpp\
 xyz.cpp\
 wasp_map.cpp\
 atlas_bna.h\
@@ -250,6 +276,7 @@ pointcloud_from_file.h\
 pointcloud_from_text_file.h\
 stl.h\
 surfer_bln.h\
+svg.h\
 wasp_map.h\
 xyz.h
 
@@ -337,6 +364,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pointcloud_from_text_file.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stl.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/surfer_bln.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/svg.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wasp_map.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xyz.Plo at am__quote@
 
diff --git a/src/modules_io/shapes/io_shapes/stl.cpp b/src/modules_io/shapes/io_shapes/stl.cpp
index 7aef205..81b89ae 100644
--- a/src/modules_io/shapes/io_shapes/stl.cpp
+++ b/src/modules_io/shapes/io_shapes/stl.cpp
@@ -117,12 +117,27 @@ CSTL_Import::CSTL_Import(void)
 		), 3
 	);
 
+	pNode	= Parameters.Add_Choice(
+		NULL	, "METHOD_RASTER", _TL("Raster Dimension"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("Raster Resolution (Pixels X)"),
+			_TL("Raster Resolution (Pixel Size)")
+		), 0
+	);
+
 	Parameters.Add_Value(
-		NULL	, "GRID_RES"	, _TL("Raster Resolution (Pixels X)"),
+		pNode	, "GRID_NX"		, _TL("Raster Resolution (Pixels X)"),
 		_TL(""),
 		PARAMETER_TYPE_Int		, 2000, 10, true
 	);
 
+	Parameters.Add_Value(
+		pNode	, "GRID_CELL"	, _TL("Raster Resolution (Pixels Size)"),
+		_TL(""),
+		PARAMETER_TYPE_Double	, 1.0, 0.0, true
+	);
+
 	pNode	= Parameters.Add_Node(
 		NULL	, "NODE_ROTATE"	, _TL("Rotation"),
 		_TL("")
@@ -280,9 +295,24 @@ bool CSTL_Import::On_Execute(void)
 			int		nx, ny;
 			double	d;
 
-			nx		= Parameters("GRID_RES")->asInt();
-			d		= Extent.Get_XRange() / nx;
-			ny		= 1 + (int)(Extent.Get_YRange() / d);
+			switch( Parameters("METHOD_RASTER")->asInt() )
+			{
+			case 1:				// Pixel Size
+				d		= Parameters("GRID_CELL")->asDouble();
+
+				if( d > 0.0 )
+				{
+					nx		= 1 + (int)(Extent.Get_XRange() / d);;
+					ny		= 1 + (int)(Extent.Get_YRange() / d);
+					break;
+				}
+
+			case 0: default:	// Pixels in X Direction
+				nx		= Parameters("GRID_NX")->asInt();
+				d		= Extent.Get_XRange() / nx;
+				ny		= 1 + (int)(Extent.Get_YRange() / d);
+				break;
+			}
 
 			m_pGrid	= SG_Create_Grid(SG_DATATYPE_Float, nx, ny, d, Extent.Get_XMin(), Extent.Get_YMin());
 			m_pGrid->Set_Name(SG_File_Get_Name(sFile, false));
diff --git a/src/modules_io/shapes/io_shapes/svg.cpp b/src/modules_io/shapes/io_shapes/svg.cpp
new file mode 100644
index 0000000..2cd5a7b
--- /dev/null
+++ b/src/modules_io/shapes/io_shapes/svg.cpp
@@ -0,0 +1,354 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       io_shapes                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                        svg.cpp                        //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "svg.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+enum
+{
+	SYMBOL_POINT_CIRCLE	= 0,
+	SYMBOL_POINT_SQUARE
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Export							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSVG_Export::CSVG_Export(void)
+{
+	//-----------------------------------------------------
+	// 1. Info...
+
+	Set_Name		(_TL("Export Scalable Vector Graphics (SVG) File"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		"Export shapes to Scalable Vector Graphics (SVG) File.\n"
+		"SVG specification at World Wide Web Consortium (W3C)\n"
+		"<a target=\"_blank\" href=\"http://www.w3.org/TR/SVG11/\">Scalable Vector Graphics (SVG) 1.1</a>"
+	));
+
+
+	//-----------------------------------------------------
+	// 2. Parameters...
+
+	Parameters.Add_Shapes_List(
+		NULL	, "SHAPES"	, _TL("Shapes"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_FilePath(
+		NULL	, "FILE"	, _TL("File"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|*.svg|%s|*.*"),
+			_TL("Scalable Vector Graphics Files (*.svg)"),
+			_TL("All Files")
+		), NULL, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSVG_Export::On_Execute(void)
+{
+	//-----------------------------------------------------
+	CSG_Parameter_Shapes_List	*pList	= Parameters("SHAPES")->asShapesList();
+
+	if( pList->Get_Count() <= 0 )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	int				i, Width, Height;
+	double			Size_Point, Size_Line;
+	CSG_Rect		Extent;
+	CSG_MetaData	SVG, *pGroup;
+
+	//-----------------------------------------------------
+	Width	= 800;
+	Height	= 800;
+
+	Extent	= pList->asShapes(0)->Get_Extent();
+
+	for(i=1; i<pList->Get_Count() && Process_Get_Okay(); i++)
+	{
+		Extent.Union(pList->asShapes(i)->Get_Extent());
+	}
+
+	//-----------------------------------------------------
+	SVG.Set_Name(SG_T("svg"));
+	SVG.Add_Property(SG_T("xmlns")		, SG_T("http://www.w3.org/2000/svg"));
+	SVG.Add_Property(SG_T("xmlns:xlink"), SG_T("http://www.w3.org/1999/xlink"));
+	SVG.Add_Property(SG_T("xmlns:ev")	, SG_T("http://www.w3.org/2001/xml-events"));
+	SVG.Add_Property(SG_T("version")	, SG_T("1.1"));
+	SVG.Add_Property(SG_T("baseProfile"), SG_T("tiny"));
+	SVG.Add_Property(SG_T("width")		, CSG_String::Format(SG_T("%d"), Width));
+	SVG.Add_Property(SG_T("height")		, CSG_String::Format(SG_T("%d"), Height));
+	SVG.Add_Property(SG_T("viewBox")	, CSG_String::Format(SG_T("%f %f %f %f"), Extent.Get_XMin(), -Extent.Get_YMax(), Extent.Get_XRange(), Extent.Get_YRange()));
+
+	Size_Point	= Extent.Get_XRange() /  200.0;
+	Size_Line	= Extent.Get_XRange() /  500.0;
+	m_dStroke	= Extent.Get_XRange() / 1000.0;
+
+	//-----------------------------------------------------
+	for(i=0; i<pList->Get_Count() && Process_Get_Okay(); i++)
+	{
+		CSG_Shapes	*pShapes	= pList->asShapes(i);
+
+		pGroup	= SVG.Add_Child(SG_T("g"));
+		pGroup->Add_Property(SG_T("id")			, pShapes->Get_Name());
+		pGroup->Add_Property(SG_T("transform")	, SG_T("scale(1,-1)"));
+
+		for(int iShape=0; iShape<pShapes->Get_Count() && Set_Progress(iShape, pShapes->Get_Count()); iShape++)
+		{
+			CSG_Shape	*pShape	= pShapes->Get_Shape(iShape);
+
+			for(int iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
+			{
+				switch( pShapes->Get_Type() )
+				{
+				case SHAPE_TYPE_Point:
+				case SHAPE_TYPE_Points:		Add_Points	(*pGroup, pShape, iPart, SG_COLOR_RED		, Size_Point, SYMBOL_POINT_SQUARE);	break;
+				case SHAPE_TYPE_Line:		Add_Line	(*pGroup, pShape, iPart, SG_COLOR_BLUE_DARK	, Size_Line);	break;
+				case SHAPE_TYPE_Polygon:	Add_Polygon	(*pGroup, pShape, iPart, SG_COLOR_GREEN		);	break;
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	return( SVG.Save(Parameters("FILE")->asString()) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSVG_Export::Get_Points(CSG_Shape *pShape, int iPart, CSG_String &Points)
+{
+	Points.Clear();
+
+	for(int iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
+	{
+		TSG_Point	Point	= pShape->Get_Point(iPoint, iPart);
+
+		if( iPoint > 0 )
+		{
+			Points	+= SG_T(" ");
+		}
+
+		Points	+= CSG_String::Format(SG_T("%f,%f"), Point.x, Point.y);
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CSVG_Export::Add_Points(CSG_MetaData &SVG, CSG_Shape *pShape, int iPart, long Color, double Size, int Symbol)
+{
+	for(int iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
+	{
+		TSG_Point		Point	= pShape->Get_Point(0, 0);
+
+		CSG_MetaData	*pSVG	= SVG.Add_Child();
+
+		switch( Symbol )
+		{
+		case SYMBOL_POINT_CIRCLE: default:
+			pSVG->Set_Name(SG_T("circle"));
+			pSVG->Add_Property(SG_T("cx")		, Point.x);
+			pSVG->Add_Property(SG_T("cy")		, Point.y);
+			pSVG->Add_Property(SG_T("length")	, Size);
+			break;
+
+		case SYMBOL_POINT_SQUARE:
+			pSVG->Set_Name(SG_T("rect"));
+			pSVG->Add_Property(SG_T("x")		, Point.x - Size / 2.0);
+			pSVG->Add_Property(SG_T("y")		, Point.y - Size / 2.0);
+			pSVG->Add_Property(SG_T("width")	, Size);
+			pSVG->Add_Property(SG_T("height")	, Size);
+			break;
+		}
+
+		pSVG->Add_Property(SG_T("fill")			, CSG_String::Format(SG_T("rgb(%d,%d,%d)"), SG_GET_R(Color), SG_GET_G(Color), SG_GET_B(Color)));
+		pSVG->Add_Property(SG_T("stroke")		, SG_T("black"));
+		pSVG->Add_Property(SG_T("stroke-width")	, m_dStroke);
+	}
+}
+
+//---------------------------------------------------------
+void CSVG_Export::Add_Line(CSG_MetaData &SVG, CSG_Shape *pShape, int iPart, long Color, double Size)
+{
+	CSG_String	Points;
+
+	if( Get_Points(pShape, iPart, Points) )
+	{
+		CSG_MetaData	*pSVG	= SVG.Add_Child(SG_T("polyline"));
+
+		pSVG->Add_Property(SG_T("points")		, Points);
+		pSVG->Add_Property(SG_T("fill")			, SG_T("none"));
+		pSVG->Add_Property(SG_T("stroke")		, CSG_String::Format(SG_T("rgb(%d,%d,%d)"), SG_GET_R(Color), SG_GET_G(Color), SG_GET_B(Color)));
+		pSVG->Add_Property(SG_T("stroke-width")	, Size);
+	}
+}
+
+//---------------------------------------------------------
+void CSVG_Export::Add_Polygon(CSG_MetaData &SVG, CSG_Shape *pShape, int iPart, long Color)
+{
+	CSG_String	Points;
+
+	if( Get_Points(pShape, iPart, Points) )
+	{
+		CSG_MetaData	*pSVG	= SVG.Add_Child(SG_T("polygon"));
+
+		pSVG->Add_Property(SG_T("points")		, Points);
+		pSVG->Add_Property(SG_T("fill")			, CSG_String::Format(SG_T("rgb(%d,%d,%d)"), SG_GET_R(Color), SG_GET_G(Color), SG_GET_B(Color)));
+		pSVG->Add_Property(SG_T("stroke")		, SG_T("black"));
+		pSVG->Add_Property(SG_T("stroke-width")	, m_dStroke);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Import							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSVG_Import::CSVG_Import(void)
+{
+	//-----------------------------------------------------
+	// 1. Info...
+
+	Set_Name		(_TL("Import Scalable Vector Graphics (SVG) File"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		""
+	));
+
+
+	//-----------------------------------------------------
+	// 2. Parameters...
+
+	Parameters.Add_Shapes_List(
+		NULL	, "SHAPES"	, _TL("Shapes"),
+		_TL(""),
+		PARAMETER_OUTPUT
+	);
+
+	Parameters.Add_FilePath(
+		NULL	, "FILE"	, _TL("File"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|*.svg|%s|*.*"),
+			_TL("Scalable Vector Graphics Files (*.svg)"),
+			_TL("All Files")
+		)
+	);
+}
+
+//---------------------------------------------------------
+bool CSVG_Import::On_Execute(void)
+{
+	CSG_MetaData	SVG;
+
+	//-----------------------------------------------------
+	CSG_Parameter_Shapes_List	*pList	= Parameters("SHAPES")->asShapesList();
+
+	//-----------------------------------------------------
+	if( SVG.Load(Parameters("FILE")->asString()) )
+	{
+	}
+
+	//-----------------------------------------------------
+	return( pList->Get_Count() > 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/shapes/io_shapes/svg.h b/src/modules_io/shapes/io_shapes/svg.h
new file mode 100644
index 0000000..2ab1a40
--- /dev/null
+++ b/src/modules_io/shapes/io_shapes/svg.h
@@ -0,0 +1,134 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                       io_shapes                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                         svg.h                         //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__svg_H
+#define HEADER_INCLUDED__svg_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CSVG_Export : public CSG_Module
+{
+public:
+	CSVG_Export(void);
+
+	virtual const SG_Char *	Get_MenuPath	(void)		{	return( _TL("R:Export") );	}
+
+
+protected:
+
+	virtual bool			On_Execute		(void);
+
+
+private:
+
+	double					m_dStroke;
+
+
+	bool					Get_Points		(CSG_Shape *pShape, int iPart, CSG_String &Points);
+
+	void					Add_Points		(CSG_MetaData &SVG, CSG_Shape *pShape, int iPart, long Color, double Size, int Symbol);
+	void					Add_Line		(CSG_MetaData &SVG, CSG_Shape *pShape, int iPart, long Color, double Size);
+	void					Add_Polygon		(CSG_MetaData &SVG, CSG_Shape *pShape, int iPart, long Color);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CSVG_Import : public CSG_Module
+{
+public:
+	CSVG_Import(void);
+
+	virtual const SG_Char *	Get_MenuPath	(void)		{	return( _TL("R:Import") );	}
+
+
+protected:
+
+	virtual bool			On_Execute		(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__svg_H
diff --git a/src/modules_io/shapes/io_shapes_dxf/Makefile.in b/src/modules_io/shapes/io_shapes_dxf/Makefile.in
index be5aa82..035bf19 100644
--- a/src/modules_io/shapes/io_shapes_dxf/Makefile.in
+++ b/src/modules_io/shapes/io_shapes_dxf/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_io/shapes/io_shapes_dxf
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -105,6 +111,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -154,14 +162,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -205,9 +226,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_io/shapes/io_shapes_las/MLB_Interface.cpp b/src/modules_io/shapes/io_shapes_las/MLB_Interface.cpp
new file mode 100644
index 0000000..5c96777
--- /dev/null
+++ b/src/modules_io/shapes/io_shapes_las/MLB_Interface.cpp
@@ -0,0 +1,123 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     Shapes_IO_LAS                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   MLB_Interface.cpp                   //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//			The Module Link Library Interface			 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+// 1. Include the appropriate SAGA-API header...
+
+#include "MLB_Interface.h"
+
+
+//---------------------------------------------------------
+// 2. Place general module library informations here...
+
+const SG_Char * Get_Info(int i)
+{
+	switch( i )
+	{
+	case MLB_INFO_Name:	default:
+		return( _TL("Import/Export - LAS") );
+
+	case MLB_INFO_Author:
+		return( _TL("O. Conrad, V. Wichmann (c) 2009-10") );
+
+	case MLB_INFO_Description:
+		return( _TL("Tools for the import and export of ASPRS LAS files.") );
+
+	case MLB_INFO_Version:
+		return( SG_T("1.0") );
+
+	case MLB_INFO_Menu_Path:
+		return( _TL("File|Shapes") );
+	}
+}
+
+
+//---------------------------------------------------------
+// 3. Include the headers of your modules here...
+
+#include "las_import.h"
+#include "las_export.h"
+
+
+//---------------------------------------------------------
+// 4. Allow your modules to be created here...
+
+CSG_Module *		Create_Module(int i)
+{
+	switch( i )
+	{
+	case  0:	return( new CLAS_Import );
+	case  1:	return( new CLAS_Export );
+	default:	return( NULL );
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+//{{AFX_SAGA
+
+	MLB_INTERFACE
+
+//}}AFX_SAGA
diff --git a/src/modules_io/shapes/io_shapes_las/MLB_Interface.h b/src/modules_io/shapes/io_shapes_las/MLB_Interface.h
new file mode 100644
index 0000000..f9b55b5
--- /dev/null
+++ b/src/modules_io/shapes/io_shapes_las/MLB_Interface.h
@@ -0,0 +1,80 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     Shapes_IO_LAS                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    MLB_Interface.h                    //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Include the SAGA-API here				 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__io_shapes_las_H
+#define HEADER_INCLUDED__io_shapes_las_H
+
+//---------------------------------------------------------
+#include <saga_api/saga_api.h>
+
+//---------------------------------------------------------
+#ifdef io_shapes_las_EXPORTS
+	#define	io_shapes_las_EXPORT	_SAGA_DLL_EXPORT
+#else
+	#define	io_shapes_las_EXPORT	_SAGA_DLL_IMPORT
+#endif
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__io_shapes_las_H
diff --git a/src/modules_io/shapes/io_shapes_las/Makefile.am b/src/modules_io/shapes/io_shapes_las/Makefile.am
new file mode 100644
index 0000000..6c253cd
--- /dev/null
+++ b/src/modules_io/shapes/io_shapes_las/Makefile.am
@@ -0,0 +1,26 @@
+#
+# $Id: Makefile.am,v 1.8 2010/11/02 11:03:26 oconrad Exp $
+#
+if DEBUG
+DBGFLAGS = -g -DDEBUG
+endif
+if SAGA_UNICODE
+UC_DEFS = -D_SAGA_UNICODE
+endif
+if HAVE_LLAS
+DEP_LIBS           = -llas
+DEF_SAGA           = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+CXX_INCS           = -I$(top_srcdir)/src/saga_core
+AM_CXXFLAGS        = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+AM_LDFLAGS         = -fPIC -shared -avoid-version $(DEP_LIBS)
+pkglib_LTLIBRARIES = libio_shapes_las.la
+libio_shapes_las_la_SOURCES =\
+las_export.cpp\
+las_import.cpp\
+MLB_Interface.cpp\
+las_export.h\
+las_import.h\
+MLB_Interface.h
+
+libio_shapes_las_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la $(ADD_MLBS)
+endif
diff --git a/src/modules_io/shapes/io_shapes_las/Makefile.in b/src/modules_io/shapes/io_shapes_las/Makefile.in
new file mode 100644
index 0000000..1f06f83
--- /dev/null
+++ b/src/modules_io/shapes/io_shapes_las/Makefile.in
@@ -0,0 +1,576 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_io/shapes/io_shapes_las
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+ at HAVE_LLAS_TRUE@libio_shapes_las_la_DEPENDENCIES = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+am__libio_shapes_las_la_SOURCES_DIST = las_export.cpp las_import.cpp \
+	MLB_Interface.cpp las_export.h las_import.h MLB_Interface.h
+ at HAVE_LLAS_TRUE@am_libio_shapes_las_la_OBJECTS = las_export.lo \
+ at HAVE_LLAS_TRUE@	las_import.lo MLB_Interface.lo
+libio_shapes_las_la_OBJECTS = $(am_libio_shapes_las_la_OBJECTS)
+ at HAVE_LLAS_TRUE@am_libio_shapes_las_la_rpath = -rpath $(pkglibdir)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libio_shapes_las_la_SOURCES)
+DIST_SOURCES = $(am__libio_shapes_las_la_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#
+# $Id: Makefile.am,v 1.8 2010/11/02 11:03:26 oconrad Exp $
+#
+ at DEBUG_TRUE@DBGFLAGS = -g -DDEBUG
+ at SAGA_UNICODE_TRUE@UC_DEFS = -D_SAGA_UNICODE
+ at HAVE_LLAS_TRUE@DEP_LIBS = -llas
+ at HAVE_LLAS_TRUE@DEF_SAGA = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+ at HAVE_LLAS_TRUE@CXX_INCS = -I$(top_srcdir)/src/saga_core
+ at HAVE_LLAS_TRUE@AM_CXXFLAGS = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+ at HAVE_LLAS_TRUE@AM_LDFLAGS = -fPIC -shared -avoid-version $(DEP_LIBS)
+ at HAVE_LLAS_TRUE@pkglib_LTLIBRARIES = libio_shapes_las.la
+ at HAVE_LLAS_TRUE@libio_shapes_las_la_SOURCES = \
+ at HAVE_LLAS_TRUE@las_export.cpp\
+ at HAVE_LLAS_TRUE@las_import.cpp\
+ at HAVE_LLAS_TRUE@MLB_Interface.cpp\
+ at HAVE_LLAS_TRUE@las_export.h\
+ at HAVE_LLAS_TRUE@las_import.h\
+ at HAVE_LLAS_TRUE@MLB_Interface.h
+
+ at HAVE_LLAS_TRUE@libio_shapes_las_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la $(ADD_MLBS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_io/shapes/io_shapes_las/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_io/shapes/io_shapes_las/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+	}
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libio_shapes_las.la: $(libio_shapes_las_la_OBJECTS) $(libio_shapes_las_la_DEPENDENCIES) 
+	$(CXXLINK) $(am_libio_shapes_las_la_rpath) $(libio_shapes_las_la_OBJECTS) $(libio_shapes_las_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/las_export.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/las_import.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_io/shapes/io_shapes_las/las_export.cpp b/src/modules_io/shapes/io_shapes_las/las_export.cpp
new file mode 100644
index 0000000..e2e779b
--- /dev/null
+++ b/src/modules_io/shapes/io_shapes_las/las_export.cpp
@@ -0,0 +1,456 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     Shapes_IO_LAS                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     las_export.cpp                    //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                    Volker Wichmann                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     wichmann at laserdata                     //
+//                                                       //
+//    contact:    Volker Wichmann                        //
+//                LASERDATA GmbH                         //
+//                Management and analysis of             //
+//                laserscanning data                     //
+//                Innsbruck, Austria                     //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "las_export.h"
+
+#include <liblas/laspoint.hpp>
+#include <liblas/laswriter.hpp>
+#include <liblas/capi/las_version.h>
+#include <fstream>
+#include <iostream>
+
+
+//---------------------------------------------------------
+#define	MAX_NUM_RETURN	5
+
+//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CLAS_Export::CLAS_Export(void)
+{
+	CSG_Parameter	*pNodeAttr;
+
+	//-----------------------------------------------------
+	// 1. Info...
+
+	Set_Name		(_TL("Export LAS Files"));
+
+	Set_Author		(SG_T("Volker Wichmann (c) 2010, LASERDATA GmbH"));
+
+	CSG_String		Description(_TW(
+		"This module exports a SAGA Point Cloud as ASPRS LAS file (version 1.2) "
+		"using the \"libLAS\" library. It allows to write Point Data Record Formats 1 to 4. "
+		"Please have a look at the <a href=\"http://www.asprs.org/society/committees/standards/lidar_exchange_format.html\""
+		">ASPRS LAS 1.2 Format Specification</a> for "
+		"more information on the attributes supported with each format.\n"
+		"Get more information about the \"libLAS\" library at "
+		"<a href=\"http://liblas.org\">http://liblas.org</a>\n"
+		"Please note, that the liblas writer does an \"isValid()\" check on each point. "
+		"This might cause problems with MLS data because of the included scan angle check. "
+		"MLS data ususally includes larger scan angles than ALS data and thus points may fail the "
+		"test. Please always have a look at the summary printed in the message window.\n\n"
+		"\nliblas version: "
+	));
+
+	Description	+= CSG_String(LIBLAS_RELEASE_NAME);
+
+	Set_Description	(Description);
+
+	//-----------------------------------------------------
+	// 2. Parameters...
+
+	pNodeAttr = Parameters.Add_PointCloud(
+		NULL	, "POINTS"		, _TL("Point Cloud"),
+		_TL("The point cloud to export."),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "T"    , _TL("gps-time"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "i"    , _TL("intensity"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "a"    , _TL("scan angle"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "r"    , _TL("number of the return"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "n"    , _TL("number of returns of given pulse"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "c"    , _TL("classification"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "u"    , _TL("user data"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "R"    , _TL("red channel color"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "G"    , _TL("green channel color"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "B"    , _TL("blue channel color"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "e"    , _TL("edge of flight line flag"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "d"    , _TL("direction of scan flag"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "p"    , _TL("point source ID"),
+		_TL(""), true
+	);
+	Parameters.Add_Table_Field(
+		pNodeAttr	, "RGB"    , _TL("SAGA RGB color"),
+		_TL(""), true
+	);
+
+	Parameters.Add_Value(
+		NULL	, "OFF_X"	, _TL("Offset X"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 0.0
+	);
+	Parameters.Add_Value(
+		NULL	, "OFF_Y"	, _TL("Offset Y"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 0.0
+	);
+	Parameters.Add_Value(
+		NULL	, "OFF_Z"	, _TL("Offset Z"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 0.0
+	);
+	Parameters.Add_Value(
+		NULL	, "SCALE_X"	, _TL("Scale X"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 0.001
+	);
+	Parameters.Add_Value(
+		NULL	, "SCALE_Y"	, _TL("Scale Y"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 0.001
+	);
+	Parameters.Add_Value(
+		NULL	, "SCALE_Z"	, _TL("Scale Z"),
+		_TL(""),
+		PARAMETER_TYPE_Double, 0.001
+	);
+	Parameters.Add_Choice(
+		NULL, "FORMAT", _TL("Point Data Record Format"),
+        _TL("Choose the Point Data Record Format you like to use"),
+        CSG_String::Format(SG_T("%s|%s|%s|%s|"),
+            _TL("0"),
+            _TL("1"),
+			_TL("2"),
+			_TL("3")
+        ), 3
+    );
+
+	Parameters.Add_FilePath(
+		NULL	, "FILE"		, _TL("Output File"),
+		_TL("The LAS output file."),
+		_TL("LAS Files (*.las)|*.las|All Files|*.*"),
+		NULL, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CLAS_Export::On_Execute(void)
+{
+	CSG_PointCloud		*pPoints;
+	CSG_String			fName;
+	int					i_T, i_i, i_a, i_r, i_n, i_c, i_u, i_R, i_G, i_B, i_e, i_d, i_p, i_RGB;
+	double				off_X, off_Y, off_Z;
+	double				scale_X, scale_Y, scale_Z;
+	int					format;
+	int					cntRead = 0, cntWrite = 0;
+	double				x, y, z, xmin, ymin, zmin, xmax, ymax, zmax;
+	liblas::uint32_t	binPulse[MAX_NUM_RETURN];
+	liblas::uint16_t	r;
+
+    std::ofstream		ofs;
+
+
+	//-----------------------------------------------------
+
+	pPoints		= Parameters("POINTS")->asPointCloud();
+	i_T			= Parameters("T")->asInt();
+	i_i			= Parameters("i")->asInt();
+	i_a			= Parameters("a")->asInt();
+	i_r			= Parameters("r")->asInt();
+	i_n			= Parameters("n")->asInt();
+	i_c			= Parameters("c")->asInt();
+	i_u			= Parameters("u")->asInt();
+	i_R			= Parameters("R")->asInt();
+	i_G			= Parameters("G")->asInt();
+	i_B			= Parameters("B")->asInt();
+	i_e			= Parameters("e")->asInt();
+	i_d			= Parameters("d")->asInt();
+	i_p			= Parameters("p")->asInt();
+	i_RGB		= Parameters("RGB")->asInt();
+
+	off_X		= Parameters("OFF_X")->asDouble();
+	off_Y		= Parameters("OFF_Y")->asDouble();
+	off_Z		= Parameters("OFF_Z")->asDouble();
+	scale_X		= Parameters("SCALE_X")->asDouble();
+	scale_Y		= Parameters("SCALE_Y")->asDouble();
+	scale_Z		= Parameters("SCALE_Z")->asDouble();
+	format		= Parameters("FORMAT")->asInt();
+
+	fName		= Parameters("FILE")->asString();
+
+    ofs.open(fName.b_str(), std::ios::out | std::ios::binary);
+    if (!ofs)
+    {
+        SG_UI_Msg_Add_Error(CSG_String::Format(_TL("Unable to open LAS file!")));
+        return (false);
+    }
+
+	//-----------------------------------------------------
+	liblas::LASHeader	header;
+
+	switch (format)
+	{
+	case 0:		header.SetDataFormatId(liblas::LASHeader::ePointFormat0);	break;
+	case 1:		header.SetDataFormatId(liblas::LASHeader::ePointFormat1);	break;
+	case 2:		header.SetDataFormatId(liblas::LASHeader::ePointFormat2);	break;
+	case 3:
+	default:	header.SetDataFormatId(liblas::LASHeader::ePointFormat3);	break;
+	}
+
+	header.SetOffset(off_X, off_Y, off_Z);
+	header.SetScale(scale_X, scale_Y, scale_Z);
+
+	// Get_ZMin() and Get_ZMax() do currently not work:
+	/*header.SetMin(	(pPoints->Get_Extent().Get_XMin() - off_X) / scale_X,
+					(pPoints->Get_Extent().Get_YMin() - off_Y) / scale_Y,
+					(pPoints->Get_ZMin() - off_Z) / scale_Z);
+	header.SetMax(	(pPoints->Get_Extent().Get_XMax() - off_X) / scale_X,
+					(pPoints->Get_Extent().Get_YMax() - off_Y) / scale_Y,
+					(pPoints->Get_ZMax() - off_Z) / scale_Z);*/
+
+    liblas::LASWriter writer(ofs, header);
+
+	if( pPoints->Get_Count() > 0 )
+	{
+		xmin = xmax = pPoints->Get_X(0);
+		ymin = ymax = pPoints->Get_Y(0);
+		zmin = zmax = pPoints->Get_Z(0);
+	}
+
+	for( int i=0; i<MAX_NUM_RETURN; i++ )
+	{
+		binPulse[i] = 0;
+	}
+
+
+	for( int i=0; i<pPoints->Get_Count() && SG_UI_Process_Set_Progress(i, pPoints->Get_Count()); i++ )
+	{
+		cntRead++;
+
+		liblas::LASPoint	point;
+
+		x	= pPoints->Get_X(i);
+		y	= pPoints->Get_Y(i);
+		z	= pPoints->Get_Z(i);
+
+		x < xmin ? xmin = x : NULL;
+		x > xmax ? xmax = x : NULL;
+		y < ymin ? ymin = y : NULL;
+		y > ymax ? ymax = y : NULL;
+		z < zmin ? zmin = z : NULL;
+		z > zmax ? zmax = z : NULL;
+
+		point.SetCoordinates(x, y, z);
+
+		if( i_T > -1 )
+			point.SetTime(pPoints->Get_Value(i, i_T));
+		if( i_i > -1 )
+			point.SetIntensity((liblas::uint16_t)pPoints->Get_Value(i, i_i));
+		if( i_a > -1 )
+			point.SetScanAngleRank((liblas::int8_t)pPoints->Get_Value(i, i_a));
+		if( i_r > -1 )
+		{
+			r = (liblas::uint16_t)pPoints->Get_Value(i, i_r);
+			point.SetReturnNumber(r);
+
+			if( r > 0 && r <= MAX_NUM_RETURN )
+				binPulse[r-1] += 1;
+		}
+		if( i_n > -1 )
+			point.SetNumberOfReturns((liblas::uint16_t)pPoints->Get_Value(i, i_n));
+		if( i_c > -1 )
+			point.SetClassification((liblas::int8_t)pPoints->Get_Value(i, i_c));
+		if( i_u > -1 )
+			point.SetUserData((liblas::int8_t)pPoints->Get_Value(i, i_u));
+		if( i_R > -1 && i_G > -1 && i_B > -1 )
+		{
+			liblas::LASColor	color;
+			color.SetRed((liblas::uint16_t)pPoints->Get_Value(i, i_R));
+			color.SetGreen((liblas::uint16_t)pPoints->Get_Value(i, i_G));
+			color.SetBlue((liblas::uint16_t)pPoints->Get_Value(i, i_B));
+			point.SetColor(color);
+		}
+		else if( i_RGB > -1 )
+		{
+			liblas::LASColor	color;
+			color.SetRed((liblas::uint16_t)SG_GET_R((int)pPoints->Get_Value(i, i_RGB)));
+			color.SetGreen((liblas::uint16_t)SG_GET_G((int)pPoints->Get_Value(i, i_RGB)));
+			color.SetBlue((liblas::uint16_t)SG_GET_B((int)pPoints->Get_Value(i, i_RGB)));
+			point.SetColor(color);
+		}
+		if( i_e > -1 )
+			point.SetFlightLineEdge((liblas::uint16_t)pPoints->Get_Value(i, i_e));
+		if( i_d > -1 )
+			point.SetScanDirection((liblas::uint16_t)pPoints->Get_Value(i, i_d));
+		if( i_p > -1 )
+			point.SetPointSourceID((liblas::uint16_t)pPoints->Get_Value(i, i_p));
+
+		if( writer.WritePoint(point) )
+			cntWrite++;
+	}
+
+
+	header.SetMin(xmin, ymin, zmin);
+	header.SetMax(xmax, ymax, zmax);
+
+	SG_UI_Msg_Add(_TL("Summary:\n"), true);
+
+	if( i_r > -1 )
+	{
+		SG_UI_Msg_Add(_TL("Number of points per return:"), true);
+		for( int i=0; i<MAX_NUM_RETURN; i++ )
+		{
+			header.SetPointRecordsByReturnCount(i, binPulse[i]);
+			SG_UI_Msg_Add(CSG_String::Format(_TL("Return %d: \t\t%d points"), i+1, binPulse[i]), true);
+		}
+
+		header.SetPointRecordsCount(cntWrite);
+		SG_UI_Msg_Add(_TL(""), true);
+	}
+
+	writer.WriteHeader(header);
+
+	//-----------------------------------------------------
+	SG_UI_Msg_Add(CSG_String::Format(_TL("Points read: \t%d"), cntRead), true);
+	SG_UI_Msg_Add(CSG_String::Format(_TL("Points written: \t%d"), cntWrite), true);
+
+	return( true );
+}
+
+
+//---------------------------------------------------------
+int CLAS_Export::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	if (!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("POINTS")))		// set attribute field choices to - NOT SET -
+	{
+		if (pParameters->Get_Parameter("POINTS")->asPointCloud() != NULL)
+		{
+			int	cntFields = pParameters->Get_Parameter("POINTS")->asPointCloud()->Get_Field_Count();
+
+			pParameters->Get_Parameter("T")->Set_Value(cntFields);
+			pParameters->Get_Parameter("i")->Set_Value(cntFields);
+			pParameters->Get_Parameter("a")->Set_Value(cntFields);
+			pParameters->Get_Parameter("r")->Set_Value(cntFields);
+			pParameters->Get_Parameter("n")->Set_Value(cntFields);
+			pParameters->Get_Parameter("c")->Set_Value(cntFields);
+			pParameters->Get_Parameter("u")->Set_Value(cntFields);
+			pParameters->Get_Parameter("R")->Set_Value(cntFields);
+			pParameters->Get_Parameter("G")->Set_Value(cntFields);
+			pParameters->Get_Parameter("B")->Set_Value(cntFields);
+			pParameters->Get_Parameter("e")->Set_Value(cntFields);
+			pParameters->Get_Parameter("d")->Set_Value(cntFields);
+			pParameters->Get_Parameter("p")->Set_Value(cntFields);
+			pParameters->Get_Parameter("RGB")->Set_Value(cntFields);
+		}
+	}
+
+
+    return (true);
+}
+
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/shapes/io_shapes_las/las_export.h b/src/modules_io/shapes/io_shapes_las/las_export.h
new file mode 100644
index 0000000..ad8f1d6
--- /dev/null
+++ b/src/modules_io/shapes/io_shapes_las/las_export.h
@@ -0,0 +1,109 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     Shapes_IO_LAS                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     las_export.cpp                    //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                    Volker Wichmann                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     wichmann at laserdata                     //
+//                                                       //
+//    contact:    Volker Wichmann                        //
+//                LASERDATA GmbH                         //
+//                Management and analysis of             //
+//                laserscanning data                     //
+//                Innsbruck, Austria                     //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__las_export_H
+#define HEADER_INCLUDED__las_export_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CLAS_Export : public CSG_Module
+{
+public:
+	CLAS_Export(void);
+
+	virtual const SG_Char *	Get_MenuPath	(void)		{	return( _TL("R:Export") );	}
+
+
+protected:
+
+	virtual bool			On_Execute		(void);
+	virtual int				On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+
+private:
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__las_export_H
diff --git a/src/modules_io/shapes/io_shapes_las/las_import.cpp b/src/modules_io/shapes/io_shapes_las/las_import.cpp
new file mode 100644
index 0000000..0ab637d
--- /dev/null
+++ b/src/modules_io/shapes/io_shapes_las/las_import.cpp
@@ -0,0 +1,325 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     Shapes_IO_LAS                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     las_import.cpp                    //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//              Olaf Conrad, Volker Wichmann             //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "las_import.h"
+
+#include <liblas/laspoint.hpp>
+#include <liblas/lasreader.hpp>
+#include <liblas/capi/las_version.h>
+#include <fstream>
+#include <iostream>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+enum
+{
+	VAR_T	= 0,	// gps-time
+	VAR_i,			// intensity
+	VAR_a,			// scan angle
+	VAR_r,			// number of the return
+	VAR_c,			// classification
+	VAR_u,			// user data
+	VAR_n,			// number of returns of given pulse
+	VAR_R,			// red channel color
+	VAR_G,			// green channel color
+	VAR_B,			// blue channel color
+	VAR_e,			// edge of flight line flag
+	VAR_d,			// direction of scan flag
+	VAR_p,			// point source ID
+	VAR_C,			// color
+	VAR_Count
+};
+
+//---------------------------------------------------------
+#define	ADD_FIELD(id, var, name, type)	if( Parameters(id)->asBool() ) { iField[var] = nFields++; pPoints->Add_Field(name, type); } else { iField[var] = -1; }
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CLAS_Import::CLAS_Import(void)
+{
+	CSG_Parameter	*pNode;
+
+	//-----------------------------------------------------
+	// 1. Info...
+
+	Set_Name		(_TL("Import LAS Files"));
+
+	Set_Author		(SG_T("O. Conrad, V. Wichmann (c) 2009"));
+
+	CSG_String		Description(_TW(
+		"This module imports ASPRS LAS files (versions 1.0, 1.1 and 1.2) as Point Cloud "
+		"using the \"libLAS\" library. "
+		"Get more information about this library at "
+		"<a href=\"http://liblas.org\">http://liblas.org</a>\n"
+		"\n"
+		"Besides the x,y,z coordinates, the user can decide upon which attributes "
+		"should be imported from the LAS file.\n\n"
+		"Module development was supported by "
+		"<a href=\"http://www.laserdata.at\">http://Laserdata GmbH, Austria</a>\n"
+		"and "
+		"<a href=\"http://www.alp-s.at\">http://alpS GmbH, Austria</a>\n"
+		"\nliblas version: "
+	));
+
+	Description	+= CSG_String(LIBLAS_RELEASE_NAME);
+
+	Set_Description	(Description);
+
+	//-----------------------------------------------------
+	// 2. Parameters...
+
+	Parameters.Add_PointCloud_Output(
+		NULL	, "POINTS"		, _TL("Point Cloud"),
+		_TL("")
+	);
+
+	Parameters.Add_FilePath(
+		NULL	, "FILE"		, _TL("Input File"),
+		_TL(""),
+		_TL("LAS Files (*.las)|*.las|All Files|*.*")
+	);
+
+	pNode	= Parameters.Add_Node(
+		NULL	, "NODE_VARS"	, _TL("Attributes to import besides x,y,z ..."),
+		_TL("")
+	);
+
+	Parameters.Add_Value(pNode, "T", _TL("gps-time")						, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "i", _TL("intensity")						, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "a", _TL("scan angle")						, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "r", _TL("number of the return")			, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "c", _TL("classification")					, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "u", _TL("user data")						, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "n", _TL("number of returns of given pulse"), _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "R", _TL("red channel color")				, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "G", _TL("green channel color")				, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "B", _TL("blue channel color")				, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "e", _TL("edge of flight line flag")		, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "d", _TL("direction of scan flag")			, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "p", _TL("point source ID")					, _TL(""), PARAMETER_TYPE_Bool, false);
+	Parameters.Add_Value(pNode, "C", _TL("rgb color")						, _TL(""), PARAMETER_TYPE_Bool, false);
+
+	Parameters.Add_Value(
+		NULL	, "VALID"	, _TL("Check Point Validity"),
+		_TL(""),
+		PARAMETER_TYPE_Bool, false
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CLAS_Import::On_Execute(void)
+{
+	bool			bValidity;
+	CSG_String		fName;
+    std::ifstream   ifs;
+	int				cntInvalid = 0;
+
+
+	bValidity		= Parameters("VALID")->asBool();
+	fName			= Parameters("FILE")->asString();
+
+    ifs.open(fName.b_str(), std::ios::in | std::ios::binary);
+    if (!ifs)
+    {
+        SG_UI_Msg_Add_Error(CSG_String::Format(_TL("Unable to open LAS file!")));
+        return (false);
+    }
+
+    liblas::LASReader reader(ifs);
+
+    liblas::LASHeader const& header = reader.GetHeader();
+
+
+	//-----------------------------------------------------
+	int		nFields, iField[VAR_Count];
+
+	CSG_PointCloud	*pPoints	= SG_Create_PointCloud();
+	pPoints->Set_Name(SG_File_Get_Name(fName, false));
+	Parameters("POINTS")->Set_Value(pPoints);
+	pPoints->Create();
+
+	nFields		= 3;
+
+	ADD_FIELD("T", VAR_T, _TL("gps-time")							, SG_DATATYPE_Double);	// SG_DATATYPE_Long
+	ADD_FIELD("i", VAR_i, _TL("intensity")							, SG_DATATYPE_Float);	// SG_DATATYPE_Word
+	ADD_FIELD("a", VAR_a, _TL("scan angle")							, SG_DATATYPE_Float);	// SG_DATATYPE_Byte
+	ADD_FIELD("r", VAR_r, _TL("number of the return")				, SG_DATATYPE_Int);
+	ADD_FIELD("c", VAR_c, _TL("classification")						, SG_DATATYPE_Int);		// SG_DATATYPE_Byte
+	ADD_FIELD("u", VAR_u, _TL("user data")							, SG_DATATYPE_Double);	// SG_DATATYPE_Byte
+	ADD_FIELD("n", VAR_n, _TL("number of returns of given pulse")	, SG_DATATYPE_Int);
+	ADD_FIELD("R", VAR_R, _TL("red channel color")					, SG_DATATYPE_Int);		// SG_DATATYPE_Word
+	ADD_FIELD("G", VAR_G, _TL("green channel color")				, SG_DATATYPE_Int);
+	ADD_FIELD("B", VAR_B, _TL("blue channel color")					, SG_DATATYPE_Int);
+	ADD_FIELD("e", VAR_e, _TL("edge of flight line flag")			, SG_DATATYPE_Char);
+	ADD_FIELD("d", VAR_d, _TL("direction of scan flag")				, SG_DATATYPE_Char);
+	ADD_FIELD("p", VAR_p, _TL("point source ID")					, SG_DATATYPE_Int);		// SG_DATATYPE_Word
+	ADD_FIELD("C", VAR_C, _TL("rgb color")							, SG_DATATYPE_Long);
+
+	//-----------------------------------------------------
+	int		iPoint	= 0;
+
+    while( reader.ReadNextPoint() && (iPoint % 10000 || SG_UI_Process_Set_Progress((double)iPoint, header.GetPointRecordsCount())) )
+    {
+        liblas::LASPoint const& point = reader.GetPoint();
+
+		if( bValidity )
+		{
+			if( !point.IsValid() )
+			{
+				cntInvalid++;
+				continue;
+			}
+		}
+
+		pPoints->Add_Point(point.GetX(), point.GetY(), point.GetZ());
+
+        if( iField[VAR_T] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_T], point.GetTime());
+		if( iField[VAR_i] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_i], point.GetIntensity());
+		if( iField[VAR_a] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_a], point.GetScanAngleRank());
+		if( iField[VAR_r] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_r], point.GetReturnNumber());
+		if( iField[VAR_c] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_c], point.GetClassification());
+		if( iField[VAR_u] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_u], point.GetUserData());
+		if( iField[VAR_n] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_n], point.GetNumberOfReturns());
+		if( iField[VAR_R] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_R], point.GetColor().GetRed());
+		if( iField[VAR_G] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_G], point.GetColor().GetGreen());
+		if( iField[VAR_B] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_B], point.GetColor().GetBlue());
+		if( iField[VAR_e] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_e], point.GetFlightLineEdge());
+		if( iField[VAR_d] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_d], point.GetScanDirection());
+		if( iField[VAR_p] > 0 )	pPoints->Set_Value(iPoint, iField[VAR_p], point.GetPointSourceID());
+		if( iField[VAR_C] > 0 )
+		{
+			double	r, g, b;
+			r = point.GetColor().GetRed();
+			g = point.GetColor().GetGreen();
+			b = point.GetColor().GetBlue();
+			
+			if (r > 65025)
+				r = 65025;
+			else if (r < 0)
+				r = 0;
+
+			if (g > 65025)
+				g = 65025;
+			else if (g < 0)
+				g = 0;
+
+			if (b > 65025)
+				b = 65025;
+			else if (b < 0)
+				b = 0;
+
+			pPoints->Set_Value(iPoint, iField[VAR_C], SG_GET_RGB(r / 255, g / 255, b / 255));
+		}
+
+		iPoint++;
+	}
+
+	ifs.close();
+
+	//-----------------------------------------------------
+	CSG_Parameters		sParms;
+
+	DataObject_Update(pPoints);
+	DataObject_Get_Parameters(pPoints, sParms);
+
+	if (sParms("COLORS_ATTRIB")	&& sParms("COLORS_TYPE") && sParms("METRIC_COLORS")
+		&& sParms("METRIC_ZRANGE") && sParms("COLORS_AGGREGATE"))
+	{
+		sParms("COLORS_AGGREGATE")->Set_Value(3);				// highest z
+		sParms("COLORS_TYPE")->Set_Value(2);                    // graduated color
+		sParms("METRIC_COLORS")->asColors()->Set_Count(255);    // number of colors
+		sParms("COLORS_ATTRIB")->Set_Value(2);					// z attrib
+		sParms("METRIC_ZRANGE")->asRange()->Set_Range(pPoints->Get_Minimum(2),pPoints->Get_Maximum(2));
+	}
+	DataObject_Set_Parameters(pPoints, sParms);
+	DataObject_Update(pPoints);
+
+	//-----------------------------------------------------
+	if( bValidity && cntInvalid > 0 )
+		SG_UI_Msg_Add(CSG_String::Format(_TL("WARNING: %d invalid points skipped!"), cntInvalid), true);
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_io/shapes/io_shapes_las/las_import.h b/src/modules_io/shapes/io_shapes_las/las_import.h
new file mode 100644
index 0000000..79b0daf
--- /dev/null
+++ b/src/modules_io/shapes/io_shapes_las/las_import.h
@@ -0,0 +1,106 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     Shapes_IO_LAS                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     las_import.cpp                    //
+//                                                       //
+//                 Copyright (C) 2009 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__las_import_H
+#define HEADER_INCLUDED__las_import_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CLAS_Import : public CSG_Module
+{
+public:
+	CLAS_Import(void);
+
+	virtual const SG_Char *	Get_MenuPath	(void)		{	return( _TL("R:Import") );	}
+
+
+protected:
+
+	virtual bool			On_Execute		(void);
+
+
+private:
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__las_import_H
diff --git a/src/modules_io/table/Makefile.in b/src/modules_io/table/Makefile.in
index 7c04f8c..9aeade1 100644
--- a/src/modules_io/table/Makefile.in
+++ b/src/modules_io/table/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_io/table
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_io/table/io_table/Makefile.in b/src/modules_io/table/io_table/Makefile.in
index 00780cc..4dca458 100644
--- a/src/modules_io/table/io_table/Makefile.in
+++ b/src/modules_io/table/io_table/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_io/table/io_table
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -104,6 +110,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -153,14 +161,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -204,9 +225,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_lectures/Makefile.in b/src/modules_lectures/Makefile.in
index 4825e30..c3b00d0 100644
--- a/src/modules_lectures/Makefile.in
+++ b/src/modules_lectures/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_lectures
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_lectures/lectures/Makefile.in b/src/modules_lectures/lectures/Makefile.in
index ffc6dbe..34f14ee 100644
--- a/src/modules_lectures/lectures/Makefile.in
+++ b/src/modules_lectures/lectures/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_lectures/lectures
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_lectures/lectures/lectures_introduction/Makefile.in b/src/modules_lectures/lectures/lectures_introduction/Makefile.in
index 11d528b..0f38b54 100644
--- a/src/modules_lectures/lectures/lectures_introduction/Makefile.in
+++ b/src/modules_lectures/lectures/lectures_introduction/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_lectures/lectures/lectures_introduction
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -109,6 +115,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -158,14 +166,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -209,9 +230,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_projection/Makefile.in b/src/modules_projection/Makefile.in
index 5595163..c814f6f 100644
--- a/src/modules_projection/Makefile.in
+++ b/src/modules_projection/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_projection
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_projection/pj_georeference/Makefile.in b/src/modules_projection/pj_georeference/Makefile.in
index 2e8ada6..0c631b1 100644
--- a/src/modules_projection/pj_georeference/Makefile.in
+++ b/src/modules_projection/pj_georeference/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_projection/pj_georeference
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_projection/pj_georeference/pj_georeference/Makefile.in b/src/modules_projection/pj_georeference/pj_georeference/Makefile.in
index a5a9c52..b7b716e 100644
--- a/src/modules_projection/pj_georeference/pj_georeference/Makefile.in
+++ b/src/modules_projection/pj_georeference/pj_georeference/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_projection/pj_georeference/pj_georeference
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -107,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -156,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -207,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_projection/pj_georeference/pj_georeference/lmdif0.c b/src/modules_projection/pj_georeference/pj_georeference/lmdif0.c
index 226b0ba..b9a5f7d 100644
--- a/src/modules_projection/pj_georeference/pj_georeference/lmdif0.c
+++ b/src/modules_projection/pj_georeference/pj_georeference/lmdif0.c
@@ -1,6 +1,6 @@
 /* lmdif0.c -- driver for lmdif */
 #include <math.h>
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(__BSD__)
 #include <malloc.h>
 #endif
 #include <stdlib.h>
diff --git a/src/modules_projection/pj_proj4/Makefile.in b/src/modules_projection/pj_proj4/Makefile.in
index ba78597..59f41fe 100644
--- a/src/modules_projection/pj_proj4/Makefile.in
+++ b/src/modules_projection/pj_proj4/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_projection/pj_proj4
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_projection/pj_proj4/pj_proj4/MLB_Interface.cpp b/src/modules_projection/pj_proj4/pj_proj4/MLB_Interface.cpp
index ca4eebd..7ac7129 100644
--- a/src/modules_projection/pj_proj4/pj_proj4/MLB_Interface.cpp
+++ b/src/modules_projection/pj_proj4/pj_proj4/MLB_Interface.cpp
@@ -94,6 +94,10 @@ const SG_Char * Get_Info(int i)
 //---------------------------------------------------------
 // 3. Include the headers of your modules here...
 
+#include "crs_assign.h"
+#include "crs_transform_shapes.h"
+#include "crs_transform_grid.h"
+
 #include "PROJ4_Shapes.h"
 #include "PROJ4_Grid.h"
 
@@ -105,14 +109,20 @@ CSG_Module *		Create_Module(int i)
 {
 	switch( i )
 	{
-	case 0:	return( new CPROJ4_Shapes	(PROJ4_INTERFACE_SIMPLE, false) );
-	case 1:	return( new CPROJ4_Shapes	(PROJ4_INTERFACE_DIALOG, false) );
-	case 2:	return( new CPROJ4_Grid		(PROJ4_INTERFACE_SIMPLE, false) );
-	case 3:	return( new CPROJ4_Grid		(PROJ4_INTERFACE_DIALOG, false) );
-	case 4:	return( new CPROJ4_Shapes	(PROJ4_INTERFACE_SIMPLE, true) );
-	case 5:	return( new CPROJ4_Shapes	(PROJ4_INTERFACE_DIALOG, true) );
-	case 6:	return( new CPROJ4_Grid		(PROJ4_INTERFACE_SIMPLE, true) );
-	case 7:	return( new CPROJ4_Grid		(PROJ4_INTERFACE_DIALOG, true) );
+	case  0:	return( new CCRS_Assign() );
+	case  1:	return( new CCRS_Transform_Shapes(true ) );
+	case  2:	return( new CCRS_Transform_Shapes(false) );
+	case  3:	return( new CCRS_Transform_Grid  (true ) );
+	case  4:	return( new CCRS_Transform_Grid  (false) );
+
+	case  5:	return( new CPROJ4_Shapes	(PROJ4_INTERFACE_SIMPLE, false) );
+	case  6:	return( new CPROJ4_Shapes	(PROJ4_INTERFACE_DIALOG, false) );
+	case  7:	return( new CPROJ4_Grid		(PROJ4_INTERFACE_SIMPLE, false) );
+	case  8:	return( new CPROJ4_Grid		(PROJ4_INTERFACE_DIALOG, false) );
+	case  9:	return( new CPROJ4_Shapes	(PROJ4_INTERFACE_SIMPLE, true) );
+	case 10:	return( new CPROJ4_Shapes	(PROJ4_INTERFACE_DIALOG, true) );
+	case 11:	return( new CPROJ4_Grid		(PROJ4_INTERFACE_SIMPLE, true) );
+	case 12:	return( new CPROJ4_Grid		(PROJ4_INTERFACE_DIALOG, true) );
 	}
 
 	return( NULL );
diff --git a/src/modules_projection/pj_proj4/pj_proj4/Makefile.am b/src/modules_projection/pj_proj4/pj_proj4/Makefile.am
index 6f68bc0..0448728 100644
--- a/src/modules_projection/pj_proj4/pj_proj4/Makefile.am
+++ b/src/modules_projection/pj_proj4/pj_proj4/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.6 2010/07/08 14:11:50 johanvdw Exp $
+# $Id: Makefile.am,v 1.7 2010/09/07 15:59:03 oconrad Exp $
 #
 DEP_LIBS = -lproj
 if DEBUG
@@ -15,10 +15,20 @@ AM_LDFLAGS         = -fPIC -shared -avoid-version $(DEP_LIBS)
 pkglib_LTLIBRARIES = libpj_proj4.la
 libpj_proj4_la_SOURCES =\
 MLB_Interface.cpp\
+crs_assign.cpp\
+crs_base.cpp\
+crs_transform.cpp\
+crs_transform_grid.cpp\
+crs_transform_shapes.cpp\
 PROJ4_Base.cpp\
 PROJ4_Grid.cpp\
 PROJ4_Shapes.cpp\
 MLB_Interface.h\
+crs_assign.h\
+crs_base.h\
+crs_transform.h\
+crs_transform_grid.h\
+crs_transform_shapes.h\
 PROJ4_Base.h\
 PROJ4_Grid.h\
 PROJ4_Shapes.h
diff --git a/src/modules_projection/pj_proj4/pj_proj4/Makefile.in b/src/modules_projection/pj_proj4/pj_proj4/Makefile.in
index 0bc06fb..58e3403 100644
--- a/src/modules_projection/pj_proj4/pj_proj4/Makefile.in
+++ b/src/modules_projection/pj_proj4/pj_proj4/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_projection/pj_proj4/pj_proj4
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -68,8 +74,9 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)"
 LTLIBRARIES = $(pkglib_LTLIBRARIES)
 libpj_proj4_la_DEPENDENCIES =  \
 	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
-am_libpj_proj4_la_OBJECTS = MLB_Interface.lo PROJ4_Base.lo \
-	PROJ4_Grid.lo PROJ4_Shapes.lo
+am_libpj_proj4_la_OBJECTS = MLB_Interface.lo crs_assign.lo crs_base.lo \
+	crs_transform.lo crs_transform_grid.lo crs_transform_shapes.lo \
+	PROJ4_Base.lo PROJ4_Grid.lo PROJ4_Shapes.lo
 libpj_proj4_la_OBJECTS = $(am_libpj_proj4_la_OBJECTS)
 DEFAULT_INCLUDES = -I. at am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -105,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -154,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -205,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -218,7 +244,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.6 2010/07/08 14:11:50 johanvdw Exp $
+# $Id: Makefile.am,v 1.7 2010/09/07 15:59:03 oconrad Exp $
 #
 DEP_LIBS = -lproj
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
@@ -230,10 +256,20 @@ AM_LDFLAGS = -fPIC -shared -avoid-version $(DEP_LIBS)
 pkglib_LTLIBRARIES = libpj_proj4.la
 libpj_proj4_la_SOURCES = \
 MLB_Interface.cpp\
+crs_assign.cpp\
+crs_base.cpp\
+crs_transform.cpp\
+crs_transform_grid.cpp\
+crs_transform_shapes.cpp\
 PROJ4_Base.cpp\
 PROJ4_Grid.cpp\
 PROJ4_Shapes.cpp\
 MLB_Interface.h\
+crs_assign.h\
+crs_base.h\
+crs_transform.h\
+crs_transform_grid.h\
+crs_transform_shapes.h\
 PROJ4_Base.h\
 PROJ4_Grid.h\
 PROJ4_Shapes.h
@@ -317,6 +353,11 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PROJ4_Base.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PROJ4_Grid.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PROJ4_Shapes.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/crs_assign.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/crs_base.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/crs_transform.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/crs_transform_grid.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/crs_transform_shapes.Plo at am__quote@
 
 .cpp.o:
 @am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
diff --git a/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp b/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp
index f67541a..d4ddbee 100644
--- a/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp
+++ b/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.cpp
@@ -113,12 +113,6 @@ CPROJ4_Base::CPROJ4_Base(int Interface, bool bInputList)
 		_TL("")
 	);
 
-	Parameters.Add_Value(
-		pNode	, "INVERSE"		, _TL("Inverse"),
-		_TL(""),
-		PARAMETER_TYPE_Bool		, false
-	);
-
 	//-----------------------------------------------------
 	switch( m_Interface )
 	{
@@ -172,7 +166,7 @@ int CPROJ4_Base::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter
 {
 	if( !m_bInputList && m_Interface == PROJ4_INTERFACE_SIMPLE
 	&&	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("SOURCE"))
-	&&	pParameter->asDataObject()->Get_Projection().Get_Proj4().Length() > 0 )
+	&&	pParameter->asDataObject() && pParameter->asDataObject()->Get_Projection().Get_Proj4().Length() > 0 )
 	{
 		pParameters->Get_Parameter("SOURCE_PROJ")->Set_Value(pParameter->asDataObject()->Get_Projection().Get_Proj4());
 	}
@@ -213,13 +207,6 @@ bool CPROJ4_Base::On_Execute(void)
 		//-------------------------------------------------
 		if(	m_pPrjSrc && m_pPrjDst )
 		{
-			if( Parameters("INVERSE")->asBool() )
-			{
-				PJ	*tmp	= m_pPrjSrc;
-				m_pPrjSrc	= m_pPrjDst;
-				m_pPrjDst	= tmp;
-			}
-
 			if( m_pPrjSrc->inv == NULL )
 			{
 				Error_Set(_TL("Inverse transformation not available for selected projection type."));
diff --git a/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h b/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h
index 70ec20c..ad58739 100644
--- a/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h
+++ b/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Base.h
@@ -93,6 +93,8 @@ class pj_proj4_EXPORT CPROJ4_Base : public CSG_Module
 public:
 	CPROJ4_Base(int Interface, bool bInputList);
 
+	virtual bool		do_Sync_Projections			(void)	{	return( false  );	}
+
 
 protected:
 
diff --git a/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp b/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp
index 5666111..7f2b6c5 100644
--- a/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp
+++ b/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.cpp
@@ -245,7 +245,7 @@ bool CPROJ4_Grid::On_Execute_Conversion(void)
 			break;
 
 		case 1:	// select grid system...
-			if( Dlg_Parameters("GET_SYSTEM") && Get_Parameters("GET_SYSTEM")->Get_Parameter("SYSTEM")->asGrid_System()->is_Valid() )
+			if( Dlg_Parameters("<") && Get_Parameters("GET_SYSTEM")->Get_Parameter("SYSTEM")->asGrid_System()->is_Valid() )
 			{
 				pGrid	= SG_Create_Grid(*Get_Parameters("GET_SYSTEM")->Get_Parameter("SYSTEM")->asGrid_System(), Type);
 			}
diff --git a/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h b/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h
index 7e0c17c..260bfe1 100644
--- a/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h
+++ b/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Grid.h
@@ -77,7 +77,7 @@ class pj_proj4_EXPORT CPROJ4_Grid : public CPROJ4_Base
 public:
 	CPROJ4_Grid(int Interface, bool bInputList);
 
-	virtual const SG_Char *		Get_MenuPath			(void)	{	return( _TL("R:Grid") );	}
+	virtual const SG_Char *		Get_MenuPath			(void)	{	return( _TL("R:Alternatives") );	}
 
 
 protected:
diff --git a/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.h b/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.h
index 493dd4c..cdf59f5 100644
--- a/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.h
+++ b/src/modules_projection/pj_proj4/pj_proj4/PROJ4_Shapes.h
@@ -77,7 +77,7 @@ class pj_proj4_EXPORT CPROJ4_Shapes : public CPROJ4_Base
 public:
 	CPROJ4_Shapes(int Interface, bool bInputList);
 
-	virtual const SG_Char *	Get_MenuPath			(void)	{	return( _TL("R:Shapes") );	}
+	virtual const SG_Char *		Get_MenuPath			(void)	{	return( _TL("R:Alternatives") );	}
 
 
 protected:
diff --git a/src/modules_projection/pj_proj4/pj_proj4/crs_assign.cpp b/src/modules_projection/pj_proj4/pj_proj4/crs_assign.cpp
new file mode 100644
index 0000000..fc7d3aa
--- /dev/null
+++ b/src/modules_projection/pj_proj4/pj_proj4/crs_assign.cpp
@@ -0,0 +1,169 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Projection_Proj4                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    crs_assign.cpp                     //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "crs_assign.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CCRS_Assign::CCRS_Assign(void)
+{
+	//-----------------------------------------------------
+	Set_Name		(_TL("Set Coordinate Reference System"));
+
+	Set_Author		(SG_T("O.Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		"Define or change the Coordinate Reference System (CRS) "
+		"associated with the supplied data sets."
+	));
+
+	//-----------------------------------------------------
+	Parameters.Add_Grid_List(
+		NULL	, "GRIDS"	, _TL("Grids"),
+		_TL(""),
+		PARAMETER_INPUT_OPTIONAL
+	);
+
+	Parameters.Add_Shapes_List(
+		NULL	, "SHAPES"	, _TL("Shapes"),
+		_TL(""),
+		PARAMETER_INPUT_OPTIONAL
+	);
+
+	Parameters.Add_TIN_List(
+		NULL	, "TINS"	, _TL("TINs"),
+		_TL(""),
+		PARAMETER_INPUT_OPTIONAL
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Assign::On_Execute(void)
+{
+	int	nTotal	= Parameters("GRIDS" )->asList()->Get_Count()
+				+ Parameters("SHAPES")->asList()->Get_Count()
+				+ Parameters("TINS"  )->asList()->Get_Count();
+
+	if( nTotal <= 0 )
+	{
+		Message_Dlg(_TL("nothing to do: no data in selection"));
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	CSG_Projection	Projection;
+
+	if( !Get_Projection(Projection) )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	int	nProjected	= 0;
+
+	nProjected	+= Set_Projections(Projection, Parameters("GRIDS" )->asList());
+	nProjected	+= Set_Projections(Projection, Parameters("SHAPES")->asList());
+	nProjected	+= Set_Projections(Projection, Parameters("TINS")  ->asList());
+
+	//-----------------------------------------------------
+	return( nProjected > 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CCRS_Assign::Set_Projections(const CSG_Projection &Projection, CSG_Parameter_List *pList)
+{
+	int	nProjected	= 0;
+
+	for(int i=0; i<pList->Get_Count(); i++)
+	{
+		if( pList->asDataObject(i)->Get_Projection().Create(Projection) )
+		{
+			pList->asDataObject(i)->Set_Modified();
+
+			nProjected	++;
+		}
+	}
+
+	return( nProjected );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_projection/pj_proj4/pj_proj4/crs_assign.h b/src/modules_projection/pj_proj4/pj_proj4/crs_assign.h
new file mode 100644
index 0000000..a31ed39
--- /dev/null
+++ b/src/modules_projection/pj_proj4/pj_proj4/crs_assign.h
@@ -0,0 +1,98 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Projection_Proj4                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     crs_assign.h                      //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__crs_assign_H
+#define HEADER_INCLUDED__crs_assign_H
+
+//---------------------------------------------------------
+#include "crs_base.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class pj_proj4_EXPORT CCRS_Assign : public CCRS_Base
+{
+public:
+	CCRS_Assign(void);
+
+
+protected:
+
+	virtual bool		On_Execute					(void);
+
+
+private:
+
+	int					Set_Projections				(const CSG_Projection &Projection, CSG_Parameter_List *pList);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__crs_assign_H
diff --git a/src/modules_projection/pj_proj4/pj_proj4/crs_base.cpp b/src/modules_projection/pj_proj4/pj_proj4/crs_base.cpp
new file mode 100644
index 0000000..a5c67a6
--- /dev/null
+++ b/src/modules_projection/pj_proj4/pj_proj4/crs_base.cpp
@@ -0,0 +1,837 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Projection_Proj4                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     crs_base.cpp                      //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "crs_base.h"
+
+#include <projects.h>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CCRS_Base::CCRS_Base(void)
+{
+	CSG_Parameter	*pNode_0, *pNode_1;
+
+	//-----------------------------------------------------
+	Parameters.Add_Choice(
+		NULL	, "CRS_METHOD"		, _TL("Get CRS Definition from..."),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			_TL("Proj4 Parameters"),
+			_TL("EPSG Code"),
+			_TL("Well Known Text File")
+		), 0
+	);
+
+	//-----------------------------------------------------
+	pNode_0	= Parameters.Add_Node(NULL, "NODE_PROJ4", _TL("Proj4 Parameters"), _TL(""));
+
+	pNode_1	= Parameters.Add_String(
+		pNode_0	, "CRS_PROJ4"		, _TL("Proj4 Parameters"),
+		_TL(""),
+		SG_T("+proj=longlat +ellps=WGS84 +datum=WGS84"), true
+	);
+
+	if( SG_UI_Get_Window_Main() )
+	{
+		Parameters.Add_Parameters(
+			pNode_1	, "CRS_DIALOG"		, _TL("Dialog"),
+			_TL("")
+		);
+
+		Set_User_Parameters(Parameters("CRS_DIALOG")->asParameters());
+	}
+
+	//-----------------------------------------------------
+	pNode_0	= Parameters.Add_Node(
+		NULL	, "NODE_EPSG"	, _TL("EPSG"),
+		_TL("")
+	);
+
+	pNode_1	= Parameters.Add_Value(
+		pNode_0	, "CRS_EPSG"	, _TL("EPSG Code"),
+		_TL(""),
+		PARAMETER_TYPE_Int, 4326, 2000, true, 32766, true
+	);
+
+	if( SG_UI_Get_Window_Main() )
+	{
+		Parameters.Add_Choice(
+			pNode_1	, "CRS_EPSG_GEOGCS"	, _TL("Geographic Coordinate Systems"),
+			_TL(""),
+			SG_Get_Projections().Get_Names_List(SG_PROJ_TYPE_CS_Geographic)
+		);
+
+		Parameters.Add_Choice(
+			pNode_1	, "CRS_EPSG_PROJCS"	, _TL("Projected Coordinate Systems"),
+			_TL(""),
+			SG_Get_Projections().Get_Names_List(SG_PROJ_TYPE_CS_Projected)
+		);
+	}
+
+	//-----------------------------------------------------
+	pNode_0	= Parameters.Add_Node(NULL, "NODE_FILE", _TL("Well Known Text File"), _TL(""));
+
+	Parameters.Add_FilePath(
+		pNode_0	, "CRS_FILE"		, _TL("Well Known Text File"),
+		_TL(""),
+		CSG_String::Format(
+			SG_T("%s|*.prj;*.wkt;*.txt|%s|*.prj|%s|*.wkt|%s|*.txt|%s|*.*"),
+			_TL("All Recognized Files"),
+			_TL("ESRI WKT Files (*.prj)"),
+			_TL("WKT Files (*.wkt)"),
+			_TL("Text Files (*.txt)"),
+			_TL("All Files")
+		)
+	);
+
+	//-----------------------------------------------------
+	if( SG_UI_Get_Window_Main() )
+	{
+		pNode_0	= Parameters.Add_Node(NULL, "NODE_DATA", _TL("Pick CRS from loaded data set"), _TL(""));
+
+		Parameters.Add_Grid(
+			pNode_0	, "CRS_GRID"		, _TL("Grid"),
+			_TL(""),
+			PARAMETER_INPUT_OPTIONAL, false
+		);
+
+		Parameters.Add_Shapes(
+			pNode_0	, "CRS_SHAPES"		, _TL("Shapes"),
+			_TL(""),
+			PARAMETER_INPUT_OPTIONAL
+		);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CCRS_Base::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	int				i;
+	CSG_Projection	Projection;
+
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("CRS_EPSG")) )
+	{
+		if( Projection.Create(pParameter->asInt()) )
+		{
+			pParameters->Get_Parameter("CRS_PROJ4")->Set_Value(Projection.Get_Proj4().c_str());
+		}
+	}
+
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("CRS_EPSG_GEOGCS"))
+	||	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("CRS_EPSG_PROJCS")) )
+	{
+		if( pParameter->asChoice()->Get_Data(i) && (i = SG_Get_Projections().Get_Projection(i).Get_EPSG()) >= 0 )
+		{
+			pParameters->Get_Parameter("CRS_EPSG")->Set_Value(i);
+
+			On_Parameter_Changed(pParameters, pParameters->Get_Parameter("CRS_EPSG"));
+		}
+	}
+
+	//-----------------------------------------------------
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("CRS_DIALOG")) )
+	{
+		pParameters->Get_Parameter("CRS_PROJ4")->Set_Value(Get_User_Definition(*pParameter->asParameters()));
+	}
+
+	if(	!SG_STR_CMP(pParameters->Get_Identifier(), SG_T("CRS_DIALOG")) )
+	{
+		if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("PROJ_TYPE")) )
+		{
+			pParameters->Get_Parameter("OPTIONS")->asParameters()->Assign(Get_Parameters(SG_STR_MBTOSG(pj_list[pParameter->asInt()].id)));
+		}
+	}
+
+	//-----------------------------------------------------
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("CRS_FILE")) )
+	{
+		if( Projection.Load(pParameters->Get_Parameter("CRS_FILE")->asString()) )
+		{
+			if( Projection.Get_EPSG() > 0 )
+			{
+				pParameters->Get_Parameter("CRS_EPSG")->Set_Value(Projection.Get_EPSG());
+
+				On_Parameter_Changed(pParameters, pParameters->Get_Parameter("CRS_EPSG"));
+			}
+			else
+			{
+				pParameters->Get_Parameter("CRS_PROJ4")->Set_Value(Projection.Get_Proj4().c_str());
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("CRS_GRID"))
+	||	!SG_STR_CMP(pParameter->Get_Identifier(), SG_T("CRS_SHAPES")) )
+	{
+		if( pParameter->asDataObject() && pParameter->asDataObject()->Get_Projection().is_Okay() )
+		{
+			if( pParameter->asDataObject()->Get_Projection().Get_EPSG() > 0 )
+			{
+				pParameters->Get_Parameter("CRS_EPSG")->Set_Value(pParameter->asDataObject()->Get_Projection().Get_EPSG());
+
+				On_Parameter_Changed(pParameters, pParameters->Get_Parameter("CRS_EPSG"));
+			}
+			else
+			{
+				pParameters->Get_Parameter("CRS_PROJ4")->Set_Value(pParameter->asDataObject()->Get_Projection().Get_Proj4().c_str());
+			}
+		}
+
+		pParameter->Set_Value((void *)NULL);
+	}
+
+	return( 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Base::Get_Projection(CSG_Projection &Projection)
+{
+	switch( Parameters("CRS_METHOD")->asInt() )
+	{
+	case 0:	default:	// Proj4 Parameters"),
+		Projection.Create	(Parameters("CRS_PROJ4")->asString(), SG_PROJ_FMT_Proj4);
+		break;
+
+	case 1:				// EPSG Code
+		Projection.Create	(Parameters("CRS_EPSG")->asInt());
+		break;
+
+	case 2:				// Well Known Text File"),
+		Projection.Load		(Parameters("CRS_FILE")->asString());
+		break;
+	}
+
+	return( Projection.is_Okay() );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define WGS84_ELLPS_A	6378137.000
+#define WGS84_ELLPS_B	6356752.314
+
+//---------------------------------------------------------
+bool CCRS_Base::Set_User_Parameters(CSG_Parameters *pParameters)
+{
+	CSG_Parameter	*pNode_0 = NULL, *pNode_1, *pNode_2;
+	CSG_String		sProjections, sName, sDescription, sArguments, sDatums, sEllipsoids, sUnits;
+
+	///////////////////////////////////////////////////////
+
+	// Projection -----------------------------------------
+	sDescription	= _TL("Available Projections:");
+
+	for(struct PJ_LIST *pProjection=pj_list; pProjection->id; ++pProjection)
+	{
+		sArguments		= *pProjection->descr;
+		sName			= sArguments.BeforeFirst('\n');
+		sArguments		= sArguments.AfterFirst ('\n').AfterFirst('\n').AfterFirst('\t');
+
+		sProjections	+= CSG_String::Format(SG_T("{%s}%s|")       , SG_STR_MBTOSG(pProjection->id), sName.c_str());
+		sDescription	+= CSG_String::Format(SG_T("\n[%s] %s (%s)"), SG_STR_MBTOSG(pProjection->id), sName.c_str(), sArguments.c_str());
+
+		Add_User_Projection(pProjection->id, sName, sArguments);
+	}
+
+	// Datums ---------------------------------------------
+	for(struct PJ_DATUMS *pDatum=pj_datums; pDatum->id; ++pDatum)
+	{
+		sDatums	+= CSG_String::Format(SG_T("{%s}%s|"), SG_STR_MBTOSG(pDatum->id),
+			SG_STR_MBTOSG(pDatum->comments) && SG_STR_MBTOSG(*pDatum->comments) ?
+			SG_STR_MBTOSG(pDatum->comments) : SG_STR_MBTOSG(pDatum->id)
+		);
+	}
+
+	// Ellipsoids -----------------------------------------
+	for(struct PJ_ELLPS *pEllipse=pj_ellps; pEllipse->id; ++pEllipse)
+	{
+		sEllipsoids	+= CSG_String::Format(SG_T("{%s}%s (%s, %s)|"), SG_STR_MBTOSG(pEllipse->id), SG_STR_MBTOSG(pEllipse->name), SG_STR_MBTOSG(pEllipse->major), SG_STR_MBTOSG(pEllipse->ell));
+	}
+
+	// Units ----------------------------------------------
+	for(struct PJ_UNITS *pUnit=pj_units; pUnit->id; ++pUnit)
+	{
+		sUnits	+= CSG_String::Format(SG_T("{%s}%s (%s)|"), SG_STR_MBTOSG(pUnit->id), SG_STR_MBTOSG(pUnit->name), SG_STR_MBTOSG(pUnit->to_meter));
+	}
+
+
+	///////////////////////////////////////////////////////
+
+	//-----------------------------------------------------
+	// Projection...
+
+	if( sProjections.Length() == 0 )
+	{
+		return( false );
+	}
+
+	pParameters->Add_Choice	(pNode_0, "PROJ_TYPE"	, _TL("Projection Type")			, sDescription, sProjections);
+
+
+	//-----------------------------------------------------
+	// Datum...
+
+	pNode_1	= pParameters->Add_Choice(
+		pNode_0, "DATUM_DEF"		, _TL("Datum Definition"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|"),
+			_TL("Predefined Datum"),
+			_TL("User Defined Datum")
+		)
+	);
+
+
+	//-----------------------------------------------------
+	// Predefined Datum...
+
+	pParameters->Add_Choice	(pNode_1, "DATUM"		, _TL("Predefined Datum")			, _TL(""), sDatums);
+
+
+	//-----------------------------------------------------
+	// Ellipsoid...
+
+	pNode_2	= pParameters->Add_Choice(
+		pNode_1, "ELLIPSOID"		, _TL("Ellipsoid Definition"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|%s|"),
+			_TL("Predefined Ellipsoids"),
+			_TL("Semimajor Axis and Semiminor Axis"),
+			_TL("Semimajor Axis and Flattening"),
+			_TL("Semimajor Axis and Reciprocal Flattening"),
+			_TL("Semimajor Axis and Eccentricity"),
+			_TL("Semimajor Axis and Eccentricity Squared")
+		)
+	);
+
+	pParameters->Add_Choice	(pNode_2, "ELLPS_DEF"	, _TL("Predefined Ellipsoids")		, _TL(""), sEllipsoids);
+
+	pParameters->Add_Value	(pNode_2, "ELLPS_A"		, _TL("Semimajor Axis (a)")			, _TL(""), PARAMETER_TYPE_Double, WGS84_ELLPS_A);
+	pParameters->Add_Value	(pNode_2, "ELLPS_B"		, _TL("Semiminor Axis (b)")			, _TL(""), PARAMETER_TYPE_Double, WGS84_ELLPS_B);
+	pParameters->Add_Value	(pNode_2, "ELLPS_F"		, _TL("Flattening (f)")				, _TL(""), PARAMETER_TYPE_Double, (WGS84_ELLPS_A - WGS84_ELLPS_B) / WGS84_ELLPS_A);
+	pParameters->Add_Value	(pNode_2, "ELLPS_RF"	, _TL("Reciprocal Flattening (rf)")	, _TL(""), PARAMETER_TYPE_Double, WGS84_ELLPS_A / (WGS84_ELLPS_A - WGS84_ELLPS_B));
+	pParameters->Add_Value	(pNode_2, "ELLPS_E"		, _TL("Eccentricity (e)")			, _TL(""), PARAMETER_TYPE_Double, sqrt(WGS84_ELLPS_A*WGS84_ELLPS_A + WGS84_ELLPS_B*WGS84_ELLPS_B));
+	pParameters->Add_Value	(pNode_2, "ELLPS_ES"	, _TL("Squared Eccentricity (es)")	, _TL(""), PARAMETER_TYPE_Double, WGS84_ELLPS_A*WGS84_ELLPS_A + WGS84_ELLPS_B*WGS84_ELLPS_B);
+
+
+	//-----------------------------------------------------
+	// Datum Shift...
+
+	pNode_2	= pParameters->Add_Choice(
+		pNode_1, "DATUM_SHIFT"	, _TL("Datum Shift"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
+			_TL("none"),
+			_TL("3 parameters (translation only)"),
+			_TL("7 parameters"),
+			_TL("Datum Shift Grid")
+		)
+	);
+
+	pParameters->Add_Value	(pNode_2, "DS_DX"		, _TL("Translation X")				, _TL(""), PARAMETER_TYPE_Double, 0.0);
+	pParameters->Add_Value	(pNode_2, "DS_DY"		, _TL("Translation Y")				, _TL(""), PARAMETER_TYPE_Double, 0.0);
+	pParameters->Add_Value	(pNode_2, "DS_DZ"		, _TL("Translation Z")				, _TL(""), PARAMETER_TYPE_Double, 0.0);
+	pParameters->Add_Value	(pNode_2, "DS_RX"		, _TL("Rotation X")					, _TL(""), PARAMETER_TYPE_Double, 0.0);
+	pParameters->Add_Value	(pNode_2, "DS_RY"		, _TL("Rotation Y")					, _TL(""), PARAMETER_TYPE_Double, 0.0);
+	pParameters->Add_Value	(pNode_2, "DS_RZ"		, _TL("Rotation Z")					, _TL(""), PARAMETER_TYPE_Double, 0.0);
+	pParameters->Add_Value	(pNode_2, "DS_SC"		, _TL("Scaling")					, _TL(""), PARAMETER_TYPE_Double, 0.0);
+
+	pParameters->Add_FilePath(
+		pNode_2, "DATUM_GRID"	, _TL("Datum Shift Grid File"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|%s"),
+			_TL("NTv2 Grid Shift Binary (*.gsb)")	, SG_T("*.gsb"),
+			_TL("All Files")						, SG_T("*.*")
+		), NULL, false, false, false
+	);
+
+
+	//-----------------------------------------------------
+	// General Settings...
+
+	pNode_1	= pParameters->Add_Node(pNode_0, "NODE_GENERAL"	, _TL("General Settings"), _TL(""));
+
+	pParameters->Add_Value	(pNode_1, "LON_0"		, _TL("Central Meridian")		, _TL(""), PARAMETER_TYPE_Double, 0.0);
+	pParameters->Add_Value	(pNode_1, "LAT_0"		, _TL("Central Parallel")		, _TL(""), PARAMETER_TYPE_Double, 0.0);
+	pParameters->Add_Value	(pNode_1, "X_0"			, _TL("False Easting")			, _TL(""), PARAMETER_TYPE_Double, 0.0);
+	pParameters->Add_Value	(pNode_1, "Y_0"			, _TL("False Northing")			, _TL(""), PARAMETER_TYPE_Double, 0.0);
+	pParameters->Add_Value	(pNode_1, "K_0"			, _TL("Scale Factor")			, _TL(""), PARAMETER_TYPE_Double, 1.0, 0.0, true);
+
+	pParameters->Add_Choice	(pNode_1, "UNIT"		, _TL("Unit")					, _TL(""), sUnits, 1);
+
+	pParameters->Add_Value	(pNode_1, "NO_DEFS"		, _TL("Ignore Defaults")		, _TL(""), PARAMETER_TYPE_Bool, false);
+
+	pParameters->Add_Value	(pNode_1, "OVER"		, _TL("Allow longitudes outside -180 to 180 Range")	, _TL(""), PARAMETER_TYPE_Bool, false);
+
+	//-----------------------------------------------------
+	pParameters->Add_Parameters(
+		pNode_0, "OPTIONS"	, _TL("Projection Settings"),
+		_TL("")
+	);
+
+	pParameters->Get_Parameter("OPTIONS")->asParameters()->Assign(Get_Parameters(SG_STR_MBTOSG(pj_list[0].id)));
+
+	//-----------------------------------------------------
+	return( true );
+}
+
+//---------------------------------------------------------
+#define PRM_ADD_BOL(key, name, val)	pParms->Add_Value(NULL, key, name, _TL(""), PARAMETER_TYPE_Bool  , val);
+#define PRM_ADD_INT(key, name, val)	pParms->Add_Value(NULL, key, name, _TL(""), PARAMETER_TYPE_Int   , val);
+#define PRM_ADD_FLT(key, name, val)	pParms->Add_Value(NULL, key, name, _TL(""), PARAMETER_TYPE_Double, val);
+
+//---------------------------------------------------------
+bool CCRS_Base::Add_User_Projection(const CSG_String &sID, const CSG_String &sName, const CSG_String &sArgs)
+{
+	if( sArgs.Length() == 0 )
+	{
+		return( false );
+	}
+
+	CSG_Parameters	*pParms	= Add_Parameters(sID, sName, sArgs);
+
+//	pParms->Add_Info_String(NULL, "DESC", _TL("Description"), _TL(""), sArgs.c_str(), true);
+
+	//-----------------------------------------------------
+	// Cylindrical Projections...
+
+	if(	!sID.CmpNoCase(SG_T("cea"))			// Equal Area Cylindrical
+	||	!sID.CmpNoCase(SG_T("eqc"))			// Equidistant Cylindrical (Plate Caree) 
+	||	!sID.CmpNoCase(SG_T("merc")) )		// Mercator 
+	{
+		PRM_ADD_FLT("lat_ts"	, _TL("True Scale Latitude")	, 0.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("utm")) )		// Universal Transverse Mercator (UTM)
+	{
+		PRM_ADD_INT("zone"		, _TL("Zone")					, 32);
+		PRM_ADD_BOL("south"		, _TL("South")					, false);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("omerc")) )		// Oblique Mercator 
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 40.0);
+		PRM_ADD_FLT("lon_1"		, _TL("Longitude 1"	)			,-20.0);
+		PRM_ADD_FLT("lat_2"		, _TL("Latitude 2")				, 50.0);
+		PRM_ADD_FLT("lon_2"		, _TL("Longitude 2"	)			, 20.0);
+	}
+
+	//-----------------------------------------------------
+	// Pseudocylindrical Projections...
+
+	if(	!sID.CmpNoCase(SG_T("gn_sinu")) )	// General Sinusoidal Series
+	{
+		PRM_ADD_FLT("m"			, SG_T("m")						, 0.5);
+		PRM_ADD_FLT("n"			, SG_T("n")						, 1.0 + M_PI_045);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("loxim")) )		// Loximuthal
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 40.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("urmfps")) )	// Urmaev Flat-Polar Sinusoidal
+	{
+		PRM_ADD_FLT("n"			, SG_T("n")						, 1.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("urm5")) )		// Urmaev V
+	{
+		PRM_ADD_FLT("n"			, SG_T("n")						, 1.0);
+		PRM_ADD_FLT("q"			, SG_T("q")						, 1.0);
+		PRM_ADD_FLT("alphi"		, SG_T("alphi")					, 45.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("wink1"))		// Winkel I
+	||	!sID.CmpNoCase(SG_T("wag3")) )		// Wagner III
+	{
+		PRM_ADD_FLT("lat_ts"	, _TL("True Scale Latitude")	, 45.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("wink2")) )		// Winkel II
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 40.0);
+	}
+
+
+	//-----------------------------------------------------
+	// Conic Projections...
+
+	if(	!sID.CmpNoCase(SG_T("aea"))			// Albers Equal Area
+	||	!sID.CmpNoCase(SG_T("eqdc"))		// Equidistant Conic
+	||	!sID.CmpNoCase(SG_T("euler"))		// Euler 
+	||	!sID.CmpNoCase(SG_T("imw_p"))		// International Map of the World Polyconic 
+	||	!sID.CmpNoCase(SG_T("murd1"))		// Murdoch I 
+	||	!sID.CmpNoCase(SG_T("murd2"))		// Murdoch II 
+	||	!sID.CmpNoCase(SG_T("murd3"))		// Murdoch III 
+	||	!sID.CmpNoCase(SG_T("pconic"))		// Perspective Conic 
+	||	!sID.CmpNoCase(SG_T("tissot"))		// Tissot 
+	||	!sID.CmpNoCase(SG_T("vitk1")) )		// Vitkovsky I 
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 33.0);
+		PRM_ADD_FLT("lat_2"		, _TL("Latitude 2")				, 45.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("lcc")) )		// Lambert Conformal Conic 
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 33.0);
+		PRM_ADD_FLT("lat_2"		, _TL("Latitude 2")				, 45.0);
+	}
+
+	if( !sID.CmpNoCase(SG_T("leac")) )		// Lambert Equal Area Conic
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 45.0);
+		PRM_ADD_BOL("south"		, _TL("South")					, false);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("rpoly")) )		// Rectangular Polyconic
+	{
+		PRM_ADD_FLT("lat_ts"	, _TL("True Scale Latitude")	, 45.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("mpoly")) )		// Modified Polyconic
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 33.0);
+		PRM_ADD_FLT("lat_2"		, _TL("Latitude 2")				, 45.0);
+		PRM_ADD_BOL("lotsa"		, _TL("Lotsa")					, true);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("bonne")) )		// Bonne
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 45.0);
+	}
+
+
+	//-----------------------------------------------------
+	// Azimuthal Projections...
+
+	if(	!sID.CmpNoCase(SG_T("stere")) )		// Stereographic
+	{
+		PRM_ADD_FLT("lat_ts"	, _TL("True Scale Latitude")	, 45.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("ups")) )		// Universal Polar Stereographic
+	{
+		PRM_ADD_BOL("south"		, _TL("South")					, true);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("airy")) )		// Airy
+	{
+		PRM_ADD_FLT("lat_b"		, _TL("Latitude B")				, 45.0);
+		PRM_ADD_BOL("no_cut"	, _TL("No Cut")					, true);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("nsper")) )		// Near-sided perspective
+	{
+		PRM_ADD_FLT("h"			, _TL("Height of view point")	, 1.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("aeqd")) )		// Azimuthal Equidistant
+	{
+		PRM_ADD_BOL("guam"		, _TL("guam")					, true);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("hammer")) )	// Hammer & Eckert-Greifendorff
+	{
+		PRM_ADD_FLT("W"			, _TL("W")						, 0.5);
+		PRM_ADD_FLT("M"			, _TL("M")						, 1.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("wintri")) )	// Winkel Tripel 
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 40.0);
+	}
+
+
+	//-----------------------------------------------------
+	// Miscellaneous Projections...
+
+	if(	!sID.CmpNoCase(SG_T("ocea"))		// Oblique Cylindrical Equal Area
+	||	!sID.CmpNoCase(SG_T("tpeqd")) )		// Two Point Equidistant 
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 40.0);
+		PRM_ADD_FLT("lon_1"		, _TL("Longitude 1")			,-20.0);
+		PRM_ADD_FLT("lat_2"		, _TL("Latitude 2")				, 50.0);
+		PRM_ADD_FLT("lon_2"		, _TL("Longitude 2"	)			, 20.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("lsat")) )		// Space oblique for LANDSAT
+	{
+		PRM_ADD_INT("lsat"		, _TL("Landsat")				, 1.0);
+		PRM_ADD_INT("path"		, _TL("Path")					, 1.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("labrd")) )		// Laborde
+	{
+		PRM_ADD_FLT("azi"		, _TL("Azimuth"	)				, 19.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("lagrng")) )	// Lagrange
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 0.0);
+		PRM_ADD_FLT("W"			, _TL("W")						, 2.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("chamb")) )		// Chamberlin Trimetric
+	{
+		PRM_ADD_FLT("lat_1"		, _TL("Latitude 1")				, 30.0);
+		PRM_ADD_FLT("lon_1"		, _TL("Longitude 1"	)			,-20.0);
+		PRM_ADD_FLT("lat_2"		, _TL("Latitude 2")				, 40.0);
+		PRM_ADD_FLT("lon_2"		, _TL("Longitude 2")			, 00.0);
+		PRM_ADD_FLT("lat_3"		, _TL("Latitude 3")				, 50.0);
+		PRM_ADD_FLT("lon_3"		, _TL("Longitude 3"	)			, 20.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("oea")) )		// Oblated Equal Area
+	{
+		PRM_ADD_FLT("m"			, _TL("m")						, 1.0);
+		PRM_ADD_FLT("n"			, _TL("n")						, 1.0);
+		PRM_ADD_FLT("theta"		, _TL("theta")					, 45.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("tpers")) )		// Tilted perspective
+	{
+		PRM_ADD_FLT("tilt"		, _TL("Tilt")					, 45.0);
+		PRM_ADD_FLT("azi"		, _TL("Azimuth")				, 45.0);
+		PRM_ADD_FLT("h"			, _TL("h")						, 1000.0);
+	}
+
+	if(	!sID.CmpNoCase(SG_T("ob_tran")) )	// General Oblique Transformation
+	{
+		PRM_ADD_FLT("o_lat_p"	, _TL("Latitude Pole")			, 40.0);
+		PRM_ADD_FLT("o_lon_p"	, _TL("Longitude Pole")			, 40.0);
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define STR_ADD_BOL(key, val)		(val ? CSG_String::Format(SG_T("+%s "), key) : SG_T(""))
+#define STR_ADD_INT(key, val)		CSG_String::Format(SG_T("+%s=%d "), key, val)
+#define STR_ADD_FLT(key, val)		CSG_String::Format(SG_T("+%s=%f "), key, val)
+#define STR_ADD_STR(key, val)		CSG_String::Format(SG_T("+%s=%s "), key, val)
+
+//---------------------------------------------------------
+CSG_String CCRS_Base::Get_User_Definition(CSG_Parameters &P)
+{
+	CSG_String	Proj4;
+
+	//-----------------------------------------------------
+	Proj4	+= STR_ADD_STR(SG_T("proj")	, SG_STR_MBTOSG(pj_list[P("PROJ_TYPE")->asInt()].id));
+
+	if( P("LON_0")->asDouble() )	Proj4	+= STR_ADD_FLT(SG_T("lon_0")	, P("LON_0")->asDouble());
+	if( P("LAT_0")->asDouble() )	Proj4	+= STR_ADD_FLT(SG_T("lat_0")	, P("LAT_0")->asDouble());
+
+	if( P("X_0"  )->asDouble() )	Proj4	+= STR_ADD_FLT(SG_T("x_0")		, P("X_0"  )->asDouble());
+	if( P("Y_0"  )->asDouble() )	Proj4	+= STR_ADD_FLT(SG_T("y_0")		, P("Y_0"  )->asDouble());
+
+	if( P("K_0")->asDouble() != 1.0 && P("K_0")->asDouble() > 0.0 )
+	{
+		Proj4	+= STR_ADD_FLT(SG_T("k_0")	, P("K_0"  )->asDouble());
+	}
+
+	Proj4	+= STR_ADD_STR(SG_T("units")	, SG_STR_MBTOSG(pj_units[P("UNIT")->asInt()].id));
+
+	//-----------------------------------------------------
+	switch( P("DATUM_DEF")->asInt() )
+	{
+	case 0:	// predefined datum
+
+		Proj4	+= STR_ADD_STR(SG_T("datum")	, SG_STR_MBTOSG(pj_datums[P("DATUM")->asInt()].id));
+
+		break;
+
+	//-----------------------------------------------------
+	case 1:	// user defined datum
+
+		switch( P("ELLIPSOID")->asInt() )
+		{
+		case 0:	// Predefined Ellipsoid
+			Proj4	+= STR_ADD_STR(SG_T("ellps")	, SG_STR_MBTOSG(pj_ellps[P("ELLPS_PREDEF")->asInt()].id));
+			break;
+
+		case 1:	// Semiminor axis
+			Proj4	+= STR_ADD_FLT(SG_T("a")		, P("ELLPS_A" )->asDouble());
+			Proj4	+= STR_ADD_FLT(SG_T("b")		, P("ELLPS_B" )->asDouble());
+			break;
+
+		case 2:	// Flattening
+			Proj4	+= STR_ADD_FLT(SG_T("a")		, P("ELLPS_A" )->asDouble());
+			Proj4	+= STR_ADD_FLT(SG_T("f")		, P("ELLPS_F" )->asDouble());
+			break;
+
+		case 3:	// Reciprocal Flattening
+			Proj4	+= STR_ADD_FLT(SG_T("a")		, P("ELLPS_A" )->asDouble());
+			Proj4	+= STR_ADD_FLT(SG_T("rf")		, P("ELLPS_RF")->asDouble());
+			break;
+
+		case 4:	// Eccentricity
+			Proj4	+= STR_ADD_FLT(SG_T("a")		, P("ELLPS_A" )->asDouble());
+			Proj4	+= STR_ADD_FLT(SG_T("e")		, P("ELLPS_E" )->asDouble());
+			break;
+
+		case 5:	// Eccentricity Squared
+			Proj4	+= STR_ADD_FLT(SG_T("a")		, P("ELLPS_A" )->asDouble());
+			Proj4	+= STR_ADD_FLT(SG_T("es")		, P("ELLPS_ES")->asDouble());
+			break;
+		}
+
+		switch( P("DATUM_SHIFT")->asInt() )
+		{
+		case 1:	// 3 parameters
+			Proj4	+= CSG_String::Format(SG_T("+towgs84=%f,%f,%f "),
+				P("DS_DX")->asDouble(),
+				P("DS_DY")->asDouble(),
+				P("DS_DZ")->asDouble()
+			);
+			break;
+
+		case 2:	// 7 parameters
+			Proj4	+= CSG_String::Format(SG_T("+towgs84=%f,%f,%f,%f,%f,%f,%f "),
+				P("DS_DX")->asDouble(),
+				P("DS_DY")->asDouble(),
+				P("DS_DZ")->asDouble(),
+				P("DS_RX")->asDouble(),
+				P("DS_RY")->asDouble(),
+				P("DS_RZ")->asDouble(),
+				P("DS_SC")->asDouble()
+			);
+			break;
+		}
+
+		break;
+	}
+
+	// datum shift grid...
+	if( SG_File_Exists(P("DATUM_GRID")->asString()) )
+	{
+		Proj4	+= STR_ADD_STR(SG_T("nadgrids"), P("DATUM_GRID")->asString());
+	}
+
+	//-----------------------------------------------------
+	for(int i=0; i<P("OPTIONS")->asParameters()->Get_Count(); i++)
+	{
+		CSG_Parameter	*p	= P("OPTIONS")->asParameters()->Get_Parameter(i);
+
+		switch( p->Get_Type() )
+		{
+		case PARAMETER_TYPE_Bool:	Proj4	+= STR_ADD_BOL(p->Get_Identifier(), p->asBool());	break;
+		case PARAMETER_TYPE_Int:	Proj4	+= STR_ADD_INT(p->Get_Identifier(), p->asInt());	break;
+		case PARAMETER_TYPE_Double:	Proj4	+= STR_ADD_FLT(p->Get_Identifier(), p->asDouble());	break;
+		}
+	}
+
+	//-----------------------------------------------------
+	if( P("NO_DEFS")->asBool() )
+	{
+		Proj4	+= SG_T("+no_defs");
+	}
+
+	if( P("OVER")->asBool() )
+	{
+		Proj4	+= SG_T("+over");
+	}
+
+	return( Proj4 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Base::Set_User_Definition(CSG_Parameters &P, const CSG_String &Proj4)
+{
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_projection/pj_proj4/pj_proj4/crs_base.h b/src/modules_projection/pj_proj4/pj_proj4/crs_base.h
new file mode 100644
index 0000000..19a3c0c
--- /dev/null
+++ b/src/modules_projection/pj_proj4/pj_proj4/crs_base.h
@@ -0,0 +1,106 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Projection_Proj4                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                      crs_base.h                       //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__crs_base_H
+#define HEADER_INCLUDED__crs_base_H
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class pj_proj4_EXPORT CCRS_Base : public CSG_Module
+{
+public:
+	CCRS_Base(void);
+
+	virtual bool			do_Sync_Projections		(void)	{	return( false  );	}
+
+
+protected:
+
+	virtual int				On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+	bool					Get_Projection			(CSG_Projection &Projection);
+
+
+private:
+
+	bool					Set_User_Parameters		(CSG_Parameters *pParameters);
+	bool					Add_User_Projection		(const CSG_String &sID, const CSG_String &sName, const CSG_String &sArgs);
+
+	CSG_String				Get_User_Definition		(CSG_Parameters &pParameters);
+	bool					Set_User_Definition		(CSG_Parameters &pParameters, const CSG_String &Proj4);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__crs_base_H
diff --git a/src/modules_projection/pj_proj4/pj_proj4/crs_transform.cpp b/src/modules_projection/pj_proj4/pj_proj4/crs_transform.cpp
new file mode 100644
index 0000000..f7d1265
--- /dev/null
+++ b/src/modules_projection/pj_proj4/pj_proj4/crs_transform.cpp
@@ -0,0 +1,218 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Projection_Proj4                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   crs_transform.cpp                   //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "crs_transform.h"
+
+#include <projects.h>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define PROJ4_FREE(p)	if( p )	{	pj_free((PJ *)p);	p	= NULL;	}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CCRS_Transform::CCRS_Transform(void)
+{
+	m_Proj4_pSource	= NULL;
+	m_Proj4_pTarget	= NULL;
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Transform::On_Execute(void)
+{
+	//-----------------------------------------------------
+	if( !Get_Projection(m_Target) )
+	{
+		return( false );
+	}
+
+	if(	!_Set_Projection(m_Target, &m_Proj4_pTarget, false) )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	m_bInverse	= false;
+
+	bool	bResult	= On_Execute_Transformation();
+
+	//-------------------------------------------------
+	PROJ4_FREE(m_Proj4_pSource);
+	PROJ4_FREE(m_Proj4_pTarget);
+
+	//-----------------------------------------------------
+	return( bResult );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Transform::_Set_Projection(const CSG_Projection &Projection, void **ppProj4, bool bInverse)
+{
+	PROJ4_FREE(*ppProj4);
+
+	//-------------------------------------------------
+	if( (*ppProj4 = pj_init_plus(SG_STR_SGTOMB(Projection.Get_Proj4()))) == NULL )
+	{
+		Error_Set(CSG_String::Format(SG_T("Proj4 [%s]: %s"), _TL("initialization"), SG_STR_MBTOSG(pj_strerrno(pj_errno))));
+
+		return( false );
+	}
+
+	//-------------------------------------------------
+	if( bInverse && ((PJ *)(*ppProj4))->inv == NULL )
+	{
+		Error_Set(CSG_String::Format(SG_T("Proj4 [%s]: %s"), _TL("initialization"), _TL("inverse transformation not available")));
+
+		return( false );
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CCRS_Transform::Set_Source(const CSG_Projection &Projection)
+{
+	return( _Set_Projection(Projection, &m_Proj4_pSource, true) );
+}
+
+//---------------------------------------------------------
+bool CCRS_Transform::Set_Inverse(bool bOn)
+{
+	if( m_bInverse == bOn )
+	{
+		return( true );
+	}
+
+	if( m_Proj4_pTarget && ((PJ *)m_Proj4_pTarget)->inv )
+	{
+		m_bInverse	= bOn;
+
+		void	*pTMP	= m_Proj4_pSource;
+		m_Proj4_pSource	= m_Proj4_pTarget;
+		m_Proj4_pTarget	= pTMP;
+
+		return( true );
+	}
+
+	Error_Set(CSG_String::Format(SG_T("Proj4 [%s]: %s"), _TL("initialization"), _TL("inverse transformation not available")));
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Transform::Get_Transformation(double &x, double &y)
+{
+	if( m_Proj4_pSource && m_Proj4_pTarget )
+	{
+		double	z	= 0.0;
+
+		if( pj_is_latlong((PJ *)m_Proj4_pSource) )
+		{
+			x	*= DEG_TO_RAD;
+			y	*= DEG_TO_RAD;
+		}
+
+		if( pj_transform((PJ *)m_Proj4_pSource, (PJ *)m_Proj4_pTarget, 1, 0, &x, &y, &z) == 0 )
+		{
+			if( pj_is_latlong((PJ *)m_Proj4_pTarget) )
+			{
+				x	*= RAD_TO_DEG;
+				y	*= RAD_TO_DEG;
+			}
+
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_projection/pj_proj4/pj_proj4/crs_transform.h b/src/modules_projection/pj_proj4/pj_proj4/crs_transform.h
new file mode 100644
index 0000000..c21edb7
--- /dev/null
+++ b/src/modules_projection/pj_proj4/pj_proj4/crs_transform.h
@@ -0,0 +1,115 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Projection_Proj4                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    crs_transform.h                    //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__crs_transform_H
+#define HEADER_INCLUDED__crs_transform_H
+
+//---------------------------------------------------------
+#include "crs_base.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class pj_proj4_EXPORT CCRS_Transform : public CCRS_Base
+{
+public:
+	CCRS_Transform(void);
+
+
+protected:
+
+	virtual bool			On_Execute					(void);
+	virtual bool			On_Execute_Transformation	(void)	= 0;
+
+	const CSG_Projection &	Get_Target					(void)	const		{	return( m_Target );	}
+
+	bool					Set_Source					(const CSG_Projection &Projection);
+
+	bool					Set_Inverse					(bool bOn = true);
+
+	bool					Get_Transformation			(double &x, double &y);
+	bool					Get_Transformation			(TSG_Point &Point)	{	return( Get_Transformation(Point.x, Point.y) );	}
+
+
+private:
+
+	bool					m_bInverse;
+
+	void					*m_Proj4_pSource, *m_Proj4_pTarget;
+
+	CSG_Projection			m_Target;
+
+
+	bool					_Set_Projection			(const CSG_Projection &Projection, void **ppProj4, bool bInverse);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__crs_transform_H
diff --git a/src/modules_projection/pj_proj4/pj_proj4/crs_transform_grid.cpp b/src/modules_projection/pj_proj4/pj_proj4/crs_transform_grid.cpp
new file mode 100644
index 0000000..d84c0be
--- /dev/null
+++ b/src/modules_projection/pj_proj4/pj_proj4/crs_transform_grid.cpp
@@ -0,0 +1,774 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Projection_Proj4                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                 crs_transform_grid.cpp                //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "crs_transform_grid.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CCRS_Transform_Grid::CCRS_Transform_Grid(bool bList)
+{
+	CSG_Parameter	*pNode;
+
+	m_bList	= bList;
+
+	//-----------------------------------------------------
+	Set_Name		(m_bList
+		? _TL("Coordinate Transformation (Grid List)")
+		: _TL("Coordinate Transformation (Grid)")
+	);
+
+	Set_Author		(SG_T("O. Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		"Coordinate transformation for grids.\n"
+		"Based on the PROJ.4 Cartographic Projections library originally written by Gerald Evenden "
+		"and later continued by the United States Department of the Interior, Geological Survey (USGS).\n"
+		"<a target=\"_blank\" href=\"http://trac.osgeo.org/proj/\">Proj.4 Homepage</a>\n"
+	));
+
+	//-----------------------------------------------------
+	if( m_bList )
+	{
+		pNode	= Parameters.Add_Grid_List(
+			NULL	, "SOURCE"		, _TL("Source"),
+			_TL(""),
+			PARAMETER_INPUT
+		);
+
+		Parameters.Add_Grid_List(
+			NULL	, "TARGET"		, _TL("Target"),
+			_TL(""),
+			PARAMETER_OUTPUT_OPTIONAL
+		);
+
+		m_Grid_Target.Add_Parameters_User  (Add_Parameters("GET_USER"  , _TL("User Defined Grid System"), _TL("")), false);
+		m_Grid_Target.Add_Parameters_System(Add_Parameters("GET_SYSTEM", _TL("Select Grid System")      , _TL("")));
+	}
+
+	//-----------------------------------------------------
+	else
+	{
+		pNode	= Parameters.Add_Grid(
+			NULL	, "SOURCE"		, _TL("Source"),
+			_TL(""),
+			PARAMETER_INPUT
+		);
+
+		m_Grid_Target.Add_Parameters_User  (Add_Parameters("GET_USER"  , _TL("User Defined Grid"), _TL("")));
+		m_Grid_Target.Add_Parameters_Grid  (Add_Parameters("GET_GRID"  , _TL("Select Grid")      , _TL("")));
+	}
+
+	//-----------------------------------------------------
+	Parameters.Add_Value(
+		pNode	, "CREATE_XY"	, _TL("Create X/Y Grids"),
+		_TL(""),
+		PARAMETER_TYPE_Bool, false
+	);
+
+	Parameters.Add_Grid_Output(NULL, "OUT_X", _TL("X Coordinates"), _TL(""));
+	Parameters.Add_Grid_Output(NULL, "OUT_Y", _TL("Y Coordinates"), _TL(""));
+
+	//-----------------------------------------------------
+	Parameters.Add_Choice(
+		pNode	, "INTERPOLATION"	, _TL("Interpolation"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|"),
+			_TL("Nearest Neigbhor"),
+			_TL("Bilinear Interpolation"),
+			_TL("Inverse Distance Interpolation"),
+			_TL("Bicubic Spline Interpolation"),
+			_TL("B-Spline Interpolation")
+		), 4
+	);
+
+	//-----------------------------------------------------
+	Parameters.Add_Choice(
+		pNode	, "TARGET_TYPE"	, _TL("Target"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			_TL("user defined grid system"),
+			_TL("existing grid system"),
+			_TL("points")
+		), 0
+	);
+
+	Parameters.Add_Value(
+		pNode	, "TARGET_AREA"	, _TL("Use Target Area Polygon"),
+		_TL(""),
+		PARAMETER_TYPE_Bool, false
+	);
+
+	//-----------------------------------------------------
+	CSG_Parameters	*pParameters	= Add_Parameters("POINTS", _TL("Points"), _TL(""));
+
+	pParameters->Add_Shapes(
+		NULL	, "POINTS"		, _TL("Points"),
+		_TL(""),
+		PARAMETER_OUTPUT, SHAPE_TYPE_Point
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CCRS_Transform_Grid::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	CCRS_Transform::On_Parameter_Changed(pParameters, pParameter);
+
+	return( m_Grid_Target.On_User_Changed(pParameters, pParameter) ? 1 : 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Transform_Grid::On_Execute_Transformation(void)
+{
+	m_Interpolation	= Parameters("INTERPOLATION")->asInt();
+
+	//-----------------------------------------------------
+	if( m_bList )
+	{
+		int						i;
+		CSG_Parameters			Grids;
+		CSG_Parameter_Grid_List	*pSources, *pTargets, *pGrids;
+
+		pSources	= Parameters("SOURCE")->asGridList();
+		pTargets	= Parameters("TARGET")->asGridList();
+
+		pTargets->Del_Items();
+
+		pGrids		= Grids.Add_Grid_List(NULL, "GRD", SG_T(""), SG_T(""), PARAMETER_INPUT, false)->asGridList();
+
+		for(i=0; i<pSources->Get_Count(); i++)
+		{
+			if( pSources->asGrid(i)->Get_Projection().is_Okay() )
+			{
+				pGrids->Add_Item(pSources->asGrid(i));
+			}
+			else
+			{
+				Error_Set(CSG_String::Format(SG_T("%s: %s\n"), _TL("unknown projection"), pSources->asGrid(i)->Get_Name()));
+			}
+		}
+
+		pSources	= Grids.Add_Grid_List(NULL, "SRC", SG_T(""), SG_T(""), PARAMETER_INPUT, false)->asGridList();
+
+		while( pGrids->Get_Count() > 0 )
+		{
+			pSources->Add_Item(pGrids->asGrid(pGrids->Get_Count() - 1));
+			pGrids  ->Del_Item(pGrids->Get_Count() - 1);
+
+			for(i=pGrids->Get_Count()-1; i>=0; i--)
+			{
+				if( pGrids->asGrid(i)->Get_Projection() == pSources->asGrid(0)->Get_Projection() )
+				{
+					pSources->Add_Item(pGrids->asGrid(i));
+					pGrids  ->Del_Item(i);
+				}
+			}
+
+			Set_Inverse(false);
+
+			Transform(pSources);
+
+			pSources->Del_Items();
+		}
+
+		return( pTargets->Get_Count() > 0 );
+	}
+
+	//-----------------------------------------------------
+	else
+	{
+		return( Transform(Parameters("SOURCE")->asGrid()) );
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Transform_Grid::Transform(CSG_Grid *pGrid)
+{
+	if( pGrid->Get_Projection().is_Okay() && Set_Source(pGrid->Get_Projection()) )
+	{
+		TSG_Data_Type	Type	= m_Interpolation == 0 ? pGrid->Get_Type() : SG_DATATYPE_Float;
+
+		switch( Parameters("TARGET_TYPE")->asInt() )
+		{
+		case 0:	// create user defined grid...
+			if( Get_Target_System(pGrid->Get_System(), true) )
+			{
+				return( Transform(pGrid, m_Grid_Target.Get_User(Type)) );
+			}
+			break;
+
+		case 1:	// select existing grid system...
+			if( Dlg_Parameters("GET_GRID") )
+			{
+				return( Transform(pGrid, m_Grid_Target.Get_Grid(Type)) );
+			}
+			break;
+
+		case 2:	// points as target...
+			if( Dlg_Parameters("POINTS") )
+			{
+				CSG_Shapes	*pPoints	= Get_Parameters("POINTS")->Get_Parameter("POINTS")->asShapes();
+
+				if( pPoints == DATAOBJECT_NOTSET || pPoints == DATAOBJECT_CREATE )
+				{
+					Get_Parameters("POINTS")->Get_Parameter("POINTS")->Set_Value(pPoints = SG_Create_Shapes(SHAPE_TYPE_Point));
+				}
+
+				return( Transform(pGrid, pPoints) );
+			}
+			break;
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CCRS_Transform_Grid::Transform(CSG_Parameter_Grid_List *pGrids)
+{
+	if( pGrids->Get_Count() > 0 && Set_Source(pGrids->asGrid(0)->Get_Projection()) )
+	{
+		CSG_Grid_System	System;
+
+		switch( Parameters("TARGET_TYPE")->asInt() )
+		{
+		case 0:	// create user defined grid system...
+			if( Get_Target_System(pGrids->asGrid(0)->Get_System(), true) && m_Grid_Target.Get_System_User(System) )
+			{
+				return( Transform(pGrids, Parameters("TARGET")->asGridList(), System) );
+			}
+			break;
+
+		case 1:	// select existing grid system...
+			if( Dlg_Parameters("GET_SYSTEM") && m_Grid_Target.Get_System(System) )
+			{
+				return( Transform(pGrids, Parameters("TARGET")->asGridList(), System) );
+			}
+			break;
+
+		case 2:	// points as target...
+			if( Dlg_Parameters("POINTS") )
+			{
+				CSG_Shapes	*pPoints	= Get_Parameters("POINTS")->Get_Parameter("POINTS")->asShapes();
+
+				if( pPoints == DATAOBJECT_NOTSET || pPoints == DATAOBJECT_CREATE )
+				{
+					Get_Parameters("POINTS")->Get_Parameter("POINTS")->Set_Value(pPoints = SG_Create_Shapes());
+				}
+
+				return( Transform(pGrids, pPoints) );
+			}
+			break;
+		}
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Transform_Grid::Transform(CSG_Grid *pGrid, CSG_Grid *pTarget)
+{
+	if( !pTarget || !pGrid )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	bool			bGeogCS_Adjust	= pGrid->Get_Projection().Get_Type() == SG_PROJ_TYPE_CS_Geographic && pGrid->Get_XMax() > 180.0;
+	int				x, y;
+	double			z;
+	TSG_Point		Pt_Source, Pt_Target;
+	CSG_Grid		*pX, *pY;
+
+	//-----------------------------------------------------
+	Set_Target_Area(pGrid->Get_System(), pGrid->Get_Projection().Get_Type() == SG_PROJ_TYPE_CS_Geographic);
+
+	if( !Set_Inverse(true) )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	if( Parameters("CREATE_XY")->asBool() )
+	{
+		Parameters("OUT_X")->Set_Value(pX	= SG_Create_Grid(pTarget->Get_System(), SG_DATATYPE_Float));
+		pX->Assign_NoData();
+		pX->Set_Name(_TL("X-Coordinate"));
+		pX->Get_Projection().Create(Get_Target());
+
+		Parameters("OUT_Y")->Set_Value(pY	= SG_Create_Grid(pTarget->Get_System(), SG_DATATYPE_Float));
+		pY->Assign_NoData();
+		pY->Set_Name(_TL("Y-Coordinate"));
+		pY->Get_Projection().Create(Get_Target());
+	}
+	else
+	{
+		pX	= pY	= NULL;
+	}
+
+	//-------------------------------------------------
+	pTarget->Set_NoData_Value_Range	(pGrid->Get_NoData_Value(), pGrid->Get_NoData_hiValue());
+	pTarget->Set_ZFactor			(pGrid->Get_ZFactor());
+	pTarget->Set_Name				(CSG_String::Format(SG_T("%s"), pGrid->Get_Name()));
+	pTarget->Set_Unit				(pGrid->Get_Unit());
+	pTarget->Assign_NoData();
+	pTarget->Get_Projection().Create(Get_Target());
+
+	//-----------------------------------------------------
+	for(y=0, Pt_Target.y=pTarget->Get_YMin(); y<pTarget->Get_NY() && Set_Progress(y, pTarget->Get_NY()); y++, Pt_Target.y+=pTarget->Get_Cellsize())
+	{
+		for(x=0, Pt_Target.x=pTarget->Get_XMin(); x<pTarget->Get_NX(); x++, Pt_Target.x+=pTarget->Get_Cellsize())
+		{
+			if( is_In_Target_Area(Pt_Target) && Get_Transformation(Pt_Source = Pt_Target) )
+			{
+				if( pX )	pX->Set_Value(x, y, Pt_Source.x);
+				if( pY )	pY->Set_Value(x, y, Pt_Source.y);
+
+				if( bGeogCS_Adjust && Pt_Source.x < 0.0 )
+				{
+					Pt_Source.x	+= 360.0;
+				}
+
+				if( pGrid->Get_Value(Pt_Source, z, m_Interpolation) )
+				{
+					pTarget->Set_Value(x, y, z);
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	m_Target_Area.Destroy();
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CCRS_Transform_Grid::Transform(CSG_Parameter_Grid_List *pSources, CSG_Parameter_Grid_List *pTargets, const CSG_Grid_System &Target_System)
+{
+	if( !pTargets || !pSources || pSources->Get_Count() < 1 )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	bool			bGeogCS_Adjust	= pSources->asGrid(0)->Get_Projection().Get_Type() == SG_PROJ_TYPE_CS_Geographic && pSources->asGrid(0)->Get_XMax() > 180.0;
+	int				x, y, i, n;
+	double			z;
+	TSG_Point		Pt_Source, Pt_Target;
+	CSG_Grid		*pX, *pY;
+
+	//-----------------------------------------------------
+	Set_Target_Area(pSources->asGrid(0)->Get_System(), pSources->asGrid(0)->Get_Projection().Get_Type() == SG_PROJ_TYPE_CS_Geographic);
+
+	if( !Set_Inverse(true) )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	if( Parameters("CREATE_XY")->asBool() )
+	{
+		Parameters("OUT_X")->Set_Value(pX	= SG_Create_Grid(Target_System, SG_DATATYPE_Float));
+		pX->Assign_NoData();
+		pX->Set_Name(_TL("X-Coordinate"));
+		pX->Get_Projection().Create(Get_Target());
+
+		Parameters("OUT_Y")->Set_Value(pY	= SG_Create_Grid(Target_System, SG_DATATYPE_Float));
+		pY->Assign_NoData();
+		pY->Set_Name(_TL("Y-Coordinate"));
+		pY->Get_Projection().Create(Get_Target());
+	}
+	else
+	{
+		pX	= pY	= NULL;
+	}
+
+	//-----------------------------------------------------
+	n	= pTargets->Get_Count();
+
+	for(i=0; i<pSources->Get_Count(); i++)
+	{
+		CSG_Grid	*pSource	= pSources->asGrid(i);
+		CSG_Grid	*pTarget	= SG_Create_Grid(Target_System, m_Interpolation == 0 ? pSource->Get_Type() : SG_DATATYPE_Float);
+
+		pTarget->Set_NoData_Value_Range	(pSource->Get_NoData_Value(), pSource->Get_NoData_hiValue());
+		pTarget->Set_ZFactor			(pSource->Get_ZFactor());
+		pTarget->Set_Name				(CSG_String::Format(SG_T("%s"), pSource->Get_Name()));
+		pTarget->Set_Unit				(pSource->Get_Unit());
+		pTarget->Assign_NoData();
+		pTarget->Get_Projection().Create(Get_Target());
+
+		pTargets->Add_Item(pTarget);
+	}
+
+	//-------------------------------------------------
+	for(y=0, Pt_Target.y=Target_System.Get_YMin(); y<Target_System.Get_NY() && Set_Progress(y, Target_System.Get_NY()); y++, Pt_Target.y+=Target_System.Get_Cellsize())
+	{
+		for(x=0, Pt_Target.x=Target_System.Get_XMin(); x<Target_System.Get_NX(); x++, Pt_Target.x+=Target_System.Get_Cellsize())
+		{
+			if( is_In_Target_Area(Pt_Target) && Get_Transformation(Pt_Source = Pt_Target) )
+			{
+				if( pX )	pX->Set_Value(x, y, Pt_Source.x);
+				if( pY )	pY->Set_Value(x, y, Pt_Source.y);
+
+				if( bGeogCS_Adjust && Pt_Source.x < 0.0 )
+				{
+					Pt_Source.x	+= 360.0;
+				}
+
+				for(i=0; i<pSources->Get_Count(); i++)
+				{
+					if( pSources->asGrid(i)->Get_Value(Pt_Source, z, m_Interpolation) )
+					{
+						pTargets->asGrid(n + i)->Set_Value(x, y, z);
+					}
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	m_Target_Area.Destroy();
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Transform_Grid::Transform(CSG_Grid *pGrid, CSG_Shapes *pPoints)
+{
+	if( !pPoints || !pGrid )
+	{
+		return( false );
+	}
+
+	if( !Set_Source(pGrid->Get_Projection()) )
+	{
+		return( false );
+	}
+
+	int			x, y;
+	TSG_Point	Point;
+
+	pPoints->Create(SHAPE_TYPE_Point, _TL("Points"));
+	pPoints->Get_Projection()	= Get_Target();
+	pPoints->Add_Field(pGrid->Get_Name(), pGrid->Get_Type());
+
+	for(y=0, Point.y=pGrid->Get_YMin(); y<pGrid->Get_NY() && Set_Progress(y, pGrid->Get_NY()); y++, Point.y+=pGrid->Get_Cellsize())
+	{
+		for(x=0, Point.x=pGrid->Get_XMin(); x<pGrid->Get_NX(); x++, Point.x+=pGrid->Get_Cellsize())
+		{
+			TSG_Point	Point_Transformed	= Point;
+
+			if( !pGrid->is_NoData(x, y) && Get_Transformation(Point_Transformed) )
+			{
+				CSG_Shape	*pPoint	= pPoints->Add_Shape();
+
+				pPoint->Add_Point(Point_Transformed);
+
+				pPoint->Set_Value(0, pGrid->asDouble(x, y));
+			}
+		}
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CCRS_Transform_Grid::Transform(CSG_Parameter_Grid_List *pGrids, CSG_Shapes *pPoints)
+{
+	if( !pPoints || !pGrids || pGrids->Get_Count() < 1 )
+	{
+		return( false );
+	}
+
+	CSG_Grid	*pGrid	= pGrids->asGrid(0);
+
+	if( !Set_Source(pGrid->Get_Projection()) )
+	{
+		return( false );
+	}
+
+	int			x, y, i;
+	TSG_Point	Point;
+
+	pPoints->Create(SHAPE_TYPE_Point, _TL("Points"));
+	pPoints->Get_Projection()	= Get_Target();
+
+	for(i=0; i<pGrids->Get_Count(); i++)
+	{
+		pPoints->Add_Field(pGrids->asGrid(i)->Get_Name(), pGrids->asGrid(i)->Get_Type());
+	}
+
+	for(y=0, Point.y=pGrid->Get_YMin(); y<pGrid->Get_NY() && Set_Progress(y, pGrid->Get_NY()); y++, Point.y+=pGrid->Get_Cellsize())
+	{
+		for(x=0, Point.x=pGrid->Get_XMin(); x<pGrid->Get_NX(); x++, Point.x+=pGrid->Get_Cellsize())
+		{
+			TSG_Point	Point_Transformed	= Point;
+
+			if( Get_Transformation(Point_Transformed) )
+			{
+				CSG_Shape	*pPoint	= pPoints->Add_Shape();
+
+				pPoint->Add_Point(Point_Transformed);
+
+				for(i=0; i<pGrids->Get_Count(); i++)
+				{
+					if( !pGrids->asGrid(i)->is_NoData(x, y) )
+					{
+						pPoint->Set_Value(i, pGrids->asGrid(i)->asDouble(x, y));
+					}
+					else
+					{
+						pPoint->Set_NoData(i);
+					}
+				}
+			}
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+inline void CCRS_Transform_Grid::Get_MinMax(TSG_Rect &r, double x, double y)
+{
+	if( Get_Transformation(x, y) )
+	{
+		if( r.xMin > r.xMax )
+		{
+			r.xMin	= r.xMax	= x;
+		}
+		else if( r.xMin > x )
+		{
+			r.xMin	= x;
+		}
+		else if( r.xMax < x )
+		{
+			r.xMax	= x;
+		}
+
+		if( r.yMin > r.yMax )
+		{
+			r.yMin	= r.yMax	= y;
+		}
+		else if( r.yMin > y )
+		{
+			r.yMin	= y;
+		}
+		else if( r.yMax < y )
+		{
+			r.yMax	= y;
+		}
+	}
+}
+
+//---------------------------------------------------------
+bool CCRS_Transform_Grid::Get_Target_System(const CSG_Grid_System &System, bool bEdge)
+{
+	int			x, y;
+	TSG_Rect	Extent;
+
+	Extent.xMin	= Extent.yMin	= 1.0;
+	Extent.xMax	= Extent.yMax	= 0.0;
+
+	if( !bEdge )
+	{
+		double		d;
+
+		for(y=0, d=System.Get_YMin(); y<System.Get_NY(); y++, d+=System.Get_Cellsize())
+		{
+			Get_MinMax(Extent, System.Get_XMin(), d);
+			Get_MinMax(Extent, System.Get_XMax(), d);
+		}
+
+		for(x=0, d=System.Get_XMin(); x<System.Get_NX(); x++, d+=System.Get_Cellsize())
+		{
+			Get_MinMax(Extent, d, System.Get_YMin());
+			Get_MinMax(Extent, d, System.Get_YMax());
+		}
+	}
+	else
+	{
+		TSG_Point	p;
+
+		for(y=0, p.y=System.Get_YMin(); y<System.Get_NY() && Set_Progress(y, System.Get_NY()); y++, p.y+=System.Get_Cellsize())
+		{
+			for(x=0, p.x=System.Get_XMin(); x<System.Get_NX(); x++, p.x+=System.Get_Cellsize())
+			{
+				Get_MinMax(Extent, p.x, p.y);
+			}
+		}
+
+		if( !is_Progress() )
+		{
+			return( false );
+		}
+	}
+
+	return(	Extent.xMin < Extent.xMax && Extent.yMin < Extent.yMax
+		&&	m_Grid_Target.Init_User(Extent, System.Get_NY())
+		&&	Dlg_Parameters("GET_USER")
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Transform_Grid::Set_Target_Area(const CSG_Grid_System &System, bool bGeogCS)
+{
+	if( Parameters("TARGET_AREA")->asBool() == false )
+	{
+		m_Target_Area.Destroy();
+
+		return( true );
+	}
+
+	m_Target_Area.Create(SHAPE_TYPE_Polygon);
+
+	CSG_Shape	*pArea	= m_Target_Area.Add_Shape();
+	CSG_Rect	r		= System.Get_Extent();
+	TSG_Point	p, q;
+
+	if( bGeogCS )
+	{
+		if( r.Get_XMax() > 180.0 )	r.Move(-180.0, 0.0);
+		if( r.Get_YMin() < -90.0 )	r.m_rect.yMin	= -90.0;
+		if( r.Get_YMax() <  90.0 )	r.m_rect.yMax	=  90.0;
+	}
+
+	for(p.x=r.Get_XMin(), p.y=r.Get_YMin(); p.y<r.Get_YMax(); p.y+=System.Get_Cellsize())
+	{
+		Get_Transformation(q = p);	pArea->Add_Point(q);
+	}
+
+	for(p.x=r.Get_XMin(), p.y=r.Get_YMax(); p.x<r.Get_XMax(); p.x+=System.Get_Cellsize())
+	{
+		Get_Transformation(q = p);	pArea->Add_Point(q);
+	}
+
+	for(p.x=r.Get_XMax(), p.y=r.Get_YMax(); p.y>r.Get_YMin(); p.y-=System.Get_Cellsize())
+	{
+		Get_Transformation(q = p);	pArea->Add_Point(q);
+	}
+
+	for(p.x=r.Get_XMax(), p.y=r.Get_YMin(); p.x>r.Get_XMin(); p.x-=System.Get_Cellsize())
+	{
+		Get_Transformation(q = p);	pArea->Add_Point(q);
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CCRS_Transform_Grid::is_In_Target_Area(const TSG_Point &Point)
+{
+	if( m_Target_Area.Get_Count() == 1 )
+	{
+		return( ((CSG_Shape_Polygon *)m_Target_Area.Get_Shape(0))->is_Containing(Point) );
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_projection/pj_proj4/pj_proj4/crs_transform_grid.h b/src/modules_projection/pj_proj4/pj_proj4/crs_transform_grid.h
new file mode 100644
index 0000000..ee2cc30
--- /dev/null
+++ b/src/modules_projection/pj_proj4/pj_proj4/crs_transform_grid.h
@@ -0,0 +1,122 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Projection_Proj4                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                  crs_transform_grid.h                 //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__crs_transform_grid_H
+#define HEADER_INCLUDED__crs_transform_grid_H
+
+//---------------------------------------------------------
+#include "crs_transform.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class pj_proj4_EXPORT CCRS_Transform_Grid : public CCRS_Transform
+{
+public:
+	CCRS_Transform_Grid(bool bList);
+
+
+protected:
+
+	virtual int					On_Parameter_Changed		(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+	virtual bool				On_Execute_Transformation	(void);
+
+
+private:
+
+	bool						m_bList;
+
+	int							m_Interpolation;
+
+	CSG_Parameters_Grid_Target	m_Grid_Target;
+
+	CSG_Shapes					m_Target_Area;
+
+
+	bool						Transform					(CSG_Grid                *pGrid );
+	bool						Transform					(CSG_Parameter_Grid_List *pGrids);
+
+	bool						Transform					(CSG_Grid                *pGrid , CSG_Grid                *pTarget );
+	bool						Transform					(CSG_Parameter_Grid_List *pGrids, CSG_Parameter_Grid_List *pTargets, const CSG_Grid_System &Target_System);
+
+	bool						Transform					(CSG_Grid                *pGrid , CSG_Shapes *pPoints);
+	bool						Transform					(CSG_Parameter_Grid_List *pGrids, CSG_Shapes *pPoints);
+
+	void						Get_MinMax					(TSG_Rect &r, double x, double y);
+	bool						Get_Target_System			(const CSG_Grid_System &System, bool bEdge);
+
+	bool						Set_Target_Area				(const CSG_Grid_System &System, bool bGeogCS);
+	bool						is_In_Target_Area			(const TSG_Point &Point);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__crs_transform_grid_H
diff --git a/src/modules_projection/pj_proj4/pj_proj4/crs_transform_shapes.cpp b/src/modules_projection/pj_proj4/pj_proj4/crs_transform_shapes.cpp
new file mode 100644
index 0000000..f8d0e2d
--- /dev/null
+++ b/src/modules_projection/pj_proj4/pj_proj4/crs_transform_shapes.cpp
@@ -0,0 +1,252 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Projection_Proj4                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                crs_transform_shapes.cpp               //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "crs_transform_shapes.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CCRS_Transform_Shapes::CCRS_Transform_Shapes(bool bList)
+{
+	m_bList	= bList;
+
+	//-----------------------------------------------------
+	Set_Name		(m_bList
+		? _TL("Coordinate Transformation (Shapes List)")
+		: _TL("Coordinate Transformation (Shapes)")
+	);
+
+	Set_Author		(SG_T("O. Conrad (c) 2010"));
+
+	Set_Description	(_TW(
+		"Coordinate transformation for shapes.\n"
+		"Based on the PROJ.4 Cartographic Projections library originally written by Gerald Evenden "
+		"and later continued by the United States Department of the Interior, Geological Survey (USGS).\n"
+		"<a target=\"_blank\" href=\"http://trac.osgeo.org/proj/\">Proj.4 Homepage</a>\n"
+	));
+
+	//-----------------------------------------------------
+	if( m_bList )
+	{
+		Parameters.Add_Shapes_List(
+			NULL	, "SOURCE"	, _TL("Source"),
+			_TL(""),
+			PARAMETER_INPUT
+		);
+
+		Parameters.Add_Shapes_List(
+			NULL	, "TARGET"	, _TL("Target"),
+			_TL(""),
+			PARAMETER_OUTPUT_OPTIONAL
+		);
+	}
+
+	//-----------------------------------------------------
+	else
+	{
+		Parameters.Add_Shapes(
+			NULL	, "SOURCE"	, _TL("Source"),
+			_TL(""),
+			PARAMETER_INPUT
+		);
+
+		Parameters.Add_Shapes(
+			NULL	, "TARGET"	, _TL("Target"),
+			_TL(""),
+			PARAMETER_OUTPUT
+		);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Transform_Shapes::On_Execute_Transformation(void)
+{
+	if( m_bList )
+	{
+		CSG_Parameter_Shapes_List	*pSources, *pTargets;
+
+		pSources	= Parameters("SOURCE")->asShapesList();
+		pTargets	= Parameters("TARGET")->asShapesList();
+
+		pTargets->Del_Items();
+
+		for(int i=0; i<pSources->Get_Count() && Process_Get_Okay(false); i++)
+		{
+			CSG_Shapes	*pSource	= pSources->asShapes(i);
+			CSG_Shapes	*pTarget	= SG_Create_Shapes(pSource);
+
+			if( Transform(pSource, pTarget) )
+			{
+				pTargets->Add_Item(pTarget);
+			}
+			else
+			{
+				delete(pTarget);
+			}
+		}
+
+		return( pTargets->Get_Count() > 0 );
+	}
+	else
+	{
+		CSG_Shapes	*pSource	= Parameters("SOURCE")->asShapes();
+		CSG_Shapes	*pTarget	= Parameters("TARGET")->asShapes();
+
+		if( pSource == pTarget )
+		{
+			pTarget	= SG_Create_Shapes(pSource);
+
+			if( Transform(pSource, pTarget) )
+			{
+				pSource->Assign(pTarget);
+
+				return( true );
+			}
+			else
+			{
+				delete(pTarget);
+
+				return( false );
+			}
+		}
+		else
+		{
+			pTarget->Create(pSource->Get_Type(), pSource->Get_Name(), pSource, pSource->Get_Vertex_Type());
+		}
+
+		return( Transform(pSource, pTarget) );
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CCRS_Transform_Shapes::Transform(CSG_Shapes *pSource, CSG_Shapes *pTarget)
+{
+	if( !pTarget || !pSource || !pSource->is_Valid() )
+	{
+		return( false );
+	}
+
+	if( !Set_Source(pSource->Get_Projection()) )
+	{
+		return( false );
+	}
+
+	int		nDropped	= 0;
+
+	Process_Set_Text(CSG_String::Format(SG_T("%s: %s"), _TL("Processing"), pSource->Get_Name()));
+
+	for(int iShape=0; iShape<pSource->Get_Count() && Set_Progress(iShape, pSource->Get_Count()); iShape++)
+	{
+		CSG_Shape	*pShape_Source	= pSource->Get_Shape(iShape);
+		CSG_Shape	*pShape_Target	= pTarget->Add_Shape(pShape_Source, SHAPE_COPY_ATTR);
+
+		for(int iPart=0; iPart<pShape_Source->Get_Part_Count() && pShape_Target; iPart++)
+		{
+			for(int iPoint=0; iPoint<pShape_Source->Get_Point_Count(iPart) && pShape_Target; iPoint++)
+			{
+				TSG_Point	Point	= pShape_Source->Get_Point(iPoint, iPart);
+
+				if( Get_Transformation(Point.x, Point.y) )
+				{
+					pShape_Target->Add_Point(Point.x, Point.y, iPart);
+				}
+				else
+				{
+					nDropped++;
+
+					pTarget->Del_Shape(pShape_Target);
+
+					pShape_Target	= NULL;
+				}
+			}
+		}
+	}
+
+	if( nDropped > 0 )
+	{
+		Message_Add(CSG_String::Format(SG_T("%s: %d %s"), pTarget->Get_Name(), nDropped, _TL("shapes have been dropped")));
+	}
+
+	pTarget->Get_Projection() = Get_Target();
+
+	return( pTarget->Get_Count() > 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_projection/pj_proj4/pj_proj4/crs_transform_shapes.h b/src/modules_projection/pj_proj4/pj_proj4/crs_transform_shapes.h
new file mode 100644
index 0000000..4b98338
--- /dev/null
+++ b/src/modules_projection/pj_proj4/pj_proj4/crs_transform_shapes.h
@@ -0,0 +1,100 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Projection_Proj4                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                 crs_transform_shapes.h                //
+//                                                       //
+//                 Copyright (C) 2010 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__crs_transform_shapes_H
+#define HEADER_INCLUDED__crs_transform_shapes_H
+
+//---------------------------------------------------------
+#include "crs_transform.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class pj_proj4_EXPORT CCRS_Transform_Shapes : public CCRS_Transform
+{
+public:
+	CCRS_Transform_Shapes(bool bList);
+
+
+protected:
+
+	virtual bool			On_Execute_Transformation	(void);
+
+	bool					Transform					(CSG_Shapes *pSource, CSG_Shapes *pTarget);
+
+
+private:
+
+	bool					m_bList;
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__crs_transform_shapes_H
diff --git a/src/modules_recreations/Makefile.in b/src/modules_recreations/Makefile.in
index 7f9699e..6e754ba 100644
--- a/src/modules_recreations/Makefile.in
+++ b/src/modules_recreations/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_recreations
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_recreations/recreations/Makefile.in b/src/modules_recreations/recreations/Makefile.in
index 81d6ca5..56efab0 100644
--- a/src/modules_recreations/recreations/Makefile.in
+++ b/src/modules_recreations/recreations/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_recreations/recreations
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_recreations/recreations/recreations_fractals/Makefile.in b/src/modules_recreations/recreations/recreations_fractals/Makefile.in
index 324f633..d319d5b 100644
--- a/src/modules_recreations/recreations/recreations_fractals/Makefile.in
+++ b/src/modules_recreations/recreations/recreations_fractals/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_recreations/recreations/recreations_fractals
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -107,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -156,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -207,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_recreations/recreations/recreations_games/Makefile.in b/src/modules_recreations/recreations/recreations_games/Makefile.in
index cd0d0f8..32fdff3 100644
--- a/src/modules_recreations/recreations/recreations_games/Makefile.in
+++ b/src/modules_recreations/recreations/recreations_games/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_recreations/recreations/recreations_games
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -106,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_simulation/Makefile.in b/src/modules_simulation/Makefile.in
index bd4b499..662d910 100644
--- a/src/modules_simulation/Makefile.in
+++ b/src/modules_simulation/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_simulation
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_simulation/cellular_automata/Makefile.in b/src/modules_simulation/cellular_automata/Makefile.in
index 590706a..39bbf81 100644
--- a/src/modules_simulation/cellular_automata/Makefile.in
+++ b/src/modules_simulation/cellular_automata/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_simulation/cellular_automata
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_simulation/cellular_automata/sim_cellular_automata/Makefile.in b/src/modules_simulation/cellular_automata/sim_cellular_automata/Makefile.in
index bc8d2b8..61b0be0 100644
--- a/src/modules_simulation/cellular_automata/sim_cellular_automata/Makefile.in
+++ b/src/modules_simulation/cellular_automata/sim_cellular_automata/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_simulation/cellular_automata/sim_cellular_automata
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -106,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_simulation/ecosystems/Makefile.in b/src/modules_simulation/ecosystems/Makefile.in
index 8efe649..8e72312 100644
--- a/src/modules_simulation/ecosystems/Makefile.in
+++ b/src/modules_simulation/ecosystems/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_simulation/ecosystems
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile.in b/src/modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile.in
index 3964610..1e3af98 100644
--- a/src/modules_simulation/ecosystems/sim_ecosystems_hugget/Makefile.in
+++ b/src/modules_simulation/ecosystems/sim_ecosystems_hugget/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_simulation/ecosystems/sim_ecosystems_hugget
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -106,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_simulation/fire/Makefile.am b/src/modules_simulation/fire/Makefile.am
new file mode 100644
index 0000000..89a4b6f
--- /dev/null
+++ b/src/modules_simulation/fire/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = sim_fire_spreading
diff --git a/src/modules_simulation/fire/Makefile.in b/src/modules_simulation/fire/Makefile.in
new file mode 100644
index 0000000..66b8435
--- /dev/null
+++ b/src/modules_simulation/fire/Makefile.in
@@ -0,0 +1,581 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_simulation/fire
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = sim_fire_spreading
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_simulation/fire/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_simulation/fire/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (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):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_simulation/fire/sim_fire_spreading/Forecasting.cpp b/src/modules_simulation/fire/sim_fire_spreading/Forecasting.cpp
new file mode 100644
index 0000000..23f43c7
--- /dev/null
+++ b/src/modules_simulation/fire/sim_fire_spreading/Forecasting.cpp
@@ -0,0 +1,663 @@
+/*******************************************************************************
+    Forecasting.cpp
+    Copyright (C) Victor Olaya
+    
+    This program 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.
+
+    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 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 "../../../modules/grid/grid_tools/Grid_Gaps.h"
+
+#include "Forecasting.h"
+
+#include <time.h>
+
+#define MS2FTMIN (60.0 / 0.3048)
+#define FTMIN2MMIN 0.3048
+#define MIN_RATIO_BURNT_AREA 2.
+
+CForecasting::CForecasting(void){
+
+	Set_Name		(_TL("Fire Risk Analysis"));
+	Set_Author		(_TL("(c) 2004 Victor Olaya"));
+	Set_Description	(_TW(
+		"Fire risk analysis based on the BEHAVE fire modeling system "
+		"supported by the U.S. Forest Service, Fire and Aviation Management. "
+		"Find more information on BEHAVE at the <i>Public Domain Software for the Wildland Fire Community</i> at "
+		"<a target=\"_blank\" href=\"http://fire.org\">http://fire.org</a>\n"
+		"\n"
+		"Reference:\n"
+		"Andrews, P.L. (1986): BEHAVE: Fire Behavior Prediction and Fuel Modeling System - "
+		"Burn Subsystem, Part 1. U.S. Department of Agriculture, Forest Service General, Technical Report INT-194. "
+	));
+
+	Parameters.Add_Grid(NULL, 
+						"DEM", 
+						_TL("DEM"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"FUEL", 
+						_TL("Fuel Model"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"WINDSPD", 
+						_TL("Wind Speed"),
+						_TL("Wind Speed (m/s)"), 
+						PARAMETER_INPUT);
+	
+	Parameters.Add_Grid(NULL, 
+						"WINDDIR", 
+						_TL("Wind Direction"), 
+						_TL("Wind Direction (degrees clockwise from north)"),
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"M1H", 
+						_TL("Dead Fuel Moisture 1H"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"M10H", 
+						_TL("Dead Fuel Moisture 10H"),
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"M100H", 
+						_TL("Dead Fuel Moisture 100H"),
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"MHERB", 
+						_TL("Herbaceous Fuel Moisture"),
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"MWOOD", 
+						_TL("Wood Fuel Moisture"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"VALUE", 
+						_TL("Value"), 
+						_TL(""), 
+						PARAMETER_INPUT_OPTIONAL);
+	
+	Parameters.Add_Grid(NULL, 
+						"BASEPROB", 
+						_TL("Base Probability"), 
+						_TL(""), 
+						PARAMETER_INPUT_OPTIONAL);	
+	
+	Parameters.Add_Grid(NULL, 
+						"DANGER", 
+						_TL("Danger"), 
+						_TL(""), 
+						PARAMETER_OUTPUT);
+	
+	Parameters.Add_Grid(NULL, 
+						"COMPPROB", 
+						_TL("Compound Probability"), 
+						_TL(""), 
+						PARAMETER_OUTPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"PRIORITY", 
+						_TL("Priority Index"), 
+						_TL(""), 
+						PARAMETER_OUTPUT);
+
+	Parameters.Add_Value(NULL,
+						"MONTECARLO",
+						_TL("Number of Events"),
+						_TL("N\xc3\xbamero of Monte-Carlo events"),
+						PARAMETER_TYPE_Int,
+						1000,
+						1.,
+						true);
+
+	Parameters.Add_Value(NULL,
+						"INTERVAL",
+						_TL("Fire Length"),
+						_TL("Fire Length (min)"),
+						PARAMETER_TYPE_Double,
+						100,
+						1.,
+						true);
+
+
+}//constructor
+
+CForecasting::~CForecasting(void)
+{
+}//destructor
+
+bool CForecasting::On_Execute(void){
+
+	AssignParameters();
+	CalculateGrids();
+
+	delete m_pSlopeGrid;
+	delete m_pAspectGrid;
+
+	return true;
+
+}//method
+
+bool CForecasting::AssignParameters(){
+
+	int x,y;
+
+	m_pDEM = Parameters("DEM")->asGrid();
+	m_pFuelGrid = Parameters("FUEL")->asGrid();
+	m_pWindDirGrid = Parameters("WINDDIR")->asGrid();
+	m_pWindSpdGrid = Parameters("WINDSPD")->asGrid();
+	m_pM1Grid = Parameters("M1H")->asGrid();
+	m_pM10Grid = Parameters("M10H")->asGrid();
+	m_pM100Grid = Parameters("M100H")->asGrid();
+	m_pMHerbGrid = Parameters("MHERB")->asGrid();
+	m_pMWoodGrid = Parameters("MWOOD")->asGrid();
+	m_pDangerGrid = Parameters("DANGER")->asGrid();
+	m_pValueGrid = Parameters("VALUE")->asGrid();
+	m_pBaseProbabilityGrid = Parameters("BASEPROB")->asGrid();
+	m_pCompoundProbabilityGrid = Parameters("COMPPROB")->asGrid();
+	m_pPriorityIndexGrid = Parameters("PRIORITY")->asGrid();
+	m_iInterval = Parameters("INTERVAL")->asInt();
+	m_iNumEvents = Parameters("MONTECARLO")->asInt();
+
+	/* create a standard fuel model catalog and a flame length table. */
+    m_Catalog = Fire_FuelCatalogCreateStandard("Standard", 13);
+    Fire_FlameLengthTable(m_Catalog, 500, 0.1);
+
+	if (!m_pBaseProbabilityGrid){
+		m_pBaseProbabilityGrid = SG_Create_Grid(m_pDEM, SG_DATATYPE_Double);
+		m_pBaseProbabilityGrid->Assign(1);
+	}//if
+	if (!m_pValueGrid){
+		m_pValueGrid = SG_Create_Grid(m_pDEM, SG_DATATYPE_Double);
+		m_pValueGrid->Assign(1);
+	}//if
+
+	//substitute no-data values
+	for(y=0; y<Get_NY() && Set_Progress(y); y++){		
+		for(x=0; x<Get_NX(); x++){
+
+			if (m_pWindSpdGrid->is_NoData(x, y)){
+				m_pWindSpdGrid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pWindDirGrid->is_NoData(x, y)){
+				m_pWindDirGrid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pM1Grid->is_NoData(x, y)){
+				m_pM1Grid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pM10Grid->is_NoData(x, y)){
+				m_pM10Grid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pM100Grid->is_NoData(x, y)){
+				m_pM100Grid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pMHerbGrid->is_NoData(x, y)){
+				m_pMHerbGrid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pMWoodGrid->is_NoData(x, y)){
+				m_pMWoodGrid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pBaseProbabilityGrid->is_NoData(x, y)){
+				m_pBaseProbabilityGrid->Set_Value(x, y, 0.);
+			}//if
+
+		}//for
+	}//for
+
+
+	//-----------------------------------------------------
+	// calculate slope and aspect using CSG_Grid class'
+	// built-in function (after Zevenbergen & Thorne)...
+
+	m_pSlopeGrid	= SG_Create_Grid(m_pDEM, SG_DATATYPE_Double);
+	m_pAspectGrid	= SG_Create_Grid(m_pDEM, SG_DATATYPE_Double);
+
+	for(y=0; y<Get_NY() && Set_Progress(y); y++)
+	{		
+		for(x=0; x<Get_NX(); x++)
+		{
+			double	slope, aspect;
+
+			if( m_pDEM->Get_Gradient(x, y, slope, aspect) )
+			{
+				m_pSlopeGrid	->Set_Value(x, y, slope);
+				m_pAspectGrid	->Set_Value(x, y, aspect);
+			}
+			else
+			{
+				m_pSlopeGrid	->Set_NoData(x, y);
+				m_pAspectGrid	->Set_NoData(x, y);
+			}
+		}
+	}
+
+
+	//-----------------------------------------------------
+	m_pTimeGrid = SG_Create_Grid(m_pDEM, SG_DATATYPE_Double);
+
+	m_pTimeGrid->Assign((double)0);
+	m_pDangerGrid->Assign((double)0);
+	m_pCompoundProbabilityGrid->Assign((double)0);	
+	
+	//m_pPriorityIndexGrid = Get_SafeNew_Grid(m_pDEM, SG_DATATYPE_Double);
+
+	return true;
+
+}//method
+
+
+void CForecasting::CalculateGrids(){
+	
+	int x,y;
+	int i;
+	int iRecommendedNumFires;
+	double dDanger;
+	double dTotalBurntArea = 0;
+	CSG_String sMessage;
+
+	m_CentralPoints	.Clear();
+	m_AdjPoints		.Clear();
+
+	srand(time(NULL));
+
+	Process_Set_Text(_TL("Calculating danger..."));
+	for(i=0; i<m_iNumEvents && Set_Progress(i, m_iNumEvents); i++){
+		x = rand() % (m_pDEM->Get_NX()-1);
+		y = rand() % (m_pDEM->Get_NY()-1);
+		m_CentralPoints.Clear();
+		m_CentralPoints.Add(x,y);
+		m_pTimeGrid->Set_Value(x,y,0.0);	
+		dDanger = CalculateFireSpreading();
+		dTotalBurntArea += dDanger;
+		m_pDangerGrid->Set_Value(x, y, dDanger);		
+	}//for
+
+	m_CentralPoints	.Clear();
+	m_AdjPoints		.Clear();
+
+	m_pDangerGrid->Set_NoData_Value(0.0);
+	m_pDangerGrid->Set_Unit(_TL("m2/h"));
+	
+	Process_Set_Text(_TL("Closing Gaps..."));
+
+	if(	!Gaps_Close(m_pDangerGrid) )
+	{
+		return;
+	}//if
+
+	for (y=0; y<Get_NY(); y++){
+		for (x=0; x<Get_NX(); x++){
+			m_pCompoundProbabilityGrid->Set_Value(x,y, 
+				m_pCompoundProbabilityGrid->asFloat(x,y) / (float)m_iNumEvents);
+			m_pPriorityIndexGrid->Set_Value(x, y, m_pCompoundProbabilityGrid->asFloat(x,y)*
+				m_pDangerGrid->asFloat(x,y));
+		}//for
+	}//for
+
+	float dRatio = (float)(dTotalBurntArea / (m_pDEM->Get_Cellsize() * m_pDEM->Get_Cellsize()));
+	if (dRatio < MIN_RATIO_BURNT_AREA){
+		iRecommendedNumFires =(int)((float) m_iNumEvents / dRatio * (float) MIN_RATIO_BURNT_AREA);
+		sMessage.Printf(
+			_TL("** Warning : Number of events might not be representative.\nMinimum number recommended: ")
+		);
+		sMessage	+= SG_Get_String(iRecommendedNumFires, 0);
+		sMessage	+= SG_T("\n");
+		Message_Add(sMessage.c_str());
+	}//if
+
+}//method
+
+double CForecasting::CalculateFireSpreading(){
+
+	int x,y;
+	int x2,y2;
+	int n;
+	bool bReturn = false;
+	/* neighbor's address*/   /* N  NE   E  SE   S  SW   W  NW */
+	static int nX[8] =        {  0,  1,  1,  1,  0, -1, -1, -1};
+    static int nY[8] =        {  1,  1,  0, -1, -1, -1,  0,  1};
+	double nDist[8];          /* distance to each neighbor */
+    double nAzm[8];           /* compass azimuth to each neighbor (0=N) */	
+	size_t modelNumber;       /* fuel model number at current cell */
+    double moisture[6];       /* fuel moisture content at current cell */
+    double dSpreadRate;       /* spread rate in direction of neighbor */
+    double dSpreadTime;       /* time to spread from cell to neighbor */
+    double dIgnTime;          /* time neighbor is ignited by current cell */
+	double dWindSpd;
+	double dBurntValue = 0;
+	double dProbability;
+
+	m_pTimeGrid->Assign(0.0);
+	
+    for (n=0; n<8; n++){
+        nDist[n] = sqrt ( nX[n] * m_pDEM->Get_Cellsize() * nX[n] * m_pDEM->Get_Cellsize()
+                        + nY[n] * m_pDEM->Get_Cellsize() * nY[n] * m_pDEM->Get_Cellsize() );
+        nAzm[n] = n * 45.;
+    }//for
+
+	x = m_CentralPoints.Get_X(0);
+	y = m_CentralPoints.Get_Y(0);
+	dProbability = (float)(rand()) / (float)(RAND_MAX); 
+
+	if (m_pBaseProbabilityGrid->asFloat(x,y) < dProbability){
+		return 0;
+	}//if
+
+	while (m_CentralPoints.Get_Count()!=0){
+
+		for (int iPt=0; iPt<m_CentralPoints.Get_Count();iPt++){
+
+			x = m_CentralPoints.Get_X(iPt);
+			y = m_CentralPoints.Get_Y(iPt);
+
+			if (!m_pDEM->is_NoData(x,y) && !m_pFuelGrid->is_NoData(x,y)){
+
+				modelNumber = (size_t) m_pFuelGrid->asInt(x, y);
+				moisture[0] = m_pM1Grid->asFloat(x, y);
+				moisture[1] = m_pM10Grid->asFloat(x, y);
+				moisture[2] = m_pM100Grid->asFloat(x, y);
+				moisture[3] = m_pM100Grid->asFloat(x, y);
+				moisture[4] = m_pMHerbGrid->asFloat(x, y);;
+				moisture[5] = m_pMWoodGrid->asFloat(x, y);
+				dWindSpd = m_pWindSpdGrid->asFloat(x,y)  * MS2FTMIN; 
+				Fire_SpreadNoWindNoSlope(m_Catalog, modelNumber, moisture);
+				Fire_SpreadWindSlopeMax(m_Catalog, modelNumber, dWindSpd,
+										 m_pWindDirGrid->asFloat(x,y), tan(m_pSlopeGrid->asFloat(x,y)),
+										 m_pAspectGrid->asFloat(x,y, true));
+
+				for (n=0; n<8; n++){
+					x2 = x + nX[n];
+					y2 = y + nY[n];
+					if (m_pTimeGrid->is_InGrid(x2,y2,false)){
+						Fire_SpreadAtAzimuth(m_Catalog, modelNumber, nAzm[n], FIRE_NONE);
+						dSpreadRate = Fuel_SpreadAny(m_Catalog, modelNumber); // in ft/min (awkward...)					
+						dSpreadRate *= FTMIN2MMIN; //a bit better...
+						if (dSpreadRate > Smidgen){
+							dSpreadTime = nDist[n] / dSpreadRate;
+							dIgnTime = 	m_pTimeGrid->asDouble(x,y) + dSpreadTime;												
+							if (dIgnTime < m_iInterval){
+								if (m_pTimeGrid->asDouble(x2,y2) == 0.0 
+										|| m_pTimeGrid->asDouble(x2, y2)>dIgnTime){
+									if (m_pTimeGrid->asDouble(x2, y2)==0.0){
+										dBurntValue += m_pValueGrid->asDouble(x2, y2);
+										m_pCompoundProbabilityGrid->Set_Value(x2,y2,
+											m_pCompoundProbabilityGrid->asFloat(x2,y2) + 1);
+									}//if
+									m_pTimeGrid->Set_Value(x2, y2, dIgnTime);
+									m_AdjPoints.Add(x2,y2);									
+								}//if							
+							}//if
+						}//if					
+					}//if
+				}//for
+			}//if
+		}//for
+
+		m_CentralPoints.Clear();
+		for (int i=0; i<m_AdjPoints.Get_Count(); i++){
+			x= m_AdjPoints.Get_X(i);
+			y = m_AdjPoints.Get_Y(i);
+			m_CentralPoints.Add(x, y);
+		}//for
+		m_AdjPoints.Clear();
+
+	}//while
+
+	return dBurntValue;
+
+}//method
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CForecasting::Gaps_Close(CSG_Grid *pInput)
+{
+	int			iStep, iStart, n;
+	double		max, Threshold;
+	CSG_Grid	*pResult, *pTension_Keep, *pTension_Temp;
+
+	//-----------------------------------------------------
+	pResult		= pInput;
+	pInput		= SG_Create_Grid(pInput);
+	pInput->Assign(pResult);
+
+	//-----------------------------------------------------
+	Threshold	= 0.1;
+
+	n			= Get_NX() > Get_NY() ? Get_NX() : Get_NY();
+	iStep		= 0;
+	do	{	iStep++;	}	while( pow(2.0, iStep + 1) < n );
+	iStart		= (int)pow(2.0, iStep);
+
+	pTension_Keep		= new CSG_Grid(pResult, SG_DATATYPE_Byte);
+	pTension_Temp		= new CSG_Grid(pResult);
+
+	pResult->Assign_NoData();
+
+	for(iStep=iStart; iStep>=1; iStep/=2)
+	{
+		Gaps_Tension_Init(iStep, pTension_Temp, pTension_Keep, pResult, pInput);
+
+		do
+		{
+			max		= Gaps_Tension_Step(iStep, pTension_Temp, pTension_Keep, pResult);
+		}
+		while( max > Threshold && Process_Get_Okay(true) );
+	}
+
+	//-----------------------------------------------------
+	delete(pTension_Keep);
+	delete(pTension_Temp);
+	delete(pInput);
+
+	return( true );
+}
+
+//---------------------------------------------------------
+void CForecasting::Gaps_Tension_Init(int iStep, CSG_Grid *pTension_Temp, CSG_Grid *pTension_Keep, CSG_Grid *pResult, CSG_Grid *pInput)
+{
+	int		x, y, i, ix, iy, nx, ny, nz;
+	double	z;
+
+	//-----------------------------------------------------
+	// 1. Channels...
+
+	pTension_Temp->Assign_NoData();
+	pTension_Keep->Assign();
+
+	for(y=0; y<Get_NY(); y+=iStep)
+	{
+		ny	= y + iStep < Get_NY() ? y + iStep : Get_NY();
+
+		for(x=0; x<Get_NX(); x+=iStep)
+		{
+			if( !pInput->is_NoData(x, y) )
+			{
+				pTension_Temp->Set_Value(x, y, pInput->asDouble(x, y) );
+				pTension_Keep->Set_Value(x, y, 1.0);
+			}
+			else
+			{
+				nx	= x + iStep < Get_NX() ? x + iStep : Get_NX();
+				nz	= 0;
+				z	= 0.0;
+
+				for(iy=y; iy<ny; iy++)
+				{
+					for(ix=x; ix<nx; ix++)
+					{
+						if( pInput->is_InGrid(ix, iy) )
+						{
+							z	+= pInput->asDouble(ix, iy);
+							nz++;
+						}
+					}
+				}
+
+				if( nz > 0 )
+				{
+					pTension_Temp->Set_Value(x, y, z / (double)nz );
+					pTension_Keep->Set_Value(x, y, 1.0);
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	// 2. Previous Iteration...
+
+	for(y=0; y<Get_NY(); y+=iStep)
+	{
+		for(x=0; x<Get_NX(); x+=iStep)
+		{
+			if( pTension_Keep->asByte(x, y) == false )
+			{
+				if( !pResult->is_NoData(x, y) )
+				{
+					pTension_Temp->Set_Value(x, y, pResult->asDouble(x, y));
+				}
+				else
+				{
+					nz	= 0;
+					z	= 0.0;
+
+					for(i=0; i<8; i++)
+					{
+						ix	= x + iStep * Get_System()->Get_xTo(i);
+						iy	= y + iStep * Get_System()->Get_yTo(i);
+
+						if( pResult->is_InGrid(ix, iy) )
+						{
+							z	+= pResult->asDouble(ix, iy);
+							nz++;
+						}
+					}
+
+					if( nz > 0.0 )
+					{
+						pTension_Temp->Set_Value(x, y, z / (double)nz);
+					}
+					else
+					{
+						pTension_Temp->Set_Value(x, y, pInput->asDouble(x, y));
+					}
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	// 3. ...
+
+	pResult->Assign(pTension_Temp);
+}
+
+//---------------------------------------------------------
+double CForecasting::Gaps_Tension_Step(int iStep, CSG_Grid *pTension_Temp, CSG_Grid *pTension_Keep, CSG_Grid *pResult)
+{
+	int		x, y;
+	double	d, dMax;
+
+	dMax	= 0.0;
+
+	for(y=0; y<Get_NY(); y+=iStep)
+	{
+		for(x=0; x<Get_NX(); x+=iStep)
+		{
+			if( pTension_Keep->asByte(x, y) == false )
+			{
+				d	= Gaps_Tension_Change(x, y, iStep, pResult);
+
+				pTension_Temp->Set_Value(x, y, d);
+
+				d	= fabs(d - pResult->asDouble(x, y));
+
+				if( d > dMax )
+				{
+					dMax	= d;
+				}
+			}
+		}
+	}
+
+	for(y=0; y<Get_NY(); y+=iStep)
+	{
+		for(x=0; x<Get_NX(); x+=iStep)
+		{
+			if( pTension_Keep->asByte(x, y) == false )
+			{
+				pResult->Set_Value(x, y, pTension_Temp->asDouble(x, y));
+			}
+		}
+	}
+
+	return( dMax );
+}
+
+//---------------------------------------------------------
+double CForecasting::Gaps_Tension_Change(int x, int y, int iStep, CSG_Grid *pResult)
+{
+	int		i, ix, iy;
+	double	n, d, dz;
+
+	for(i=0, d=0.0, n=0.0; i<8; i++)
+	{
+		ix	= x + iStep * Get_System()->Get_xTo(i);
+		iy	= y + iStep * Get_System()->Get_yTo(i);
+
+		if( pResult->is_InGrid(ix, iy) )
+		{
+			dz	= 1.0 / Get_System()->Get_UnitLength(i);
+			d	+= dz * pResult->asDouble(ix, iy);
+			n	+= dz;
+		}
+	}
+
+	if( n > 0.0 )
+	{
+		d	/= n;
+
+		return( d );
+	}
+
+	return( pResult->asDouble(x, y) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules_simulation/fire/sim_fire_spreading/Forecasting.h b/src/modules_simulation/fire/sim_fire_spreading/Forecasting.h
new file mode 100644
index 0000000..952d44e
--- /dev/null
+++ b/src/modules_simulation/fire/sim_fire_spreading/Forecasting.h
@@ -0,0 +1,81 @@
+/*******************************************************************************
+    Forecasting.h
+    Copyright (C) Victor Olaya
+    
+    This program 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.
+
+    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 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
+*******************************************************************************/ 
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "MLB_Interface.h"
+#include "fireLib.h"
+
+class CForecasting : public CSG_Module_Grid {
+
+private:
+
+	CSG_Grid *m_pDEM;    
+    CSG_Grid *m_pWindSpdGrid;       /* ptr to wind speed map (m/s) */
+    CSG_Grid *m_pWindDirGrid;       /* ptr to wind direction map (deg from north) */
+    CSG_Grid *m_pM1Grid;            /* ptr to 1-hr dead fuel moisture map */
+    CSG_Grid *m_pM10Grid;           /* ptr to 10-hr dead fuel moisture map */
+    CSG_Grid *m_pM100Grid;          /* ptr to 100-hr dead fuel moisture map */
+    CSG_Grid *m_pMHerbGrid;         /* ptr to live herbaceous fuel moisture map */
+    CSG_Grid *m_pMWoodGrid;         /* ptr to live stem fuel moisture map */
+	CSG_Grid *m_pFuelGrid;          /* ptr to fuel model map */
+	CSG_Grid *m_pValueGrid;		 /* ptr to cell value map */
+
+	CSG_Grid *m_pDangerGrid;       /* ptr to danger map (in burnt m2 / h) */
+	CSG_Grid *m_pBaseProbabilityGrid; 
+	CSG_Grid *m_pCompoundProbabilityGrid;
+
+	CSG_Grid *m_pPriorityIndexGrid;
+
+    CSG_Grid *m_pSlopeGrid;         /* ptr to slope map (rise/reach) */
+    CSG_Grid *m_pAspectGrid;        /* ptr to aspect map (degrees from north) */
+
+	CSG_Grid *m_pTimeGrid;
+	
+	FuelCatalogPtr m_Catalog;    /* fuel catalog handle */
+
+	CSG_Points_Int	m_CentralPoints;
+	CSG_Points_Int	m_AdjPoints;
+
+	int m_iInterval;
+	int m_iNumEvents;
+
+	bool AssignParameters();
+	void CalculateGrids();	
+	double CalculateFireSpreading();
+
+	bool	Gaps_Close			(CSG_Grid *pInput);
+	void	Gaps_Tension_Init	(int iStep, CSG_Grid *pTension_Temp, CSG_Grid *pTension_Keep, CSG_Grid *pResult, CSG_Grid *pInput);
+	double	Gaps_Tension_Step	(int iStep, CSG_Grid *pTension_Temp, CSG_Grid *pTension_Keep, CSG_Grid *pResult);
+	double	Gaps_Tension_Change	(int x, int y, int iStep, CSG_Grid *pResult);
+
+
+public:
+
+	CForecasting(void);
+	virtual ~CForecasting(void);
+
+protected:
+
+	virtual bool On_Execute(void);
+
+};
+
diff --git a/src/modules_simulation/fire/sim_fire_spreading/MLB_Interface.cpp b/src/modules_simulation/fire/sim_fire_spreading/MLB_Interface.cpp
new file mode 100644
index 0000000..9bb57c4
--- /dev/null
+++ b/src/modules_simulation/fire/sim_fire_spreading/MLB_Interface.cpp
@@ -0,0 +1,124 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//    System for an Automated Geo-Scientific Analysis    //
+//                                                       //
+//                    Module Library:                    //
+//                      Fire_Spreading                   //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   MLB_Interface.cpp                   //
+//                                                       //
+//                 Copyright (C) 2003 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for an Automated  //
+// Geo-Scientific Analysis'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     volaya at saga-gis.org                    //
+//                                                       //
+//    contact:    Victor Olaya                           //
+//                Spain                                  //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//			The Module Link Library Interface			 //
+//														 //
+///////////////////////////////////////////////////////////
+
+#include "MLB_Interface.h"
+
+const SG_Char * Get_Info(int i)
+{
+	switch( i )
+	{
+	case MLB_INFO_Name:	default:
+		return( _TL("Simulation - Fire Spreading Analysis") );
+
+	case MLB_INFO_Author:
+		return( _TL("Victor Olaya (c) 2004") );
+
+	case MLB_INFO_Description:
+		return( _TW(
+			"Fire spreading analyses based on the BEHAVE fire modeling system "
+			"supported by the U.S. Forest Service, Fire and Aviation Management. "
+			"Find more information on BEHAVE at the <i>Public Domain Software for the Wildland Fire Community</i> at "
+			"<a target=\"_blank\" href=\"http://fire.org\">http://fire.org</a>\n"
+			"\n"
+			"Reference:\n"
+			"Andrews, P.L. (1986): BEHAVE: Fire Behavior Prediction and Fuel Modeling System - "
+			"Burn Subsystem, Part 1. U.S. Department of Agriculture, Forest Service General, Technical Report INT-194. "
+		));
+
+	case MLB_INFO_Version:
+		return( SG_T("1.0") );
+
+	case MLB_INFO_Menu_Path:
+		return( _TL("Simulation|Fire Spreading") );
+	}
+}
+
+#include "Simulate.h"
+#include "Forecasting.h"
+
+CSG_Module *		Create_Module(int i)
+{
+
+	CSG_Module	*pModule;
+
+	switch( i )
+	{
+	case 0:
+		pModule	= new CForecasting;
+		break;
+
+	case 1:
+		pModule	= new CSimulate;
+		break;
+
+	default:
+		pModule	= NULL;
+		break;
+	}
+
+	return( pModule );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+//{{AFX_SAGA
+
+	MLB_INTERFACE
+
+//}}AFX_SAGA
diff --git a/src/modules_simulation/fire/sim_fire_spreading/MLB_Interface.h b/src/modules_simulation/fire/sim_fire_spreading/MLB_Interface.h
new file mode 100644
index 0000000..13eb7f2
--- /dev/null
+++ b/src/modules_simulation/fire/sim_fire_spreading/MLB_Interface.h
@@ -0,0 +1,69 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                   Terrain_Analysis                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    MLB_Interface.h                    //
+//                                                       //
+//                 Copyright (C) 2003 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Include the SAGA-API here				 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__MLB_INTERFACE_H
+#define HEADER_INCLUDED__MLB_INTERFACE_H
+
+//---------------------------------------------------------
+#include <saga_api/saga_api.h>
+
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__MLB_INTERFACE_H
diff --git a/src/modules_simulation/fire/sim_fire_spreading/Makefile.am b/src/modules_simulation/fire/sim_fire_spreading/Makefile.am
new file mode 100644
index 0000000..8d49b88
--- /dev/null
+++ b/src/modules_simulation/fire/sim_fire_spreading/Makefile.am
@@ -0,0 +1,26 @@
+#
+# $Id: Makefile.am,v 1.2 2010/07/08 14:11:49 johanvdw Exp $
+#
+if DEBUG
+DBGFLAGS = -g -DDEBUG
+endif
+if SAGA_UNICODE
+UC_DEFS = -D_SAGA_UNICODE
+endif
+DEF_SAGA           = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+CXX_INCS           = -I$(top_srcdir)/src/saga_core -I$(top_srcdir)/src/modules/grid/grid_tools
+AM_CXXFLAGS        = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+AM_LDFLAGS         = -fPIC -shared -avoid-version
+pkglib_LTLIBRARIES = libsim_fire_spreading.la
+libsim_fire_spreading_la_SOURCES =\
+fireLib.c\
+Forecasting.cpp\
+MLB_Interface.cpp\
+Simulate.cpp\
+fireLib.h\
+Forecasting.h\
+MLB_Interface.h\
+Simulate.h
+
+libsim_fire_spreading_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+
diff --git a/src/modules_simulation/fire/sim_fire_spreading/Makefile.in b/src/modules_simulation/fire/sim_fire_spreading/Makefile.in
new file mode 100644
index 0000000..7d69e03
--- /dev/null
+++ b/src/modules_simulation/fire/sim_fire_spreading/Makefile.in
@@ -0,0 +1,598 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/modules_simulation/fire/sim_fire_spreading
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+libsim_fire_spreading_la_DEPENDENCIES =  \
+	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+am_libsim_fire_spreading_la_OBJECTS = fireLib.lo Forecasting.lo \
+	MLB_Interface.lo Simulate.lo
+libsim_fire_spreading_la_OBJECTS =  \
+	$(am_libsim_fire_spreading_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libsim_fire_spreading_la_SOURCES)
+DIST_SOURCES = $(libsim_fire_spreading_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLELIBHARU = @DISABLELIBHARU@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HARU_LIB = @HARU_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#
+# $Id: Makefile.am,v 1.2 2010/07/08 14:11:49 johanvdw Exp $
+#
+ at DEBUG_TRUE@DBGFLAGS = -g -DDEBUG
+ at SAGA_UNICODE_TRUE@UC_DEFS = -D_SAGA_UNICODE
+DEF_SAGA = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
+CXX_INCS = -I$(top_srcdir)/src/saga_core -I$(top_srcdir)/src/modules/grid/grid_tools
+AM_CXXFLAGS = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS) $(DBGFLAGS)
+AM_LDFLAGS = -fPIC -shared -avoid-version
+pkglib_LTLIBRARIES = libsim_fire_spreading.la
+libsim_fire_spreading_la_SOURCES = \
+fireLib.c\
+Forecasting.cpp\
+MLB_Interface.cpp\
+Simulate.cpp\
+fireLib.h\
+Forecasting.h\
+MLB_Interface.h\
+Simulate.h
+
+libsim_fire_spreading_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_simulation/fire/sim_fire_spreading/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/modules_simulation/fire/sim_fire_spreading/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+	}
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libsim_fire_spreading.la: $(libsim_fire_spreading_la_OBJECTS) $(libsim_fire_spreading_la_DEPENDENCIES) 
+	$(CXXLINK) -rpath $(pkglibdir) $(libsim_fire_spreading_la_OBJECTS) $(libsim_fire_spreading_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Forecasting.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Simulate.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fireLib.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+
+# 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.
+.NOEXPORT:
diff --git a/src/modules_simulation/fire/sim_fire_spreading/Simulate.cpp b/src/modules_simulation/fire/sim_fire_spreading/Simulate.cpp
new file mode 100644
index 0000000..f425b48
--- /dev/null
+++ b/src/modules_simulation/fire/sim_fire_spreading/Simulate.cpp
@@ -0,0 +1,360 @@
+/*******************************************************************************
+    Simulate.cpp
+    Copyright (C) Victor Olaya
+    
+    This program 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.
+
+    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 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 "Simulate.h"
+
+#define MS2FTMIN (60.0 / 0.3048)
+#define FTMIN2MMIN 0.3048
+#define BTU2KCAL 0.252164401
+#define FT2M 0.3048
+#define NO_TIME_LIMIT -1
+#define THRESHOLD_FOR_DIFFERENCE 0.1
+
+CSimulate::CSimulate(void){
+	
+	Set_Name		(_TL("Simulation"));
+	Set_Author		(_TL("(c) 2004 Victor Olaya"));
+	Set_Description	(_TW(
+		"Fire simulation based on the BEHAVE fire modeling system "
+		"supported by the U.S. Forest Service, Fire and Aviation Management. "
+		"Find more information on BEHAVE at the <i>Public Domain Software for the Wildland Fire Community</i> at "
+		"<a target=\"_blank\" href=\"http://fire.org\">http://fire.org</a>\n"
+		"\n"
+		"Reference:\n"
+		"Andrews, P.L. (1986): BEHAVE: Fire Behavior Prediction and Fuel Modeling System - "
+		"Burn Subsystem, Part 1. U.S. Department of Agriculture, Forest Service General, Technical Report INT-194. "
+	));
+
+	Parameters.Add_Grid(NULL, 
+						"DEM", 
+						_TL("DEM"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+	
+	Parameters.Add_Grid(NULL, 
+						"FUEL", 
+						_TL("Fuel Model"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"WINDSPD", 
+						_TL("Wind Speed"),
+						_TL("Wind speed (m/s)"), 
+						PARAMETER_INPUT);
+	
+	Parameters.Add_Grid(NULL, 
+						"WINDDIR", 
+						_TL("Wind Direction"), 
+						_TL("Wind direction (degrees clockwise from north)"),
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"M1H", 
+						_TL("Dead Fuel Moisture 1H"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"M10H", 
+						_TL("Dead Fuel Moisture 10H"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"M100H", 
+						_TL("Dead Fuel Moisture 100H"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"MHERB", 
+						_TL("Herbaceous Fuel Moisture"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"MWOOD", 
+						_TL("Wood Fuel Moisture"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"IGNITION", 
+						_TL("Ignition Points"), 
+						_TL(""), 
+						PARAMETER_INPUT);
+	
+	Parameters.Add_Grid(NULL, 
+						"TIME", 
+						_TL("Time"), 
+						_TL(""), 
+						PARAMETER_OUTPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"FLAME", 
+						_TL("Flame Length"), 
+						_TL("Flame Length (m)"), 
+						PARAMETER_OUTPUT);
+
+	Parameters.Add_Grid(NULL, 
+						"INTENSITY", 
+						_TL("Intensity"), 
+						_TL("Intensity (Kcal/m)"), 
+						PARAMETER_OUTPUT);
+
+	Parameters.Add_Value(NULL, 
+						"UPDATEVIEW", 
+						_TL("Update View"),
+						_TL("Update view during simulation."),
+						PARAMETER_TYPE_Bool, 
+						true);
+
+}//constructor
+
+CSimulate::~CSimulate(void){}
+
+bool CSimulate::On_Execute(void){
+
+	AssignParameters();
+	CalculateFire();
+	
+	DeleteObjects();
+	return true;
+
+}//method
+
+void CSimulate::DeleteObjects(){
+
+	delete m_pAspectGrid;
+	delete m_pSlopeGrid;
+
+	m_CentralPoints	.Clear();
+	m_AdjPoints		.Clear();
+
+}//method
+
+bool CSimulate::AssignParameters(){
+
+	int x,y;
+
+	m_pDEM = Parameters("DEM")->asGrid();
+	m_pFuelGrid = Parameters("FUEL")->asGrid();
+	m_pIgnGrid = Parameters("IGNITION")->asGrid();
+	m_pWindDirGrid = Parameters("WINDDIR")->asGrid();
+	m_pWindSpdGrid = Parameters("WINDSPD")->asGrid();
+	m_pM1Grid = Parameters("M1H")->asGrid();
+	m_pM10Grid = Parameters("M10H")->asGrid();
+	m_pM100Grid = Parameters("M100H")->asGrid();
+	m_pMHerbGrid = Parameters("MHERB")->asGrid();
+	m_pMWoodGrid = Parameters("MWOOD")->asGrid();
+	m_pTimeGrid = Parameters("TIME")->asGrid();
+	m_pFlameGrid = Parameters("FLAME")->asGrid();
+	m_pIntensityGrid = Parameters("INTENSITY")->asGrid();
+
+    m_Catalog = Fire_FuelCatalogCreateStandard("Standard", 13);
+    Fire_FlameLengthTable(m_Catalog, 500, 0.1);
+
+	//substitute no-data values
+	for(y=0; y<Get_NY() && Set_Progress(y); y++){		
+		for(x=0; x<Get_NX(); x++){
+
+			if (m_pWindSpdGrid->is_NoData(x, y)){
+				m_pWindSpdGrid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pWindDirGrid->is_NoData(x, y)){
+				m_pWindDirGrid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pM1Grid->is_NoData(x, y)){
+				m_pM1Grid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pM10Grid->is_NoData(x, y)){
+				m_pM10Grid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pM100Grid->is_NoData(x, y)){
+				m_pM100Grid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pMHerbGrid->is_NoData(x, y)){
+				m_pMHerbGrid->Set_Value(x, y, 0.);
+			}//if
+			if (m_pMWoodGrid->is_NoData(x, y)){
+				m_pMWoodGrid->Set_Value(x, y, 0.);
+			}//if
+
+		}//for
+	}//for
+
+
+	//-----------------------------------------------------
+	// calculate slope and aspect using CSG_Grid class'
+	// built-in function (after Zevenbergen & Thorne)...
+
+	m_pSlopeGrid	= SG_Create_Grid(m_pDEM, SG_DATATYPE_Double);
+	m_pAspectGrid	= SG_Create_Grid(m_pDEM, SG_DATATYPE_Double);
+
+	for(y=0; y<Get_NY() && Set_Progress(y); y++)
+	{		
+		for(x=0; x<Get_NX(); x++)
+		{
+			double	slope, aspect;
+
+			if( m_pDEM->Get_Gradient(x, y, slope, aspect) )
+			{
+				m_pSlopeGrid	->Set_Value(x, y, slope);
+				m_pAspectGrid	->Set_Value(x, y, aspect);
+			}
+			else
+			{
+				m_pSlopeGrid	->Set_NoData(x, y);
+				m_pAspectGrid	->Set_NoData(x, y);
+			}
+		}
+	}
+
+
+	//-----------------------------------------------------
+	m_pTimeGrid->Assign((double)0);
+
+	return true;
+
+}//method
+
+void CSimulate::CalculateFire(){
+	
+	int x,y;
+
+	Process_Set_Text(_TL("Simulating..."));
+	m_CentralPoints	.Clear();
+	m_AdjPoints		.Clear();
+
+	m_CentralPoints.Clear();
+	for(y=0; y<Get_NY(); y++){
+		for(x=0; x<Get_NX(); x++){
+			if (!m_pIgnGrid->is_NoData(x,y)){
+				m_CentralPoints.Add(x,y);
+				m_pTimeGrid->Set_Value(x,y,0.0);				
+			}//if
+		}//for
+	}//for
+	CalculateFireSpreading(NO_TIME_LIMIT);
+
+	m_pTimeGrid->Set_NoData_Value(0.);
+
+
+}//method
+
+
+int CSimulate::CalculateFireSpreading(float fTimeLimit){
+
+	int x,y;
+	int x2,y2;
+	int n;
+	bool bReturn = false;
+	/* neighbor's address*/   /* N  NE   E  SE   S  SW   W  NW */
+	static int nX[8] =        {  0,  1,  1,  1,  0, -1, -1, -1};
+    static int nY[8] =        {  1,  1,  0, -1, -1, -1,  0,  1};
+	double nDist[8];          /* distance to each neighbor */
+    double nAzm[8];           /* compass azimuth to each neighbor (0=N) */	
+	size_t modelNumber;       /* fuel model number at current cell */
+    double moisture[6];       /* fuel moisture content at current cell */
+    double dSpreadRate;       /* spread rate in direction of neighbor */
+    double dSpreadTime;       /* time to spread from cell to neighbor */
+    double dIgnTime;          /* time neighbor is ignited by current cell */
+	double dWindSpd;
+	int iBurntCells = 0;
+
+	bool bUpdate = Parameters("UPDATEVIEW")->asBool();
+
+    for (n=0; n<8; n++){
+        nDist[n] = sqrt ( nX[n] * m_pDEM->Get_Cellsize() * nX[n] * m_pDEM->Get_Cellsize()
+                        + nY[n] * m_pDEM->Get_Cellsize() * nY[n] * m_pDEM->Get_Cellsize() );
+        nAzm[n] = n * 45.;
+    }//for
+
+	while (m_CentralPoints.Get_Count()!=0){
+
+		for (int iPt=0; iPt<m_CentralPoints.Get_Count();iPt++){
+
+			x = m_CentralPoints.Get_X(iPt);
+			y = m_CentralPoints.Get_Y(iPt);
+
+			if (!m_pDEM->is_NoData(x,y) && !m_pFuelGrid->is_NoData(x,y)){
+
+				modelNumber = (size_t) m_pFuelGrid->asInt(x, y);
+				moisture[0] = m_pM1Grid->asFloat(x, y);
+				moisture[1] = m_pM10Grid->asFloat(x, y);
+				moisture[2] = m_pM100Grid->asFloat(x, y);
+				moisture[3] = m_pM100Grid->asFloat(x, y);
+				moisture[4] = m_pMHerbGrid->asFloat(x, y);;
+				moisture[5] = m_pMWoodGrid->asFloat(x, y);
+				dWindSpd = m_pWindSpdGrid->asFloat(x,y)  * MS2FTMIN; 
+				Fire_SpreadNoWindNoSlope(m_Catalog, modelNumber, moisture);
+				Fire_SpreadWindSlopeMax(m_Catalog, modelNumber, dWindSpd,
+										 m_pWindDirGrid->asFloat(x,y), tan(m_pSlopeGrid->asFloat(x,y)),
+										 m_pAspectGrid->asFloat(x,y, true));
+
+				for (n=0; n<8; n++){
+					x2 = x + nX[n];
+					y2 = y + nY[n];
+					if (m_pTimeGrid->is_InGrid(x2,y2,false)){
+						Fire_SpreadAtAzimuth(m_Catalog, modelNumber, nAzm[n], FIRE_BYRAMS);
+						dSpreadRate = Fuel_SpreadAny(m_Catalog, modelNumber); // in ft/min (awkward...)					
+						dSpreadRate *= FTMIN2MMIN; //a bit better...
+						if (dSpreadRate > Smidgen){
+							dSpreadTime = nDist[n] / dSpreadRate;							
+							if (fTimeLimit == NO_TIME_LIMIT){
+								dIgnTime = 	m_pTimeGrid->asDouble(x,y) + dSpreadTime;
+								if (m_pTimeGrid->asDouble(x2,y2) == 0.0 
+										|| m_pTimeGrid->asDouble(x2, y2) > dIgnTime + THRESHOLD_FOR_DIFFERENCE ){
+									m_pTimeGrid->Set_Value(x2, y2, dIgnTime);
+									m_AdjPoints.Add(x2,y2);
+									Fire_FlameScorch(m_Catalog, modelNumber, FIRE_FLAME);
+									m_pFlameGrid->Set_Value(x2, y2, Fuel_FlameLength(m_Catalog, modelNumber) * FT2M);									
+									m_pIntensityGrid->Set_Value(x2, y2, Fuel_ByramsIntensity(m_Catalog, modelNumber)
+																* BTU2KCAL / FT2M );									
+								}//if
+							}//if
+						}//if					
+					}//if
+				}//for
+			}//if
+		}//for
+
+		m_CentralPoints.Clear();
+		for (int i=0; i<m_AdjPoints.Get_Count(); i++){
+			x= m_AdjPoints.Get_X(i);
+			y = m_AdjPoints.Get_Y(i);
+			m_CentralPoints.Add(x, y);
+		}//for
+		m_AdjPoints.Clear();
+
+		if (fTimeLimit == NO_TIME_LIMIT){
+			Process_Get_Okay(true);
+		}//if	
+		
+		if (bUpdate){
+			DataObject_Update(m_pTimeGrid, true);
+		}
+
+	}//while
+
+	return iBurntCells;
+
+}//method
+
diff --git a/src/modules_simulation/fire/sim_fire_spreading/Simulate.h b/src/modules_simulation/fire/sim_fire_spreading/Simulate.h
new file mode 100644
index 0000000..87498a5
--- /dev/null
+++ b/src/modules_simulation/fire/sim_fire_spreading/Simulate.h
@@ -0,0 +1,78 @@
+/*******************************************************************************
+    Simulate.h
+    Copyright (C) Victor Olaya
+    
+    This program 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.
+
+    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 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
+*******************************************************************************/ 
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "MLB_Interface.h"
+#include "fireLib.h"
+
+class CSimulate : public CSG_Module_Grid {
+
+private:
+
+	CSG_Grid *m_pDEM;    
+    CSG_Grid *m_pIgnGrid;           /* ptr to ignition time map (minutes) */
+    CSG_Grid *m_pWindSpdGrid;       /* ptr to wind speed map (m/s) */
+    CSG_Grid *m_pWindDirGrid;       /* ptr to wind direction map (deg from north) */
+    CSG_Grid *m_pM1Grid;            /* ptr to 1-hr dead fuel moisture map */
+    CSG_Grid *m_pM10Grid;           /* ptr to 10-hr dead fuel moisture map */
+    CSG_Grid *m_pM100Grid;          /* ptr to 100-hr dead fuel moisture map */
+    CSG_Grid *m_pMHerbGrid;         /* ptr to live herbaceous fuel moisture map */
+    CSG_Grid *m_pMWoodGrid;         /* ptr to live stem fuel moisture map */
+	CSG_Grid *m_pFuelGrid;          /* ptr to fuel model map */
+	CSG_Grid *m_pValueGrid;
+
+	CSG_Grid *m_pFlameGrid;         /* ptr to flame length map (m) */
+	CSG_Grid *m_pIntensityGrid;     
+
+    CSG_Grid *m_pSlopeGrid;         /* ptr to slope map (rise/reach) */
+    CSG_Grid *m_pAspectGrid;        /* ptr to aspect map (degrees from north) */
+
+	CSG_Grid *m_pTimeGrid;
+	//CSG_Grid *m_pVolatileTimeGrid;
+	
+	FuelCatalogPtr m_Catalog;    /* fuel catalog handle */
+
+	int m_iLength;
+
+	CSG_Points_Int	m_CentralPoints;
+	CSG_Points_Int	m_AdjPoints;
+
+	int *m_pLength; 
+	int m_iMaxTime; //in s
+	int m_iTimeInterval; //in s
+
+	bool AssignParameters();
+	void CalculateFire();
+	int CalculateFireSpreading(float);
+	void DeleteObjects();
+
+public:
+
+	CSimulate(void);
+	virtual ~CSimulate(void);
+
+protected:
+
+	virtual bool On_Execute(void);
+
+};
+
diff --git a/src/modules_simulation/fire/sim_fire_spreading/fireLib.c b/src/modules_simulation/fire/sim_fire_spreading/fireLib.c
new file mode 100644
index 0000000..585fa0b
--- /dev/null
+++ b/src/modules_simulation/fire/sim_fire_spreading/fireLib.c
@@ -0,0 +1,1814 @@
+/*
+ *******************************************************************************
+ *
+ *  fireLib.c
+ *
+ *  Description
+ *      Library of BEHAVE (Andrews 1986) fire behavior algorithms
+ *      encapsulated and optimized for fire behavior simulation.
+ *
+ *  Legalities
+ *      Copyright (c) 1996 Collin D. Bevins.
+ *      See the file "license.txt" for information on usage and
+ *      redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ *  Naming Conventions
+ *      All function names begin with "Fire_".
+ *      All fuel model and behavior parameter access macros begin with "Fuel_".
+ *      All fuel catalog parameter access macros begin with "FuelCat_".
+ *
+ *  Functions
+ *      There are 8 functions to create and destroy fuel models and catalogs:
+ *
+ *          Fire_FuelCatalogCreate(name, maxModels)
+ *              Creates a new fuel catalog capable of holding maxModels.
+ *
+ *          Fire_FuelCatalogCreateStandard(name, maxModels)
+ *              Creates a new fuel catalog capable of holding maxModels,
+ *              and fills models 0-13 with standard fire behavior models.
+ *
+ *          Fire_FuelModelCreate(catalog, model, name, desc, depth, mext,
+ *                  adjust, maxParticles)
+ *              Adds or replaces a fuel model in the catalog.  The model will
+ *              accept up to maxParticles particles.
+ *
+ *          Fire_FuelModelExists(catalog, model)
+ *              Returns 1 if model exists within the catalog.
+ *
+ *          Fire_FuelParticleAdd(catalog, model, live, load, savr, dens, heat,
+ *                  stot, seff)
+ *              Adds a fuel particle to a fuel model.
+ *
+ *          Fire_FlameLengthTable ( catalog, flameClasses, flameStep )
+ *              Creates a flame length look-up table containing flameClasses
+ *              number of classes, with each class spanning "flameStep"
+ *              feet of flame length.  Creating a flame length table can
+ *              significantly improve performance at the expense of user
+ *              specified precision.
+ *
+ *          Fire_FuelModelDestroy(catalog, model)
+ *              Destroys the model within the catalog.
+ *
+ *          Fire_FuelCatalogDestroy(catalog)
+ *              Destroys the catalog and all models within it.
+ *
+ *      There are 5 functions to process data within fuel models:
+ *
+ *          Fire_FuelCombustion(catalog, model)
+ *              Computes all the fuel-dependent model variables.
+ *              Called only once for each fuel model.
+ *              Called automatically by Fire_SpreadNoWindNoSlope().
+ *
+ *          Fire_SpreadNoWindNoSlope(catalog, model, moisture[6])
+ *              Determines reaction intensity, heat per unit area, and the
+ *              no-wind no-slope spread rate.
+ *
+ *          Fire_SpreadWindSlopeMax(catalog, model, windFpm, windDeg, slope,
+ *                  aspectDeg)
+ *              Determines maximum spread rate and azimuth of maximum spread
+ *              based upon input parameters and results of the most recent
+ *              call to Fire_SpreadNoWindNoSlope() for this model.
+ *
+ *          Fire_SpreadAtAzimuth(catalog, model, azimuth, doWhich)
+ *              Determines the spread rate in the specified azimuth based
+ *              upon the results of the most recent call to
+ *              Fire_SpreadWindSlopeMax() for this model.  The "doWhich"
+ *              parameter is the result of ORing the constants FIRE_BYRAMS,
+ *              FIRE_FLAME, and FIRE_SCORCH to request computation of the
+ *              associated fire variables.
+ *
+ *          Fire_FlameScorch(catalog, model, doWhich)
+ *              Determines the flame length and/or scorch height based upon
+ *              the most recent call to Fire_SpreadAtAzimuth().
+ *
+ *  History
+ *      1996/09/04  Version 1.0.0 release.
+ *      1999/03/05  Fixed NNFL07 live SAVR from 1500 to 1550.
+ *
+ *******************************************************************************
+ */
+
+#include "fireLib.h"
+
+#ifndef M_PI
+#define M_PI 3.14159
+#endif
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_FuelCombustion()
+ *
+ *  Description
+ *      Calculates and stores all the fuel-dependent combustion variables.
+ *
+ *  Side Effects
+ *      All combustion varaiables are reclaculated for the model.
+ *      All behavior and environment variables are reset to zero.
+ *
+ *  Function Returns
+ *      FIRE_STATUS_OK or FIRE_STATUS_ERROR.
+ *      Return status and error text are stored in the Fire Catalog's buffers.
+ *
+ *******************************************************************************
+ */
+
+int
+Fire_FuelCombustion (FuelCatalogPtr catalog, size_t model )
+    //FuelCatalogPtr catalog;     /* FuelCatalogData instance pointer           */
+    //size_t         model;       /* fuel model id number         [0-maxModels] */
+{
+    size_t particle, size, life;
+
+    double sizeClassAreaWtg[FIRE_LIFE_CATS][FIRE_SIZE_CLASSES];
+    double lifeLoad[FIRE_LIFE_CATS];
+    double lifeArea[FIRE_LIFE_CATS];
+    double lifeSavr[FIRE_LIFE_CATS];
+    double lifeHeat[FIRE_LIFE_CATS];
+    double lifeSeff[FIRE_LIFE_CATS];
+    double lifeEtaS[FIRE_LIFE_CATS];
+
+    double totalArea;
+    double fineLive;
+    double beta;
+    double betaOpt;
+    double sigma;
+    double ratio;
+    double aa;
+    double sigma15;
+    double gammaMax;
+    double gamma;
+    double c;
+    double e;
+
+    /* Validate catalog and fuel model existence. */
+    assert(catalog!= NULL && FuelCat_MagicCookie(catalog)==FIRE_CATALOG_MAGIC);
+    if ( ! Fire_FuelModelExists(catalog,model) )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_FuelCombustion(): el modelo de combustible %d no existe en el catálogo de combuestibles \"%s\".",
+            model, FuelCat_Name(catalog));
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /* Initialize the model's fuel particle dependent variables. */
+    for ( particle=0; particle<Fuel_Particles(catalog,model); particle++ )
+    {
+        Fuel_AreaWtg(catalog,model,particle)     = 0.;
+        Fuel_SizeAreaWtg(catalog,model,particle) = 0.;
+        Fuel_Moisture(catalog,model,particle)    = 0.;
+    }
+
+    /* Initialize the model's fuel combustion variables. */
+    /* The following are calculated by this function. */
+    Fuel_FineDead(catalog,model)        = 0.0;
+    Fuel_LiveMextFactor(catalog,model)  = 0.0;
+    Fuel_BulkDensity(catalog,model)     = 0.0;
+    Fuel_ResidenceTime(catalog,model)   = 0.0;
+    Fuel_PropFlux(catalog,model)        = 0.0;
+    Fuel_SlopeK(catalog,model)          = 0.0;
+    Fuel_WindB(catalog,model)           = 0.0;
+    Fuel_WindE(catalog,model)           = 0.0;
+    Fuel_WindK(catalog,model)           = 0.0;
+
+    for (life=0; life<FIRE_LIFE_CATS; life++)
+    {
+        Fuel_LifeAreaWtg(catalog,model,life) = 0.;
+        Fuel_LifeRxFactor(catalog,model,life) = 0.;
+        lifeLoad[life] = 0.;
+        lifeArea[life] = 0.;
+        lifeSavr[life] = 0.;
+        lifeHeat[life] = 0.;
+        lifeEtaS[life] = 0.;
+        lifeSeff[life] = 0.;
+        for ( size=0; size<FIRE_SIZE_CLASSES; size++ )
+            sizeClassAreaWtg[life][size] = 0.;
+    }
+
+    /* Initialize the model's fire behavior variables. */
+    /* These are calculated by Fire_SpreadNoWindNoSlope(). */
+    Fuel_Spread0(catalog,model)         = 0.;
+    Fuel_RxIntensity(catalog,model)     = 0.;
+    Fuel_HeatPerUnitArea(catalog,model) = 0.;
+
+    /* Initialize the model's fire behavior variables. */
+    /* These are calculated by Fire_SpreadWindSlopeMax(). */
+    Fuel_SpreadMax(catalog,model)       = 0.;
+    Fuel_AzimuthMax(catalog,model)      = 0.;
+    Fuel_EffectiveWind(catalog,model)   = 0.;
+    Fuel_PhiSlope(catalog,model)        = 0.;
+    Fuel_PhiWind(catalog,model)         = 0.;
+    Fuel_PhiEffWind(catalog,model)      = 0.;
+    Fuel_LwRatio(catalog,model)         = 1.;
+    Fuel_Eccentricity(catalog,model)    = 0.;
+    Fuel_WindLimit(catalog,model)       = 0;
+
+    /* Initialize the model's fire behavior variables. */
+    /* These are calculated by Fire_SpreadAtAzimuth(). */
+    Fuel_SpreadAny(catalog,model)       = 0.;
+    Fuel_AzimuthAny(catalog,model)      = 0.;
+    Fuel_ByramsIntensity(catalog,model) = 0.;
+    Fuel_FlameLength(catalog,model)     = 0.;
+    Fuel_ScorchHeight(catalog,model)    = 0.;
+
+    /* Initialize the model's environmental variables. */
+    Fuel_WindSpeed(catalog,model) = 0.;
+    Fuel_WindDir(catalog,model)   = 0.;
+    Fuel_Slope(catalog,model)     = 0.;
+    Fuel_Aspect(catalog,model)    = 0.;
+    for ( size=0; size<FIRE_MCLASSES; size++ )
+        Fuel_EnvMoisture(catalog,model,size) = 0.;
+
+    /* Initialize the model's combustion flag. */
+    Fuel_CombustionFlag(catalog,model) = 1;
+
+    /* If the model has no particles, we're all done. */
+    if ( Fuel_Particles(catalog,model) <= 0 )
+        return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+
+    /* Initialize local fuel bed and combustion variables. */
+    beta = betaOpt = sigma = ratio = aa = sigma15 = 0.;
+    gamma = gammaMax = c = e = fineLive = totalArea = 0.;
+
+    /* Accumulate surface areas by life category for the entire fuel bed. */
+    for ( particle=0; particle<Fuel_Particles(catalog,model); particle++ )
+    {
+        life = Fuel_Live(catalog,model,particle);
+        lifeArea[life] += Fuel_SurfaceArea(catalog,model,particle);
+        totalArea      += Fuel_SurfaceArea(catalog,model,particle);
+    }
+
+    /* If no surface area, we're all done. */
+    if ( totalArea <= Smidgen )
+        return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+
+    /* Surface area wtg factor for each particle within its life category */
+    /* and within its size class category (used to weight loading). */
+    for ( particle=0; particle<Fuel_Particles(catalog,model); particle++ )
+    {
+        life = Fuel_Live(catalog,model,particle);
+        if ( lifeArea[life] > Smidgen )
+        {
+            Fuel_AreaWtg(catalog,model,particle) =
+                Fuel_SurfaceArea(catalog,model,particle) / lifeArea[life];
+
+            size = Fuel_SizeClass(catalog,model,particle);
+            sizeClassAreaWtg[life][size] +=
+                Fuel_AreaWtg(catalog,model,particle);
+        }
+    }
+
+    /* Assign size class surface area weights to each particle. */
+    for ( particle=0; particle<Fuel_Particles(catalog,model); particle++ )
+    {
+        life = Fuel_Live(catalog,model,particle);
+        size = Fuel_SizeClass(catalog,model,particle);
+        Fuel_SizeAreaWtg(catalog,model,particle) = sizeClassAreaWtg[life][size];
+    }
+
+    /* Derive life category surface area weighting factors. */
+    for ( life=0; life<FIRE_LIFE_CATS; life++ )
+        Fuel_LifeAreaWtg(catalog,model,life) = lifeArea[life] / totalArea;
+
+    /* Accumulate life category weighted load, heat, savr, and seff. */
+    for ( particle=0; particle<Fuel_Particles(catalog,model); particle++ )
+    {
+        life = Fuel_Live(catalog,model,particle);
+
+        lifeLoad[life] += Fuel_SizeAreaWtg(catalog,model,particle)
+                        * Fuel_Load(catalog,model,particle)
+                        * (1. - Fuel_SiTotal(catalog,model,particle));
+
+        lifeSavr[life] += Fuel_AreaWtg(catalog,model,particle)
+                        * Fuel_Savr(catalog,model,particle);
+
+        lifeHeat[life] += Fuel_AreaWtg(catalog,model,particle)
+                        * Fuel_Heat(catalog,model,particle);
+
+        lifeSeff[life] += Fuel_AreaWtg(catalog,model,particle)
+                        * Fuel_SiEffective(catalog,model,particle);
+
+        Fuel_BulkDensity(catalog,model) += Fuel_Load(catalog,model,particle);
+
+        if ( Fuel_Density(catalog,model,particle) > Smidgen )
+            beta += Fuel_Load(catalog,model,particle)
+                  / Fuel_Density(catalog,model,particle);
+    }
+
+    /* Accumulate life category contribution to reaction intensity. */
+    for ( life=0; life<FIRE_LIFE_CATS; life++ )
+    {
+        sigma += Fuel_LifeAreaWtg(catalog,model,life) * lifeSavr[life];
+
+        lifeEtaS[life] = 1.;
+        if (lifeSeff[life] > 0.)
+        {
+            if ( (lifeEtaS[life] = 0.174 / pow(lifeSeff[life], 0.19)) > 1.0 )
+                lifeEtaS[life] = 1.0;
+        }
+
+        Fuel_LifeRxFactor(catalog,model,life) =
+            lifeLoad[life] * lifeHeat[life] * lifeEtaS[life];
+    }
+
+    /* Fuel model residence time */
+    Fuel_ResidenceTime(catalog,model) = 384. / sigma;
+
+    /* Fuel model bulk density */
+    if ( Fuel_Depth(catalog,model) > Smidgen )
+    {
+        Fuel_BulkDensity(catalog,model) /= Fuel_Depth(catalog,model);
+        beta /= Fuel_Depth(catalog,model);
+    }
+
+    /* Propagating flux depends upon sigma and beta only. */
+    Fuel_PropFlux(catalog,model) =
+        exp((0.792 + 0.681*sqrt(sigma)) * (beta+0.1)) / (192.+0.2595*sigma);
+
+    /* Gamma */
+    betaOpt   = 3.348 / (pow(sigma, 0.8189));
+    ratio     = beta / betaOpt;
+    aa        = 133. / (pow(sigma, 0.7913));
+    sigma15   = pow(sigma, 1.5);
+    gammaMax  = sigma15 / (495. + 0.0594*sigma15);
+    gamma     = gammaMax * pow(ratio, aa) * exp(aa * (1.-ratio));
+
+    /* Factor gamma into life category reaction intensity contribution. */
+    for ( life=0; life<FIRE_LIFE_CATS; life++ )
+        Fuel_LifeRxFactor(catalog,model,life) *= gamma;
+
+    /* Slope and wind intermediates constants for the fuel model. */
+    Fuel_SlopeK(catalog,model) = 5.275 * pow(beta, -0.3);
+    Fuel_WindB(catalog,model)  = 0.02526 * pow(sigma, 0.54);
+
+    c = 7.47 * exp(-0.133 * pow(sigma, 0.55));
+    e = 0.715 * exp(-0.000359 * sigma);
+    Fuel_WindK(catalog,model) = c * pow(ratio, -e);
+    Fuel_WindE(catalog,model) = pow(ratio, e) / c;
+
+    /* If no live fuel, we're done. */
+    if ( lifeLoad[FIRE_LIFE_LIVE] < Smidgen )
+        return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+
+    /*  Fine dead fuel and fine live fuel factors. */
+    for ( particle=0; particle<Fuel_Particles(catalog,model); particle++ )
+    {
+        if ( Fuel_Live(catalog,model,particle) )
+            fineLive
+                  += Fuel_Load(catalog,model,particle)
+                   * exp(-500. / Fuel_Savr(catalog,model,particle));
+        else
+            Fuel_FineDead(catalog,model)
+                  += Fuel_Load(catalog,model,particle)
+                   * Fuel_SigmaFactor(catalog,model,particle);
+    }
+
+    /* Live fuel extinction moisture factor. */
+    if ( fineLive > Smidgen )
+        Fuel_LiveMextFactor(catalog,model)
+            = 2.9 * Fuel_FineDead(catalog,model) / fineLive;
+
+    /* That's all, folks!. */
+    return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_SpreadNoWindNoSlope()
+ *
+ *  Description
+ *      Calculates the fire reaction intensity and no-wind, no-slope spread
+ *      rate given the fuel model, combustion, and moisture regime inputs.
+ *
+ *  Side Effects
+ *      Updates the following fire behavior variables:
+ *          Fuel_RxIntensity(catalog,model).
+ *          Fuel_HeatPerUnitArea(catalog,model).
+ *          Fuel_Spread0(catalog,model).
+ *          Fuel_SpreadMax(catalog,model)  = Fuel_Spread0(catalog,model)
+ *          Fuel_SpreadAny(catalog,model)  = Fuel_Spread0(catalog,model)
+ *          Fuel_AzimuthAny(catalog,model) = 0.
+ *          Fuel_AzimuthMax(catalog,model) = 0.
+ *
+ *  Function Returns
+ *      FIRE_STATUS_OK or FIRE_STATUS_ERROR.
+ *      Return status and error text are stored in the Fire Catalog's buffers.
+ *
+ *******************************************************************************
+ */
+
+int
+Fire_SpreadNoWindNoSlope ( FuelCatalogPtr catalog, size_t model, double moisture[FIRE_MCLASSES] )
+   // FuelCatalogPtr catalog;     /* FuelCatalogData instance pointer           */
+   // size_t  model;              /* fuel model number            [0-maxModels] */
+   // double  moisture[FIRE_MCLASSES]; /* array of fuel moistures   (fractions) */
+{
+    size_t mclass, particle, life, nlive;
+    double wfmd;
+    double rbQig;
+    double fdmois;
+    double qig;
+    double ratio;
+    double lifeMoisture[FIRE_LIFE_CATS];
+    double lifeEtaM[FIRE_LIFE_CATS];
+    double lifeMext[FIRE_LIFE_CATS];
+
+    static size_t TimeLagClass[FIRE_SIZE_CLASSES] = {0, 0, 1, 1, 2, 2};
+
+    /* Validate the catalog and fuel model. */
+    assert(catalog!= NULL && FuelCat_MagicCookie(catalog)==FIRE_CATALOG_MAGIC);
+    if ( ! Fire_FuelModelExists(catalog,model) )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_SpreadNoWindNoSlope(): el modelo de combustible %d no existe en el catálogo de combustibles \"%s\".",
+            model, FuelCat_Name(catalog));
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /*  Check if we must recalculate combustion intermediates. */
+    if ( ! Fuel_CombustionFlag(catalog,model) )
+    {
+        Fire_FuelCombustion(catalog,model);
+    }
+
+    /* Otherwise check if the moisture environment has changed. */
+    else
+    {
+        for ( mclass=0; mclass<FIRE_MCLASSES; mclass++ )
+            if ( ! Equal(moisture[mclass],Fuel_EnvMoisture(catalog,model,mclass)) )
+                break;
+
+        /* If no change in fuel moisture, no more computation is needed. */
+        if ( mclass == FIRE_MCLASSES )
+            return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+    }
+
+    /* Store the new moistures in the fuel's environmental moisture array. */
+    for ( mclass=0; mclass<FIRE_MCLASSES; mclass++ )
+        Fuel_EnvMoisture(catalog,model,mclass) = moisture[mclass];
+
+    /* Initialize the model's fire behavior variables. */
+    /* These are calculated by this function. */
+    Fuel_Spread0(catalog,model)         = 0.;
+    Fuel_RxIntensity(catalog,model)     = 0.;
+    Fuel_HeatPerUnitArea(catalog,model) = 0.;
+
+    /* Initialize the model's fire behavior variables. */
+    /* These are calculated by Fire_SpreadWindSlopeMax(). */
+    Fuel_SpreadMax(catalog,model)       = 0.;
+    Fuel_AzimuthMax(catalog,model)      = 0.;
+
+    /* Initialize the model's fire behavior variables. */
+    /* These are calculated by Fire_SpreadAtAzimuth(). */
+    Fuel_SpreadAny(catalog,model)       = 0.;
+    Fuel_AzimuthAny(catalog,model)      = 0.;
+    Fuel_ByramsIntensity(catalog,model) = 0.;
+    Fuel_FlameLength(catalog,model)     = 0.;
+    Fuel_ScorchHeight(catalog,model)    = 0.;
+
+    /* If no fuel particles, return. */
+    if (Fuel_Particles(catalog,model) <= 0)
+        return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+
+    /* Initialize local variables. */
+    wfmd = fdmois = rbQig = 0.;
+    for ( life=0; life<FIRE_LIFE_CATS; life++ )
+    {
+        lifeMoisture[life] = 0.;
+        lifeEtaM[life] = 0.;
+        lifeMext[life] = 0.;
+    }
+
+    /* Assign particle moistures based upon their size class. */
+    nlive = 0;
+    for ( particle=0; particle<Fuel_Particles(catalog,model); particle++ )
+    {
+        /* if this is a dead fuel, accumulate its wtd fuel moisture. */
+        if ( Fuel_Live(catalog,model,particle) == FIRE_LIFE_DEAD )
+        {
+            mclass = TimeLagClass[Fuel_SizeClass(catalog,model,particle)];
+            wfmd += moisture[mclass]
+                  * Fuel_SigmaFactor(catalog,model,particle)
+                  * Fuel_Load(catalog,model,particle);
+        }
+        else
+        {
+            nlive++;
+            mclass = (Fuel_Type(catalog,model,particle) == FIRE_TYPE_HERB) ?
+                FIRE_MCLASS_HERB : FIRE_MCLASS_WOOD;
+        }
+
+        /* Assign this particle the fuel moisture for its size class. */
+        Fuel_Moisture(catalog,model,particle) = moisture[mclass];
+    }
+
+    /* Compute live fuel extinction moisture. */
+    if ( nlive )
+    {
+        fdmois = ( Fuel_FineDead(catalog,model) > Smidgen ) ?
+            (wfmd / Fuel_FineDead(catalog,model)) : 0.;
+
+        lifeMext[FIRE_LIFE_LIVE]
+            = ((Fuel_LiveMextFactor(catalog,model)
+            * (1.0 - fdmois/Fuel_Mext(catalog,model))) - 0.226);
+
+        if ( lifeMext[FIRE_LIFE_LIVE] < Fuel_Mext(catalog,model) )
+            lifeMext[FIRE_LIFE_LIVE] = Fuel_Mext(catalog,model);
+    }
+
+    /* Dead fuel extinction moisture is a fuel model input. */
+    lifeMext[FIRE_LIFE_DEAD] = Fuel_Mext(catalog,model);
+
+    /* Compute category weighted moisture and accumulate the rbQig. */
+    for (particle=0; particle<Fuel_Particles(catalog,model); particle++)
+    {
+        qig = 250. + 1116. * Fuel_Moisture(catalog,model,particle);
+
+        life = Fuel_Live(catalog,model,particle);
+
+        lifeMoisture[life] += Fuel_AreaWtg(catalog,model,particle)
+                            * Fuel_Moisture(catalog,model,particle);
+
+        rbQig += qig
+               * Fuel_AreaWtg(catalog,model,particle)
+               * Fuel_LifeAreaWtg(catalog,model,life)
+               * Fuel_SigmaFactor(catalog,model,particle);
+    }
+
+    /* Complete the rbQig calculation. */
+    rbQig *= Fuel_BulkDensity(catalog,model);
+
+    /*  Compute moisture damping coeff by life class, and combine with the */
+    /*  life class's rx factor to get the total reaction intensity. */
+    for (life=0; life<FIRE_LIFE_CATS; life++)
+    {
+        ratio = 0.;
+        if ( lifeMext[life] > Smidgen )
+        {
+            ratio = lifeMoisture[life] / lifeMext[life];
+            lifeEtaM[life] =
+                1.0 - 2.59*ratio + 5.11*ratio*ratio - 3.52*ratio*ratio*ratio;
+        }
+
+        /* If category moisture exceeds category extinction moisture, */
+        /* the damping coefficient is zero. */
+        if ( lifeMoisture[life] >= lifeMext[life] )
+            lifeEtaM[life] = 0.;
+
+        /* Accumulate total reaction intensity. */
+        Fuel_RxIntensity(catalog,model)
+            += Fuel_LifeRxFactor(catalog,model,life)
+             * lifeEtaM[life];
+    }
+
+    /* Calculate heat per unit area from rx intensity and residence time. */
+    Fuel_HeatPerUnitArea(catalog,model)
+        = Fuel_RxIntensity(catalog,model)
+        * Fuel_ResidenceTime(catalog,model);
+
+    /* Calculate no-wind, no-slope spread rate. */
+    Fuel_Spread0(catalog,model)
+        = (rbQig > Smidgen)
+        ? Fuel_RxIntensity(catalog,model) * Fuel_PropFlux(catalog,model) / rbQig
+        : 0.;
+
+    /* Re-initialize spread in maximum and any azimuth to no wind-no slope. */
+    Fuel_SpreadMax(catalog,model) = Fuel_Spread0(catalog,model);
+    Fuel_SpreadAny(catalog,model) = Fuel_Spread0(catalog,model);
+    Fuel_AzimuthMax(catalog,model) = Fuel_AzimuthAny(catalog,model) = 0.;
+
+    return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_SpreadWindSlopeMax()
+ *
+ *  Description
+ *      Calculates maximum fire spread rate and direction under the given
+ *      wind-slope conditions.  Results depend only upon:
+ *      - no wind-slope spread rate
+ *      - wind speed and direction
+ *      - aspect and slope
+ *
+ *  Side Effects
+ *      Updates the following variables:
+ *          Fuel_Slope()                      = slope;
+ *          Fuel_PhiSlope().
+ *          Fuel_Wind()                       = windFpm;
+ *          Fuel_PhiWind().
+ *          Fuel_Aspect(catalog,model)        = aspect;
+ *          Fuel_WindDir(catalog,model)       = windDeg;
+ *          Fuel_PhiEffWind(catalog,model)    = phiEw;
+ *          Fuel_EffectiveWind(catalog,model) = effectiveWind;
+ *          Fuel_WindLimit(catalog,model)     = windLimit;
+ *          Fuel_SpreadMax(catalog,model)     = spreadMax;
+ *          Fuel_AzimuthMax(catalog,model)    = azimuthMax;
+ *          Fuel_LwRatio(catalog,model)       = lwRatio;
+ *          Fuel_Eccentricity(catalog,model)  = eccentricity;
+ *
+ *      Resets Fire_SpreadAtAzimuth() variables:
+ *          Fuel_SpreadAny(catalog,model)       = spreadMax;
+ *          Fuel_AzimuthAny(catalog,model)      = azimuthMax;
+ *          Fuel_ByramsIntensity(catalog,model) = 0.;
+ *          Fuel_FlameLength(catalog,model)     = 0.;
+ *          Fuel_ScorchHeight(catalog,model)    = 0.;
+ *
+ *      Previous Fire_SpreadAtAzimiuth() results become obsolete for this model.
+ *
+ *  Function Returns
+ *      FIRE_STATUS_OK or FIRE_STATUS_ERROR.
+ *      Return status and error text are stored in the Fire Catalog's buffers.
+ *
+ *******************************************************************************
+ */
+
+int
+Fire_SpreadWindSlopeMax ( FuelCatalogPtr catalog, size_t model, double windFpm, double windDeg, double slope, double aspect )
+   // FuelCatalogPtr catalog;     /* FuelCatalogData instance pointer           */
+   // size_t  model;              /* fuel model number            [0-maxModels] */
+   // double  windFpm;            /* wind speed                        (ft/min) */
+   // double  windDeg;            /* wind bearing vector      (compass degrees) */
+   // double  slope;              /* slope                         (rise/reach) */
+   // double  aspect;             /* aspect (downslope)   azimuth (compass deg) */
+{
+    double upslope, azimuthMax, phiEw;
+    double splitDeg, splitRad;
+    double slpRate, wndRate, rv, spreadMax;
+    double x, y, al, a;
+    double maxWind, effectiveWind, lwRatio, eccentricity;
+    size_t doEffectiveWind, checkWindLimit, windLimit;
+
+    /* Validate the catalog and fuel model. */
+    assert(catalog!= NULL && FuelCat_MagicCookie(catalog)==FIRE_CATALOG_MAGIC);
+    if ( ! Fire_FuelModelExists(catalog,model) )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_SpreadMax(): el modelo de combustible %d no existe en el catálogo de combustibles \"%s\".",
+            model, FuelCat_Name(catalog));
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /* Recalculate slope factors ONLY if different from previous model input. */
+    if ( ! Equal(Fuel_Slope(catalog,model),slope) )
+    {
+        Fuel_PhiSlope(catalog,model) =
+            Fuel_SlopeK(catalog,model) * slope * slope;
+        Fuel_Slope(catalog,model) = slope;
+    }
+
+    /* Recalculate wind factors ONLY if different from previous model input. */
+    if ( ! Equal(Fuel_WindSpeed(catalog,model),windFpm) )
+    {
+        Fuel_PhiWind(catalog,model) = (windFpm < Smidgen) ? 0. :
+            Fuel_WindK(catalog,model) * pow(windFpm, Fuel_WindB(catalog,model));
+        Fuel_WindSpeed(catalog,model) = windFpm;
+    }
+
+    /* Combine wind and slope factors. */
+    phiEw = Fuel_PhiSlope(catalog,model) + Fuel_PhiWind(catalog,model);
+    windLimit = 0;
+    lwRatio = 1.;
+    eccentricity = 0.;
+    upslope = (aspect>=180.) ? aspect-180. : aspect+180.;
+
+    /* Situation 1: no fire spread or reaction intensity. */
+    if ( Fuel_Spread0(catalog,model) < Smidgen )
+    {
+        spreadMax = 0.;
+        azimuthMax = 0;
+        /* There IS an effective wind even if there is no fire. */
+        doEffectiveWind = 1;
+        /* But since BEHAVE doesn't calculate effective wind when no spread. */
+        /* we wont either. */
+        effectiveWind = 0.;
+        doEffectiveWind = 0;
+        checkWindLimit = 0;
+    }
+
+    /* Situation 2: no wind and no wind */
+    else if ( phiEw < Smidgen )
+    {
+        phiEw = 0.;
+        effectiveWind = 0.;
+        doEffectiveWind = 0;
+        spreadMax = Fuel_Spread0(catalog,model);
+        azimuthMax = 0;
+        checkWindLimit = 0;
+    }
+
+    /* Situation 3: wind with no slope. */
+    else if ( slope < Smidgen )
+    {
+        effectiveWind = windFpm;
+        doEffectiveWind = 0;
+        spreadMax = Fuel_Spread0(catalog,model) * (1. + phiEw);
+        azimuthMax = windDeg;
+        checkWindLimit = 1;
+    }
+
+    /* Situation 4: slope with no wind. */
+    else if ( windFpm < Smidgen )
+    {
+        doEffectiveWind = 1;
+        spreadMax = Fuel_Spread0(catalog,model) * (1. + phiEw);
+        azimuthMax = upslope;
+        checkWindLimit = 1;
+    }
+
+    /* Situation 5: wind blows upslope. */
+    else if ( Equal(upslope,windDeg) )
+    {
+        doEffectiveWind = 1;
+        spreadMax = Fuel_Spread0(catalog,model) * (1. + phiEw);
+        azimuthMax = upslope;
+        checkWindLimit = 1;
+    }
+
+    /* Situation 6: wind blows cross slope. */
+    else
+    {
+        /* Recalculate spread rate in the optimal direction. */
+        splitDeg = (upslope<=windDeg) ? windDeg-upslope : 360.-upslope+windDeg;
+        splitRad = DegreesToRadians(splitDeg);
+        slpRate  = Fuel_Spread0(catalog,model) * Fuel_PhiSlope(catalog,model);
+        wndRate  = Fuel_Spread0(catalog,model) * Fuel_PhiWind(catalog,model);
+        x        = slpRate + wndRate * cos(splitRad);
+        y        = wndRate * sin(splitRad);
+        rv       = sqrt(x*x + y*y);
+        spreadMax= Fuel_Spread0(catalog,model) + rv;
+
+        /* Recalculate phiEw in the optimal direction. */
+        phiEw    = spreadMax / Fuel_Spread0(catalog,model) - 1.0;
+        doEffectiveWind = (phiEw > Smidgen) ? 1 : 0;
+        checkWindLimit = 1;
+
+        /* Recalculate direction of maximum spread in azimuth degrees. */
+        al = asin(fabs(y) / rv);
+        if ( x >= 0. )
+            a = (y >= 0.) ? al          : M_PI + M_PI - al;
+        else
+            a = (y >= 0.) ? (M_PI - al) : (M_PI + al);
+
+        splitDeg = RadiansToDegrees(a);
+        if ( (azimuthMax = upslope + splitDeg) > 360. )
+            azimuthMax -= 360.;
+    }
+
+    /* Recalculate effective wind speed based upon phiEw. */
+    if ( doEffectiveWind )
+        effectiveWind = pow( (phiEw * Fuel_WindE(catalog,model)),
+                             (1. / Fuel_WindB(catalog,model)) );
+
+    /* If effective wind exceeds maximum wind, scale back spread & phiEw. */
+    if ( checkWindLimit )
+    {
+        maxWind = 0.9 * Fuel_RxIntensity(catalog,model);
+        if ( effectiveWind > maxWind )
+        {
+            phiEw = (maxWind < Smidgen) ? 0. :
+                Fuel_WindK(catalog,model) * pow(maxWind, Fuel_WindB(catalog,model));
+
+            spreadMax = Fuel_Spread0(catalog,model) * (1. + phiEw);
+            effectiveWind = maxWind;
+            windLimit = 1;
+        }
+    }
+
+    /* Determine fire ellipse parameters from the effective wind speed. */
+    /* = 1. + 0.25 * (Fuel_EffectiveWind(catalog,model) / 88.0); */
+    if ( effectiveWind > Smidgen )
+    {
+        lwRatio = 1. + 0.002840909 * effectiveWind;
+        eccentricity = sqrt(lwRatio * lwRatio - 1.0) / lwRatio;
+    }
+
+    /* Store the results. */
+    Fuel_Aspect(catalog,model)       = aspect;
+    Fuel_WindDir(catalog,model)      = windDeg;
+    Fuel_PhiEffWind(catalog,model)   = phiEw;
+    Fuel_EffectiveWind(catalog,model)= effectiveWind;
+    Fuel_WindLimit(catalog,model)    = windLimit;
+    Fuel_SpreadMax(catalog,model)    = Fuel_SpreadAny(catalog,model)  = spreadMax;
+    Fuel_AzimuthMax(catalog,model)   = Fuel_AzimuthAny(catalog,model) = azimuthMax;
+    Fuel_LwRatio(catalog,model)      = lwRatio;
+    Fuel_Eccentricity(catalog,model) = eccentricity;
+
+    /* Initialize behavior variables updated by Fire_SpreadAtAzimuth(). */
+    Fuel_ByramsIntensity(catalog,model) = 0.;
+    Fuel_FlameLength(catalog,model)     = 0.;
+    Fuel_ScorchHeight(catalog,model)    = 0.;
+
+    return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_SpreadAtAzimuth()
+ *
+ *  Description
+ *      Calculates fire spread rate in a specified direction and optionally
+ *      calculates the fireline intensity, flame length, and scorch height
+ *      along the fire spread vector.
+ *
+ *  Side Effects
+ *      The following variables are updated:
+ *          Fuel_SpreadAny(catalog,model)
+ *          Fuel_AzimuthAny(catalog,model) == azimuth;
+ *          Fuel_ByramsIntensity(catalog,model) is updated if FIRE_BYRAMS.
+ *          Fuel_FlameLength(catalog,model) is updated if FIRE_FLAME.
+ *          Fuel_ScorchHeight(catalog,model) is updated if FIRE_SCORCH.
+ *  Notes
+ *      The calculations depend upon the most recent calls to
+ *      Fire_SpreadNoWindNoSlope() and Fire_SpreadWindSlopeMax() for this model.
+ *
+ *      The input azimuth is the degrees clockwise from north.
+ *
+ *  Function Returns
+ *      FIRE_STATUS_OK or FIRE_STATUS_ERROR.
+ *      Return status and error text are stored in the Fire Catalog's buffers.
+ *
+ *******************************************************************************
+ */
+
+int
+Fire_SpreadAtAzimuth ( FuelCatalogPtr catalog, size_t model, double azimuth, size_t which )
+   // FuelCatalogPtr catalog;     /* FuelCatalogData instance pointer           */
+   // size_t  model;              /* fuel model number            [0-maxModels] */
+   // double  azimuth;            /* fire spread azimuth     (deg from upslope) */
+   // size_t  which;      /* FIRE_NONE | FIRE_BYRAMS | FIRE_FLAME | FIRE_SCORCH */
+{
+    double dir;
+    double radians;
+    double byrams;
+    double mph;
+    size_t lo, hi, mid, n;
+
+    /* Validate catalog and the fuel model. */
+    assert(catalog!= NULL && FuelCat_MagicCookie(catalog)==FIRE_CATALOG_MAGIC);
+    if ( ! Fire_FuelModelExists(catalog,model) )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_SpreadAtAzimuth(): el modelo de combustible %d no existe en el catálogo de combustibles \"%s\".",
+            model, FuelCat_Name(catalog));
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /* Situation 1: no fire or reaction intensity, so no Byrams or flame. */
+    if ( Fuel_SpreadMax(catalog,model) < Smidgen )
+        return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+
+    /* Situation 2: phiEw is zero OR azimuth is in the max spread direction */
+    if ( Fuel_PhiEffWind(catalog,model) < Smidgen
+      || Equal(Fuel_AzimuthMax(catalog,model),azimuth) )
+    {
+        Fuel_SpreadAny(catalog,model) = Fuel_SpreadMax(catalog,model);
+    }
+
+    /* Situation 3: wind and/or slope and azimuth not in max spread direction */
+    else
+    {
+        /* Angle between maximum spread azimuth and requested azimuth. */
+        if ( (dir = fabs(Fuel_AzimuthMax(catalog,model) - azimuth)) > 180. )
+            dir = 360. - dir;
+        radians = DegreesToRadians(dir);
+
+        /* Calculate the fire spread rate in this azimuth. */
+        Fuel_SpreadAny(catalog,model)
+            = Fuel_SpreadMax(catalog,model)
+            * (1. - Fuel_Eccentricity(catalog,model))
+            / (1. - Fuel_Eccentricity(catalog,model) * cos(radians));
+    }
+    Fuel_AzimuthAny(catalog,model) = azimuth;
+
+    /* Additional fire behavior outputs. */
+    if ( which )
+    {
+        /* Must compute Byram's if any of the three are requested. */
+        byrams = Fuel_ResidenceTime(catalog,model)
+               * Fuel_SpreadAny(catalog,model)
+               * Fuel_RxIntensity(catalog,model)
+               / 60.;
+
+        /* Byrams intensity is requested. */
+        if ( which & FIRE_BYRAMS )
+            Fuel_ByramsIntensity(catalog,model) = byrams;
+
+        /* Flame length is requested. */
+        if ( (which & FIRE_FLAME) )
+        {
+            if ( byrams < Smidgen )
+            {
+                Fuel_FlameLength(catalog,model) = 0.;
+            }
+            else
+            {
+                /* Use lookup table if it exists & includes this intensity. */
+                if ( (n = FuelCat_FlameClasses(catalog)) > 0
+                  && FuelCat_FlameArray(catalog)[n-1] > byrams )
+                {
+                    hi = n-1;
+                    lo = 0;
+                    do {
+                        mid = lo + (hi-lo)/2;
+                        if ( FuelCat_FlameArray(catalog)[mid] > byrams )
+                            hi = mid;
+                        else
+                            lo = mid + 1;
+                    } while (lo != hi);
+                    Fuel_FlameLength(catalog,model) =
+                        FuelCat_FlameStep(catalog) * (lo+1);
+                }
+                /* otherwise compute flame length from scratch. */
+                else
+                {
+                    Fuel_FlameLength(catalog,model) = 0.45 * pow(byrams, 0.46);
+                }
+            }
+        }
+
+        /* Scorch height is requested. */
+        if ( (which & FIRE_SCORCH) )
+        {
+            if ( byrams < Smidgen )
+            {
+                Fuel_ScorchHeight(catalog,model) = 0.;
+            }
+            else
+            {
+                mph = Fuel_WindSpeed(catalog,model) / 88.;
+                Fuel_ScorchHeight(catalog,model) =
+                    pow(byrams, 1.166667) / sqrt(byrams + (mph * mph * mph));
+            /*  Fuel_ScorchHeight(catalog,model) *= (63. / (140. - temp_f) ); */
+            }
+        }
+    }
+
+    return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_FlameScorch()
+ *
+ *  Description
+ *      Calculates the flame length and/or scorch height for the current
+ *      Byram's intensity and azimuth (as determined by the most recent
+ *      call to Fire_SpreadAtAzimuth()).
+ *      Uses the Flame Length Table if it exists.
+ *      Offers a method of getting flame length if Fire_SpreadAtAzimuth()
+ *      is not calculating it.
+ *
+ *  Side Effects
+ *      The following variables are updated:
+ *          Fuel_FlameLength(catalog,model) is updated.
+ *          Fuel_ScorchHeight(catalog,model)
+ *  Notes
+ *      The calculations depend upon the most recent calls to
+ *      Fire_SpreadNoWindNoSlope(), Fire_SpreadWindSlopeMax(), and
+ *      Fire_SpreadAtAzimuth() for this model.
+ *
+ *  Function Returns
+ *      FIRE_STATUS_OK or FIRE_STATUS_ERROR.
+ *      Return status and error text are stored in the Fire Catalog's buffers.
+ *
+ *******************************************************************************
+ */
+
+int
+Fire_FlameScorch ( FuelCatalogPtr catalog, size_t model, size_t which )
+   // FuelCatalogPtr catalog;     /* FuelCatalogData instance pointer           */
+   // size_t  model;              /* fuel model number            [0-maxModels] */
+   // size_t  which;      /* FIRE_NONE | FIRE_BYRAMS | FIRE_FLAME | FIRE_SCORCH */
+{
+    double byrams;
+    double mph;
+    size_t lo, hi, mid, n;
+
+    /* Validate catalog and the fuel model. */
+    assert(catalog!= NULL && FuelCat_MagicCookie(catalog)==FIRE_CATALOG_MAGIC);
+    if ( ! Fire_FuelModelExists(catalog,model) )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_FlameScorch(): el modelo de combustible %d no existe en el catálogo de combustibles \"%s\".",
+            model, FuelCat_Name(catalog));
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    byrams = Fuel_ResidenceTime(catalog,model)
+           * Fuel_SpreadAny(catalog,model)
+           * Fuel_RxIntensity(catalog,model)
+           / 60.;
+
+    /* Flame length is requested. */
+    if ( (which & FIRE_FLAME) )
+    {
+        if ( byrams < Smidgen )
+        {
+            Fuel_FlameLength(catalog,model) = 0.;
+        }
+        else
+        {
+            /* Use lookup table if it exists & includes this intensity. */
+            if ( (n = FuelCat_FlameClasses(catalog)) > 0
+              && FuelCat_FlameArray(catalog)[n-1] > byrams )
+            {
+                hi = n-1;
+                lo = 0;
+                do {
+                    mid = lo + (hi-lo)/2;
+                    if ( FuelCat_FlameArray(catalog)[mid] > byrams )
+                        hi = mid;
+                    else
+                        lo = mid + 1;
+                } while (lo != hi);
+                Fuel_FlameLength(catalog,model) =
+                    FuelCat_FlameStep(catalog) * (lo+1);
+            }
+            /* otherwise compute flame length from scratch. */
+            else
+            {
+                Fuel_FlameLength(catalog,model) = 0.45 * pow(byrams, 0.46);
+            }
+        }
+    }
+
+    /* Scorch height is requested. */
+    if ( (which & FIRE_SCORCH) )
+    {
+        if ( byrams < Smidgen )
+        {
+            Fuel_ScorchHeight(catalog,model) = 0.;
+        }
+        else
+        {
+            mph = Fuel_WindSpeed(catalog,model) / 88.;
+            Fuel_ScorchHeight(catalog,model) =
+                pow(byrams, 1.166667) / sqrt(byrams + (mph * mph * mph));
+        /*  Fuel_ScorchHeight(catalog,model) *= (63. / (140. - temp_f) ); */
+        }
+    }
+
+    return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_FlameLengthTable()
+ *
+ *  Description
+ *      Creates a flame length lookup table containing "flameClasses" classes
+ *      with each class spanning "flameStep" feet.
+ *
+ *  Discussion
+ *      Since flame length is strictly an output variable (e.g., it is never
+ *      used as the basis for subsequent computations), we can usually afford
+ *      to round it to some precision that makes sense to fire managers.
+ *      Usually this will be in 1 foot or perhaps 6 inch increments.  The call
+ *
+ *
+ *      creates a flame length table for flame lengths of 1 through 500 feet.
+ *
+ *      Fire_SpreadAtAzimuth() uses the flame table (if one is defined for the
+ *      catalog) to avoid using the costly pow() function for highly iterative
+ *      flame length calculations, saving a considerable amount of processing
+ *      time.  Fire_SpreadAtAzimuth() will still use the pow() function to
+ *      compute flame length if (1) a flame length table is not defined,
+ *      (2) the fireline intensity exceeds the upper limit of the currently
+ *      defined flame length table, or (3) the flame length table becomes
+ *      undefined by a Fire_FlameLengthTable(catalog, 0, 0.) call.
+ *
+ *
+ *  Examples
+ *      Fire_FlameLengthTable(catalog, 200, 1.0);
+ *          Creates a table for flame lengths of 1 through 200 feet in 1-foot
+ *          intervals.  Any previously defined flame length table for this
+ *          fuel catalog is destroyed.
+ *
+ *      Fire_FlameLengthTable(catalog, 500, 0.5);
+ *          Creates a table for flame lengths of 0.5 through 250 feet in 6-inch
+ *          intervals.  ANy previously defined flame length table for this
+ *          fuel catalog is destroyed.
+ *
+ *      Fire_FlameLengthTable(catalog, 0, 0.);
+ *          Destroys any existing flame length table for this catalog, and
+ *          forces actual flame length computation using pow() function.
+ *
+ *  Side Effects
+ *      If a flame length table currently exists, it is destroyed, and the
+ *      FuelCat_FlameArray(), FuelCat_FlameClasses(), and
+ *      FuelCat_FlameStep() are set to NULL, 0, and 0.0, respectively.
+ *
+ *      If fireClasses > 0, allocates a flame length table and fills it with
+ *      the fireline intensity associated with the upper limit of each flame
+ *      length class.  The FuelCat_FlameArray(), FuelCat_FlameClasses(), and
+ *      FuelCat_FlameStep() are then updated.
+ *
+ *  Function Returns
+ *      FIRE_STATUS_OK or FIRE_STATUS_ERROR.
+ *      Return status and error text are stored in the Fire Catalog's buffers.
+ *
+ *******************************************************************************
+ */
+
+int
+Fire_FlameLengthTable ( FuelCatalogPtr catalog, size_t flameClasses, double flameStep )
+   // FuelCatalogPtr catalog;     /* FuelCatalogData instance pointer           */
+   // size_t  flameClasses;       /* number of flame length classes             */
+   // double  flameStep;          /* flame length step value per class          */
+{
+    double power, flame;
+    size_t i;
+
+    /* Validate the catalog. */
+    assert(catalog!= NULL && FuelCat_MagicCookie(catalog)==FIRE_CATALOG_MAGIC);
+
+    /* If a flame table already exists, destroy it. */
+    if ( FuelCat_FlameArray(catalog) )
+    {
+        free(FuelCat_FlameArray(catalog));
+        FuelCat_FlameArray(catalog)   = NULL;
+        FuelCat_FlameClasses(catalog) = 0;
+        FuelCat_FlameStep(catalog)    = 0.0;
+    }
+
+    /* If flameClasses is zero, simply return. */
+    if ( flameClasses == 0 )
+        return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+
+    /* Otherwise create a new flame table. */
+    if ( (FuelCat_FlameArray(catalog) = (double *)
+        calloc(flameClasses, sizeof(double))) == NULL )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_FlameLengthTable(): imposible asignar tabla de longitud de llama con %d clases de %f pies.",
+            flameClasses, flameStep);
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /* Fill the array. */
+    power = 1. / .46;
+    for ( i=0; i<flameClasses; i++ )
+    {
+        flame = flameStep * (i+1);
+        FuelCat_FlameArray(catalog)[i] = pow((flame / .45), power);
+    }
+    FuelCat_FlameClasses(catalog) = flameClasses;
+    FuelCat_FlameStep(catalog)    = flameStep;
+
+    return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_FuelCatalogCreate()
+ *
+ *  Description
+ *      Creates a new fuel model catalog capable of holding fuel models with
+ *      id's in the range [0..maxModel].
+ *      The catalog is filled by subsequent calls to Fire_FuelModelCreate().
+ *
+ *  Side Effects
+ *      Allocates a new FuelCatalogData structure.
+ *      Allocates an error text buffer for the catalog.
+ *      Allocates a name for the catalog.
+ *      Allocates an array of pointers to FuelData structures (the FuelData
+ *      structures themselves are allocated by Fire_FuelModelCreate() and
+ *      their pointers are stored here).
+ *
+ *  Notes
+ *      The FuelCatalog contains a dynamically-allocated array of pointers
+ *      to FuelData blocks.  These pointers are initially NULL and are
+ *      subsequently assigned by Fire_FuelModelCreate().  The array provides
+ *      the programmer with a means of directly accessing fuel models via
+ *      their model number, which is handy when simulating fire growth.
+ *
+ *  Function Returns
+ *      While most FireLib functions return a status code, this one returns
+ *      a pointer to the new FuelCatalogData on success or NULL if unable
+ *      to allocate any of the dynamic structures.
+ *
+ *******************************************************************************
+ */
+
+FuelCatalogPtr
+Fire_FuelCatalogCreate ( char *name, size_t maxModels )
+   // char  *name;                /* FuelCatalogData instance name */
+   // size_t maxModels;           /* maximum modelId allowed in this catalog */
+{
+    FuelCatalogPtr catalog;
+    static char *blank = {""};
+
+    /* Catch a NULL name. */
+    if ( name == NULL )
+        name = blank;
+
+    /* Allocate the FireCatalogData structure. */
+    if ( (catalog = (FuelCatalogPtr) malloc(sizeof(FuelCatalogData))) == NULL )
+    {
+        fprintf(stderr,
+            "Fire_FuelCatalogCreate(): imposible asignar el objeto \"%s\" del catálogo de combustibles.\n",
+            name);
+        return (NULL);
+    }
+
+    /* Assign the magic cookie right away. */
+    FuelCat_MagicCookie(catalog) = FIRE_CATALOG_MAGIC;
+
+    /* Allocate and store the catalog instance name. */
+    if ( (FuelCat_Name(catalog) = strdup(name)) == NULL )
+    {
+        fprintf(stderr,
+            "Fire_FuelCatalogCreate(): imposible duplicar el nombre \"%s\" del catálogo de combustibles.\n",
+            name);
+        free(catalog);
+        return (NULL);
+    }
+
+    /* Allocate the FireCatalogData error message buffer. */
+    if ( (FuelCat_Error(catalog) =
+        (char *) calloc(FIRE_ERROR_BUFFER_SIZE, sizeof(char))) == NULL )
+    {
+        fprintf(stderr,
+            "Fire_FuelCatalogCreate(): imposible asignar el bufer de error  \"%s\" del catálogo de combustibles.\n",
+            name);
+        free(FuelCat_Name(catalog));
+        free(catalog);
+        return (NULL);
+    }
+    FuelCat_Status(catalog) = FIRE_STATUS_ERROR;
+
+    /* Allocate a FuelModelPtr array to handle models [0..maxModels]. */
+    maxModels++;
+    FuelCat_MaxModels(catalog) = maxModels;
+    if ( (FuelCat_ModelArray(catalog) = (FuelModelPtr *)
+        calloc(FuelCat_MaxModels(catalog), sizeof(FuelModelPtr))) == NULL )
+    {
+        fprintf(stderr,
+            "Fire_FuelCatalogCreate(): imposible asignar \"%s\" con %d modelos de combustible del catálogo de combustibles.\n",
+            name, maxModels);
+        free(FuelCat_Error(catalog));
+        free(FuelCat_Name(catalog));
+        free(catalog);
+        return (NULL);
+    }
+
+    /* Initialize variables and return ptr to this instance. */
+    FuelCat_FlameArray(catalog)   = NULL;
+    FuelCat_FlameClasses(catalog) = 0;
+    FuelCat_FlameStep(catalog)    = 0.0;
+    FuelCat_Status(catalog)       = FIRE_STATUS_OK;
+    return (catalog);
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_FuelCatalogCreateStandard()
+ *
+ *  Description
+ *      Creates a new fuel model catalog capable of holding fuel models with
+ *      id's in the range [0..maxModel].
+ *      The catalog is then filled with the 13 standard fire behavior fuel
+ *      models.  Other models may be added by subsequent calls to
+ *      Fire_FuelModelCreate().
+ *
+ *  Side Effects
+ *      Allocates a new FuelCatalogData structure.
+ *      Fills the catalog with standard fuels models 0-13.
+ *
+ *  Function Returns
+ *      While most FireLib functions return a status code, this one returns
+ *      a pointer to the new FuelCatalogData on success, or NULL if unable
+ *      to allocate any of the dynamic structures.
+ *
+ *******************************************************************************
+ */
+
+FuelCatalogPtr
+Fire_FuelCatalogCreateStandard (char *name, size_t maxModels )
+   // char  *name;                /* FuelCatalogData instance name */
+   // size_t maxModels;           /* maximum modelId allowed in this catalog */
+{
+    FuelCatalogPtr catalog;
+    double stot, seff, heat, dens, adjust;
+    size_t m, p;
+
+    /* Fuel model definitions. */
+    typedef struct {
+        char *name; double depth; double mext; size_t maxParticles; char *desc;
+    } StandardModels;
+
+    StandardModels M[14] = {
+        {"NoFuel", 0.1, 0.01, 0, "No Combustible Fuel" },
+        {"NFFL01", 1.0, 0.12, 1, "Short Grass (1 ft)" },
+        {"NFFL02", 1.0, 0.15, 4, "Timber (grass & understory)" },
+        {"NFFL03", 2.5, 0.25, 1, "Tall Grass (2.5 ft)" },
+        {"NFFL04", 6.0, 0.20, 4, "Chaparral (6 ft)" },
+        {"NFFL05", 2.0, 0.20, 3, "Brush (2 ft)" },
+        {"NFFL06", 2.5, 0.25, 3, "Dormant Brush & Hardwood Slash" },
+        {"NFFL07", 2.5, 0.40, 4, "Southern Rough" },
+        {"NFFL08", 0.2, 0.30, 3, "Closed Timber Litter" },
+        {"NFFL09", 0.2, 0.25, 3, "Hardwood Litter" },
+        {"NFFL10", 1.0, 0.25, 4, "Timber (litter & understory)" },
+        {"NFFL11", 1.0, 0.15, 3, "Light Logging Slash" },
+        {"NFFL12", 2.3, 0.20, 3, "Medium Logging Slash" },
+        {"NFFL13", 3.0, 0.25, 3, "Heavy Logging Slash" }
+    };
+
+    /* Fuel particle definitions. */
+    typedef struct {
+        size_t model; size_t type; double load; double savr;
+    } StandardParticle;
+
+    static StandardParticle P[39] = {
+        { 1, FIRE_TYPE_DEAD, 0.0340, 3500.},
+        { 2, FIRE_TYPE_DEAD, 0.0920, 3000.},
+        { 2, FIRE_TYPE_DEAD, 0.0460, 109.},
+        { 2, FIRE_TYPE_DEAD, 0.0230, 30.},
+        { 2, FIRE_TYPE_HERB, 0.0230, 1500.},
+        { 3, FIRE_TYPE_DEAD, 0.1380, 1500.},
+        { 4, FIRE_TYPE_DEAD, 0.2300, 2000.},
+        { 4, FIRE_TYPE_DEAD, 0.1840, 109.},
+        { 4, FIRE_TYPE_DEAD, 0.0920, 30.},
+        { 4, FIRE_TYPE_WOOD, 0.2300, 1500.},
+        { 5, FIRE_TYPE_DEAD, 0.0460, 2000.},
+        { 5, FIRE_TYPE_DEAD, 0.0230, 109.},
+        { 5, FIRE_TYPE_WOOD, 0.0920, 1500.},
+        { 6, FIRE_TYPE_DEAD, 0.0690, 1750.},
+        { 6, FIRE_TYPE_DEAD, 0.1150, 109.},
+        { 6, FIRE_TYPE_DEAD, 0.0920, 30.},
+        { 7, FIRE_TYPE_DEAD, 0.0520, 1750.},
+        { 7, FIRE_TYPE_DEAD, 0.0860, 109.},
+        { 7, FIRE_TYPE_DEAD, 0.0690, 30.},
+        { 7, FIRE_TYPE_WOOD, 0.0170, 1550.},
+        { 8, FIRE_TYPE_DEAD, 0.0690, 2000.},
+        { 8, FIRE_TYPE_DEAD, 0.0460, 109.},
+        { 8, FIRE_TYPE_DEAD, 0.1150, 30.},
+        { 9, FIRE_TYPE_DEAD, 0.1340, 2500.},
+        { 9, FIRE_TYPE_DEAD, 0.0190, 109.},
+        { 9, FIRE_TYPE_DEAD, 0.0070, 30.},
+        {10, FIRE_TYPE_DEAD, 0.1380, 2000.},
+        {10, FIRE_TYPE_DEAD, 0.0920, 109.},
+        {10, FIRE_TYPE_DEAD, 0.2300, 30.},
+        {10, FIRE_TYPE_WOOD, 0.0920, 1500.},
+        {11, FIRE_TYPE_DEAD, 0.0690, 1500.},
+        {11, FIRE_TYPE_DEAD, 0.2070, 109.},
+        {11, FIRE_TYPE_DEAD, 0.2530, 30.},
+        {12, FIRE_TYPE_DEAD, 0.1840, 1500.},
+        {12, FIRE_TYPE_DEAD, 0.6440, 109.},
+        {12, FIRE_TYPE_DEAD, 0.7590, 30.},
+        {13, FIRE_TYPE_DEAD, 0.3220, 1500.},
+        {13, FIRE_TYPE_DEAD, 1.0580, 109.},
+        {13, FIRE_TYPE_DEAD, 1.2880, 30.},
+    };
+
+    /* First, create the catalog. */
+    if ( maxModels < 13 )
+        maxModels = 13;
+    if ( (catalog = Fire_FuelCatalogCreate(name, maxModels)) == NULL )
+        return (NULL);
+
+    /* Second, create all 14 models. */
+    adjust = 1.0;
+    for ( m=0; m<14; m++ )
+    {
+        if ( Fire_FuelModelCreate(catalog, m, M[m].name, M[m].desc, M[m].depth,
+            M[m].mext, adjust, M[m].maxParticles) != FIRE_STATUS_OK )
+        {
+            fprintf(stderr, "%s\n", FuelCat_Error(catalog));
+            Fire_FuelCatalogDestroy(catalog);
+            return (NULL);
+        }
+    }
+
+    /* Finally, add all the fuel particles. */
+    stot   = 0.0555;
+    seff   = 0.0100;
+    heat   = 8000.0;
+    dens   = 32.0;
+    for ( p=0; p<39; p++ )
+    {
+        if ( Fire_FuelParticleAdd(catalog, P[p].model, P[p].type, P[p].load,
+            P[p].savr, dens, heat, stot, seff) != FIRE_STATUS_OK )
+        {
+            fprintf(stderr, "%s\n", FuelCat_Error(catalog));
+            Fire_FuelCatalogDestroy(catalog);
+            return (NULL);
+        }
+    }
+
+    return (catalog);
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_FuelCatalogDestroy()
+ *
+ *  Description
+ *      Destroys the fuel catalog and all its associated models and particles.
+ *
+ *  Side Effects
+ *      Destroys all FuelData instances belonging to the catalog.
+ *      Frees the array of pointers to FuelData structures.
+ *      Frees the catalog name.
+ *      Frees the catalog error text buffer.
+ *      Frees the FuelCatalog instance.
+ *
+ *  Function Returns
+ *      FIRE_STATUS_OK or FIRE_STATUS_ERROR.
+ *      Return status and error text are stored in the Fire Catalog's buffers.
+ *
+ *******************************************************************************
+ */
+
+int
+Fire_FuelCatalogDestroy ( FuelCatalogPtr catalog )
+   // FuelCatalogPtr catalog;     /* FuelCatalogData instance to destroy. */
+{
+    size_t model;
+
+    /* Validate the catalog. */
+    assert(catalog!=NULL && FuelCat_MagicCookie(catalog)==FIRE_CATALOG_MAGIC);
+
+    /* First destroy all the fuel models in this catalog. */
+    /* The free the catalog's array of FuelData pointers. */
+    if ( FuelCat_ModelArray(catalog) )
+    {
+        for ( model=0; model <= FuelCat_MaxModels(catalog); model++ )
+        {
+            if ( FuelCat_ModelPtr(catalog,model) )
+                Fire_FuelModelDestroy(catalog, model);
+        }
+        free(FuelCat_ModelArray(catalog));
+        FuelCat_ModelArray(catalog) = NULL;
+    }
+
+    /* Next destroy the flame length table. */
+    if ( FuelCat_FlameArray(catalog) )
+    {
+        free(FuelCat_FlameArray(catalog));
+        FuelCat_FlameArray(catalog)   = NULL;
+        FuelCat_FlameClasses(catalog) = 0;
+        FuelCat_FlameStep(catalog)    = 0.0;
+    }
+
+    /* Then free the name and error buffer for this FuelCatalogData instance. */
+    if ( FuelCat_Error(catalog) )
+    {
+        free(FuelCat_Error(catalog));
+        FuelCat_Error(catalog) = NULL;
+    }
+
+    if ( FuelCat_Name(catalog) )
+    {
+        free(FuelCat_Name(catalog));
+        FuelCat_Name(catalog) = NULL;
+    }
+
+    /* Finally,free the FuelCatalogData instance and return. */
+    free(catalog);
+
+    return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_FuelModelCreate()
+ *
+ *  Description
+ *      Creates a new fuel model able to hold maxParticles fuel particles.
+ *      Fuel particles are subsequently added by Fire_FuelParticleAdd().
+ *
+ *  Side Effects
+ *      Any existing fuel model with modelId in the Fuel Catalog is destroyed.
+ *      Allocates the fuel model's FuelData block.
+ *      Allocates the fuel model's name string.
+ *      Allocates the fuel model's description string.
+ *      Allocates the fuel model's fuel particle pointer array of maxParticles
+ *      (the FuelParticleData blocks are actually allocated within
+ *      Fire_FuelparticleAdd() and thier pointers stored in this array).
+ *      The fuel model's address is stored in the fuel catalog's pointer array.
+ *
+ *  Function Returns
+ *      FIRE_STATUS_OK or FIRE_STATUS_ERROR.
+ *      Return status and error text are stored in the Fire Catalog's buffers.
+ *
+ *******************************************************************************
+ */
+
+int
+Fire_FuelModelCreate (FuelCatalogPtr catalog, size_t model, char *name, char *desc, double depth, double mext, double adjust, size_t maxParticles)
+   // FuelCatalogPtr catalog;     /* FuelCatalogData instance */
+   // size_t  model;              /* fuel model number            [0-maxModels] */
+   // char   *name;               /* short name */
+   // char   *desc;               /* longer description */
+   // double  depth;              /* bed depth                             (ft) */
+   // double  mext;               /* moisture of extinction                (dl) */
+   // double  adjust;             /* spread adjustment factor              (dl) */
+   // size_t  maxParticles;       /* maximum number of fuel model particles     */
+{
+    static char *blank = {""};
+    size_t particle;
+
+    /* Validate the catalog. */
+    assert(catalog!= NULL && FuelCat_MagicCookie(catalog)==FIRE_CATALOG_MAGIC);
+
+    /* Make sure model id is within range. */
+    if ( model > FuelCat_MaxModels(catalog) )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_FuelModelCreate(): fuel model \"%s\" number %d exceeds fuel catalog \"%s\" range [0..%d].",
+            name, model, FuelCat_Name(catalog), FuelCat_MaxModels(catalog));
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /* Validate depth and mext. */
+    if ( depth < Smidgen )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_FuelModelCreate(): el modelo de combustible \"%s\" número %d de ancho %5.4f es demasiado pequeño.",
+            name, model, depth);
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    if ( mext < Smidgen )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_FuelModelCreate(): el modelo de combustible \"%s\" número %d de humedad de extinción %5.4f es demasiado pequeño.",
+            name, model, mext);
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /* If this model already exists, delete it. */
+    if ( FuelCat_ModelPtr(catalog,model) )
+        Fire_FuelModelDestroy(catalog, model);
+
+    /* Allocate the model's FuelData structure. */
+    if ( maxParticles < 1 )
+        maxParticles = 1;
+    if ( (FuelCat_ModelPtr(catalog,model) =
+                (FuelModelPtr) calloc(1, sizeof(FuelModelData))) == NULL
+      || (Fuel_ParticleArray(catalog,model) =
+                (PartPtr *) calloc(maxParticles, sizeof(PartPtr))) == NULL )
+    {
+        Fire_FuelModelDestroy(catalog, model);
+        sprintf(FuelCat_Error(catalog),
+            "Fire_FuelModelCreate(): imposible asignar el modelos de combustible \"%s\" número %d para el catálogo de combustibles \"%s\".",
+            name, model, FuelCat_Name(catalog));
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /* Catch NULL names and descriptions. */
+    if ( name == NULL )
+        name = blank;
+    if ( desc == NULL )
+        desc = blank;
+
+    /* Store remaining attributes. */
+    Fuel_Model(catalog,model)            = model;
+    Fuel_Depth(catalog,model)            = depth;
+    Fuel_Mext(catalog,model)             = mext;
+    Fuel_SpreadAdjustment(catalog,model) = adjust;
+    Fuel_Name(catalog,model)             = strdup(name);
+    Fuel_Desc(catalog,model)             = strdup(desc);
+    Fuel_CombustionFlag(catalog,model)   = 0;
+    Fuel_MaxParticles(catalog,model)     = maxParticles;
+    Fuel_Particles(catalog,model)        = 0;
+    for ( particle=0; particle<Fuel_MaxParticles(catalog,model); particle++ )
+        Fuel_ParticlePtr(catalog,model,particle) = NULL;
+
+    return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_FuelModelDestroy()
+ *
+ *  Description
+ *      Deletes the specified fuel model.
+ *      Note: this is one of only 3 functions that use the modelId instead
+ *      of a FuelData pointer to identify the model.
+ *
+ *  Side Effects
+ *      Free's all fuel particles added to the fuel model.
+ *      Free's the fuel particle pointer array.
+ *      Free's the fuel model's name.
+ *      Free's the fuel model's description.
+ *      Free's the fuel model's FuelData block.
+ *      Sets the Fuel Catalog's pointer for this fuel model to NULL.
+ *
+ *  Function Returns
+ *      FIRE_STATUS_OK or FIRE_STATUS_ERROR.
+ *      Return status and error text are stored in the Fire Catalog's buffers.
+ *
+ *******************************************************************************
+ */
+
+int
+Fire_FuelModelDestroy ( FuelCatalogPtr catalog, size_t model )
+   // FuelCatalogPtr catalog;     /* FuelCatalogData instance pointer           */
+   // size_t         model;       /* fuel model id number         [0-maxModels] */
+{
+    size_t particle;
+
+    /* Validate the catalog. */
+    assert(catalog!= NULL && FuelCat_MagicCookie(catalog)==FIRE_CATALOG_MAGIC);
+
+    /* Make sure model id is within range and exists. */
+    if ( ! Fire_FuelModelExists(catalog,model) )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_FuelModelDestroy(): el modelo de combustible %d no existe en el catálogo de combustibles \"%s\".",
+            model, FuelCat_Name(catalog));
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /* Free all the fuel model particles and their pointer array. */
+    if ( Fuel_ParticleArray(catalog,model) )
+    {
+        for (particle=0; particle<Fuel_MaxParticles(catalog,model); particle++)
+        {
+            if ( Fuel_ParticlePtr(catalog,model,particle) )
+            {
+                free(Fuel_ParticlePtr(catalog,model,particle));
+                Fuel_ParticlePtr(catalog,model,particle) = NULL;
+            }
+        }
+        free(Fuel_ParticleArray(catalog,model));
+        Fuel_ParticleArray(catalog,model) = NULL;
+    }
+
+    /* Free the fuel model name and description. */
+    if ( Fuel_Name(catalog,model) )
+    {
+        free(Fuel_Name(catalog,model));
+        Fuel_Name(catalog,model) = NULL;
+    }
+
+    if ( Fuel_Desc(catalog,model) )
+    {
+        free(Fuel_Desc(catalog,model));
+        Fuel_Desc(catalog,model) = NULL;
+    }
+
+    /* Now free the FuelData instance and reset its catalog entry. */
+    free(FuelCat_ModelPtr(catalog,model));
+    FuelCat_ModelPtr(catalog,model) = NULL;
+
+    return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_FuelModelExists()
+ *
+ *  Description
+ *      Performs a sanity check to make sure the catalog pointer is valid
+ *      and the fuel model number is within range and exists.
+ *
+ *  Side Effects
+ *      None.
+ *
+ *  Function Returns
+ *      1 if "model" exists, 0 if it is undefined.
+ *
+ *******************************************************************************
+ */
+
+int
+Fire_FuelModelExists ( FuelCatalogPtr catalog, size_t model )
+   // FuelCatalogPtr catalog;     /* FuelCatalogData instance pointer           */
+   // size_t         model;       /* fuel model id number         [0-maxModels] */
+{
+    /* Validate the model number. */
+    if ( model > FuelCat_MaxModels(catalog)
+      || ! FuelCat_ModelPtr(catalog,model) )
+        return (int) 0;
+
+    return (int) 1;
+}
+
+/*
+ *******************************************************************************
+ *
+ *  Fire_FuelParticleAdd()
+ *
+ *  Description
+ *      Adds a fuel particle to the specified fuel model.
+ *
+ *  Side Effects
+ *      A FuelParticleData is allocated and appended to the model's array.
+ *      The fuel model's particle counter is incremented.
+ *      The fuel model's combustion flag set to 0.
+ *
+ *  Function Returns
+ *      FIRE_STATUS_OK or FIRE_STATUS_ERROR.
+ *      Return status and error text are stored in the Fire Catalog's buffers.
+ *
+ *******************************************************************************
+ */
+
+int
+Fire_FuelParticleAdd ( FuelCatalogPtr catalog, size_t model, size_t type, double load, double savr, double dens, double heat, double stot, double seff )
+   // FuelCatalogPtr catalog;     /* FuelCatalogData instance pointer           */
+   // size_t  model;              /* fuel model id number         [0-maxModels] */
+   // size_t  type;               /* FIRE_TYPE_DEAD, _TYPE_HERB, or _TYPE_WOOD  */
+   // double  load;               /* fuel load                        (lbs/ft2) */
+   // double  savr;               /* surface-area-to-volume ratio     (ft2/ft3) */
+   // double  dens;               /* density                          (lbs/ft3) */
+   // double  heat;               /* heat of combustion               (btus/lb) */
+   // double  stot;               /* total silica content               (lb/lb) */
+   // double  seff;               /* effective silica content           (lb/lb) */
+{
+    static double Size_boundary[FIRE_SIZE_CLASSES] =
+        {1200., 192., 96., 48., 16., 0.};
+    size_t particle, size;
+
+    /* Validate the catalog. */
+    assert(catalog!= NULL && FuelCat_MagicCookie(catalog)==FIRE_CATALOG_MAGIC);
+
+    /* Validate the fuel model. */
+    if ( ! Fire_FuelModelExists(catalog,model) )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_FuelParticleAdd(): el modelo de combustible %d no existe en el catálogo de combustibles \"%s\".",
+            model, FuelCat_Name(catalog));
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /* Validate the "type" parameter. */
+    if ( type != FIRE_TYPE_DEAD
+      && type != FIRE_TYPE_HERB
+      && type != FIRE_TYPE_WOOD )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_FuelParticleAdd(): el modelo de combustible %d de tipo de valor (arg #3) no es FIRE_TYPE_DEAD, FIRE_TYPE_HERB, o FIRE_TYPE_WOOD.",
+            model);
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /* Allocate a new FuelParticle */
+    particle = Fuel_Particles(catalog,model);
+    if ( (Fuel_ParticlePtr(catalog,model,particle) =
+        (PartPtr) calloc(1, sizeof(FuelParticleData))) == NULL )
+    {
+        sprintf(FuelCat_Error(catalog),
+            "Fire_FuelParticleAdd(): imposible asignar la partícula de combustible al modelo de combustible \"%s\" número %d en el catálogo de combustibles \"%s\".",
+            Fuel_Name(catalog,model), model, FuelCat_Name(catalog));
+        return (FuelCat_Status(catalog) = FIRE_STATUS_ERROR);
+    }
+
+    /* Store the input particle attributes. */
+    Fuel_Type(catalog,model,particle)       = type;
+    Fuel_Load(catalog,model,particle)       = load;
+    Fuel_Savr(catalog,model,particle)       = savr;
+    Fuel_Density(catalog,model,particle)    = dens;
+    Fuel_Heat(catalog,model,particle)       = heat;
+    Fuel_SiTotal(catalog,model,particle)    = stot;
+    Fuel_SiEffective(catalog,model,particle)= seff;
+
+    /* Fuel life category. */
+    Fuel_Live(catalog,model,particle) =
+        (type==FIRE_TYPE_DEAD) ? FIRE_LIFE_DEAD : FIRE_LIFE_LIVE;
+
+    /* Fuel particle surface area. */
+    Fuel_SurfaceArea(catalog,model,particle) =
+        (dens > Smidgen) ? load * savr / dens : 0.;
+
+    /* Particle SAVR exponent factor. */
+    Fuel_SigmaFactor(catalog,model,particle) =
+        (savr > Smidgen) ? exp(-138. / savr) : 0.;
+
+    /* Particle size class. */
+    for ( size=0; savr < Size_boundary[size]; size++ )
+        /* NOTHING */ ;
+    Fuel_SizeClass(catalog,model,particle) = size;
+
+    /* Initialize particle attributes that are bed & environ dependent. */
+    Fuel_AreaWtg(catalog,model,particle)     = 0.;
+    Fuel_SizeAreaWtg(catalog,model,particle) = 0.;
+    Fuel_Moisture(catalog,model,particle)    = 0.;
+
+    /* Increment the fuel model's particle counter and reset it flag. */
+    Fuel_Particles(catalog,model)++;
+    Fuel_CombustionFlag(catalog,model) = 0;
+
+    return (FuelCat_Status(catalog) = FIRE_STATUS_OK);
+}
+
+/*
+ *******************************************************************************
+ * End of fireLib.c
+ *******************************************************************************
+ */
diff --git a/src/modules_simulation/fire/sim_fire_spreading/fireLib.h b/src/modules_simulation/fire/sim_fire_spreading/fireLib.h
new file mode 100644
index 0000000..8745843
--- /dev/null
+++ b/src/modules_simulation/fire/sim_fire_spreading/fireLib.h
@@ -0,0 +1,548 @@
+/*
+ *******************************************************************************
+ *
+ *  fireLib.h
+ *
+ *  Description
+ *      Library of BEHAVE (Andrews 1986) fire behavior algorithms
+ *      encapsulated and optimized for fire behavior simulation.
+ *
+ *  Legalities
+ *      Copyright (c) 1996 Collin D. Bevins.
+ *      See the file "license.txt" for information on usage and
+ *      redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ *  Description
+ *      This header file describes the externally-visible facilities of
+ *      the Fire Behavior Library C API.
+ *
+ *      This file really needs to be split into public and private portions.
+ *
+ *  History
+ *      1996/09/04  Version 1.0.0 release.
+ *      1999/03/05  Fixed NNFL07 live SAVR from 1500 to 1550.
+ *
+ *******************************************************************************
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+
+#ifndef _FIRE_LIB
+#define _FIRE_LIB 1
+
+#define FIRELIB_VERSION "1.0"
+#define FIRELIB_MAJOR_VERSION 1
+#define FIRELIB_MINOR_VERSION 0
+#define FIRELIB_PATCH_LEVEL   1
+
+/*
+ *------------------------------------------------------------------------------
+ * Definitions that allow this header file to be used either with or
+ * without ANSI C features like function prototypes.
+ *------------------------------------------------------------------------------
+ */
+
+#undef _ANSI_ARGS_
+#undef CONST
+#if ((defined(__STDC__) || defined(SABER)) && !defined(NO_PROTOTYPE)) || defined(__cplusplus)
+#   define _USING_PROTOTYPES_ 1
+#   define _ANSI_ARGS_(x)       x
+#   define CONST const
+#   ifdef __cplusplus
+#       define VARARGS(first) (first, ...)
+#   else
+#       define VARARGS(first) ()
+#   endif
+#else
+#   define _ANSI_ARGS_(x)       ()
+#   define CONST
+#endif
+
+#ifdef __cplusplus
+#   define EXTERN extern "C"
+#else
+#   define EXTERN extern
+#endif
+
+/*
+ *------------------------------------------------------------------------------
+ * Macro to use instead of "void" for arguments that must have type "void *"
+ * in ANSI C;  maps them to type "char *" in non-ANSI systems.
+ *------------------------------------------------------------------------------
+ */
+
+#ifndef VOID
+#   ifdef __STDC__
+#       define VOID void
+#   else
+#       define VOID char
+#   endif
+#endif
+
+/*
+ *------------------------------------------------------------------------------
+ *  Macro pseudo functions.
+ *------------------------------------------------------------------------------
+ */
+
+#define Smidgen                 (0.000001)
+#define DegreesToRadians(x)     ((x)*0.017453293)
+#define RadiansToDegrees(x)     ((x)*57.29577951)
+#define IsZero(x)               (fabs(x)<Smidgen)
+#define Equal(x,y)              (fabs((x)-(y))<Smidgen)
+
+/*
+ *------------------------------------------------------------------------------
+ * Firelib return status codes.
+ *------------------------------------------------------------------------------
+ */
+
+#define  FIRE_STATUS_OK         (0)
+#define  FIRE_STATUS_ERROR      (-1)
+#define  FIRE_STATUS_EOF        (1)
+
+/*
+ *------------------------------------------------------------------------------
+ *  Fuel moisture and mass weighting classes.
+ *------------------------------------------------------------------------------
+ */
+
+#define  FIRE_LIFE_CATS     (2) /* Number of fuel particle life categories */
+#define  FIRE_LIFE_DEAD     (0)
+#define  FIRE_LIFE_LIVE     (1)
+
+#define  FIRE_SIZE_CLASSES  (6) /* Number of mass weighting classes. */
+
+#define  FIRE_MCLASSES      (6) /* Number of fuel moisture classes. */
+#define  FIRE_MCLASS_1HR    (0)
+#define  FIRE_MCLASS_10HR   (1)
+#define  FIRE_MCLASS_100HR  (2)
+#define  FIRE_MCLASS_1000HR (3)
+#define  FIRE_MCLASS_HERB   (4)
+#define  FIRE_MCLASS_WOOD   (5)
+
+/*
+ *------------------------------------------------------------------------------
+ *  FuelParticleData structure: fuel particle input and intermediate attributes.
+ *------------------------------------------------------------------------------
+ */
+
+typedef struct fuelParticleDataStruct
+{
+    /* INPUT */
+    double load;                /* fuel loading                     (lb/sqft) */
+    double savr;                /* surface area-to-volume ratio        (1/ft) */
+    double dens;                /* particle density                 (lb/cuft) */
+    double heat;                /* heat of combustion                (BTU/lb) */
+    double stot;                /* total silica content        (fraction odw) */
+    double seff;                /* effective silica content    (fraction odw) */
+    /* PARTICLE_DEPENDENT */
+    double area;                /* surface area */
+    double sigma;               /* exp(-138./sigma)                      (dl) */
+    /* MODEL-DEPENDENT */
+    double awtg;                /* surface area derived weighting factor (dl) */
+    double gwtg;                /* size class area weighting factor */
+    /* ENVIRONMENT-DEPENDENT */
+    double mois;                /* particle moisture content       (fraction) */
+    size_t live;                /* life category 0=dead, 1=live               */
+    size_t type;                /* type category 0=dead, 1=herb, 2=live woody */
+    size_t sizeClass;           /* fuel moisture size class                   */
+} FuelParticleData, *FuelParticlePtr, *PartPtr;
+
+#define FIRE_TYPE_DEAD   (1)
+#define FIRE_TYPE_HERB   (2)
+#define FIRE_TYPE_WOOD   (3)
+
+/* FuelParticleData structure access macros. */
+
+#define Fuel_Live(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->live)
+
+#define Fuel_Type(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->type)
+
+#define Fuel_SizeClass(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->sizeClass)
+
+#define Fuel_Load(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->load)
+
+#define Fuel_Savr(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->savr)
+
+#define Fuel_Heat(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->heat)
+
+#define Fuel_Density(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->dens)
+
+#define Fuel_SiTotal(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->stot)
+
+#define Fuel_SiEffective(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->seff)
+
+#define Fuel_SurfaceArea(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->area)
+
+#define Fuel_AreaWtg(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->awtg)
+
+#define Fuel_SizeAreaWtg(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->gwtg)
+
+#define Fuel_SigmaFactor(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->sigma)
+
+#define Fuel_Moisture(catalog,model,particle) \
+                ((catalog)->modelPtr[(model)]->partPtr[(particle)]->mois)
+
+/*
+ *------------------------------------------------------------------------------
+ *  FuelModelData structure: fuel model bed input attributes.
+ *------------------------------------------------------------------------------
+ */
+
+typedef struct fuelModelDataStruct
+{
+    /* Input variables. */
+    size_t modelId;             /* fuel model number                          */
+    size_t combustion;          /* 0 if combustion not yet calculated         */
+    size_t maxParticles;        /* maximum number of FuelParticles            */
+    size_t particles;           /* current number of FuelParticles            */
+    PartPtr *partPtr;           /* array of pointers to Fuel Particles        */
+    char  *name;                /* fuel model short name                      */
+    char  *desc;                /* fuel model description text                */
+    char  *reserved1;           /* used for alignment                         */
+    double depth;               /* fuel bed depth                        (ft) */
+    double mext;                /* dead fuel extinction moisture   (fraction) */
+    double adjust;              /* spread rate adjustment factor         (dl) */
+    /* Combustion intermediates. */
+    double awtg[2];             /* dead & live fuel area weighting factors    */
+    double rxFactor[2];         /* dead and live fuel rx factors              */
+    double fineDead;            /* fine dead fuel ratio                       */
+    double liveFactor;          /* live fuel moisture extinction factor       */
+    double rhob;                /* fuel bed bulk density                      */
+    double taur;                /* residence time                       (min) */
+    double propFlux;            /* propagating flux ratio                     */
+    double slopeK;              /* slope parameter 'k'                        */
+    double windB;               /* wind parameter 'b'                         */
+    double windE;               /* wind parameter (ratio**e/c)                */
+    double windK;               /* wind parameter (c * ratio**-e)             */
+    /* Current environment. */
+    double moisture[FIRE_MCLASSES]; /* array of fuel moistures (fraction odw) */
+    double windFpm;             /* wind speed                        (ft/min) */
+    double windDeg;             /* wind vector         (degrees from upslope) */
+    double slope;               /* slope                         (rise/reach) */
+    double aspect;              /* aspect (downslope) azimuth  (compass degs) */
+    /* Updated by Fire_SpreadNoWindNoSlope() */
+    double rxInt;               /* reaction intensity          (BTU/sqft/min) */
+    double spread0;             /* no-wind, no-slope spread rate     (ft/min) */
+    double hpua;                /* heat per unit area              (BTU/sqft) */
+    /* Updated by Fire_SpreadWindSlopeMax() */
+    double spreadMax;           /* spread in direction of max spread (ft/min) */
+    double azimuthMax;          /* direction of maximum spread      (degrees) */
+    double effWind;             /* effective windspeed                        */
+    double lwRatio;             /* length-to-width ratio for eff windspeed    */
+    double eccentricity;        /* eccentricity of ellipse for eff windspeed  */
+    double phiW;                /* wind factor                                */
+    double phiS;                /* slope factor                               */
+    double phiEw;               /* combined wind-slope factor                 */
+    size_t wLimit;              /* wind limit 0=not reached, 1=reached        */
+    size_t reserved2;           /* used for alignment                         */
+    /* Updated by Fire_SpreadAtAzimuth() */
+    double spreadAny;           /* spread rate at arbitrary azimuth  (ft/min) */
+    double azimuthAny;          /* direction of arbitrary spread    (degrees) */
+    double byrams;              /* fireline intensity              (BTU/ft/s) */
+    double flame;               /* flame length                          (ft) */
+    double scorch;              /* scorch height                         (ft) */
+} FuelModelData, *FuelModelPtr;
+
+/* Fuel model input variable macros. */
+#define Fuel_Model(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->modelId)
+
+#define Fuel_Name(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->name)
+
+#define Fuel_Desc(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->desc)
+
+#define Fuel_Depth(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->depth)
+
+#define Fuel_Mext(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->mext)
+
+#define Fuel_SpreadAdjustment(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->adjust)
+
+#define Fuel_CombustionFlag(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->combustion)
+
+#define Fuel_MaxParticles(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->maxParticles)
+
+#define Fuel_Particles(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->particles)
+
+#define Fuel_ParticleArray(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->partPtr)
+
+#define Fuel_ParticlePtr(catalog,model,particle) \
+                    ((catalog)->modelPtr[(model)]->partPtr[(particle)])
+
+/* Fuel model combustion intermediates macros. */
+#define Fuel_LifeAreaWtg(catalog,model,life) \
+                    ((catalog)->modelPtr[(model)]->awtg[(life)])
+
+#define Fuel_LifeRxFactor(catalog,model,life) \
+                    ((catalog)->modelPtr[(model)]->rxFactor[(life)])
+
+#define Fuel_FineDead(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->fineDead)
+
+#define Fuel_LiveMextFactor(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->liveFactor)
+
+#define Fuel_BulkDensity(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->rhob)
+
+#define Fuel_ResidenceTime(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->taur)
+
+#define Fuel_PropFlux(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->propFlux)
+
+#define Fuel_SlopeK(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->slopeK)
+
+#define Fuel_WindB(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->windB)
+
+#define Fuel_WindE(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->windE)
+
+#define Fuel_WindK(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->windK)
+
+/* Fuel model fire behavior variable macros. */
+#define Fuel_RxIntensity(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->rxInt)
+
+#define Fuel_Spread0(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->spread0)
+
+#define Fuel_HeatPerUnitArea(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->hpua)
+
+#define Fuel_SpreadMax(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->spreadMax)
+
+#define Fuel_AzimuthMax(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->azimuthMax)
+
+#define Fuel_SpreadAny(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->spreadAny)
+
+#define Fuel_AzimuthAny(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->azimuthAny)
+
+#define Fuel_EffectiveWind(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->effWind)
+
+#define Fuel_LwRatio(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->lwRatio)
+
+#define Fuel_Eccentricity(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->eccentricity)
+
+#define Fuel_PhiWind(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->phiW)
+
+#define Fuel_PhiSlope(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->phiS)
+
+#define Fuel_PhiEffWind(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->phiEw)
+
+#define Fuel_WindLimit(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->wLimit)
+
+#define Fuel_ByramsIntensity(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->byrams)
+
+#define Fuel_FlameLength(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->flame)
+
+#define Fuel_ScorchHeight(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->scorch)
+
+/* Fuel model environment variable macros. */
+#define Fuel_EnvMoisture(catalog,model,mclass) \
+                    ((catalog)->modelPtr[(model)]->moisture[(mclass)])
+
+#define Fuel_WindSpeed(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->windFpm)
+
+#define Fuel_WindDir(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->windDeg)
+
+#define Fuel_Slope(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->slope)
+
+#define Fuel_Aspect(catalog,model) \
+                    ((catalog)->modelPtr[(model)]->aspect)
+
+/*
+ *------------------------------------------------------------------------------
+ *  FuelCatData structure; provides a complete fuel catalog.
+ *------------------------------------------------------------------------------
+ */
+
+#define FIRE_CATALOG_MAGIC      (19520904L)
+#define FIRE_ERROR_BUFFER_SIZE  (1024)
+
+typedef struct fuelCatalogStruct
+{
+    long      magicCookie;      /* magic cookie for sanity checking           */
+    int       status;           /* return status of most recent call          */
+    size_t    maxModels;        /* maximum number of models in this catalog   */
+    size_t    flameClasses;     /* size of the flame length array             */
+    char         *name;         /* name for this catalog instance             */
+    char         *error;        /* error message buffer                       */
+    FuelModelPtr *modelPtr;     /* array of ModelPtr[maxModels+1]             */
+    double       *flamePtr;     /* flame length lookup array                  */
+    double        flameStep;    /* size of each flame length table class (ft) */
+} FuelCatalogData, *FuelCatalogPtr;
+
+#define FuelCat_MagicCookie(catalog)    (catalog->magicCookie)
+#define FuelCat_MaxModels(catalog)      (catalog->maxModels)
+#define FuelCat_Status(catalog)         (catalog->status)
+#define FuelCat_FlameClasses(catalog)   (catalog->flameClasses)
+#define FuelCat_FlameStep(catalog)      (catalog->flameStep)
+#define FuelCat_FlameArray(catalog)     (catalog->flamePtr)
+#define FuelCat_Name(catalog)           (catalog->name)
+#define FuelCat_Error(catalog)          (catalog->error)
+#define FuelCat_ModelArray(catalog)     (catalog->modelPtr)
+#define FuelCat_ModelPtr(catalog,model) (catalog->modelPtr[model])
+
+/*
+ *------------------------------------------------------------------------------
+ *  Function prototypes for fire behavior computations.
+ *------------------------------------------------------------------------------
+ */
+
+#define FIRE_NONE       (0)
+#define FIRE_BYRAMS     (1)
+#define FIRE_FLAME      (2)
+#define FIRE_SCORCH     (4)
+
+EXTERN int Fire_FlameScorch _ANSI_ARGS_((
+    FuelCatalogPtr catalog,     /* FuelCatalogData instance pointer           */
+    size_t  model,              /* fuel model number            [0-maxModels] */
+    size_t  doWhich     /* FIRE_NONE | FIRE_BYRAMS | FIRE_FLAME | FIRE_SCORCH */
+    )) ;
+
+EXTERN int Fire_FuelCombustion _ANSI_ARGS_((
+    FuelCatalogPtr catalog,     /* FuelCatalogData instance pointer           */
+    size_t  model               /* fuel model number            [0-maxModels] */
+    )) ;
+
+EXTERN int Fire_SpreadNoWindNoSlope _ANSI_ARGS_((
+    FuelCatalogPtr catalog,     /* FuelCatalogData instance pointer           */
+    size_t  model,              /* fuel model number            [0-maxModels] */
+    double  moisture[FIRE_MCLASSES]  /* array of fuel moistures   (fractions) */
+    )) ;
+
+EXTERN int Fire_SpreadWindSlopeMax _ANSI_ARGS_((
+    FuelCatalogPtr catalog,     /* FuelCatalogData instance pointer           */
+    size_t  model,              /* fuel model number            [0-maxModels] */
+    double  windFpm,            /* wind speed                        (ft/min) */
+    double  windDeg,            /* wind bearing vector         (compass degs) */
+    double  slope,              /* slope                         (rise/reach) */
+    double  aspect              /* aspect (downslope) azimuth  (compass degs) */
+    )) ;
+
+EXTERN int Fire_SpreadAtAzimuth _ANSI_ARGS_((
+    FuelCatalogPtr catalog,     /* FuelCatalogData instance pointer           */
+    size_t  model,              /* fuel model number            [0-maxModels] */
+    double  azimuth,            /* fire spread azimuth     (deg from upslope) */
+    size_t  doWhich     /* FIRE_NONE | FIRE_BYRAMS | FIRE_FLAME | FIRE_SCORCH */
+    )) ;
+
+/*
+ *------------------------------------------------------------------------------
+ *  Function prototypes for creating and destroying fuel catalogs, fuel models,
+ *  fuel particles, and flame length tables.
+ *------------------------------------------------------------------------------
+ */
+
+EXTERN int Fire_FlameLengthTable _ANSI_ARGS_((
+    FuelCatalogPtr catalog,     /* FuelCatalogData instance pointer           */
+    size_t  flameClasses,       /* number of flame length classes             */
+    double  flameStep           /* flame length step value per class          */
+    )) ;
+
+EXTERN FuelCatalogPtr Fire_FuelCatalogCreate _ANSI_ARGS_((
+    char  *name,                /* FuelCatalogData instance name              */
+    size_t maxModels            /* maximum modelId allowed in this catalog    */
+    )) ;
+
+EXTERN FuelCatalogPtr Fire_FuelCatalogCreateStandard _ANSI_ARGS_((
+    char  *name,                /* FuelCatalogData instance name              */
+    size_t maxModels            /* maximum modelId allowed in this catalog    */
+    )) ;
+
+EXTERN int Fire_FuelCatalogDestroy _ANSI_ARGS_((
+    FuelCatalogPtr catalog      /* FuelCatalogData instance pointer           */
+    )) ;
+
+EXTERN int Fire_FuelModelCreate _ANSI_ARGS_((
+    FuelCatalogPtr catalog,     /* FuelCatalogData instance                   */
+    size_t  model,              /* fuel model number            [0-maxModels] */
+    char   *name,               /* short name                                 */
+    char   *desc,               /* longer description                         */
+    double  depth,              /* bed depth                             (ft) */
+    double  mext,               /* moisture of extinction                (dl) */
+    double  adjust,             /* spread adjustment factor              (dl) */
+    size_t  maxParticles        /* maximum number of fuel model particles     */
+    )) ;
+
+EXTERN int Fire_FuelModelDestroy _ANSI_ARGS_((
+    FuelCatalogPtr catalog,     /* FuelCatalogData instance pointer           */
+    size_t         model        /* fuel model id number         [0-maxModels] */
+    )) ;
+
+EXTERN int Fire_FuelModelExists _ANSI_ARGS_((
+    FuelCatalogPtr catalog,     /* FuelCatalogData instance pointer           */
+    size_t         model        /* fuel model id number         [0-maxModels] */
+    )) ;
+
+EXTERN int Fire_FuelParticleAdd _ANSI_ARGS_((
+    FuelCatalogPtr catalog,     /* FuelCatalogData instance pointer           */
+    size_t  model,              /* fuel model id number         [0-maxModels] */
+    size_t  type,               /* FIRE_TYPE_DEAD, _TYPE_HERB, or _TYPE_WOOD  */
+    double  load,               /* fuel load                        (lbs/ft2) */
+    double  savr,               /* surface-area-to-volume ratio     (ft2/ft3) */
+    double  dens,               /* density                          (lbs/ft3) */
+    double  heat,               /* heat of combustion               (btus/lb) */
+    double  stot,               /* total silica content               (lb/lb) */
+    double  seff                /* effective silica content           (lb/lb) */
+    )) ;
+
+#ifdef NEED_STRDUP
+char *strdup ( const char *str ) ;
+#endif
+
+#endif
+
+/*
+ *******************************************************************************
+ * End of fireLib.h
+ *******************************************************************************
+ */
diff --git a/src/modules_simulation/hydrology/Makefile.in b/src/modules_simulation/hydrology/Makefile.in
index b15d90e..9dc53e9 100644
--- a/src/modules_simulation/hydrology/Makefile.in
+++ b/src/modules_simulation/hydrology/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_simulation/hydrology
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_simulation/hydrology/sim_hydrology/Makefile.in b/src/modules_simulation/hydrology/sim_hydrology/Makefile.in
index 773ba74..2d845f8 100644
--- a/src/modules_simulation/hydrology/sim_hydrology/Makefile.in
+++ b/src/modules_simulation/hydrology/sim_hydrology/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_simulation/hydrology/sim_hydrology
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -106,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_terrain_analysis/Makefile.in b/src/modules_terrain_analysis/Makefile.in
index e841c00..fe347b4 100644
--- a/src/modules_terrain_analysis/Makefile.in
+++ b/src/modules_terrain_analysis/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_terrain_analysis
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_terrain_analysis/terrain_analysis/Makefile.am b/src/modules_terrain_analysis/terrain_analysis/Makefile.am
index a6bf604..061fb8b 100644
--- a/src/modules_terrain_analysis/terrain_analysis/Makefile.am
+++ b/src/modules_terrain_analysis/terrain_analysis/Makefile.am
@@ -1 +1 @@
-SUBDIRS = ta_profiles ta_preprocessor ta_morphometry ta_lighting ta_hydrology ta_channels ta_compound
+SUBDIRS = ta_profiles ta_preprocessor ta_morphometry ta_lighting ta_hydrology ta_channels
diff --git a/src/modules_terrain_analysis/terrain_analysis/Makefile.in b/src/modules_terrain_analysis/terrain_analysis/Makefile.in
index d809829..174f669 100644
--- a/src/modules_terrain_analysis/terrain_analysis/Makefile.in
+++ b/src/modules_terrain_analysis/terrain_analysis/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/modules_terrain_analysis/terrain_analysis
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -203,7 +228,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = ta_profiles ta_preprocessor ta_morphometry ta_lighting ta_hydrology ta_channels ta_compound
+SUBDIRS = ta_profiles ta_preprocessor ta_morphometry ta_lighting ta_hydrology ta_channels
 all: all-recursive
 
 .SUFFIXES:
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_channels/Makefile.in b/src/modules_terrain_analysis/terrain_analysis/ta_channels/Makefile.in
index 43887d4..242d247 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_channels/Makefile.in
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_channels/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_terrain_analysis/terrain_analysis/ta_channels
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -107,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -156,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -207,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.cpp
deleted file mode 100644
index 4e61342..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     ta_compound                       //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                   MLB_Interface.cpp                   //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//			The Module Link Library Interface			 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "MLB_Interface.h"
-
-
-//---------------------------------------------------------
-const SG_Char * Get_Info(int i)
-{
-	switch( i )
-	{
-	case MLB_INFO_Name:	default:
-		return( _TL("Terrain Analysis - Compound Analyses" ));
-
-	case MLB_INFO_Author:
-		return( SG_T("Olaf Conrad, Goettingen (c) 2005") );
-
-	case MLB_INFO_Description:
-		return( _TL("Terrain Analysis: Compound Analyses.\nThis library depends on the following SAGA module libraries:\n- ta_channels\n- ta_flow\n- ta_indices\n- ta_lighting\n- ta_morphometry\n- ta_preproc\n") );
-
-	case MLB_INFO_Version:
-		return( SG_T("1.0") );
-
-	case MLB_INFO_Menu_Path:
-		return( _TL("Terrain Analysis") );
-	}
-}
-
-
-//---------------------------------------------------------
-#include "TA_Standard.h"
-
-
-//---------------------------------------------------------
-CSG_Module *		Create_Module(int i)
-{
-	CSG_Module	*pModule;
-
-	switch( i )
-	{
-	case 0:
-		pModule	= new CTA_Standard;
-		break;
-
-	default:
-		pModule	= NULL;
-		break;
-	}
-
-	return( pModule );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-//{{AFX_SAGA
-
-	MLB_INTERFACE
-
-//}}AFX_SAGA
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.h b/src/modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.h
deleted file mode 100644
index f91531a..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_compound/MLB_Interface.h
+++ /dev/null
@@ -1,75 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     ta_compound                       //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    MLB_Interface.h                    //
-//                                                       //
-//                 Copyright (C) 2003 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//				Include the SAGA-API here				 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__ta_compound_H
-#define HEADER_INCLUDED__ta_compound_H
-
-//---------------------------------------------------------
-#include <saga_api/saga_api.h>
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__ta_compound_H
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.am b/src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.am
deleted file mode 100644
index 69dd137..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.am
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# $Id: Makefile.am,v 1.6 2010/07/08 14:11:50 johanvdw Exp $
-#
-ADD_MLBS = ../ta_channels/libta_channels.la ../ta_hydrology/libta_hydrology.la ../ta_lighting/libta_lighting.la ../ta_morphometry/libta_morphometry.la ../ta_preprocessor/libta_preprocessor.la
-if DEBUG
-DBGFLAGS = -g -DDEBUG
-endif
-if SAGA_UNICODE
-UC_DEFS = -D_SAGA_UNICODE
-endif
-DEF_SAGA           = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
-CXX_INCS           = -I$(top_srcdir)/src/saga_core
-AM_CXXFLAGS        = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS)
-AM_LDFLAGS         = -fPIC -shared -avoid-version 
-pkglib_LTLIBRARIES = libta_compound.la
-libta_compound_la_SOURCES =\
-MLB_Interface.cpp\
-TA_Standard.cpp\
-MLB_Interface.h\
-TA_Standard.h
-
-libta_compound_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la $(ADD_MLBS)
-
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.in b/src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.in
deleted file mode 100644
index 8ab816e..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile.in
+++ /dev/null
@@ -1,546 +0,0 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = src/modules_terrain_analysis/terrain_analysis/ta_compound
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(pkglibdir)"
-LTLIBRARIES = $(pkglib_LTLIBRARIES)
-libta_compound_la_DEPENDENCIES =  \
-	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la \
-	$(ADD_MLBS)
-am_libta_compound_la_OBJECTS = MLB_Interface.lo TA_Standard.lo
-libta_compound_la_OBJECTS = $(am_libta_compound_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libta_compound_la_SOURCES)
-DIST_SOURCES = $(libta_compound_la_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISABLELIBHARU = @DISABLELIBHARU@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HARU_LIB = @HARU_LIB@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-
-#
-# $Id: Makefile.am,v 1.6 2010/07/08 14:11:50 johanvdw Exp $
-#
-ADD_MLBS = ../ta_channels/libta_channels.la ../ta_hydrology/libta_hydrology.la ../ta_lighting/libta_lighting.la ../ta_morphometry/libta_morphometry.la ../ta_preprocessor/libta_preprocessor.la
- at DEBUG_TRUE@DBGFLAGS = -g -DDEBUG
- at SAGA_UNICODE_TRUE@UC_DEFS = -D_SAGA_UNICODE
-DEF_SAGA = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD
-CXX_INCS = -I$(top_srcdir)/src/saga_core
-AM_CXXFLAGS = -fPIC $(CXX_INCS) $(DEF_SAGA) $(UC_DEFS)
-AM_LDFLAGS = -fPIC -shared -avoid-version 
-pkglib_LTLIBRARIES = libta_compound.la
-libta_compound_la_SOURCES = \
-MLB_Interface.cpp\
-TA_Standard.cpp\
-MLB_Interface.h\
-TA_Standard.h
-
-libta_compound_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la $(ADD_MLBS)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .cpp .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/modules_terrain_analysis/terrain_analysis/ta_compound/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
-	@$(NORMAL_INSTALL)
-	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
-	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
-	list2=; for p in $$list; do \
-	  if test -f $$p; then \
-	    list2="$$list2 $$p"; \
-	  else :; fi; \
-	done; \
-	test -z "$$list2" || { \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
-	}
-
-uninstall-pkglibLTLIBRARIES:
-	@$(NORMAL_UNINSTALL)
-	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
-	done
-
-clean-pkglibLTLIBRARIES:
-	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
-	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-	  test "$$dir" != "$$p" || dir=.; \
-	  echo "rm -f \"$${dir}/so_locations\""; \
-	  rm -f "$${dir}/so_locations"; \
-	done
-libta_compound.la: $(libta_compound_la_OBJECTS) $(libta_compound_la_DEPENDENCIES) 
-	$(CXXLINK) -rpath $(pkglibdir) $(libta_compound_la_OBJECTS) $(libta_compound_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TA_Standard.Plo at am__quote@
-
-.cpp.o:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
- at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-	for dir in "$(DESTDIR)$(pkglibdir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am: install-pkglibLTLIBRARIES
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-pkglibLTLIBRARIES
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-pkglibLTLIBRARIES \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
-
-
-# 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.
-.NOEXPORT:
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.cpp
deleted file mode 100644
index 1429c7c..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.cpp
+++ /dev/null
@@ -1,414 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     ta_compound                       //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    TA_Standard.cpp                    //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "TA_Standard.h"
-
-#include "./../ta_preprocessor/Pit_Eliminator.h"
-#include "./../ta_lighting/HillShade.h"
-#include "./../ta_morphometry/Morphometry.h"
-#include "./../ta_morphometry/Convergence.h"
-#include "./../ta_morphometry/Curvature_Classification.h"
-#include "./../ta_hydrology/Flow_Parallel.h"
-#include "./../ta_hydrology/TopographicIndices.h"
-#include "./../ta_channels/ChannelNetwork.h"
-#include "./../ta_channels/ChannelNetwork_Altitude.h"
-#include "./../ta_channels/Watersheds.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CTA_Standard::CTA_Standard(void)
-{
-	CSG_Parameter	*pNode;
-
-	//-----------------------------------------------------
-	Set_Name(_TL("Standard Terrain Analysis"));
-
-	Set_Author		(SG_T("(c) 2005 by O.Conrad"));
-
-	Set_Description(
-		_TL("Standard Terrain Analysis")
-	);
-
-	//-----------------------------------------------------
-	Parameters.Add_Grid(
-		NULL	, "ELEVATION"	, _TL("Elevation"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "SHADE"		, _TL("Analytical Hillshading"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	pNode	= Parameters.Add_Node(
-		NULL	, "SHADE_NODE"	, _TL("Analytical Hillshading"),
-		_TL("")
-	);
-
-	Parameters.Add_Value(
-		pNode	, "SHADE_AZIM"	, _TL("Azimuth []"),
-		_TL(""),
-		PARAMETER_TYPE_Double	, 315
-	);
-
-	Parameters.Add_Value(
-		pNode	, "SHADE_DECL"	, _TL("Declination []"),
-		_TL(""),
-		PARAMETER_TYPE_Double	, 45
-	);
-
-	Parameters.Add_Value(
-		pNode	, "SHADE_EXAG"	, _TL("Exaggeration"),
-		_TL(""),
-		PARAMETER_TYPE_Double	, 4
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "SLOPE"		, _TL("Slope"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "ASPECT"		, _TL("Aspect"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "CURV"		, _TL("Curvature"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "HCURV"		, _TL("Plan Curvature"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "VCURV"		, _TL("Profile Curvature"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "CONVERGENCE"	, _TL("Convergence Index"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "CURVCLASS"	, _TL("Curvature Classification"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "CAREA"		, _TL("Catchment Area"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "WETNESS"		, _TL("Wetness Index"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "STREAMPOW"	, _TL("Stream Power"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "LSFACTOR"	, _TL("LS-Factor"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "CHNL_GRID"	, _TL("Channel Network"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Shapes(
-		NULL	, "CHNL_SHAPES"	, _TL("Channel Network"),
-		_TL(""),
-		PARAMETER_OUTPUT		, SHAPE_TYPE_Line
-	);
-
-	pNode	= Parameters.Add_Node(
-		NULL	, "CHNL_NODE"	, _TL("Channel Network"),
-		_TL("")
-	);
-
-	Parameters.Add_Value(
-		pNode	, "CHNL_INIT"	, _TL("Network Density [%]"),
-		_TL(""),
-		PARAMETER_TYPE_Double	, 5.0, 0.0, true, 100.0, true
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "CHNL_ALTI"	, _TL("Altitude above Channel Network"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "CHNL_BASE"	, _TL("Channel Network Base Level"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "BASINS"		, _TL("Watershed Subbasins"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-}
-
-//---------------------------------------------------------
-CTA_Standard::~CTA_Standard(void)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CTA_Standard::On_Execute(void)
-{
-	//-----------------------------------------------------
-	Process_Set_Text(_TL("Pre-Processing"));
-
-	CPit_Eliminator	Pit_Eliminator;
-
-	if(	!Pit_Eliminator.Get_Parameters()->Set_Parameter(SG_T("DEM")		, Parameters("ELEVATION"))
-
-	||	!Pit_Eliminator.Execute() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	Process_Set_Text(_TL("Analytical Hillshading"));
-
-	CHillShade	HillShade;
-
-	if(	!HillShade.Get_Parameters()->Set_Parameter(SG_T("ELEVATION")	, Parameters("ELEVATION"))
-	||	!HillShade.Get_Parameters()->Set_Parameter(SG_T("SHADE")		, Parameters("SHADE"))
-	||	!HillShade.Get_Parameters()->Set_Parameter(SG_T("AZIMUTH")		, Parameters("SHADE_AZIM"))
-	||	!HillShade.Get_Parameters()->Set_Parameter(SG_T("DECLINATION")	, Parameters("SHADE_DECL"))
-	||	!HillShade.Get_Parameters()->Set_Parameter(SG_T("EXAGGERATION")	, Parameters("SHADE_EXAG"))
-
-	||	!HillShade.Execute() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	Process_Set_Text(_TL("Basic Morphometry"));
-
-	CMorphometry	Morphometry;
-
-	if(	!Morphometry.Get_Parameters()->Set_Parameter(SG_T("ELEVATION")	, Parameters("ELEVATION"))
-	||	!Morphometry.Get_Parameters()->Set_Parameter(SG_T("SLOPE")		, Parameters("SLOPE"))
-	||	!Morphometry.Get_Parameters()->Set_Parameter(SG_T("ASPECT")		, Parameters("ASPECT"))
-	||	!Morphometry.Get_Parameters()->Set_Parameter(SG_T("CURV")		, Parameters("CURV"))
-	||	!Morphometry.Get_Parameters()->Set_Parameter(SG_T("HCURV")		, Parameters("HCURV"))
-	||	!Morphometry.Get_Parameters()->Set_Parameter(SG_T("VCURV")		, Parameters("VCURV"))
-
-	||	!Morphometry.Execute() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	Process_Set_Text(_TL("Convergence Index"));
-
-	CConvergence	Convergence;
-
-	if(	!Convergence.Get_Parameters()->Set_Parameter(SG_T("ELEVATION")	, Parameters("ELEVATION"))
-	||	!Convergence.Get_Parameters()->Set_Parameter(SG_T("RESULT")		, Parameters("CONVERGENCE"))
-
-	||	!Convergence.Execute() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	Process_Set_Text(_TL("Curvature Classification"));
-
-	CCurvature_Classification	Curvature_Classification;
-
-	if(	!Curvature_Classification.Get_Parameters()->Set_Parameter(SG_T("CPLAN")	, Parameters("HCURV"))
-	||	!Curvature_Classification.Get_Parameters()->Set_Parameter(SG_T("CPROF")	, Parameters("VCURV"))
-	||	!Curvature_Classification.Get_Parameters()->Set_Parameter(SG_T("CLASS")	, Parameters("CURVCLASS"))
-
-	||	!Curvature_Classification.Execute() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	Process_Set_Text(_TL("Flow Accumulation"));
-
-	CFlow_Parallel	Flow_Parallel;
-
-	if(	!Flow_Parallel.Get_Parameters()->Set_Parameter(SG_T("ELEVATION")	, Parameters("ELEVATION"))
-	||	!Flow_Parallel.Get_Parameters()->Set_Parameter(SG_T("CAREA")		, Parameters("CAREA"))
-
-	||	!Flow_Parallel.Execute() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	Process_Set_Text(_TL("Topographic Indices"));
-
-	CTopographicIndices	TopographicIndices;
-
-	if(	!TopographicIndices.Get_Parameters()->Set_Parameter(SG_T("SLOPE")		, Parameters("SLOPE"))
-	||	!TopographicIndices.Get_Parameters()->Set_Parameter(SG_T("AREA")		, Parameters("CAREA"))
-	||	!TopographicIndices.Get_Parameters()->Set_Parameter(SG_T("WETNESS")		, Parameters("WETNESS"))
-	||	!TopographicIndices.Get_Parameters()->Set_Parameter(SG_T("STREAMPOW")	, Parameters("STREAMPOW"))
-	||	!TopographicIndices.Get_Parameters()->Set_Parameter(SG_T("LSFACTOR")	, Parameters("LSFACTOR"))
-
-	||	!TopographicIndices.Execute() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	Process_Set_Text(_TL("Channel Network"));
-
-	double	d	= Parameters("CAREA")->asGrid()->Get_Percentile(Parameters("CHNL_INIT")->asDouble());
-	CSG_Grid	Grid(Parameters("ELEVATION")->asGrid(), SG_DATATYPE_Byte);
-
-	CChannelNetwork	ChannelNetwork;
-
-	if(	!ChannelNetwork.Get_Parameters()->Set_Parameter(SG_T("ELEVATION")	, Parameters("ELEVATION"))
-	||	!ChannelNetwork.Get_Parameters()->Set_Parameter(SG_T("CHNLNTWRK")	, Parameters("CHNL_GRID"))
-	||	!ChannelNetwork.Get_Parameters()->Set_Parameter(SG_T("CHNLROUTE")	, PARAMETER_TYPE_Grid, &Grid)
-	||	!ChannelNetwork.Get_Parameters()->Set_Parameter(SG_T("SHAPES")		, Parameters("CHNL_SHAPES"))
-	||	!ChannelNetwork.Get_Parameters()->Set_Parameter(SG_T("INIT_GRID")	, Parameters("CAREA"))
-	||	!ChannelNetwork.Get_Parameters()->Set_Parameter(SG_T("INIT_VALUE")	, PARAMETER_TYPE_Double, d)
-
-	||	!ChannelNetwork.Execute() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	Process_Set_Text(_TL("Watershed Basins"));
-
-	CWatersheds	Watersheds;
-
-	if(	!Watersheds.Get_Parameters()->Set_Parameter(SG_T("ELEVATION")	, Parameters("ELEVATION"))
-	||	!Watersheds.Get_Parameters()->Set_Parameter(SG_T("CHANNELS")	, Parameters("CHNL_GRID"))
-	||	!Watersheds.Get_Parameters()->Set_Parameter(SG_T("BASINS")		, Parameters("BASINS"))
-
-	||	!Watersheds.Execute() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	Process_Set_Text(_TL("Vertical Distance to Channel Network"));
-
-	CChannelNetwork_Altitude	ChannelNetwork_Altitude;
-
-	if(	!ChannelNetwork_Altitude.Get_Parameters()->Set_Parameter(SG_T("ELEVATION")	, Parameters("ELEVATION"))
-	||	!ChannelNetwork_Altitude.Get_Parameters()->Set_Parameter(SG_T("CHANNELS")	, Parameters("CHNL_GRID"))
-	||	!ChannelNetwork_Altitude.Get_Parameters()->Set_Parameter(SG_T("ALTITUDE")	, Parameters("CHNL_ALTI"))
-	||	!ChannelNetwork_Altitude.Get_Parameters()->Set_Parameter(SG_T("BASELEVEL")	, Parameters("CHNL_BASE"))
-
-	||	!ChannelNetwork_Altitude.Execute() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.h b/src/modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.h
deleted file mode 100644
index 55c0b90..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_compound/TA_Standard.h
+++ /dev/null
@@ -1,103 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     ta_compound                       //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     TA_Standard.h                     //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__TA_Standard_H
-#define HEADER_INCLUDED__TA_Standard_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "MLB_Interface.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CTA_Standard : public CSG_Module_Grid
-{
-public:
-	CTA_Standard(void);
-	virtual ~CTA_Standard(void);
-
-
-protected:
-
-	virtual bool			On_Execute		(void);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__TA_Standard_H
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.cpp
index fa6ca80..6dc5520 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.cpp
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.cpp
@@ -74,9 +74,9 @@ CFlow::CFlow(void)
 	bPoint			= false;
 
 	//-----------------------------------------------------
-	Set_Description	(_TW(
-		"(c) 2001 by Olaf Conrad, Goettingen.\nemail: oconrad at gwdg.de")
-	);
+	Set_Description (_TW(
+		""
+	));
 
 
 	//-----------------------------------------------------
@@ -100,6 +100,18 @@ CFlow::CFlow(void)
 		PARAMETER_INPUT_OPTIONAL
 	);
 
+	Parameters.Add_Grid(
+		NULL	, "MATERIAL"	, _TL("Material"),
+		_TL(""),
+		PARAMETER_INPUT_OPTIONAL
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "TARGET"		, _TL("Target"),
+		_TL(""),
+		PARAMETER_INPUT_OPTIONAL
+	);	
+
 
 	//-----------------------------------------------------
 	// Output...
@@ -122,7 +134,24 @@ CFlow::CFlow(void)
 		PARAMETER_OUTPUT_OPTIONAL
 	);
 
+	Parameters.Add_Grid(
+		NULL	, "ACCU_TOT"	, _TL("Total accumulated Material"),
+		_TL(""),
+		PARAMETER_OUTPUT_OPTIONAL
+	);	
+
+	Parameters.Add_Grid(
+		NULL	, "ACCU_LEFT"	, _TL("Accumulated Material from _left_ side"),
+		_TL(""),
+		PARAMETER_OUTPUT_OPTIONAL
+	);		
 
+	Parameters.Add_Grid(
+		NULL	, "ACCU_RIGHT"	, _TL("Accumulated Material from _right_ side"),
+		_TL(""),
+		PARAMETER_OUTPUT_OPTIONAL
+	);		
+	
 	//-----------------------------------------------------
 	// Options...
 
@@ -163,14 +192,18 @@ bool CFlow::On_Execute(void)
 	pDTM			= Parameters("ELEVATION")	->asGrid();
 	pRoute			= Parameters("SINKROUTE")	->asGrid();
 	pWeight			= Parameters("WEIGHT")		->asGrid();
+	pMaterial		= Parameters("MATERIAL")	->asGrid();
+	pTarget			= Parameters("TARGET")		->asGrid();
 
 	pCatch			= Parameters("CAREA")		->asGrid();
 	DataObject_Set_Colors(pCatch, 100, SG_COLORS_WHITE_BLUE);
-
 	pCatch_Height	= NULL;
 	pCatch_Slope	= NULL;
 	pCatch_Aspect	= NULL;
 	pFlowPath		= NULL;
+	pAccu_Tot		= NULL;
+	pAccu_Left		= NULL;
+	pAccu_Right		= NULL;
 
 	Step			= Parameters("STEP")		->asInt();
 
@@ -204,6 +237,21 @@ bool CFlow::On_Execute(void)
 		pFlowPath		->Assign(0.0);
 	}
 
+	if( pAccu_Tot )
+	{
+		pAccu_Tot		->Assign(1.0);
+	}	
+
+	if( pAccu_Left )
+	{
+		pAccu_Left		->Assign(1.0);
+	}	
+
+	if( pAccu_Right )
+	{
+		pAccu_Right		->Assign(1.0);
+	}	
+	
 	//-------------------------------------------------
 	if( bPoint )
 	{
@@ -228,7 +276,11 @@ bool CFlow::On_Execute(void)
 	{
 		pCatch_Height	= Parameters("CHEIGHT")	->asGrid();
 		pCatch_Slope	= Parameters("CSLOPE")	->asGrid();
-
+		
+		pAccu_Tot		= Parameters("ACCU_TOT")	->asGrid();
+		pAccu_Left		= Parameters("ACCU_LEFT")	->asGrid();
+		pAccu_Right		= Parameters("ACCU_RIGHT")	->asGrid();
+		
 		Calculate();
 
 		On_Finalize();
@@ -251,9 +303,10 @@ bool CFlow::On_Execute(void)
 //---------------------------------------------------------
 void CFlow::Init_Cell(int x, int y)
 {
-	double	Weight, Slope, Aspect;
+	double	Weight, Material, Slope, Aspect;
 
 	Weight	= pWeight ? pWeight->asDouble(x, y) : 1.0;
+	Material = pMaterial ? pMaterial->asDouble(x, y) : 1.0;
 
 	if( pCatch )
 	{
@@ -279,6 +332,22 @@ void CFlow::Init_Cell(int x, int y)
 		pCatch_Aspect	->Add_Value(x, y, Weight * sin(Aspect));
 		pCatch_AspectY	->Add_Value(x, y, Weight * cos(Aspect));
 	}
+	
+	if( pAccu_Tot )
+	{
+		pAccu_Tot		->Set_Value(x, y, Weight * Material);
+	}	
+
+	if( pAccu_Left )
+	{
+		pAccu_Left		->Set_Value(x, y, Weight * Material);
+	}	
+
+	if( pAccu_Right )
+	{
+		pAccu_Right		->Set_Value(x, y, Weight * Material);
+	}	
+	
 }
 
 
@@ -293,6 +362,7 @@ void CFlow::Finalize(void)
 {
 	long	n;
 	double	z, CellSize, Catch, Contour, dContour, G, H;
+	double  Weight, Mat;
 
 	//-----------------------------------------------------
 	CellSize	= Get_Cellsize() * Get_Cellsize();
@@ -328,6 +398,21 @@ void CFlow::Finalize(void)
 			{
 				pFlowPath		->Set_NoData(n);
 			}
+			
+			if( pAccu_Tot )
+			{
+				pAccu_Tot		->Set_NoData(n);
+			}
+			
+			if( pAccu_Left )
+			{
+				pAccu_Left		->Set_NoData(n);
+			}
+			
+			if( pAccu_Right )
+			{
+				pAccu_Right		->Set_NoData(n);
+			}
 		}
 		else
 		{
@@ -335,6 +420,8 @@ void CFlow::Finalize(void)
 
 			//---------------------------------------------
 			Catch	= 1.0 / pCatch->asDouble(n);
+			Mat		= pMaterial ? pMaterial->asDouble(n) : 1.0;
+			Weight	= pWeight ? pWeight->asDouble(n) : 1.0;
 
 			if( pCatch_Height )
 			{
@@ -367,6 +454,30 @@ void CFlow::Finalize(void)
 
 				pCatch_Aspect	->Set_Value(n, G ? fmod(M_PI_270 + atan2(H, G), M_PI_360) : (H > 0 ? M_PI_270 : (H < 0 ? M_PI_090 : -1)));
 			}
+			
+			if( pAccu_Left && pTarget)
+			{
+				if ( pTarget->is_NoData(n) )
+					{	
+						pAccu_Left		->Set_NoData(n);
+					}
+					else
+					{
+						pAccu_Left -> Add_Value(n, - 0.5 * Weight * Mat);
+					}
+			}
+			
+			if( pAccu_Right && pTarget)
+			{
+				if ( pTarget->is_NoData(n) )
+				{	
+					pAccu_Right		->Set_NoData(n);
+				}
+				else
+				{
+					pAccu_Right -> Add_Value(n, - 0.5 * Weight * Mat);
+				}
+			}			
 		}
 	}
 
@@ -392,6 +503,272 @@ void CFlow::Get_Gradient(int x, int y, double &Slope, double &Aspect)
 }
 
 //---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//		            SIDE-Algorithm                       //
+//					                                     //
+//              Copyright (c) 2010 by					 //
+//														 //
+//                  Thomas J. Grabs                      //
+//					                                     //
+//                                                       //
+//  website:       www.thomasgrabs.com                   //
+//					                                     //
+//            Updates and compiled versions of           //
+//           this algorithm can be found on the          //
+//                    author's website                   //
+//					                                     //
+//  Purpose:				                             //
+//	========				                             //
+//  Determine the side of a flow line relative to the    //
+//  (stream) flow direction in an adjacent grid cell     //
+//					                                     //
+//-------------------------------------------------------//
+//           !!!    PLEASE CITE    !!!                   //
+// the associated scientific article when redistributing //
+// and/or using and/or modifying this source code or     //
+// parts of it:                                          // 
+//                                                       //
+// "Calculating terrain indices along streams - a new    //
+//  method for separating stream sides,                  //
+//  Grabs, T. J. et al., published in Water Resources    //
+//  Research (WRR), please search the complete reference //
+// on the internet or on "http://www.agu.org/journals/wr"//
+//-------------------------------------------------------//
+//                                                       //
+// This source code is part of 'SAGA - System for        //
+// Automated Geoscientific Analyses'. You can            //
+// redistribute this source code and/or modify  it under //
+// the terms  of the GNU General Public License as       //
+// published by the Free Software Foundation; version 2  //
+// of the License.                                       //
+//                                                       //
+// The source code 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//														 //
+///////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+//														 //
+// List of variables:                                    //
+//														 //
+// x,y         : Coordinates of the grid cell containing //
+//			     the flow line.							 //
+// Direction   : Direction of the flow line				 //
+// left        : TRUE/FALSE depending on the location of //
+//			     the flow line.							 //
+// right       : TRUE/FALSE depending on the location of //
+//			     the flow line.							 //
+// FL_Dir      :  Direction of the flow line             //
+// stream1_Dir :  Streamflow direction                   //
+// stream2_Dir :  Streamflow direction (upstream)        //
+// stream1_X   :  X-coord. of stream grid cell           //
+// stream1_Y   :  Y-coord. of stream grid cell           //
+// stream2_X   :  X-coord. of (upstr.) stream grid cell  //
+// stream2_X   :  Y-coord. of (upstr.) stream grid cell  //
+// FL_Vec      :  Direction of flow line (as vector)     //
+// stream1_Vec :  Streamflow direction (as vector)       //
+// stream2_Vec :  Streamflow direction (as vector, upstr)//
+// SP          : Scalar product of 2 vectors             //
+// CP_A        : Cross product "A" of 2 vectors          //
+// CP_B        : Cross product "B" of 2 vectors          //
+// CP_C        : Cross product "C" of 2 vectors          //
+// Zcp_a       : Z component of the cross product "A"    //
+// Zcp_b       : Z component of the cross product "B"    //
+// Zcp_c       : Z component of the cross product "C"    //
+// a-z         : auxiliary variables                     //
+// NTributaries: Number of tributaries to a junction     //
+// prev_right  : auxiliary variable (true/false)         //
+// prev_left   : auxiliary variable (true/false)         //
+// is_upstream : auxiliary variable (true/false)         //
+//-------------------------------------------------------//
+//														 //
+// Conventions                                  		 //
+//-------------------------------------------------------//
+// left==true & right==false: Flow line is on the left   //
+// left==false & right==true: Flow line is on the right  //
+// left==true & right==true: The side of the flow line is//
+//                          not determined (channel head)//
+//                           or lies between             //
+//                           tributaries to a junction   //
+///////////////////////////////////////////////////////////
+
+void CFlow::Find_Sides(int x, int y, int Direction, bool &left, bool &right)
+{
+	int			FL_Dir, stream1_Dir, stream2_Dir;
+	int			stream1_X, stream1_Y;
+	int			stream2_X, stream2_Y;
+	CSG_Vector	FL_Vec(3), stream1_Vec(3), stream2_Vec(3);
+	CSG_Vector  CP_A(3), CP_B(3), CP_C(3); 
+	double		SP;
+	double		Zcp_a, Zcp_b, Zcp_c;
+
+	// Initialize the stream side variables to their default. 
+	// Default: The side of the flow line is not determined.
+	left = right = true;
+				
+    // Determine the coordinates and stream direction the adjacent
+	// grid cell, to which the flow line points.
+	FL_Dir		        = Direction;
+	stream1_X			= Get_xTo( FL_Dir, x );
+	stream1_Y			= Get_yTo( FL_Dir, y );
+	stream1_Dir			= pTarget->asInt(stream1_X, stream1_Y);
+
+	/*--Note: At this point it is already assumed that FL_Dir points to 
+	    a grid cell that belongs to the stream network. Thus, stream1_X,
+		stream1_Y and stream1_Dir have all non-missing values. If the code
+		is to be used elsewhere, one should verify that FL_Dir points to
+		a grid cell that belongs to the stream network.--*/
+	
+	// Write the direction of the flow line as vector:
+	FL_Vec[0]	= Get_xTo( FL_Dir );
+	FL_Vec[1]	= Get_yTo( FL_Dir );
+	FL_Vec[2]	= 0.0; //z-component is normally 0
+	
+	// Write the streamflow directon as vector:
+	stream1_Vec[0]		= Get_xTo( stream1_Dir );
+	stream1_Vec[1]		= Get_yTo( stream1_Dir );
+	stream1_Vec[2]		= 0.0;//z-component is normally 0
+
+	// Initialize the upstream streamflow direction vector
+	// and set all components to zero 
+	stream2_Vec[0]		= 0.0;
+	stream2_Vec[1]		= 0.0;
+	stream2_Vec[2]		= 0.0;
+	
+	// Calculate the scalar product
+	SP					= FL_Vec[0] * stream1_Vec[0] + FL_Vec[1] * stream1_Vec[1];
+	
+	// Adjust the scalar product by dividing it by the lengths of FL_Vec and stream1_Vec
+	SP = SP /sqrt( FL_Vec[0]*FL_Vec[0] + FL_Vec[1]*FL_Vec[1])
+			/sqrt(stream1_Vec[0]*stream1_Vec[0] + stream1_Vec[1]*stream1_Vec[1]);
+
+
+	if( fabs(SP - (-1)) < 0.00001)
+	{
+		// SP is (approximately) equal to -1! 
+		// The flow line is hence oriented opposite to the streamflow direction.
+		// Further calculations are skipped: The side of the flow line remains the default.
+		// This can occur if an endpoint of the streamflow direction map does *not*
+		// point to a missing value. In other words, the stream outlet lies 'inside' the 
+		// DEM and not right on the border of the DEM.
+		// Since this can be intentional, a user notification is only optional.
+
+		/*-- (optional) Notification of the user  --*/
+	}
+	else
+	{
+		/*--  Core of the SIDE-Algorithm  --*/
+
+		int		NTributaries;
+		bool	prev_right, prev_left;
+		bool	is_upstream;
+		
+		// Initialize the number of tributaries and other auxiliary variables
+		NTributaries = 0; //default: channel head
+		prev_right = prev_left = true;
+		is_upstream= false;
+					
+		// The full vector-cross-product of the streamflow direction and the flow line direction
+		// CP_A				= FL_Vec * stream1_Vec;
+		// is not calculated because it is more efficient to calculate only the z-component 
+		// of the cross-product:
+		
+		Zcp_a	= FL_Vec[0]*stream1_Vec[1] - FL_Vec[1]*stream1_Vec[0];
+
+		// Look for upstream tributaries / stream grid cells
+		for(int i=0; i<8; i++)
+		{
+			// find adjacent grid cell coordinates
+			stream2_X =  Get_xTo(i, stream1_X);
+			stream2_Y =  Get_yTo(i, stream1_Y);
+			
+			// Make sure it is within the map domain
+			if( is_InGrid(stream2_X, stream2_Y)	)
+			{
+				// Make sure it is not a missing-value
+				if ( ! pTarget->is_NoData( stream2_X, stream2_Y ) )
+				{
+					// Is the stream cell an upstream tributary?
+					stream2_Dir = pTarget->asInt(stream2_X, stream2_Y);
+					is_upstream = stream1_X == Get_xTo(stream2_Dir, stream2_X) && 
+									stream1_Y == Get_yTo(stream2_Dir, stream2_Y);
+								
+					if( is_upstream )
+					{
+						// The stream cell is an upstream tributary!
+						NTributaries++;
+						
+						// Convert the upstream streamflow direction to a vector
+						stream2_Vec[0]	= Get_xTo( stream2_Dir );
+						stream2_Vec[1]	= Get_yTo( stream2_Dir );
+						stream2_Vec[2]	= 0.0;
+						
+						//Calculate only z-component of the vector-cross-product
+						Zcp_b			= FL_Vec[0]*stream2_Vec[1] - FL_Vec[1]*stream2_Vec[0];
+						
+						//store the previous position of the flow line
+						prev_right		= right;
+						prev_left		= left;
+
+						// Test if Z components have the same sign
+						// Note that posing the condition "( Zcp_a * Zcp_b >= 0 && Zcp_b != 0)"
+						// and evaluating the sign of *only* Zcp_b
+						// is *equivalent* but presumably a tiny bit more efficient
+						// than  testing "( Zcp_a * Zcp_b > 0)"
+						// and evaluating the sign of Zcp_a *or* Zcp_b
+						// If you prefer to follow exactly the description in the WRR-article, simply
+						// replace "( Zcp_a * Zcp_b >= 0 && Zcp_b != 0)" by "(Zcp_a * Zcp_b > 0)"
+						// and it'll still work.
+						if ( Zcp_a * Zcp_b >= 0 && Zcp_b != 0)
+						{
+							//Case1: Zcp_a and Zcp_b have the same sign, thus the position of the flow  
+							//line is the same for both stream grid cells
+							//Case2: Zcp_a is zero but Zcp_b is not zero, the position of the flow line
+							//can simply be determined from the sign of Zcp_b
+							right = (Zcp_b < 0);
+							left  = !right;
+						}
+						else
+						{
+							//Since Zcp_a and Zcp_b have opposite signs (or Zcp_b is zero), the flow line
+							//is located at a sharp bend. 
+
+							//Calculate only z-component of the vector-cross-product
+							Zcp_c	= stream1_Vec[0]*stream2_Vec[1] - stream1_Vec[1]*stream2_Vec[0];
+							
+
+							right = (Zcp_c < 0);
+							left  = !right;
+						}													
+						if ( NTributaries > 1 && (right != prev_right) )
+						{
+							//It is a junction (NTributaries > 1) and the flow line lies between
+							//two tributaries
+							left = right = true;
+							//Set i to 9 in order to exit the loop (there is no use in checking
+							//for more potential tributaries since the flow line will always lie 
+							//between two tributaries
+							i = 9;
+						}
+					}
+				}
+			}		
+		}
+	}	
+}
+
+
+//---------------------------------------------------------
 void CFlow::Add_Fraction(int x, int y, int Direction, double Fraction)
 {
 	int		ix, iy;
@@ -400,7 +777,7 @@ void CFlow::Add_Fraction(int x, int y, int Direction, double Fraction)
 	{
 		ix	= Get_xTo(Direction, x);
 		iy	= Get_yTo(Direction, y);
-
+		
 		if( is_InGrid(ix, iy) )
 		{
 			if( pCatch )
@@ -428,15 +805,52 @@ void CFlow::Add_Fraction(int x, int y, int Direction, double Fraction)
 				pCatch_Aspect	->Add_Value(ix, iy, Fraction * pCatch_Aspect	->asDouble(x, y));
 				pCatch_AspectY	->Add_Value(ix, iy, Fraction * pCatch_AspectY	->asDouble(x, y));
 			}
+			
+			if( !pTarget )
+			{
+				if( pAccu_Tot ) pAccu_Tot -> Add_Value(ix, iy, Fraction * pAccu_Tot ->asDouble(x, y));
+				if( pAccu_Left ) pAccu_Left -> Add_Value(ix, iy, Fraction * pAccu_Left ->asDouble(x, y));
+				if( pAccu_Right ) pAccu_Right -> Add_Value(ix, iy, Fraction * pAccu_Right ->asDouble(x, y));				
+			}
+			
+			if( pTarget ) if( pTarget->is_NoData(ix, iy) && pTarget->is_NoData(x, y) )
+			{
+				if( pAccu_Tot ) pAccu_Tot -> Add_Value(ix, iy, Fraction * pAccu_Tot ->asDouble(x, y));
+				if( pAccu_Left ) pAccu_Left -> Add_Value(ix, iy, Fraction * pAccu_Left ->asDouble(x, y));
+				if( pAccu_Right ) pAccu_Right -> Add_Value(ix, iy, Fraction * pAccu_Right ->asDouble(x, y));				
+			}
+			
+
+			if( pTarget ) if( !pTarget->is_NoData(ix, iy) && pTarget->is_NoData(x, y))
+			{
+				
+				bool left, right;
+
+				Find_Sides(x, y, Direction, left, right);
+			
+				if( pAccu_Tot ) pAccu_Tot -> Add_Value(ix, iy, Fraction * pAccu_Tot ->asDouble(x, y));
+				
+				if( right && !left && pAccu_Right ) pAccu_Right -> Add_Value(ix, iy, Fraction * pAccu_Right ->asDouble(x, y));
+				
+				if( left && !right && pAccu_Left ) pAccu_Left -> Add_Value(ix, iy, Fraction * pAccu_Left ->asDouble(x, y));
+				
+				if( left && right )
+				{
+					if( pAccu_Right ) pAccu_Right -> Add_Value(ix, iy, 0.5 * Fraction * pAccu_Right ->asDouble(x, y));
+
+					if( pAccu_Left ) pAccu_Left -> Add_Value(ix, iy, 0.5 * Fraction * pAccu_Left ->asDouble(x, y));			
+				}				
+			}
 		}
 	}
 }
 
 //---------------------------------------------------------
-void CFlow::Add_Portion(int x, int y, int ix, int iy)
+void CFlow::Add_Portion(int x, int y, int ix, int iy, int Direction)
 {
 	if( is_InGrid(x, y) && is_InGrid(ix, iy) )
 	{
+		
 		if( pCatch )
 		{
 			pCatch			->Add_Value(ix, iy, pCatch			->asDouble(x, y));
@@ -462,5 +876,33 @@ void CFlow::Add_Portion(int x, int y, int ix, int iy)
 			pCatch_Aspect	->Add_Value(ix, iy, pCatch_Aspect	->asDouble(x, y));
 			pCatch_AspectY	->Add_Value(ix, iy, pCatch_AspectY	->asDouble(x, y));
 		}
+		
+		if( pTarget ) if( pTarget->is_NoData(ix, iy) && pTarget->is_NoData(x, y) )
+		{
+			if( pAccu_Tot ) pAccu_Tot -> Add_Value(ix, iy, pAccu_Tot ->asDouble(x, y));
+			if( pAccu_Left ) pAccu_Left -> Add_Value(ix, iy, pAccu_Left ->asDouble(x, y));
+			if( pAccu_Right ) pAccu_Right -> Add_Value(ix, iy, pAccu_Right ->asDouble(x, y));				
+		}
+		if( pTarget ) if( !pTarget->is_NoData(ix, iy) && pTarget->is_NoData(x, y))
+			{
+				
+				bool left, right;
+
+				Find_Sides(x, y, Direction, left, right);
+					
+				if( pAccu_Tot )pAccu_Tot -> Add_Value(ix, iy, pAccu_Tot->asDouble(x, y));
+				
+				if( right && !left && pAccu_Right ) pAccu_Right -> Add_Value(ix, iy, pAccu_Right->asDouble(x, y));
+				
+				if( left && !right && pAccu_Left ) pAccu_Left -> Add_Value(ix, iy, pAccu_Left->asDouble(x, y));
+				
+				if( left && right )
+				{
+					if( pAccu_Right ) pAccu_Right -> Add_Value(ix, iy, 0.5 * pAccu_Right->asDouble(x, y));
+					if( pAccu_Left ) pAccu_Left -> Add_Value(ix, iy, 0.5 * pAccu_Left->asDouble(x, y));			
+				}
+				
+			}		
+		
 	}
 }
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.h b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.h
index f302c1c..4306c10 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.h
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow.h
@@ -123,7 +123,12 @@ protected:
 							*pCatch_Height,
 							*pCatch_Aspect,
 							*pFlowPath,
-							*pCatch_AspectY;
+							*pCatch_AspectY,
+							*pMaterial,
+							*pTarget,
+							*pAccu_Tot,
+							*pAccu_Left,
+							*pAccu_Right;
 
 
 	virtual bool			On_Execute(void);
@@ -139,12 +144,13 @@ protected:
 	void					Get_Gradient	(int x, int y, double &Slope, double &Aspect);
 
 	void					Add_Fraction	(int x, int y, int Direction, double Fraction = 1);
-	void					Add_Portion		(int x, int y, int ix, int iy);
+	void					Add_Portion		(int x, int y, int ix, int iy, int Direction);
+	void					Find_Sides		(int x, int y, int Direction, bool &left, bool &right);
 
 
 private:
 
-	bool					bPoint;
+	bool					bPoint, delete_pMaterial;
 
 	int						xPoint, yPoint;
 
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.cpp
index 944a917..0b5830d 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.cpp
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.cpp
@@ -72,7 +72,7 @@ CFlow_Parallel::CFlow_Parallel(void)
 {
 	Set_Name		(_TL("Parallel Processing"));
 
-	Set_Author		(SG_T("(c) 2001 by O.Conrad"));
+	Set_Author		(SG_T("O.Conrad (c) 2001-2010, T.Grabs portions (c) 2010"));
 
 	Set_Description	(_TW(
 		"Parallel processing of cells for calculation of flow accumulation and related parameters. "
@@ -115,7 +115,7 @@ CFlow_Parallel::CFlow_Parallel(void)
 		"    'A new triangular multiple flow direction algorithm for computing upslope areas from gridded digital elevation models',\n"
 		"    Water Ressources Research, Vol. 43, W04501\n"
 		"    C++ Implementation into SAGA by Thomas Grabs, Copyrights (c) 2007\n"
-		"    Contact: thomas.grabs at natgeo.su.se, jan.seibert at natgeo.su.se \n\n"
+		"    Contact: thomas.grabs at natgeo.su.se, jan.seibert at natgeo.su.se \n"
 	));
 
 
@@ -148,7 +148,7 @@ CFlow_Parallel::CFlow_Parallel(void)
 			_TL("Deterministic Infinity"),
 			_TL("Multiple Flow Direction"),
 			_TL("Multiple Triangular Flow Directon")
-		), 4
+		), 5
 	);
 
 
@@ -167,10 +167,24 @@ CFlow_Parallel::CFlow_Parallel(void)
 		PARAMETER_TYPE_Double	,	500
 	);
 
+	Parameters.Add_Grid(
+		NULL	, "LINEARTHRS_GRID"		, _TL("Linear Flow Threshold Grid"),
+		_TL("(optional) Linear Flow Threshold Grid"),
+		PARAMETER_INPUT_OPTIONAL
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "CHDIR_GRID"			, _TL("Channel Direction"),
+		_TW(	"(optional) Channel Direction Grid. Must contain direction values. "
+				"For all non-missing grid cells all flow will be routed to the prescribed direction."
+		),
+		PARAMETER_INPUT_OPTIONAL
+	);
+	
 	Parameters.Add_Value(
 		NULL	, "CONVERGENCE"	, _TL("Convergence"),
-		_TL("Convergence factor for Multiple Flow Direction Algorithm after Freeman (1991) and Multiple Triangular Flow Directon Algorithm after Seibert/Glynn (2007)."),
-		PARAMETER_TYPE_Double	, 1.1, 0.0, true
+		_TL("Convergence factor for Multiple Flow Direction Algorithm (Freeman 1991).\nApplies also to the Multiple Triangular Flow Directon Algorithm."),
+		PARAMETER_TYPE_Double	, 1.0, 0.0, true
 	);
 }
 
@@ -195,6 +209,10 @@ void CFlow_Parallel::On_Initialize(void)
 					? Parameters("LINEARTHRS")->asDouble() // (pDTM->Get_NX() * pDTM->Get_NY())
 					: -1.0;
 
+	pTH_LinearFlow  = Parameters("LINEARTHRS_GRID")		->asGrid();
+
+	pD8_Direction   = Parameters("CHDIR_GRID")		    ->asGrid();
+
 	MFD_Converge	= Parameters("CONVERGENCE")->asDouble();
 }
 
@@ -208,9 +226,11 @@ void CFlow_Parallel::On_Initialize(void)
 //---------------------------------------------------------
 bool CFlow_Parallel::Calculate(void)
 {
-	for(int y=0; y<Get_NY() && Set_Progress(y); y+=Step)
+	int		x, y;
+
+	for(y=0; y<Get_NY() && Set_Progress(y); y+=Step)
 	{
-		for(int x=0; x<Get_NX(); x+=Step)
+		for(x=0; x<Get_NX(); x+=Step)
 		{
 			Init_Cell(x, y);
 		}
@@ -239,14 +259,20 @@ bool CFlow_Parallel::Set_Flow(void)
 {
 	int		n, x, y;
 
+
+	double  THRS = 0.0;
+	
+	int		DIR  = -1;
+	
 	//-----------------------------------------------------
 	if( !pDTM->Get_Sorted(0, x, y, true, false) )
 	{
 		return( false );
 	}
 
+
 	//-----------------------------------------------------
-	int	Method	= Parameters("Method")->asInt();
+	int Method	= Parameters("Method")->asInt();
 
 	if( Method == 2 )
 	{
@@ -256,20 +282,69 @@ bool CFlow_Parallel::Set_Flow(void)
 	//-----------------------------------------------------
 	for(n=0; n<Get_NCells() && Set_Progress_NCells(n); n++)
 	{
-		if( pDTM->Get_Sorted(n, x, y, true, false) )
-		{	//if( !(n%(4*Get_NX())) )DataObject_Update(pFlow);
-			if( TH_LinearFlow > 0.0 && pCatch->asDouble(x, y) >= TH_LinearFlow )
+		pDTM->Get_Sorted(n,x,y);
+
+		//if( !(n%(4*Get_NX())) )DataObject_Update(pFlow);
+
+		if( pTH_LinearFlow && TH_LinearFlow > 0.0)
+		{
+			if( pTH_LinearFlow->is_NoData(x, y) )
 			{
-				Set_D8(x, y);
+				THRS = 0.0;
 			}
-			else switch( Method )
+			else
 			{
-			case 0:		Set_D8		(x, y);		break;
-			case 1:		Set_Rho8	(x, y);		break;
-			case 3:		Set_DInf	(x, y);		break;
-			case 4:		Set_MFD		(x, y);		break;
-			case 5:		Set_MDInf	(x, y);		break;				
-			case 2:		Set_BRM		(x, y);		break;
+				THRS = pTH_LinearFlow->asDouble(x, y);
+			}
+		}
+		else
+		{
+			THRS = pCatch->asDouble(x, y);
+		}
+
+		if( pD8_Direction )
+		{
+			if( pD8_Direction->is_NoData(x, y) )
+			{
+				DIR = -1;
+			}
+			else
+			{
+				DIR = pD8_Direction->asInt(x, y);
+			}
+		}
+
+		if( TH_LinearFlow > 0.0 && THRS >= TH_LinearFlow || DIR > 0)
+		{
+			Set_D8(x, y, DIR);
+		}
+		else
+		{
+			switch( Method )
+			{
+			case 0:
+				Set_D8(x, y);
+				break;
+
+			case 1:
+				Set_Rho8(x, y);
+				break;
+
+			case 3:
+				Set_DInf(x, y);
+				break;
+
+			case 4:
+				Set_MFD(x, y);
+				break;
+
+			case 5:
+				Set_MDInf(x, y);
+				break;				
+
+			case 2:
+				Set_BRM(x, y);
+				break;
 			}
 		}
 	}
@@ -279,13 +354,11 @@ bool CFlow_Parallel::Set_Flow(void)
 	{
 		for(n=0; n<Get_NCells() && Set_Progress_NCells(n); n++)
 		{
-			if( pDTM->Get_Sorted(n, x, y, false) )
-			{
-				Check_Route(x, y);
-			}
+			pDTM->Get_Sorted(n, x, y, false);
+
+			Check_Route(x, y);
 		}
 	}
-
 	//-----------------------------------------------------
 	return( true );
 }
@@ -323,7 +396,7 @@ void CFlow_Parallel::Check_Route(int x, int y)
 			//---------------------------------------------
 			while( is_InGrid(ix, iy) )
 			{
-				Add_Portion(x, y, ix, iy);
+				Add_Portion(x, y, ix, iy, i);
 
 				i	= pRoute->asChar(ix, iy);
 
@@ -359,11 +432,18 @@ void CFlow_Parallel::Check_Route(int x, int y)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-void CFlow_Parallel::Set_D8(		int x, int y )
+void CFlow_Parallel::Set_D8(		int x, int y, int dir)
 {
 	int		Direction;
 
-	Direction	= pDTM->Get_Gradient_NeighborDir(x, y);
+	if( dir > 0.0)
+	{
+		Direction	= dir;
+	}
+	else
+	{
+		Direction = pDTM->Get_Gradient_NeighborDir(x, y);
+	}
 
 	if( Direction >= 0 )
 	{
@@ -491,73 +571,9 @@ void CFlow_Parallel::Set_DInf(	int x, int y )
 	}
 }
 
-
-///////////////////////////////////////////////////////////
-//														 //
-//				Multiple Flow Direction					 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CFlow_Parallel::Set_MFD(	int x, int y )
-{
-	int		i, ix, iy;
-
-	double	z, d, dzSum, dz[8];
-
-	z		= pDTM->asDouble(x, y);
-	dzSum	= 0.0;
-
-	for(i=0; i<8; i++)
-	{
-		ix		= Get_xTo(i, x);
-		iy		= Get_yTo(i, y);
-
-		if( pDTM->is_InGrid(ix, iy) )
-		{
-			d		= z - pDTM->asDouble(ix, iy);
-		}
-		else
-		{
-			ix		= Get_xTo(i + 4, x);
-			iy		= Get_yTo(i + 4, y);
-
-			if( pDTM->is_InGrid(ix, iy) )
-			{
-				d		= pDTM->asDouble(ix, iy) - z;
-			}
-			else
-			{
-				d		= 0.0;
-			}
-		}
-
-		if( d > 0.0 )
-		{
-			dzSum	+= (dz[i]	= pow(d / Get_Length(i), MFD_Converge));
-		}
-		else
-		{
-			dz[i]	= 0.0;
-		}
-	}
-
-	if( dzSum )
-	{
-		for(i=0; i<8; i++)
-		{
-			if( dz[i] )
-			{
-				Add_Fraction(x, y, i, dz[i] / dzSum );
-			}
-		}
-	}
-}
-
-
 ///////////////////////////////////////////////////////////
 //														 //
-//			Multiple Triangular Flow Directon			 //
+//				Multiple Triangular Flow Directon		 //
 //														 //
 ///////////////////////////////////////////////////////////
 
@@ -565,6 +581,7 @@ void CFlow_Parallel::Set_MFD(	int x, int y )
 void CFlow_Parallel::Set_MDInf(	int x, int y )
 {
 	int		i, ii, ix, iy;
+
 	double	z, dzSum, dz[8];
 	double	hs, hr, s_facet[8], r_facet[8];
 	double	valley[8], portion[8];
@@ -581,43 +598,57 @@ void CFlow_Parallel::Set_MDInf(	int x, int y )
 		ix		= Get_xTo(i, x);
 		iy		= Get_yTo(i, y);
 		
-//	???
-//		if( x == 6 && y == 7 )
-//		{
-//			int k = 1;
-//		}
-//	???
+		Dir_inGrid[i] = true;
+		if( x == 6 && y == 7 )
+		{
+			int k = 1;
+		}
 
 		s_facet[i] = r_facet[i] = -999.0;
 
 		if( pDTM->is_InGrid(ix, iy) )
 		{
-			dz[i]			= z - pDTM->asDouble(ix, iy);
-			Dir_inGrid[i]	= true;
+			dz[i]		= z - pDTM->asDouble(ix, iy);
 		}
 		else
 		{
-			dz[i]			= 0.0;
-			Dir_inGrid[i]	= false;
+			dz[i]		= 0.0;
+			Dir_inGrid[i] = false;
 		}
 	}
-
 	for(i=0; i<8; i++)
 	{
 		hr = hs = -999.0;
-
+		
 		if( Dir_inGrid[i] )
 		{
-			ii = (i < 7) ? i+1 : 0;
-
+			ii = ( i < 7)? i+1 : 0;
+			
 			if( Dir_inGrid[ii] )
 			{
-				nx = ( dz[ii] * Get_yTo( i  ) - dz[i ] * Get_yTo( ii )) * cellsize;
-				ny = ( dz[i ] * Get_xTo( ii ) - dz[ii] * Get_xTo( i  )) * cellsize;
-
+				// vb-code:  nx = (z1 * yd(ii) - z2 * yd(i)) * gridsize
+				nx = ( dz[ii] * Get_yTo( i ) - dz[i] * Get_yTo( ii )) * cellsize;
+				//vb-code:  ny = (z1 * xd(ii) - z2 * xd(i)) * gridsize
+/*ERROR?*/		ny = ( dz[i] * Get_xTo( ii ) - dz[ii] * Get_xTo( i ) ) * cellsize;
+				//vb-code:  nz = (xd(ii) * yd(i) - xd(i) * yd(ii)) * gridsize ^ 2
 				nz = ( Get_xTo( i ) * Get_yTo( ii ) - Get_xTo( ii ) * Get_yTo( i )) * cellarea;
-
+				
 				n_norm = sqrt( nx*nx + ny*ny +nz*nz );
+				/*
+				if( nx == 0.0 )
+				{
+					hr = (ny >= 0.0)? 0.0 : M_PI;
+				} 
+				else if( nx > 0.0 )
+				{
+					hr = M_PI_090 - atan(ny / nx);
+
+				} 
+				else
+				{
+					hr = M_PI_270 - atan(ny / nx);
+				}
+				*/
 
 				if( nx == 0.0 )
 				{
@@ -631,9 +662,11 @@ void CFlow_Parallel::Set_MDInf(	int x, int y )
 				{
 					hr = M_PI_090 - atan(ny / nx);
 				}
-
+				//vb-code:  hs = -Tan(arccos(nz / betrag_n))
 				hs = -tan( acos( nz/n_norm ) );
-
+				
+				// vb-code: If hr <= (i - 1) * PI / 4 Or hr >= i * PI / 4 Then
+				//SHOULD IT BE LIKE THIS: (( hr <= i * M_PI_045 || hr >= ii * M_PI_045 )  OR AS BELOW???
 				if( hr < i * M_PI_045 || hr > (i+1) * M_PI_045 )
 				{
 					if( dz[i] > dz[ii] )
@@ -684,7 +717,6 @@ void CFlow_Parallel::Set_MDInf(	int x, int y )
 			else
 			{
 				ii = (i > 0)? i-1 : 7;
-
 				if( s_facet[ii] == -999.0 && r_facet[i] == i * M_PI_045 )
 				{
 					valley[i] = s_facet[i];
@@ -696,8 +728,10 @@ void CFlow_Parallel::Set_MDInf(	int x, int y )
 		} 
 		
 		portion[i] = 0.0;
+
 	}
 
+
 	if( dzSum )
 	{
 		for(i=0; i<8; i++)
@@ -709,26 +743,85 @@ void CFlow_Parallel::Set_MDInf(	int x, int y )
 			else
 			{
 				ii = 0;
-
-				if( r_facet[i] == 0.0)
-				{
-					r_facet[i] = M_PI_360;
-				}
+				if( r_facet[i] == 0.0) r_facet[i] = M_PI_360;
 			}
-
 			if( valley[i] )
 			{
 				valley[i] /= dzSum;
-
+				//vb-code: portion(i) = portion(i) + valley(i) * (i * PI / 4 - r_facet(i)) / (PI / 4)
 				portion[i] += valley[i] * ((i+1) * M_PI_045 - r_facet[i]) / M_PI_045;
-
+				//vb-code: portion(ii) = portion(ii) + valley(i) * (r_facet(i) - (i - 1) * PI / 4) / (PI / 4)
 				portion[ii] += valley[i] * (r_facet[i] - i * M_PI_045) / M_PI_045;
 			}
 		}
+		for(i=0; i<8; i++)
+		{
+			Add_Fraction(x, y, i, portion[i] );
+		}
+	}
+}
+
 
+///////////////////////////////////////////////////////////
+//														 //
+//				Multiple Flow Direction					 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CFlow_Parallel::Set_MFD(	int x, int y )
+{
+	int		i, ix, iy;
+
+	double	z, d, dzSum, dz[8];
+
+	z		= pDTM->asDouble(x, y);
+	dzSum	= 0.0;
+
+	for(i=0; i<8; i++)
+	{
+		ix		= Get_xTo(i, x);
+		iy		= Get_yTo(i, y);
+
+		if( pDTM->is_InGrid(ix, iy) )
+		{
+			d		= z - pDTM->asDouble(ix, iy);
+		}
+		else
+		{
+			ix		= Get_xTo(i + 4, x);
+			iy		= Get_yTo(i + 4, y);
+
+			if( pDTM->is_InGrid(ix, iy) )
+			{
+				d		= pDTM->asDouble(ix, iy) - z;
+			}
+			else
+			{
+				d		= 0.0;
+			}
+		}
+
+		if( d > 0.0 )
+		{
+			//previously: dzSum	+= (dz[i]	= pow(d / Get_Length(i), MFD_Converge));
+			dz[i]	= pow(d / Get_Length(i), MFD_Converge);
+			dzSum	+= dz[i];
+		}
+		else
+		{
+			dz[i]	= 0.0;
+		}
+	}
+
+	if( dzSum )
+	{
 		for(i=0; i<8; i++)
 		{
-			Add_Fraction(x, y, i, portion[i]);
+			if( dz[i] )
+			{
+				Add_Fraction(x, y, i, dz[i] / dzSum );
+			}
 		}
 	}
 }
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.h b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.h
index fde9a80..e559d9d 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.h
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Flow_Parallel.h
@@ -100,16 +100,18 @@ private:
 
 	double					TH_LinearFlow, BRM_sinus[361], BRM_cosin[361];
 
+	CSG_Grid				*pTH_LinearFlow,
+							*pD8_Direction;
 
 	bool					Set_Flow		(void);
 	void					Check_Route		(int x, int y);
 
-	void					Set_D8			(int x, int y);
-	void					Set_Rho8		(int x, int y);
-	void					Set_DInf		(int x, int y);
-	void					Set_MFD			(int x, int y);
-	void					Set_MDInf		(int x, int y);
-	void					Set_BRM			(int x, int y);
+	void					Set_D8			(int x, int y, int dir = -1 );
+	void					Set_Rho8		(int x, int y );
+	void					Set_MDInf		(int x, int y );	
+	void					Set_DInf		(int x, int y );
+	void					Set_MFD			(int x, int y );
+	void					Set_BRM			(int x, int y );
 
 	void					BRM_Init		(void);
 	int						BRM_InitRZ		(int x, int y, int ix[3], int iy[3]);
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFlood.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFlood.cpp
index efb7e0d..0d5a056 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFlood.cpp
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFlood.cpp
@@ -1,195 +1,221 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     ta_hydrology                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     LakeFlood.cpp                     //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//                    Volker Wichmann                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     reklovw at web.de                         //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "LakeFlood.h"
-
-///////////////////////////////////////////////////////////
-//														 //
-//				Construction/Destruction				 //
-//														 //
-///////////////////////////////////////////////////////////
-
-CLakeFlood::CLakeFlood(void)
-{
-	// Parameter Settings for input dialog of the module
-
-	Parameters.Set_Name(_TL("Lake Flood"));
-	Set_Author(_TL("Copyrights (c) 2005 by Volker Wichmann"));
-	Parameters.Set_Description(_TW(
-		"This module can be used to simulate the extent and volume of a lake for a specified water depth in a seed cell.\r\n"
-	));
-
-
-	Parameters.Add_Grid(	
-		NULL, "ELEV", _TL("DEM"), 
-		_TL("digital elevation model [m]"),
-		PARAMETER_INPUT
-	);
-	Parameters.Add_Grid(	
-		NULL, "INDEPTH", _TL("Water Depth"),
-		_TL("seed cell coded with local water depth [m], all other cells NoData"),
-		PARAMETER_INPUT
-	);
-	Parameters.Add_Grid(	
-		NULL, "OUTDEPTH", _TL("Lake"), 
-		_TL("extent of lake, coded with water depth [m]"),
-		PARAMETER_OUTPUT
-	);
-
-}
-
-//---------------------------------------------------------
-CLakeFlood::~CLakeFlood(void)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-
-bool CLakeFlood::On_Execute(void)		
-{
-	CSG_Grid	*pElev, *pIdepth, *pOdepth;
-	CTraceOrder	*newCell, *firstCell, *iterCell, *lastCell;
-	int			x, y, ix, iy, i;
-	double		wzSeed, z, d;
-
-	pElev		= Parameters("ELEV")->asGrid();
-	pIdepth		= Parameters("INDEPTH")->asGrid();
-	pOdepth		= Parameters("OUTDEPTH")->asGrid();
-
-
-	// Initialize Grids
-	pOdepth->Assign(0.0);
-
-	
-	// Get seed cell and water depth
-	for(y=0; y<Get_NY(); y++)									
-	{
-		for(x=0; x<Get_NX(); x++)
-		{
-			if( !pIdepth->is_NoData(x, y) )
-			{
-				if( !pElev->is_NoData(x, y) )
-				{
-					newCell = new CTraceOrder();
-					newCell->x = x;
-					newCell->y = y;
-					firstCell = newCell;
-					wzSeed = pIdepth->asDouble(x, y);
-					pOdepth->Set_Value(x, y, wzSeed);
-					wzSeed +=  pElev->asDouble(x, y);
-					// terminate search
-				}
-				else
-					firstCell = NULL;
-			}
-		}
-	}
-
-	// main
-	//-----------------------------------------------------
-	iterCell = firstCell;
-	lastCell = firstCell;
-
-	while( iterCell != NULL ) 
-	{
-		x	= iterCell->x;
-		y	= iterCell->y;
-
-		z		= pElev->asDouble(x, y);
-
-		for(i=0; i<8; i++)												
-		{
-			ix	= Get_xTo(i, x);			
-			iy	= Get_yTo(i, y);			
-						
-			if(	is_InGrid(ix, iy) && !pElev->is_NoData(ix, iy) && pOdepth->asDouble(ix, iy) == 0.0 )
-			{ 
-				d	= pElev->asDouble(ix, iy);
-				if( d < wzSeed )
-				{
-					pOdepth->Set_Value(ix, iy, (wzSeed - d));
-					newCell = new CTraceOrder();
-					newCell->x = ix;
-					newCell->y = iy;
-					newCell->prev = lastCell;
-					lastCell->next = newCell;
-					lastCell = newCell;
-				}
-			}
-		}
-	
-		newCell = firstCell;
-
-		if( newCell->next == NULL )
-		{
-			firstCell = NULL;
-			delete (newCell);
-		}
-		else
-		{
-			newCell->next->prev = NULL;
-			firstCell = newCell->next;
-			newCell->next = NULL;
-			delete (newCell);
-		}
-
-		iterCell = firstCell;
-	}
-
-	//-----------------------------------------------------
-
-	return( true );
-}
-
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     ta_hydrology                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     LakeFlood.cpp                     //
+//                                                       //
+//                 Copyright (C) 2005 by                 //
+//                    Volker Wichmann                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     reklovw at web.de                         //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "LakeFlood.h"
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Construction/Destruction				 //
+//														 //
+///////////////////////////////////////////////////////////
+
+CLakeFlood::CLakeFlood(void)
+{
+
+	Set_Name		(_TL("Lake Flood"));
+	Set_Author		(_TL("Volker Wichmann (c) 2005-2010"));
+	Set_Description	(_TW("This module can be used to flood a digital elevation model from seed points. "
+						"Seed points have to be coded either with local water depth or absolute water level.\r\n"
+	));
+
+
+	Parameters.Add_Grid(	
+		NULL, "ELEV", _TL("DEM"), 
+		_TL("digital elevation model"),
+		PARAMETER_INPUT
+	);
+	Parameters.Add_Grid(	
+		NULL, "SEEDS", _TL("Seeds"),
+		_TL("seed cells coded with local water depth or absolute water level, all other cells NoData"),
+		PARAMETER_INPUT
+	);
+	Parameters.Add_Value(
+		NULL, "LEVEL", _TL("Absolute Water Levels"),
+		_TL("check this in case seed cells are coded with absolute water level"),
+		PARAMETER_TYPE_Bool, false
+	);
+	Parameters.Add_Grid(	
+		NULL, "OUTDEPTH", _TL("Lake"), 
+		_TL("extent of lake, coded with water depth"),
+		PARAMETER_OUTPUT
+	);
+	Parameters.Add_Grid(	
+		NULL, "OUTLEVEL", _TL("Surface"), 
+		_TL("Flooded digital elevation model"),
+		PARAMETER_OUTPUT
+	);
+
+}
+
+//---------------------------------------------------------
+CLakeFlood::~CLakeFlood(void)
+{}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CLakeFlood::On_Execute(void)		
+{
+	CSG_Grid	*pElev, *pSeeds, *pOdepth, *pOlevel;
+	CTraceOrder	*newCell, *firstCell, *iterCell, *lastCell;
+	int			x, y, ix, iy, i;
+	bool		bLevel;
+	SEED		thisSeed;
+	std::list<SEED>				seeds;
+	std::list<SEED>::iterator	it;
+
+
+	//---------------------------------------------------------
+	pElev		= Parameters("ELEV")->asGrid();
+	pSeeds		= Parameters("SEEDS")->asGrid();
+	bLevel		= Parameters("LEVEL")->asBool();
+	pOdepth		= Parameters("OUTDEPTH")->asGrid();
+	pOlevel		= Parameters("OUTLEVEL")->asGrid();
+
+
+
+	//---------------------------------------------------------
+	// Initialize
+
+	pOdepth->Assign(0.0);
+	pOlevel->Assign(pElev);
+
+	for( y=0; y<Get_NY(); y++ )									
+	{
+		for( x=0; x<Get_NX(); x++ )
+		{
+			if( !pSeeds->is_NoData(x, y) && !pElev->is_NoData(x, y) )
+			{
+				thisSeed.x	= x;
+				thisSeed.y	= y;
+				if( bLevel )
+					thisSeed.z	= pSeeds->asDouble(x, y);
+				else
+					thisSeed.z	= pSeeds->asDouble(x, y) + pElev->asDouble(x, y);
+				seeds.push_back(thisSeed);
+			}
+		}
+	}
+
+
+	//-----------------------------------------------------
+	// Flood
+
+	for( it=seeds.begin(); it!=seeds.end(); it++ )
+	{
+		if( it->z <= pOlevel->asDouble(it->x, it->y) )
+			continue;
+
+		newCell		= new CTraceOrder();
+		newCell->x	= it->x;
+		newCell->y	= it->y;
+		firstCell	= newCell;
+
+		pOdepth->Set_Value(it->x, it->y, it->z - pElev->asDouble(it->x, it->y));
+		pOlevel->Set_Value(it->x, it->y, it->z);
+
+
+		iterCell = firstCell;
+		lastCell = firstCell;
+
+		while( iterCell != NULL ) 
+		{
+			x	= iterCell->x;
+			y	= iterCell->y;
+
+			for( i=0; i<8; i++ )												
+			{
+				ix	= Get_xTo(i, x);			
+				iy	= Get_yTo(i, y);			
+							
+				if(	is_InGrid(ix, iy) && !pElev->is_NoData(ix, iy) && pOlevel->asDouble(ix, iy) < it->z )
+				{ 
+					pOdepth->Set_Value(ix, iy, it->z - pElev->asDouble(ix, iy));
+					pOlevel->Set_Value(ix, iy, it->z);
+					newCell = new CTraceOrder();
+					newCell->x = ix;
+					newCell->y = iy;
+					newCell->prev = lastCell;
+					lastCell->next = newCell;
+					lastCell = newCell;
+				}
+			}
+		
+			newCell = firstCell;
+
+			if( newCell->next == NULL )
+			{
+				firstCell = lastCell = NULL;
+				delete (newCell);
+				newCell = NULL;
+			}
+			else
+			{
+				newCell->next->prev = NULL;
+				firstCell = newCell->next;
+				newCell->next = NULL;
+				delete (newCell);
+				newCell = NULL;
+			}
+
+			iterCell = firstCell;
+		}
+	}
+
+
+	//-----------------------------------------------------
+	return( true );
+}
+
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFlood.h b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFlood.h
index 134a72b..3f1a8cb 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFlood.h
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFlood.h
@@ -1,156 +1,164 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     ta_hydrology                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                      LakeFlood.h                      //
-//                                                       //
-//                 Copyright (C) 2005-6 by               //
-//                    Volker Wichmann                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     volkerwichmann at ku-eichstaett.de        //
-//                                                       //
-//    contact:    Volker Wichmann                        //
-//                Research Associate                     //
-//                Chair of Physical Geography		     //
-//				  KU Eichstätt-Ingolstadt				 //
-//                Ostenstr. 18                           //
-//                85072 Eichstätt                        //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__LakeFlood_H
-#define HEADER_INCLUDED__LakeFlood_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "MLB_Interface.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CTraceOrder
-{
-public:
-	CTraceOrder(void)
-	{
-		x = y = 0;
-		prev = NULL;
-		next = NULL;
-	};
-
-	~CTraceOrder(void)
-	{
-		if(next != NULL)
-			delete (next);
-		next = NULL;
-	};
-
-	int		x;
-	int		y;
-	CTraceOrder *prev;
-	CTraceOrder	*next;
-
-};
-
-//---------------------------------------------------------
-class ta_hydrology_EXPORT CLakeFlood : public CSG_Module_Grid
-{
-public:
-	CLakeFlood(void);
-	virtual ~CLakeFlood(void);
-
-	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("R:Lakes") );	}
-
-
-protected:
-
-	virtual bool			On_Execute			(void);
-
-
-private:
-
-
-
-};
-
-//---------------------------------------------------------
-class ta_hydrology_EXPORT CLakeFloodInteractive : public CSG_Module_Grid_Interactive
-{
-public:
-	CLakeFloodInteractive(void);
-	virtual ~CLakeFloodInteractive(void);
-
-	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("R:Lakes") );	}
-
-
-protected:
-	virtual bool			On_Execute			(void);
-	virtual bool			On_Execute_Finish	(void);
-	virtual bool			On_Execute_Position	(CSG_Point ptWorld, TSG_Module_Interactive_Mode Mode);
-
-private:
-	CSG_Grid				*pElev, *pOdepth;
-	CTraceOrder				*newCell, *firstCell, *iterCell, *lastCell;
-	double					wzSeed;
-
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__LakeFlood_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     ta_hydrology                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                      LakeFlood.h                      //
+//                                                       //
+//                 Copyright (C) 2005-6 by               //
+//                    Volker Wichmann                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     volkerwichmann at ku-eichstaett.de        //
+//                                                       //
+//    contact:    Volker Wichmann                        //
+//                Research Associate                     //
+//                Chair of Physical Geography		     //
+//				  KU Eichst�tt-Ingolstadt				 //
+//                Ostenstr. 18                           //
+//                85072 Eichst�tt                        //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef HEADER_INCLUDED__LakeFlood_H
+#define HEADER_INCLUDED__LakeFlood_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "MLB_Interface.h"
+#include <list>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CTraceOrder
+{
+public:
+	CTraceOrder(void)
+	{
+		x = y = 0;
+		prev = NULL;
+		next = NULL;
+	};
+
+	~CTraceOrder(void)
+	{
+		if(next != NULL)
+			delete (next);
+		next = NULL;
+	};
+
+	int		x;
+	int		y;
+	CTraceOrder *prev;
+	CTraceOrder	*next;
+
+};
+
+//---------------------------------------------------------
+class ta_hydrology_EXPORT CLakeFlood : public CSG_Module_Grid
+{
+public:
+	CLakeFlood(void);
+	virtual ~CLakeFlood(void);
+
+	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("R:Lakes") );	}
+
+
+protected:
+
+	virtual bool			On_Execute			(void);
+
+	typedef struct
+	{
+		int		x;			// grid x
+		int		y;			// grid y
+		double	z;			// absolute water level
+	}SEED;
+
+private:
+
+
+
+};
+
+//---------------------------------------------------------
+class ta_hydrology_EXPORT CLakeFloodInteractive : public CSG_Module_Grid_Interactive
+{
+public:
+	CLakeFloodInteractive(void);
+	virtual ~CLakeFloodInteractive(void);
+
+	virtual const SG_Char *	Get_MenuPath		(void)	{	return( _TL("R:Lakes") );	}
+
+
+protected:
+	virtual bool			On_Execute			(void);
+	virtual bool			On_Execute_Finish	(void);
+	virtual bool			On_Execute_Position	(CSG_Point ptWorld, TSG_Module_Interactive_Mode Mode);
+
+private:
+	CSG_Grid				*pElev, *pOdepth, *pOlevel;
+	CTraceOrder				*newCell, *firstCell, *iterCell, *lastCell;
+	bool					m_bLevel;
+	double					m_water;
+
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef HEADER_INCLUDED__LakeFlood_H
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFloodInteractive.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFloodInteractive.cpp
index 3bef99c..b41e83e 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFloodInteractive.cpp
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/LakeFloodInteractive.cpp
@@ -1,202 +1,219 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     ta_hydrology                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//               LakeFloodInteractive.cpp                //
-//                                                       //
-//                Copyright (C) 2005-6 by                //
-//                    Volker Wichmann                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     reklovw at web.de                         //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "LakeFlood.h"
-
-///////////////////////////////////////////////////////////
-//														 //
-//				Construction/Destruction				 //
-//														 //
-///////////////////////////////////////////////////////////
-
-CLakeFloodInteractive::CLakeFloodInteractive(void)
-{
-	// Parameter Settings for input dialog of the module
-
-	Parameters.Set_Name(_TL("Lake Flood"));
-	Set_Author(_TL("Copyrights (c) 2005-6 by Volker Wichmann"));
-	Parameters.Set_Description(_TW(
-		"This module works interactively and can be used to simulate the extent and volume of a lake for a given water depth. "
-		"Execute the module and use the action tool on a cell of the digital elevation model to fill the lake starting from this "
-		"location. Execute the module again to terminate module operation.\r\n")
-	);
-
-
-	Parameters.Add_Grid(	
-		NULL, "ELEV", _TL("DEM"), 
-		_TL("digital elevation model [m]"),
-		PARAMETER_INPUT
-	);
-	Parameters.Add_Value(
-		NULL, "INDEPTH", _TL("Water Depth"),
-		_TL("water depth at the user specified cell [m]"),
-		PARAMETER_TYPE_Double,
-		2.5
-	); 
-	Parameters.Add_Grid(	
-		NULL, "OUTDEPTH", _TL("Lake"), 
-		_TL("extent of lake, coded with local water depth [m]"),
-		PARAMETER_OUTPUT
-	);
-
-}
-
-//---------------------------------------------------------
-CLakeFloodInteractive::~CLakeFloodInteractive(void)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-
-bool CLakeFloodInteractive::On_Execute(void)									
-{
-	pElev		= Parameters("ELEV")->asGrid();
-	pOdepth		= Parameters("OUTDEPTH")->asGrid();
-	wzSeed		= Parameters("INDEPTH")->asDouble();
-
-	return (true);
-}
-
-//---------------------------------------------------------
-bool CLakeFloodInteractive::On_Execute_Finish(void)
-{
-	return( true );
-}
-
-
-//---------------------------------------------------------
-bool CLakeFloodInteractive::On_Execute_Position(CSG_Point ptWorld, TSG_Module_Interactive_Mode Mode)
-{
-	//-----------------------------------------------------
-	if(  Mode == MODULE_INTERACTIVE_LDOWN )
-	{
-		int			x, y, ix, iy, i;
-		double		z, d, wz;
-
-		wz	= wzSeed;
-	
-		x	= Get_System()->Get_xWorld_to_Grid(ptWorld.Get_X());
-		y	= Get_System()->Get_yWorld_to_Grid(ptWorld.Get_Y());
-	
-		if( pElev && pElev->is_InGrid(x, y) )
-		{
-			pOdepth->Assign(0.0);
-
-			newCell = new CTraceOrder();
-			newCell->x = x;
-			newCell->y = y;
-			firstCell = newCell;
-			
-			pOdepth->Set_Value(x, y, wzSeed);
-			wz +=  pElev->asDouble(x, y);
-		
-
-			iterCell = firstCell;
-			lastCell = firstCell;
-
-			while( iterCell != NULL ) 
-			{
-				x	= iterCell->x;
-				y	= iterCell->y;
-
-				z		= pElev->asDouble(x, y);
-
-				for(i=0; i<8; i++)												
-				{
-					ix	= Get_xTo(i, x);			
-					iy	= Get_yTo(i, y);			
-						
-					if(	is_InGrid(ix, iy) && !pElev->is_NoData(ix, iy) && pOdepth->asDouble(ix, iy) == 0.0 )
-					{ 
-						d	= pElev->asDouble(ix, iy);
-						if( d < wz )
-						{
-							pOdepth->Set_Value(ix, iy, (wz - d));
-							newCell = new CTraceOrder();
-							newCell->x = ix;
-							newCell->y = iy;
-							newCell->prev = lastCell;
-							lastCell->next = newCell;
-							lastCell = newCell;
-						}
-					}
-				}
-	
-				newCell = firstCell;
-
-				if( newCell->next == NULL )
-				{
-					firstCell = NULL;
-					delete (newCell);
-				}
-				else
-				{
-					newCell->next->prev = NULL;
-					firstCell = newCell->next;
-					newCell->next = NULL;
-					delete (newCell);
-				}
-
-				iterCell = firstCell;
-			}
-			Message_Add(_TL("ready"), false);
-			DataObject_Update(pOdepth, pOdepth->Get_ZMin(), pOdepth->Get_ZMax());
-
-			return( true );
-		}
-	}
-
-	return( false );
-}
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                     ta_hydrology                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//               LakeFloodInteractive.cpp                //
+//                                                       //
+//                Copyright (C) 2005-6 by                //
+//                    Volker Wichmann                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     reklovw at web.de                         //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "LakeFlood.h"
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Construction/Destruction				 //
+//														 //
+///////////////////////////////////////////////////////////
+
+CLakeFloodInteractive::CLakeFloodInteractive(void)
+{
+	Set_Name		(_TL("Lake Flood"));
+	Set_Author		(_TL("Volker Wichmann (c) 2005-2010"));
+	Parameters.Set_Description(_TW(
+		"This module works interactively and can be used to flood a digital elevation model for a given water depth or water level. "
+		"Execute the module and use the action tool on a cell to flood the digital elevation model from this "
+		"location. Execute the module again to terminate module operation.\r\n")
+	);
+
+
+	Parameters.Add_Grid(	
+		NULL, "ELEV", _TL("DEM"), 
+		_TL("digital elevation model"),
+		PARAMETER_INPUT
+	);
+	Parameters.Add_Value(
+		NULL, "WATER", _TL("Water"),
+		_TL("local water depth or absolute water level at the user specified cell"),
+		PARAMETER_TYPE_Double,
+		2.5
+	);
+	Parameters.Add_Value(
+		NULL, "LEVEL", _TL("Absolute Water Level"),
+		_TL("check this in case parameter 'water' is absolute water level"),
+		PARAMETER_TYPE_Bool, false
+	);
+	Parameters.Add_Grid(	
+		NULL, "OUTDEPTH", _TL("Lake"), 
+		_TL("extent of lake, coded with local water depth"),
+		PARAMETER_OUTPUT
+	);
+	Parameters.Add_Grid(	
+		NULL, "OUTLEVEL", _TL("Surface"), 
+		_TL("Flooded digital elevation model"),
+		PARAMETER_OUTPUT
+	);
+
+}
+
+//---------------------------------------------------------
+CLakeFloodInteractive::~CLakeFloodInteractive(void)
+{}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+
+bool CLakeFloodInteractive::On_Execute(void)									
+{
+	pElev		= Parameters("ELEV")->asGrid();
+	m_water		= Parameters("WATER")->asDouble();
+	m_bLevel	= Parameters("LEVEL")->asBool();
+	pOdepth		= Parameters("OUTDEPTH")->asGrid();
+	pOlevel		= Parameters("OUTLEVEL")->asGrid();
+
+	pOdepth->Assign(0.0);
+	pOlevel->Assign(pElev);
+
+	return (true);
+}
+
+//---------------------------------------------------------
+bool CLakeFloodInteractive::On_Execute_Finish(void)
+{
+	return( true );
+}
+
+
+//---------------------------------------------------------
+bool CLakeFloodInteractive::On_Execute_Position(CSG_Point ptWorld, TSG_Module_Interactive_Mode Mode)
+{
+	//-----------------------------------------------------
+	if(  Mode == MODULE_INTERACTIVE_LDOWN )
+	{
+		int			x, y, ix, iy, i;
+		double		level;
+	
+		x	= Get_System()->Get_xWorld_to_Grid(ptWorld.Get_X());
+		y	= Get_System()->Get_yWorld_to_Grid(ptWorld.Get_Y());
+	
+		if( pElev->is_InGrid(x, y, true) )
+		{
+			if( !m_bLevel )
+				level = m_water + pElev->asDouble(x, y);
+			else
+				level = m_water;
+
+
+			if( level <= pOlevel->asDouble(x, y) )
+				return (true);
+
+
+			newCell		= new CTraceOrder();
+			newCell->x	= x;
+			newCell->y	= y;
+			firstCell	= newCell;
+
+			pOdepth->Set_Value(x, y, level - pElev->asDouble(x, y));
+			pOlevel->Set_Value(x, y, level);
+
+
+			iterCell = firstCell;
+			lastCell = firstCell;
+
+			while( iterCell != NULL ) 
+			{
+				x	= iterCell->x;
+				y	= iterCell->y;
+
+				for( i=0; i<8; i++ )												
+				{
+					ix	= Get_xTo(i, x);			
+					iy	= Get_yTo(i, y);			
+								
+					if(	is_InGrid(ix, iy) && !pElev->is_NoData(ix, iy) && pOlevel->asDouble(ix, iy) < level )
+					{ 
+						pOdepth->Set_Value(ix, iy, level - pElev->asDouble(ix, iy));
+						pOlevel->Set_Value(ix, iy, level);
+						newCell = new CTraceOrder();
+						newCell->x = ix;
+						newCell->y = iy;
+						newCell->prev = lastCell;
+						lastCell->next = newCell;
+						lastCell = newCell;
+					}
+				}
+			
+				newCell = firstCell;
+
+				if( newCell->next == NULL )
+				{
+					firstCell = lastCell = NULL;
+					delete (newCell);
+					newCell = NULL;
+				}
+				else
+				{
+					newCell->next->prev = NULL;
+					firstCell = newCell->next;
+					newCell->next = NULL;
+					delete (newCell);
+					newCell = NULL;
+				}
+
+				iterCell = firstCell;
+			}
+
+			SG_UI_Msg_Add(_TL("ready ..."), true);
+			DataObject_Update(pOdepth, pOdepth->Get_ZMin(), pOdepth->Get_ZMax());
+			DataObject_Update(pOlevel, pOlevel->Get_ZMin(), pOlevel->Get_ZMax());
+			return( true );
+		}
+	}
+
+	return( false );
+}
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.in b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.in
index 37cc8e8..0487044 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/Makefile.in
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_hydrology/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_terrain_analysis/terrain_analysis/ta_hydrology
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -111,6 +117,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -160,14 +168,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -211,9 +232,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.cpp
index 28c975f..8d47c1b 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.cpp
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/MLB_Interface.cpp
@@ -86,7 +86,6 @@ const SG_Char * Get_Info(int i)
 #include "HillShade.h"
 #include "Visibility_Point.h"
 #include "SolarRadiation.h"
-#include "SADO_SolarRadiation.h"
 #include "view_shed.h"
 #include "topographic_correction.h"
 
@@ -95,12 +94,11 @@ CSG_Module * Create_Module(int i)
 {
 	switch( i )
 	{
-	case 0:		return( new CHillShade );
-	case 1:		return( new CVisibility_Point );
-	case 2:		return( new CSolarRadiation );
-	case 3:		return( new CSADO_SolarRadiation );
-	case 4:		return( new CView_Shed );
-	case 5:		return( new CTopographic_Correction );
+	case  0:	return( new CHillShade );
+	case  1:	return( new CVisibility_Point );
+	case  2:	return( new CSolarRadiation );
+	case  3:	return( new CView_Shed );
+	case  4:	return( new CTopographic_Correction );
 	}
 
 	return( NULL );
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am
index cd620b8..66a4984 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.10 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.11 2010/11/16 10:37:50 oconrad Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
@@ -15,14 +15,12 @@ pkglib_LTLIBRARIES = libta_lighting.la
 libta_lighting_la_SOURCES =\
 HillShade.cpp\
 MLB_Interface.cpp\
-SADO_SolarRadiation.cpp\
 SolarRadiation.cpp\
 topographic_correction.cpp\
 view_shed.cpp\
 Visibility_Point.cpp\
 HillShade.h\
 MLB_Interface.h\
-SADO_SolarRadiation.h\
 SolarRadiation.h\
 topographic_correction.h\
 view_shed.h\
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.in b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.in
index cc9e694..0cfaa5c 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/Makefile.in
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_terrain_analysis/terrain_analysis/ta_lighting
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -69,8 +75,8 @@ LTLIBRARIES = $(pkglib_LTLIBRARIES)
 libta_lighting_la_DEPENDENCIES =  \
 	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
 am_libta_lighting_la_OBJECTS = HillShade.lo MLB_Interface.lo \
-	SADO_SolarRadiation.lo SolarRadiation.lo \
-	topographic_correction.lo view_shed.lo Visibility_Point.lo
+	SolarRadiation.lo topographic_correction.lo view_shed.lo \
+	Visibility_Point.lo
 libta_lighting_la_OBJECTS = $(am_libta_lighting_la_OBJECTS)
 DEFAULT_INCLUDES = -I. at am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -106,6 +112,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -155,14 +163,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -206,9 +227,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -219,7 +244,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.10 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.11 2010/11/16 10:37:50 oconrad Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_TRUE at UC_DEFS = -D_SAGA_UNICODE
@@ -231,14 +256,12 @@ pkglib_LTLIBRARIES = libta_lighting.la
 libta_lighting_la_SOURCES = \
 HillShade.cpp\
 MLB_Interface.cpp\
-SADO_SolarRadiation.cpp\
 SolarRadiation.cpp\
 topographic_correction.cpp\
 view_shed.cpp\
 Visibility_Point.cpp\
 HillShade.h\
 MLB_Interface.h\
-SADO_SolarRadiation.h\
 SolarRadiation.h\
 topographic_correction.h\
 view_shed.h\
@@ -321,7 +344,6 @@ distclean-compile:
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/HillShade.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SADO_SolarRadiation.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SolarRadiation.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Visibility_Point.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/topographic_correction.Plo at am__quote@
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.cpp
deleted file mode 100644
index 5d91e93..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.cpp
+++ /dev/null
@@ -1,1166 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     ta_lighting                       //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                SADO_SolarRadiation.cpp                //
-//                                                       //
-//                 Copyright (C) 2006 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "SADO_SolarRadiation.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSADO_SolarRadiation::CSADO_SolarRadiation(void)
-{
-	CSG_Parameter	*pNode;
-
-	//-----------------------------------------------------
-	Set_Name		(_TL("Insolation"));
-
-	Set_Author		(SG_T("(c) 2006 by O.Conrad"));
-
-	Set_Description	(_TW(
-		"Calculation of incoming solar radiation (insolation). "
-		"Based on the SADO (System for the Analysis of Discrete Surfaces) routines "
-		"developed by Boehner & Trachinow. "
-		"\n\n"
-		"References:\n"
-	));
-
-	//-----------------------------------------------------
-	Parameters.Add_Grid(
-		NULL	, "GRD_DEM"			, _TL("Elevation"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "GRD_VAPOUR"		, _TL("Water Vapour Pressure [mbar]"),
-		_TL(""),
-		PARAMETER_INPUT_OPTIONAL
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "GRD_LAT"			, _TL("Latitude [degree]"),
-		_TL(""),
-		PARAMETER_INPUT_OPTIONAL
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "GRD_LON"			, _TL("Longitude [degree]"),
-		_TL(""),
-		PARAMETER_INPUT_OPTIONAL
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "GRD_DIRECT"		, _TL("Direct Insolation"),
-		_TL(""),
-		PARAMETER_OUTPUT_OPTIONAL
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "GRD_DIFFUS"		, _TL("Diffuse Insolation"),
-		_TL(""),
-		PARAMETER_OUTPUT_OPTIONAL
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "GRD_TOTAL"		, _TL("Total Insolation"),
-		_TL("Total insolation, the sum of direct and diffuse incoming solar radiation."),
-		PARAMETER_OUTPUT_OPTIONAL
-	);
-
-	//-----------------------------------------------------
-	Parameters.Add_Value(
-		NULL	, "BHORIZON"		, _TL("Horizontal Projection"),
-		_TL(""),
-		PARAMETER_TYPE_Bool			, false
-	);
-
-	Parameters.Add_Value(
-		NULL	, "SOLARCONST"		, _TL("Solar Constant [J]"),
-		_TL(""),
-		PARAMETER_TYPE_Double		, 8.164, 0.0, true
-	);
-
-	Parameters.Add_Value(
-		NULL	, "ATMOSPHERE"		, _TL("Height of Atmosphere [m]"),
-		_TL(""),
-		PARAMETER_TYPE_Double		, 12000.0, 0.0, true
-	);
-
-	Parameters.Add_Value(
-		NULL	, "VAPOUR"			, _TL("Water Vapour Pressure [mbar]"),
-		_TL("This value is used as constant if no vapour pressure grid is given."),
-		PARAMETER_TYPE_Double		, 10, 0.0, true
-	);
-
-	//-----------------------------------------------------
-	pNode	= Parameters.Add_Node(
-		NULL	, "NODE_TIME"		, _TL("Time"),
-		_TL("")
-	);
-
-	Parameters.Add_Choice(
-		pNode	, "PERIOD"			, _TL("Time Period"),
-		_TL(""),
-
-		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
-			_TL("moment"),
-			_TL("day"),
-			_TL("range of days"),
-			_TL("same moment for a range of days")
-		), 1
-	);
-
-	Parameters.Add_Value(
-		pNode	, "DHOUR"			, _TL("Daily Time Resolution [h]"),
-		_TL("Time resolution for a day's calculation."),
-		PARAMETER_TYPE_Double		, 1.0, 0.0, true, 24.0, true
-	);
-
-	Parameters.Add_Value(
-		pNode	, "DDAYS"			, _TL("Range of Days Time Resolution [days]"),
-		_TL("Time resolution for a range of days calculation."),
-		PARAMETER_TYPE_Int			, 1, 1, true
-	);
-
-	Parameters.Add_Value(
-		pNode	, "DAY_A"			, _TL("Day of Year"),
-		_TL(""),
-		PARAMETER_TYPE_Int			, 81
-	);
-
-	Parameters.Add_Value(
-		pNode	, "DAY_B"			, _TL("Day of Year (Range End)"),
-		_TL(""),
-		PARAMETER_TYPE_Int			, 87
-	);
-
-	Parameters.Add_Value(
-		pNode	, "MOMENT"			, _TL("Moment [h]"),
-		_TL(""),
-		PARAMETER_TYPE_Double		, 12.0, 0.0, true, 24.0, true
-	);
-
-	//-----------------------------------------------------
-	pNode	= Parameters.Add_Node(
-		NULL	, "NODE_LOCATION"	, _TL("Location"),
-		_TL("")
-	);
-
-	Parameters.Add_Value(
-		pNode	, "LATITUDE"		, _TL("Latitude"),
-		_TL(""),
-		PARAMETER_TYPE_Degree		, 53.0, -90.0, true, 90.0, true
-	);
-
-	Parameters.Add_Value(
-		pNode	, "BENDING"			, _TL("Planetery Bending"),
-		_TL(""),
-		PARAMETER_TYPE_Bool			, false
-	);
-
-	Parameters.Add_Value(
-		pNode	, "RADIUS"			, _TL("Planetary Radius"),
-		_TL(""),
-		PARAMETER_TYPE_Double		, 6366737.96, 0.0, true
-	);
-
-	Parameters.Add_Choice(
-		pNode	, "LAT_OFFSET"		, _TL("Latitude relates to grid's..."),
-		_TL(""),
-
-		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
-			_TL("bottom"),
-			_TL("center"),
-			_TL("top"),
-			_TL("user defined reference")
-		), 3
-	);
-
-	Parameters.Add_Choice(
-		pNode	, "LON_OFFSET"		, _TL("Local time relates to grid's..."),
-		_TL(""),
-
-		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
-			_TL("left"),
-			_TL("center"),
-			_TL("right"),
-			_TL("user defined reference")
-		), 1
-	);
-
-	Parameters.Add_Value(
-		pNode	, "LAT_REF_USER"	, _TL("Latitude (user defined reference)"),
-		_TL(""),
-		PARAMETER_TYPE_Double		, 0.0
-	);
-
-	Parameters.Add_Value(
-		pNode	, "LON_REF_USER"	, _TL("Local Time (user defined reference)"),
-		_TL(""),
-		PARAMETER_TYPE_Double		, 0.0
-	);
-
-	//-----------------------------------------------------
-	pNode	= Parameters.Add_Node(
-		NULL	, "NODE_UPDATEVIEW"	, _TL("Update View"),
-		_TL("")
-	);
-
-	Parameters.Add_Value(
-		pNode	, "UPD_DIRECT"		, _TL("Direct Insolation"),
-		_TL(""),
-		PARAMETER_TYPE_Bool			, false
-	);
-
-	Parameters.Add_Value(
-		pNode	, "UPD_DIFFUS"		, _TL("Diffuse Insolation"),
-		_TL(""),
-		PARAMETER_TYPE_Bool			, false
-	);
-
-	Parameters.Add_Value(
-		pNode	, "UPD_TOTAL"		, _TL("Total Insolation"),
-		_TL(""),
-		PARAMETER_TYPE_Bool			, false
-	);
-}
-
-//---------------------------------------------------------
-CSADO_SolarRadiation::~CSADO_SolarRadiation(void)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSADO_SolarRadiation::On_Execute(void)
-{
-	//-----------------------------------------------------
-	m_pDEM			= Parameters("GRD_DEM")		->asGrid();
-	m_pVP			= Parameters("GRD_VAPOUR")	->asGrid();
-
-	m_pSumDirect	= Parameters("GRD_DIRECT")	->asGrid();
-	m_bUpdateDirect	= Parameters("UPD_DIRECT")	->asBool() && m_pSumDirect;
-	m_pSumDiffus	= Parameters("GRD_DIFFUS")	->asGrid();
-	m_bUpdateDiffus	= Parameters("UPD_DIFFUS")	->asBool() && m_pSumDiffus;
-	m_pSumTotal		= Parameters("GRD_TOTAL")	->asGrid();
-	m_bUpdateTotal	= Parameters("UPD_TOTAL")	->asBool() && m_pSumTotal;
-
-	m_Solar_Const	= Parameters("SOLARCONST")	->asDouble();
-	m_Atmosphere	= Parameters("ATMOSPHERE")	->asDouble();
-	m_VP			= Parameters("VAPOUR")		->asDouble();
-	m_bHorizon		= Parameters("BHORIZON")	->asBool();
-
-	m_Latitude		= Parameters("LATITUDE")	->asDouble() * M_DEG_TO_RAD;
-	m_bBending		= Parameters("BENDING")		->asBool();
-
-	m_Hour			= Parameters("MOMENT")		->asDouble();
-	m_dHour			= Parameters("DHOUR")		->asDouble();
-	m_dDays			= Parameters("DDAYS")		->asInt();
-	m_Day_A			= Parameters("DAY_A")		->asInt();
-	m_Day_B			= Parameters("DAY_B")		->asInt();
-
-	switch( Parameters("PERIOD")->asInt() )
-	{
-	case 0:	// moment
-		m_bMoment		= true;
-		m_bUpdateDirect	= m_bUpdateDiffus	= m_bUpdateTotal	= false;
-		break;
-
-	case 1:	// day
-		m_bMoment		= false;
-		m_Day_B			= m_Day_A;
-		m_Hour			= 0.0;
-		break;
-
-	case 2:	// range of days
-		m_bMoment		= false;
-		m_Hour			= 0.0;
-		break;
-
-	case 3:	// same moment for a range of days
-		m_bMoment		= false;
-		m_dHour			= 24.0;
-		break;
-	}
-
-	//-----------------------------------------------------
-	if( !m_pSumDirect && !m_pSumDiffus && !m_pSumTotal )
-	{
-		Message_Dlg(_TL("No output grid has been choosen."), Get_Name());
-	}
-	else if( m_pSumDirect == m_pDEM || m_pSumDiffus == m_pDEM || m_pSumTotal == m_pDEM )
-	{
-		Message_Dlg(_TL("Output must not overwrite elevation grid."), Get_Name());
-	}
-	else
-	{
-		return( Get_Insolation() );
-	}
-
-	//-----------------------------------------------------
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSADO_SolarRadiation::Initialise(void)
-{
-	int		x, y;
-
-	Process_Set_Text(_TL("initialising..."));
-
-	//-----------------------------------------------------
-	CSG_Colors	c(100, SG_COLORS_YELLOW_RED, true);
-
-	c.Set_Ramp(SG_GET_RGB(  0,   0,  64), SG_GET_RGB(255, 159,   0),  0, 50);
-	c.Set_Ramp(SG_GET_RGB(255, 159,   0), SG_GET_RGB(255, 255, 255), 50, 99);
-
-	if( m_pSumDirect )
-	{
-		m_pSumDirect->Assign(0.0);
-		m_pSumDirect->Set_Unit(_TL("Joule"));
-		DataObject_Set_Colors(m_pSumDirect, c);
-
-		if( m_bUpdateDirect )
-		{
-			m_TmpDirect.Create(*Get_System(), SG_DATATYPE_Float);
-			DataObject_Update(m_pSumDirect, true);
-		}
-	}
-
-	if( m_pSumDiffus )
-	{
-		m_pSumDiffus->Assign(0.0);
-		m_pSumDiffus->Set_Unit(_TL("Joule"));
-		DataObject_Set_Colors(m_pSumDiffus, c);
-
-		if( m_bUpdateDiffus )
-		{
-			m_TmpDiffus.Create(*Get_System(), SG_DATATYPE_Float);
-			DataObject_Update(m_pSumDiffus, true);
-		}
-	}
-
-	if( m_pSumTotal )
-	{
-		m_pSumTotal ->Assign(0.0);
-		m_pSumTotal ->Set_Unit(_TL("Joule"));
-		DataObject_Set_Colors(m_pSumTotal , c);
-
-		if( m_bUpdateTotal )
-		{
-			m_TmpTotal.Create(*Get_System(), SG_DATATYPE_Float);
-			DataObject_Update(m_pSumTotal , true);
-		}
-	}
-
-	//-----------------------------------------------------
-	Process_Set_Text(_TL("initialising gradient..."));
-
-	m_Shade .Create(*Get_System(), SG_DATATYPE_Byte);
-	m_Slope .Create(*Get_System(), SG_DATATYPE_Float);
-	m_Aspect.Create(*Get_System(), SG_DATATYPE_Float);
-
-	for(y=0; y<Get_NY() && Set_Progress(y); y++)
-	{
-		for(x=0; x<Get_NX(); x++)
-		{
-			double	s, a;
-
-			if( m_pDEM->Get_Gradient(x, y, s, a) )
-			{
-				m_Slope .Set_Value(x, y, s);
-				m_Aspect.Set_Value(x, y, a);
-			}
-			else
-			{
-				m_Slope .Set_NoData(x, y);
-				m_Aspect.Set_NoData(x, y);
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	if( m_bBending )
-	{
-		Process_Set_Text(_TL("initialising planetary bending..."));
-
-		CSG_Grid	*pLat	= Parameters("GRD_LAT")->asGrid(),
-				*pLon	= Parameters("GRD_LON")->asGrid();
-
-		m_Lat		.Create(*Get_System(), SG_DATATYPE_Float);
-		m_Lon		.Create(*Get_System(), SG_DATATYPE_Float);
-		m_Decline	.Create(*Get_System(), SG_DATATYPE_Float);
-		m_Azimuth	.Create(*Get_System(), SG_DATATYPE_Float);
-
-		if( pLat || pLon )
-		{
-			if( pLat )
-			{
-				m_Lat	= *pLat;
-				m_Lat	*= M_DEG_TO_RAD;
-			}
-
-			if( pLon )
-			{
-				m_Lon	= *pLon;
-				m_Lon	*= M_DEG_TO_RAD;
-			}
-		}
-
-		//-------------------------------------------------
-		else
-		{
-			double	d, dx, dy, dxA, dyA;
-
-			d	= M_DEG_TO_RAD / (Parameters("RADIUS")->asDouble() * M_PI / 180.0);
-
-			switch( Parameters("LON_OFFSET")->asInt() )
-			{
-			case 0:	dxA	= Get_System()->Get_Extent().Get_XMin();	break;	// left
-			case 1:	dxA	= Get_System()->Get_Extent().Get_XCenter();	break;	// center
-			case 2:	dxA	= Get_System()->Get_Extent().Get_XMax();	break;	// right
-			case 3:	dxA	= Parameters("LON_REF_USER")->asDouble();	break;	// user defined coordinate
-			}
-
-			switch( Parameters("LAT_OFFSET")->asInt() )
-			{
-			case 0:	dyA	= Get_System()->Get_Extent().Get_YMin();	break;	// bottom
-			case 1:	dyA	= Get_System()->Get_Extent().Get_YCenter();	break;	// center
-			case 2:	dyA	= Get_System()->Get_Extent().Get_YMax();	break;	// top
-			case 3:	dyA	= Parameters("LAT_REF_USER")->asDouble();	break;	// user defined coordinate
-			}
-
-			dxA	 = d * (Get_XMin() - dxA);
-			dyA	 = d * (Get_YMin() - dyA) + m_Latitude;
-			d	*= Get_Cellsize();
-
-			for(y=0, dy=dyA; y<Get_NY() && Set_Progress(y); y++, dy+=d)
-			{
-				for(x=0, dx=dxA; x<Get_NX(); x++, dx+=d)
-				{
-					m_Lat.Set_Value(x, y, dy);
-					m_Lon.Set_Value(x, y, dx);
-				}
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CSADO_SolarRadiation::Finalise(double SumFactor)
-{
-	//-----------------------------------------------------
-	if( m_pSumDirect )
-	{
-		if( m_bUpdateDirect )	m_pSumDirect->Assign(&m_TmpDirect);
-		if( SumFactor != 1.0 )	*m_pSumDirect	*= SumFactor;
-	}
-
-	if( m_pSumDiffus )
-	{
-		if( m_bUpdateDiffus )	m_pSumDiffus->Assign(&m_TmpDiffus);
-		if( SumFactor != 1.0 )	*m_pSumDiffus	*= SumFactor;
-	}
-
-	if( m_pSumTotal )
-	{
-		if( m_bUpdateTotal )	m_pSumTotal->Assign(&m_TmpTotal);
-		if( SumFactor != 1.0 )	*m_pSumTotal	*= SumFactor;
-	}
-
-	//-----------------------------------------------------
-	m_Shade		.Destroy();
-	m_Slope		.Destroy();
-	m_Aspect	.Destroy();
-
-	m_Lat		.Destroy();
-	m_Lon		.Destroy();
-	m_Decline	.Destroy();
-	m_Azimuth	.Destroy();
-
-	m_TmpDirect	.Destroy();
-	m_TmpDiffus	.Destroy();
-	m_TmpTotal	.Destroy();
-
-	//-----------------------------------------------------
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSADO_SolarRadiation::Get_Insolation(void)
-{
-	//-----------------------------------------------------
-	if( Initialise() )
-	{
-		if( m_bMoment )
-		{
-			Get_Insolation(m_Day_A, m_Hour);
-
-			Finalise();
-		}
-
-		//-------------------------------------------------
-		else
-		{
-			for(int Day=m_Day_A; Day<=m_Day_B && Process_Get_Okay(false); Day+=m_dDays)
-			{
-				for(double Hour=m_Hour; Hour<24.0 && Process_Get_Okay(false); Hour+=m_dHour)
-				{
-					Process_Set_Text(CSG_String::Format(SG_T("%s: %d(%d-%d), %s: %f"), _TL("Day"), Day, m_Day_A, m_Day_B, _TL("Hour"), Hour));
-
-					if( m_bUpdateDirect )	m_pSumDirect->Assign(0.0);
-					if( m_bUpdateDiffus )	m_pSumDiffus->Assign(0.0);
-					if( m_bUpdateTotal )	m_pSumTotal ->Assign(0.0);
-
-					if( Get_Insolation(Day, Hour) )
-					{
-						if( m_bUpdateDirect )
-						{
-							m_TmpDirect	+= *m_pSumDirect;
-							DataObject_Update(m_pSumDirect);
-						}
-
-						if( m_bUpdateDiffus )
-						{
-							m_TmpDiffus	+= *m_pSumDiffus;
-							DataObject_Update(m_pSumDiffus);
-						}
-
-						if( m_bUpdateTotal )
-						{
-							m_TmpTotal	+= *m_pSumTotal;
-							DataObject_Update(m_pSumTotal);
-						}
-					}
-				}
-			}
-
-			Finalise(m_dHour / (24.0 * (1 + m_Day_B - m_Day_A)));	// *m_pSumDirect	*= m_dHour / D->size();
-		}
-	}
-
-	//-----------------------------------------------------
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CSADO_SolarRadiation::Get_Insolation(int Day, double Hour)
-{
-	double	Azimuth, Decline;
-
-	if( m_bBending )
-	{
-		bool	bGo	= false;
-
-		for(int y=0; y<Get_NY() && Set_Progress(y); y++)
-		{
-			for(int x=0; x<Get_NX(); x++)
-			{
-				Get_Solar_Position(Day, Hour, m_Lat.asDouble(x, y), m_Lon.asDouble(x, y), Decline, Azimuth);
-
-				m_Azimuth.Set_Value(x, y, Azimuth);
-				m_Decline.Set_Value(x, y, Decline);
-
-				if( Decline > 0.0 )
-				{
-					bGo	= true;
-				}
-			}
-		}
-
-		if( bGo )
-		{
-			return( Set_Insolation(Decline, Azimuth) );
-		}
-	}
-	else if( Get_Solar_Position(Day, Hour, m_Latitude, 0.0, Decline, Azimuth) )
-	{
-		return( Set_Insolation(Decline, Azimuth) );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-inline double CSADO_SolarRadiation::Get_Vapour_Exponent(double VapourPressure)
-{
-	return( 0.916  - (VapourPressure > 0.0 ? 0.05125 * sqrt(VapourPressure) : 0.0) );
-}
-
-//---------------------------------------------------------
-inline double CSADO_SolarRadiation::Get_Vapour_A(double VapourPressure)
-{
-	return( 0.4158 + (VapourPressure > 0.0 ? 0.0399  * sqrt(VapourPressure) : 0.0) );
-}
-
-//---------------------------------------------------------
-bool CSADO_SolarRadiation::Set_Insolation(double Decline, double Azimuth)
-{
-	int		x, y;
-	double	a, e, Direct, Diffus;
-
-	Get_Shade(Decline, Azimuth);
-
-	e	= Get_Vapour_Exponent	(m_VP);
-	a	= Get_Vapour_A			(m_VP);
-
-	for(y=0; y<Get_NY() && Set_Progress(y); y++)
-	{
-		for(x=0; x<Get_NX(); x++)
-		{
-			if( m_pDEM->is_NoData(x, y) )
-			{
-				if( m_pSumDirect )	m_pSumDirect->Set_NoData(x, y);
-				if( m_pSumDiffus )	m_pSumDiffus->Set_NoData(x, y);
-				if( m_pSumTotal )	m_pSumTotal ->Set_NoData(x, y);
-			}
-			else
-			{
-				if( m_pVP != NULL )
-				{
-					e	= Get_Vapour_Exponent	(m_pVP->asDouble(x, y));
-					a	= Get_Vapour_A			(m_pVP->asDouble(x, y));
-				}
-
-				if( m_bBending )
-				{
-					Azimuth	= m_Azimuth.asDouble(x, y);
-					Decline	= m_Decline.asDouble(x, y);
-				}
-
-				if( Decline > 0.0 )
-				{
-					Direct	= Get_Solar_Direct(x, y, Decline, Azimuth, e);
-					Diffus	= Get_Solar_Diffus(x, y, Decline, a      , e);
-
-					if( m_pSumDirect )	m_pSumDirect->Add_Value(x, y, Direct);
-					if( m_pSumDiffus )	m_pSumDiffus->Add_Value(x, y, Diffus);
-					if( m_pSumTotal  )	m_pSumTotal ->Add_Value(x, y, Direct + Diffus);
-				}
-			}
-		}
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-inline double CSADO_SolarRadiation::Get_Solar_Reduction(double Elevation, double Decline, double Reduction)
-{
-	return( Decline > 0.0 ? (m_Solar_Const * pow(Reduction, (1.0 - Elevation / m_Atmosphere) / sin(Decline))) : 0.0 );
-}
-
-//---------------------------------------------------------
-inline double CSADO_SolarRadiation::Get_Solar_Direct(int x, int y, double Decline, double Azimuth, double Exponent)
-{
-	if( m_Shade.asInt(x, y) == 0 )
-	{
-		double	Angle, Slope;
-
-		Slope	= m_bHorizon ? 0.0 : m_Slope.asDouble(x, y);
-
-		Angle	= cos(Slope) * cos(Decline - M_PI_090)
-				+ sin(Slope) * sin(M_PI_090 - Decline)
-				* cos(Azimuth - m_Aspect.asDouble(x, y));
-
-		if( Angle > 0.0 )
-		{
-			return( Angle * Get_Solar_Reduction(m_pDEM->asDouble(x, y), Decline, Exponent) );
-		}
-	}
-
-	return( 0.0 );
-}
-
-//---------------------------------------------------------
-inline double CSADO_SolarRadiation::Get_Solar_Diffus(int x, int y, double Decline, double A, double Exponent)
-{
-	double	Dh, Ih, d, Slope, srad;
-
-	Ih		= Get_Solar_Reduction(m_pDEM->asDouble(x, y), Decline, Exponent) * sin(Decline);
-//	Decline	*= M_RAD_TO_DEG;	// Fehler in SADO ????!!!!!
-	d		= m_Atmosphere / (m_Atmosphere - m_pDEM->asDouble(x, y))
-			* (0.0001165 * Decline*Decline - 0.0152 * Decline + A);
-	d		= 1.0 - d;
-	Dh		= Ih / d - Ih;
-
-	Slope	= m_bHorizon ? 0.0 : m_Slope.asDouble(x, y);
-
-	srad	= (Dh + Dh * cos(Slope)) / 2.0;
-
-	return( srad < 0.0 || srad > m_Solar_Const ? m_Solar_Const : srad );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSADO_SolarRadiation::Get_Shade(double Decline, double Azimuth)
-{
-	//-----------------------------------------------------
-	m_Shade.Assign(0.0);
-
-	if( !m_bBending )
-	{
-		int		i, x, y;
-		double	dx, dy, dz;
-
-		Get_Shade_Params(Decline, Azimuth, dx, dy, dz);
-
-		for(i=0; i<Get_NCells() && Set_Progress_NCells(i); i++)
-		{
-			if( m_pDEM->Get_Sorted(i, x, y) && !Get_Shade_Complete(x, y) )
-			{
-				Set_Shade(x, y, dx, dy, dz);
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	else
-	{
-		int		i, x, y, iLock;
-
-		for(i=0, iLock=1; i<Get_NCells() && Set_Progress_NCells(i); i++, iLock++)
-		{
-			if( m_pDEM->Get_Sorted(i, x, y) && !Get_Shade_Complete(x, y) )
-			{
-				if( iLock >= 255 )
-					iLock	= 1;
-
-				if( iLock == 1 )
-					Lock_Create();
-
-				Set_Shade_Bended(x, y, iLock);
-			}
-		}
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-void CSADO_SolarRadiation::Set_Shade(int x, int y, double dx, double dy, double dz)
-{
-	for(double ix=x+0.5, iy=y+0.5, iz=m_pDEM->asDouble(x, y); ; )
-	{
-		x	= (int)(ix	+= dx);
-		y	= (int)(iy	+= dy);
-					iz	-= dz;
-
-		if( !is_InGrid(x, y) || m_pDEM->asDouble(x, y) > iz )
-		{
-			return;
-		}
-
-		m_Shade.Set_Value(x, y, 1);
-	}
-}
-
-//---------------------------------------------------------
-void CSADO_SolarRadiation::Set_Shade_Bended(int x, int y, char iLock)
-{
-	double	dx, dy, dz;
-
-	Get_Shade_Params(m_Decline.asDouble(x, y), m_Azimuth.asDouble(x, y), dx, dy, dz);
-
-	for(double ix=x+0.5, iy=y+0.5, iz=m_pDEM->asDouble(x, y); ; )
-	{
-		x	= (int)(ix	+= dx);
-		y	= (int)(iy	+= dy);
-					iz	-= dz;
-
-		if( !is_InGrid(x, y) || m_pDEM->asDouble(x, y) > iz || Lock_Get(x, y) == iLock )
-		{
-			return;
-		}
-
-		m_Shade.Set_Value(x, y, 1);
-
-		//---------------------------------------------
-		Lock_Set(x, y, iLock);
-
-		Get_Shade_Params(m_Decline.asDouble(x, y), m_Azimuth.asDouble(x, y), dx, dy, dz);
-	}
-}
-
-//---------------------------------------------------------
-inline bool CSADO_SolarRadiation::Get_Shade_Complete(int x, int y)
-{
-	if( m_Shade.asInt(x, y) == 1 )
-	{
-		for(int iy=y-1; iy<=y+1; iy++)
-		{
-			for(int ix=x-1; ix<x+1; ix++)
-			{
-				if( is_InGrid(ix, iy) && m_Shade.asInt(ix, iy) == 0 )
-				{
-					return( false );
-				}
-			}
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-inline void CSADO_SolarRadiation::Get_Shade_Params(double Decline, double Azimuth, double &dx, double &dy, double &dz)
-{
-	dz	= Azimuth + M_PI_180;
-	dx	= sin(dz);
-	dy	= cos(dz);
-
-	if( fabs(dx) > fabs(dy) )
-	{
-		dy	/= fabs(dx);
-		dx	= dx < 0 ? -1 : 1;
-	}
-	else if( fabs(dy) > fabs(dx) )
-	{
-		dx	/= fabs(dy);
-		dy	= dy < 0 ? -1 : 1;
-	}
-	else
-	{
-		dx	= dx < 0 ? -1 : 1;
-		dy	= dy < 0 ? -1 : 1;
-	}
-
-	dz	= tan(Decline) * sqrt(dx*dx + dy*dy) * Get_Cellsize();
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-inline bool CSADO_SolarRadiation::Get_Solar_Position(int Day, double Hour, double LAT, double LON, double &Declination, double &Azimuth)
-{
-	static const int	Day2Month[13]	= {	0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 366 };
-
-	static const double	ECLIPTIC_OBL	= M_DEG_TO_RAD * 23.43999;	// obliquity of ecliptic
-
-	int		i;
-
-	double	JD, T, M, L, X, Y, Z, R, UTime,
-			DEC, RA, theta, tau,
-			Month, Year		= 2000;
-
-	//-----------------------------------------------------
-
-	for(Month=1, i=0; i<=12; i++)
-	{
-		if( Day < Day2Month[i] )
-		{
-			Month	= i;
-			Day		-= Day2Month[i - 1];
-			break;
-		}
-	}
-
-	if( Month < 1 || Month > 12 )	// nur Tag (1 - 365) zaehlt...
-	{
-		Month		= 1;
-	}
-
-	if( Month <= 2 )
-	{
-		Month		+= 12;
-		Year		-= 1;
-	}
-
-
-	//-----------------------------------------------------
-
-//	UTime		= Hour - LON * 12.0 / M_PI;
-	UTime		= Hour;
-
-
-	//-----------------------------------------------------
-	// 1. Julian Date...
-
-	JD			= (int)(365.25 * Year) + (int)(30.6001 * (Month + 1)) - 15 + 1720996.5 + Day + UTime / 24.0;
-	T			= (JD - 2451545.0 ) / 36525.0;	// number of Julian centuries since 2000/01/01 at 12 UT (JD = 2451545.0)
-
-
-	//-----------------------------------------------------
-	// 2. Solar Coordinates (according to: Jean Meeus: Astronomical Algorithms), accuracy of 0.01 degree
-
-	M			= M_DEG_TO_RAD * (357.52910 + 35999.05030 * T - 0.0001559 * T * T - 0.00000048 * T * T * T);	// mean anomaly
-	L			= M_DEG_TO_RAD * (	(280.46645 + 36000.76983 * T + 0.0003032 * T * T)						// mean longitude
-							+	(	(1.914600 - 0.004817 * T - 0.000014  * T * T) * sin(M)
-								+	(0.019993 - 0.000101 * T) * sin(2 * M) + 0.000290 * sin(3 * M)		// true longitude
-								)
-							);
-
-
-	//-----------------------------------------------------
-	// 3. convert ecliptic longitude to right ascension RA and declination delta
-
-	X			= cos(L);
-	Y			= cos(ECLIPTIC_OBL) * sin(L);
-	Z			= sin(ECLIPTIC_OBL) * sin(L);
-	R			= sqrt(1.0 - Z*Z); 
-
-	DEC			= atan2(Z, R);
-	RA			= 2.0 * atan2(Y, (X + R));
-
-
-	//-----------------------------------------------------
-	// 4. compute sidereal time (degree) at Greenwich local sidereal time at longitude (Degree)
-
-	theta		= LON + M_DEG_TO_RAD * (280.46061837 + 360.98564736629 * (JD - 2451545.0) + T*T * (0.000387933 - T / 38710000.0));
-
-
-	//-----------------------------------------------------
-	// 5. compute local hour angle (degree)
-
-	tau			= theta - RA;
-
-
-	//-----------------------------------------------------
-	// 6. convert (tau, delta) to horizon coordinates (h, az) of the observer
-
-	Declination	= asin ( sin(LAT) * sin(DEC) + cos(LAT) * cos(DEC) * cos(tau) );
-
-	Azimuth		= atan2( -sin(tau) * cos(DEC), cos(LAT) * sin(DEC) - sin(LAT) * cos(DEC) * cos(tau) );
-//	Azimuth		= atan2( -sin(Tau), cos(LAT) * tan(DEC) - sin(LAT) * cos(Tau) );	// previous formula gives same result but is better because of division by zero effects...
-
-	return( Declination > 0.0 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-/*/---------------------------------------------------------
-#define CHECK_SHADOW(X, Y)	if( (d = SG_Get_Distance(x, y, X, Y) * Get_Cellsize()) > 0.0 )\
-							{\
-								if( (t = (m_pDEM->asDouble(X, Y) - z) / d) > tMax )\
-								{\
-									tMax	= t;\
-								}\
-								\
-								if( (d = zMax / d) < tanDec || d < tMax )\
-								{\
-									return( false );\
-								}\
-								else if( tMax > tanDec )\
-								{\
-									return( true );\
-								}\
-							}
-
-//---------------------------------------------------------
-bool CSADO_SolarRadiation::Get_Solar_Shadow(int x, int y, double Decline, double Azimuth)
-{
-	static double	Zenith	= 89.9999 * M_DEG_TO_RAD;
-
-	//-----------------------------------------------------
-	if( Decline >= Zenith || Decline > m_Slope.Get_ZMax() )
-	{
-		return( false );
-	}
-
-	if( Decline <= 0.0 )
-	{
-		return( true );
-	}
-
-	//-----------------------------------------------------
-	bool	bGo;
-	int		dx, nx, ix, iy, iy_Last, jy;
-	double	dy, d, t, tMax, z, zMax, tanDec;
-
-	//-----------------------------------------------------
-	Azimuth	= fmod(Azimuth, M_PI_360);	if( Azimuth < 0.0 )	Azimuth	+= M_PI_360;
-
-	if( Azimuth < M_PI_180 )
-	{
-		dx	= 1;
-		nx	= Get_NX() - 1;
-	}
-	else
-	{
-		dx	= -1;
-		nx	= 0;
-	}
-
-	Azimuth	= M_PI_090 - Azimuth;
-
-	if(		 Azimuth	==  M_PI_090 )
-			 Azimuth	=   89.9999 * M_DEG_TO_RAD;
-	else if( Azimuth	== -M_PI_090 )
-			 Azimuth	= - 89.9999 * M_DEG_TO_RAD;
-	else if( Azimuth	== -M_PI_180 )
-			 Azimuth	= -179.9999 * M_DEG_TO_RAD;
-	else if( Azimuth	== -M_PI_270)
-			 Azimuth	= -269.9999 * M_DEG_TO_RAD;
-
-	dy		= tan(Azimuth);
-
-	//-----------------------------------------------------
-	z		= m_pDEM->asDouble(x, y);
-	zMax	= m_pDEM->Get_ZMax();
-	tanDec	= tan(Decline);
-	tMax	= 0.0;
-  
-	//-----------------------------------------------------
-	for(ix=x, iy=y, bGo=true; ix!=nx && bGo; ix+=dx)
-	{
-		iy_Last	= iy;
-		iy		= y + (int)floor(dy * (ix - x + (dx > 0 ? 0.5 : -0.5)));
-
-		if( iy < 0 )
-		{
-			bGo	= false;
-			iy	= 0;
-		}
-		else if( iy >= Get_NY() )
-		{
-			bGo	= false;
-			iy	= Get_NY() - 1;
-		}
-
-		//-------------------------------------------------
-		if( iy_Last < iy )
-		{
-			for(jy=iy_Last+1; jy<=iy; jy++)
-			{
-				CHECK_SHADOW(ix, jy);
-			}
-		}
-		else if( iy_Last > iy )
-		{
-			for(jy=iy_Last; jy>iy; jy--)
-			{
-				CHECK_SHADOW(ix, jy);
-			}
-		}
-		else if( iy_Last == iy ) 
-		{
-			CHECK_SHADOW(ix, iy);
-		}
-	}
-
-	return( false );
-}/**/
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.h b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.h
deleted file mode 100644
index c3a2db1..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SADO_SolarRadiation.h
+++ /dev/null
@@ -1,135 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                     ta_lighting                       //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                 SADO_SolarRadiation.h                 //
-//                                                       //
-//                 Copyright (C) 2006 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__SADO_SolarRadiation_H
-#define HEADER_INCLUDED__SADO_SolarRadiation_H
-
-//---------------------------------------------------------
-#include "MLB_Interface.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class ta_lighting_EXPORT CSADO_SolarRadiation : public CSG_Module_Grid
-{
-public:
-	CSADO_SolarRadiation(void);
-	virtual ~CSADO_SolarRadiation(void);
-
-//	virtual const SG_Char *	Get_MenuPath			(void)	{	return( _TL("R:Lighting") );	}
-
-
-protected:
-
-	virtual bool			On_Execute				(void);
-
-
-private:
-
-	bool					m_bMoment, m_bHorizon, m_bBending,
-							m_bUpdateDirect, m_bUpdateDiffus, m_bUpdateTotal;
-
-	int						m_Day_A, m_Day_B, m_dDays;
-
-	double					m_Solar_Const, m_Atmosphere, m_VP, m_Latitude, m_Hour, m_dHour;
-
-	CSG_Grid					*m_pDEM, *m_pVP, *m_pSumDirect, *m_pSumDiffus, *m_pSumTotal,
-							m_TmpDirect, m_TmpDiffus, m_TmpTotal,
-							m_Slope, m_Aspect, m_Shade, m_Lat, m_Lon, m_Decline, m_Azimuth;
-
-
-	bool					Initialise				(void);
-	bool					Finalise				(double SumFactor = 1.0);
-
-	bool					Get_Insolation			(void);
-	bool					Get_Insolation			(int Day, double Hour);
-
-	double					Get_Vapour_Exponent		(double VapourPressure);
-	double					Get_Vapour_A			(double VapourPressure);
-	bool					Set_Insolation			(double Decline, double Azimuth);
-
-	double					Get_Solar_Reduction		(double Elevation, double Decline, double Reduction);
-	double					Get_Solar_Direct		(int x, int y, double Decline, double Azimuth, double Exponent);
-	double					Get_Solar_Diffus		(int x, int y, double Decline, double A      , double Exponent);
-
-	bool					Get_Shade				(double Azimuth, double Decline);
-	void					Set_Shade				(int x, int y, double dx, double dy, double dz);
-	void					Set_Shade_Bended		(int x, int y, char iLock);
-	bool					Get_Shade_Complete		(int x, int y);
-	void					Get_Shade_Params		(double Decline, double Azimuth, double &dx, double &dy, double &dz);
-
-	bool					Get_Solar_Position		(int Day, double Hour, double Lat, double Lon, double &Dec, double &Azi);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__SADO_SolarRadiation_H
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp
index 1778b39..029ef06 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.cpp
@@ -59,7 +59,6 @@
 
 //---------------------------------------------------------
 #include "SolarRadiation.h"
-#include "HillShade.h"
 
 
 ///////////////////////////////////////////////////////////
@@ -71,236 +70,339 @@
 //---------------------------------------------------------
 CSolarRadiation::CSolarRadiation(void)
 {
-	CSG_Parameter	*pNode_0, *pNode_1, *pNode_2;
+	CSG_Parameter	*pNode_1, *pNode_2, *pNode_3;
 
 	//-----------------------------------------------------
-	Set_Name(_TL("Incoming Solar Radiation"));
+	Set_Name		(_TL("Potential Incoming Solar Radiation"));
 
-	Set_Author		(SG_T("(c) 2001 by O.Conrad"));
+	Set_Author		(SG_T("O.Conrad (c) 2010"));
 
 	Set_Description	(_TW(
-		"Calculation of the potential incoming solar radiation.\n\n"
-		"Reference:\n"
-		"- Wilson, J.P., Gallant, J.C., (Eds.), 2000:\n"
-		"    'Terrain analysis - principles and applications',\n"
-		"    New York, John Wiley & Sons, Inc.")
-	);
+		"Calculation of potential incoming solar radiation (insolation).\n"
+		"\n"
+		"References:\n<ul>"
+		"<li>Boehner, J., Antonic, O. (2009): Land Surface Parameters Specific to Topo-Climatology. in Hengl, T. & Reuter, H.I. [Eds.]: Geomorphometry - Concepts, Software, Applications.</li>"
+		"<li>Oke, T.R. (1988): Boundary Layer Climates. London, Taylor & Francis.</li>"
+		"<li>Wilson, J.P., Gallant, J.C. [Eds.] (2000): Terrain Analysis - Principles and Applications. New York, John Wiley & Sons, Inc.</li>"
+		"</ul>\n"
 
+		"\n*) Most options should do well, but TAPES-G based diffuse irradiance calculation ('Atmospheric Effects' methods 2 and 3) needs further revision!"
+	));
 
 	//-----------------------------------------------------
-	pNode_0	= Parameters.Add_Grid(
-		NULL	, "ELEVATION"	, _TL("Elevation"),
+	Parameters.Add_Grid(
+		NULL	, "GRD_DEM"			, _TL("Elevation"),
 		_TL(""),
 		PARAMETER_INPUT
 	);
 
+	Parameters.Add_Grid(
+		NULL	, "GRD_SVF"			, _TL("Sky View Factor"),
+		_TL(""),
+		PARAMETER_INPUT_OPTIONAL
+	);
 
-	//-----------------------------------------------------
-	pNode_0	= Parameters.Add_Grid(
-		NULL	, "INSOLAT"		, _TL("Solar Radiation"),
+	Parameters.Add_Grid(
+		NULL	, "GRD_VAPOUR"		, _TL("Water Vapour Pressure [mbar]"),
 		_TL(""),
-		PARAMETER_OUTPUT
+		PARAMETER_INPUT_OPTIONAL
 	);
 
-	pNode_1	= Parameters.Add_Value(
-		pNode_0	, "UPDATE"		, _TL("Update View"),
-		_TL("Show each time step during calculation."),
-		PARAMETER_TYPE_Bool		, true
+	Parameters.Add_Grid(
+		NULL	, "GRD_LAT"			, _TL("Latitude [degree]"),
+		_TL(""),
+		PARAMETER_INPUT_OPTIONAL
 	);
 
-	pNode_1	= Parameters.Add_Choice(
-		pNode_0	, "UNIT"		, _TL("Unit"),
+	Parameters.Add_Grid(
+		NULL	, "GRD_LON"			, _TL("Longitude [degree]"),
 		_TL(""),
+		PARAMETER_INPUT_OPTIONAL
+	);
 
-		CSG_String::Format(SG_T("%s|%s|"),
-			_TL("kWh/m\xc2\xb2"),
-			_TL("J/m\xc2\xb2")
-		), 0
+	Parameters.Add_Grid(
+		NULL	, "GRD_DIRECT"		, _TL("Direct Insolation"),
+		_TL(""),
+		PARAMETER_OUTPUT
 	);
 
 	Parameters.Add_Grid(
-		NULL	, "DURATION"	, _TL("Duration of Insolation"),
+		NULL	, "GRD_DIFFUS"		, _TL("Diffuse Insolation"),
 		_TL(""),
 		PARAMETER_OUTPUT
 	);
 
 	Parameters.Add_Grid(
-		NULL	, "SUNRISE"		, _TL("Sunrise"),
-		_TL("time of sunrise/sunset is only calculated if time span is set to single day"),
+		NULL	, "GRD_TOTAL"		, _TL("Total Insolation"),
+		_TL("Total insolation, the sum of direct and diffuse incoming solar radiation."),
+		PARAMETER_OUTPUT_OPTIONAL
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "GRD_RATIO"		, _TL("Direct to Diffuse Ratio"),
+		_TL(""),
 		PARAMETER_OUTPUT_OPTIONAL
 	);
 
 	Parameters.Add_Grid(
-		NULL	, "SUNSET"		, _TL("Sunset"),
+		NULL	, "DURATION"		, _TL("Duration of Insolation"),
+		_TL(""),
+		PARAMETER_OUTPUT_OPTIONAL
+	);
+
+	Parameters.Add_Grid(
+		NULL	, "SUNRISE"			, _TL("Sunrise"),
 		_TL("time of sunrise/sunset is only calculated if time span is set to single day"),
 		PARAMETER_OUTPUT_OPTIONAL
 	);
 
+	Parameters.Add_Grid(
+		NULL	, "SUNSET"			, _TL("Sunset"),
+		_TL("time of sunrise/sunset is only calculated if time span is set to single day"),
+		PARAMETER_OUTPUT_OPTIONAL
+	);
 
 	//-----------------------------------------------------
-	pNode_0	= Parameters.Add_Node(
-		NULL	, "NODE_SOLAR"	, _TL("Solar Radiation"),
-		_TL("")
+	Parameters.Add_Value(
+		NULL	, "SOLARCONST"		, _TL("Solar Constant [W / m\xb2]"),
+		_TL(""),
+		PARAMETER_TYPE_Double		, 1367.0, 0.0, true
 	);
 
-	pNode_1	= Parameters.Add_Value(
-		pNode_0	, "SOLCONST"	, _TL("Solar Constant [W/m\xc2\xb2]"),
-		_TL(""),
-		PARAMETER_TYPE_Double	, 1367
+	Parameters.Add_Value(
+		NULL	, "LOCALSVF"		, _TL("Local Sky View Factor"),
+		_TL("Use sky view factor based on local slope (after Oke 1988), if no sky viev factor grid is given."),
+		PARAMETER_TYPE_Bool			, true
 	);
 
-	pNode_1	= Parameters.Add_Choice(
-		pNode_0	, "METHOD"		, _TL("Atmospheric Effects"),
-		_TL("Account for atmospheric effects using either a lumped atmospheric transmittance approach or by calculating the components (water and dust)."),
+	Parameters.Add_Choice(
+		NULL	, "UNITS"			, _TL("Units"),
+		_TL("Units for output radiation values."),
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			SG_T("kWh / m\xb2"),
+			SG_T("kJ / m\xb2"),
+			SG_T("J / cm\xb2")
+		), 0
+	);
 
-		CSG_String::Format(SG_T("%s|%s|"),
-			_TL("Lumped atmospheric transmittance"),
-			_TL("Calculating the components")
+	Parameters.Add_Choice(
+		NULL	, "UPDATE"			, _TL("Update"),
+		_TL("show direct insolation for each time step."),
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			_TL("do not update"),
+			_TL("update, colour stretch for each time step"),
+			_TL("update, fixed colour stretch")
 		), 0
 	);
 
-	pNode_1	= Parameters.Add_Value(
-		pNode_0	, "TRANSMITT"	, _TL("Lumped Transmittance [%]"),
-		_TL("The transmittance of the atmosphere (usually between 60 and 80%)"),
-		PARAMETER_TYPE_Double	, 70,
-		0.0		, true,
-		100.0	, true
+	//-----------------------------------------------------
+	pNode_1	= Parameters.Add_Node(
+		NULL	, "NODE_TIME"		, _TL("Time"),
+		_TL("")
 	);
 
-	pNode_1	= Parameters.Add_Value(
-		pNode_0	, "PRESSURE"	, _TL("Atmospheric Pressure [mb]"),
+	Parameters.Add_Choice(
+		pNode_1	, "PERIOD"			, _TL("Time Period"),
 		_TL(""),
-		PARAMETER_TYPE_Double	, 1013,
-		0.0		, true
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			_TL("moment"),
+			_TL("day"),
+			_TL("range of days")
+		), 1
 	);
 
-	pNode_1	= Parameters.Add_Value(
-		pNode_0	, "WATER"		, _TL("Water Content [cm]"),
-		_TL("Water content of a vertical slice of atmosphere in cm: 1.5 to 1.7, average=1.68"),
-		PARAMETER_TYPE_Double	, 1.68,
-		0.0		, true
+	Parameters.Add_Value(
+		pNode_1	, "MOMENT"			, _TL("Moment [h]"),
+		_TL(""),
+		PARAMETER_TYPE_Double		, 12.0, 0.0, true, 24.0, true
 	);
 
-	pNode_1	= Parameters.Add_Value(
-		pNode_0	, "DUST"		, _TL("Dust [ppm]"),
-		_TL("Dust factor: 100 ppm (standard)"),
-		PARAMETER_TYPE_Double	, 100,
-		0.0		, true
+	Parameters.Add_Range(
+		pNode_1	, "HOUR_RANGE"		, _TL("Time Span [h]"),
+		_TL("Time span used for the calculation of daily radiation sums."),
+		 0.0, 24.0, 0.0	, true, 24.0, true
 	);
 
-	pNode_1	= Parameters.Add_Value(
-		pNode_0	, "LATITUDE"	, _TL("Latitude [Degree]"),
-		_TL(""),
-		PARAMETER_TYPE_Double	, 53.5,
-		-90.0	, true,
-		90.0	, true
+	Parameters.Add_Value(
+		pNode_1	, "DHOUR"			, _TL("Time Resolution [h]: Day"),
+		_TL("Time step size for a day's calculation given in hours."),
+		PARAMETER_TYPE_Double		, 0.5, 0.0, true, 24.0, true
 	);
 
+	Parameters.Add_Value(
+		pNode_1	, "DDAYS"			, _TL("Time Resolution [d]: Range of Days"),
+		_TL("Time step size for a range of days calculation given in days."),
+		PARAMETER_TYPE_Int			, 5, 1, true
+	);
 
 	//-----------------------------------------------------
-	// Daily Time Resolution...
-
-	pNode_0	= Parameters.Add_Node(
-		NULL	, "NODE_HOUR"	, _TL("Daily Time Resolution"),
+	pNode_2	= Parameters.Add_Node(
+		pNode_1	, "NODE_DAY_A"		, _TL("Day of Year"),
 		_TL("")
 	);
 
-	pNode_1	= Parameters.Add_Range(
-		pNode_0	, "HOUR_RANGE"	, _TL("Time Span [h]"),
-		_TL("Time span used for the calculation of daily radiation sums."),
-		 0.0	, 24.0,
-		 0.0	, true,
-		24.0	, true
+	Parameters.Add_Choice(
+		pNode_2	, "DAY_A"			, _TL("Day of Month"),
+		_TL(""),
+		SG_T("1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|"), 20
+	);
+
+	Parameters.Add_Choice(
+		pNode_2	, "MON_A"			, _TL("Month"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|"),
+			_TL("January")	, _TL("February")	, _TL("March")		, _TL("April")	, _TL("May")		, _TL("June"),
+			_TL("July")		, _TL("August")		, _TL("September")	, _TL("October"), _TL("November")	, _TL("December")
+		), 2
 	);
 
-	pNode_1	= Parameters.Add_Value(
-		pNode_0	, "HOUR_STEP"	, _TL("Time Step [h]"),
-		_TL("Time step size used for the calculation of daily radiation sums."),
-		PARAMETER_TYPE_Double	, 1.0,
-		0.001	, true,
-		12.0	, true
+	pNode_2	= Parameters.Add_Node(
+		pNode_1	, "NODE_DAY_B"		, _TL("Day of Year (End of Range)"),
+		_TL("")
+	);
+
+	Parameters.Add_Choice(
+		pNode_2	, "DAY_B"			, _TL("Day of Month"),
+		_TL(""),
+		SG_T("1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|"), 20
 	);
 
+	Parameters.Add_Choice(
+		pNode_2	, "MON_B"			, _TL("Month"),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|"),
+			_TL("January")	, _TL("February")	, _TL("March")		, _TL("April")	, _TL("May")		, _TL("June"),
+			_TL("July")		, _TL("August")		, _TL("September")	, _TL("October"), _TL("November")	, _TL("December")
+		), 3
+	);
 
 	//-----------------------------------------------------
-	// Time Settings...
+	pNode_1	= Parameters.Add_Node(
+		NULL	, "NODE_METHOD"		, _TL("Atmospheric Effects"),
+		_TL("")
+	);
 
-	pNode_0	= Parameters.Add_Choice(
-		NULL	, "TIMESPAN"	, _TL("Simulation Time"),
+	Parameters.Add_Choice(
+		pNode_1	, "METHOD"			, _TL("Atmospheric Effects"),
 		_TL(""),
-
 		CSG_String::Format(SG_T("%s|%s|%s|"),
-			_TL("Single Day"),
-			_TL("Range of Days"),
-			_TL("One Year")
+			_TL("Height of Atmosphere and Vapour Pressure"),
+			_TL("Air Pressure, Water and Dust Content"),
+			_TL("Lumped Atmospheric Transmittance")
 		), 0
 	);
 
-	//-----------------------------------------------------
-	pNode_1	= Parameters.Add_Node(
-		pNode_0	, "NODE_SINGLE_DAY"		, _TL("Single Day"),
+	pNode_2	= Parameters.Add_Node(
+		pNode_1	, "NODE_SADO"		, _TL("Height of Atmosphere and Vapour Pressure"),
 		_TL("")
 	);
 
-	pNode_2	= Parameters.Add_Choice(
-		pNode_1	, "SINGLE_DAY_DAY"		, _TL("Day"),
+	Parameters.Add_Value(
+		pNode_2	, "ATMOSPHERE"		, _TL("Height of Atmosphere [m]"),
 		_TL(""),
+		PARAMETER_TYPE_Double		, 12000.0, 0.0, true
+	);
 
-		SG_T("  1|  2|  3|  4|  5|  6|  7|  8|  9| 10|")
-		SG_T(" 11| 12| 13| 14| 15| 16| 17| 18| 19| 20|")
-		SG_T(" 21| 22| 23| 24| 25| 26| 27| 28| 29| 30|")
-		SG_T(" 31|"), 20
+	Parameters.Add_Value(
+		pNode_2	, "VAPOUR"			, _TL("Water Vapour Pressure [mbar]"),
+		_TL("This value is used as constant if no vapour pressure grid is given."),
+		PARAMETER_TYPE_Double		, 10, 0.0, true
 	);
 
-	pNode_2	= Parameters.Add_Choice(
-		pNode_1	, "SINGLE_DAY_MONTH"	, _TL("Month"),
+	//-----------------------------------------------------
+	pNode_2	= Parameters.Add_Node(
+		pNode_1	, "NODE_COMPONENTS"	, _TL("Air Pressure, Water and Dust Content"),
+		_TL("")
+	);
+
+	Parameters.Add_Value(
+		pNode_2	, "PRESSURE"		, _TL("Atmospheric Pressure [mbar]"),
 		_TL(""),
+		PARAMETER_TYPE_Double, 1013, 0.0, true
+	);
 
-		CSG_String::Format(SG_T("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|"),
-			_TL("January"),
-			_TL("February"),
-			_TL("March"),
-			_TL("April"),
-			_TL("May"),
-			_TL("June"),
-			_TL("July"),
-			_TL("August"),
-			_TL("September"),
-			_TL("October"),
-			_TL("November"),
-			_TL("December")
-		), 2
+	Parameters.Add_Value(
+		pNode_2	, "WATER"			, _TL("Water Content [cm]"),
+		_TL("Water content of a vertical slice of atmosphere in cm: 1.5 to 1.7, average=1.68"),
+		PARAMETER_TYPE_Double, 1.68, 0.0, true
 	);
 
+	Parameters.Add_Value(
+		pNode_2	, "DUST"			, _TL("Dust [ppm]"),
+		_TL("Dust factor: 100 ppm (standard)"),
+		PARAMETER_TYPE_Double, 100, 0.0, true
+	);
 
 	//-----------------------------------------------------
-	// Range of Days...
+	pNode_2	= Parameters.Add_Node(
+		pNode_1	, "NODE_LUMPED"		, _TL("Lumped Atmospheric Transmittance"),
+		_TL("")
+	);
+
+	Parameters.Add_Value(
+		pNode_2	, "LUMPED"			, _TL("Lumped Atmospheric Transmittance [Percent]"),
+		_TL("The transmittance of the atmosphere, usually between 60 and 80 percent."),
+		PARAMETER_TYPE_Double, 70, 0.0, true, 100.0, true
+	);
 
+	//-----------------------------------------------------
 	pNode_1	= Parameters.Add_Node(
-		pNode_0	, "NODE_DAY_RANGE"		, _TL("Range of Days"),
-		_TL("")
+		NULL	, "NODE_LOCATION"	, _TL("Location"),
+		_TL("Location settings to be used, if no latitude/longitude grids are given.")
 	);
 
-	pNode_2	= Parameters.Add_Range(
-		pNode_1	, "DAY_RANGE"			, _TL("Time Span [day of year]"),
+	Parameters.Add_Value(
+		pNode_1	, "LATITUDE"		, _TL("Latitude"),
 		_TL(""),
-		   1	, 31,
-		-365	, true,
-		 366	, true
+		PARAMETER_TYPE_Degree		, 53.0, -90.0, true, 90.0, true
 	);
 
 	pNode_2	= Parameters.Add_Value(
-		pNode_1	, "DAY_STEP"			, _TL("Time Step [number of days]"),
+		pNode_1	, "BENDING"			, _TL("Planetery Bending"),
 		_TL(""),
-		PARAMETER_TYPE_Int, 5,
-		1		, true,
-		100		, true
+		PARAMETER_TYPE_Bool			, false
 	);
-}
 
-//---------------------------------------------------------
-CSolarRadiation::~CSolarRadiation(void)
-{}
+	Parameters.Add_Value(
+		pNode_2	, "RADIUS"			, _TL("Planetary Radius"),
+		_TL(""),
+		PARAMETER_TYPE_Double		, 6366737.96, 0.0, true
+	);
+
+	pNode_3	= Parameters.Add_Choice(
+		pNode_2	, "LAT_OFFSET"		, _TL("Latitude relates to grid's..."),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
+			_TL("bottom"),
+			_TL("center"),
+			_TL("top"),
+			_TL("user defined reference")
+		), 3
+	);
+
+	Parameters.Add_Value(
+		pNode_3	, "LAT_REF_USER"	, _TL("Latitude (user defined reference)"),
+		_TL(""),
+		PARAMETER_TYPE_Double		, 0.0
+	);
+
+	pNode_3	= Parameters.Add_Choice(
+		pNode_2	, "LON_OFFSET"		, _TL("Local time relates to grid's..."),
+		_TL(""),
+		CSG_String::Format(SG_T("%s|%s|%s|%s|"),
+			_TL("left"),
+			_TL("center"),
+			_TL("right"),
+			_TL("user defined reference")
+		), 1
+	);
+
+	Parameters.Add_Value(
+		pNode_3	, "LON_REF_USER"	, _TL("Local Time (user defined reference)"),
+		_TL(""),
+		PARAMETER_TYPE_Double		, 0.0
+	);
+}
 
 
 ///////////////////////////////////////////////////////////
@@ -312,94 +414,193 @@ CSolarRadiation::~CSolarRadiation(void)
 //---------------------------------------------------------
 bool CSolarRadiation::On_Execute(void)
 {
-	static const int	Month2Day[12]	= {	0, 31, 49, 80, 109, 140, 170, 201, 232, 272, 303, 333 };
-
-	//-----------------------------------------------------
-	int			Day_Step, Day_Start, Day_Stop;
-	double		Latitude, Hour_Step, Hour_Start, Hour_Stop;
-	CSG_Colors	Colors;
+	int		x, y;
 
 	//-----------------------------------------------------
-	m_pDTM			= Parameters("ELEVATION")	->asGrid();
-	m_pRadiation	= Parameters("INSOLAT")		->asGrid();
+	m_pDEM			= Parameters("GRD_DEM")		->asGrid();
+	m_pVapour		= Parameters("GRD_VAPOUR")	->asGrid();
+	m_pSVF			= Parameters("GRD_SVF")		->asGrid();
+
+	m_pDirect		= Parameters("GRD_DIRECT")	->asGrid();
+	m_pDiffus		= Parameters("GRD_DIFFUS")	->asGrid();
+	m_pTotal		= Parameters("GRD_TOTAL")	->asGrid();
+	m_pRatio		= Parameters("GRD_RATIO")	->asGrid();
 	m_pDuration		= Parameters("DURATION")	->asGrid();
 	m_pSunrise		= Parameters("SUNRISE")		->asGrid();
 	m_pSunset		= Parameters("SUNSET")		->asGrid();
 
-	m_SolarConstant	= Parameters("SOLCONST")	->asDouble() / 1000.0;	// [kW / m²]
+	m_bUpdate		= Parameters("UPDATE")		->asInt();
+
+	m_Solar_Const	= Parameters("SOLARCONST")	->asDouble() / 1000.0;	// >> [kW / m²]
+	m_bLocalSVF		= Parameters("LOCALSVF")	->asBool();
 
 	m_Method		= Parameters("METHOD")		->asInt();
-	m_Transmittance	= Parameters("TRANSMITT")	->asDouble() / 100.0;
+	m_Atmosphere	= Parameters("ATMOSPHERE")	->asDouble();
+	m_Vapour		= Parameters("VAPOUR")		->asDouble();
+	m_Transmittance	= Parameters("LUMPED")		->asDouble() / 100.0;	// percent to ratio
 	m_Pressure		= Parameters("PRESSURE")	->asDouble();
 	m_Water			= Parameters("WATER")		->asDouble();
 	m_Dust			= Parameters("DUST")		->asDouble();
 
-	Latitude		= Parameters("LATITUDE")	->asDouble() * M_DEG_TO_RAD;
-
-	Day_Step		= Parameters("DAY_STEP")	->asInt();
-	Hour_Step		= Parameters("HOUR_STEP")	->asDouble();
-	Hour_Start		= Parameters("HOUR_RANGE")	->asRange()->Get_LoVal();
-	Hour_Stop		= Parameters("HOUR_RANGE")	->asRange()->Get_HiVal();
+	m_Latitude		= Parameters("LATITUDE")	->asDouble() * M_DEG_TO_RAD;
+	m_bBending		= Parameters("BENDING")		->asBool();
 
-	//-----------------------------------------------------
-	m_pSum			= SG_Create_Grid(m_pDTM);
+	m_Time			= Parameters("PERIOD")		->asInt();
+	m_dHour			= Parameters("DHOUR")		->asDouble();
+	m_dDays			= Parameters("DDAYS")		->asInt();
 
 	//-----------------------------------------------------
-	switch( Parameters("TIMESPAN")->asInt() )
+	switch( m_Time )
 	{
-	case 0:	// single day...
-		Day_Start		= Parameters("SINGLE_DAY_MONTH")->asInt();
-		Day_Start		= Parameters("SINGLE_DAY_DAY")	->asInt() + (Day_Start >= 0 && Day_Start < 12 ? Month2Day[Day_Start] : 0);
-
-		if( m_pSunrise )	{	m_pSunrise->Assign_NoData();	DataObject_Set_Colors(m_pSunrise, 100, SG_COLORS_YELLOW_RED, false);	}
-		if( m_pSunset  )	{	m_pSunset ->Assign_NoData();	DataObject_Set_Colors(m_pSunset , 100, SG_COLORS_YELLOW_RED, true );	}
-
-		Execute_DailySum (Latitude, Hour_Step, Hour_Start, Hour_Stop, Day_Start);
+	case 0:	// moment
+		m_Hour_A		= Parameters("MOMENT")->asDouble();
+		m_Day_A			= Parameters("DAY_A")->asInt() + 1 + Get_Day_of_Year(Parameters("MON_A")->asInt());
 		break;
 
-	case 1:	// range of days...
-		Day_Start		= (int)Parameters("DAY_RANGE")	->asRange()->Get_LoVal() - 1;
-		Day_Stop		= (int)Parameters("DAY_RANGE")	->asRange()->Get_HiVal() - 1;
-
-		Execute_SumOfDays(Latitude, Hour_Step, Hour_Start, Hour_Stop, Day_Step, Day_Start, Day_Stop);
+	case 1:	// day
+		m_Hour_A		= Parameters("HOUR_RANGE")->asRange()->Get_LoVal();
+		m_Hour_B		= Parameters("HOUR_RANGE")->asRange()->Get_HiVal();
+		m_Day_A			= Parameters("DAY_A")->asInt() + 1 + Get_Day_of_Year(Parameters("MON_A")->asInt());
+		m_Day_B			= m_Day_A;
 		break;
 
-	case 2:	// one year...
-		Day_Start		= -10;	// winter solstitute...
-		Day_Stop		= 173;	// until half year has passed...
-
-		Execute_SumOfDays(Latitude, Hour_Step, Hour_Start, Hour_Stop, Day_Step, Day_Start, Day_Stop);
+	case 2:	// range of days
+		m_Hour_A		= Parameters("HOUR_RANGE")->asRange()->Get_LoVal();
+		m_Hour_B		= Parameters("HOUR_RANGE")->asRange()->Get_HiVal();
+		m_Day_A			= Parameters("DAY_A")->asInt() + 1 + Get_Day_of_Year(Parameters("MON_A")->asInt());
+		m_Day_B			= Parameters("DAY_B")->asInt() + 1 + Get_Day_of_Year(Parameters("MON_B")->asInt());
 
-		*m_pRadiation	*= 2.0;	// two times...
-		*m_pDuration	*= 2.0;	// two times...
+		if( m_Day_B < m_Day_A )
+		{
+			m_Day_B	+= 365;
+		}
 		break;
 	}
 
 	//-----------------------------------------------------
-	delete( m_pSum );
+	CSG_Colors	Colors(100, SG_COLORS_YELLOW_RED, true);
 
-	Colors.Set_Count(100);
 	Colors.Set_Ramp(SG_GET_RGB(  0,   0,  64), SG_GET_RGB(255, 159,   0),  0, 50);
 	Colors.Set_Ramp(SG_GET_RGB(255, 159,   0), SG_GET_RGB(255, 255, 255), 50, 99);
 
-	DataObject_Set_Colors(m_pRadiation, Colors);
-	DataObject_Set_Colors(m_pDuration , Colors);
+	DataObject_Set_Colors(m_pDirect  , Colors);
+	DataObject_Set_Colors(m_pDiffus  , Colors);
+	DataObject_Set_Colors(m_pTotal   , Colors);
+	DataObject_Set_Colors(m_pRatio   , 100, SG_COLORS_RED_GREY_BLUE	, true);
+	DataObject_Set_Colors(m_pDuration, 100, SG_COLORS_YELLOW_RED	, true);
+	DataObject_Set_Colors(m_pSunrise , 100, SG_COLORS_YELLOW_RED	, false);
+	DataObject_Set_Colors(m_pSunset  , 100, SG_COLORS_YELLOW_RED	, true);
+
+	//-----------------------------------------------------
+	if( m_pDuration )	m_pDuration->Assign_NoData();
+	if( m_pSunrise  )	m_pSunrise ->Assign_NoData();
+	if( m_pSunset   )	m_pSunset  ->Assign_NoData();
+
+	if( m_pDuration )	m_pDuration->Set_Unit(_TL("h"));
+	if( m_pSunrise  )	m_pSunrise ->Set_Unit(_TL("h"));
+	if( m_pSunset   )	m_pSunset  ->Set_Unit(_TL("h"));
+
+	//-----------------------------------------------------
+	Process_Set_Text(_TL("initialising gradient..."));
 
-	m_pDuration->Set_Unit(_TL("h"));
+	m_Shade .Create(*Get_System(), SG_DATATYPE_Byte);
+	m_Slope .Create(*Get_System(), SG_DATATYPE_Float);
+	m_Aspect.Create(*Get_System(), SG_DATATYPE_Float);
 
-	if( Parameters("UNIT")->asInt() == 1 )	// Joule...
+	for(y=0; y<Get_NY() && Set_Progress(y); y++)
 	{
-		*m_pRadiation	*= 10.0 / 36.0;	// 1 J = 1 Ws = 1/(60*60) Wh = 1/3600 Wh >> 1 J = 1000/3600 kWh = 10/36 kWh
+		for(x=0; x<Get_NX(); x++)
+		{
+			double	s, a;
 
-		m_pRadiation->Set_Unit(_TL("J/m\xc2\xb2"));
+			if( m_pDEM->Get_Gradient(x, y, s, a) )
+			{
+				m_Slope .Set_Value(x, y, s);
+				m_Aspect.Set_Value(x, y, a);
+			}
+			else
+			{
+				m_Slope .Set_NoData(x, y);
+				m_Aspect.Set_NoData(x, y);
+			}
+		}
 	}
-	else
+
+	//-----------------------------------------------------
+	if( m_bBending )
 	{
-		m_pRadiation->Set_Unit(_TL("kWh/m\xc2\xb2"));
+		Process_Set_Text(_TL("initialising planetary bending..."));
+
+		m_Lat			.Create(*Get_System(), SG_DATATYPE_Float);
+		m_Lon			.Create(*Get_System(), SG_DATATYPE_Float);
+		m_Sol_Height	.Create(*Get_System(), SG_DATATYPE_Float);
+		m_Sol_Azimuth	.Create(*Get_System(), SG_DATATYPE_Float);
+
+		//-------------------------------------------------
+		if( Parameters("GRD_LAT")->asGrid() || Parameters("GRD_LON")->asGrid() )
+		{
+			if( Parameters("GRD_LAT")->asGrid() )
+			{
+				m_Lat	= *Parameters("GRD_LAT")->asGrid();
+				m_Lat	*= M_DEG_TO_RAD;
+			}
+
+			if( Parameters("GRD_LON")->asGrid() )
+			{
+				m_Lon	= *Parameters("GRD_LON")->asGrid();
+				m_Lon	*= M_DEG_TO_RAD;
+			}
+		}
+
+		//-------------------------------------------------
+		else
+		{
+			double	d, dx, dy, dxA, dyA;
+
+			d	= M_DEG_TO_RAD / (Parameters("RADIUS")->asDouble() * M_PI / 180.0);
+
+			switch( Parameters("LON_OFFSET")->asInt() )
+			{
+			case 0:	dxA	= Get_System()->Get_Extent().Get_XMin();	break;	// left
+			case 1:	dxA	= Get_System()->Get_Extent().Get_XCenter();	break;	// center
+			case 2:	dxA	= Get_System()->Get_Extent().Get_XMax();	break;	// right
+			case 3:	dxA	= Parameters("LON_REF_USER")->asDouble();	break;	// user defined coordinate
+			}
+
+			switch( Parameters("LAT_OFFSET")->asInt() )
+			{
+			case 0:	dyA	= Get_System()->Get_Extent().Get_YMin();	break;	// bottom
+			case 1:	dyA	= Get_System()->Get_Extent().Get_YCenter();	break;	// center
+			case 2:	dyA	= Get_System()->Get_Extent().Get_YMax();	break;	// top
+			case 3:	dyA	= Parameters("LAT_REF_USER")->asDouble();	break;	// user defined coordinate
+			}
+
+			dxA	 = d * (Get_XMin() - dxA);
+			dyA	 = d * (Get_YMin() - dyA) + m_Latitude;
+			d	*= Get_Cellsize();
+
+			for(y=0, dy=dyA; y<Get_NY() && Set_Progress(y); y++, dy+=d)
+			{
+				for(x=0, dx=dxA; x<Get_NX(); x++, dx+=d)
+				{
+					m_Lat.Set_Value(x, y, dy);
+					m_Lon.Set_Value(x, y, dx);
+				}
+			}
+		}
 	}
 
 	//-----------------------------------------------------
-	return( true );
+	if( Get_Insolation() )
+	{
+		Finalise();
+
+		return( true );
+	}
+
+	Finalise();
+
+	return( false );
 }
 
 
@@ -410,264 +611,444 @@ bool CSolarRadiation::On_Execute(void)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-void CSolarRadiation::Execute_DailySum(double Latitude_RAD, double Hour_Step, double Hour_Start, double Hour_Stop, int Day)
+bool CSolarRadiation::Finalise(void)
 {
-	Get_DailySum(Latitude_RAD, Hour_Step, Hour_Start, Hour_Stop, Day);
+	double		dUnit;
+	CSG_String	Unit;
+
+	//-----------------------------------------------------
+	if( m_Time == 0 )	// moment
+	{
+		Unit	= SG_T("W / m\xb2");
+		dUnit	= 1000.0;
+	}
+	else switch( Parameters("UNITS")->asInt() )
+	{
+	case 0: default:	// [kWh / m2]
+		Unit	= SG_T("kWh / m\xb2");
+		dUnit	= 1.0;
+		break;
 
-	m_pRadiation->Assign(m_pSum);
+	case 1:				// [kJ / m2]
+		Unit	= SG_T("kJ / m\xb2");
+		dUnit	= 3.6;
+		break;
+
+	case 2:				// [Ws / cm2] = [J / cm2]
+		Unit	= SG_T("J / cm\xb2");
+		dUnit	= 360.0;
+		break;
+	}
+
+	//-----------------------------------------------------
+	m_pDirect->Set_Unit(Unit);
+	m_pDirect->Multiply(dUnit);
+
+	m_pDiffus->Set_Unit(Unit);
+	m_pDiffus->Multiply(dUnit);
+
+	if( m_pTotal )
+	{
+		m_pTotal->Assign(m_pDirect);
+		m_pTotal->Add  (*m_pDiffus);
+
+		m_pTotal->Set_Unit(Unit);
+	}
+
+	if( m_pRatio )
+	{
+		for(int i=0; i<Get_NCells(); i++)
+		{
+			if( m_pDEM->is_NoData(i) )
+			{
+				m_pRatio->Set_NoData(i);
+			}
+			else
+			{
+				if( m_pDiffus->asDouble(i) > 0.0 )
+				{
+					m_pRatio->Set_Value(i, m_pDirect->asDouble(i) / m_pDiffus->asDouble(i));
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	m_Shade			.Destroy();
+	m_Slope			.Destroy();
+	m_Aspect		.Destroy();
+
+	m_Lat			.Destroy();
+	m_Lon			.Destroy();
+	m_Sol_Height	.Destroy();
+	m_Sol_Azimuth	.Destroy();
+
+	//-----------------------------------------------------
+	return( true );
 }
 
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
 //---------------------------------------------------------
-void CSolarRadiation::Execute_SumOfDays(double Latitude_RAD, double Hour_Step, double Hour_Start, double Hour_Stop, int Day_Step, int Day_Start, int Day_Stop)
+bool CSolarRadiation::Get_Insolation(void)
 {
-	int		Day, nDays;
-	CSG_Grid	*pSumOfDays, *pDur_Total;
-
 	//-----------------------------------------------------
-	nDays	= Day_Stop - Day_Start;
+	if( m_Time == 0 )						// Moment
+	{
+		m_pDirect->Assign(0.0);
+		m_pDiffus->Assign(0.0);
+
+		Get_Insolation(m_Day_A, m_Hour_A);
+	}
 
-	if( nDays < 1 )
+	//-----------------------------------------------------
+	else if( m_Time == 1 )					// One Day
 	{
-		Execute_DailySum(Latitude_RAD, Hour_Step, Hour_Start, Hour_Stop, Day_Start);
+		Get_Insolation(m_Day_A);
 	}
 
 	//-----------------------------------------------------
-	else
+	else if( m_Day_B - m_Day_A <= m_dDays )	// Range of Days (one representative calculation)
 	{
-		pSumOfDays		= SG_Create_Grid(m_pDTM);
-		pDur_Total		= SG_Create_Grid(m_pDTM);
+		Get_Insolation(m_Day_A + m_dDays / 2);
 
-		if( Day_Step < 1 || Day_Step > nDays )
-		{
-			Day_Step		= 1;
-		}
+		m_pDirect->Multiply(m_Day_B - m_Day_A);
+		m_pDiffus->Multiply(m_Day_B - m_Day_A);
+	}
 
-		//-------------------------------------------------
-		for(Day=Day_Start; Day<Day_Stop && Set_Progress(Day - Day_Start, nDays); Day+=Day_Step)
-		{
-			Get_DailySum(Latitude_RAD, Hour_Step, Hour_Start, Hour_Stop, Day, false);
+	//-----------------------------------------------------
+	else									// Range of Days (more than one time step)
+	{
+		CSG_Grid	Direct, Diffus;
 
-			*m_pSum			*= Day_Step;
-			*pSumOfDays		+= *m_pSum;
+		Direct.Create(*Get_System(), SG_DATATYPE_Float);
+		Diffus.Create(*Get_System(), SG_DATATYPE_Float);
 
-			*m_pDuration	*= Day_Step;
-			*pDur_Total		+= *m_pDuration;
-		}
+		Direct.Assign(0.0);
+		Diffus.Assign(0.0);
 
-		if( (Day_Step = Day_Stop - Day) > 0 )	// Rest...
+		for(int Day=m_Day_A+m_dDays/2; Day<=m_Day_B && Process_Get_Okay(false); Day+=m_dDays)
 		{
-			Get_DailySum(Latitude_RAD, Hour_Step, Hour_Start, Hour_Stop, Day, false);
+			Get_Insolation(Day);
 
-			*m_pSum			*= Day_Step;
-			*pSumOfDays		+= *m_pSum;
+			SG_UI_Progress_Lock(true);
 
-			*m_pDuration	*= Day_Step;
-			*pDur_Total		+= *m_pDuration;
+			Direct.Add(*m_pDirect);
+			Diffus.Add(*m_pDiffus);
+
+			SG_UI_Progress_Lock(false);
 		}
 
-		//-------------------------------------------------
-		m_pRadiation	->Assign(pSumOfDays);
-		delete(pSumOfDays);
+		m_pDirect->Assign(&Direct);
+		m_pDiffus->Assign(&Diffus);
 
-		m_pDuration		->Assign(pDur_Total);
-		delete(pDur_Total);
+		m_pDirect->Multiply(m_dDays);
+		m_pDiffus->Multiply(m_dDays);
 	}
+
+	//-----------------------------------------------------
+	return( true );
 }
 
 
 ///////////////////////////////////////////////////////////
 //														 //
-//						Daily Sum						 //
-//														 //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-void CSolarRadiation::Get_DailySum(double Latitude_RAD, double Hour_Step, double Hour_Start, double Hour_Stop, int Day, bool bProgressBar)
+bool CSolarRadiation::Get_Insolation(int Day)
 {
-	bool		bNight;
-	double		time, Sol_Height, Sol_Azimuth, Solar_Angle, RDIRN, RDIFN, d;
-	CHillShade	HillShade;
+	//-----------------------------------------------------
+	double		Range	= 0.000001 + cos(M_DEG_TO_RAD * fabs(m_Latitude)) * sin(M_PI * ((80 + Day) % 365) / 365.0);
+	CSG_Grid	Direct;
+
+	if( m_bUpdate )
+	{
+		if( m_bUpdate == 2 )
+		{
+			DataObject_Update(m_pDirect, 0.0, Range, SG_UI_DATAOBJECT_SHOW);
+		}
+		else
+		{
+			DataObject_Update(m_pDirect, SG_UI_DATAOBJECT_SHOW);
+		}
+
+		Direct.Create(*Get_System(), SG_DATATYPE_Float);
+	}
 
 	//-----------------------------------------------------
-	Day			%= 366;
+	bool		bDay, bWasDay	= false;
+
+	m_pDirect->Assign(0.0);
+	m_pDiffus->Assign(0.0);
+
+	for(double Hour=m_Hour_A; Hour<=m_Hour_B && Set_Progress(Hour - m_Hour_A, m_Hour_B - m_Hour_A); Hour+=m_dHour)
+	{
+		Process_Set_Text(CSG_String::Format(SG_T("%s %d(%d-%d), %s %02d:%02d"), _TL("day"), Day, m_Day_A, m_Day_B, _TL("local time"), (int)Hour, (int)(60.0 * fmod(Hour, 1.0))));
+
+		SG_UI_Progress_Lock(true);
+
+		bDay	= Get_Insolation(Day, Hour);
+
+		if( m_bUpdate && (bDay || bWasDay) )
+		{
+			bWasDay	= bDay;
+
+			if( m_bUpdate == 2 )
+			{
+				DataObject_Update(m_pDirect, 0.0, Range, SG_UI_DATAOBJECT_SHOW);
+			}
+			else
+			{
+				DataObject_Update(m_pDirect, SG_UI_DATAOBJECT_SHOW);
+			}
+
+			if( bDay )
+			{
+				Direct	+= *m_pDirect;
+
+				m_pDirect->Assign(0.0);
+			}
+		}
+
+		SG_UI_Progress_Lock(false);
+	}
 
-	if( Day < 0 )
+	//-----------------------------------------------------
+	if( m_bUpdate )
 	{
-		Day		+= 366;
+		m_pDirect->Assign(&Direct);
 	}
 
-	Hour_Start	+= Hour_Step / 2.0;
+	m_pDirect->Multiply(m_dHour);
+	m_pDiffus->Multiply(m_dHour);
+
+	return( true );
+}
 
-	m_pSum		->Assign(0.0);
-	m_pDuration	->Assign(0.0);
 
-	HillShade.Get_Parameters()->Set_Parameter(SG_T("ELEVATION")		, PARAMETER_TYPE_Grid	, m_pDTM);
-	HillShade.Get_Parameters()->Set_Parameter(SG_T("SHADE")			, PARAMETER_TYPE_Grid	, m_pRadiation);
-	HillShade.Get_Parameters()->Set_Parameter(SG_T("METHOD")		, PARAMETER_TYPE_Choice	, 3);
-	HillShade.Get_Parameters()->Set_Parameter(SG_T("EXAGGERATION")	, PARAMETER_TYPE_Double	, 1.0);
-	HillShade.Set_Show_Progress(false);
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSolarRadiation::Get_Insolation(int Day, double Hour)
+{
+	double	Sol_Height, Sol_Azimuth;
 
 	//-----------------------------------------------------
-	for(time=Hour_Start, bNight=false; time<Hour_Stop && is_Progress(); time+=Hour_Step)
+	if( m_bBending )
 	{
-		Process_Set_Text(CSG_String::Format(_TL("%d. Day of Year, Local Time: %dh %02dm"), Day + 1, (int)time, (int)(60.0 * fmod(time, 1.0))));
+		bool	bDayLight	= false;
 
-		if( bProgressBar )
+		for(int y=0; y<Get_NY() && Set_Progress(y); y++)
 		{
-			Set_Progress(time, 24.0);
+			for(int x=0; x<Get_NX(); x++)
+			{
+				if( Get_Solar_Position(Day, Hour, m_Lat.asDouble(x, y), m_Lon.asDouble(x, y), Sol_Height, Sol_Azimuth) )
+				{
+					bDayLight	= true;
+				}
+
+				m_Sol_Height .Set_Value(x, y, Sol_Height);
+				m_Sol_Azimuth.Set_Value(x, y, Sol_Azimuth);
+			}
 		}
-		else
+
+		if( bDayLight )
 		{
-			Process_Get_Okay(false);
+			return( Get_Insolation(Sol_Height, Sol_Azimuth, Hour) );
 		}
+	}
 
-		//-------------------------------------------------
-		if( Get_SolarPosition(Day, time, Latitude_RAD, 0.0, Sol_Azimuth, Sol_Height, false) )
+	//-----------------------------------------------------
+	else
+	{
+		if( Get_Solar_Position(Day, Hour, m_Latitude, 0.0, Sol_Height, Sol_Azimuth) )
 		{
-			bNight	= false;
+			return( Get_Insolation(Sol_Height, Sol_Azimuth, Hour) );
+		}
+	}
+
+	//-----------------------------------------------------
+	return( false );
+}
+
 
-			HillShade.Get_Parameters()->Set_Parameter(SG_T("AZIMUTH")		, PARAMETER_TYPE_Double, (double)M_RAD_TO_DEG * Sol_Azimuth);
-			HillShade.Get_Parameters()->Set_Parameter(SG_T("DECLINATION")	, PARAMETER_TYPE_Double, (double)M_RAD_TO_DEG * Sol_Height);
-			HillShade.Execute();
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSolarRadiation::Get_Insolation(double Sol_Height, double Sol_Azimuth, double Hour)
+{
+	double	Direct, Diffus;
+
+	Get_Shade(Sol_Height, Sol_Azimuth);
 
-			for(int n=0; n<Get_NCells(); n++)
+	for(int y=0; y<Get_NY() && Set_Progress(y); y++)
+	{
+		for(int x=0; x<Get_NX(); x++)
+		{
+			if( m_pDEM->is_NoData(x, y) )
+			{
+				m_pDirect->Set_NoData(x, y);
+				m_pDiffus->Set_NoData(x, y);
+			}
+			else
 			{
-				if( m_pRadiation->is_NoData(n) )
+				if( m_bBending )
 				{
-					m_pSum		->Set_NoData(n);
-					m_pDuration	->Set_NoData(n);
+					Sol_Height	= m_Sol_Height .asDouble(x, y);
+					Sol_Azimuth	= m_Sol_Azimuth.asDouble(x, y);
 				}
-				else
+
+				if( Get_Irradiance(x, y, Sol_Height, Sol_Azimuth, Direct, Diffus) )
 				{
-					Solar_Angle	= m_pRadiation->asDouble(n);
+					m_pDirect->Add_Value(x, y, Direct);
+					m_pDiffus->Add_Value(x, y, Diffus);
 
-					if( Solar_Angle < M_PI_090 )
+					if( Direct > 0.0 )
 					{
-						Get_SolarCorrection(M_PI_090 - Sol_Height, m_pDTM->asDouble(n), RDIRN, RDIFN);
-
-						d	= m_SolarConstant * Hour_Step * RDIRN * cos(Solar_Angle);
-						// Dir[q,a] = SConst * SunDuration[q,a] * t^m(q) * cos(AngIn[q,a]) 
-
-						m_pSum		->Add_Value(n, d);
-						m_pDuration	->Add_Value(n, Hour_Step);
-
-						if( m_pSunrise && m_pSunrise->is_NoData(n) )
+						if( m_pDuration )
 						{
-							m_pSunrise->Set_Value(n, time);
+							if( m_pDuration->is_NoData(x, y) )
+							{
+								m_pDuration	->Set_Value(x, y, m_dHour);
+							}
+							else
+							{
+								m_pDuration	->Add_Value(x, y, m_dHour);
+							}
 						}
 
-						if( m_pSunset && !m_pSunset->is_NoData(n) )
+						if( m_pSunrise && (m_pSunrise->is_NoData(x, y) || m_pSunrise->asDouble(x, y) > Hour) )
 						{
-							m_pSunset->Set_NoData(n);
+							m_pSunrise	->Set_Value(x, y, Hour);
 						}
-					}
-					else
-					{
-						if( m_pSunset && m_pSunset->is_NoData(n) && m_pSum->asDouble(n) > 0.0 )
+
+						if( m_pSunset )
 						{
-							m_pSunset->Set_Value(n, time);
+							m_pSunset	->Set_Value(x, y, Hour);
 						}
 					}
 				}
 			}
-
-			if( Parameters("UPDATE")->asBool() )
-			{
-				DataObject_Update(m_pRadiation, 20 * M_DEG_TO_RAD, 90.0 * M_DEG_TO_RAD, true);
-			}
-		}
-
-		//-------------------------------------------------
-		else if( !bNight )
-		{
-			bNight	= true;
-
-			if( Parameters("UPDATE")->asBool() )
-			{
-				m_pRadiation->Assign(M_PI_090);
-
-				DataObject_Update(m_pRadiation, 0, 90.0 * M_DEG_TO_RAD, true);
-			}
-
-			if( m_pSunset )
-			{
-				for(int n=0; n<Get_NCells(); n++)
-				{
-					if( m_pSunset->is_NoData(n) && m_pSum->asDouble(n) > 0.0 )
-					{
-						m_pSunset->Set_Value(n, time);
-					}
-				}
-			}
 		}
 	}
+
+	return( true );
 }
 
 
 ///////////////////////////////////////////////////////////
 //														 //
-//						Atmosphere						 //
+//														 //
 //														 //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-void CSolarRadiation::Get_SolarCorrection(double ZenithAngle, double Elevation, double &RDIRN, double &RDIFN)
+inline double CSolarRadiation::Get_Air_Mass(double Sol_Height)
 {
-	const double	AM[32]	=	// AM    Optical air mass in 1 degree increments for zenith angles >=60 [after LIST, 1968; p. 422]
+	static const double	Air_Mass[32]	=	// Optical air mass in 1 degree increments for zenith angles >=60 [after LIST, 1968; p. 422]
 	{
-		 2.00,  2.06,  2.12,  2.19,  2.27,  2.36,  2.45,  2.55,
-		 2.65,  2.77,  2.90,  3.05,  3.21,  3.39,  3.59,  3.82,
-		 4.07,  4.37,  4.72,  5.12,  5.60,  6.18,  6.88,  7.77,
-		 8.90, 10.39, 12.44, 15.36, 19.79, 26.96, 26.96, 26.96
+		2.00,  2.06,  2.12,  2.19,  2.27,  2.36,  2.45,  2.55, 2.65,  2.77,  2.90,  3.05,  3.21,  3.39,  3.59,  3.82,
+		4.07,  4.37,  4.72,  5.12,  5.60,  6.18,  6.88,  7.77, 8.90, 10.39, 12.44, 15.36, 19.79, 26.96, 26.96, 26.96
 	};
 
-	const double	Pressure_0	= 1013.0;	// Standard atmospheric pressure = 1013 mb
-
-	int		i;
-	double	z, AMASS, AMASS2, AW, TW, TD, TDC;
-
-	//-----------------------------------------------------
-	z		= M_RAD_TO_DEG * ZenithAngle;
+	//-------------------------------------------------
+	double	Zenith	= M_PI_090 - Sol_Height;
 
-	if( z <= 60.0 )
+	if( Zenith <= 60.0 * M_DEG_TO_RAD )
 	{
-		AMASS	= 1.0 / cos(ZenithAngle);
+		return( 1.0 / cos(Zenith) );
 	}
 	else
 	{
-		z		-= 60.0;
-		i		= (int)z;
-		AMASS	= AM[i] + (z - i) * (AM[i + 1] - AM[i]);
+		double	z	= M_RAD_TO_DEG * Zenith - 60.0;
+		int		i	= (int)z;
+
+		return( Air_Mass[i] + (z - i) * (Air_Mass[i + 1] - Air_Mass[i]) );
+	}
+}
+
+//---------------------------------------------------------
+inline bool CSolarRadiation::Get_Irradiance(int x, int y, double Sol_Height, double Sol_Azimuth, double &Direct, double &Diffus)
+{
+	if( Sol_Height <= 0.0 )
+	{
+		return( false );
 	}
 
-	z		= m_Pressure / pow(10.0, Elevation * 5.4667E-05);	// P     Barometric pressure in mb
-	AMASS2	= AMASS * z / Pressure_0;
+	//-----------------------------------------------------
+	double	Elevation, Slope, Solar_Angle;
+
+	Elevation	= m_pDEM->asDouble(x, y);
+	Slope		= m_Slope.asDouble(x, y);
+	Solar_Angle	= m_Shade.asInt(x, y) ? 0.0 : cos(Slope) * cos(Sol_Height - M_PI_090) + sin(Slope) * sin(M_PI_090 - Sol_Height) * cos(Sol_Azimuth - m_Aspect.asDouble(x, y));
 
 	//-----------------------------------------------------
-	switch( m_Method )
+	if( m_Method == 0 )	// Boehner
 	{
-	case 0:	default:
-		RDIRN	= pow(m_Transmittance, AMASS2);
-		RDIFN	= 0.271 - 0.294 * RDIRN;
-		break;
+		double	A, E, Vapour;
 
-	case 1:
-		AW		= 1.0 - 0.077 * pow(m_Water * AMASS2, 0.3);		// AW    Accounts for absorption by water vapour
-		TW		= pow(0.975, m_Water * AMASS);					// TW    Accounts for scattering by water vapour
-		TD		= pow(0.950, m_Water * m_Dust / 100.0);			// TD    Accounts for scattering by dust
-		TDC		= pow(0.900, AMASS2) + 0.026 * (AMASS2 - 1.0);	// TDC   Accounts for scattering by a dust free atmosphere
+		Vapour	= m_pVapour && !m_pVapour->is_NoData(x, y) ? m_pVapour->asDouble(x, y) : m_Vapour;
+		Vapour	= Vapour > 0.0 ? sqrt(Vapour) : 0.0;
+		E		= 0.9160 - 0.05125 * Vapour;
+		A		= 0.4158 + 0.03990 * Vapour;
 
-		RDIRN	= AW * TW * TD * TDC;
-		RDIFN	= 0.5 * (AW - RDIRN);
-		break;
+		Direct	= pow(E, (1.0 - Elevation / m_Atmosphere) / sin(Sol_Height));
+
+		Diffus	= m_Atmosphere / (m_Atmosphere - Elevation) * (0.0001165 * SG_Get_Square(M_RAD_TO_DEG * Sol_Height) - 0.0152 * M_RAD_TO_DEG * Sol_Height + A);
+		Diffus	= Direct * sin(Sol_Height) * (1.0 / (1.0 - Diffus) - 1.0);
+	}
+
+	//-----------------------------------------------------
+	else				// TAPES
+	{
+		double	Air_Mass	= Get_Air_Mass(Sol_Height) * (m_Pressure / pow(10.0, Elevation * 5.4667E-05)) / 1013.0;
+
+		//-------------------------------------------------
+		if( m_Method == 1 )	// Air Pressure, Water and Dust Content
+		{
+			double	AW, TW, TD, TDC;
+
+			AW		= 1.0 - 0.077 * pow(m_Water * Air_Mass, 0.3);		// absorption by water vapour
+			TW		= pow(0.975, m_Water * Air_Mass);					// scattering by water vapour	| problem (?!): fortran source differs from paper
+			TD		= pow(0.950, m_Water * m_Dust / 100.0);				// scattering by dust			| problem (?!): 100ppm := 1, 300ppm := 2
+			TDC		= pow(0.900, Air_Mass) + 0.026 * (Air_Mass - 1.0);	// scattering by a dust free atmosphere
+
+			Direct	= AW * TW * TD * TDC;
+			Diffus	= 0.5 * (AW - Direct);
+		}
+
+		//-------------------------------------------------
+		else				// Lumped Atmospheric Transmittance
+		{
+			Direct	= pow(m_Transmittance, Air_Mass);
+			Diffus	= 0.271 - 0.294 * Direct;
+		}
 	}
 
-	// Optical Pathlength (solar zenith angle < 80Degree) =>
-	// m(t)		= exp(-0.000118 * Elevation - 1.638 * 10e-9 * Elevation) / cos(SolarZenithAngle)
-	// if( Method == 2 && Zenithangle < 80 )	// nach bla...
-	// RDIRN	= pow(m_Transmittance, exp((-0.000118 - 1.638e-8 * Elevation) * Elevation) / cos(ZenithAngle));
+	//-----------------------------------------------------
+	Direct	= Solar_Angle <= 0.0 ? 0.0 : Solar_Angle * Direct * m_Solar_Const;
+
+	double	SVF	= m_pSVF && !m_pSVF->is_NoData(x, y) ? m_pSVF->asDouble(x, y) : m_bLocalSVF ? (1.0 + cos(Slope)) / 2.0 : 1.0;
+
+	Diffus	= m_Solar_Const * Diffus * SVF;
+
+	if( Direct < 0.0 )	{	Direct	= 0.0;	}	else if( Direct > m_Solar_Const )	{	Direct	= m_Solar_Const;	}
+	if( Diffus < 0.0 )	{	Diffus	= 0.0;	}	else if( Diffus > m_Solar_Const )	{	Diffus	= m_Solar_Const;	}
+
+	return( true );
 }
 
+//---------------------------------------------------------
 /* The original TAPES-G source code for the optical air mass computation
 C ==================================================================
       SUBROUTINE SOLAR(ZA,RDIRN,RDIFN,ITEST)
@@ -726,15 +1107,165 @@ C ====================================================================*/
 
 ///////////////////////////////////////////////////////////
 //														 //
-//					Solar Position						 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSolarRadiation::Get_Shade(double Sol_Height, double Sol_Azimuth)
+{
+	m_Shade.Assign(0.0);
+
+	if( !m_bBending )
+	{
+		int		i, x, y;
+		double	dx, dy, dz;
+
+		Get_Shade_Params(Sol_Height, Sol_Azimuth, dx, dy, dz);
+
+		for(i=0; i<Get_NCells() && Set_Progress_NCells(i); i++)
+		{
+			if( m_pDEM->Get_Sorted(i, x, y) && !Get_Shade_Complete(x, y) )
+			{
+				Set_Shade(x, y, dx, dy, dz);
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	else
+	{
+		int		i, x, y, iLock;
+
+		for(i=0, iLock=1; i<Get_NCells() && Set_Progress_NCells(i); i++, iLock++)
+		{
+			if( m_pDEM->Get_Sorted(i, x, y) && !Get_Shade_Complete(x, y) )
+			{
+				if( iLock >= 255 )
+					iLock	= 1;
+
+				if( iLock == 1 )
+					Lock_Create();
+
+				Set_Shade_Bended(x, y, iLock);
+			}
+		}
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+void CSolarRadiation::Set_Shade(int x, int y, double dx, double dy, double dz)
+{
+	for(double ix=x+0.5, iy=y+0.5, iz=m_pDEM->asDouble(x, y); ; )
+	{
+		x	= (int)(ix	+= dx);
+		y	= (int)(iy	+= dy);
+					iz	-= dz;
+
+		if( !is_InGrid(x, y) || m_pDEM->asDouble(x, y) > iz )
+		{
+			return;
+		}
+
+		m_Shade.Set_Value(x, y, 1);
+	}
+}
+
+//---------------------------------------------------------
+void CSolarRadiation::Set_Shade_Bended(int x, int y, char iLock)
+{
+	double	dx, dy, dz;
+
+	Get_Shade_Params(m_Sol_Height.asDouble(x, y), m_Sol_Azimuth.asDouble(x, y), dx, dy, dz);
+
+	for(double ix=x+0.5, iy=y+0.5, iz=m_pDEM->asDouble(x, y); ; )
+	{
+		x	= (int)(ix	+= dx);
+		y	= (int)(iy	+= dy);
+					iz	-= dz;
+
+		if( !is_InGrid(x, y) || m_pDEM->asDouble(x, y) > iz || Lock_Get(x, y) == iLock )
+		{
+			return;
+		}
+
+		m_Shade.Set_Value(x, y, 1);
+
+		//---------------------------------------------
+		Lock_Set(x, y, iLock);
+
+		Get_Shade_Params(m_Sol_Height.asDouble(x, y), m_Sol_Azimuth.asDouble(x, y), dx, dy, dz);
+	}
+}
+
+//---------------------------------------------------------
+inline bool CSolarRadiation::Get_Shade_Complete(int x, int y)
+{
+	if( m_Shade.asInt(x, y) == 1 )
+	{
+		for(int iy=y-1; iy<=y+1; iy++)
+		{
+			for(int ix=x-1; ix<x+1; ix++)
+			{
+				if( is_InGrid(ix, iy) && m_Shade.asInt(ix, iy) == 0 )
+				{
+					return( false );
+				}
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+inline void CSolarRadiation::Get_Shade_Params(double Sol_Height, double Sol_Azimuth, double &dx, double &dy, double &dz)
+{
+	dz	= Sol_Azimuth + M_PI_180;
+	dx	= sin(dz);
+	dy	= cos(dz);
+
+	if( fabs(dx) > fabs(dy) )
+	{
+		dy	/= fabs(dx);
+		dx	= dx < 0 ? -1 : 1;
+	}
+	else if( fabs(dy) > fabs(dx) )
+	{
+		dx	/= fabs(dy);
+		dy	= dy < 0 ? -1 : 1;
+	}
+	else
+	{
+		dx	= dx < 0 ? -1 : 1;
+		dy	= dy < 0 ? -1 : 1;
+	}
+
+	dz	= tan(Sol_Height) * sqrt(dx*dx + dy*dy) * Get_Cellsize();
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
 //														 //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-bool CSolarRadiation::Get_SolarPosition(int Day, double Time, double LAT, double LON, double &Azimuth, double &Declination, bool bDegree)
+inline int CSolarRadiation::Get_Day_of_Year(int Month)
 {
-	static const int	Day2Month[13]	= {	0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 366 };
+	static const int	Day[13]	= {	0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
+
+	return( Month < 0 ? 0 : Month > 12 ? Day[12] : Day[Month] );
+}
 
+//---------------------------------------------------------
+inline bool CSolarRadiation::Get_Solar_Position(int Day, double Hour, double LAT, double LON, double &Sol_Height, double &Sol_Azimuth)
+{
 	static const double	ECLIPTIC_OBL	= M_DEG_TO_RAD * 23.43999;	// obliquity of ecliptic
 
 	int		i;
@@ -744,13 +1275,14 @@ bool CSolarRadiation::Get_SolarPosition(int Day, double Time, double LAT, double
 			Month, Year		= 2000;
 
 	//-----------------------------------------------------
+	Day	%= 365;
 
 	for(Month=1, i=0; i<=12; i++)
 	{
-		if( Day < Day2Month[i] )
+		if( Day < Get_Day_of_Year(i) )
 		{
 			Month	= i;
-			Day		-= Day2Month[i - 1];
+			Day		-= Get_Day_of_Year(i - 1);
 			break;
 		}
 	}
@@ -769,8 +1301,8 @@ bool CSolarRadiation::Get_SolarPosition(int Day, double Time, double LAT, double
 
 	//-----------------------------------------------------
 
-//	UTime		= Time - LON * 12.0 / M_PI;
-	UTime		= Time;
+//	UTime		= Hour - LON * 12.0 / M_PI;
+	UTime		= Hour;
 
 
 	//-----------------------------------------------------
@@ -784,9 +1316,9 @@ bool CSolarRadiation::Get_SolarPosition(int Day, double Time, double LAT, double
 	// 2. Solar Coordinates (according to: Jean Meeus: Astronomical Algorithms), accuracy of 0.01 degree
 
 	M			= M_DEG_TO_RAD * (357.52910 + 35999.05030 * T - 0.0001559 * T * T - 0.00000048 * T * T * T);	// mean anomaly
-	L			= M_DEG_TO_RAD * (	(280.46645 + 36000.76983 * T + 0.0003032 * T * T)						// mean longitude
+	L			= M_DEG_TO_RAD * (	(280.46645 + 36000.76983 * T + 0.0003032 * T * T)							// mean longitude
 							+	(	(1.914600 - 0.004817 * T - 0.000014  * T * T) * sin(M)
-								+	(0.019993 - 0.000101 * T) * sin(2 * M) + 0.000290 * sin(3 * M)		// true longitude
+								+	(0.019993 - 0.000101 * T) * sin(2 * M) + 0.000290 * sin(3 * M)				// true longitude
 								)
 							);
 
@@ -800,13 +1332,13 @@ bool CSolarRadiation::Get_SolarPosition(int Day, double Time, double LAT, double
 	R			= sqrt(1.0 - Z*Z); 
 
 	DEC			= atan2(Z, R);
-	RA			= 2 * atan2(Y, (X + R));
+	RA			= 2.0 * atan2(Y, (X + R));
 
 
 	//-----------------------------------------------------
-	// 4. compute sidereal time (degree) at Greenwich local sidereal time at longitude (DegreeE)
+	// 4. compute sidereal time (degree) at Greenwich local sidereal time at longitude (Degree)
 
-	theta		= LON + M_DEG_TO_RAD * (280.46061837 + 360.98564736629 * (JD - 2451545.0) + T * T * (0.000387933 - T / 38710000.0));
+	theta		= LON + M_DEG_TO_RAD * (280.46061837 + 360.98564736629 * (JD - 2451545.0) + T*T * (0.000387933 - T / 38710000.0));
 
 
 	//-----------------------------------------------------
@@ -818,17 +1350,12 @@ bool CSolarRadiation::Get_SolarPosition(int Day, double Time, double LAT, double
 	//-----------------------------------------------------
 	// 6. convert (tau, delta) to horizon coordinates (h, az) of the observer
 
-	Declination	= asin( sin(LAT) * sin(DEC) + cos(LAT) * cos(DEC) * cos(tau) );
-	Azimuth		= atan2( -sin(tau) * cos(DEC), cos(LAT) * sin(DEC) - sin(LAT) * cos(DEC) * cos(tau) );
-	//Azimuth	= atan2( -sin(Tau), cos(LAT) * tan(DEC) - sin(LAT) * cos(Tau) );	// erstere ist besser wegen division by zero effects...
+	Sol_Height	= asin ( sin(LAT) * sin(DEC) + cos(LAT) * cos(DEC) * cos(tau) );
 
-	if( bDegree )
-	{
-		Declination	*= M_RAD_TO_DEG;
-		Azimuth		*= M_RAD_TO_DEG;
-	}
+	Sol_Azimuth	= atan2( -sin(tau) * cos(DEC), cos(LAT) * sin(DEC) - sin(LAT) * cos(DEC) * cos(tau) );
+//	Sol_Azimuth	= atan2( -sin(Tau), cos(LAT) * tan(DEC) - sin(LAT) * cos(Tau) );	// previous formula gives same result but is better because of division by zero effects...
 
-	return( Declination >= 0.0 );
+	return( Sol_Height > 0.0 );
 }
 
 
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.h b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.h
index 1b630e9..cc827a5 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.h
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_lighting/SolarRadiation.h
@@ -83,31 +83,44 @@ class ta_lighting_EXPORT CSolarRadiation : public CSG_Module_Grid
 {
 public:
 	CSolarRadiation(void);
-	virtual ~CSolarRadiation(void);
 
 
 protected:
 
-	virtual bool		On_Execute				(void);
+	virtual bool			On_Execute				(void);
 
 
 private:
 
-	int					m_Method;
+	bool					m_bLocalSVF, m_bBending;
 
-	double				m_SolarConstant, m_Transmittance, m_Pressure, m_Water, m_Dust;
+	int						m_Time, m_Method, m_Day_A, m_Day_B, m_dDays, m_bUpdate;
 
-	CSG_Grid			*m_pDTM, *m_pSum, *m_pRadiation, *m_pDuration, *m_pSunrise, *m_pSunset;
+	double					m_Solar_Const, m_Hour_A, m_Hour_B, m_dHour, m_Latitude, m_Atmosphere, m_Vapour, m_Transmittance, m_Pressure, m_Water, m_Dust;
 
+	CSG_Grid				*m_pDEM, *m_pVapour, *m_pSVF, *m_pDirect, *m_pDiffus, *m_pTotal, *m_pRatio, *m_pDuration, *m_pSunrise, *m_pSunset,
+							m_Slope, m_Aspect, m_Shade, m_Lat, m_Lon, m_Sol_Height, m_Sol_Azimuth;
 
-	void				Execute_DailySum		(double Latitude_RAD, double Hour_Step, double Hour_Start, double Hour_Stop, int Day);
-	void				Execute_SumOfDays		(double Latitude_RAD, double Hour_Step, double Hour_Start, double Hour_Stop, int Day_Step, int Day_Start, int Day_Stop);
 
-	void				Get_DailySum			(double Latitude_RAD, double Hour_Step, double Hour_Start, double Hour_Stop, int Day, bool bProgressBar = true);
+	bool					Finalise				(void);
 
-	void				Get_SolarCorrection		(double ZenithAngle, double Elevation, double &RDIRN, double &RDIFN);
+	bool					Get_Insolation			(void);
+	bool					Get_Insolation			(int Day);
+	bool					Get_Insolation			(int Day, double Hour);
+	bool					Get_Insolation			(double Sol_Height, double Sol_Azimuth, double Hour);
 
-	bool				Get_SolarPosition		(int Day, double Time, double LAT, double LON, double &Azimuth, double &Declination, bool bDegree = true);
+	double					Get_Air_Mass			(double Sol_Height);
+
+	bool					Get_Irradiance			(int x, int y, double Sol_Height, double Sol_Azimuth, double &Direct, double &Diffus);
+
+	bool					Get_Shade				(double Sol_Height, double Sol_Azimuth);
+	void					Set_Shade				(int x, int y, double dx, double dy, double dz);
+	void					Set_Shade_Bended		(int x, int y, char iLock);
+	bool					Get_Shade_Complete		(int x, int y);
+	void					Get_Shade_Params		(double Sol_Height, double Sol_Azimuth, double &dx, double &dy, double &dz);
+
+	int						Get_Day_of_Year			(int Month);
+	bool					Get_Solar_Position		(int Day, double Hour, double Lat, double Lon, double &Sol_Height, double &Sol_Azimuth);
 
 };
 
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.in b/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.in
index 4fc871c..eb4a063 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/Makefile.in
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_terrain_analysis/terrain_analysis/ta_morphometry
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -109,6 +115,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -158,14 +166,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -209,9 +230,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.cpp
index e895553..6c335c4 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.cpp
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/ProtectionIndex.cpp
@@ -90,11 +90,11 @@ double CProtectionIndex::getProtectionIndex(int x, int y){
 	double dDist;
 	double dAngle;
 	double dProtectionIndex = 0;
-	double *pAngle = new double[8];
+	double aAngle[8];
 
 	for (i = 0; i < 8; i++){
 		j = 1;
-		pAngle[i] = 0;
+		aAngle[i] = 0;
 		dDist = M_GET_LENGTH(iDifX[i], iDifY[i]) * j * m_pDEM->Get_Cellsize();
 		while (dDist < m_dRadius){
 			if (m_pDEM->is_InGrid(x + iDifX[i] * j, y + iDifY[i] * j)){
@@ -106,16 +106,15 @@ double CProtectionIndex::getProtectionIndex(int x, int y){
 			dDifHeight = m_pDEM->asDouble(x + iDifX[i] * j, y + iDifY[i] * j) 
 						 - m_pDEM->asDouble(x,y);
 			dAngle = atan (dDifHeight / dDist);
-			if (dAngle > pAngle[i]){
-				pAngle[i] = dAngle;
+			if (dAngle > aAngle[i]){
+				aAngle[i] = dAngle;
 			}//if
 			j++;
 			dDist = M_GET_LENGTH(iDifX[i], iDifY[i]) * j * m_pDEM->Get_Cellsize();
 		}//while
-		dProtectionIndex+=pAngle[i];
+		dProtectionIndex+=aAngle[i];
 	}//while
 
-	delete [] pAngle;
 	return (dProtectionIndex / 8.);
 
 }//method
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.cpp
index 30a8f50..d4267e1 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.cpp
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_morphometry/RealArea.cpp
@@ -24,7 +24,7 @@ CRealArea::CRealArea(void){
 
 	Parameters.Set_Name(_TL("Real Area Calculation"));
 	Parameters.Set_Description(_TW(
-		"(c) 2004 by Victor Olaya. Calculates real (not proyected) cell area"));
+		"(c) 2004 by Victor Olaya. Calculates real (not projected) cell area"));
 
 	Parameters.Add_Grid(NULL, 
 						"DEM",
@@ -49,27 +49,26 @@ bool CRealArea::On_Execute(void){
 	
 	CSG_Grid* pDEM = Parameters("DEM")->asGrid(); 
 	CSG_Grid* pArea = Parameters("AREA")->asGrid();
-	CSG_Grid* pSlope = new CSG_Grid(pDEM);
-	CSG_Grid* pAspect = new CSG_Grid(pDEM);
+	CSG_Grid pSlope(pDEM);
+	CSG_Grid pAspect(pDEM);
 	double fArea;
 	double fCellArea = pDEM->Get_Cellsize() * pDEM->Get_Cellsize();
 
 	CMorphometry	Morphometry;
 
 	if(	!Morphometry.Get_Parameters()->Set_Parameter(SG_T("ELEVATION")	, PARAMETER_TYPE_Grid, pDEM)
-	||	!Morphometry.Get_Parameters()->Set_Parameter(SG_T("SLOPE")		, PARAMETER_TYPE_Grid, pSlope)
-	||	!Morphometry.Get_Parameters()->Set_Parameter(SG_T("ASPECT")		, PARAMETER_TYPE_Grid, pAspect)
+	||	!Morphometry.Get_Parameters()->Set_Parameter(SG_T("SLOPE")		, PARAMETER_TYPE_Grid, &pSlope)
+	||	!Morphometry.Get_Parameters()->Set_Parameter(SG_T("ASPECT")		, PARAMETER_TYPE_Grid, &pAspect)
 	||	!Morphometry.Execute() )
 	{
 		return( false );
 	}
 	
-	delete pAspect;
 
     for(int y=0; y<Get_NY() && Set_Progress(y); y++){		
 		for(int x=0; x<Get_NX(); x++){			
-			if (!pSlope->is_NoData(x,y)){
-				fArea = fCellArea / cos(pSlope->asFloat(x,y,false));
+			if (!pSlope.is_NoData(x,y)){
+				fArea = fCellArea / cos(pSlope.asFloat(x,y,false));
 				pArea->Set_Value(x,y,fArea);
 			}//if
 			else{
@@ -80,6 +79,4 @@ bool CRealArea::On_Execute(void){
 	
 	return true;
 
-	delete pSlope;
-
-}//method
\ No newline at end of file
+}//method
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.in b/src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.in
index 2f8313c..ef2edb5 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.in
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_preprocessor/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -38,7 +38,13 @@ subdir =  \
 	src/modules_terrain_analysis/terrain_analysis/ta_preprocessor
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -107,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -156,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -207,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Geometry.h b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Geometry.h
deleted file mode 100644
index 7376823..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Geometry.h
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-//Compute the dot product AB ? BC
-float dot(float *A, float *B, float *C){
-    
-	float *AB = new float[2];
-    float *BC = new float[2];
-    AB[0] = B[0]-A[0];
-    AB[1] = B[1]-A[1];
-    BC[0] = C[0]-B[0];
-    BC[1] = C[1]-B[1];
-    float dot = AB[0] * BC[0] + AB[1] * BC[1];
-    
-	return dot;
-}
-//Compute the cross product AB x AC
-float cross(float *A, float *B, float *C){
-    
-	float *AB = new float[2];
-    float *AC = new float[2];
-    AB[0] = B[0]-A[0];
-    AB[1] = B[1]-A[1];
-    AC[0] = C[0]-A[0];
-    AC[1] = C[1]-A[1];
-    float cross = AB[0] * AC[1] - AB[1] * AC[0];
-    
-	return cross;
-}
-//Compute the distance from A to B
-float distance(float *A, float *B){
-    float d1 = A[0] - B[0];
-    float d2 = A[1] - B[1];
-    return sqrt(d1*d1+d2*d2);
-}
-//Compute the distance from AB to C
-
-float linePointDist(float *A, float *B, float *C){
-    float dist = cross(A,B,C) / distance(A,B);
-
-    return fabs(dist);
-}
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.cpp
deleted file mode 100644
index 10a22b5..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.cpp
+++ /dev/null
@@ -1,373 +0,0 @@
-/*******************************************************************************
-    CrossSections.cpp
-    Copyright (C) Victor Olaya
-
-    This program 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.
-
-    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 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 "Grid_CrossSections.h"
-#include "Geometry.h"
-
-CGrid_CrossSections::CGrid_CrossSections(void){
-
-	CSG_Parameter *pNode;
-
-	Parameters.Set_Name(_TL("Cross Sections"));
-	Parameters.Set_Description(_TW("(c) 2004 Victor Olaya. Cross Sections"));
-
-	Parameters.Add_Grid(NULL,
-						"DEM",
-						_TL("DEM"),
-						_TL("Digital Terrain Model"),
-						PARAMETER_INPUT);
-
-	Parameters.Add_Shapes(NULL,
-						"LINES",
-						_TL("Path"),
-						_TL(""),
-						PARAMETER_INPUT, 
-						SHAPE_TYPE_Line);
-
-	Parameters.Add_Shapes(NULL,
-						"SECTIONS",
-						_TL("Cross Sections"),
-						_TL(""),
-						PARAMETER_OUTPUT);
-
-	Parameters.Add_Value(NULL,
-						"NUMPOINTS",
-						_TL("Number of points"),
-						_TL("Number of points on each side of the section"),
-						PARAMETER_TYPE_Int,
-						10,
-						1,
-						true);
-
-	Parameters.Add_Value(NULL,
-						"INTERVAL",
-						_TL("Interval"),
-						_TL("Interval between points (in grid units)."),
-						PARAMETER_TYPE_Double,
-						10);
-
-	Parameters.Add_Value(NULL,
-						"STEP",
-						_TL("n"),
-						_TL("Draw a section each n points"),
-						PARAMETER_TYPE_Int,
-						2);
-
-	pNode = Parameters.Add_Node(NULL,
-						"PDFNODE",
-						_TL("PDF Documents"),
-						_TL(""));
-
-	Parameters.Add_Value(pNode,
-						"PDF",
-						_TL("Create PDF Documents"),
-						_TL(""),
-						PARAMETER_TYPE_Bool,
-						true);	
-
-	Parameters.Add_FilePath(pNode,
-							"OUTPUTPATH",
-							_TL("Folder for PDF Files"),
-							_TL(""),
-							_TL(""),
-							_TL(""),
-							true,
-							true);
-
-	Parameters.Add_Value(pNode,
-						"WIDTH",
-						_TL("Road Width"),
-						_TL(""),
-						PARAMETER_TYPE_Double,
-						5.);
-
-	Parameters.Add_Value(pNode,
-						"SLOPE",
-						_TL("Side Slope"),
-						_TL(""),
-						PARAMETER_TYPE_Double,
-						.5);
-
-	Parameters.Add_Value(pNode,
-						"THRESHOLD",
-						_TL("Height Threshold"),
-						_TL("Height threshold for optimal profile calculation"),
-						PARAMETER_TYPE_Double,
-						.5);
-}//constructor
-
-
-CGrid_CrossSections::~CGrid_CrossSections(void){}
-
-bool CGrid_CrossSections::On_Execute(void){
-
-	CSG_Shapes *pLines;
-	CSG_Shape *pShape, *pSection;
-	CSG_Grid *pDEM;
-	TSG_Point	Point, Point2;
-	float fInterval;
-	float fStepX, fStepY;
-	int iNumPoints;
-	int i,j,k;
-	int iPoint;
-	int iField = 0;
-	int iStep;
-	double dX, dY;
-	double dX2, dY2;
-	double dDistance;
-	double dHeight;
-	bool bCopy;
-
-	m_pSections = Parameters("SECTIONS")->asShapes();
-	pLines = Parameters("LINES")->asShapes();
-	pDEM = Parameters("DEM")->asGrid();
-	fInterval = (float) Parameters("INTERVAL")->asDouble();
-	iNumPoints = Parameters("NUMPOINTS")->asInt();
-	iStep = Parameters("STEP")->asInt();
-
-	if(pLines == m_pSections){
-		bCopy = true;
-		m_pSections	= SG_Create_Shapes();
-	}//if
-	else{
-		bCopy = false;
-	}//else
-
-	m_pSections->Create(SHAPE_TYPE_Line, _TL("Cross Sections"));
-	for (i = iNumPoints; i > 0; i--){
-		m_pSections->Add_Field(CSG_String::Format(SG_T("-%s"), SG_Get_String(fInterval * i, 2).c_str()),
-										SG_DATATYPE_Double);
-	}//for
-	m_pSections->Add_Field("0", SG_DATATYPE_Double);
-	for (i = 1; i < iNumPoints +1; i++){
-		m_pSections->Add_Field(SG_Get_String(fInterval * i).c_str(), SG_DATATYPE_Double);
-	}//for
-	for(i=0; i<pLines->Get_Count() && Set_Progress(i, pLines->Get_Count()); i++){
-		pShape = pLines->Get_Shape(i);
-		for(j=0; j<pShape->Get_Part_Count(); j++){
-			for(k=0; k<pShape->Get_Point_Count(j)-1; k+=iStep){
-				Point = pShape->Get_Point(k,j);
-				Point2 = pShape->Get_Point(k+1,j);
-				dDistance = sqrt(pow(Point2.x - Point.x,2) + pow(Point2.y - Point.y,2));
-				dX = (Point.x + Point2.x) / 2.;
-				dY = (Point.y + Point2.y) / 2.;
-				fStepX = (Point2.y - Point.y) / dDistance * fInterval;
-				fStepY = -(Point2.x - Point.x) / dDistance * fInterval;
-				pSection = m_pSections->Add_Shape();
-				pSection->Add_Point(dX + iNumPoints * fStepX,
-								dY + iNumPoints * fStepY);
-				pSection->Add_Point(dX - iNumPoints * fStepX,
-								dY - iNumPoints * fStepY);
-				iField = 0;
-				for (iPoint = iNumPoints; iPoint > 0; iPoint--){
-					dX2 = dX - iPoint * fStepX;
-					dY2 = dY - iPoint * fStepY;
-					dHeight = pDEM->Get_Value(dX2, dY2);
-					pSection->Set_Value(iField, dHeight);
-					iField++;
-				}//for
-				dHeight = pDEM->Get_Value(dX, dY);
-				pSection->Set_Value(iField, dHeight);
-				iField++;
-				for (iPoint = 1; iPoint < iNumPoints +1; iPoint++){
-					dX2 = dX + iPoint * fStepX;
-					dY2 = dY + iPoint * fStepY;
-					dHeight = pDEM->Get_Value(dX2, dY2);
-					pSection->Set_Value(iField, dHeight);
-					iField++;
-				}//for*/
-			}//for
-		}//for
-	}//for
-
-	if (Parameters("PDF")->asBool()){
-		CreatePDFDocs();
-	}//if
-
-	if(bCopy){
-		pLines->Assign(m_pSections);
-		delete(m_pSections);
-	}//if
-
-	return true;
-
-}// method
-
-void CGrid_CrossSections::CreatePDFDocs(){
-
-	CSG_String sFilePath;
-			
-	if (Parameters("OUTPUTPATH")->asString()){
-		m_DocEngine.Open(_TL("SECTIONS"));
-		sFilePath = SG_File_Make_Path(Parameters("OUTPUTPATH")->asString(), _TL("Sections"), _TL("pdf"));
-	}//if
-	else{
-		Message_Add(_TL("\n** Error : Invalid parameters **\n"));
-		return;
-	}//else
-
-	AddLongitudinalProfiles();
-	AddCrossSections();
-
-	if (m_DocEngine.Save(sFilePath)){
-		if (!m_DocEngine.Close()){
-			Message_Add(_TL("\n\n ** Error : Could not close PDF engine ** \n\n"));
-		}
-	}//if
-	else{
-		Message_Add(_TL("\n\n ** Error : Could not save PDF file ** \n\n"));
-	}//else
-
-
-}//method
-
-
-void CGrid_CrossSections::AddLongitudinalProfiles(){
-
-	int i,j,k;
-	int iIndex = 0;	
-	int iNumPoints = Parameters("NUMPOINTS")->asInt();
-	int iStep = Parameters("STEP")->asInt();
-	int iFirstPoint = 0;
-	int iLastPoint;
-	int iSections;
-	float fX1, fY1, fX2, fY2;
-	float fDistance, fDistanceSum = 0;
-	float fDist;
-	float fThreshold = (float)Parameters("THRESHOLD")->asDouble();
-	bool bValid;
-	CSG_Shape *pShape;
-	CSG_Table *pTable;
-	TSG_Point	Point, Point2;
-	CSG_Shapes* pLines = Parameters("LINES")->asShapes();
-
-	pTable = m_pSections;
-	iSections = pTable->Get_Record_Count();
-
-	m_pProfile = new TSG_Point[iSections];
-
-	for(i=0; i<pLines->Get_Count() && Set_Progress(i, pLines->Get_Count()); i++){
-		pShape = pLines->Get_Shape(i);
-		for(j=0; j<pShape->Get_Part_Count(); j++){
-			Point = pShape->Get_Point(0,j);
-			for(k=0; k<pShape->Get_Point_Count(j)-1; k+=iStep){
-				Point2 = pShape->Get_Point(k,j);
-				fDistance = sqrt(pow(Point2.x - Point.x,2) + pow(Point2.y - Point.y,2));
-				m_pProfile[iIndex].x = fDistanceSum + fDistance / 2.;
-				m_pProfile[iIndex].y = pTable->Get_Record(iIndex)->asFloat(iNumPoints);
-				fDistanceSum += fDistance;
-				iIndex++;
-				Point.x = Point2.x;
-				Point.y = Point2.y;
-			}//for
-		}//for
-	}//for*/
-
-	m_pHeight = new float[iSections];
-
-	for (i = 0; i < iSections; i++){
-		m_pHeight[i] = 1500;
-	}
-	
-	iLastPoint = iSections - 1;
-	while(iFirstPoint != iSections - 1){
-		fX1 = m_pProfile[iFirstPoint].x;
-		fY1 = m_pProfile[iFirstPoint].y;
-		fX2 = m_pProfile[iLastPoint].x;
-		fY2 = m_pProfile[iLastPoint].y;
-		bValid = true;
-		for (i = iFirstPoint; i < iLastPoint; i++){			
-			fDist = CalculatePointLineDist(fX1,fY1,fX2,fY2, m_pProfile[i].x, m_pProfile[i].y);
-			if (fDist > fThreshold){
-				iLastPoint--;
-				bValid = false;
-				break;
-			}//if
-		}//for
-		if (bValid){
-			for (j = iFirstPoint; j < iLastPoint + 1; j++){
-				m_pHeight[j] = m_pProfile[iFirstPoint].y + 
-					(m_pProfile[j].x - m_pProfile[iFirstPoint].x) 
-					/ (m_pProfile[iLastPoint].x - m_pProfile[iFirstPoint].x)
-					* (m_pProfile[iLastPoint].y - m_pProfile[iFirstPoint].y);
-			}//for			
-			iFirstPoint = iLastPoint;
-			iLastPoint = iSections - 1;			
-		}//if
-	}//while
-	
-	
-	m_DocEngine.AddLongitudinalProfile(m_pProfile, m_pHeight, iSections);
-
-}//method
-
-float CGrid_CrossSections::CalculatePointLineDist(float fX1, float fY1, float fX2, float fY2, float fPX, float fPY){
-
-	float *pA, *pB, *pC;
-
-	pA = new float[2];
-	pA[0] = fX1;
-	pA[1] = fY1;
-	pB = new float[2];
-	pB[0] = fX2;
-	pB[1] = fY2;
-	pC = new float[2];
-	pC[0] = fPX;
-	pC[1] = fPY;
-	
-	return linePointDist(pA, pB, pC);
-
-}//method
-
-void CGrid_CrossSections::AddCrossSections(){
-
-	int i,j;
-	int iRoadPoints;
-	int iNumPoints = Parameters("NUMPOINTS")->asInt();
-	float fInterval = (float) Parameters("INTERVAL")->asDouble();
-	CSG_Table *pTable;
-	TSG_Point *pRoadSection;
-	TSG_Point **pCrossSections;
-	double dWidth = Parameters("WIDTH")->asDouble();
-
-	pRoadSection = new TSG_Point [2];
-	pRoadSection[0].x = -dWidth / 2.;
-	pRoadSection[0].y = 0;
-	pRoadSection[1].x = dWidth / 2.;
-	pRoadSection[1].y = 0;
-
-	pTable = m_pSections;
-	pCrossSections = new TSG_Point *[pTable->Get_Record_Count()];
-
-	for (i = 0; i < pTable->Get_Record_Count(); i++){
-		pCrossSections[i] = new TSG_Point [pTable->Get_Field_Count()];
-		for (j = 0; j < pTable->Get_Field_Count(); j++){
-			pCrossSections[i][j].x = -fInterval * iNumPoints + fInterval * j;
-			pCrossSections[i][j].y = pTable->Get_Record(i)->asFloat(j);
-		}//for
-	}//for
-
-	iRoadPoints = 2;
-
-	m_DocEngine.AddCrossSections(pCrossSections, m_pHeight, pRoadSection, pTable->Get_Record_Count(),
-								pTable->Get_Field_Count(), iRoadPoints);
-	m_DocEngine.AddVolumesTable(m_pProfile, pCrossSections, m_pHeight, pRoadSection,
-								pTable->Get_Record_Count(),	pTable->Get_Field_Count(), iRoadPoints);
-
-}//method
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.h b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.h
deleted file mode 100644
index 009e70a..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_CrossSections.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
-    CrossSections.h
-    Copyright (C) Victor Olaya
-    
-    This program 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.
-
-    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 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 "MLB_Interface.h"
-#include "PDFDocEngine_CrossSections.h"
-
-class CGrid_CrossSections : public CSG_Module_Grid
-{
-public:
-	CGrid_CrossSections(void);
-	virtual ~CGrid_CrossSections(void);
-
-protected:
-
-	bool On_Execute(void);
-
-private:
-
-	CPDFDocEngine_CrossSections m_DocEngine;
-	CSG_Shapes *m_pSections;
-	float *m_pHeight;
-	TSG_Point *m_pProfile;
-
-	void CreatePDFDocs();
-	void AddLongitudinalProfiles();
-	void AddCrossSections();
-	float CalculatePointLineDist(float,float,float,float,float,float);
-
-};
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp
index 19b9564..e66eb17 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.cpp
@@ -58,8 +58,6 @@
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-#include <saga_api/doc_pdf.h>
-
 #include "Grid_Cross_Profiles.h"
 
 
@@ -82,9 +80,9 @@
 //---------------------------------------------------------
 CGrid_Cross_Profiles::CGrid_Cross_Profiles(void)
 {
-	Set_Name(_TL("Cross Profiles"));
+	Set_Name		(_TL("Cross Profiles"));
 
-	Set_Author		(SG_T("(c) 2006 by O.Conrad"));
+	Set_Author		(SG_T("O.Conrad (c) 2006"));
 
 	Set_Description	(_TW(
 		"Create cross profiles from a grid based DEM for given lines.\n"
@@ -125,18 +123,8 @@ CGrid_Cross_Profiles::CGrid_Cross_Profiles(void)
 		_TL(""),
 		PARAMETER_TYPE_Int	, 10.0, 3.0, true
 	);
-
-	Parameters.Add_FilePath(
-		NULL, "DOCUMENT"	, _TL("Report"),
-		_TL(""),
-		_TL("Portable Document Format (*.pdf)|*.pdf|All Files|*.*"), NULL, true
-	);
 }
 
-//---------------------------------------------------------
-CGrid_Cross_Profiles::~CGrid_Cross_Profiles(void)
-{}
-
 
 ///////////////////////////////////////////////////////////
 //														 //
@@ -150,8 +138,8 @@ bool CGrid_Cross_Profiles::On_Execute(void)
 	int			iLine, iPart, iPoint, nSamples;
 	double		Distance, Length, dLine, dist, dx, dy;
 	TSG_Point	iPt, jPt, dPt, aPt, bPt;
-	CSG_Shapes		*pLines, *pProfiles;
-	CSG_Shape		*pLine, *pProfile;
+	CSG_Shapes	*pLines, *pProfiles;
+	CSG_Shape	*pLine, *pProfile;
 
 	//-----------------------------------------------------
 	m_pDEM		= Parameters("DEM")			->asGrid();
@@ -226,17 +214,7 @@ bool CGrid_Cross_Profiles::On_Execute(void)
 	}
 
 	//-----------------------------------------------------
-	if( pProfiles->Get_Count() > 0 )
-	{
-		if( Parameters("DOCUMENT")->asString() )
-		{
-			Make_Report(Parameters("DOCUMENT")->asString(), m_pDEM, pLines, pProfiles, Distance);
-		}
-
-		return( true );
-	}
-
-	return( false );
+	return( pProfiles->Get_Count() > 0 );
 }
 
 
@@ -288,6 +266,9 @@ bool CGrid_Cross_Profiles::Get_Profile(CSG_Shape *pProfile, TSG_Point A, TSG_Poi
 //														 //
 ///////////////////////////////////////////////////////////
 
+/*/---------------------------------------------------------
+#include <saga_api/doc_pdf.h>
+
 //---------------------------------------------------------
 #define NBOXES	4
 
@@ -350,7 +331,7 @@ void CGrid_Cross_Profiles::Make_Report(const SG_Char *FileName, CSG_Grid *pDEM,
 
 		pdf.Save(Parameters("DOCUMENT")->asString());
 	}
-}
+}/**/
 
 
 ///////////////////////////////////////////////////////////
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.h b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.h
index 2b07864..4af085e 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.h
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Grid_Cross_Profiles.h
@@ -76,7 +76,6 @@ class CGrid_Cross_Profiles : public CSG_Module_Grid
 {
 public:
 	CGrid_Cross_Profiles(void);
-	virtual ~CGrid_Cross_Profiles(void);
 
 
 protected:
@@ -86,13 +85,11 @@ protected:
 
 private:
 
-	CSG_Grid						*m_pDEM;
+	CSG_Grid					*m_pDEM;
 
 
 	bool						Get_Profile			(CSG_Shape *pProfile, TSG_Point A, TSG_Point B, int nSamples);
 
-	void						Make_Report			(const SG_Char *FileName, CSG_Grid *pDEM, CSG_Shapes *pLines, CSG_Shapes *pProfiles, double Distance);
-
 };
 
 
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.cpp
index eaf75e9..2a6339c 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.cpp
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/MLB_Interface.cpp
@@ -88,7 +88,6 @@ const SG_Char * Get_Info(int i)
 #include "Grid_Profile.h"
 #include "Grid_Flow_Profile.h"
 #include "Grid_Swath_Profile.h"
-#include "Grid_CrossSections.h"
 #include "Grid_Cross_Profiles.h"
 #include "Grid_Profile_From_Lines.h"
 #include "Grid_ProfileFromPoints.h"
@@ -102,10 +101,9 @@ CSG_Module *		Create_Module(int i)
 	case 0:	return( new CGrid_Profile );
 	case 1:	return( new CGrid_Flow_Profile );
 	case 2:	return( new CGrid_Swath_Profile );
-	case 3:	return( new CGrid_CrossSections );
-	case 4:	return( new CGrid_Cross_Profiles );
-	case 5:	return( new CGrid_Profile_From_Lines );
-	case 6:	return( new CProfileFromPoints );
+	case 3:	return( new CGrid_Cross_Profiles );
+	case 4:	return( new CGrid_Profile_From_Lines );
+	case 5:	return( new CProfileFromPoints );
 	}
 
 	return( NULL );
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am
index 06f5fb1..7793a6b 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.10 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.11 2010/10/22 09:15:15 oconrad Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
@@ -14,26 +14,19 @@ AM_LDFLAGS         = -fPIC -shared -avoid-version
 pkglib_LTLIBRARIES = libta_profiles.la
 libta_profiles_la_SOURCES =\
 Grid_Cross_Profiles.cpp\
-Grid_CrossSections.cpp\
 Grid_Flow_Profile.cpp\
 Grid_Profile.cpp\
 Grid_ProfileFromPoints.cpp\
 Grid_Profile_From_Lines.cpp\
 Grid_Swath_Profile.cpp\
-Polygon_Clipper.cpp\
 MLB_Interface.cpp\
-PDFDocEngine_CrossSections.cpp\
-Geometry.h\
 Grid_Cross_Profiles.h\
-Grid_CrossSections.h\
 Grid_Flow_Profile.h\
 Grid_Profile.h\
 Grid_ProfileFromPoints.h\
 Grid_Profile_From_Lines.h\
 Grid_Swath_Profile.h\
-Polygon_Clipper.h\
-MLB_Interface.h\
-PDFDocEngine_CrossSections.h
+MLB_Interface.h
 
 libta_profiles_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la $(ADD_MLBS)
 
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.in b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.in
index fa394b5..a121cf9 100644
--- a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Makefile.in
+++ b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/modules_terrain_analysis/terrain_analysis/ta_profiles
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -69,10 +75,9 @@ LTLIBRARIES = $(pkglib_LTLIBRARIES)
 libta_profiles_la_DEPENDENCIES =  \
 	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
 am_libta_profiles_la_OBJECTS = Grid_Cross_Profiles.lo \
-	Grid_CrossSections.lo Grid_Flow_Profile.lo Grid_Profile.lo \
-	Grid_ProfileFromPoints.lo Grid_Profile_From_Lines.lo \
-	Grid_Swath_Profile.lo Polygon_Clipper.lo MLB_Interface.lo \
-	PDFDocEngine_CrossSections.lo
+	Grid_Flow_Profile.lo Grid_Profile.lo Grid_ProfileFromPoints.lo \
+	Grid_Profile_From_Lines.lo Grid_Swath_Profile.lo \
+	MLB_Interface.lo
 libta_profiles_la_OBJECTS = $(am_libta_profiles_la_OBJECTS)
 DEFAULT_INCLUDES = -I. at am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -108,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -157,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -208,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -221,7 +245,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.10 2010/07/08 14:11:49 johanvdw Exp $
+# $Id: Makefile.am,v 1.11 2010/10/22 09:15:15 oconrad Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_TRUE at UC_DEFS = -D_SAGA_UNICODE
@@ -232,26 +256,19 @@ AM_LDFLAGS = -fPIC -shared -avoid-version
 pkglib_LTLIBRARIES = libta_profiles.la
 libta_profiles_la_SOURCES = \
 Grid_Cross_Profiles.cpp\
-Grid_CrossSections.cpp\
 Grid_Flow_Profile.cpp\
 Grid_Profile.cpp\
 Grid_ProfileFromPoints.cpp\
 Grid_Profile_From_Lines.cpp\
 Grid_Swath_Profile.cpp\
-Polygon_Clipper.cpp\
 MLB_Interface.cpp\
-PDFDocEngine_CrossSections.cpp\
-Geometry.h\
 Grid_Cross_Profiles.h\
-Grid_CrossSections.h\
 Grid_Flow_Profile.h\
 Grid_Profile.h\
 Grid_ProfileFromPoints.h\
 Grid_Profile_From_Lines.h\
 Grid_Swath_Profile.h\
-Polygon_Clipper.h\
-MLB_Interface.h\
-PDFDocEngine_CrossSections.h
+MLB_Interface.h
 
 libta_profiles_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la $(ADD_MLBS)
 all: all-am
@@ -328,7 +345,6 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_CrossSections.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_Cross_Profiles.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_Flow_Profile.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_Profile.Plo at am__quote@
@@ -336,8 +352,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_Profile_From_Lines.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Grid_Swath_Profile.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MLB_Interface.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PDFDocEngine_CrossSections.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Polygon_Clipper.Plo at am__quote@
 
 .cpp.o:
 @am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.cpp
deleted file mode 100644
index 94d4991..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.cpp
+++ /dev/null
@@ -1,1005 +0,0 @@
-/*******************************************************************************
-    PDFDocEngine_CrossSections.cpp
-    Copyright (C) Victor Olaya . Proyecto Sextante (http://sextante.sf.net)
-    
-    This program 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.
-
-    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 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 "PDFDocEngine_CrossSections.h"
-#include <math.h>
-#include <saga_api/saga_api.h>
-#include "Polygon_Clipper.h"
-
-#define SLOPE_TRANSITION 1
-#define DITCH_WIDTH 1
-
-CPDFDocEngine_CrossSections::CPDFDocEngine_CrossSections(){}
-
-CPDFDocEngine_CrossSections::~CPDFDocEngine_CrossSections(){}
-
-void CPDFDocEngine_CrossSections::AddCrossSections(TSG_Point ** pCrossSections, 
-									 float *pHeight,
-									 TSG_Point * pRoadSection,
-									 int iSections,
-									 int iCrossSectionPoints,
-									 int iRoadPoints){
-	
-	int i,j;
-	std::vector<TSG_Point> ModifiedRoadSection;
-	std::vector<TSG_Point> ModifiedCrossSection;
-	TSG_Point  *pModifiedRoadSection;
-	TSG_Point  *pModifiedCrossSection;
-	int iCrossSectionPointsB;
-	int iRoadPointsB;
-	
-	Add_Page_Title (_TL("Cross Sections"), PDF_TITLE_01, PDF_PAGE_SIZE_A4, PDF_PAGE_ORIENTATION_PORTRAIT);
-
-	for (i = 0; i < iSections; i++){
-		m_iOffsetY = OFFSET_Y + CROSS_SECTION_HEIGHT * 1.1 * (i % SECTIONS_PER_PAGE);
-		if (m_iOffsetY == OFFSET_Y){
-			Add_Page();
-		}//if
-		
-		iCrossSectionPointsB = iCrossSectionPoints;
-		iRoadPointsB = iRoadPoints;
-		AdjustSections(pCrossSections[i], pRoadSection, ModifiedCrossSection, ModifiedRoadSection,
-						pHeight[i], iCrossSectionPointsB, iRoadPointsB);
-
-		pModifiedCrossSection = new TSG_Point [iCrossSectionPointsB];
-		pModifiedRoadSection = new TSG_Point [iRoadPointsB];
-		for (j = 0; j < iCrossSectionPointsB; j++){
-			pModifiedCrossSection[j] = ModifiedCrossSection[j];
-		}//for
-		for (j = 0; j < iRoadPointsB; j++){
-			pModifiedRoadSection[j] = ModifiedRoadSection[j];
-		}//for
-		
-		AddCrossSection(pModifiedCrossSection, pModifiedRoadSection,
-						 iCrossSectionPointsB, iRoadPointsB);
-
-		delete [] pModifiedRoadSection;
-		delete [] pModifiedCrossSection;
-	}//for
-	
-}//method
-
-void CPDFDocEngine_CrossSections::AddCrossSection(TSG_Point * pCrossSection,
-									 TSG_Point * pRoadSection,
-									 int iCrossSectionPoints,
-									 int iRoadPoints){
-
-	int i;	
-    int iMag;
-	int iNumLines;
-	int iFirstPoint, iLastPoint;
-    float fMinLine = 0;
-	float fMaxY, fMinY;
-	float fMaxX, fMinX;
-	float fStep;
-    float fX, fY;
-	float fOffsetX;
-	float fDifX, fDifY;
-	float fRatio;
-	float fHeight;
-	CSG_String sValue;
-	CSG_Points Points;
-
-	iFirstPoint = 0;
-	iLastPoint = iCrossSectionPoints - 1;
-
-	for (i = 1; i < iCrossSectionPoints; i++) {
-		if (pCrossSection[i].x > pRoadSection[0].x){
-			iFirstPoint = i - 1;
-			break;
-		}//if
-	}//for
-	for (i = 1; i < iCrossSectionPoints; i++) {
-		if (pCrossSection[i].x > pRoadSection[iRoadPoints - 1].x){
-			iLastPoint = i;
-			break;
-		}//if
-	}//for
-    
-	fMinX = pCrossSection[iFirstPoint].x;
-	fMaxX = pCrossSection[iLastPoint].x;
-
-	fDifX = fMaxX - fMinX;
-
-	fMaxY  = pCrossSection[0].y;
-	fMinY  = pCrossSection[0].y;
-		    		    
-	for (i = iFirstPoint ; i < iLastPoint + 1; i++) {
-	    if (pCrossSection[i].y > fMaxY) {
-	        fMaxY = pCrossSection[i].y;
-	    }// if
-	    if (pCrossSection[i].y < fMinY) {
-	        fMinY = pCrossSection[i].y;
-	    }// if
-    }//for    
-	
-	for (i = 0; i < iRoadPoints; i++) {
-	    if (pRoadSection[i].y > fMaxY) {
-	        fMaxY = pRoadSection[i].y;
-	    }// if
-	    if (pRoadSection[i].y < fMinY) {
-	        fMinY = pRoadSection[i].y;
-	    }// if
-    }//for 
-
-	fDifY = fMaxY - fMinY;
-
-	fRatio = (fDifX / fDifY) / (CROSS_SECTION_WIDTH / CROSS_SECTION_HEIGHT);
-	if (fRatio > 1){
-		fMaxY = fMaxY + fDifY / 2. * (fRatio - 1.);
-		fMinY = fMinY - fDifY / 2. * (fRatio - 1.);
-
-	}//if
-	else{
-		fMaxX = fMaxX + fDifX / 2. * (1. / fRatio - 1.);
-		fMinX = fMinX - fDifX / 2. * (1. / fRatio - 1.);
-	}//else
-
-	fMaxX = fMaxX + fDifX * .05;
-	fMinX = fMinX - fDifX * .05;
-	fMaxY = fMaxY + fDifY * .05;
-	fMinY = fMinY - fDifY * .05;
-
-	iMag = (int) (log(fMaxY - fMinY) / log(10.0));
-	fStep = (float) ((int) pow(10.0, (double) iMag));                
-	if (fStep == 0){
-		fStep = 1.;
-	}//if
-	if (fMinY < 0) {        	
-		iMag = (int) (log(fabs(fMinY)) / log(10.0));
-		fMinLine = -(int) pow(10.0, (double) iMag);
-	}// if
-	else {
-		fMinLine=(int)(((int)(fMinY/fStep)) *fStep);
-	}//else
-
-	iNumLines = (int) ((fMaxY - fMinY) / fStep);
-
-	while (iNumLines < 8) {
-		fStep = fStep / 2.0;
-		iNumLines = (int) ((fMaxY - fMinY) / fStep);
-	}// while
-	iNumLines = (int) ((fMaxY - fMinLine) / fStep);
-
-	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
-
-	//horizontal lines
-
-	for (i = 0; i < iNumLines; i++) {
-        fY = m_iOffsetY + CROSS_SECTION_HEIGHT
-                - ((fMinLine + fStep * i - fMinY) / (fMaxY - fMinY)) * CROSS_SECTION_HEIGHT;		
-        if (fY <= m_iOffsetY + CROSS_SECTION_HEIGHT && fY >= m_iOffsetY) {
-			fY = fHeight - fY;
-			sValue = SG_Get_String(fMinLine + fStep * (float) i);			
-			Draw_Text(OFFSET_X - 10, fY, SG_Get_String(fMinLine + fStep * (float) i).c_str(),
-					9, PDF_STYLE_TEXT_ALIGN_H_RIGHT);
-			Draw_Line(OFFSET_X, fY, OFFSET_X - 5, fY, 0);
-        }// if
-    }// for	
-
-	iMag = (int) (log(fMaxX - fMinX) / log(10.0));
-	fStep = (float) pow(10.0, (double) iMag);                
-
-	iNumLines = (int) ((fMaxX-fMinX) / fStep);
-	
-	while (iNumLines < 3) {
-		fStep = fStep / 2.0;
-		iNumLines = (int) ((fMaxX-fMinX) / fStep);
-	}// while    
-	fMinLine = (int)(((int)(fMinX/fStep)) * fStep);          
-	while (fMinLine<fMinX){
-		fMinLine+=fStep;
-	}//while
-	fOffsetX = fMinX-fMinLine;
-
-	//vertical lines
-
-	for (i = 0; i < iNumLines; i++) {
-		fX = OFFSET_X + ((fStep * (float) i-fOffsetX) / (fMaxX-fMinX)) * CROSS_SECTION_WIDTH;
-		if (fX >= OFFSET_X && fX < OFFSET_X + CROSS_SECTION_WIDTH){
-			if (fabs(fStep * (float)i+fMinLine) > 100000) {
-				sValue = SG_Get_String(fStep * (float)i+fMinLine);
-			}// if 
-			else {
-				sValue = SG_Get_String(fStep * (float)i+fMinLine, 2, true);
-			}// else
-			Draw_Line (fX, fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT,
-						fX, fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT - 10);
-			Draw_Text(fX, fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT - 15, 
-					SG_Get_String(fMinLine + fStep * (float) i).c_str(), 9, 
-					PDF_STYLE_TEXT_ALIGN_H_CENTER | PDF_STYLE_TEXT_ALIGN_V_TOP );
-		}//if
-	}// for
-	
-	//axis
-	
-	Draw_Line (OFFSET_X, fHeight - m_iOffsetY, 
-				OFFSET_X, fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT, 2);
-	Draw_Line (OFFSET_X, fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT, 
-				OFFSET_X + CROSS_SECTION_WIDTH, 
-				fHeight - m_iOffsetY - CROSS_SECTION_HEIGHT, 2);
-
-	//cross sections
-	
-	fY = m_iOffsetY + CROSS_SECTION_HEIGHT 
-			- CROSS_SECTION_HEIGHT * ((pCrossSection[iFirstPoint].y - fMinY) / (fMaxY - fMinY));
-	fY = fHeight - fY;
-	fX = OFFSET_X + CROSS_SECTION_WIDTH * ((pCrossSection[iFirstPoint].x - fMinX) / (fMaxX - fMinX));
-
-	Points.Add(fX,fY);
-	
-	for (i = iFirstPoint + 1; i < iLastPoint + 1; i++) {
-		fY = m_iOffsetY + CROSS_SECTION_HEIGHT 
-			- CROSS_SECTION_HEIGHT * ((pCrossSection[i].y - fMinY) / (fMaxY - fMinY));
-		fY = fHeight - fY;
-		fX = OFFSET_X + CROSS_SECTION_WIDTH * ((pCrossSection[i].x - fMinX) / (fMaxX - fMinX));
-		Points.Add(fX,fY);
-		if (pCrossSection[i].x > fMaxX){
-			break;
-		}//if
-	}// for
-	Draw_Line(Points, 2, 0x00bb00);
-
-	fY = m_iOffsetY + CROSS_SECTION_HEIGHT 
-			- CROSS_SECTION_HEIGHT * ((pRoadSection[0].y - fMinY) / (fMaxY - fMinY));
-	fY = fHeight - fY;
-	fX = OFFSET_X + CROSS_SECTION_WIDTH * ((pRoadSection[0].x - fMinX) / (fMaxX - fMinX));
-
-	Points.Clear();
-	Points.Add(fX,fY);	        
-	
-	for (i = 1; i < iRoadPoints; i++) {
-		fY = m_iOffsetY + CROSS_SECTION_HEIGHT 
-			- CROSS_SECTION_HEIGHT * ((pRoadSection[i].y - fMinY) / (fMaxY - fMinY));
-		fY = fHeight - fY;
-		fX = OFFSET_X + CROSS_SECTION_WIDTH * ((pRoadSection[i].x - fMinX) / (fMaxX - fMinX));
-		Points.Add(fX,fY);	
-	}// for
-	Draw_Line(Points, 0, 0x0000bb);
-
-
-}//method
-
-void CPDFDocEngine_CrossSections::AddVolumesTable(TSG_Point * pProfile,
-									TSG_Point ** pCrossSections, 
-									 float *pHeight,
-									 TSG_Point * pRoadSection,
-									 int iSections,
-									 int iCrossSectionPoints,
-									 int iRoadPoints){
-
-
-	int i,j;
-	int iRow;
-	int iRowsWritten = 0;
-	float fDist;
-	float fX,fY;
-	float fXBox, fYBox;
-	float fIn, fOut;
-	float fInPrev, fOutPrev;
-	float fVolume;
-	float fHeight;
-	CSG_String sHeader[] = {_TL("Section"),_TL("Dist."),_TL("Area +"),_TL("Area -"),_TL("Partial D."),_TL("Vol. +"), _TL("Vol. -")};
-			
-	Add_Page_Title(_TL("Volumes"), PDF_TITLE_01);
-
-	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
-	
-	for (i = 0; i < iSections; i++){
-		iRow = iRowsWritten % VOLUMES_TABLE_MAX_ROWS;
-		if (iRow == 0){
-			Add_Page();
-			Draw_Rectangle(OFFSET_X, fHeight - OFFSET_Y,
-							OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * VOLUMES_TABLE_COLUMNS,
-							fHeight - OFFSET_Y - VOLUMES_TABLE_ROW_HEIGHT);			
-			fY = OFFSET_Y + VOLUMES_TABLE_ROW_HEIGHT * .6;
-			fY = fHeight - fY;
-			for (j = 0; j < VOLUMES_TABLE_COLUMNS; j++){
-				fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * j + VOLUMES_TABLE_COLUMN_WIDTH / 2.;				
-				Draw_Text(fX, fY, sHeader[j].c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
-
-				fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * (j + 1);
-				Draw_Line(fX, fHeight - OFFSET_Y, 
-							fX, fHeight - (OFFSET_Y + VOLUMES_TABLE_ROW_HEIGHT),
-							0);
-			}//for
-			if (i){
-				i--;
-			}//if
-		}//if
-		for (j = 0; j < 4; j++){
-			fYBox = OFFSET_Y + VOLUMES_TABLE_HEADER_SEPARATION + VOLUMES_TABLE_ROW_HEIGHT * iRow;
-			fYBox = fHeight - fYBox;
-			fXBox = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * j;			
-			Draw_Rectangle(fXBox, fYBox, fXBox + VOLUMES_TABLE_COLUMN_WIDTH, 
-							fYBox - VOLUMES_TABLE_ROW_HEIGHT);			
-		}//for
-		fDist = pProfile[i].x;		
-		fY = OFFSET_Y + VOLUMES_TABLE_HEADER_SEPARATION + VOLUMES_TABLE_ROW_HEIGHT * (iRow + .6);
-		fY = fHeight - fY;
-		fX = OFFSET_X + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
-		Draw_Text(fX, fY, SG_Get_String(i,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
-
-		fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
-		Draw_Text(fX, fY, SG_Get_String(fDist,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
-
-		CalculateAreas(pCrossSections[i], pRoadSection, pHeight[i], iCrossSectionPoints, 
-						iRoadPoints,fIn, fOut);
-
-		fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * 2 + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
-		Draw_Text(fX, fY, SG_Get_String(fIn,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
-
-		fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * 3 + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
-		Draw_Text(fX, fY, SG_Get_String(fOut,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
-
-		if (iRow > 0){
-			for (j = 4; j < 7; j++){
-				fYBox = OFFSET_Y + VOLUMES_TABLE_HEADER_SEPARATION + VOLUMES_TABLE_ROW_HEIGHT * (iRow - .5);
-				fYBox = fHeight - fYBox;
-				fXBox = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * j;			
-				Draw_Rectangle(fXBox, fYBox, fXBox + VOLUMES_TABLE_COLUMN_WIDTH, 
-								fYBox - VOLUMES_TABLE_ROW_HEIGHT);				
-			}//for
-			fY = OFFSET_Y + VOLUMES_TABLE_HEADER_SEPARATION + VOLUMES_TABLE_ROW_HEIGHT * (iRow + .1) ;
-			fY = fHeight - fY;
-
-			fDist = (pProfile[i].x - pProfile[i-1].x);
-			fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * 4 + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
-			Draw_Text(fX, fY, SG_Get_String(fDist,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
-
-			fVolume = (pProfile[i].x - pProfile[i-1].x) * (fIn + fInPrev) / 2.;
-			fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * 5 + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
-			Draw_Text(fX, fY, SG_Get_String(fVolume,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
-			
-			fVolume = (pProfile[i].x - pProfile[i-1].x) * (fOut + fOutPrev) / 2.;
-			fX = OFFSET_X + VOLUMES_TABLE_COLUMN_WIDTH * 6 + (VOLUMES_TABLE_COLUMN_WIDTH) / 2.;
-			Draw_Text(fX, fY, SG_Get_String(fVolume,0).c_str(), 10, PDF_STYLE_TEXT_ALIGN_H_CENTER);
-		}//if
-
-		fInPrev = fIn;
-		fOutPrev = fOut;
-		iRowsWritten++;
-
-	}//for
-
-}//Method
-
-void CPDFDocEngine_CrossSections::AdjustSections(TSG_Point * pCrossSection,
-									TSG_Point * pRoadSection,
-									std::vector<TSG_Point > &ModifiedCrossSection,
-									std::vector<TSG_Point > &ModifiedRoadSection,
-									float fHeight,
-									int &iCrossSectionPoints, 
-									int &iRoadPoints){
-
-	bool bDitchAdded;
-	int i,j;
-	int iSgn;
-	int iRoadPointsToAdd = 0;
-	int iCrossSectionPointsToAdd = 0;
-	float fX, fY;
-	TSG_Point  P;
-
-	ModifiedCrossSection.clear();
-	ModifiedRoadSection.clear();
-
-	//left half
-
-	for (i = 0 ; i < iCrossSectionPoints - 1; i++){
-		if (pCrossSection[i].x < pRoadSection[0].x && 
-				pCrossSection[i+1].x >= pRoadSection[0].x){
-			break;
-		}//if
-	}//for
-
-	if (i == iCrossSectionPoints - 1){
-		if (pRoadSection[0].y  + fHeight < pCrossSection[0].y){
-			P.x = pRoadSection[0].x - 2* DITCH_WIDTH * SLOPE_TRANSITION - DITCH_WIDTH 
-				- fabs(pCrossSection[0].y - pRoadSection[0].y - fHeight) / SLOPE_RATIO;
-			P.y = pCrossSection[0].y - fHeight;
-			ModifiedRoadSection.push_back(P);
-			P.y = pCrossSection[0].y;
-			ModifiedCrossSection.push_back(P);
-			iCrossSectionPointsToAdd++;
-			iRoadPointsToAdd++;			
-			
-			P.x = pRoadSection[0].x - 2* DITCH_WIDTH * SLOPE_TRANSITION - DITCH_WIDTH;
-			P.y = pRoadSection[0].y;
-			ModifiedRoadSection.push_back(P);
-			iRoadPointsToAdd++;
-
-			P.x = pRoadSection[0].x - DITCH_WIDTH * SLOPE_TRANSITION - DITCH_WIDTH;	
-			P.y = pRoadSection[0].y - DITCH_WIDTH / SLOPE_TRANSITION;
-			ModifiedRoadSection.push_back(P);
-			iRoadPointsToAdd++;
-
-			P.x = pRoadSection[0].x - DITCH_WIDTH * SLOPE_TRANSITION;
-			ModifiedRoadSection.push_back(P);
-			iRoadPointsToAdd++;
-		}//if		
-		P.x = pRoadSection[0].x - fabs(pCrossSection[0].y - pRoadSection[0].y - fHeight) / SLOPE_RATIO;
-		P.y = pCrossSection[0].y - fHeight;
-		ModifiedRoadSection.push_back(P);
-		P.y = pCrossSection[0].y;
-		ModifiedCrossSection.push_back(P);
-		iCrossSectionPointsToAdd++;
-		iRoadPointsToAdd++;
-	}//if
-	else{
-		bDitchAdded = false;
-		for (j = 0; j < 4; j++){ //4 dummy points
-			ModifiedRoadSection.push_back(pRoadSection[0]);
-		}//for	
-		for (j = i ; j >= 0; j--){
-			if (ModifiedRoadSection[1].y  + fHeight > pCrossSection[j+1].y){
-				iSgn = -1;
-			}//if
-			else{
-				iSgn = 1;
-			}//else
-			Intersect_Lines(ModifiedRoadSection[1].x, ModifiedRoadSection[1].y + fHeight, 
-							ModifiedRoadSection[1].x - LONG_SEGMENT / SLOPE_RATIO,
-							ModifiedRoadSection[1].y + LONG_SEGMENT * iSgn + fHeight,
-							pCrossSection[j].x, pCrossSection[j].y,
-							pCrossSection[j+1].x, pCrossSection[j+1].y,
-							fX,fY);
-			if (pCrossSection[j].x < fX && pCrossSection[j+1].x >= fX){
-				if (iSgn == 1){
-					if(!bDitchAdded){
-						ModifiedRoadSection[1].x = pRoadSection[0].x - 2* DITCH_WIDTH * SLOPE_TRANSITION - DITCH_WIDTH;
-						ModifiedRoadSection[1].y = pRoadSection[0].y;						
-						iRoadPointsToAdd++;
-
-						ModifiedRoadSection[2].x = pRoadSection[0].x - DITCH_WIDTH * SLOPE_TRANSITION - DITCH_WIDTH;	
-						ModifiedRoadSection[2].y = pRoadSection[0].y - DITCH_WIDTH / SLOPE_TRANSITION;						
-						iRoadPointsToAdd++;
-
-						ModifiedRoadSection[3].x = pRoadSection[0].x - DITCH_WIDTH * SLOPE_TRANSITION;
-						ModifiedRoadSection[3].y = pRoadSection[0].y - DITCH_WIDTH / SLOPE_TRANSITION;						
-						iRoadPointsToAdd++;
-						
-						j = i + 1;
-						bDitchAdded = true;
-					}//if
-					else{
-						ModifiedRoadSection[0].x = fX;
-						ModifiedRoadSection[0].y = fY - fHeight;
-						iRoadPointsToAdd++;
-						break;
-					}//else
-				}//if
-				else{
-					ModifiedRoadSection[0].x = fX;
-					ModifiedRoadSection[0].y = fY - fHeight;
-					iRoadPointsToAdd++;
-					break;
-				}//else
-			}//if
-		}//for
-		if (j < 0){
-			ModifiedRoadSection[0].x = pRoadSection[0].x - fabs(pCrossSection[0].y - pRoadSection[0].y - fHeight) / SLOPE_RATIO;
-			ModifiedRoadSection[0].y = pCrossSection[0].y - fHeight;
-			P.x = ModifiedRoadSection[0].x;
-			P.y = pCrossSection[0].y;
-			ModifiedCrossSection.push_back(P);
-			iCrossSectionPointsToAdd++;
-			iRoadPointsToAdd++;
-		}//if*/
-	}//else
-
-	//add the central points
-
-	for (i = 0; i < iCrossSectionPoints; i++){
-		ModifiedCrossSection.push_back(pCrossSection[i]);
-	}//for
-	
-	ModifiedRoadSection.resize(iRoadPoints + iRoadPointsToAdd);
-	for (i = 0; i < iRoadPoints; i++){
-		ModifiedRoadSection[i + iRoadPointsToAdd].x = pRoadSection[i].x;
-		ModifiedRoadSection[i + iRoadPointsToAdd].y = pRoadSection[i].y;
-	}//for	
-	for (i = 0; i < iRoadPoints + iRoadPointsToAdd; i++){
-		ModifiedRoadSection[i].x = ModifiedRoadSection[i].x;
-		ModifiedRoadSection[i].y = ModifiedRoadSection[i].y + fHeight;
-	}//for
-
-	iRoadPoints += iRoadPointsToAdd;
-	iCrossSectionPoints += iCrossSectionPointsToAdd;
-
-	// right half
-
-	for (i = 0 ; i < iCrossSectionPoints - 1; i++){
-		if (ModifiedCrossSection[i].x < ModifiedRoadSection[iRoadPoints-1].x && 
-				ModifiedCrossSection[i+1].x >= ModifiedRoadSection[iRoadPoints-1].x){
-			break;
-		}//if
-	}//for
-	if (i == iCrossSectionPoints - 1){
-		if (ModifiedRoadSection[iRoadPoints-1].y  + fHeight < ModifiedCrossSection[iCrossSectionPoints-1].y){
-			P.x = ModifiedRoadSection[iRoadPoints-1].x + DITCH_WIDTH * SLOPE_TRANSITION;
-			P.y = ModifiedRoadSection[iRoadPoints-1].y - DITCH_WIDTH / SLOPE_TRANSITION;
-			ModifiedRoadSection.push_back(P);
-			iRoadPoints++;
-
-			P.x = ModifiedRoadSection[iRoadPoints-2].x + DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;	
-			ModifiedRoadSection.push_back(P);
-			iRoadPoints++;
-
-			P.x = ModifiedRoadSection[iRoadPoints-3].x + 2* DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;
-			P.y = ModifiedRoadSection[iRoadPoints-3].y;
-			ModifiedRoadSection.push_back(P);
-			iRoadPoints++;
-		}//if		
-		P.x = ModifiedRoadSection[iRoadPoints-1].x 
-				+ fabs(ModifiedCrossSection[iCrossSectionPoints-1].y 
-				- ModifiedRoadSection[iRoadPoints-1].y) / SLOPE_RATIO;
-		P.y = ModifiedCrossSection[iCrossSectionPoints-1].y ;
-		ModifiedRoadSection.push_back(P);
-		ModifiedCrossSection.push_back(P);
-		iCrossSectionPoints++;
-		iRoadPoints++;
-	}//if
-	else{
-		bDitchAdded = false;
-		for (j = i ; j < iCrossSectionPoints - 1; j++){
-			if (ModifiedRoadSection[iRoadPoints-1].y > ModifiedCrossSection[j].y){
-				iSgn = -1;
-			}//if
-			else{
-				iSgn = 1;
-			}//else
-			if (iSgn == 1 && !bDitchAdded){
-				P.x = ModifiedRoadSection[iRoadPoints-1].x + DITCH_WIDTH * SLOPE_TRANSITION;
-				P.y = ModifiedRoadSection[iRoadPoints-1].y - DITCH_WIDTH / SLOPE_TRANSITION;
-				ModifiedRoadSection.push_back(P);
-				iRoadPoints++;
-
-				P.x = ModifiedRoadSection[iRoadPoints-2].x + DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;	
-				ModifiedRoadSection.push_back(P);
-				iRoadPoints++;
-
-				P.x = ModifiedRoadSection[iRoadPoints-3].x + 2* DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;
-				P.y = ModifiedRoadSection[iRoadPoints-3].y;
-				ModifiedRoadSection.push_back(P);
-				iRoadPoints++;
-				
-				if (ModifiedRoadSection[iRoadPoints-1].y > ModifiedCrossSection[j].y){
-					iSgn = -1;
-				}//if
-				else{
-					iSgn = 1;
-				}//else
-
-				bDitchAdded = true;
-
-			}//if
-
-			Intersect_Lines(ModifiedRoadSection[iRoadPoints-1].x, ModifiedRoadSection[iRoadPoints-1].y, 
-							ModifiedRoadSection[iRoadPoints-1].x + LONG_SEGMENT / SLOPE_RATIO,
-							ModifiedRoadSection[iRoadPoints-1].y + LONG_SEGMENT * iSgn,
-							ModifiedCrossSection[j].x, ModifiedCrossSection[j].y,
-							ModifiedCrossSection[j+1].x, ModifiedCrossSection[j+1].y,
-							fX,fY);
-
-			if (ModifiedCrossSection[j].x < fX && ModifiedCrossSection[j+1].x >= fX){
-				P.x = fX;
-				P.y = fY;
-				ModifiedRoadSection.push_back(P);
-				iRoadPoints++;
-				break;
-			}//if
-		}//for
-		if (j == iCrossSectionPoints - 1){
-			if (ModifiedRoadSection[iRoadPoints-1].y  + fHeight < ModifiedCrossSection[iCrossSectionPoints-1].y
-					&& !bDitchAdded){
-				
-				P.x = ModifiedRoadSection[iRoadPoints-1].x + DITCH_WIDTH * SLOPE_TRANSITION;
-				P.y = ModifiedRoadSection[iRoadPoints-1].y - DITCH_WIDTH / SLOPE_TRANSITION;
-				ModifiedRoadSection.push_back(P);
-				iRoadPoints++;
-
-				P.x = ModifiedRoadSection[iRoadPoints-2].x + DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;	
-				ModifiedRoadSection.push_back(P);
-				iRoadPoints++;
-
-				P.x = ModifiedRoadSection[iRoadPoints-3].x + 2* DITCH_WIDTH * SLOPE_TRANSITION + DITCH_WIDTH;
-				P.y = ModifiedRoadSection[iRoadPoints-3].y;
-				ModifiedRoadSection.push_back(P);
-				iRoadPoints++;
-
-			}//if		
-			P.x = ModifiedRoadSection[iRoadPoints-1].x 
-					+ fabs(ModifiedCrossSection[iCrossSectionPoints-1].y 
-					- ModifiedRoadSection[iRoadPoints-1].y) / SLOPE_RATIO;
-			P.y = ModifiedCrossSection[iCrossSectionPoints-1].y ;
-			ModifiedRoadSection.push_back(P);
-			ModifiedCrossSection.push_back(P);
-			iCrossSectionPoints++;
-			iRoadPoints++;
-
-		}//if*/
-	}//else
-
-}//method
-
-void CPDFDocEngine_CrossSections::Intersect_Lines(float x0,float y0,float x1,float y1,
-									float x2,float y2,float x3,float y3,
-									float &xi,float &yi){
-
-	float a1,b1,c1, 
-		  a2,b2,c2,
-		  det_inv,  
-		  m1,m2;    
-
-	if ((x1-x0)!=0)
-	   m1 = (y1-y0)/(x1-x0);
-	else
-	   m1 = (float)1e+10;   
-
-	if ((x3-x2)!=0)
-	   m2 = (y3-y2)/(x3-x2);
-	else
-	   m2 = (float)1e+10;   
-
-	a1 = m1;
-	a2 = m2;
-
-	b1 = -1;
-	b2 = -1;
-
-	c1 = (y0-m1*x0);
-	c2 = (y2-m2*x2);
-
-	det_inv = 1/(a1*b2 - a2*b1);
-
-	xi=((b1*c2 - b2*c1)*det_inv);
-	yi=((a2*c1 - a1*c2)*det_inv);
-
-} //method
-
-void CPDFDocEngine_CrossSections::CalculateAreas(TSG_Point * pCrossSection,
-									TSG_Point * pRoadSection,
-									float fHeight,
-									int iCrossSectionPoints, 
-									int iRoadPoints,
-									float &fPositiveArea,
-									float &fNegativeArea){
-
-	int i;
-	CSG_Shapes *pRoadShapes, *pCrossSectionShapes, *pResultShapes;
-	CSG_Shape *pRoadShape, *pCrossSectionShape, *pResultShape;
-
-	pResultShapes = new CSG_Shapes;
-	pResultShapes->Create(SHAPE_TYPE_Polygon);
-	pResultShape = pResultShapes->Add_Shape();
-	pRoadShapes = new CSG_Shapes;
-	pRoadShapes->Create(SHAPE_TYPE_Polygon);
-	pRoadShape = pRoadShapes->Add_Shape();
-	pCrossSectionShapes = new CSG_Shapes;
-	pCrossSectionShapes->Create(SHAPE_TYPE_Polygon);
-	pCrossSectionShape = pCrossSectionShapes->Add_Shape();
-	
-	for (i = 0; i < iRoadPoints; i++){
-		pRoadShape->Add_Point(pRoadSection[i].x, pRoadSection[i].y + fHeight);
-	}//for
-	pRoadShape->Add_Point(pRoadSection[iRoadPoints-1].x + LONG_SEGMENT / SLOPE_RATIO,
-						pRoadSection[iRoadPoints-1].y + fHeight + LONG_SEGMENT);
-	
-	pRoadShape->Add_Point(pRoadSection[0].x - LONG_SEGMENT / SLOPE_RATIO,
-						pRoadSection[0].y + fHeight + LONG_SEGMENT);
-						
-	for (i = 0; i < iCrossSectionPoints; i++){
-		pCrossSectionShape->Add_Point(pCrossSection[i].x, pCrossSection[i].y);
-	}//for
-	pCrossSectionShape->Add_Point(pCrossSection[iCrossSectionPoints-1].x + LONG_SEGMENT / SLOPE_RATIO,
-						pCrossSection[iCrossSectionPoints-1].y - LONG_SEGMENT);
-	
-	pCrossSectionShape->Add_Point(pCrossSection[0].x - LONG_SEGMENT / SLOPE_RATIO,
-						pCrossSection[0].y - LONG_SEGMENT);		
-
-	if (GPC_Intersection(pCrossSectionShape, pRoadShape, pResultShape)){
-		fNegativeArea = ((CSG_Shape_Polygon*)pResultShape)->Get_Area();
-	}//if
-	else{
-		fNegativeArea = 0;
-	}//else
-
-	pCrossSectionShape->Del_Parts();
-	pRoadShape->Del_Parts();
-	pResultShape->Del_Parts();
-	
-	for (i = 0; i < iRoadPoints; i++){
-		pRoadShape->Add_Point(pRoadSection[i].x, pRoadSection[i].y + fHeight);
-	}//for
-	pRoadShape->Add_Point(pRoadSection[iRoadPoints-1].x + LONG_SEGMENT / SLOPE_RATIO,
-						pRoadSection[iRoadPoints-1].y + fHeight - LONG_SEGMENT);
-	
-	pRoadShape->Add_Point(pRoadSection[0].x - LONG_SEGMENT / SLOPE_RATIO,
-						pRoadSection[0].y + fHeight - LONG_SEGMENT);
-						
-	for (i = 0; i < iCrossSectionPoints; i++){
-		pCrossSectionShape->Add_Point(pCrossSection[i].x, pCrossSection[i].y);
-	}//for
-	pCrossSectionShape->Add_Point(pCrossSection[iCrossSectionPoints-1].x + LONG_SEGMENT / SLOPE_RATIO,
-						pCrossSection[iCrossSectionPoints-1].y + LONG_SEGMENT);
-	
-	pCrossSectionShape->Add_Point(pCrossSection[0].x - LONG_SEGMENT / SLOPE_RATIO,
-						pCrossSection[0].y + LONG_SEGMENT);		
-	
-	if (GPC_Intersection(pCrossSectionShape, pRoadShape, pResultShape)){
-		fPositiveArea = ((CSG_Shape_Polygon*)pResultShape)->Get_Area();
-	}//if
-	else{
-		fPositiveArea = 0;
-	}//else
-
-	delete pRoadShapes;
-	delete pCrossSectionShapes;
-	delete pResultShapes;
-				
-}//method
-
-void CPDFDocEngine_CrossSections::AddLongitudinalProfile(TSG_Point * pProfile,
-											float *pHeight,
-											int iNumPoints){
-
-	int i;	
-    int iMag;
-	int iNumLines;
-    float fMinLine = 0;
-	float fMaxY, fMinY;
-	float fMaxX, fMinX;
-	float fStep;
-    float fX, fY;
-	float fOffsetX;
-	CSG_String sValue;
-	CSG_Points Points;
-	float fHeight;
-	
-	Add_Page_Title(_TL("Longitudinal Profile"), PDF_TITLE_01);
-	
-	Add_Page(PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_LANDSCAPE);
-
-	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
-
-	m_iOffsetY = 50;
-
-	fMaxY  = pProfile[0].y;
-	fMinY  = pProfile[0].y;
-		    		    
-	for (i = 0; i < iNumPoints; i++) {
-	    if (pProfile[i].y > fMaxY) {
-	        fMaxY = pProfile[i].y;
-	    }// if
-	    if (pProfile[i].y < fMinY) {
-	        fMinY = pProfile[i].y;
-	    }// if
-		if (pHeight[i] > fMaxY) {
-	        fMaxY = pHeight[i];
-	    }// if
-	    if (pHeight[i] < fMinY) {
-	        fMinY = pHeight[i];
-	    }// if
-    }//for    
-	
-	iMag = (int) (log(fMaxY - fMinY) / log(10.0));
-	fStep = (float) ((int) pow(10.0, (double) iMag));                
-	if (fStep == 0){
-		fStep = 1.;
-	}//if
-	if (fMinY < 0) {        	
-		iMag = (int) (log(fabs(fMinY)) / log(10.0));
-		fMinLine = -(int) pow(10.0, (double) iMag);
-	}// if
-	else {
-		fMinLine=(int)(((int)(fMinY/fStep)) *fStep);
-	}//else
-
-	iNumLines = (int) ((fMaxY - fMinY) / fStep);
-
-	while (iNumLines < 8) {
-		fStep = fStep / 2.0;
-		iNumLines = (int) ((fMaxY - fMinY) / fStep);
-	}// while
-	iNumLines = (int) ((fMaxY - fMinLine) / fStep);
-
-	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
-
-	for (i = 0; i < iNumLines; i++) {
-        fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION;
-		fY = m_iOffsetY + PROFILE_HEIGHT
-                - ((fMinLine + fStep * i - fMinY) / (fMaxY - fMinY)) * PROFILE_HEIGHT;		
-        if (fY <= m_iOffsetY + PROFILE_HEIGHT && fY >= m_iOffsetY) {
-			fY = fHeight - fY;
-			sValue = SG_Get_String(fMinLine + fStep * (float) i);
-			Draw_Text(fX - 10, fY, SG_Get_String(fMinLine + fStep * (float) i).c_str(), 9,
-				PDF_STYLE_TEXT_ALIGN_H_RIGHT);
-			Draw_Line(fX, fY, fX - 5, fY, 0);
-        }// if
-    }// for	
-
-	fMinX = pProfile[0].x;
-	fMaxX = pProfile[iNumPoints - 1].x;
-
-	iMag = (int) (log(fMaxX - fMinX) / log(10.0));
-	fStep = (float) pow(10.0, (double) iMag);                
-
-	iNumLines = (int) ((fMaxX-fMinX) / fStep);
-	
-	while (iNumLines < 3) {
-		fStep = fStep / 2.0;
-		iNumLines = (int) ((fMaxX-fMinX) / fStep);
-	}// while    
-	fMinLine = (int)(((int)(fMinX/fStep)) * fStep);          
-	while (fMinLine<fMinX){
-		fMinLine+=fStep;
-	}//while
-	fOffsetX = fMinX-fMinLine;
-
-	for (i = 0; i < iNumLines; i++) {
-		fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
-				+ ((fStep * (float) i-fOffsetX) / (fMaxX-fMinX)) * PROFILE_WIDTH;
-		if (fX>=OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
-				&& fX < OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION + PROFILE_WIDTH){
-			if (fabs(fStep * (float)i+fMinLine) > 100000) {
-				sValue = SG_Get_String(fStep * (float)i+fMinLine);
-			}// if 
-			else {
-				sValue = SG_Get_String(fStep * (float)i+fMinLine, 2, true);
-			}// else
-			Draw_Text(fX, fHeight - m_iOffsetY - PROFILE_HEIGHT - 15,
-				SG_Get_String(fMinLine + fStep * (float) i).c_str(), 9,
-				PDF_STYLE_TEXT_ALIGN_H_CENTER | PDF_STYLE_TEXT_ALIGN_V_TOP);
-			Draw_Line(fX, fHeight - m_iOffsetY - PROFILE_HEIGHT,
-					fX, fHeight - m_iOffsetY - PROFILE_HEIGHT - 10, 0);
-		}//if
-	}// for
-	
-	Draw_Line(OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION, 	fHeight - m_iOffsetY,
-			OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION, 
-			fHeight - m_iOffsetY - PROFILE_HEIGHT, 2);
-	Draw_Line(OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION, 
-				fHeight - m_iOffsetY - PROFILE_HEIGHT,
-				OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION + PROFILE_WIDTH, 
-				fHeight - m_iOffsetY - PROFILE_HEIGHT, 2);
-		
-	fY = m_iOffsetY + PROFILE_HEIGHT 
-			- PROFILE_HEIGHT * ((pProfile[0].y - fMinY) / (fMaxY - fMinY));
-	fY = fHeight - fY;
-	fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
-		+ PROFILE_WIDTH * ((pProfile[0].x - fMinX) / (fMaxX - fMinX));
-	Points.Add(fX, fY);	        
-	for (i = 1; i < iNumPoints; i++) {
-		fY = m_iOffsetY + PROFILE_HEIGHT 
-			- PROFILE_HEIGHT * ((pProfile[i].y - fMinY) / (fMaxY - fMinY));
-		fY = fHeight - fY;
-		fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
-			+ PROFILE_WIDTH * ((pProfile[i].x - fMinX) / (fMaxX - fMinX));
-		Points.Add(fX, fY);
-	}// for
-	Draw_Line(Points, 2, 0x00bb00);
-
-	Points.Clear();
-	
-	fY = m_iOffsetY + PROFILE_HEIGHT 
-			- PROFILE_HEIGHT * ((pHeight[0] - fMinY) / (fMaxY - fMinY));
-	fY = fHeight - fY;
-	fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
-		+ PROFILE_WIDTH * ((pProfile[0].x - fMinX) / (fMaxX - fMinX));
-	Points.Add(fX,fY);
-	for (i = 1; i < iNumPoints; i++) {
-		fY = m_iOffsetY + PROFILE_HEIGHT 
-			- PROFILE_HEIGHT * ((pHeight[i] - fMinY) / (fMaxY - fMinY));
-		fY = fHeight - fY;
-		fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
-			+ PROFILE_WIDTH * ((pProfile[i].x - fMinX) / (fMaxX - fMinX));
-		Points.Add(fX, fY);
-	}// for
-	Draw_Line(Points, 2, 0x0000bb);
-
-	DrawGuitar(pProfile, pHeight, iNumPoints);
-
-}//method
-
-void CPDFDocEngine_CrossSections::DrawGuitar(TSG_Point *pProfile, 
-							   float *pHeight, 
-							   int iNumPoints){
-
-	int i;
-	float fY;
-	float fMinX, fMaxX;
-	float fDif;
-	CSG_String sValue;
-	CSG_String sField [] = {"Distancia","Dist. Parcial.", "Elevacion del terreno", "Elevación de la calzada", " ", " "};
-	float fHeight;
-
-	fMinX = pProfile[0].x;
-	fMaxX = pProfile[iNumPoints - 1].x;
-
-	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
-	
-	for (i = 0; i < 7; i++){
-		fY = m_iOffsetY + PROFILE_HEIGHT + SEPARATION + GUITAR_LEYEND_HEIGHT / 6 * i;
-		fY = fHeight - fY;
-		Draw_Line(OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION, fY,
-				OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION + GUITAR_WIDTH, fY, 0, 0x880000);
-		if (i){
-			Draw_Text(OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION - 10, 
-						fY + GUITAR_LEYEND_HEIGHT / 13, 
-						sField[i-1].c_str(),
-						9,
-						PDF_STYLE_TEXT_ALIGN_V_CENTER | PDF_STYLE_TEXT_ALIGN_H_RIGHT);
-		
-		}//if
-	}//for
-	
-	AddGuitarValue(0, 0, fMinX, fMaxX, 1);
-	for (i = 0; i < iNumPoints; i++) {
-		AddGuitarValue(pProfile[i].x, pProfile[i].x / 1000, fMinX, fMaxX, 0);
-		if (i){
-			AddGuitarValue(pProfile[i].x, pProfile[i].x / 1000 - pProfile[i-1].x / 1000, 
-							fMinX, fMaxX, 1);
-		}//if
-		fDif = pProfile[i].y - pHeight[i];
-		AddGuitarValue(pProfile[i].x, pProfile[i].y, fMinX, fMaxX, 2);
-		AddGuitarValue(pProfile[i].x, pHeight[i], fMinX, fMaxX, 3);
-		if (fDif > 0){
-			AddGuitarValue(pProfile[i].x, fDif, fMinX, fMaxX, 4);
-		}//if
-		else{
-			AddGuitarValue(pProfile[i].x, fDif, fMinX, fMaxX, 5);
-		}//else
-
-
-	}// for
-
-}//method
-
-void CPDFDocEngine_CrossSections::AddGuitarValue(float fXValue,
-								   float fValue,
-								   float fMinX,
-								   float fMaxX,								   
-								   int iLine){
-
-	float fX,fY;
-	float fHeight;
-	
-	fHeight = Get_Size_Page().Get_YMax() - Get_Size_Page().Get_YMin();
-	
-	fX = OFFSET_Y + GUITAR_LEYEND_WIDTH + SEPARATION 
-		+ PROFILE_WIDTH * ((fXValue - fMinX) / (fMaxX - fMinX));
-	fY = m_iOffsetY + PROFILE_HEIGHT + SEPARATION + GUITAR_LEYEND_HEIGHT / 6 * (iLine + 1);
-	fY = fHeight - fY;
-
-	Draw_Line(fX, fY, fX, fY + 3, 0, 0x880000);
-
-	fY += 3;
-	fX += 3;
-	
-	Draw_Text(fX, fY, SG_Get_String(fValue, 2).c_str(), 8, 
-			0, 
-			3.14159/2.);
-		
-	fY = m_iOffsetY + PROFILE_HEIGHT + SEPARATION + GUITAR_LEYEND_HEIGHT / 6 * iLine;
-	fY = fHeight - fY;
-	fX -= 3;
-
-	Draw_Line(fX, fY, fX, fY - 3, 0, 0x880000);
-
-}//method
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.h b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.h
deleted file mode 100644
index fe365a2..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/PDFDocEngine_CrossSections.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
-    PDFDocEngine_CrossSections.h
-    Copyright (C) Victor Olaya
-    
-    This program 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.
-
-    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 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
-*******************************************************************************/ 
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#include <vector>
-#include <saga_api/doc_pdf.h>
-
-#define OFFSET_X 100
-#define OFFSET_Y 50
-#define TABLE_WIDTH 450
-#define TABLE_LANDSCAPE_WIDTH 680
-#define TABLE_OFFSET_X 70
-#define TABLE_CELLPAD 10
-#define SECTIONS_PER_PAGE 3
-#define CROSS_SECTION_HEIGHT 200
-#define CROSS_SECTION_WIDTH 400
-#define PROFILE_HEIGHT 320
-#define PROFILE_WIDTH 1000
-#define GUITAR_LEYEND_WIDTH 50
-#define GUITAR_LEYEND_HEIGHT 230
-#define GUITAR_WIDTH PROFILE_WIDTH
-#define GUITAR_HEIGHT GUITAR_LEYEND_HEIGHT
-#define SEPARATION 35
-#define VOLUMES_TABLE_COLUMNS 7
-#define VOLUMES_TABLE_COLUMN_WIDTH ((596 - 2 * OFFSET_X) / VOLUMES_TABLE_COLUMNS)
-#define VOLUMES_TABLE_ROW_HEIGHT 20
-#define VOLUMES_TABLE_HEADER_SEPARATION 35
-#define VOLUMES_TABLE_MAX_ROWS 30
-#define SLOPE_RATIO (1. / 3.)
-#define LONG_SEGMENT 5000.
-
-class CPDFDocEngine_CrossSections : public CSG_Doc_PDF   
-{
-
-public:
-		
-	CPDFDocEngine_CrossSections();
-	~CPDFDocEngine_CrossSections();
-	void AddCrossSections(TSG_Point **,float*,TSG_Point *,int,int,int);	
-	void AddLongitudinalProfile(TSG_Point *, float*, int);
-	void AddVolumesTable(TSG_Point *,TSG_Point **,float*,TSG_Point *,int,int,int);	
-
-private:
-
-	char *m_pPath;
-	int m_iCanvasHeight;
-	int m_iTableWidth;
-	int m_iOffsetY;
-	CSG_String m_sName;
-
-	void AddCrossSection(TSG_Point *,TSG_Point *,int,int);
-	void DrawGuitar(TSG_Point *,float*, int);
-	void AddGuitarValue(float,float,float,float,int);
-	void AdjustSections(TSG_Point *,TSG_Point *,std::vector<TSG_Point >&,std::vector<TSG_Point >&,float,int&,int&);
-	void Intersect_Lines(float,float,float,float,float,float,float,float,float&,float&);
-	void CalculateAreas(TSG_Point*,TSG_Point*,float,int,int,float&,float&);
-
-};
-
-
diff --git a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Polygon_Clipper.cpp b/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Polygon_Clipper.cpp
deleted file mode 100644
index c54a355..0000000
--- a/src/modules_terrain_analysis/terrain_analysis/ta_profiles/Polygon_Clipper.cpp
+++ /dev/null
@@ -1,2775 +0,0 @@
-/*
-===========================================================================
-
-Project:   Generic Polygon Clipper
-
-           A new algorithm for calculating the difference, intersection,
-           exclusive-or or union of arbitrary polygon sets.
-
-File:      gpc.h
-Author:    Alan Murta (email: gpc at cs.man.ac.uk)
-Version:   2.31
-Date:      4th June 1999
-
-Copyright: (C) 1997-1999, Advanced Interfaces Group,
-           University of Manchester.
-
-           This software is free for non-commercial use. It may be copied,
-           modified, and redistributed provided that this copyright notice
-           is preserved on all copies. The intellectual property rights of
-           the algorithms used reside with the University of Manchester
-           Advanced Interfaces Group.
-
-           You may not use this software, in whole or in part, in support
-           of any commercial product without the express consent of the
-           author.
-
-           There is no warranty or other guarantee of fitness of this
-           software for any purpose. It is provided solely "as is".
-
-===========================================================================
-*/
-
-#ifndef __gpc_h
-#define __gpc_h
-
-#include <stdio.h>
-
-
-/*
-===========================================================================
-                               Constants
-===========================================================================
-*/
-
-/* Increase GPC_EPSILON to encourage merging of near coincident edges    */
-
-#define GPC_EPSILON (DBL_EPSILON)
-
-#define GPC_VERSION "2.31"
-
-
-/*
-===========================================================================
-                           Public Data Types
-===========================================================================
-*/
-
-typedef enum                        /* Set operation type                */
-{
-  GPC_DIFF,                         /* Difference                        */
-  GPC_INT,                          /* Intersection                      */
-  GPC_XOR,                          /* Exclusive or                      */
-  GPC_UNION                         /* Union                             */
-} gpc_op;
-
-typedef struct                      /* Polygon vertex structure          */
-{
-  double              x;            /* Vertex x component                */
-  double              y;            /* vertex y component                */
-} gpc_vertex;
-
-typedef struct                      /* Vertex list structure             */
-{
-  int                 num_vertices; /* Number of vertices in list        */
-  gpc_vertex         *vertex;       /* Vertex array pointer              */
-} gpc_vertex_list;
-
-typedef struct                      /* Polygon set structure             */
-{
-  int                 num_contours; /* Number of contours in polygon     */
-  int                *hole;         /* Hole / external contour flags     */
-  gpc_vertex_list    *contour;      /* Contour array pointer             */
-} gpc_polygon;
-
-typedef struct                      /* Tristrip set structure            */
-{
-  int                 num_strips;   /* Number of tristrips               */
-  gpc_vertex_list    *strip;        /* Tristrip array pointer            */
-} gpc_tristrip;
-
-
-/*
-===========================================================================
-                       Public Function Prototypes
-===========================================================================
-*/
-
-#ifdef __cplusplus
-extern "C" void gpc_read_polygon        (FILE            *infile_ptr, 
-                              int              read_hole_flags,
-                              gpc_polygon     *polygon);
-
-extern "C" void gpc_write_polygon       (FILE            *outfile_ptr,
-                              int              write_hole_flags,
-                              gpc_polygon     *polygon);
-
-extern "C" void gpc_add_contour         (gpc_polygon     *polygon,
-                              gpc_vertex_list *contour,
-                              int              hole);
-
-extern "C" void gpc_polygon_clip        (gpc_op           set_operation,
-                              gpc_polygon     *subject_polygon,
-                              gpc_polygon     *clip_polygon,
-                              gpc_polygon     *result_polygon);
-
-extern "C" void gpc_tristrip_clip       (gpc_op           set_operation,
-                              gpc_polygon     *subject_polygon,
-                              gpc_polygon     *clip_polygon,
-                              gpc_tristrip    *result_tristrip);
-
-extern "C" void gpc_polygon_to_tristrip (gpc_polygon     *polygon,
-                              gpc_tristrip    *tristrip);
-
-extern "C" void gpc_free_polygon        (gpc_polygon     *polygon);
-
-extern "C" void gpc_free_tristrip       (gpc_tristrip    *tristrip);
-
-#else
-void gpc_read_polygon        (FILE            *infile_ptr, 
-                              int              read_hole_flags,
-                              gpc_polygon     *polygon);
-
-void gpc_write_polygon       (FILE            *outfile_ptr,
-                              int              write_hole_flags,
-                              gpc_polygon     *polygon);
-
-void gpc_add_contour         (gpc_polygon     *polygon,
-                              gpc_vertex_list *contour,
-                              int              hole);
-
-void gpc_polygon_clip        (gpc_op           set_operation,
-                              gpc_polygon     *subject_polygon,
-                              gpc_polygon     *clip_polygon,
-                              gpc_polygon     *result_polygon);
-
-void gpc_tristrip_clip       (gpc_op           set_operation,
-                              gpc_polygon     *subject_polygon,
-                              gpc_polygon     *clip_polygon,
-                              gpc_tristrip    *result_tristrip);
-
-void gpc_polygon_to_tristrip (gpc_polygon     *polygon,
-                              gpc_tristrip    *tristrip);
-
-void gpc_free_polygon        (gpc_polygon     *polygon);
-
-void gpc_free_tristrip       (gpc_tristrip    *tristrip);
-#endif
-
-#endif
-
-/*
-===========================================================================
-                           End of file: gpc.h
-===========================================================================
-*/
-
-/*
-===========================================================================
-
-Project:   Generic Polygon Clipper
-
-           A new algorithm for calculating the difference, intersection,
-           exclusive-or or union of arbitrary polygon sets.
-
-File:      gpc.c
-Author:    Alan Murta (email: gpc at cs.man.ac.uk)
-Version:   2.31
-Date:      4th June 1999
-
-Copyright: (C) 1997-1999, Advanced Interfaces Group,
-           University of Manchester.
-
-           This software is free for non-commercial use. It may be copied,
-           modified, and redistributed provided that this copyright notice
-           is preserved on all copies. The intellectual property rights of
-           the algorithms used reside with the University of Manchester
-           Advanced Interfaces Group.
-
-           You may not use this software, in whole or in part, in support
-           of any commercial product without the express consent of the
-           author.
-
-           There is no warranty or other guarantee of fitness of this
-           software for any purpose. It is provided solely "as is".
-
-===========================================================================
-*/
-
-
-/*
-===========================================================================
-                                Includes
-===========================================================================
-*/
-
-#include <stdlib.h>
-#include <float.h>
-#include <math.h>
-
-
-/*
-===========================================================================
-                                Constants
-===========================================================================
-*/
-
-#ifndef TRUE
-#define FALSE              0
-#define TRUE               1
-#endif
-
-#define LEFT               0
-#define RIGHT              1
-
-#define ABOVE              0
-#define BELOW              1
-
-#define CLIP               0
-#define SUBJ               1
-
-#define INVERT_TRISTRIPS   FALSE
-
-
-/*
-===========================================================================
-                                 Macros 
-===========================================================================
-*/
-
-#define EQ(a, b)           (fabs((a) - (b)) <= GPC_EPSILON)
-
-#define PREV_INDEX(i, n)   ((i - 1 + n) % n)
-#define NEXT_INDEX(i, n)   ((i + 1    ) % n)
-
-#define OPTIMAL(v, i, n)   ((v[PREV_INDEX(i, n)].y != v[i].y) || \
-                            (v[NEXT_INDEX(i, n)].y != v[i].y))
-
-#define FWD_MIN(v, i, n)   ((v[PREV_INDEX(i, n)].vertex.y >= v[i].vertex.y) \
-                         && (v[NEXT_INDEX(i, n)].vertex.y > v[i].vertex.y))
-
-#define NOT_FMAX(v, i, n)   (v[NEXT_INDEX(i, n)].vertex.y > v[i].vertex.y)
-
-#define REV_MIN(v, i, n)   ((v[PREV_INDEX(i, n)].vertex.y > v[i].vertex.y) \
-                         && (v[NEXT_INDEX(i, n)].vertex.y >= v[i].vertex.y))
-
-#define NOT_RMAX(v, i, n)   (v[PREV_INDEX(i, n)].vertex.y > v[i].vertex.y)
-
-#define VERTEX(e,p,s,x,y)  {add_vertex(&((e)->outp[(p)]->v[(s)]), x, y); \
-                            (e)->outp[(p)]->active++;}
-
-#define P_EDGE(d,e,p,i,j)  {(d)= (e); \
-                            do {(d)= (d)->prev;} while (!(d)->outp[(p)]); \
-                            (i)= (d)->bot.x + (d)->dx * ((j)-(d)->bot.y);}
-
-#define N_EDGE(d,e,p,i,j)  {(d)= (e); \
-                            do {(d)= (d)->next;} while (!(d)->outp[(p)]); \
-                            (i)= (d)->bot.x + (d)->dx * ((j)-(d)->bot.y);}
-/*
-#define _MALLOC(p, b, s)    {if ((b) > 0) { \
-                            ((void *)p)= malloc(b); if (!(p)) { \
-                            fprintf(stderr, "gpc malloc failure: %s\n", s); \
-				            exit(0);}} else p= NULL;}
-*/
-#define _MALLOC(p, b, s)    {if ((b) > 0) { \
-							void	**pPointer	= ((void **)&p);\
-                            *pPointer= malloc(b); if (!(p)) { \
-                            fprintf(stderr, "gpc malloc failure: %s\n", s); \
-				            exit(0);}} else p= NULL;}
-
-#define FREE(p)            {if (p) {free(p); (p)= NULL;}}
-
-
-/*
-===========================================================================
-                            Private Data Types
-===========================================================================
-*/
-
-typedef enum                        /* Edge intersection classes         */
-{
-  NUL,                              /* Empty non-intersection            */
-  EMX,                              /* External maximum                  */
-  ELI,                              /* External left intermediate        */
-  TED,                              /* Top edge                          */
-  ERI,                              /* External right intermediate       */
-  RED,                              /* Right edge                        */
-  IMM,                              /* Internal maximum and minimum      */
-  IMN,                              /* Internal minimum                  */
-  EMN,                              /* External minimum                  */
-  EMM,                              /* External maximum and minimum      */
-  LED,                              /* Left edge                         */
-  ILI,                              /* Internal left intermediate        */
-  BED,                              /* Bottom edge                       */
-  IRI,                              /* Internal right intermediate       */
-  IMX,                              /* Internal maximum                  */
-  FUL                               /* Full non-intersection             */
-} vertex_type;
-
-typedef enum                        /* Horizontal edge states            */
-{
-  NH,                               /* No horizontal edge                */
-  BH,                               /* Bottom horizontal edge            */
-  TH                                /* Top horizontal edge               */
-} h_state;
-
-typedef enum                        /* Edge bundle state                 */
-{
-  UNBUNDLED,                        /* Isolated edge not within a bundle */
-  BUNDLE_HEAD,                      /* Bundle head node                  */
-  BUNDLE_TAIL                       /* Passive bundle tail node          */
-} bundle_state;
-
-typedef struct v_shape              /* Internal vertex list datatype     */
-{
-  double              x;            /* X coordinate component            */
-  double              y;            /* Y coordinate component            */
-  struct v_shape     *next;         /* Pointer to next vertex in list    */
-} vertex_node;
-
-typedef struct p_shape              /* Internal contour / tristrip type  */
-{
-  int                 active;       /* Active flag / vertex count        */
-  int                 hole;         /* Hole / external contour flag      */
-  vertex_node        *v[2];         /* Left and right vertex list ptrs   */
-  struct p_shape     *next;         /* Pointer to next polygon contour   */
-  struct p_shape     *proxy;        /* Pointer to actual structure used  */
-} polygon_node;
-
-typedef struct edge_shape
-{
-  gpc_vertex          vertex;       /* Piggy-backed contour vertex data  */
-  gpc_vertex          bot;          /* Edge lower (x, y) coordinate      */
-  gpc_vertex          top;          /* Edge upper (x, y) coordinate      */
-  double              xb;           /* Scanbeam bottom x coordinate      */
-  double              xt;           /* Scanbeam top x coordinate         */
-  double              dx;           /* Change in x for a unit y increase */
-  int                 type;         /* Clip / subject edge flag          */
-  int                 bundle[2][2]; /* Bundle edge flags                 */
-  int                 bside[2];     /* Bundle left / right indicators    */
-  bundle_state        bstate[2];    /* Edge bundle state                 */
-  polygon_node       *outp[2];      /* Output polygon / tristrip pointer */
-  struct edge_shape  *prev;         /* Previous edge in the AET          */
-  struct edge_shape  *next;         /* Next edge in the AET              */
-  struct edge_shape  *pred;         /* Edge connected at the lower end   */
-  struct edge_shape  *succ;         /* Edge connected at the upper end   */
-  struct edge_shape  *next_bound;   /* Pointer to next bound in LMT      */
-} edge_node;
-
-typedef struct lmt_shape            /* Local minima table                */
-{
-  double              y;            /* Y coordinate at local minimum     */
-  edge_node          *first_bound;  /* Pointer to bound list             */
-  struct lmt_shape   *next;         /* Pointer to next local minimum     */
-} lmt_node;
-
-typedef struct sbt_t_shape          /* Scanbeam tree                     */
-{
-  double              y;            /* Scanbeam node y value             */
-  struct sbt_t_shape *less;         /* Pointer to nodes with lower y     */
-  struct sbt_t_shape *more;         /* Pointer to nodes with higher y    */
-} sb_tree;
-
-typedef struct it_shape             /* Intersection table                */
-{
-  edge_node          *ie[2];        /* Intersecting edge (bundle) pair   */
-  gpc_vertex          point;        /* Point of intersection             */
-  struct it_shape    *next;         /* The next intersection table node  */
-} it_node;
-
-typedef struct st_shape             /* Sorted edge table                 */
-{
-  edge_node          *edge;         /* Pointer to AET edge               */
-  double              xb;           /* Scanbeam bottom x coordinate      */
-  double              xt;           /* Scanbeam top x coordinate         */
-  double              dx;           /* Change in x for a unit y increase */
-  struct st_shape    *prev;         /* Previous edge in sorted list      */
-} st_node;
-
-typedef struct bbox_shape           /* Contour axis-aligned bounding box */
-{
-  double             xmin;          /* Minimum x coordinate              */
-  double             ymin;          /* Minimum y coordinate              */
-  double             xmax;          /* Maximum x coordinate              */
-  double             ymax;          /* Maximum y coordinate              */
-} bbox;
-
-
-/*
-===========================================================================
-                               Global Data
-===========================================================================
-*/
-
-/* Horizontal edge state transitions within scanbeam boundary */
-const h_state next_h_state[3][6]=
-{
-  /*        ABOVE     BELOW     CROSS */
-  /*        L   R     L   R     L   R */  
-  /* NH */ {BH, TH,   TH, BH,   NH, NH},
-  /* BH */ {NH, NH,   NH, NH,   TH, TH},
-  /* TH */ {NH, NH,   NH, NH,   BH, BH}
-};
-
-
-/*
-===========================================================================
-                             Private Functions
-===========================================================================
-*/
-
-static void reset_it(it_node **it)
-{
-  it_node *itn;
-
-  while (*it)
-  {
-    itn= (*it)->next;
-    FREE(*it);
-    *it= itn;
-  }
-}
-
-
-static void reset_lmt(lmt_node **lmt)
-{
-  lmt_node *lmtn;
-
-  while (*lmt)
-  {
-    lmtn= (*lmt)->next;
-    FREE(*lmt);
-    *lmt= lmtn;
-  }
-}
-
-
-static void insert_bound(edge_node **b, edge_node *e)
-{
-  edge_node *existing_bound;
-
-  if (!*b)
-  {
-    /* Link node e to the tail of the list */
-    *b= e;
-  }
-  else
-  {
-    /* Do primary sort on the x field */
-    if (e[0].bot.x < (*b)[0].bot.x)
-    {
-      /* Insert a new node mid-list */
-      existing_bound= *b;
-      *b= e;
-      (*b)->next_bound= existing_bound;
-    }
-    else
-    {
-      if (e[0].bot.x == (*b)[0].bot.x)
-      {
-        /* Do secondary sort on the dx field */
-        if (e[0].dx < (*b)[0].dx)
-        {
-          /* Insert a new node mid-list */
-          existing_bound= *b;
-          *b= e;
-          (*b)->next_bound= existing_bound;
-        }
-        else
-        {
-          /* Head further down the list */
-          insert_bound(&((*b)->next_bound), e);
-        }
-      }
-      else
-      {
-        /* Head further down the list */
-        insert_bound(&((*b)->next_bound), e);
-      }
-    }
-  }
-}
-
-
-static edge_node **bound_list(lmt_node **lmt, double y)
-{
-  lmt_node *existing_node;
-
-  if (!*lmt)
-  {
-    /* Add node onto the tail end of the LMT */
-    _MALLOC(*lmt, sizeof(lmt_node), "LMT insertion");
-    (*lmt)->y= y;
-    (*lmt)->first_bound= NULL;
-    (*lmt)->next= NULL;
-    return &((*lmt)->first_bound);
-  }
-  else
-    if (y < (*lmt)->y)
-    {
-      /* Insert a new LMT node before the current node */
-      existing_node= *lmt;
-      _MALLOC(*lmt, sizeof(lmt_node), "LMT insertion");
-      (*lmt)->y= y;
-      (*lmt)->first_bound= NULL;
-      (*lmt)->next= existing_node;
-      return &((*lmt)->first_bound);
-    }
-    else
-      if (y > (*lmt)->y)
-        /* Head further up the LMT */
-        return bound_list(&((*lmt)->next), y);
-      else
-        /* Use this existing LMT node */
-        return &((*lmt)->first_bound);
-}
-
-
-static void add_to_sbtree(int *entries, sb_tree **sbtree, double y)
-{
-  if (!*sbtree)
-  {
-    /* Add a new tree node here */
-    _MALLOC(*sbtree, sizeof(sb_tree), "scanbeam tree insertion");
-    (*sbtree)->y= y;
-    (*sbtree)->less= NULL;
-    (*sbtree)->more= NULL;
-    (*entries)++;
-  }
-  else
-  {
-    if ((*sbtree)->y > y)
-    {
-    /* Head into the 'less' sub-tree */
-      add_to_sbtree(entries, &((*sbtree)->less), y);
-    }
-    else
-    {
-      if ((*sbtree)->y < y)
-      {
-        /* Head into the 'more' sub-tree */
-        add_to_sbtree(entries, &((*sbtree)->more), y);
-      }
-    }
-  }
-}
-
-
-static void build_sbt(int *entries, double *sbt, sb_tree *sbtree)
-{
-  if (sbtree->less)
-    build_sbt(entries, sbt, sbtree->less);
-  sbt[*entries]= sbtree->y;
-  (*entries)++;
-  if (sbtree->more)
-    build_sbt(entries, sbt, sbtree->more);
-}
-
-
-static void free_sbtree(sb_tree **sbtree)
-{
-  if (*sbtree)
-  {
-    free_sbtree(&((*sbtree)->less));
-    free_sbtree(&((*sbtree)->more));
-    FREE(*sbtree);
-  }
-}
-
-
-static int count_optimal_vertices(gpc_vertex_list c)
-{
-  int result= 0, i;
-
-  /* Ignore non-contributing contours */
-  if (c.num_vertices > 0)
-  {
-    for (i= 0; i < c.num_vertices; i++)
-      /* Ignore superfluous vertices embedded in horizontal edges */
-      if (OPTIMAL(c.vertex, i, c.num_vertices))
-        result++;
-  }
-  return result;
-}
-
-
-static edge_node *build_lmt(lmt_node **lmt, sb_tree **sbtree,
-                            int *sbt_entries, gpc_polygon *p, int type,
-                            gpc_op op)
-{
-  int          c, i, min, max, num_edges, v, num_vertices;
-  int          total_vertices= 0, e_index=0;
-  edge_node   *e, *edge_table;
-
-  for (c= 0; c < p->num_contours; c++)
-    total_vertices+= count_optimal_vertices(p->contour[c]);
-
-  /* Create the entire input polygon edge table in one go */
-  _MALLOC(edge_table, total_vertices * sizeof(edge_node),
-         "edge table creation");
-
-  for (c= 0; c < p->num_contours; c++)
-  {
-    if (p->contour[c].num_vertices < 0)
-    {
-      /* Ignore the non-contributing contour and repair the vertex count */
-      p->contour[c].num_vertices= -p->contour[c].num_vertices;
-    }
-    else
-    {
-      /* Perform contour optimisation */
-      num_vertices= 0;
-      for (i= 0; i < p->contour[c].num_vertices; i++)
-        if (OPTIMAL(p->contour[c].vertex, i, p->contour[c].num_vertices))
-        {
-          edge_table[num_vertices].vertex.x= p->contour[c].vertex[i].x;
-          edge_table[num_vertices].vertex.y= p->contour[c].vertex[i].y;
-
-          /* Record vertex in the scanbeam table */
-          add_to_sbtree(sbt_entries, sbtree,
-                        edge_table[num_vertices].vertex.y);
-
-          num_vertices++;
-        }
-
-      /* Do the contour forward pass */
-      for (min= 0; min < num_vertices; min++)
-      {
-        /* If a forward local minimum... */
-        if (FWD_MIN(edge_table, min, num_vertices))
-        {
-          /* Search for the next local maximum... */
-          num_edges= 1;
-          max= NEXT_INDEX(min, num_vertices);
-          while (NOT_FMAX(edge_table, max, num_vertices))
-          {
-            num_edges++;
-            max= NEXT_INDEX(max, num_vertices);
-          }
-
-          /* Build the next edge list */
-          e= &edge_table[e_index];
-          e_index+= num_edges;
-          v= min;
-          e[0].bstate[BELOW]= UNBUNDLED;
-          e[0].bundle[BELOW][CLIP]= FALSE;
-          e[0].bundle[BELOW][SUBJ]= FALSE;
-          for (i= 0; i < num_edges; i++)
-          {
-            e[i].xb= edge_table[v].vertex.x;
-            e[i].bot.x= edge_table[v].vertex.x;
-            e[i].bot.y= edge_table[v].vertex.y;
-
-            v= NEXT_INDEX(v, num_vertices);
-
-            e[i].top.x= edge_table[v].vertex.x;
-            e[i].top.y= edge_table[v].vertex.y;
-            e[i].dx= (edge_table[v].vertex.x - e[i].bot.x) /
-                       (e[i].top.y - e[i].bot.y);
-            e[i].type= type;
-            e[i].outp[ABOVE]= NULL;
-            e[i].outp[BELOW]= NULL;
-            e[i].next= NULL;
-            e[i].prev= NULL;
-            e[i].succ= ((num_edges > 1) && (i < (num_edges - 1))) ?
-                       &(e[i + 1]) : NULL;
-            e[i].pred= ((num_edges > 1) && (i > 0)) ? &(e[i - 1]) : NULL;
-            e[i].next_bound= NULL;
-            e[i].bside[CLIP]= (op == GPC_DIFF) ? RIGHT : LEFT;
-            e[i].bside[SUBJ]= LEFT;
-          }
-          insert_bound(bound_list(lmt, edge_table[min].vertex.y), e);
-        }
-      }
-
-      /* Do the contour reverse pass */
-      for (min= 0; min < num_vertices; min++)
-      {
-      /* If a reverse local minimum... */
-        if (REV_MIN(edge_table, min, num_vertices))
-        {
-          /* Search for the previous local maximum... */
-          num_edges= 1;
-          max= PREV_INDEX(min, num_vertices);
-          while (NOT_RMAX(edge_table, max, num_vertices))
-          {
-            num_edges++;
-            max= PREV_INDEX(max, num_vertices);
-          }
-
-          /* Build the previous edge list */
-          e= &edge_table[e_index];
-          e_index+= num_edges;
-          v= min;
-          e[0].bstate[BELOW]= UNBUNDLED;
-          e[0].bundle[BELOW][CLIP]= FALSE;
-          e[0].bundle[BELOW][SUBJ]= FALSE;
-          for (i= 0; i < num_edges; i++)
-          {
-            e[i].xb= edge_table[v].vertex.x;
-            e[i].bot.x= edge_table[v].vertex.x;
-            e[i].bot.y= edge_table[v].vertex.y;
-
-            v= PREV_INDEX(v, num_vertices);
-
-            e[i].top.x= edge_table[v].vertex.x;
-            e[i].top.y= edge_table[v].vertex.y;
-            e[i].dx= (edge_table[v].vertex.x - e[i].bot.x) /
-                       (e[i].top.y - e[i].bot.y);
-            e[i].type= type;
-            e[i].outp[ABOVE]= NULL;
-            e[i].outp[BELOW]= NULL;
-            e[i].next= NULL;
-            e[i].prev= NULL;
-            e[i].succ= ((num_edges > 1) && (i < (num_edges - 1))) ?
-                       &(e[i + 1]) : NULL;
-            e[i].pred= ((num_edges > 1) && (i > 0)) ? &(e[i - 1]) : NULL;
-            e[i].next_bound= NULL;
-            e[i].bside[CLIP]= (op == GPC_DIFF) ? RIGHT : LEFT;
-            e[i].bside[SUBJ]= LEFT;
-          }
-          insert_bound(bound_list(lmt, edge_table[min].vertex.y), e);
-        }
-      }
-    }
-  }
-  return edge_table;
-}
-
-
-static void add_edge_to_aet(edge_node **aet, edge_node *edge, edge_node *prev)
-{
-  if (!*aet)
-  {
-    /* Append edge onto the tail end of the AET */
-    *aet= edge;
-    edge->prev= prev;
-    edge->next= NULL;
-  }
-  else
-  {
-    /* Do primary sort on the xb field */
-    if (edge->xb < (*aet)->xb)
-    {
-      /* Insert edge here (before the AET edge) */
-      edge->prev= prev;
-      edge->next= *aet;
-      (*aet)->prev= edge;
-      *aet= edge;
-    }
-    else
-    {
-      if (edge->xb == (*aet)->xb)
-      {
-        /* Do secondary sort on the dx field */
-        if (edge->dx < (*aet)->dx)
-        {
-          /* Insert edge here (before the AET edge) */
-          edge->prev= prev;
-          edge->next= *aet;
-          (*aet)->prev= edge;
-          *aet= edge;
-        }
-        else
-        {
-          /* Head further into the AET */
-          add_edge_to_aet(&((*aet)->next), edge, *aet);
-        }
-      }
-      else
-      {
-        /* Head further into the AET */
-        add_edge_to_aet(&((*aet)->next), edge, *aet);
-      }
-    }
-  }
-}
-
-
-static void add_intersection(it_node **it, edge_node *edge0, edge_node *edge1,
-                             double x, double y)
-{
-  it_node *existing_node;
-
-  if (!*it)
-  {
-    /* Append a new node to the tail of the list */
-    _MALLOC(*it, sizeof(it_node), "IT insertion");
-    (*it)->ie[0]= edge0;
-    (*it)->ie[1]= edge1;
-    (*it)->point.x= x;
-    (*it)->point.y= y;
-    (*it)->next= NULL;
-  }
-  else
-  {
-    if ((*it)->point.y > y)
-    {
-      /* Insert a new node mid-list */
-      existing_node= *it;
-      _MALLOC(*it, sizeof(it_node), "IT insertion");
-      (*it)->ie[0]= edge0;
-      (*it)->ie[1]= edge1;
-      (*it)->point.x= x;
-      (*it)->point.y= y;
-      (*it)->next= existing_node;
-    }
-    else
-      /* Head further down the list */
-      add_intersection(&((*it)->next), edge0, edge1, x, y);
-  }
-}
-
-
-static void add_st_edge(st_node **st, it_node **it, edge_node *edge,
-                        double dy)
-{
-  st_node *existing_node;
-  double   den, r, x, y;
-
-  if (!*st)
-  {
-    /* Append edge onto the tail end of the ST */
-    _MALLOC(*st, sizeof(st_node), "ST insertion");
-    (*st)->edge= edge;
-    (*st)->xb= edge->xb;
-    (*st)->xt= edge->xt;
-    (*st)->dx= edge->dx;
-    (*st)->prev= NULL;
-  }
-  else
-  {
-    den= ((*st)->xt - (*st)->xb) - (edge->xt - edge->xb);
-
-    /* If new edge and ST edge don't cross */
-    if ((edge->xt >= (*st)->xt) || (edge->dx == (*st)->dx) || 
-        (fabs(den) <= DBL_EPSILON))
-    {
-      /* No intersection - insert edge here (before the ST edge) */
-      existing_node= *st;
-      _MALLOC(*st, sizeof(st_node), "ST insertion");
-      (*st)->edge= edge;
-      (*st)->xb= edge->xb;
-      (*st)->xt= edge->xt;
-      (*st)->dx= edge->dx;
-      (*st)->prev= existing_node;
-    }
-    else
-    {
-      /* Compute intersection between new edge and ST edge */
-      r= (edge->xb - (*st)->xb) / den;
-      x= (*st)->xb + r * ((*st)->xt - (*st)->xb);
-      y= r * dy;
-
-      /* Insert the edge pointers and the intersection point in the IT */
-      add_intersection(it, (*st)->edge, edge, x, y);
-
-      /* Head further into the ST */
-      add_st_edge(&((*st)->prev), it, edge, dy);
-    }
-  }
-}
-
-
-static void build_intersection_table(it_node **it, edge_node *aet, double dy)
-{
-  st_node   *st, *stp;
-  edge_node *edge;
-
-  /* Build intersection table for the current scanbeam */
-  reset_it(it);
-  st= NULL;
-
-  /* Process each AET edge */
-  for (edge= aet; edge; edge= edge->next)
-  {
-    if ((edge->bstate[ABOVE] == BUNDLE_HEAD) ||
-         edge->bundle[ABOVE][CLIP] || edge->bundle[ABOVE][SUBJ])
-      add_st_edge(&st, it, edge, dy);
-  }
-
-  /* Free the sorted edge table */
-  while (st)
-  {
-    stp= st->prev;
-    FREE(st);
-    st= stp;
-  }
-}
-
-static int count_contours(polygon_node *polygon)
-{
-  int          nc, nv;
-  vertex_node *v, *nextv;
-
-  for (nc= 0; polygon; polygon= polygon->next)
-    if (polygon->active)
-    {
-      /* Count the vertices in the current contour */
-      nv= 0;
-      for (v= polygon->proxy->v[LEFT]; v; v= v->next)
-        nv++;
-
-      /* Record valid vertex counts in the active field */
-      if (nv > 2)
-      {
-        polygon->active= nv;
-        nc++;
-      }
-      else
-      {
-        /* Invalid contour: just free the heap */
-        for (v= polygon->proxy->v[LEFT]; v; v= nextv)
-        {
-          nextv= v->next;
-          FREE(v);
-        }
-        polygon->active= 0;
-      }
-    }
-  return nc;
-}
-
-
-static void add_left(polygon_node *p, double x, double y)
-{
-  vertex_node *nv;
-
-  /* Create a new vertex node and set its fields */
-  _MALLOC(nv, sizeof(vertex_node), "vertex node creation");
-  nv->x= x;
-  nv->y= y;
-
-  /* Add vertex nv to the left end of the polygon's vertex list */
-  nv->next= p->proxy->v[LEFT];
-
-  /* Update proxy->[LEFT] to point to nv */
-  p->proxy->v[LEFT]= nv;
-}
-
-
-static void merge_left(polygon_node *p, polygon_node *q, polygon_node *list)
-{
-  polygon_node *target;
-
-  /* Label contour as a hole */
-  q->proxy->hole= TRUE;
-
-  if (p->proxy != q->proxy)
-  {
-    /* Assign p's vertex list to the left end of q's list */
-    p->proxy->v[RIGHT]->next= q->proxy->v[LEFT];
-    q->proxy->v[LEFT]= p->proxy->v[LEFT];
-
-    /* Redirect any p->proxy references to q->proxy */
-    
-    for (target= p->proxy; list; list= list->next)
-    {
-      if (list->proxy == target)
-      {
-        list->active= FALSE;
-        list->proxy= q->proxy;
-      }
-    }
-  }
-}
-
-
-static void add_right(polygon_node *p, double x, double y)
-{
-  vertex_node *nv;
-
-  /* Create a new vertex node and set its fields */
-  _MALLOC(nv, sizeof(vertex_node), "vertex node creation");
-  nv->x= x;
-  nv->y= y;
-  nv->next= NULL;
-
-  /* Add vertex nv to the right end of the polygon's vertex list */
-  p->proxy->v[RIGHT]->next= nv;
-
-  /* Update proxy->v[RIGHT] to point to nv */
-  p->proxy->v[RIGHT]= nv;
-}
-
-
-static void merge_right(polygon_node *p, polygon_node *q, polygon_node *list)
-{
-  polygon_node *target;
-
-  /* Label contour as external */
-  q->proxy->hole= FALSE;
-
-  if (p->proxy != q->proxy)
-  {
-    /* Assign p's vertex list to the right end of q's list */
-    q->proxy->v[RIGHT]->next= p->proxy->v[LEFT];
-    q->proxy->v[RIGHT]= p->proxy->v[RIGHT];
-
-    /* Redirect any p->proxy references to q->proxy */
-    for (target= p->proxy; list; list= list->next)
-    {
-      if (list->proxy == target)
-      {
-        list->active= FALSE;
-        list->proxy= q->proxy;
-      }
-    }
-  }
-}
-
-
-static void add_local_min(polygon_node **p, edge_node *edge,
-                          double x, double y)
-{
-  polygon_node *existing_min;
-  vertex_node  *nv;
-
-  existing_min= *p;
-
-  _MALLOC(*p, sizeof(polygon_node), "polygon node creation");
-
-  /* Create a new vertex node and set its fields */
-  _MALLOC(nv, sizeof(vertex_node), "vertex node creation");
-  nv->x= x;
-  nv->y= y;
-  nv->next= NULL;
-
-  /* Initialise proxy to point to p itself */
-  (*p)->proxy= (*p);
-  (*p)->active= TRUE;
-  (*p)->next= existing_min;
-
-  /* Make v[LEFT] and v[RIGHT] point to new vertex nv */
-  (*p)->v[LEFT]= nv;
-  (*p)->v[RIGHT]= nv;
-
-  /* Assign polygon p to the edge */
-  edge->outp[ABOVE]= *p;
-}
-
-
-static int count_tristrips(polygon_node *tn)
-{
-  int total;
-
-  for (total= 0; tn; tn= tn->next)
-    if (tn->active > 2)
-      total++;
-  return total;
-}
-
-
-static void add_vertex(vertex_node **t, double x, double y)
-{
-  if (!(*t))
-  {
-    _MALLOC(*t, sizeof(vertex_node), "tristrip vertex creation");
-    (*t)->x= x;
-    (*t)->y= y;
-    (*t)->next= NULL;
-  }
-  else
-    /* Head further down the list */
-    add_vertex(&((*t)->next), x, y);
-}
-
-
-static void new_tristrip(polygon_node **tn, edge_node *edge,
-                         double x, double y)
-{
-  if (!(*tn))
-  {
-    _MALLOC(*tn, sizeof(polygon_node), "tristrip node creation");
-    (*tn)->next= NULL;
-    (*tn)->v[LEFT]= NULL;
-    (*tn)->v[RIGHT]= NULL;
-    (*tn)->active= 1;
-    add_vertex(&((*tn)->v[LEFT]), x, y); 
-    edge->outp[ABOVE]= *tn;
-  }
-  else
-    /* Head further down the list */
-    new_tristrip(&((*tn)->next), edge, x, y);
-}
-
-
-static bbox *create_contour_bboxes(gpc_polygon *p)
-{
-  bbox *box;
-  int   c, v;
-
-  _MALLOC(box, p->num_contours * sizeof(bbox), "Bounding box creation");
-
-  /* Construct contour bounding boxes */
-  for (c= 0; c < p->num_contours; c++)
-  {
-    /* Initialise bounding box extent */
-    box[c].xmin= DBL_MAX;
-    box[c].ymin= DBL_MAX;
-    box[c].xmax= -DBL_MAX;
-    box[c].ymax= -DBL_MAX;
-
-    for (v= 0; v < p->contour[c].num_vertices; v++)
-    {
-      /* Adjust bounding box */
-      if (p->contour[c].vertex[v].x < box[c].xmin)
-        box[c].xmin= p->contour[c].vertex[v].x;
-      if (p->contour[c].vertex[v].y < box[c].ymin)
-        box[c].ymin= p->contour[c].vertex[v].y;
-      if (p->contour[c].vertex[v].x > box[c].xmax)
-        box[c].xmax= p->contour[c].vertex[v].x;
-      if (p->contour[c].vertex[v].y > box[c].ymax)
-          box[c].ymax= p->contour[c].vertex[v].y;
-    }
-  }
-  return box;  
-}
-
-
-static void minimax_test(gpc_polygon *subj, gpc_polygon *clip, gpc_op op)
-{
-  bbox *s_bbox, *c_bbox;
-  int   s, c, *o_table, overlap;
-
-  s_bbox= create_contour_bboxes(subj);
-  c_bbox= create_contour_bboxes(clip);
-
-  _MALLOC(o_table, subj->num_contours * clip->num_contours * sizeof(int),
-         "overlap table creation");
-
-  /* Check all subject contour bounding boxes against clip boxes */
-  for (s= 0; s < subj->num_contours; s++)
-    for (c= 0; c < clip->num_contours; c++)
-      o_table[c * subj->num_contours + s]=
-             (!((s_bbox[s].xmax < c_bbox[c].xmin) ||
-                (s_bbox[s].xmin > c_bbox[c].xmax))) &&
-             (!((s_bbox[s].ymax < c_bbox[c].ymin) ||
-                (s_bbox[s].ymin > c_bbox[c].ymax)));
-
-  /* For each clip contour, search for any subject contour overlaps */
-  for (c= 0; c < clip->num_contours; c++)
-  {
-    overlap= 0;
-    for (s= 0; (!overlap) && (s < subj->num_contours); s++)
-      overlap= o_table[c * subj->num_contours + s];
-
-    if (!overlap)
-      /* Flag non contributing status by negating vertex count */
-      clip->contour[c].num_vertices = -clip->contour[c].num_vertices;
-  }  
-
-  if (op == GPC_INT)
-  {  
-    /* For each subject contour, search for any clip contour overlaps */
-    for (s= 0; s < subj->num_contours; s++)
-    {
-      overlap= 0;
-      for (c= 0; (!overlap) && (c < clip->num_contours); c++)
-        overlap= o_table[c * subj->num_contours + s];
-
-      if (!overlap)
-        /* Flag non contributing status by negating vertex count */
-        subj->contour[s].num_vertices = -subj->contour[s].num_vertices;
-    }  
-  }
-
-  FREE(s_bbox);
-  FREE(c_bbox);
-  FREE(o_table);
-}
-
-
-/*
-===========================================================================
-                             Public Functions
-===========================================================================
-*/
-
-void gpc_free_polygon(gpc_polygon *p)
-{
-  int c;
-
-  for (c= 0; c < p->num_contours; c++)
-    FREE(p->contour[c].vertex);
-  FREE(p->hole);
-  FREE(p->contour);
-  p->num_contours= 0;
-}
-
-
-void gpc_read_polygon(FILE *fp, int read_hole_flags, gpc_polygon *p)
-{
-  int c, v;
-
-  fscanf(fp, "%d", &(p->num_contours));
-  _MALLOC(p->hole, p->num_contours * sizeof(int),
-         "hole flag array creation");
-  _MALLOC(p->contour, p->num_contours
-         * sizeof(gpc_vertex_list), "contour creation");
-  for (c= 0; c < p->num_contours; c++)
-  {
-    fscanf(fp, "%d", &(p->contour[c].num_vertices));
-
-    if (read_hole_flags)
-      fscanf(fp, "%d", &(p->hole[c]));
-    else
-      p->hole[c]= FALSE; /* Assume all contours to be external */
-
-    _MALLOC(p->contour[c].vertex, p->contour[c].num_vertices
-           * sizeof(gpc_vertex), "vertex creation");
-    for (v= 0; v < p->contour[c].num_vertices; v++)
-      fscanf(fp, "%lf %lf", &(p->contour[c].vertex[v].x),
-                            &(p->contour[c].vertex[v].y));
-  }
-}
-
-
-void gpc_write_polygon(FILE *fp, int write_hole_flags, gpc_polygon *p)
-{
-  int c, v;
-
-  fprintf(fp, "%d\n", p->num_contours);
-  for (c= 0; c < p->num_contours; c++)
-  {
-    fprintf(fp, "%d\n", p->contour[c].num_vertices);
-
-    if (write_hole_flags)
-      fprintf(fp, "%d\n", p->hole[c]);
-    
-    for (v= 0; v < p->contour[c].num_vertices; v++)
-      fprintf(fp, "% .*lf % .*lf\n",
-              DBL_DIG, p->contour[c].vertex[v].x,
-              DBL_DIG, p->contour[c].vertex[v].y);
-  }
-}
-
-
-void gpc_add_contour(gpc_polygon *p, gpc_vertex_list *new_contour, int hole)
-{
-  int             *extended_hole, c, v;
-  gpc_vertex_list *extended_contour;
-
-  /* Create an extended hole array */
-  _MALLOC(extended_hole, (p->num_contours + 1)
-         * sizeof(int), "contour hole addition");
-
-  /* Create an extended contour array */
-  _MALLOC(extended_contour, (p->num_contours + 1)
-         * sizeof(gpc_vertex_list), "contour addition");
-
-  /* Copy the old contour and hole data into the extended arrays */
-  for (c= 0; c < p->num_contours; c++)
-  {
-    extended_hole[c]= p->hole[c];
-    extended_contour[c]= p->contour[c];
-  }
-
-  /* Copy the new contour and hole onto the end of the extended arrays */
-  c= p->num_contours;
-  extended_hole[c]= hole;
-  extended_contour[c].num_vertices= new_contour->num_vertices;
-  _MALLOC(extended_contour[c].vertex, new_contour->num_vertices
-         * sizeof(gpc_vertex), "contour addition");
-  for (v= 0; v < new_contour->num_vertices; v++)
-    extended_contour[c].vertex[v]= new_contour->vertex[v];
-
-  /* Dispose of the old contour */
-  FREE(p->contour);
-  FREE(p->hole);
-
-  /* Update the polygon information */
-  p->num_contours++;
-  p->hole= extended_hole;
-  p->contour= extended_contour;
-}
-
-
-void gpc_polygon_clip(gpc_op op, gpc_polygon *subj, gpc_polygon *clip,
-                      gpc_polygon *result)
-{
-  sb_tree       *sbtree= NULL;
-  it_node       *it= NULL, *intersect;
-  edge_node     *edge, *prev_edge, *next_edge, *succ_edge, *e0, *e1;
-  edge_node     *aet= NULL, *c_heap= NULL, *s_heap= NULL;
-  lmt_node      *lmt= NULL, *local_min;
-  polygon_node  *out_poly= NULL, *p, *q, *poly, *npoly, *cf= NULL;
-  vertex_node   *vtx, *nv;
-  h_state        horiz[2];
-  int            in[2], exists[2], parity[2]= {LEFT, LEFT};
-  int            c, v, contributing, search, scanbeam= 0, sbt_entries= 0;
-  int            vclass, bl, br, tl, tr;
-  double        *sbt= NULL, xb, px, yb, yt, dy, ix, iy;
-
-  /* Test for trivial NULL result cases */
-  if (((subj->num_contours == 0) && (clip->num_contours == 0))
-   || ((subj->num_contours == 0) && ((op == GPC_INT) || (op == GPC_DIFF)))
-   || ((clip->num_contours == 0) &&  (op == GPC_INT)))
-  {
-    result->num_contours= 0;
-    result->hole= NULL;
-    result->contour= NULL;
-    return;
-  }
-
-  /* Identify potentialy contributing contours */
-  if (((op == GPC_INT) || (op == GPC_DIFF))
-   && (subj->num_contours > 0) && (clip->num_contours > 0))
-    minimax_test(subj, clip, op);
-
-  /* Build LMT */
-  if (subj->num_contours > 0)
-    s_heap= build_lmt(&lmt, &sbtree, &sbt_entries, subj, SUBJ, op);
-  if (clip->num_contours > 0)
-    c_heap= build_lmt(&lmt, &sbtree, &sbt_entries, clip, CLIP, op);
-
-  /* Return a NULL result if no contours contribute */
-  if (lmt == NULL)
-  {
-    result->num_contours= 0;
-    result->hole= NULL;
-    result->contour= NULL;
-    reset_lmt(&lmt);
-    FREE(s_heap);
-    FREE(c_heap);
-    return;
-  }
-
-  /* Build scanbeam table from scanbeam tree */
-  _MALLOC(sbt, sbt_entries * sizeof(double), "sbt creation");
-  build_sbt(&scanbeam, sbt, sbtree);
-  scanbeam= 0;
-  free_sbtree(&sbtree);
-
-  /* Allow pointer re-use without causing memory leak */
-  if (subj == result)
-    gpc_free_polygon(subj);
-  if (clip == result)
-    gpc_free_polygon(clip);
-
-  /* Invert clip polygon for difference operation */
-  if (op == GPC_DIFF)
-    parity[CLIP]= RIGHT;
-
-  local_min= lmt;
-
-  /* Process each scanbeam */
-  while (scanbeam < sbt_entries)
-  {
-    /* Set yb and yt to the bottom and top of the scanbeam */
-    yb= sbt[scanbeam++];
-    if (scanbeam < sbt_entries)
-    {
-      yt= sbt[scanbeam];
-      dy= yt - yb;
-    }
-
-    /* === SCANBEAM BOUNDARY PROCESSING ================================ */
-
-    /* If LMT node corresponding to yb exists */
-    if (local_min)
-    {
-      if (local_min->y == yb)
-      {
-        /* Add edges starting at this local minimum to the AET */
-        for (edge= local_min->first_bound; edge; edge= edge->next_bound)
-          add_edge_to_aet(&aet, edge, NULL);
-
-        local_min= local_min->next;
-      }
-    }
-
-    /* Set dummy previous x value */
-    px= -DBL_MAX;
-
-    /* Create bundles within AET */
-    e0= aet;
-    e1= aet;
-
-    /* Set up bundle fields of first edge */
-    aet->bundle[ABOVE][ aet->type]= (aet->top.y != yb);
-    aet->bundle[ABOVE][!aet->type]= FALSE;
-    aet->bstate[ABOVE]= UNBUNDLED;
-
-    for (next_edge= aet->next; next_edge; next_edge= next_edge->next)
-    {
-      /* Set up bundle fields of next edge */
-      next_edge->bundle[ABOVE][ next_edge->type]= (next_edge->top.y != yb);
-      next_edge->bundle[ABOVE][!next_edge->type]= FALSE;
-      next_edge->bstate[ABOVE]= UNBUNDLED;
-
-      /* Bundle edges above the scanbeam boundary if they coincide */
-      if (next_edge->bundle[ABOVE][next_edge->type])
-      {
-        if (EQ(e0->xb, next_edge->xb) && EQ(e0->dx, next_edge->dx)
-	 && (e0->top.y != yb))
-        {
-          next_edge->bundle[ABOVE][ next_edge->type]^= 
-            e0->bundle[ABOVE][ next_edge->type];
-          next_edge->bundle[ABOVE][!next_edge->type]= 
-            e0->bundle[ABOVE][!next_edge->type];
-          next_edge->bstate[ABOVE]= BUNDLE_HEAD;
-          e0->bundle[ABOVE][CLIP]= FALSE;
-          e0->bundle[ABOVE][SUBJ]= FALSE;
-          e0->bstate[ABOVE]= BUNDLE_TAIL;
-        }
-        e0= next_edge;
-      }
-    }
-    
-    horiz[CLIP]= NH;
-    horiz[SUBJ]= NH;
-
-    /* Process each edge at this scanbeam boundary */
-    for (edge= aet; edge; edge= edge->next)
-    {
-      exists[CLIP]= edge->bundle[ABOVE][CLIP] + 
-                   (edge->bundle[BELOW][CLIP] << 1);
-      exists[SUBJ]= edge->bundle[ABOVE][SUBJ] + 
-                   (edge->bundle[BELOW][SUBJ] << 1);
-
-      if (exists[CLIP] || exists[SUBJ])
-      {
-        /* Set bundle side */
-        edge->bside[CLIP]= parity[CLIP];
-        edge->bside[SUBJ]= parity[SUBJ];
-
-        /* Determine contributing status and quadrant occupancies */
-        switch (op)
-        {
-        case GPC_DIFF:
-        case GPC_INT:
-          contributing= (exists[CLIP] && (parity[SUBJ] || horiz[SUBJ]))
-                     || (exists[SUBJ] && (parity[CLIP] || horiz[CLIP]))
-                     || (exists[CLIP] && exists[SUBJ]
-                     && (parity[CLIP] == parity[SUBJ]));
-          br= (parity[CLIP])
-           && (parity[SUBJ]);
-          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
-           && (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
-          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
-           && (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
-          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP]) 
-           && (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
-          break;
-        case GPC_XOR:
-          contributing= exists[CLIP] || exists[SUBJ];
-          br= (parity[CLIP])
-            ^ (parity[SUBJ]);
-          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
-            ^ (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
-          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
-            ^ (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
-          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP]) 
-            ^ (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
-          break;
-        case GPC_UNION:
-          contributing= (exists[CLIP] && (!parity[SUBJ] || horiz[SUBJ]))
-                     || (exists[SUBJ] && (!parity[CLIP] || horiz[CLIP]))
-                     || (exists[CLIP] && exists[SUBJ]
-                     && (parity[CLIP] == parity[SUBJ]));
-          br= (parity[CLIP])
-           || (parity[SUBJ]);
-          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
-           || (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
-          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
-           || (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
-          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP]) 
-           || (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
-          break;
-        }
-
-        /* Update parity */
-        parity[CLIP]^= edge->bundle[ABOVE][CLIP];
-        parity[SUBJ]^= edge->bundle[ABOVE][SUBJ];
-
-        /* Update horizontal state */
-        if (exists[CLIP])         
-          horiz[CLIP]=
-            next_h_state[horiz[CLIP]]
-                        [((exists[CLIP] - 1) << 1) + parity[CLIP]];
-        if (exists[SUBJ])         
-          horiz[SUBJ]=
-            next_h_state[horiz[SUBJ]]
-                        [((exists[SUBJ] - 1) << 1) + parity[SUBJ]];
-
-        vclass= tr + (tl << 1) + (br << 2) + (bl << 3);
-
-        if (contributing)
-        {
-          xb= edge->xb;
-
-          switch (vclass)
-          {
-          case EMN:
-          case IMN:
-            add_local_min(&out_poly, edge, xb, yb);
-            px= xb;
-            cf= edge->outp[ABOVE];
-            break;
-          case ERI:
-            if (xb != px)
-            {
-              add_right(cf, xb, yb);
-              px= xb;
-            }
-            edge->outp[ABOVE]= cf;
-            cf= NULL;
-            break;
-          case ELI:
-            add_left(edge->outp[BELOW], xb, yb);
-            px= xb;
-            cf= edge->outp[BELOW];
-            break;
-          case EMX:
-            if (xb != px)
-            {
-              add_left(cf, xb, yb);
-              px= xb;
-            }
-            merge_right(cf, edge->outp[BELOW], out_poly);
-            cf= NULL;
-            break;
-          case ILI:
-            if (xb != px)
-            {
-              add_left(cf, xb, yb);
-              px= xb;
-            }
-            edge->outp[ABOVE]= cf;
-            cf= NULL;
-            break;
-          case IRI:
-            add_right(edge->outp[BELOW], xb, yb);
-            px= xb;
-            cf= edge->outp[BELOW];
-            edge->outp[BELOW]= NULL;
-            break;
-          case IMX:
-            if (xb != px)
-            {
-              add_right(cf, xb, yb);
-              px= xb;
-            }
-            merge_left(cf, edge->outp[BELOW], out_poly);
-            cf= NULL;
-            edge->outp[BELOW]= NULL;
-            break;
-          case IMM:
-            if (xb != px)
-	    {
-              add_right(cf, xb, yb);
-              px= xb;
-	    }
-            merge_left(cf, edge->outp[BELOW], out_poly);
-            edge->outp[BELOW]= NULL;
-            add_local_min(&out_poly, edge, xb, yb);
-            cf= edge->outp[ABOVE];
-            break;
-          case EMM:
-            if (xb != px)
-	    {
-              add_left(cf, xb, yb);
-              px= xb;
-	    }
-            merge_right(cf, edge->outp[BELOW], out_poly);
-            edge->outp[BELOW]= NULL;
-            add_local_min(&out_poly, edge, xb, yb);
-            cf= edge->outp[ABOVE];
-            break;
-          case LED:
-            if (edge->bot.y == yb)
-              add_left(edge->outp[BELOW], xb, yb);
-            edge->outp[ABOVE]= edge->outp[BELOW];
-            px= xb;
-            break;
-          case RED:
-            if (edge->bot.y == yb)
-              add_right(edge->outp[BELOW], xb, yb);
-            edge->outp[ABOVE]= edge->outp[BELOW];
-            px= xb;
-            break;
-          default:
-            break;
-          } /* End of switch */
-        } /* End of contributing conditional */
-      } /* End of edge exists conditional */
-    } /* End of AET loop */
-
-    /* Delete terminating edges from the AET, otherwise compute xt */
-    for (edge= aet; edge; edge= edge->next)
-    {
-      if (edge->top.y == yb)
-      {
-        prev_edge= edge->prev;
-        next_edge= edge->next;
-        if (prev_edge)
-          prev_edge->next= next_edge;
-        else
-          aet= next_edge;
-        if (next_edge)
-          next_edge->prev= prev_edge;
-
-        /* Copy bundle head state to the adjacent tail edge if required */
-        if ((edge->bstate[BELOW] == BUNDLE_HEAD) && prev_edge)
-	{
-          if (prev_edge->bstate[BELOW] == BUNDLE_TAIL)
-          {
-            prev_edge->outp[BELOW]= edge->outp[BELOW];
-            prev_edge->bstate[BELOW]= UNBUNDLED;
-            if (prev_edge->prev)
-              if (prev_edge->prev->bstate[BELOW] == BUNDLE_TAIL)
-                prev_edge->bstate[BELOW]= BUNDLE_HEAD;
-	  }
-	}
-      }
-      else
-      {
-        if (edge->top.y == yt)
-          edge->xt= edge->top.x;
-        else
-          edge->xt= edge->bot.x + edge->dx * (yt - edge->bot.y);
-      }
-    }
-
-    if (scanbeam < sbt_entries)
-    {
-      /* === SCANBEAM INTERIOR PROCESSING ============================== */
-
-      build_intersection_table(&it, aet, dy);
-
-      /* Process each node in the intersection table */
-      for (intersect= it; intersect; intersect= intersect->next)
-      {
-        e0= intersect->ie[0];
-        e1= intersect->ie[1];
-
-        /* Only generate output for contributing intersections */
-        if ((e0->bundle[ABOVE][CLIP] || e0->bundle[ABOVE][SUBJ])
-         && (e1->bundle[ABOVE][CLIP] || e1->bundle[ABOVE][SUBJ]))
-	{
-          p= e0->outp[ABOVE];
-          q= e1->outp[ABOVE];
-          ix= intersect->point.x;
-          iy= intersect->point.y + yb;
- 
-          in[CLIP]= ( e0->bundle[ABOVE][CLIP] && !e0->bside[CLIP])
-                 || ( e1->bundle[ABOVE][CLIP] &&  e1->bside[CLIP])
-                 || (!e0->bundle[ABOVE][CLIP] && !e1->bundle[ABOVE][CLIP]
-                     && e0->bside[CLIP] && e1->bside[CLIP]);
-          in[SUBJ]= ( e0->bundle[ABOVE][SUBJ] && !e0->bside[SUBJ])
-                 || ( e1->bundle[ABOVE][SUBJ] &&  e1->bside[SUBJ])
-                 || (!e0->bundle[ABOVE][SUBJ] && !e1->bundle[ABOVE][SUBJ]
-                     && e0->bside[SUBJ] && e1->bside[SUBJ]);
-       
-          /* Determine quadrant occupancies */
-          switch (op)
-          {
-          case GPC_DIFF:
-          case GPC_INT:
-            tr= (in[CLIP])
-             && (in[SUBJ]);
-            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
-             && (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
-            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
-             && (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
-             && (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            break;
-          case GPC_XOR:
-            tr= (in[CLIP])
-              ^ (in[SUBJ]);
-            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
-              ^ (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
-            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
-              ^ (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
-              ^ (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            break;
-          case GPC_UNION:
-            tr= (in[CLIP])
-             || (in[SUBJ]);
-            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
-             || (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
-            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
-             || (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
-             || (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            break;
-          }
-	  
-          vclass= tr + (tl << 1) + (br << 2) + (bl << 3);
-
-          switch (vclass)
-          {
-          case EMN:
-            add_local_min(&out_poly, e0, ix, iy);
-            e1->outp[ABOVE]= e0->outp[ABOVE];
-            break;
-          case ERI:
-            if (p)
-            {
-              add_right(p, ix, iy);
-              e1->outp[ABOVE]= p;
-              e0->outp[ABOVE]= NULL;
-            }
-            break;
-          case ELI:
-            if (q)
-            {
-              add_left(q, ix, iy);
-              e0->outp[ABOVE]= q;
-              e1->outp[ABOVE]= NULL;
-            }
-            break;
-          case EMX:
-            if (p && q)
-            {
-              add_left(p, ix, iy);
-              merge_right(p, q, out_poly);
-              e0->outp[ABOVE]= NULL;
-              e1->outp[ABOVE]= NULL;
-            }
-            break;
-          case IMN:
-            add_local_min(&out_poly, e0, ix, iy);
-            e1->outp[ABOVE]= e0->outp[ABOVE];
-            break;
-          case ILI:
-            if (p)
-            {
-              add_left(p, ix, iy);
-              e1->outp[ABOVE]= p;
-              e0->outp[ABOVE]= NULL;
-            }
-            break;
-          case IRI:
-            if (q)
-            {
-              add_right(q, ix, iy);
-              e0->outp[ABOVE]= q;
-              e1->outp[ABOVE]= NULL;
-            }
-            break;
-          case IMX:
-            if (p && q)
-            {
-              add_right(p, ix, iy);
-              merge_left(p, q, out_poly);
-              e0->outp[ABOVE]= NULL;
-              e1->outp[ABOVE]= NULL;
-            }
-            break;
-          case IMM:
-            if (p && q)
-            {
-              add_right(p, ix, iy);
-              merge_left(p, q, out_poly);
-              add_local_min(&out_poly, e0, ix, iy);
-              e1->outp[ABOVE]= e0->outp[ABOVE];
-            }
-            break;
-          case EMM:
-            if (p && q)
-            {
-              add_left(p, ix, iy);
-              merge_right(p, q, out_poly);
-              add_local_min(&out_poly, e0, ix, iy);
-              e1->outp[ABOVE]= e0->outp[ABOVE];
-            }
-            break;
-          default:
-            break;
-          } /* End of switch */
-	} /* End of contributing intersection conditional */
-
-        /* Swap bundle sides in response to edge crossing */
-        if (e0->bundle[ABOVE][CLIP])
-	  e1->bside[CLIP]= !e1->bside[CLIP];
-        if (e1->bundle[ABOVE][CLIP])
-	  e0->bside[CLIP]= !e0->bside[CLIP];
-        if (e0->bundle[ABOVE][SUBJ])
-	  e1->bside[SUBJ]= !e1->bside[SUBJ];
-        if (e1->bundle[ABOVE][SUBJ])
-	  e0->bside[SUBJ]= !e0->bside[SUBJ];
-
-        /* Swap e0 and e1 bundles in the AET */
-        prev_edge= e0->prev;
-        next_edge= e1->next;
-        if (next_edge)
-          next_edge->prev= e0;
-
-        if (e0->bstate[ABOVE] == BUNDLE_HEAD)
-        {
-          search= TRUE;
-          while (search)
-          {
-            prev_edge= prev_edge->prev;
-            if (prev_edge)
-            {
-              if (prev_edge->bstate[ABOVE] != BUNDLE_TAIL)
-                search= FALSE;
-            }
-            else
-              search= FALSE;
-          }
-        }
-        if (!prev_edge)
-        {
-          aet->prev= e1;
-          e1->next= aet;
-          aet= e0->next;
-        }
-        else
-        {
-          prev_edge->next->prev= e1;
-          e1->next= prev_edge->next;
-          prev_edge->next= e0->next;
-        }
-        e0->next->prev= prev_edge;
-        e1->next->prev= e1;
-        e0->next= next_edge;
-      } /* End of IT loop*/
-
-      /* Prepare for next scanbeam */
-      for (edge= aet; edge; edge= next_edge)
-      {
-        next_edge= edge->next;
-        succ_edge= edge->succ;
-
-        if ((edge->top.y == yt) && succ_edge)
-        {
-          /* Replace AET edge by its successor */
-          succ_edge->outp[BELOW]= edge->outp[ABOVE];
-          succ_edge->bstate[BELOW]= edge->bstate[ABOVE];
-          succ_edge->bundle[BELOW][CLIP]= edge->bundle[ABOVE][CLIP];
-          succ_edge->bundle[BELOW][SUBJ]= edge->bundle[ABOVE][SUBJ];
-          prev_edge= edge->prev;
-          if (prev_edge)
-            prev_edge->next= succ_edge;
-          else
-            aet= succ_edge;
-          if (next_edge)
-            next_edge->prev= succ_edge;
-          succ_edge->prev= prev_edge;
-          succ_edge->next= next_edge;
-        }
-        else
-        {
-          /* Update this edge */
-          edge->outp[BELOW]= edge->outp[ABOVE];
-          edge->bstate[BELOW]= edge->bstate[ABOVE];
-          edge->bundle[BELOW][CLIP]= edge->bundle[ABOVE][CLIP];
-          edge->bundle[BELOW][SUBJ]= edge->bundle[ABOVE][SUBJ];
-          edge->xb= edge->xt;
-	}
-        edge->outp[ABOVE]= NULL;
-      }
-    }
-  } /* === END OF SCANBEAM PROCESSING ================================== */
-
-  /* Generate result polygon from out_poly */
-  result->contour= NULL;
-  result->hole= NULL;
-  result->num_contours= count_contours(out_poly);
-  if (result->num_contours > 0)
-  {
-    _MALLOC(result->hole, result->num_contours
-           * sizeof(int), "hole flag table creation");
-    _MALLOC(result->contour, result->num_contours
-           * sizeof(gpc_vertex_list), "contour creation");
-
-    c= 0;
-    for (poly= out_poly; poly; poly= npoly)
-    {
-      npoly= poly->next;
-      if (poly->active)
-      {
-        result->hole[c]= poly->proxy->hole;
-        result->contour[c].num_vertices= poly->active;
-        _MALLOC(result->contour[c].vertex,
-          result->contour[c].num_vertices * sizeof(gpc_vertex),
-          "vertex creation");
-      
-        v= result->contour[c].num_vertices - 1;
-        for (vtx= poly->proxy->v[LEFT]; vtx; vtx= nv)
-        {
-          nv= vtx->next;
-          result->contour[c].vertex[v].x= vtx->x;
-          result->contour[c].vertex[v].y= vtx->y;
-          FREE(vtx);
-          v--;
-        }
-        c++;
-      }
-      FREE(poly);
-    }
-  }
-
-  /* Tidy up */
-  reset_it(&it);
-  reset_lmt(&lmt);
-  FREE(c_heap);
-  FREE(s_heap);
-  FREE(sbt);
-}
-
-
-void gpc_free_tristrip(gpc_tristrip *t)
-{
-  int s;
-
-  for (s= 0; s < t->num_strips; s++)
-    FREE(t->strip[s].vertex);
-  FREE(t->strip);
-  t->num_strips= 0;
-}
-
-
-void gpc_polygon_to_tristrip(gpc_polygon *s, gpc_tristrip *t)
-{
-  gpc_polygon c;
-
-  c.num_contours= 0;
-  c.hole= NULL;
-  c.contour= NULL;
-  gpc_tristrip_clip(GPC_DIFF, s, &c, t);
-}
-
-
-void gpc_tristrip_clip(gpc_op op, gpc_polygon *subj, gpc_polygon *clip,
-                       gpc_tristrip *result)
-{
-  sb_tree       *sbtree= NULL;
-  it_node       *it= NULL, *intersect;
-  edge_node     *edge, *prev_edge, *next_edge, *succ_edge, *e0, *e1;
-  edge_node     *aet= NULL, *c_heap= NULL, *s_heap= NULL, *cf;
-  lmt_node      *lmt= NULL, *local_min;
-  polygon_node  *tlist= NULL, *tn, *tnn, *p, *q;
-  vertex_node   *lt, *ltn, *rt, *rtn;
-  h_state        horiz[2];
-  vertex_type    cft;
-  int            in[2], exists[2], parity[2]= {LEFT, LEFT};
-  int            s, v, contributing, search, scanbeam= 0, sbt_entries= 0;
-  int            vclass, bl, br, tl, tr;
-  double        *sbt= NULL, xb, px, nx, yb, yt, dy, ix, iy;
-
-  /* Test for trivial NULL result cases */
-  if (((subj->num_contours == 0) && (clip->num_contours == 0))
-   || ((subj->num_contours == 0) && ((op == GPC_INT) || (op == GPC_DIFF)))
-   || ((clip->num_contours == 0) &&  (op == GPC_INT)))
-  {
-    result->num_strips= 0;
-    result->strip= NULL;
-    return;
-  }
-
-  /* Identify potentialy contributing contours */
-  if (((op == GPC_INT) || (op == GPC_DIFF))
-   && (subj->num_contours > 0) && (clip->num_contours > 0))
-    minimax_test(subj, clip, op);
-
-  /* Build LMT */
-  if (subj->num_contours > 0)
-    s_heap= build_lmt(&lmt, &sbtree, &sbt_entries, subj, SUBJ, op);
-  if (clip->num_contours > 0)
-    c_heap= build_lmt(&lmt, &sbtree, &sbt_entries, clip, CLIP, op);
-
-  /* Return a NULL result if no contours contribute */
-  if (lmt == NULL)
-  {
-    result->num_strips= 0;
-    result->strip= NULL;
-    reset_lmt(&lmt);
-    FREE(s_heap);
-    FREE(c_heap);
-    return;
-  }
-
-  /* Build scanbeam table from scanbeam tree */
-  _MALLOC(sbt, sbt_entries * sizeof(double), "sbt creation");
-  build_sbt(&scanbeam, sbt, sbtree);
-  scanbeam= 0;
-  free_sbtree(&sbtree);
-
-  /* Invert clip polygon for difference operation */
-  if (op == GPC_DIFF)
-    parity[CLIP]= RIGHT;
-
-  local_min= lmt;
-
-  /* Process each scanbeam */
-  while (scanbeam < sbt_entries)
-  {
-    /* Set yb and yt to the bottom and top of the scanbeam */
-    yb= sbt[scanbeam++];
-    if (scanbeam < sbt_entries)
-    {
-      yt= sbt[scanbeam];
-      dy= yt - yb;
-    }
-
-    /* === SCANBEAM BOUNDARY PROCESSING ================================ */
-
-    /* If LMT node corresponding to yb exists */
-    if (local_min)
-    {
-      if (local_min->y == yb)
-      {
-        /* Add edges starting at this local minimum to the AET */
-        for (edge= local_min->first_bound; edge; edge= edge->next_bound)
-          add_edge_to_aet(&aet, edge, NULL);
-
-        local_min= local_min->next;
-      }
-    }
-
-    /* Set dummy previous x value */
-    px= -DBL_MAX;
-
-    /* Create bundles within AET */
-    e0= aet;
-    e1= aet;
-
-    /* Set up bundle fields of first edge */
-    aet->bundle[ABOVE][ aet->type]= (aet->top.y != yb);
-    aet->bundle[ABOVE][!aet->type]= FALSE;
-    aet->bstate[ABOVE]= UNBUNDLED;
-
-    for (next_edge= aet->next; next_edge; next_edge= next_edge->next)
-    {
-      /* Set up bundle fields of next edge */
-      next_edge->bundle[ABOVE][ next_edge->type]= (next_edge->top.y != yb);
-      next_edge->bundle[ABOVE][!next_edge->type]= FALSE;
-      next_edge->bstate[ABOVE]= UNBUNDLED;
-
-      /* Bundle edges above the scanbeam boundary if they coincide */
-      if (next_edge->bundle[ABOVE][next_edge->type])
-      {
-        if (EQ(e0->xb, next_edge->xb) && EQ(e0->dx, next_edge->dx)
-	 && (e0->top.y != yb))
-        {
-          next_edge->bundle[ABOVE][ next_edge->type]^= 
-            e0->bundle[ABOVE][ next_edge->type];
-          next_edge->bundle[ABOVE][!next_edge->type]= 
-            e0->bundle[ABOVE][!next_edge->type]; 
-          next_edge->bstate[ABOVE]= BUNDLE_HEAD;
-          e0->bundle[ABOVE][CLIP]= FALSE;
-          e0->bundle[ABOVE][SUBJ]= FALSE;
-          e0->bstate[ABOVE]= BUNDLE_TAIL;
-        }
-        e0= next_edge;
-      }
-    }
-
-    horiz[CLIP]= NH;
-    horiz[SUBJ]= NH;
-
-    /* Process each edge at this scanbeam boundary */
-    for (edge= aet; edge; edge= edge->next)
-    {
-      exists[CLIP]= edge->bundle[ABOVE][CLIP] + 
-                   (edge->bundle[BELOW][CLIP] << 1);
-      exists[SUBJ]= edge->bundle[ABOVE][SUBJ] + 
-                   (edge->bundle[BELOW][SUBJ] << 1);
-
-      if (exists[CLIP] || exists[SUBJ])
-      {
-        /* Set bundle side */
-        edge->bside[CLIP]= parity[CLIP];
-        edge->bside[SUBJ]= parity[SUBJ];
-
-        /* Determine contributing status and quadrant occupancies */
-        switch (op)
-        {
-        case GPC_DIFF:
-        case GPC_INT:
-          contributing= (exists[CLIP] && (parity[SUBJ] || horiz[SUBJ]))
-                     || (exists[SUBJ] && (parity[CLIP] || horiz[CLIP]))
-                     || (exists[CLIP] && exists[SUBJ]
-                     && (parity[CLIP] == parity[SUBJ]));
-          br= (parity[CLIP])
-           && (parity[SUBJ]);
-          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
-           && (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
-          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
-           && (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
-          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP]) 
-           && (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
-          break;
-        case GPC_XOR:
-          contributing= exists[CLIP] || exists[SUBJ];
-          br= (parity[CLIP])
-            ^ (parity[SUBJ]);
-          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
-            ^ (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
-          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
-            ^ (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
-          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP])
-            ^ (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
-          break;
-        case GPC_UNION:
-          contributing= (exists[CLIP] && (!parity[SUBJ] || horiz[SUBJ]))
-                     || (exists[SUBJ] && (!parity[CLIP] || horiz[CLIP]))
-                     || (exists[CLIP] && exists[SUBJ]
-                     && (parity[CLIP] == parity[SUBJ]));
-          br= (parity[CLIP])
-           || (parity[SUBJ]);
-          bl= (parity[CLIP] ^ edge->bundle[ABOVE][CLIP])
-           || (parity[SUBJ] ^ edge->bundle[ABOVE][SUBJ]);
-          tr= (parity[CLIP] ^ (horiz[CLIP]!=NH))
-           || (parity[SUBJ] ^ (horiz[SUBJ]!=NH));
-          tl= (parity[CLIP] ^ (horiz[CLIP]!=NH) ^ edge->bundle[BELOW][CLIP])
-           || (parity[SUBJ] ^ (horiz[SUBJ]!=NH) ^ edge->bundle[BELOW][SUBJ]);
-          break;
-        }
-
-        /* Update parity */
-        parity[CLIP]^= edge->bundle[ABOVE][CLIP];
-        parity[SUBJ]^= edge->bundle[ABOVE][SUBJ];
-
-        /* Update horizontal state */
-        if (exists[CLIP])         
-          horiz[CLIP]=
-            next_h_state[horiz[CLIP]]
-                        [((exists[CLIP] - 1) << 1) + parity[CLIP]];
-        if (exists[SUBJ])         
-          horiz[SUBJ]=
-            next_h_state[horiz[SUBJ]]
-                        [((exists[SUBJ] - 1) << 1) + parity[SUBJ]];
-        
-        vclass= tr + (tl << 1) + (br << 2) + (bl << 3);
-
-        if (contributing)
-        {
-          xb= edge->xb;
-
-          switch (vclass)
-          {
-          case EMN:
-            new_tristrip(&tlist, edge, xb, yb);
-            cf= edge;
-            break;
-          case ERI:
-            edge->outp[ABOVE]= cf->outp[ABOVE];
-            if (xb != cf->xb)
-              VERTEX(edge, ABOVE, RIGHT, xb, yb);
-            cf= NULL;
-            break;
-          case ELI:
-            VERTEX(edge, BELOW, LEFT, xb, yb);
-            edge->outp[ABOVE]= NULL;
-            cf= edge;
-            break;
-          case EMX:
-            if (xb != cf->xb)
-              VERTEX(edge, BELOW, RIGHT, xb, yb);
-            edge->outp[ABOVE]= NULL;
-            cf= NULL;
-            break;
-          case IMN:
-            if (cft == LED)
-	    {
-              if (cf->bot.y != yb)
-                VERTEX(cf, BELOW, LEFT, cf->xb, yb);
-              new_tristrip(&tlist, cf, cf->xb, yb);
-	    }
-            edge->outp[ABOVE]= cf->outp[ABOVE];
-            VERTEX(edge, ABOVE, RIGHT, xb, yb);
-            break;
-          case ILI:
-            new_tristrip(&tlist, edge, xb, yb);
-            cf= edge;
-            cft= ILI;
-            break;
-          case IRI:
-            if (cft == LED)
-	    {
-              if (cf->bot.y != yb)
-                VERTEX(cf, BELOW, LEFT, cf->xb, yb);
-              new_tristrip(&tlist, cf, cf->xb, yb);
-	    }
-            VERTEX(edge, BELOW, RIGHT, xb, yb);
-            edge->outp[ABOVE]= NULL;
-            break;
-          case IMX:
-            VERTEX(edge, BELOW, LEFT, xb, yb);
-            edge->outp[ABOVE]= NULL;
-            cft= IMX;
-            break;
-	  case IMM:
-            VERTEX(edge, BELOW, LEFT, xb, yb);
-            edge->outp[ABOVE]= cf->outp[ABOVE];
-            if (xb != cf->xb)
-              VERTEX(cf, ABOVE, RIGHT, xb, yb);
-            cf= edge;
-            break;
-          case EMM:
-            VERTEX(edge, BELOW, RIGHT, xb, yb);
-            edge->outp[ABOVE]= NULL;
-            new_tristrip(&tlist, edge, xb, yb);
-            cf= edge;
-            break;
-          case LED:
-            if (edge->bot.y == yb)
-              VERTEX(edge, BELOW, LEFT, xb, yb);
-            edge->outp[ABOVE]= edge->outp[BELOW];
-            cf= edge;
-            cft= LED;
-            break;
-          case RED:
-            edge->outp[ABOVE]= cf->outp[ABOVE];
-            if (cft == LED)
-	    {
-              if (cf->bot.y == yb)
-	      {
-                VERTEX(edge, BELOW, RIGHT, xb, yb);
-	      }
-              else
-	      {
-                if (edge->bot.y == yb)
-		{
-                  VERTEX(cf, BELOW, LEFT, cf->xb, yb);
-                  VERTEX(edge, BELOW, RIGHT, xb, yb);
-		}
-	      }
-	    }
-            else
-	    {
-              VERTEX(edge, BELOW, RIGHT, xb, yb);
-              VERTEX(edge, ABOVE, RIGHT, xb, yb);
-	    }
-            cf= NULL;
-            break;
-          default:
-            break;
-          } /* End of switch */
-        } /* End of contributing conditional */
-      } /* End of edge exists conditional */
-    } /* End of AET loop */
-
-    /* Delete terminating edges from the AET, otherwise compute xt */
-    for (edge= aet; edge; edge= edge->next)
-    {
-      if (edge->top.y == yb)
-      {
-        prev_edge= edge->prev;
-        next_edge= edge->next;
-        if (prev_edge)
-          prev_edge->next= next_edge;
-        else
-          aet= next_edge;
-        if (next_edge)
-          next_edge->prev= prev_edge;
-
-        /* Copy bundle head state to the adjacent tail edge if required */
-        if ((edge->bstate[BELOW] == BUNDLE_HEAD) && prev_edge)
-	{
-          if (prev_edge->bstate[BELOW] == BUNDLE_TAIL)
-          {
-            prev_edge->outp[BELOW]= edge->outp[BELOW];
-            prev_edge->bstate[BELOW]= UNBUNDLED;
-            if (prev_edge->prev)
-              if (prev_edge->prev->bstate[BELOW] == BUNDLE_TAIL)
-                prev_edge->bstate[BELOW]= BUNDLE_HEAD;
-	  }
-	}
-      }
-      else
-      {
-        if (edge->top.y == yt)
-          edge->xt= edge->top.x;
-        else
-          edge->xt= edge->bot.x + edge->dx * (yt - edge->bot.y);
-      }
-    }
-
-    if (scanbeam < sbt_entries)
-    {
-      /* === SCANBEAM INTERIOR PROCESSING ============================== */
-  
-      build_intersection_table(&it, aet, dy);
-
-      /* Process each node in the intersection table */
-      for (intersect= it; intersect; intersect= intersect->next)
-      {
-        e0= intersect->ie[0];
-        e1= intersect->ie[1];
-
-        /* Only generate output for contributing intersections */
-        if ((e0->bundle[ABOVE][CLIP] || e0->bundle[ABOVE][SUBJ])
-         && (e1->bundle[ABOVE][CLIP] || e1->bundle[ABOVE][SUBJ]))
-	{
-          p= e0->outp[ABOVE];
-          q= e1->outp[ABOVE];
-          ix= intersect->point.x;
-          iy= intersect->point.y + yb;
-
-          in[CLIP]= ( e0->bundle[ABOVE][CLIP] && !e0->bside[CLIP])
-                 || ( e1->bundle[ABOVE][CLIP] &&  e1->bside[CLIP])
-                 || (!e0->bundle[ABOVE][CLIP] && !e1->bundle[ABOVE][CLIP]
-                     && e0->bside[CLIP] && e1->bside[CLIP]);
-          in[SUBJ]= ( e0->bundle[ABOVE][SUBJ] && !e0->bside[SUBJ])
-                 || ( e1->bundle[ABOVE][SUBJ] &&  e1->bside[SUBJ])
-                 || (!e0->bundle[ABOVE][SUBJ] && !e1->bundle[ABOVE][SUBJ]
-                     && e0->bside[SUBJ] && e1->bside[SUBJ]);
-
-          /* Determine quadrant occupancies */
-          switch (op)
-          {
-          case GPC_DIFF:
-          case GPC_INT:
-            tr= (in[CLIP])
-             && (in[SUBJ]);
-            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
-             && (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
-            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
-             && (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
-             && (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            break;
-          case GPC_XOR:
-            tr= (in[CLIP])
-              ^ (in[SUBJ]);
-            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
-              ^ (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
-            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
-              ^ (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
-              ^ (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            break;
-          case GPC_UNION:
-            tr= (in[CLIP])
-             || (in[SUBJ]);
-            tl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP])
-             || (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ]);
-            br= (in[CLIP] ^ e0->bundle[ABOVE][CLIP])
-             || (in[SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            bl= (in[CLIP] ^ e1->bundle[ABOVE][CLIP] ^ e0->bundle[ABOVE][CLIP])
-             || (in[SUBJ] ^ e1->bundle[ABOVE][SUBJ] ^ e0->bundle[ABOVE][SUBJ]);
-            break;
-          }
-
-          vclass= tr + (tl << 1) + (br << 2) + (bl << 3);
-
-          switch (vclass)
-          {
-          case EMN:
-            new_tristrip(&tlist, e1, ix, iy);
-            e0->outp[ABOVE]= e1->outp[ABOVE];
-            break;
-          case ERI:
-            if (p)
-            {
-              P_EDGE(prev_edge, e0, ABOVE, px, iy);
-              VERTEX(prev_edge, ABOVE, LEFT, px, iy);
-              VERTEX(e0, ABOVE, RIGHT, ix, iy);
-              e1->outp[ABOVE]= e0->outp[ABOVE];
-              e0->outp[ABOVE]= NULL;
-            }
-            break;
-          case ELI:
-            if (q)
-            {
-              N_EDGE(next_edge, e1, ABOVE, nx, iy);
-              VERTEX(e1, ABOVE, LEFT, ix, iy);
-              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
-              e0->outp[ABOVE]= e1->outp[ABOVE];
-              e1->outp[ABOVE]= NULL;
-            }
-            break;
-          case EMX:
-            if (p && q)
-            {
-              VERTEX(e0, ABOVE, LEFT, ix, iy);
-              e0->outp[ABOVE]= NULL;
-              e1->outp[ABOVE]= NULL;
-            }
-            break;
-          case IMN:
-            P_EDGE(prev_edge, e0, ABOVE, px, iy);
-            VERTEX(prev_edge, ABOVE, LEFT, px, iy);
-            N_EDGE(next_edge, e1, ABOVE, nx, iy);
-            VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
-            new_tristrip(&tlist, prev_edge, px, iy); 
-            e1->outp[ABOVE]= prev_edge->outp[ABOVE];
-            VERTEX(e1, ABOVE, RIGHT, ix, iy);
-            new_tristrip(&tlist, e0, ix, iy);
-            next_edge->outp[ABOVE]= e0->outp[ABOVE];
-            VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
-            break;
-          case ILI:
-            if (p)
-            {
-              VERTEX(e0, ABOVE, LEFT, ix, iy);
-              N_EDGE(next_edge, e1, ABOVE, nx, iy);
-              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
-              e1->outp[ABOVE]= e0->outp[ABOVE];
-              e0->outp[ABOVE]= NULL;
-            }
-            break;
-          case IRI:
-            if (q)
-            {
-              VERTEX(e1, ABOVE, RIGHT, ix, iy);
-              P_EDGE(prev_edge, e0, ABOVE, px, iy);
-              VERTEX(prev_edge, ABOVE, LEFT, px, iy);
-              e0->outp[ABOVE]= e1->outp[ABOVE];
-              e1->outp[ABOVE]= NULL;
-            }
-            break;
-          case IMX:
-            if (p && q)
-            {
-              VERTEX(e0, ABOVE, RIGHT, ix, iy);
-              VERTEX(e1, ABOVE, LEFT, ix, iy);
-              e0->outp[ABOVE]= NULL;
-              e1->outp[ABOVE]= NULL;
-              P_EDGE(prev_edge, e0, ABOVE, px, iy);
-              VERTEX(prev_edge, ABOVE, LEFT, px, iy);
-              new_tristrip(&tlist, prev_edge, px, iy);
-              N_EDGE(next_edge, e1, ABOVE, nx, iy);
-              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
-              next_edge->outp[ABOVE]= prev_edge->outp[ABOVE];
-              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
-            }
-            break;
-          case IMM:
-            if (p && q)
-            {
-              VERTEX(e0, ABOVE, RIGHT, ix, iy);
-              VERTEX(e1, ABOVE, LEFT, ix, iy);
-              P_EDGE(prev_edge, e0, ABOVE, px, iy);
-              VERTEX(prev_edge, ABOVE, LEFT, px, iy);
-              new_tristrip(&tlist, prev_edge, px, iy);
-              N_EDGE(next_edge, e1, ABOVE, nx, iy);
-              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
-              e1->outp[ABOVE]= prev_edge->outp[ABOVE];
-              VERTEX(e1, ABOVE, RIGHT, ix, iy);
-              new_tristrip(&tlist, e0, ix, iy);
-              next_edge->outp[ABOVE]= e0->outp[ABOVE];
-              VERTEX(next_edge, ABOVE, RIGHT, nx, iy);
-            }
-            break;
-          case EMM:
-            if (p && q)
-            {
-              VERTEX(e0, ABOVE, LEFT, ix, iy);
-              new_tristrip(&tlist, e1, ix, iy);
-              e0->outp[ABOVE]= e1->outp[ABOVE];
-            }
-            break;
-          default:
-            break;
-          } /* End of switch */
-	} /* End of contributing intersection conditional */
-
-        /* Swap bundle sides in response to edge crossing */
-        if (e0->bundle[ABOVE][CLIP])
-	  e1->bside[CLIP]= !e1->bside[CLIP];
-        if (e1->bundle[ABOVE][CLIP])
-	  e0->bside[CLIP]= !e0->bside[CLIP];
-        if (e0->bundle[ABOVE][SUBJ])
-	  e1->bside[SUBJ]= !e1->bside[SUBJ];
-        if (e1->bundle[ABOVE][SUBJ])
-	  e0->bside[SUBJ]= !e0->bside[SUBJ];
-
-        /* Swap e0 and e1 bundles in the AET */
-        prev_edge= e0->prev;
-        next_edge= e1->next;
-        if (e1->next)
-          e1->next->prev= e0;
-
-        if (e0->bstate[ABOVE] == BUNDLE_HEAD)
-        {
-          search= TRUE;
-          while (search)
-          {
-            prev_edge= prev_edge->prev;
-            if (prev_edge)
-            {
-              if (prev_edge->bundle[ABOVE][CLIP]
-               || prev_edge->bundle[ABOVE][SUBJ]
-               || (prev_edge->bstate[ABOVE] == BUNDLE_HEAD))
-                search= FALSE;
-            }
-            else
-              search= FALSE;
-          }
-        }
-        if (!prev_edge)
-        {
-           e1->next= aet;
-           aet= e0->next;
-        }
-        else
-        {
-          e1->next= prev_edge->next;
-          prev_edge->next= e0->next;
-        }
-        e0->next->prev= prev_edge;
-        e1->next->prev= e1;
-        e0->next= next_edge;
-      } /* End of IT loop*/
-
-      /* Prepare for next scanbeam */
-      for (edge= aet; edge; edge= next_edge)
-      {
-        next_edge= edge->next;
-        succ_edge= edge->succ;
-
-        if ((edge->top.y == yt) && succ_edge)
-        {
-          /* Replace AET edge by its successor */
-          succ_edge->outp[BELOW]= edge->outp[ABOVE];
-          succ_edge->bstate[BELOW]= edge->bstate[ABOVE];
-          succ_edge->bundle[BELOW][CLIP]= edge->bundle[ABOVE][CLIP];
-          succ_edge->bundle[BELOW][SUBJ]= edge->bundle[ABOVE][SUBJ];
-          prev_edge= edge->prev;
-          if (prev_edge)
-            prev_edge->next= succ_edge;
-          else
-            aet= succ_edge;
-          if (next_edge)
-            next_edge->prev= succ_edge;
-          succ_edge->prev= prev_edge;
-          succ_edge->next= next_edge;
-        }
-        else
-        {
-          /* Update this edge */
-          edge->outp[BELOW]= edge->outp[ABOVE];
-          edge->bstate[BELOW]= edge->bstate[ABOVE];
-          edge->bundle[BELOW][CLIP]= edge->bundle[ABOVE][CLIP];
-          edge->bundle[BELOW][SUBJ]= edge->bundle[ABOVE][SUBJ];
-          edge->xb= edge->xt;
-        }
-        edge->outp[ABOVE]= NULL;
-      }
-    }
-  } /* === END OF SCANBEAM PROCESSING ================================== */
-
-  /* Generate result tristrip from tlist */
-  result->strip= NULL;
-  result->num_strips= count_tristrips(tlist);
-  if (result->num_strips > 0)
-  {
-    _MALLOC(result->strip, result->num_strips * sizeof(gpc_vertex_list),
-           "tristrip list creation");
-
-    s= 0;
-    for (tn= tlist; tn; tn= tnn)
-    {
-      tnn= tn->next;
-
-      if (tn->active > 2)
-      {
-        /* Valid tristrip: copy the vertices and free the heap */
-        result->strip[s].num_vertices= tn->active;
-        _MALLOC(result->strip[s].vertex, tn->active * sizeof(gpc_vertex),
-               "tristrip creation");
-        v= 0;
-        if (INVERT_TRISTRIPS)
-        {
-          lt= tn->v[RIGHT];
-          rt= tn->v[LEFT];
-        }
-        else
-        {
-          lt= tn->v[LEFT];
-          rt= tn->v[RIGHT];
-        }
-        while (lt || rt)
-        {
-          if (lt)
-          {
-            ltn= lt->next;
-            result->strip[s].vertex[v].x= lt->x;
-            result->strip[s].vertex[v].y= lt->y;
-            v++;
-            FREE(lt);
-            lt= ltn;
-          }
-          if (rt)
-          {
-            rtn= rt->next;
-            result->strip[s].vertex[v].x= rt->x;
-            result->strip[s].vertex[v].y= rt->y;
-            v++;
-            FREE(rt);
-            rt= rtn;
-          }
-        }
-        s++;
-      }
-      else
-      {
-        /* Invalid tristrip: just free the heap */
-        for (lt= tn->v[LEFT]; lt; lt= ltn)
-        {
-          ltn= lt->next;
-          FREE(lt);
-        }
-        for (rt= tn->v[RIGHT]; rt; rt=rtn)
-        {
-          rtn= rt->next;
-          FREE(rt);
-        }
-      }
-      FREE(tn);
-    }
-  }
-
-  /* Tidy up */
-  reset_it(&it);
-  reset_lmt(&lmt);
-  FREE(c_heap);
-  FREE(s_heap);
-  FREE(sbt);
-}
-
-/*
-===========================================================================
-                           End of file: gpc.c
-===========================================================================
-*/
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "Polygon_Clipper.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool _GPC_Set_Polygon(CSG_Shape *pShape, gpc_polygon *pPolygon)
-{
-	pPolygon->contour		= NULL;
-	pPolygon->hole			= NULL;
-	pPolygon->num_contours	= 0;
-
-	for(int iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
-	{
-		if( pShape->Get_Point_Count(iPart) > 0 )
-		{
-			gpc_vertex	*Contour	= (gpc_vertex *)malloc(pShape->Get_Point_Count(iPart) * sizeof(gpc_vertex));
-
-			for(int iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
-			{
-				TSG_Point	Point	= pShape->Get_Point(iPoint, iPart);
-				Contour[iPoint].x	= Point.x;
-				Contour[iPoint].y	= Point.y;
-			}
-
-			gpc_vertex_list	vList;
-
-			vList.num_vertices	= pShape->Get_Point_Count(iPart);
-			vList.vertex		= Contour;
-			gpc_add_contour(pPolygon, &vList, ((CSG_Shape_Polygon *)pShape)->is_Lake(iPart) ? 1 : 0);
-
-			free(Contour);
-		}
-	}
-
-	return( pPolygon->num_contours > 0 );
-}
-
-//---------------------------------------------------------
-bool _GPC_Get_Polygon(CSG_Shape *pShape, gpc_polygon *pPolygon)
-{
-	pShape->Del_Parts();
-
-	if( pPolygon->num_contours > 0 )
-	{
-		for(int iPart=0; iPart<pPolygon->num_contours; iPart++)
-		{
-			gpc_vertex	*Contour	= pPolygon->contour[iPart].vertex;
-			int			nPoints		= pPolygon->contour[iPart].num_vertices;
-
-			for(int iPoint=0; iPoint<nPoints; iPoint++)
-			{
-				pShape->Add_Point(Contour[iPoint].x, Contour[iPoint].y, iPart);
-			}
-		}
-	}
-
-	return( pShape->is_Valid() );
-}
-
-//---------------------------------------------------------
-bool _GPC_Clip(gpc_op Clip_Type, CSG_Shape *pShape_A, CSG_Shape *pShape_B, CSG_Shape *pShape_AB)
-{
-	gpc_polygon	poly_A, poly_B, poly_AB;
-
-	if(	_GPC_Set_Polygon(pShape_A, &poly_A) )
-	{
-		if( _GPC_Set_Polygon(pShape_B, &poly_B) )
-		{
-			gpc_polygon_clip(Clip_Type, &poly_A, &poly_B, &poly_AB);
-
-			if( pShape_AB == NULL )
-			{
-				pShape_AB	= pShape_A;
-			}
-
-			_GPC_Get_Polygon(pShape_AB, &poly_AB);
-
-			gpc_free_polygon(&poly_AB);
-			gpc_free_polygon(&poly_B);
-		}
-
-		gpc_free_polygon(&poly_A);
-	}
-
-	return( pShape_AB && pShape_AB->is_Valid() );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool GPC_Intersection(CSG_Shape *pShape_A, CSG_Shape *pShape_B, CSG_Shape *pShape_AB)
-{
-	return( _GPC_Clip(GPC_INT, pShape_A, pShape_B, pShape_AB) );
-}
-
-//---------------------------------------------------------
-bool GPC_Difference(CSG_Shape *pShape_A, CSG_Shape *pShape_B, CSG_Shape *pShape_AB)
-{
-	return( _GPC_Clip(GPC_DIFF, pShape_A, pShape_B, pShape_AB) );
-}
-
-//---------------------------------------------------------
-bool GPC_ExclusiveOr(CSG_Shape *pShape_A, CSG_Shape *pShape_B, CSG_Shape *pShape_AB)
-{
-	return( _GPC_Clip(GPC_XOR, pShape_A, pShape_B, pShape_AB) );
-}
-
-//---------------------------------------------------------
-bool GPC_Union(CSG_Shape *pShape_A, CSG_Shape *pShape_B, CSG_Shape *pShape_AB)
-{
-	return( _GPC_Clip(GPC_UNION, pShape_A, pShape_B, pShape_AB) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
diff --git a/src/saga_core/Makefile.in b/src/saga_core/Makefile.in
index 655491c..b3f3e3b 100644
--- a/src/saga_core/Makefile.in
+++ b/src/saga_core/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,
@@ -36,7 +36,13 @@ host_triplet = @host@
 subdir = src/saga_core
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,6 +98,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -141,14 +149,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -192,9 +213,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -251,7 +276,7 @@ clean-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]*);; \
@@ -276,7 +301,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]*);; \
diff --git a/src/saga_core/saga_api/Makefile.am b/src/saga_core/saga_api/Makefile.am
index f53585f..e19aaf6 100644
--- a/src/saga_core/saga_api/Makefile.am
+++ b/src/saga_core/saga_api/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.20 2010/06/28 23:22:27 johanvdw Exp $
+# $Id: Makefile.am,v 1.24 2010/11/08 09:20:52 johanvdw Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
@@ -14,6 +14,7 @@ endif
 libsaga_api_la_LDFLAGS =$(AM_LDFLAGS) -release $(VERSION)
 
 lib_LTLIBRARIES = libsaga_api.la
+
 libsaga_api_la_SOURCES =\
 api_callback.cpp\
 api_colors.cpp\
@@ -23,9 +24,6 @@ api_memory.cpp\
 api_string.cpp\
 api_translator.cpp\
 dataobject.cpp\
-doc_html.cpp\
-doc_pdf.cpp\
-doc_svg.cpp\
 geo_classes.cpp\
 geo_functions.cpp\
 grid.cpp\
@@ -79,9 +77,6 @@ tin_elements.cpp\
 tin_triangulation.cpp\
 api_core.h\
 dataobject.h\
-doc_html.h\
-doc_pdf.h\
-doc_svg.h\
 geo_tools.h\
 grid.h\
 grid_pyramid.h\
@@ -100,3 +95,22 @@ tin.h
 
 install-exec-hook:
 	-ldconfig
+
+if SAGA_UNICODE
+SWIGUNICODEFLAGS = -D_SWIG_WCHAR -D_SAGA_UNICODE
+endif
+
+if SAGA_PYTHON
+_saga_api_la_CPPFLAGS = $(PYTHON_CPPFLAGS) $(SWIGUNICODEFLAGS) $(DISABLELIBHARU)
+_saga_api_la_LDFLAGS = -module -release $(VERSION) $(SWIG_LIB)
+_saga_api_la_SOURCES = saga_api_wrap.cxx
+_saga_api_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+
+python_LTLIBRARIES = _saga_api.la
+python_PYTHON = saga_api.py
+
+saga_api_wrap.cxx:
+	$(SWIG) -includeall -python $(SWIGUNICODEFLAGS) $(DISABLELIBHARU) ./saga_api.h 
+endif
+
+CLEANFILES = saga_api_wrap.cxx
diff --git a/src/saga_core/saga_api/Makefile.in b/src/saga_core/saga_api/Makefile.in
index e302543..410734d 100644
--- a/src/saga_core/saga_api/Makefile.in
+++ b/src/saga_core/saga_api/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -35,9 +35,16 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = src/saga_core/saga_api
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(am__python_PYTHON_DIST) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -64,22 +71,32 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(libdir)"
-LTLIBRARIES = $(lib_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pythondir)" \
+	"$(DESTDIR)$(pythondir)"
+LTLIBRARIES = $(lib_LTLIBRARIES) $(python_LTLIBRARIES)
+ at SAGA_PYTHON_TRUE@_saga_api_la_DEPENDENCIES = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+am___saga_api_la_SOURCES_DIST = saga_api_wrap.cxx
+ at SAGA_PYTHON_TRUE@am__saga_api_la_OBJECTS =  \
+ at SAGA_PYTHON_TRUE@	_saga_api_la-saga_api_wrap.lo
+_saga_api_la_OBJECTS = $(am__saga_api_la_OBJECTS)
+_saga_api_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(_saga_api_la_LDFLAGS) $(LDFLAGS) -o $@
+ at SAGA_PYTHON_TRUE@am__saga_api_la_rpath = -rpath $(pythondir)
 libsaga_api_la_LIBADD =
 am_libsaga_api_la_OBJECTS = api_callback.lo api_colors.lo api_core.lo \
 	api_file.lo api_memory.lo api_string.lo api_translator.lo \
-	dataobject.lo doc_html.lo doc_pdf.lo doc_svg.lo geo_classes.lo \
-	geo_functions.lo grid.lo grid_io.lo grid_memory.lo \
-	grid_operation.lo grid_pyramid.lo grid_system.lo \
-	mat_formula.lo mat_grid_radius.lo mat_indexing.lo \
-	mat_matrix.lo mat_regression.lo mat_regression_multiple.lo \
-	mat_spline.lo mat_tools.lo mat_trend.lo metadata.lo module.lo \
-	module_grid.lo module_grid_interactive.lo \
-	module_interactive.lo module_interactive_base.lo \
-	module_library.lo module_library_interface.lo parameter.lo \
-	parameter_data.lo parameters.lo pointcloud.lo projections.lo \
-	quadtree.lo saga_api.lo shape.lo shape_line.lo shape_part.lo \
+	dataobject.lo geo_classes.lo geo_functions.lo grid.lo \
+	grid_io.lo grid_memory.lo grid_operation.lo grid_pyramid.lo \
+	grid_system.lo mat_formula.lo mat_grid_radius.lo \
+	mat_indexing.lo mat_matrix.lo mat_regression.lo \
+	mat_regression_multiple.lo mat_spline.lo mat_tools.lo \
+	mat_trend.lo metadata.lo module.lo module_grid.lo \
+	module_grid_interactive.lo module_interactive.lo \
+	module_interactive_base.lo module_library.lo \
+	module_library_interface.lo parameter.lo parameter_data.lo \
+	parameters.lo pointcloud.lo projections.lo quadtree.lo \
+	saga_api.lo shape.lo shape_line.lo shape_part.lo \
 	shape_point.lo shape_points.lo shape_polygon.lo shapes.lo \
 	shapes_io.lo shapes_ogis.lo shapes_search.lo \
 	shapes_selection.lo table.lo table_dbase.lo table_io.lo \
@@ -111,8 +128,11 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(libsaga_api_la_SOURCES)
-DIST_SOURCES = $(libsaga_api_la_SOURCES)
+SOURCES = $(_saga_api_la_SOURCES) $(libsaga_api_la_SOURCES)
+DIST_SOURCES = $(am___saga_api_la_SOURCES_DIST) \
+	$(libsaga_api_la_SOURCES)
+am__python_PYTHON_DIST = saga_api.py
+py_compile = $(top_srcdir)/py-compile
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -123,6 +143,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -172,14 +194,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -223,9 +258,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -236,7 +275,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.20 2010/06/28 23:22:27 johanvdw Exp $
+# $Id: Makefile.am,v 1.24 2010/11/08 09:20:52 johanvdw Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 @SAGA_UNICODE_FALSE at AM_CXXFLAGS = -fPIC -Wall `wx-config --unicode=no --cxxflags` -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD -D_SAGA_API_EXPORTS $(DISABLELIBHARU) $(DBGFLAGS)
@@ -254,9 +293,6 @@ api_memory.cpp\
 api_string.cpp\
 api_translator.cpp\
 dataobject.cpp\
-doc_html.cpp\
-doc_pdf.cpp\
-doc_svg.cpp\
 geo_classes.cpp\
 geo_functions.cpp\
 grid.cpp\
@@ -310,9 +346,6 @@ tin_elements.cpp\
 tin_triangulation.cpp\
 api_core.h\
 dataobject.h\
-doc_html.h\
-doc_pdf.h\
-doc_svg.h\
 geo_tools.h\
 grid.h\
 grid_pyramid.h\
@@ -329,10 +362,18 @@ table_dbase.h\
 table_value.h\
 tin.h
 
+ at SAGA_UNICODE_TRUE@SWIGUNICODEFLAGS = -D_SWIG_WCHAR -D_SAGA_UNICODE
+ at SAGA_PYTHON_TRUE@_saga_api_la_CPPFLAGS = $(PYTHON_CPPFLAGS) $(SWIGUNICODEFLAGS) $(DISABLELIBHARU)
+ at SAGA_PYTHON_TRUE@_saga_api_la_LDFLAGS = -module -release $(VERSION) $(SWIG_LIB)
+ at SAGA_PYTHON_TRUE@_saga_api_la_SOURCES = saga_api_wrap.cxx
+ at SAGA_PYTHON_TRUE@_saga_api_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
+ at SAGA_PYTHON_TRUE@python_LTLIBRARIES = _saga_api.la
+ at SAGA_PYTHON_TRUE@python_PYTHON = saga_api.py
+CLEANFILES = saga_api_wrap.cxx
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .cpp .lo .o .obj
+.SUFFIXES: .cpp .cxx .lo .o .obj
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
@@ -394,6 +435,39 @@ clean-libLTLIBRARIES:
 	  echo "rm -f \"$${dir}/so_locations\""; \
 	  rm -f "$${dir}/so_locations"; \
 	done
+install-pythonLTLIBRARIES: $(python_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pythondir)" || $(MKDIR_P) "$(DESTDIR)$(pythondir)"
+	@list='$(python_LTLIBRARIES)'; test -n "$(pythondir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pythondir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pythondir)"; \
+	}
+
+uninstall-pythonLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(python_LTLIBRARIES)'; test -n "$(pythondir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pythondir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pythondir)/$$f"; \
+	done
+
+clean-pythonLTLIBRARIES:
+	-test -z "$(python_LTLIBRARIES)" || rm -f $(python_LTLIBRARIES)
+	@list='$(python_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+_saga_api.la: $(_saga_api_la_OBJECTS) $(_saga_api_la_DEPENDENCIES) 
+	$(_saga_api_la_LINK) $(am__saga_api_la_rpath) $(_saga_api_la_OBJECTS) $(_saga_api_la_LIBADD) $(LIBS)
 libsaga_api.la: $(libsaga_api_la_OBJECTS) $(libsaga_api_la_DEPENDENCIES) 
 	$(libsaga_api_la_LINK) -rpath $(libdir) $(libsaga_api_la_OBJECTS) $(libsaga_api_la_LIBADD) $(LIBS)
 
@@ -403,6 +477,7 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/_saga_api_la-saga_api_wrap.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/api_callback.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/api_colors.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/api_core.Plo at am__quote@
@@ -411,9 +486,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/api_string.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/api_translator.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dataobject.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/doc_html.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/doc_pdf.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/doc_svg.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/geo_classes.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/geo_functions.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grid.Plo at am__quote@
@@ -487,11 +559,77 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
 
+_saga_api_la-saga_api_wrap.lo: saga_api_wrap.cxx
+ at am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(_saga_api_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT _saga_api_la-saga_api_wrap.lo -MD -MP -MF $(DEPDIR)/_saga_api_la-saga_api_wrap.Tpo -c -o _saga_api_la-saga_api_wrap.lo `test -f 'saga_api_wrap.cxx' || echo '$(srcdir)/'`saga_api_wrap.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/_saga_api_la-saga_api_wrap.Tpo $(DEPDIR)/_saga_api_la-saga_api_wrap.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='saga_api_wrap.cxx' object='_saga_api_la-saga_api_wrap.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(_saga_api_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o _saga_api_la-saga_api_wrap.lo `test -f 'saga_api_wrap.cxx' || echo '$(srcdir)/'`saga_api_wrap.cxx
+
+.cxx.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
 clean-libtool:
 	-rm -rf .libs _libs
+install-pythonPYTHON: $(python_PYTHON)
+	@$(NORMAL_INSTALL)
+	test -z "$(pythondir)" || $(MKDIR_P) "$(DESTDIR)$(pythondir)"
+	@list='$(python_PYTHON)'; dlist=; list2=; test -n "$(pythondir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \
+	  if test -f $$b$$p; then \
+	    $(am__strip_dir) \
+	    dlist="$$dlist $$f"; \
+	    list2="$$list2 $$b$$p"; \
+	  else :; fi; \
+	done; \
+	for file in $$list2; do echo $$file; done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pythondir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pythondir)" || exit $$?; \
+	done || exit $$?; \
+	if test -n "$$dlist"; then \
+	  if test -z "$(DESTDIR)"; then \
+	    PYTHON=$(PYTHON) $(py_compile) --basedir "$(pythondir)" $$dlist; \
+	  else \
+	    PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(pythondir)" $$dlist; \
+	  fi; \
+	else :; fi
+
+uninstall-pythonPYTHON:
+	@$(NORMAL_UNINSTALL)
+	@list='$(python_PYTHON)'; test -n "$(pythondir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	filesc=`echo "$$files" | sed 's|$$|c|'`; \
+	fileso=`echo "$$files" | sed 's|$$|o|'`; \
+	echo " ( cd '$(DESTDIR)$(pythondir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(pythondir)" && rm -f $$files || exit $$?; \
+	echo " ( cd '$(DESTDIR)$(pythondir)' && rm -f" $$filesc ")"; \
+	cd "$(DESTDIR)$(pythondir)" && rm -f $$filesc || exit $$?; \
+	echo " ( cd '$(DESTDIR)$(pythondir)' && rm -f" $$fileso ")"; \
+	cd "$(DESTDIR)$(pythondir)" && rm -f $$fileso
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -579,7 +717,7 @@ check-am: all-am
 check: check-am
 all-am: Makefile $(LTLIBRARIES)
 installdirs:
-	for dir in "$(DESTDIR)$(libdir)"; do \
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pythondir)" "$(DESTDIR)$(pythondir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
@@ -599,6 +737,7 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -610,7 +749,7 @@ maintainer-clean-generic:
 clean: clean-am
 
 clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
-	mostlyclean-am
+	clean-pythonLTLIBRARIES mostlyclean-am
 
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
@@ -630,7 +769,7 @@ info: info-am
 
 info-am:
 
-install-data-am:
+install-data-am: install-pythonLTLIBRARIES install-pythonPYTHON
 
 install-dvi: install-dvi-am
 
@@ -677,28 +816,35 @@ ps: ps-am
 
 ps-am:
 
-uninstall-am: uninstall-libLTLIBRARIES
+uninstall-am: uninstall-libLTLIBRARIES uninstall-pythonLTLIBRARIES \
+	uninstall-pythonPYTHON
 
 .MAKE: install-am install-exec-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libLTLIBRARIES clean-libtool ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-exec-hook \
-	install-html install-html-am install-info install-info-am \
-	install-libLTLIBRARIES install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-libLTLIBRARIES
+	clean-libLTLIBRARIES clean-libtool clean-pythonLTLIBRARIES \
+	ctags distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-exec-hook install-html install-html-am \
+	install-info install-info-am install-libLTLIBRARIES \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-pythonLTLIBRARIES install-pythonPYTHON \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-libLTLIBRARIES uninstall-pythonLTLIBRARIES \
+	uninstall-pythonPYTHON
 
 
 install-exec-hook:
 	-ldconfig
 
+ at SAGA_PYTHON_TRUE@saga_api_wrap.cxx:
+ at SAGA_PYTHON_TRUE@	$(SWIG) -includeall -python $(SWIGUNICODEFLAGS) $(DISABLELIBHARU) ./saga_api.h 
+
 # 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.
 .NOEXPORT:
diff --git a/src/saga_core/saga_api/api_callback.cpp b/src/saga_core/saga_api/api_callback.cpp
index 3a49c48..0f4b574 100644
--- a/src/saga_core/saga_api/api_callback.cpp
+++ b/src/saga_core/saga_api/api_callback.cpp
@@ -1,545 +1,618 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                   api_callback.cpp                    //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <wx/stdpaths.h>
-
-#include "api_core.h"
-#include "grid.h"
-#include "parameters.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-TSG_PFNC_UI_Callback	gSG_UI_Callback	= NULL;
-
-//---------------------------------------------------------
-bool					SG_Set_UI_Callback(TSG_PFNC_UI_Callback Function)
-{
-	gSG_UI_Callback	= Function;
-
-	return( true );
-}
-
-//---------------------------------------------------------
-TSG_PFNC_UI_Callback	SG_Get_UI_Callback(void)
-{
-	return( gSG_UI_Callback );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int			gSG_UI_Progress_Lock	= 0;
-
-//---------------------------------------------------------
-int			SG_UI_Progress_Lock(bool bOn)
-{
-	if( bOn )
-	{
-		gSG_UI_Progress_Lock++;
-	}
-	else if( gSG_UI_Progress_Lock > 0 )
-	{
-		gSG_UI_Progress_Lock--;
-	}
-
-	return( gSG_UI_Progress_Lock );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_Process_Get_Okay(bool bBlink)
-{
-	if( gSG_UI_Callback )
-	{
-		return( gSG_UI_Callback(CALLBACK_PROCESS_GET_OKAY, gSG_UI_Progress_Lock && bBlink ? 1 : 0, 0) != 0 );
-	}
-	else
-	{
-		if( gSG_UI_Progress_Lock && bBlink )
-		{
-			static int	iBuisy		= 0;
-			const SG_Char	Buisy[4]	= {	'|', '/', '-', '\\'	};
-
-			SG_PRINTF(SG_T("\r%c   "), Buisy[iBuisy++]);
-			iBuisy	%= 4;
-		}
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_Process_Set_Okay(bool bOkay)
-{
-	if( gSG_UI_Callback )
-	{
-		return( gSG_UI_Callback(CALLBACK_PROCESS_SET_OKAY, bOkay ? 1 : 0, 0) != 0 );
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_Process_Set_Progress(double Position, double Range)
-{
-	if( gSG_UI_Progress_Lock > 0 )
-	{
-		if( gSG_UI_Callback )
-		{
-			return( gSG_UI_Callback(CALLBACK_PROCESS_GET_OKAY, 0, 0) != 0 );
-		}
-	}
-	else
-	{
-		if( gSG_UI_Callback )
-		{
-			return( gSG_UI_Callback(CALLBACK_PROCESS_SET_PROGRESS, (long)&Position, (long)&Range) != 0 );
-		}
-		else
-		{
-			SG_PRINTF(SG_T("\r%3d%%"), Range != 0.0 ? 1 + (int)(100.0 * Position / Range) : 100);
-		}
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_Process_Set_Ready(void)
-{
-	if( gSG_UI_Callback )
-	{
-		SG_UI_Process_Set_Text(LNG("ready"));
-
-		return( gSG_UI_Callback(CALLBACK_PROCESS_SET_READY, 0, 0) != 0 );
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-void		SG_UI_Process_Set_Text(const SG_Char *Text)
-{
-	if( gSG_UI_Progress_Lock == 0 )
-	{
-		if( gSG_UI_Callback )
-		{
-			gSG_UI_Callback(CALLBACK_PROCESS_SET_TEXT, (long)Text, 0);
-		}
-		else
-		{
-			SG_PRINTF(SG_T("\n%s"), Text);
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool		SG_UI_Stop_Execution(void)
-{
-	if( gSG_UI_Callback )
-	{
-		return( gSG_UI_Callback(CALLBACK_STOP_EXECUTION, 0, 0) != 0 );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void		SG_UI_Dlg_Message(const SG_Char *Message, const SG_Char *Caption)
-{
-	if( gSG_UI_Callback )
-	{
-		gSG_UI_Callback(CALLBACK_DLG_MESSAGE, (long)Message, (long)Caption);
-	}
-	else
-	{
-		SG_PRINTF(SG_T("\n%s: %s"), Caption, Message);
-	}
-}
-
-//---------------------------------------------------------
-bool		SG_UI_Dlg_Continue(const SG_Char *Message, const SG_Char *Caption)
-{
-	if( gSG_UI_Callback )
-	{
-		return( gSG_UI_Callback(CALLBACK_DLG_CONTINUE, (long)Message, (long)Caption) != 0 );
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-int			SG_UI_Dlg_Error(const SG_Char *Message, const SG_Char *Caption)
-{
-	if( gSG_UI_Callback )
-	{
-		return( gSG_UI_Callback(CALLBACK_DLG_ERROR, (long)Message, (long)Caption) );
-	}
-
-	return( 0 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool		SG_UI_Dlg_Parameters(CSG_Parameters *pParameters, const SG_Char *Caption)
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//           Application Programming Interface           //
+//                                                       //
+//                  Library: SAGA_API                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   api_callback.cpp                    //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <wx/stdpaths.h>
+
+#include "api_core.h"
+#include "grid.h"
+#include "parameters.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+TSG_PFNC_UI_Callback	gSG_UI_Callback	= NULL;
+
+//---------------------------------------------------------
+bool					SG_Set_UI_Callback(TSG_PFNC_UI_Callback Function)
+{
+	gSG_UI_Callback	= Function;
+
+	return( true );
+}
+
+//---------------------------------------------------------
+TSG_PFNC_UI_Callback	SG_Get_UI_Callback(void)
+{
+	return( gSG_UI_Callback );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+CSG_UI_Parameter::CSG_UI_Parameter(const CSG_UI_Parameter &Copy)
 {
-	if( gSG_UI_Callback && pParameters )
-	{
-		return( gSG_UI_Callback(CALLBACK_DLG_PARAMETERS, (long)pParameters, (long)Caption) != 0 );
-	}
-
-	return( true );
+	True	= Copy.True;
+	Number	= Copy.Number;
+	Pointer	= Copy.Pointer;
 }
 
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int			gSG_UI_Msg_Lock	= 0;
-
-//---------------------------------------------------------
-int			SG_UI_Msg_Lock(bool bOn)
-{
-	if( bOn )
-	{
-		gSG_UI_Msg_Lock++;
-	}
-	else if( gSG_UI_Msg_Lock > 0 )
-	{
-		gSG_UI_Msg_Lock--;
-	}
-
-	return( gSG_UI_Msg_Lock );
-}
-
-//---------------------------------------------------------
-void		SG_UI_Msg_Add(const SG_Char *Message, bool bNewLine, TSG_UI_MSG_STYLE Style)
-{
-	if( gSG_UI_Msg_Lock )
-		return;
-
-	if( gSG_UI_Callback )
-	{
-		int		Parameters[2];
-
-		Parameters[0]	= bNewLine ? 1 : 0;
-		Parameters[1]	= Style;
-
-		gSG_UI_Callback(CALLBACK_MESSAGE_ADD, (long)Message, (long)Parameters);
-	}
-	else
-	{
-		SG_PRINTF(SG_T("%s"), Message);
-
-		if( bNewLine )
-		{
-			SG_PRINTF(SG_T("\n\n"));
-		}
-	}
-}
-
-//---------------------------------------------------------
-void		SG_UI_Msg_Add_Error(const SG_Char *Message)
-{
-	if( gSG_UI_Msg_Lock )
-		return;
-
-	if( gSG_UI_Callback )
-	{
-		gSG_UI_Callback(CALLBACK_MESSAGE_ADD_ERROR, (long)Message, 0);
-	}
-	else
-	{
-		SG_PRINTF(SG_T("\n%s: %s"), LNG("Error"), Message);
-	}
-}
-
-//---------------------------------------------------------
-void		SG_UI_Msg_Add_Execution(const SG_Char *Message, bool bNewLine, TSG_UI_MSG_STYLE Style)
-{
-	if( gSG_UI_Msg_Lock )
-		return;
-
-	if( gSG_UI_Callback )
-	{
-		int		Parameters[2];
-
-		Parameters[0]	= bNewLine ? 1 : 0;
-		Parameters[1]	= Style;
-
-		gSG_UI_Callback(CALLBACK_MESSAGE_ADD_EXECUTION, (long)Message, (long)Parameters);
-	}
-	else
-	{
-		SG_PRINTF(SG_T("%s"), Message);
-
-		if( bNewLine )
-		{
-			SG_PRINTF(SG_T("\n\n"));
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CSG_Data_Object *	SG_UI_DataObject_Find(const SG_Char *File_Name, int Object_Type)
-{
-	if( gSG_UI_Callback && File_Name )
-	{
-		return( (class CSG_Data_Object *)gSG_UI_Callback(CALLBACK_DATAOBJECT_FIND_BY_FILE, (long)File_Name, Object_Type) );
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_DataObject_Check(CSG_Data_Object *pDataObject, int Object_Type)
-{
-	if( gSG_UI_Callback && pDataObject )
-	{
-		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_CHECK, (long)pDataObject, Object_Type) != 0 );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_DataObject_Add(CSG_Data_Object *pDataObject, int Show)
-{
-	if( gSG_UI_Callback && pDataObject )
-	{
-		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_ADD, (long)pDataObject, Show ? 1 : 0) != 0 );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_DataObject_Update(CSG_Data_Object *pDataObject, int Show, CSG_Parameters *pParameters)
-{
-	CSG_Parameters	Parameters;
-
-	if( gSG_UI_Callback && pDataObject )
-	{
-		if( gSG_UI_Callback(CALLBACK_DATAOBJECT_UPDATE, (long)pDataObject, (long)pParameters) != 0 )
-		{
-			if( Show != SG_UI_DATAOBJECT_UPDATE_ONLY )
-			{
-				SG_UI_DataObject_Show(pDataObject, Show);
-			}
-
-			return( true );
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_DataObject_Show(CSG_Data_Object *pDataObject, int Show)
-{
-	if( gSG_UI_Callback && pDataObject )
-	{
-		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_SHOW, (long)pDataObject, Show) != 0 );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_DataObject_asImage(CSG_Data_Object *pDataObject, CSG_Grid *pGrid)
-{
-	if( gSG_UI_Callback && pDataObject )
-	{
-		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_ASIMAGE, (long)pDataObject, (long)pGrid) != 0 );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_DataObject_Colors_Get(CSG_Data_Object *pDataObject, CSG_Colors *pColors)
-{
-	if( gSG_UI_Callback && pDataObject && pColors )
-	{
-		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_COLORS_GET, (long)pDataObject, (long)pColors) != 0 );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_DataObject_Colors_Set(CSG_Data_Object *pDataObject, CSG_Colors *pColors)
-{
-	if( gSG_UI_Callback && pDataObject && pColors )
-	{
-		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_COLORS_SET, (long)pDataObject, (long)pColors) != 0 );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_DataObject_Params_Get	(CSG_Data_Object *pDataObject, CSG_Parameters *pParameters)
-{
-	if( gSG_UI_Callback && pDataObject && pParameters )
-	{
-		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_PARAMS_GET, (long)pDataObject, (long)pParameters) != 0 );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_DataObject_Params_Set	(CSG_Data_Object *pDataObject, CSG_Parameters *pParameters)
-{
-	if( gSG_UI_Callback && pDataObject && pParameters )
-	{
-		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_PARAMS_SET, (long)pDataObject, (long)pParameters) != 0 );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool		SG_UI_DataObject_Get_All(class CSG_Parameters *pParameters)
-{
-	if( gSG_UI_Callback && pParameters )
-	{
-		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_GET_ALL, (long)pParameters, 0) != 0 );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void *		SG_UI_Get_Window_Main(void)
-{
-	if( gSG_UI_Callback )
-	{
-		return( (void *)gSG_UI_Callback(CALLBACK_GUI_GET_WINDOW, 0, 0) );
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-CSG_String	SG_UI_Get_Application_Path(void)
-{
-	return( wxStandardPaths::Get().GetExecutablePath().c_str() );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int					gSG_UI_Progress_Lock	= 0;
+
+//---------------------------------------------------------
+int			SG_UI_Progress_Lock(bool bOn)
+{
+	if( bOn )
+	{
+		gSG_UI_Progress_Lock++;
+	}
+	else if( gSG_UI_Progress_Lock > 0 )
+	{
+		gSG_UI_Progress_Lock--;
+	}
+
+	return( gSG_UI_Progress_Lock );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_Process_Get_Okay(bool bBlink)
+{
+	if( gSG_UI_Callback )
+	{
+		CSG_UI_Parameter	p1(gSG_UI_Progress_Lock && bBlink), p2;
+
+		return( gSG_UI_Callback(CALLBACK_PROCESS_GET_OKAY, p1, p2) != 0 );
+	}
+	else
+	{
+		if( gSG_UI_Progress_Lock && bBlink )
+		{
+			static int	iBuisy		= 0;
+			const SG_Char	Buisy[4]	= {	'|', '/', '-', '\\'	};
+
+			SG_PRINTF(SG_T("\r%c   "), Buisy[iBuisy++]);
+			iBuisy	%= 4;
+		}
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_Process_Set_Okay(bool bOkay)
+{
+	if( gSG_UI_Callback )
+	{
+		CSG_UI_Parameter	p1(bOkay), p2;
+
+		return( gSG_UI_Callback(CALLBACK_PROCESS_SET_OKAY, p1, p2) != 0 );
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_Process_Set_Progress(double Position, double Range)
+{
+	if( gSG_UI_Progress_Lock > 0 )
+	{
+		if( gSG_UI_Callback )
+		{
+			CSG_UI_Parameter	p1, p2;
+
+			return( gSG_UI_Callback(CALLBACK_PROCESS_GET_OKAY, p1, p2) != 0 );
+		}
+	}
+	else
+	{
+		if( gSG_UI_Callback )
+		{
+			CSG_UI_Parameter	p1(Position), p2(Range);
+
+			return( gSG_UI_Callback(CALLBACK_PROCESS_SET_PROGRESS, p1, p2) != 0 );
+		}
+		else
+		{
+			SG_PRINTF(SG_T("\r%3d%%"), Range != 0.0 ? 1 + (int)(100.0 * Position / Range) : 100);
+		}
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_Process_Set_Ready(void)
+{
+	if( gSG_UI_Callback )
+	{
+		SG_UI_Process_Set_Text(LNG("ready"));
+
+		if( gSG_UI_Progress_Lock == 0 )
+		{
+			CSG_UI_Parameter	p1, p2;
+
+			return( gSG_UI_Callback(CALLBACK_PROCESS_SET_READY, p1, p2) != 0 );
+		}
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+void		SG_UI_Process_Set_Text(const SG_Char *Text)
+{
+	if( gSG_UI_Progress_Lock == 0 )
+	{
+		if( gSG_UI_Callback )
+		{
+			CSG_UI_Parameter	p1(Text), p2;
+
+			gSG_UI_Callback(CALLBACK_PROCESS_SET_TEXT, p1, p2);
+		}
+		else
+		{
+			SG_PRINTF(SG_T("\n%s"), Text);
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool		SG_UI_Stop_Execution(bool bDialog)
+{
+	if( gSG_UI_Callback )
+	{
+		CSG_UI_Parameter	p1(bDialog), p2;
+
+		return( gSG_UI_Callback(CALLBACK_STOP_EXECUTION, p1, p2) != 0 );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void		SG_UI_Dlg_Message(const SG_Char *Message, const SG_Char *Caption)
+{
+	if( gSG_UI_Callback )
+	{
+		CSG_UI_Parameter	p1(Message), p2(Caption);
+
+		gSG_UI_Callback(CALLBACK_DLG_MESSAGE, p1, p2);
+	}
+	else
+	{
+		SG_PRINTF(SG_T("\n%s: %s"), Caption, Message);
+	}
+}
+
+//---------------------------------------------------------
+bool		SG_UI_Dlg_Continue(const SG_Char *Message, const SG_Char *Caption)
+{
+	if( gSG_UI_Callback )
+	{
+		CSG_UI_Parameter	p1(Message), p2(Caption);
+
+		return( gSG_UI_Callback(CALLBACK_DLG_CONTINUE, p1, p2) != 0 );
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+int			SG_UI_Dlg_Error(const SG_Char *Message, const SG_Char *Caption)
+{
+	if( gSG_UI_Callback )
+	{
+		CSG_UI_Parameter	p1(Message), p2(Caption);
+
+		return( gSG_UI_Callback(CALLBACK_DLG_ERROR, p1, p2) );
+	}
+
+	return( 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool		SG_UI_Dlg_Parameters(CSG_Parameters *pParameters, const SG_Char *Caption)
+{
+	if( gSG_UI_Callback && pParameters )
+	{
+		CSG_UI_Parameter	p1(pParameters), p2(Caption);
+
+		return( gSG_UI_Callback(CALLBACK_DLG_PARAMETERS, p1, p2) != 0 );
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int			gSG_UI_Msg_Lock	= 0;
+
+//---------------------------------------------------------
+int			SG_UI_Msg_Lock(bool bOn)
+{
+	if( bOn )
+	{
+		gSG_UI_Msg_Lock++;
+	}
+	else if( gSG_UI_Msg_Lock > 0 )
+	{
+		gSG_UI_Msg_Lock--;
+	}
+
+	return( gSG_UI_Msg_Lock );
+}
+
+//---------------------------------------------------------
+void		SG_UI_Msg_Add(const SG_Char *Message, bool bNewLine, TSG_UI_MSG_STYLE Style)
+{
+	if( gSG_UI_Msg_Lock )
+		return;
+
+	if( gSG_UI_Callback )
+	{
+		int		Parameters[2];
+
+		Parameters[0]	= bNewLine ? 1 : 0;
+		Parameters[1]	= Style;
+
+		CSG_UI_Parameter	p1(Message), p2(Parameters);
+
+		gSG_UI_Callback(CALLBACK_MESSAGE_ADD, p1, p2);
+	}
+	else
+	{
+		SG_PRINTF(SG_T("%s"), Message);
+
+		if( bNewLine )
+		{
+			SG_PRINTF(SG_T("\n\n"));
+		}
+	}
+}
+
+//---------------------------------------------------------
+void		SG_UI_Msg_Add_Error(const SG_Char *Message)
+{
+	if( gSG_UI_Msg_Lock )
+		return;
+
+	if( gSG_UI_Callback )
+	{
+		CSG_UI_Parameter	p1(Message), p2;
+
+		gSG_UI_Callback(CALLBACK_MESSAGE_ADD_ERROR, p1, p2);
+	}
+	else
+	{
+		SG_PRINTF(SG_T("\n%s: %s"), LNG("Error"), Message);
+	}
+}
+
+//---------------------------------------------------------
+void		SG_UI_Msg_Add_Execution(const SG_Char *Message, bool bNewLine, TSG_UI_MSG_STYLE Style)
+{
+	if( gSG_UI_Msg_Lock )
+		return;
+
+	if( gSG_UI_Callback )
+	{
+		int		Parameters[2];
+
+		Parameters[0]	= bNewLine ? 1 : 0;
+		Parameters[1]	= Style;
+
+		CSG_UI_Parameter	p1(Message), p2(Parameters);
+
+		gSG_UI_Callback(CALLBACK_MESSAGE_ADD_EXECUTION, p1, p2);
+	}
+	else
+	{
+		SG_PRINTF(SG_T("%s"), Message);
+
+		if( bNewLine )
+		{
+			SG_PRINTF(SG_T("\n\n"));
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CSG_Data_Object *	SG_UI_DataObject_Find(const SG_Char *File_Name, int Object_Type)
+{
+	if( gSG_UI_Callback && File_Name )
+	{
+		CSG_UI_Parameter	p1(File_Name), p2(Object_Type);
+
+		gSG_UI_Callback(CALLBACK_DATAOBJECT_FIND_BY_FILE, p1, p2);
+
+		return( (class CSG_Data_Object *)p1.Pointer );
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_DataObject_Check(CSG_Data_Object *pDataObject, int Object_Type)
+{
+	if( gSG_UI_Callback && pDataObject )
+	{
+		CSG_UI_Parameter	p1(pDataObject), p2(Object_Type);
+
+		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_CHECK, p1, p2) != 0 );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_DataObject_Add(CSG_Data_Object *pDataObject, int Show)
+{
+	if( gSG_UI_Callback && pDataObject )
+	{
+		CSG_UI_Parameter	p1(pDataObject), p2(Show);
+
+		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_ADD, p1, p2) != 0 );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_DataObject_Update(CSG_Data_Object *pDataObject, int Show, CSG_Parameters *pParameters)
+{
+	CSG_Parameters	Parameters;
+
+	if( gSG_UI_Callback && pDataObject )
+	{
+		CSG_UI_Parameter	p1(pDataObject), p2(pParameters);
+
+		if( gSG_UI_Callback(CALLBACK_DATAOBJECT_UPDATE, p1, p2) != 0 )
+		{
+			if( Show != SG_UI_DATAOBJECT_UPDATE_ONLY )
+			{
+				SG_UI_DataObject_Show(pDataObject, Show);
+			}
+
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_DataObject_Show(CSG_Data_Object *pDataObject, int Show)
+{
+	if( gSG_UI_Callback && pDataObject )
+	{
+		CSG_UI_Parameter	p1(pDataObject), p2(Show);
+
+		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_SHOW, p1, p2) != 0 );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_DataObject_asImage(CSG_Data_Object *pDataObject, CSG_Grid *pGrid)
+{
+	if( gSG_UI_Callback && pDataObject )
+	{
+		CSG_UI_Parameter	p1(pDataObject), p2(pGrid);
+
+		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_ASIMAGE, p1, p2) != 0 );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_DataObject_Colors_Get(CSG_Data_Object *pDataObject, CSG_Colors *pColors)
+{
+	if( gSG_UI_Callback && pDataObject && pColors )
+	{
+		CSG_UI_Parameter	p1(pDataObject), p2(pColors);
+
+		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_COLORS_GET, p1, p2) != 0 );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_DataObject_Colors_Set(CSG_Data_Object *pDataObject, CSG_Colors *pColors)
+{
+	if( gSG_UI_Callback && pDataObject && pColors )
+	{
+		CSG_UI_Parameter	p1(pDataObject), p2(pColors);
+
+		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_COLORS_SET, p1, p2) != 0 );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_DataObject_Params_Get	(CSG_Data_Object *pDataObject, CSG_Parameters *pParameters)
+{
+	if( gSG_UI_Callback && pDataObject && pParameters )
+	{
+		CSG_UI_Parameter	p1(pDataObject), p2(pParameters);
+
+		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_PARAMS_GET, p1, p2) != 0 );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_DataObject_Params_Set	(CSG_Data_Object *pDataObject, CSG_Parameters *pParameters)
+{
+	if( gSG_UI_Callback && pDataObject && pParameters )
+	{
+		CSG_UI_Parameter	p1(pDataObject), p2(pParameters);
+
+		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_PARAMS_SET, p1, p2) != 0 );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool		SG_UI_DataObject_Get_All(class CSG_Parameters *pParameters)
+{
+	if( gSG_UI_Callback && pParameters )
+	{
+		CSG_UI_Parameter	p1(pParameters), p2;
+
+		return( gSG_UI_Callback(CALLBACK_DATAOBJECT_GET_ALL, p1, p2) != 0 );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void *		SG_UI_Get_Window_Main(void)
+{
+	if( gSG_UI_Callback )
+	{
+		CSG_UI_Parameter	p1, p2;
+
+		gSG_UI_Callback(CALLBACK_GUI_GET_WINDOW, p1, p2);
+
+		return( p1.Pointer );
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+CSG_String	SG_UI_Get_Application_Path(void)
+{
+	return( wxStandardPaths::Get().GetExecutablePath().c_str() );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_api/api_core.h b/src/saga_core/saga_api/api_core.h
index 51129a8..8a2c270 100644
--- a/src/saga_core/saga_api/api_core.h
+++ b/src/saga_core/saga_api/api_core.h
@@ -96,7 +96,7 @@
 //---------------------------------------------------------
 #ifndef SWIG
 
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(__BSD__)
 #include <malloc.h>
 #endif
 
@@ -171,6 +171,9 @@ SAGA_API_DLL_EXPORT void *			SG_Calloc			(size_t num, size_t size);
 SAGA_API_DLL_EXPORT void *			SG_Realloc			(void *memblock, size_t size);
 SAGA_API_DLL_EXPORT void			SG_Free				(void *memblock);
 
+#define SG_FREE_SAFE(PTR)			{ if( PTR ) { SG_Free(PTR); PTR = NULL; } }
+
+//---------------------------------------------------------
 SAGA_API_DLL_EXPORT void			SG_Swap_Bytes		(void *Buffer, int nBytes);
 
 SAGA_API_DLL_EXPORT int				SG_Mem_Get_Int		(const char *Buffer			, bool bSwapBytes);
@@ -235,32 +238,33 @@ public:
 	const char *					b_str				(void);
 #endif
 
-	size_t							Length				(void)	const;
+	size_t							Length				(void)								const;
 
 	void							Clear				(void);
 	static CSG_String				Format				(const SG_Char *Format, ...);
 	int								Printf				(const SG_Char *Format, ...);
 	int								Scanf				(const SG_Char *Format, ...);
 
-	CSG_String &					Append				(const SG_Char *String);
+	CSG_String &					Append				(const SG_Char    *String);
 	CSG_String &					Append				(SG_Char Character);
 
 	CSG_String &					operator =			(const CSG_String &String);
-	CSG_String &					operator =			(const SG_Char *String);
+	CSG_String &					operator =			(const SG_Char    *String);
 	CSG_String &					operator =			(SG_Char Character);
 
-	CSG_String						operator +			(const CSG_String &String)		const;
-	CSG_String						operator +			(const SG_Char *String)			const;
-	CSG_String						operator +			(SG_Char Character)				const;
+	CSG_String						operator +			(const CSG_String &String)			const;
+	CSG_String						operator +			(const SG_Char    *String)			const;
+	CSG_String						operator +			(SG_Char Character)					const;
 
 	void							operator +=			(const CSG_String &String);
-	void							operator +=			(const SG_Char *String);
+	void							operator +=			(const SG_Char    *String);
 	void							operator +=			(SG_Char Character);
 
 	SG_Char &						operator []			(int i);
+	SG_Char							operator []			(int i)								const;
 
-	int								Cmp					(const SG_Char *String)			const;
-	int								CmpNoCase			(const SG_Char *String)			const;
+	int								Cmp					(const CSG_String &String)			const;
+	int								CmpNoCase			(const CSG_String &String)			const;
 
 	CSG_String &					Make_Lower			(void);
 	CSG_String &					Make_Upper			(void);
@@ -272,23 +276,23 @@ public:
 
 	int								Trim				(bool fromRight = false);
 
-	int								Find				(SG_Char Character, bool fromEnd = false);
-	int								Find				(const SG_Char *String);
-	bool							Contains			(const SG_Char *String);
+	int								Find				(SG_Char Character, bool fromEnd = false)	const;
+	int								Find				(const SG_Char *String)				const;
+	bool							Contains			(const SG_Char *String)				const;
 
-	CSG_String						AfterFirst			(SG_Char Character)				const;
-	CSG_String						AfterLast			(SG_Char Character)				const;
-	CSG_String						BeforeFirst			(SG_Char Character)				const;
-	CSG_String						BeforeLast			(SG_Char Character)				const;
+	CSG_String						AfterFirst			(SG_Char Character)					const;
+	CSG_String						AfterLast			(SG_Char Character)					const;
+	CSG_String						BeforeFirst			(SG_Char Character)					const;
+	CSG_String						BeforeLast			(SG_Char Character)					const;
 
-	CSG_String						Right				(size_t count)					const;
-	CSG_String						Mid					(size_t first, size_t count = 0)const;
-	CSG_String						Left				(size_t count) const;
+	CSG_String						Right				(size_t count)						const;
+	CSG_String						Mid					(size_t first, size_t count = 0)	const;
+	CSG_String						Left				(size_t count)						const;
 
-	int								asInt				(void)							const;
-	bool							asInt				(int &Value)					const;
-	double							asDouble			(void)							const;
-	bool							asDouble			(double &Value)					const;
+	int								asInt				(void)								const;
+	bool							asInt				(int    &Value)						const;
+	double							asDouble			(void)								const;
+	bool							asDouble			(double &Value)						const;
 
 
 protected:
@@ -389,15 +393,23 @@ public:
 	void				Destroy			(void);
 
 	bool				Set_Growth		(TSG_Array_Growth Growth);
-	int					Get_Growth		(void)	const		{	return( m_Growth );		}
+	int					Get_Growth		(void)	const			{	return( m_Growth );		}
+
+	size_t				Get_Size		(void)	const			{	return( m_nValues );	}
+
+	void *				Get_Entry		(size_t Index)	const	{	return( Index >= 0 && Index < m_nValues ? (char *)m_Values + Index * m_Value_Size : NULL );		}
+
+	void *				Get_Array		(void)	const			{	return( m_Values );		}
+	void *				Get_Array		(size_t nValues)		{	Set_Array(nValues);	return( m_Values );	}
 
-	size_t				Get_Size		(void)	const		{	return( m_nValues );	}
+	bool				Set_Array		(size_t nValues, bool bShrink = true);
+	bool				Set_Array		(size_t nValues, void **pArray, bool bShrink = true);
 
-	void *				Get_Array		(void)	const		{	return( m_Values );		}
-	void *				Get_Array		(size_t nValues)	{	Set_Array(nValues);	return( m_Values );	}
+	bool				Inc_Array		(void);
+	bool				Inc_Array		(void **pArray);
 
-	bool				Set_Array		(size_t nValues);
-	bool				Set_Array		(size_t nValues, void **pArray);
+	bool				Dec_Array		(bool bShrink = true);
+	bool				Dec_Array		(void **pArray, bool bShrink = true);
 
 
 private:
@@ -440,11 +452,11 @@ public:
 	char *				Get_Data		(int Offset = 0)	const	{	return( m_pData + Offset );		}
 	char				operator []		(int Position)		const	{	return( m_pData[Position] );	}
 
-	void				Add_Value		(char   Value, bool bBigEndian = false)	{	if( Inc_Size(sizeof(Value)) ) Set_Value(m_Size - sizeof(Value), Value, bBigEndian);	}
-	void				Add_Value		(short  Value, bool bBigEndian = false)	{	if( Inc_Size(sizeof(Value)) ) Set_Value(m_Size - sizeof(Value), Value, bBigEndian);	}
-	void				Add_Value		(int    Value, bool bBigEndian = false)	{	if( Inc_Size(sizeof(Value)) ) Set_Value(m_Size - sizeof(Value), Value, bBigEndian);	}
-	void				Add_Value		(float  Value, bool bBigEndian = false)	{	if( Inc_Size(sizeof(Value)) ) Set_Value(m_Size - sizeof(Value), Value, bBigEndian);	}
-	void				Add_Value		(double Value, bool bBigEndian = false)	{	if( Inc_Size(sizeof(Value)) ) Set_Value(m_Size - sizeof(Value), Value, bBigEndian);	}
+	void				Add_Value		(char   Value, bool bBigEndian = false)	{	if( Inc_Size(sizeof(Value)) ) Set_Value((int)m_Size - sizeof(Value), Value, bBigEndian);	}
+	void				Add_Value		(short  Value, bool bBigEndian = false)	{	if( Inc_Size(sizeof(Value)) ) Set_Value((int)m_Size - sizeof(Value), Value, bBigEndian);	}
+	void				Add_Value		(int    Value, bool bBigEndian = false)	{	if( Inc_Size(sizeof(Value)) ) Set_Value((int)m_Size - sizeof(Value), Value, bBigEndian);	}
+	void				Add_Value		(float  Value, bool bBigEndian = false)	{	if( Inc_Size(sizeof(Value)) ) Set_Value((int)m_Size - sizeof(Value), Value, bBigEndian);	}
+	void				Add_Value		(double Value, bool bBigEndian = false)	{	if( Inc_Size(sizeof(Value)) ) Set_Value((int)m_Size - sizeof(Value), Value, bBigEndian);	}
 
 	CSG_Buffer &		operator +=		(char   Value)				{	Add_Value(Value);	return( *this );	}
 	CSG_Buffer &		operator +=		(short  Value)				{	Add_Value(Value);	return( *this );	}
@@ -871,8 +883,8 @@ SAGA_API_DLL_EXPORT CSG_String		SG_File_Get_Name		(const SG_Char *full_Path, boo
 SAGA_API_DLL_EXPORT CSG_String		SG_File_Get_Path		(const SG_Char *full_Path);
 SAGA_API_DLL_EXPORT CSG_String		SG_File_Make_Path		(const SG_Char *Directory, const SG_Char *Name, const SG_Char *Extension = NULL);
 SAGA_API_DLL_EXPORT bool			SG_File_Cmp_Extension	(const SG_Char *File_Name, const SG_Char *Extension);
-SAGA_API_DLL_EXPORT bool			SG_File_Set_Extension	(const SG_Char *File_Name, const SG_Char *Extension);
 SAGA_API_DLL_EXPORT CSG_String		SG_File_Get_Extension	(const SG_Char *File_Name);
+SAGA_API_DLL_EXPORT bool			SG_File_Set_Extension	(CSG_String    &File_Name, const SG_Char *Extension);
 
 SAGA_API_DLL_EXPORT bool			SG_Read_Line			(FILE *Stream, CSG_String &Line);
 
@@ -1015,19 +1027,24 @@ class SAGA_API_DLL_EXPORT CSG_Translator
 {
 public:
 	CSG_Translator(void);
-	CSG_Translator(const CSG_String &File_Name, bool bSetExtension = true);
-
 	virtual ~CSG_Translator(void);
 
-	bool							Create					(const CSG_String &File_Name, bool bSetExtension = true);
+									CSG_Translator			(const CSG_String &File_Name, bool bSetExtension = true, int iText = 0, int iTranslation = 1, bool bCmpNoCase = false);
+	bool							Create					(const CSG_String &File_Name, bool bSetExtension = true, int iText = 0, int iTranslation = 1, bool bCmpNoCase = false);
+
+									CSG_Translator			(class CSG_Table *pTranslations, int iText = 0, int iTranslation = 1, bool bCmpNoCase = false);
+	bool							Create					(class CSG_Table *pTranslations, int iText = 0, int iTranslation = 1, bool bCmpNoCase = false);
+
 	void							Destroy					(void);
 
-	int								Get_Count				(void)	{	return( m_nTranslations );	}
+	bool							is_CaseSensitive		(void)		const	{	return( !m_bCmpNoCase );	}
 
-	const SG_Char *					Get_Text				(int Index);
-	const SG_Char *					Get_Translation			(int Index);
+	int								Get_Count				(void)		const	{	return( m_nTranslations );	}
+	const SG_Char *					Get_Text				(int i)		const	{	return( i >= 0 && i < m_nTranslations ? m_Translations[i]->m_Text        : SG_T("") );	}
+	const SG_Char *					Get_Translation			(int i)		const	{	return( i >= 0 && i < m_nTranslations ? m_Translations[i]->m_Translation : SG_T("") );	}
 
-	const SG_Char *					Get_Translation			(const SG_Char *Text);
+	const SG_Char *					Get_Translation			(const SG_Char *Text, bool bReturnNullOnNotFound = false)	const;
+	bool							Get_Translation			(const SG_Char *Text, CSG_String &Translation)				const;
 
 
 private:
@@ -1047,12 +1064,14 @@ private:
 
 private:
 
+	bool							m_bCmpNoCase;
+
 	int								m_nTranslations;
 
 	CSG_Translation					**m_Translations;
 
 
-	int								_Get_Index				(const SG_Char *Text);
+	int								_Get_Index				(const SG_Char *Text)	const;
 
 };
 
@@ -1141,7 +1160,26 @@ typedef enum ESG_UI_Callback_ID
 TSG_UI_Callback_ID;
 
 //---------------------------------------------------------
-typedef int (* TSG_PFNC_UI_Callback) (TSG_UI_Callback_ID ID, long pParam_1, long pParam_2);
+class SAGA_API_DLL_EXPORT CSG_UI_Parameter
+{
+public:
+	CSG_UI_Parameter(void)					: True(false), Number( 0.0 ), Pointer(NULL)				{}
+	CSG_UI_Parameter(bool           Value)	: True(Value), Number( 0.0 ), Pointer(NULL)				{}
+	CSG_UI_Parameter(int            Value)	: True(false), Number(Value), Pointer(NULL)				{}
+	CSG_UI_Parameter(double         Value)	: True(false), Number(Value), Pointer(NULL)				{}
+	CSG_UI_Parameter(const SG_Char *Value)	: True(false), Number( 0.0 ), Pointer((void *)Value)	{}
+	CSG_UI_Parameter(void          *Value)	: True(false), Number( 0.0 ), Pointer(        Value)	{}
+	CSG_UI_Parameter(const CSG_UI_Parameter &Copy);
+
+	bool	True;
+
+	double	Number;
+
+	void	*Pointer;
+};
+
+//---------------------------------------------------------
+typedef int (* TSG_PFNC_UI_Callback) (TSG_UI_Callback_ID ID, CSG_UI_Parameter &Param_1, CSG_UI_Parameter &Param_2);
 
 //---------------------------------------------------------
 SAGA_API_DLL_EXPORT bool					SG_Set_UI_Callback			(TSG_PFNC_UI_Callback Function);
@@ -1155,7 +1193,7 @@ SAGA_API_DLL_EXPORT bool					SG_UI_Process_Set_Progress	(double Position, double
 SAGA_API_DLL_EXPORT bool					SG_UI_Process_Set_Ready		(void);
 SAGA_API_DLL_EXPORT void					SG_UI_Process_Set_Text		(const SG_Char *Text);
 
-SAGA_API_DLL_EXPORT bool					SG_UI_Stop_Execution		(void);
+SAGA_API_DLL_EXPORT bool					SG_UI_Stop_Execution		(bool bDialog);
 
 SAGA_API_DLL_EXPORT void					SG_UI_Dlg_Message			(const SG_Char *Message, const SG_Char *Caption);
 SAGA_API_DLL_EXPORT bool					SG_UI_Dlg_Continue			(const SG_Char *Message, const SG_Char *Caption);
diff --git a/src/saga_core/saga_api/api_file.cpp b/src/saga_core/saga_api/api_file.cpp
index 64ed51d..93a48a7 100644
--- a/src/saga_core/saga_api/api_file.cpp
+++ b/src/saga_core/saga_api/api_file.cpp
@@ -550,14 +550,16 @@ bool			SG_File_Cmp_Extension(const SG_Char *File_Name, const SG_Char *Extension)
 }
 
 //---------------------------------------------------------
-bool			SG_File_Set_Extension(const SG_Char *File_Name, const SG_Char *Extension)
+bool			SG_File_Set_Extension(CSG_String &File_Name, const SG_Char *Extension)
 {
 	if( File_Name && *File_Name && Extension && *Extension )
 	{
-		wxFileName	fn(File_Name);
+		wxFileName	fn(File_Name.c_str());
 
 		fn.SetExt(Extension);
 
+		File_Name	= fn.GetFullPath().c_str();
+
 		return( true );
 	}
 
diff --git a/src/saga_core/saga_api/api_memory.cpp b/src/saga_core/saga_api/api_memory.cpp
index 2ca7154..5cf76ac 100644
--- a/src/saga_core/saga_api/api_memory.cpp
+++ b/src/saga_core/saga_api/api_memory.cpp
@@ -1,788 +1,832 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    api_memory.cpp                     //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "api_core.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-#ifndef _WINDOWS_
-
-//---------------------------------------------------------
-void *		SG_Malloc(size_t size)
-{
-	return( malloc(size) );
-}
-
-//---------------------------------------------------------
-void *		SG_Calloc(size_t num, size_t size)
-{
-	return( calloc(num, size) );
-}
-
-//---------------------------------------------------------
-void *		SG_Realloc(void *memblock, size_t new_size)
-{
-	return( realloc(memblock, new_size) );
-}
-
-//---------------------------------------------------------
-void		SG_Free(void *memblock)
-{
-	if( memblock )
-	{
-		free(memblock);
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-// Due to a bad 'feature' in the realloc routine of MS's
-// MSVCRT (C-Runtime-Library), we recommend to use our own
-// memory allocation routines...
-
-#else	// ifndef _WINDOWS_
-
-void *		SG_Malloc(size_t size)
-{
-	return( HeapAlloc(GetProcessHeap(), 0, size) );
-}
-
-void *		SG_Calloc(size_t num, size_t size)
-{
-	return( HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, num * size) );
-}
-
-void *		SG_Realloc(void *memblock, size_t new_size)
-{
-	if( new_size > 0 )
-	{
-		if( memblock )
-		{
-			return( HeapReAlloc(GetProcessHeap(), 0, memblock, new_size) );
-		}
-		else
-		{
-			return( HeapAlloc(GetProcessHeap(), 0, new_size) );
-		}
-	}
-	else
-	{
-		SG_Free(memblock);
-
-		return( NULL );
-	}
-}
-
-void		SG_Free(void *memblock)
-{
-	if( memblock )
-	{
-		HeapFree(GetProcessHeap(), 0, memblock);
-	}
-}
-
-#endif	// ifndef _WINDOWS_
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void			SG_Swap_Bytes(void *Buffer, int nBytes)
-{
-	char	Byte, *pA, *pB;
-
-	pA	= (char *)Buffer;
-	pB	= pA + nBytes - 1;
-
-	while( pA < pB )
-	{
-		Byte	= *pA;
-		*(pA++)	= *pB;
-		*(pB--)	= Byte;
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int				SG_Mem_Get_Int(const char *Buffer, bool bSwapBytes)
-{
-	int		Value	= *(int *)Buffer;
-
-	if( bSwapBytes )
-	{
-		SG_Swap_Bytes(&Value, sizeof(Value));
-	}
-
-	return( Value );
-}
-
-void			SG_Mem_Set_Int(char *Buffer, int Value, bool bSwapBytes)
-{
-	if( bSwapBytes )
-	{
-		SG_Swap_Bytes(&Value, sizeof(Value));
-	}
-
-	*((int *)Buffer)	= Value;
-}
-
-//---------------------------------------------------------
-double			SG_Mem_Get_Double(const char *Buffer, bool bSwapBytes)
-{
-	double	Value	= *(double *)Buffer;
-
-	if( bSwapBytes )
-	{
-		SG_Swap_Bytes(&Value, sizeof(Value));
-	}
-
-	return( Value );
-}
-
-void			SG_Mem_Set_Double(char *Buffer, double Value, bool bSwapBytes)
-{
-	if( bSwapBytes )
-	{
-		SG_Swap_Bytes(&Value, sizeof(Value));
-	}
-
-	*(double *)Buffer	= Value;
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Array::CSG_Array(void)
-{
-	m_Value_Size	= sizeof(char);
-	m_Growth		= SG_ARRAY_GROWTH_0;
-
-	m_nBuffer		= 0;
-	m_nValues		= 0;
-	m_Values		= NULL;
-}
-
-//---------------------------------------------------------
-CSG_Array::CSG_Array(size_t Value_Size, size_t nValues, TSG_Array_Growth Growth)
-{
-	Create(Value_Size, nValues, Growth);
-}
-
-void * CSG_Array::Create(size_t Value_Size, size_t nValues, TSG_Array_Growth Growth)
-{
-	m_Value_Size	= Value_Size;
-	m_Growth		= Growth;
-
-	m_nBuffer		= 0;
-	m_nValues		= 0;
-	m_Values		= NULL;
-
-	return( Get_Array(nValues) );
-}
-
-//---------------------------------------------------------
-CSG_Array::~CSG_Array(void)
-{
-	Destroy();
-}
-
-void CSG_Array::Destroy(void)
-{
-	if( m_Values )
-	{
-		SG_Free(m_Values);
-	}
-
-	m_nBuffer		= 0;
-	m_nValues		= 0;
-	m_Values		= NULL;
-}
-
-//---------------------------------------------------------
-bool CSG_Array::Set_Growth(TSG_Array_Growth Growth)
-{
-	m_Growth		= Growth;
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CSG_Array::Set_Array(size_t nValues)
-{
-	if( nValues >= m_nValues && nValues <= m_nBuffer )
-	{
-		m_nValues	= nValues;
-
-		return( true );
-	}
-
-	if( nValues == 0 )
-	{
-		Destroy();
-
-		return( true );
-	}
-
-	//-----------------------------------------------------
-	size_t	nBuffer;
-
-	switch( m_Growth )
-	{
-	default:
-	case SG_ARRAY_GROWTH_0:
-		nBuffer	= nValues;
-		break;
-
-	case SG_ARRAY_GROWTH_1:
-	case SG_ARRAY_GROWTH_2:
-	case SG_ARRAY_GROWTH_3:
-		nBuffer	= nValues <  256 ? nValues
-				: nValues < 8192 ? (1 + nValues /  256) *  256
-				:                  (1 + nValues / 1024) * 1024;
-		break;
-	}
-
-	//-----------------------------------------------------
-	if( nBuffer == m_nBuffer )
-	{
-		m_nValues	= nValues;
-
-		return( true );
-	}
-
-	//-----------------------------------------------------
-	void	*Values	= SG_Realloc(m_Values, nBuffer * m_Value_Size);
-
-	if( Values )
-	{
-		m_nBuffer	= nBuffer;
-		m_nValues	= nValues;
-		m_Values	= Values;
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Array::Set_Array(size_t nValues, void **pArray)
-{
-	if( Set_Array(nValues) )
-	{
-		*pArray	= m_Values;
-
-		return( true );
-	}
-
-	*pArray	= m_Values;
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Buffer::CSG_Buffer(void)
-{
-	m_pData	= NULL;
-	m_Size	= 0;
-}
-
-bool CSG_Buffer::Create(void)
-{
-	Destroy();
-
-	return( true );
-}
-
-//---------------------------------------------------------
-CSG_Buffer::CSG_Buffer(const CSG_Buffer &Buffer)
-{
-	m_pData	= NULL;
-	m_Size	= 0;
-
-	Create(Buffer);
-}
-
-bool CSG_Buffer::Create(const CSG_Buffer &Buffer)
-{
-	return( Set_Data(Buffer.m_pData, Buffer.m_Size) );
-}
-
-//---------------------------------------------------------
-CSG_Buffer::CSG_Buffer(size_t Size)
-{
-	m_pData	= NULL;
-	m_Size	= 0;
-
-	Create(Size);
-}
-
-bool CSG_Buffer::Create(size_t Size)
-{
-	return( Set_Size(Size) );
-}
-
-//---------------------------------------------------------
-CSG_Buffer::~CSG_Buffer(void)
-{
-	Destroy();
-}
-
-void CSG_Buffer::Destroy(void)
-{
-	if( m_pData )
-	{
-		SG_Free(m_pData);
-	}
-
-	m_pData	= NULL;
-	m_Size	= 0;
-}
-
-//---------------------------------------------------------
-bool CSG_Buffer::Set_Size(size_t Size, bool bShrink)
-{
-	if( Size > m_Size || (Size < m_Size && bShrink) )
-	{
-		char	*pData	= (char *)SG_Realloc(m_pData, Size * sizeof(char));
-
-		if( !pData )
-		{
-			return( false );
-		}
-
-		m_pData	= pData;
-		m_Size	= Size;
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CSG_Buffer::Set_Data(const char *Buffer, size_t Size, bool bShrink)
-{
-	if( !Buffer || !Size || !Set_Size(Size, bShrink) )
-	{
-		return( false );
-	}
-
-	memcpy(m_pData, Buffer, m_Size);
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Bytes::CSG_Bytes(void)
-{
-	m_Bytes		= NULL;
-	m_nBytes	= 0;
-	m_nBuffer	= 0;
-	m_Cursor	= 0;
-}
-
-//---------------------------------------------------------
-bool CSG_Bytes::Create(void)
-{
-	return( Destroy() );
-}
-
-//---------------------------------------------------------
-CSG_Bytes::CSG_Bytes(const CSG_Bytes &Bytes)
-{
-	m_Bytes		= NULL;
-	m_nBytes	= 0;
-	m_nBuffer	= 0;
-	m_Cursor	= 0;
-
-	Create(Bytes);
-}
-
-bool CSG_Bytes::Create(const CSG_Bytes &Bytes)
-{
-	return( Assign(Bytes) );
-}
-
-//---------------------------------------------------------
-CSG_Bytes::CSG_Bytes(const BYTE *Bytes, int nBytes)
-{
-	m_Bytes		= NULL;
-	m_nBytes	= 0;
-	m_nBuffer	= 0;
-	m_Cursor	= 0;
-
-	Create(Bytes, nBytes);
-}
-
-bool CSG_Bytes::Create(const BYTE *Bytes, int nBytes)
-{
-	Destroy();
-
-	return( Add((void *)Bytes, nBytes, false) );
-}
-
-//---------------------------------------------------------
-CSG_Bytes::CSG_Bytes(const SG_Char *Bytes)
-{
-	m_Bytes		= NULL;
-	m_nBytes	= 0;
-	m_nBuffer	= 0;
-	m_Cursor	= 0;
-
-	Create(Bytes);
-}
-
-bool CSG_Bytes::Create(const SG_Char *Bytes)
-{
-	Destroy();
-
-	if( Bytes == NULL )	// Reset
-	{
-		return( true );
-	}
-
-#ifndef _SAGA_UNICODE
-	int	nBytes	= SG_STR_LEN(Bytes);
-#else
-	int	nBytes	= SG_STR_LEN(Bytes) * 2;
-#endif
-
-	return( Add((void *)Bytes, nBytes, false) );
-}
-
-//---------------------------------------------------------
-CSG_Bytes::~CSG_Bytes(void)
-{
-	Destroy();
-}
-
-bool CSG_Bytes::Destroy(void)
-{
-	if( m_Bytes )
-	{
-		SG_Free(m_Bytes);
-	}
-
-	m_Bytes		= NULL;
-	m_nBytes	= 0;
-	m_nBuffer	= 0;
-	m_Cursor	= 0;
-
-	return( true );
-}
-
-bool CSG_Bytes::Clear(void)
-{
-	m_nBytes	= 0;
-	m_Cursor	= 0;
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Bytes::_Inc_Array(int nBytes)
-{
-	if( m_nBuffer < m_nBytes + nBytes )
-	{
-		int		nBuffer	= m_nBuffer + nBytes + 1024;
-		BYTE	*Bytes	= (BYTE *)SG_Realloc(m_Bytes, nBuffer * sizeof(BYTE));
-
-		if( !Bytes )
-		{
-			return( false );
-		}
-
-		m_Bytes		= Bytes;
-		m_nBuffer	= nBuffer;
-	}
-
-	m_nBytes	+= nBytes;
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Bytes::Assign(const CSG_Bytes &Bytes)
-{
-	Destroy();
-
-	if( _Inc_Array(Bytes.m_nBytes) )
-	{
-		memcpy(m_Bytes, Bytes.m_Bytes, m_nBytes);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Bytes::Add(const CSG_Bytes &Bytes)
-{
-	return( Add(Bytes.m_Bytes, Bytes.m_nBytes, false) );
-}
-
-//---------------------------------------------------------
-bool CSG_Bytes::Add(void *Bytes, int nBytes, bool bSwapBytes)
-{
-	int		Offset	= m_nBytes;
-
-	if( _Inc_Array(nBytes) )
-	{
-		memcpy(m_Bytes + Offset, Bytes, nBytes);
-
-		if( bSwapBytes )
-		{
-			SG_Swap_Bytes(m_Bytes + Offset, nBytes);
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-BYTE	SG_Hex_to_Byte	(const SG_Char Hex)
-{
-	switch( Hex )
-	{
-	case '1':				return(  1 );
-	case '2':				return(  2 );
-	case '3':				return(  3 );
-	case '4':				return(  4 );
-	case '5':				return(  5 );
-	case '6':				return(  6 );
-	case '7':				return(  7 );
-	case '8':				return(  8 );
-	case '9':				return(  9 );
-	case 'a':	case 'A':	return( 10 );
-	case 'b':	case 'B':	return( 11 );
-	case 'c':	case 'C':	return( 12 );
-	case 'd':	case 'D':	return( 13 );
-	case 'e':	case 'E':	return( 14 );
-	case 'f':	case 'F':	return( 15 );
-	}
-
-	return( 0 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_String CSG_Bytes::toHexString(void) const
-{
-	CSG_String	HexString;
-
-	for(int i=0; i<m_nBytes; i++)
-	{
-		HexString	+= CSG_String::Format(SG_T("%02X"), m_Bytes[i]);
-	}
-
-	return( HexString );
-}
-
-//---------------------------------------------------------
-bool CSG_Bytes::fromHexString(const CSG_String &HexString)
-{
-	Destroy();
-
-	const SG_Char	*s	= HexString.c_str();
-
-	for(size_t i=0; i<HexString.Length(); i+=2)
-	{
-		Add(SG_Hex_to_Byte(*(s++)) + 16 * SG_Hex_to_Byte(*(s++)));
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Bytes_Array::CSG_Bytes_Array(void)
-{
-	m_pBytes	= NULL;
-	m_nBytes	= 0;
-	m_nBuffer	= 0;
-}
-
-//---------------------------------------------------------
-CSG_Bytes_Array::~CSG_Bytes_Array(void)
-{
-	Destroy();
-}
-
-//---------------------------------------------------------
-bool CSG_Bytes_Array::Destroy(void)
-{
-	if( m_pBytes )
-	{
-		for(int i=0; i<m_nBytes; i++)
-		{
-			delete(m_pBytes[i]);
-		}
-
-		SG_Free(m_pBytes);
-	}
-
-	m_pBytes	= NULL;
-	m_nBytes	= 0;
-	m_nBuffer	= 0;
-
-	return( true );
-}
-
-//---------------------------------------------------------
-CSG_Bytes * CSG_Bytes_Array::Add(void)
-{
-	if( m_nBytes >= m_nBuffer )
-	{
-		CSG_Bytes	**pBytes	= (CSG_Bytes **)SG_Realloc(m_pBytes, (m_nBuffer + 256) * sizeof(CSG_Bytes *));
-
-		if( !pBytes )
-		{
-			return( NULL );
-		}
-
-		m_pBytes	 = pBytes;
-		m_nBuffer	+= 256;
-	}
-
-	return( m_pBytes[m_nBytes++] = new CSG_Bytes );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//           Application Programming Interface           //
+//                                                       //
+//                  Library: SAGA_API                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    api_memory.cpp                     //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "api_core.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+#ifndef _WINDOWS_
+
+//---------------------------------------------------------
+void *		SG_Malloc(size_t size)
+{
+	return( malloc(size) );
+}
+
+//---------------------------------------------------------
+void *		SG_Calloc(size_t num, size_t size)
+{
+	return( calloc(num, size) );
+}
+
+//---------------------------------------------------------
+void *		SG_Realloc(void *memblock, size_t new_size)
+{
+	return( realloc(memblock, new_size) );
+}
+
+//---------------------------------------------------------
+void		SG_Free(void *memblock)
+{
+	if( memblock )
+	{
+		free(memblock);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+// Due to a bad 'feature' in the realloc routine of MS's
+// MSVCRT (C-Runtime-Library), we recommend to use our own
+// memory allocation routines...
+
+#else	// ifndef _WINDOWS_
+
+void *		SG_Malloc(size_t size)
+{
+	return( HeapAlloc(GetProcessHeap(), 0, size) );
+}
+
+void *		SG_Calloc(size_t num, size_t size)
+{
+	return( HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, num * size) );
+}
+
+void *		SG_Realloc(void *memblock, size_t new_size)
+{
+	if( new_size > 0 )
+	{
+		if( memblock )
+		{
+			return( HeapReAlloc(GetProcessHeap(), 0, memblock, new_size) );
+		}
+		else
+		{
+			return( HeapAlloc(GetProcessHeap(), 0, new_size) );
+		}
+	}
+	else
+	{
+		SG_Free(memblock);
+
+		return( NULL );
+	}
+}
+
+void		SG_Free(void *memblock)
+{
+	if( memblock )
+	{
+		HeapFree(GetProcessHeap(), 0, memblock);
+	}
+}
+
+#endif	// ifndef _WINDOWS_
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void			SG_Swap_Bytes(void *Buffer, int nBytes)
+{
+	char	Byte, *pA, *pB;
+
+	pA	= (char *)Buffer;
+	pB	= pA + nBytes - 1;
+
+	while( pA < pB )
+	{
+		Byte	= *pA;
+		*(pA++)	= *pB;
+		*(pB--)	= Byte;
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int				SG_Mem_Get_Int(const char *Buffer, bool bSwapBytes)
+{
+	int		Value	= *(int *)Buffer;
+
+	if( bSwapBytes )
+	{
+		SG_Swap_Bytes(&Value, sizeof(Value));
+	}
+
+	return( Value );
+}
+
+void			SG_Mem_Set_Int(char *Buffer, int Value, bool bSwapBytes)
+{
+	if( bSwapBytes )
+	{
+		SG_Swap_Bytes(&Value, sizeof(Value));
+	}
+
+	*((int *)Buffer)	= Value;
+}
+
+//---------------------------------------------------------
+double			SG_Mem_Get_Double(const char *Buffer, bool bSwapBytes)
+{
+	double	Value	= *(double *)Buffer;
+
+	if( bSwapBytes )
+	{
+		SG_Swap_Bytes(&Value, sizeof(Value));
+	}
+
+	return( Value );
+}
+
+void			SG_Mem_Set_Double(char *Buffer, double Value, bool bSwapBytes)
+{
+	if( bSwapBytes )
+	{
+		SG_Swap_Bytes(&Value, sizeof(Value));
+	}
+
+	*(double *)Buffer	= Value;
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Array::CSG_Array(void)
+{
+	m_Value_Size	= sizeof(char);
+	m_Growth		= SG_ARRAY_GROWTH_0;
+
+	m_nBuffer		= 0;
+	m_nValues		= 0;
+	m_Values		= NULL;
+}
+
+//---------------------------------------------------------
+CSG_Array::CSG_Array(size_t Value_Size, size_t nValues, TSG_Array_Growth Growth)
+{
+	Create(Value_Size, nValues, Growth);
+}
+
+void * CSG_Array::Create(size_t Value_Size, size_t nValues, TSG_Array_Growth Growth)
+{
+	m_Value_Size	= Value_Size;
+	m_Growth		= Growth;
+
+	m_nBuffer		= 0;
+	m_nValues		= 0;
+	m_Values		= NULL;
+
+	return( Get_Array(nValues) );
+}
+
+//---------------------------------------------------------
+CSG_Array::~CSG_Array(void)
+{
+	Destroy();
+}
+
+void CSG_Array::Destroy(void)
+{
+	if( m_Values )
+	{
+		SG_Free(m_Values);
+	}
+
+	m_nBuffer		= 0;
+	m_nValues		= 0;
+	m_Values		= NULL;
+}
+
+//---------------------------------------------------------
+bool CSG_Array::Set_Growth(TSG_Array_Growth Growth)
+{
+	m_Growth		= Growth;
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_Array::Set_Array(size_t nValues, bool bShrink)
+{
+	if( nValues >= m_nValues && nValues <= m_nBuffer )
+	{
+		m_nValues	= nValues;
+
+		return( true );
+	}
+
+	if( nValues < m_nValues && !bShrink )
+	{
+		m_nValues	= nValues;
+
+		return( true );
+	}
+
+	if( nValues == 0 )
+	{
+		Destroy();
+
+		return( true );
+	}
+
+	//-----------------------------------------------------
+	size_t	nBuffer;
+
+	switch( m_Growth )
+	{
+	default:
+	case SG_ARRAY_GROWTH_0:
+		nBuffer	= nValues;
+		break;
+
+	case SG_ARRAY_GROWTH_1:
+		nBuffer	= nValues <    100 ?      nValues
+				: nValues <   1000 ? (1 + nValues /    10) *    10
+				: nValues <  10000 ? (1 + nValues /   100) *   100
+				: nValues < 100000 ? (1 + nValues /  1000) *  1000
+				:                    (1 + nValues / 10000) * 10000;
+		break;
+
+	case SG_ARRAY_GROWTH_2:
+		nBuffer	= nValues <     10 ?      nValues
+				: nValues <    100 ? (1 + nValues /    10) *    10
+				: nValues <   1000 ? (1 + nValues /   100) *   100
+				: nValues <  10000 ? (1 + nValues /  1000) *  1000
+				:                    (1 + nValues / 10000) * 10000;
+		break;
+
+	case SG_ARRAY_GROWTH_3:
+		nBuffer	= nValues <    1000 ? (1 + nValues /    1000) *    1000
+				: nValues <   10000 ? (1 + nValues /   10000) *   10000
+				: nValues <  100000 ? (1 + nValues /  100000) *  100000
+				:                     (1 + nValues / 1000000) * 1000000;
+		break;
+	}
+
+	//-----------------------------------------------------
+	if( nBuffer == m_nBuffer )
+	{
+		m_nValues	= nValues;
+
+		return( true );
+	}
+
+	//-----------------------------------------------------
+	void	*Values	= SG_Realloc(m_Values, nBuffer * m_Value_Size);
+
+	if( Values )
+	{
+		m_nBuffer	= nBuffer;
+		m_nValues	= nValues;
+		m_Values	= Values;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Array::Set_Array(size_t nValues, void **pArray, bool bShrink)
+{
+	if( Set_Array(nValues, bShrink) )
+	{
+		*pArray	= m_Values;
+
+		return( true );
+	}
+
+	*pArray	= m_Values;
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Array::Inc_Array		(void)
+{
+	return( Set_Array(m_nValues + 1) );
+}
+
+bool CSG_Array::Inc_Array		(void **pArray)
+{
+	return( Set_Array(m_nValues + 1, pArray) );
+}
+
+//---------------------------------------------------------
+bool CSG_Array::Dec_Array		(bool bShrink)
+{
+	return( m_Values > 0 ? Set_Array(m_nValues - 1, bShrink) : false );
+}
+
+bool CSG_Array::Dec_Array		(void **pArray, bool bShrink)
+{
+	return( m_Values > 0 ? Set_Array(m_nValues - 1, pArray, bShrink) : false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Buffer::CSG_Buffer(void)
+{
+	m_pData	= NULL;
+	m_Size	= 0;
+}
+
+bool CSG_Buffer::Create(void)
+{
+	Destroy();
+
+	return( true );
+}
+
+//---------------------------------------------------------
+CSG_Buffer::CSG_Buffer(const CSG_Buffer &Buffer)
+{
+	m_pData	= NULL;
+	m_Size	= 0;
+
+	Create(Buffer);
+}
+
+bool CSG_Buffer::Create(const CSG_Buffer &Buffer)
+{
+	return( Set_Data(Buffer.m_pData, Buffer.m_Size) );
+}
+
+//---------------------------------------------------------
+CSG_Buffer::CSG_Buffer(size_t Size)
+{
+	m_pData	= NULL;
+	m_Size	= 0;
+
+	Create(Size);
+}
+
+bool CSG_Buffer::Create(size_t Size)
+{
+	return( Set_Size(Size) );
+}
+
+//---------------------------------------------------------
+CSG_Buffer::~CSG_Buffer(void)
+{
+	Destroy();
+}
+
+void CSG_Buffer::Destroy(void)
+{
+	if( m_pData )
+	{
+		SG_Free(m_pData);
+	}
+
+	m_pData	= NULL;
+	m_Size	= 0;
+}
+
+//---------------------------------------------------------
+bool CSG_Buffer::Set_Size(size_t Size, bool bShrink)
+{
+	if( Size > m_Size || (Size < m_Size && bShrink) )
+	{
+		char	*pData	= (char *)SG_Realloc(m_pData, Size * sizeof(char));
+
+		if( !pData )
+		{
+			return( false );
+		}
+
+		m_pData	= pData;
+		m_Size	= Size;
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_Buffer::Set_Data(const char *Buffer, size_t Size, bool bShrink)
+{
+	if( !Buffer || !Size || !Set_Size(Size, bShrink) )
+	{
+		return( false );
+	}
+
+	memcpy(m_pData, Buffer, m_Size);
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Bytes::CSG_Bytes(void)
+{
+	m_Bytes		= NULL;
+	m_nBytes	= 0;
+	m_nBuffer	= 0;
+	m_Cursor	= 0;
+}
+
+//---------------------------------------------------------
+bool CSG_Bytes::Create(void)
+{
+	return( Destroy() );
+}
+
+//---------------------------------------------------------
+CSG_Bytes::CSG_Bytes(const CSG_Bytes &Bytes)
+{
+	m_Bytes		= NULL;
+	m_nBytes	= 0;
+	m_nBuffer	= 0;
+	m_Cursor	= 0;
+
+	Create(Bytes);
+}
+
+bool CSG_Bytes::Create(const CSG_Bytes &Bytes)
+{
+	return( Assign(Bytes) );
+}
+
+//---------------------------------------------------------
+CSG_Bytes::CSG_Bytes(const BYTE *Bytes, int nBytes)
+{
+	m_Bytes		= NULL;
+	m_nBytes	= 0;
+	m_nBuffer	= 0;
+	m_Cursor	= 0;
+
+	Create(Bytes, nBytes);
+}
+
+bool CSG_Bytes::Create(const BYTE *Bytes, int nBytes)
+{
+	Destroy();
+
+	return( Add((void *)Bytes, nBytes, false) );
+}
+
+//---------------------------------------------------------
+CSG_Bytes::CSG_Bytes(const SG_Char *Bytes)
+{
+	m_Bytes		= NULL;
+	m_nBytes	= 0;
+	m_nBuffer	= 0;
+	m_Cursor	= 0;
+
+	Create(Bytes);
+}
+
+bool CSG_Bytes::Create(const SG_Char *Bytes)
+{
+	Destroy();
+
+	if( Bytes == NULL )	// Reset
+	{
+		return( true );
+	}
+
+#ifndef _SAGA_UNICODE
+	int	nBytes	= SG_STR_LEN(Bytes);
+#else
+	int	nBytes	= SG_STR_LEN(Bytes) * 2;
+#endif
+
+	return( Add((void *)Bytes, nBytes, false) );
+}
+
+//---------------------------------------------------------
+CSG_Bytes::~CSG_Bytes(void)
+{
+	Destroy();
+}
+
+bool CSG_Bytes::Destroy(void)
+{
+	if( m_Bytes )
+	{
+		SG_Free(m_Bytes);
+	}
+
+	m_Bytes		= NULL;
+	m_nBytes	= 0;
+	m_nBuffer	= 0;
+	m_Cursor	= 0;
+
+	return( true );
+}
+
+bool CSG_Bytes::Clear(void)
+{
+	m_nBytes	= 0;
+	m_Cursor	= 0;
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Bytes::_Inc_Array(int nBytes)
+{
+	if( m_nBuffer < m_nBytes + nBytes )
+	{
+		int		nBuffer	= m_nBuffer + nBytes + 1024;
+		BYTE	*Bytes	= (BYTE *)SG_Realloc(m_Bytes, nBuffer * sizeof(BYTE));
+
+		if( !Bytes )
+		{
+			return( false );
+		}
+
+		m_Bytes		= Bytes;
+		m_nBuffer	= nBuffer;
+	}
+
+	m_nBytes	+= nBytes;
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Bytes::Assign(const CSG_Bytes &Bytes)
+{
+	Destroy();
+
+	if( _Inc_Array(Bytes.m_nBytes) )
+	{
+		memcpy(m_Bytes, Bytes.m_Bytes, m_nBytes);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Bytes::Add(const CSG_Bytes &Bytes)
+{
+	return( Add(Bytes.m_Bytes, Bytes.m_nBytes, false) );
+}
+
+//---------------------------------------------------------
+bool CSG_Bytes::Add(void *Bytes, int nBytes, bool bSwapBytes)
+{
+	int		Offset	= m_nBytes;
+
+	if( _Inc_Array(nBytes) )
+	{
+		memcpy(m_Bytes + Offset, Bytes, nBytes);
+
+		if( bSwapBytes )
+		{
+			SG_Swap_Bytes(m_Bytes + Offset, nBytes);
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+BYTE	SG_Hex_to_Byte	(const SG_Char Hex)
+{
+	switch( Hex )
+	{
+	case '1':				return(  1 );
+	case '2':				return(  2 );
+	case '3':				return(  3 );
+	case '4':				return(  4 );
+	case '5':				return(  5 );
+	case '6':				return(  6 );
+	case '7':				return(  7 );
+	case '8':				return(  8 );
+	case '9':				return(  9 );
+	case 'a':	case 'A':	return( 10 );
+	case 'b':	case 'B':	return( 11 );
+	case 'c':	case 'C':	return( 12 );
+	case 'd':	case 'D':	return( 13 );
+	case 'e':	case 'E':	return( 14 );
+	case 'f':	case 'F':	return( 15 );
+	}
+
+	return( 0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_String CSG_Bytes::toHexString(void) const
+{
+	CSG_String	HexString;
+
+	for(int i=0; i<m_nBytes; i++)
+	{
+		HexString	+= CSG_String::Format(SG_T("%02X"), m_Bytes[i]);
+	}
+
+	return( HexString );
+}
+
+//---------------------------------------------------------
+bool CSG_Bytes::fromHexString(const CSG_String &HexString)
+{
+	Destroy();
+
+	const SG_Char	*s	= HexString.c_str();
+
+	for(size_t i=0; i<HexString.Length(); i+=2)
+	{
+		Add(SG_Hex_to_Byte(*(s++)) + 16 * SG_Hex_to_Byte(*(s++)));
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Bytes_Array::CSG_Bytes_Array(void)
+{
+	m_pBytes	= NULL;
+	m_nBytes	= 0;
+	m_nBuffer	= 0;
+}
+
+//---------------------------------------------------------
+CSG_Bytes_Array::~CSG_Bytes_Array(void)
+{
+	Destroy();
+}
+
+//---------------------------------------------------------
+bool CSG_Bytes_Array::Destroy(void)
+{
+	if( m_pBytes )
+	{
+		for(int i=0; i<m_nBytes; i++)
+		{
+			delete(m_pBytes[i]);
+		}
+
+		SG_Free(m_pBytes);
+	}
+
+	m_pBytes	= NULL;
+	m_nBytes	= 0;
+	m_nBuffer	= 0;
+
+	return( true );
+}
+
+//---------------------------------------------------------
+CSG_Bytes * CSG_Bytes_Array::Add(void)
+{
+	if( m_nBytes >= m_nBuffer )
+	{
+		CSG_Bytes	**pBytes	= (CSG_Bytes **)SG_Realloc(m_pBytes, (m_nBuffer + 256) * sizeof(CSG_Bytes *));
+
+		if( !pBytes )
+		{
+			return( NULL );
+		}
+
+		m_pBytes	 = pBytes;
+		m_nBuffer	+= 256;
+	}
+
+	return( m_pBytes[m_nBytes++] = new CSG_Bytes );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_api/api_string.cpp b/src/saga_core/saga_api/api_string.cpp
index 7b8142a..6118dfb 100644
--- a/src/saga_core/saga_api/api_string.cpp
+++ b/src/saga_core/saga_api/api_string.cpp
@@ -1,959 +1,964 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    api_string.cpp                     //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <math.h>
-
-#include <wx/string.h>
-#include <wx/datetime.h>
-
-#include "api_core.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define WXCONV			wxConvUTF8
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_String::CSG_String(void)
-{
-	m_pString	= new wxString;
-#ifdef _SAGA_UNICODE
-	m_bString	= NULL;
-#endif
-}
-
-CSG_String::CSG_String(const CSG_String &String)
-{
-	m_pString	= new wxString(*String.m_pString);
-#ifdef _SAGA_UNICODE
-	m_bString	= NULL;
-#endif
-}
-
-CSG_String::CSG_String(const SG_Char *String)
-{
-	m_pString	= new wxString(String);
-#ifdef _SAGA_UNICODE
-	m_bString	= NULL;
-#endif
-}
-
-#ifdef _SAGA_UNICODE
-CSG_String::CSG_String(const char *String)
-{
-	m_pString	= new wxString(WXCONV.cMB2WC(String));
-	m_bString	= NULL;
-}
-#endif
-
-CSG_String::CSG_String(SG_Char Character)
-{
-	m_pString	= new wxString(Character);
-#ifdef _SAGA_UNICODE
-	m_bString	= NULL;
-#endif
-}
-
-//---------------------------------------------------------
-CSG_String::~CSG_String(void)
-{
-	delete(m_pString);
-
-#ifdef _SAGA_UNICODE
-	if( m_bString )
-	{
-		SG_Free(m_bString);
-	}
-#endif
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-const SG_Char * CSG_String::c_str(void) const
-{
-	return( m_pString->c_str() );
-}
-
-//---------------------------------------------------------
-#ifdef _SAGA_UNICODE
-const char * CSG_String::b_str(void)
-{
-	m_bString	= (char *)SG_Realloc(m_bString, (1 + strlen(m_pString->mb_str(WXCONV))) * sizeof(char));
-
-	strcpy(m_bString, m_pString->mb_str(WXCONV));
-
-	return( m_bString );
-}
-#endif
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-size_t CSG_String::Length(void)	const
-{
-	return( m_pString->Length() );
-}
-
-//---------------------------------------------------------
-void CSG_String::Clear(void)
-{
-	m_pString->Clear();
-}
-
-//---------------------------------------------------------
-CSG_String CSG_String::Format(const SG_Char *Format, ...)
-{
-	va_list		argptr;
-	CSG_String	s;
-
-	va_start(argptr, Format);
-
-	s.m_pString->PrintfV(Format, argptr);
-
-	va_end(argptr);
-
-	return( s );
-}
-
-//---------------------------------------------------------
-int CSG_String::Printf(const SG_Char *Format, ...)
-{
-	va_list	argptr;
-
-	va_start(argptr, Format);
-
-	m_pString->PrintfV(Format, argptr);
-
-	va_end(argptr);
-
-	return( Length() );
-}
-
-//---------------------------------------------------------
-int CSG_String::Scanf(const SG_Char *Format, ...)
-{
-	va_list	argptr;
-
-	va_start(argptr, Format);
-
-	int	ret	= SG_Sscanf(m_pString->c_str(), Format, argptr);
-
-	va_end(argptr);
-
-	return( ret );
-}
-
-//---------------------------------------------------------
-CSG_String & CSG_String::Append(const SG_Char *String)
-{
-	m_pString->Append(String);
-
-	return( *this );
-}
-
-CSG_String & CSG_String::Append(SG_Char Character)
-{
-	m_pString->Append(Character);
-
-	return( *this );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_String & CSG_String::operator = (const CSG_String &String)
-{
-	*m_pString	= *String.m_pString;
-
-	return( *this );
-}
-
-CSG_String & CSG_String::operator = (const SG_Char *String)
-{
-	*m_pString	= String;
-
-	return( *this );
-}
-
-CSG_String & CSG_String::operator = (SG_Char Character)
-{
-	*m_pString	= Character;
-
-	return( *this );
-}
-
-//---------------------------------------------------------
-CSG_String CSG_String::operator + (const CSG_String &String) const
-{
-	CSG_String	s(*this);
-
-	s	+= String;
-
-	return( s );
-}
-
-CSG_String CSG_String::operator + (const SG_Char *String) const
-{
-	CSG_String	s(*this);
-
-	s	+= String;
-
-	return( s );
-}
-
-CSG_String CSG_String::operator + (SG_Char Character) const
-{
-	CSG_String	s(*this);
-
-	s	+= Character;
-
-	return( s );
-}
-
-CSG_String		operator + (const SG_Char *A, const CSG_String &B)
-{
-	CSG_String	s(A);
-
-	s	+= B;
-
-	return( s );
-}
-
-CSG_String		operator + (SG_Char A, const CSG_String &B)
-{
-	CSG_String	s(A);
-
-	s	+= B;
-
-	return( s );
-}
-
-//---------------------------------------------------------
-void CSG_String::operator += (const CSG_String &String)
-{
-	*m_pString	+= *String.m_pString;
-}
-
-void CSG_String::operator += (const SG_Char *String)
-{
-	*m_pString	+= String;
-}
-
-void CSG_String::operator += (SG_Char Character)
-{
-	*m_pString	+= Character;
-}
-
-//---------------------------------------------------------
-SG_Char & CSG_String::operator [] (int i)
-{
-	return( m_pString->GetWritableChar(i) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int CSG_String::Cmp(const SG_Char *String)	const
-{
-	return( m_pString->Cmp(String) );
-}
-
-//---------------------------------------------------------
-int CSG_String::CmpNoCase(const SG_Char *String) const
-{
-	return( m_pString->CmpNoCase(String) );
-}
-
-//---------------------------------------------------------
-CSG_String & CSG_String::Make_Lower(void)
-{
-	m_pString->MakeLower();
-
-	return( *this );
-}
-
-//---------------------------------------------------------
-CSG_String & CSG_String::Make_Upper(void)
-{
-	m_pString->MakeUpper();
-
-	return( *this );
-}
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-size_t CSG_String::Replace(const SG_Char *sOld, const SG_Char *sNew, bool replaceAll)
-{
-	return( m_pString->Replace(sOld, sNew, replaceAll) );
-}
-
-//---------------------------------------------------------
-CSG_String & CSG_String::Remove(size_t pos)
-{
-	m_pString->Remove(pos);
-
-	return( *this );
-}
-
-//---------------------------------------------------------
-CSG_String & CSG_String::Remove(size_t pos, size_t len)
-{
-	m_pString->Remove(pos, len);
-
-	return( *this );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int CSG_String::Trim(bool fromRight)
-{
-	int		n	= m_pString->Length();
-
-	m_pString->Trim(fromRight);
-
-	return( n - m_pString->Length() );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int CSG_String::Find(SG_Char Character, bool fromEnd)
-{
-	return( m_pString->Find(Character, fromEnd) );
-}
-
-//---------------------------------------------------------
-int CSG_String::Find(const SG_Char *String)
-{
-	return( m_pString->Find(String) );
-}
-
-//---------------------------------------------------------
-bool CSG_String::Contains(const SG_Char *String)
-{
-	return( m_pString->Contains(String) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_String CSG_String::AfterFirst(SG_Char Character) const
-{
-	return( CSG_String(m_pString->AfterFirst(Character).c_str()) );
-}
-
-//---------------------------------------------------------
-CSG_String CSG_String::AfterLast(SG_Char Character) const
-{
-	return( CSG_String(m_pString->AfterLast(Character).c_str()) );
-}
-
-//---------------------------------------------------------
-CSG_String CSG_String::BeforeFirst(SG_Char Character) const
-{
-	return( CSG_String(m_pString->BeforeFirst(Character).c_str()) );
-}
-
-//---------------------------------------------------------
-CSG_String CSG_String::BeforeLast(SG_Char Character) const
-{
-	return( CSG_String(m_pString->BeforeLast(Character).c_str()) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_String CSG_String::Right(size_t count) const
-{
-	return( CSG_String(m_pString->Right(count).c_str()) );
-}
-
-//---------------------------------------------------------
-CSG_String CSG_String::Mid(size_t first, size_t count) const
-{
-	return( CSG_String(m_pString->Mid(first, count <= 0 ? wxSTRING_MAXLEN : count).c_str()) );
-}
-
-//---------------------------------------------------------
-CSG_String CSG_String::Left(size_t count) const
-{
-	return( CSG_String(m_pString->Left(count).c_str()) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int CSG_String::asInt(void) const
-{
-	int		Value	= 0;
-
-	asInt(Value);
-
-	return( Value );
-
-//	return( asInt(Value) ? Value : 0 );
-}
-
-bool CSG_String::asInt(int &Value) const
-{
-	long	lValue	= 0;
-
-	if( m_pString->ToLong(&lValue) || lValue != 0 )
-	{
-		Value	= (int)lValue;
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-double CSG_String::asDouble(void) const
-{
-	double	Value	= 0.0;
-
-	asDouble(Value);
-
-	return( Value );
-}
-
-bool CSG_String::asDouble(double &Value) const
-{
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//           Application Programming Interface           //
+//                                                       //
+//                  Library: SAGA_API                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    api_string.cpp                     //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <math.h>
+
+#include <wx/string.h>
+#include <wx/datetime.h>
+
+#include "api_core.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define WXCONV			wxConvUTF8
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_String::CSG_String(void)
+{
+	m_pString	= new wxString;
+#ifdef _SAGA_UNICODE
+	m_bString	= NULL;
+#endif
+}
+
+CSG_String::CSG_String(const CSG_String &String)
+{
+	m_pString	= new wxString(*String.m_pString);
+#ifdef _SAGA_UNICODE
+	m_bString	= NULL;
+#endif
+}
+
+CSG_String::CSG_String(const SG_Char *String)
+{
+	m_pString	= new wxString(String);
+#ifdef _SAGA_UNICODE
+	m_bString	= NULL;
+#endif
+}
+
+#ifdef _SAGA_UNICODE
+CSG_String::CSG_String(const char *String)
+{
+	m_pString	= new wxString(WXCONV.cMB2WC(String));
+	m_bString	= NULL;
+}
+#endif
+
+CSG_String::CSG_String(SG_Char Character)
+{
+	m_pString	= new wxString(Character);
+#ifdef _SAGA_UNICODE
+	m_bString	= NULL;
+#endif
+}
+
+//---------------------------------------------------------
+CSG_String::~CSG_String(void)
+{
+	delete(m_pString);
+
+#ifdef _SAGA_UNICODE
+	if( m_bString )
+	{
+		SG_Free(m_bString);
+	}
+#endif
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+const SG_Char * CSG_String::c_str(void) const
+{
+	return( m_pString->c_str() );
+}
+
+//---------------------------------------------------------
+#ifdef _SAGA_UNICODE
+const char * CSG_String::b_str(void)
+{
+	m_bString	= (char *)SG_Realloc(m_bString, (1 + strlen(m_pString->mb_str(WXCONV))) * sizeof(char));
+
+	strcpy(m_bString, m_pString->mb_str(WXCONV));
+
+	return( m_bString );
+}
+#endif
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+size_t CSG_String::Length(void)	const
+{
+	return( m_pString->Length() );
+}
+
+//---------------------------------------------------------
+void CSG_String::Clear(void)
+{
+	m_pString->Clear();
+}
+
+//---------------------------------------------------------
+CSG_String CSG_String::Format(const SG_Char *Format, ...)
+{
+	va_list		argptr;
+	CSG_String	s;
+
+	va_start(argptr, Format);
+
+	s.m_pString->PrintfV(Format, argptr);
+
+	va_end(argptr);
+
+	return( s );
+}
+
+//---------------------------------------------------------
+int CSG_String::Printf(const SG_Char *Format, ...)
+{
+	va_list	argptr;
+
+	va_start(argptr, Format);
+
+	m_pString->PrintfV(Format, argptr);
+
+	va_end(argptr);
+
+	return( Length() );
+}
+
+//---------------------------------------------------------
+int CSG_String::Scanf(const SG_Char *Format, ...)
+{
+	va_list	argptr;
+
+	va_start(argptr, Format);
+
+	int	ret	= SG_Sscanf(m_pString->c_str(), Format, argptr);
+
+	va_end(argptr);
+
+	return( ret );
+}
+
+//---------------------------------------------------------
+CSG_String & CSG_String::Append(const SG_Char *String)
+{
+	m_pString->Append(String);
+
+	return( *this );
+}
+
+CSG_String & CSG_String::Append(SG_Char Character)
+{
+	m_pString->Append(Character);
+
+	return( *this );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_String & CSG_String::operator = (const CSG_String &String)
+{
+	*m_pString	= *String.m_pString;
+
+	return( *this );
+}
+
+CSG_String & CSG_String::operator = (const SG_Char *String)
+{
+	*m_pString	= String;
+
+	return( *this );
+}
+
+CSG_String & CSG_String::operator = (SG_Char Character)
+{
+	*m_pString	= Character;
+
+	return( *this );
+}
+
+//---------------------------------------------------------
+CSG_String CSG_String::operator + (const CSG_String &String) const
+{
+	CSG_String	s(*this);
+
+	s	+= String;
+
+	return( s );
+}
+
+CSG_String CSG_String::operator + (const SG_Char *String) const
+{
+	CSG_String	s(*this);
+
+	s	+= String;
+
+	return( s );
+}
+
+CSG_String CSG_String::operator + (SG_Char Character) const
+{
+	CSG_String	s(*this);
+
+	s	+= Character;
+
+	return( s );
+}
+
+CSG_String		operator + (const SG_Char *A, const CSG_String &B)
+{
+	CSG_String	s(A);
+
+	s	+= B;
+
+	return( s );
+}
+
+CSG_String		operator + (SG_Char A, const CSG_String &B)
+{
+	CSG_String	s(A);
+
+	s	+= B;
+
+	return( s );
+}
+
+//---------------------------------------------------------
+void CSG_String::operator += (const CSG_String &String)
+{
+	*m_pString	+= *String.m_pString;
+}
+
+void CSG_String::operator += (const SG_Char *String)
+{
+	*m_pString	+= String;
+}
+
+void CSG_String::operator += (SG_Char Character)
+{
+	*m_pString	+= Character;
+}
+
+//---------------------------------------------------------
+SG_Char & CSG_String::operator [] (int i)
+{
+	return( m_pString->GetWritableChar(i) );
+}
+
+SG_Char CSG_String::operator [] (int i) const
+{
+	return( m_pString->GetChar(i) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CSG_String::Cmp(const CSG_String &String)	const
+{
+	return( m_pString->Cmp(String.c_str()) );
+}
+
+//---------------------------------------------------------
+int CSG_String::CmpNoCase(const CSG_String &String) const
+{
+	return( m_pString->CmpNoCase(String.c_str()) );
+}
+
+//---------------------------------------------------------
+CSG_String & CSG_String::Make_Lower(void)
+{
+	m_pString->MakeLower();
+
+	return( *this );
+}
+
+//---------------------------------------------------------
+CSG_String & CSG_String::Make_Upper(void)
+{
+	m_pString->MakeUpper();
+
+	return( *this );
+}
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+size_t CSG_String::Replace(const SG_Char *sOld, const SG_Char *sNew, bool replaceAll)
+{
+	return( m_pString->Replace(sOld, sNew, replaceAll) );
+}
+
+//---------------------------------------------------------
+CSG_String & CSG_String::Remove(size_t pos)
+{
+	m_pString->Remove(pos);
+
+	return( *this );
+}
+
+//---------------------------------------------------------
+CSG_String & CSG_String::Remove(size_t pos, size_t len)
+{
+	m_pString->Remove(pos, len);
+
+	return( *this );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CSG_String::Trim(bool fromRight)
+{
+	int		n	= m_pString->Length();
+
+	m_pString->Trim(fromRight);
+
+	return( n - m_pString->Length() );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CSG_String::Find(SG_Char Character, bool fromEnd) const
+{
+	return( m_pString->Find(Character, fromEnd) );
+}
+
+//---------------------------------------------------------
+int CSG_String::Find(const SG_Char *String) const
+{
+	return( m_pString->Find(String) );
+}
+
+//---------------------------------------------------------
+bool CSG_String::Contains(const SG_Char *String) const
+{
+	return( m_pString->Contains(String) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_String CSG_String::AfterFirst(SG_Char Character) const
+{
+	return( CSG_String(m_pString->AfterFirst(Character).c_str()) );
+}
+
+//---------------------------------------------------------
+CSG_String CSG_String::AfterLast(SG_Char Character) const
+{
+	return( CSG_String(m_pString->AfterLast(Character).c_str()) );
+}
+
+//---------------------------------------------------------
+CSG_String CSG_String::BeforeFirst(SG_Char Character) const
+{
+	return( CSG_String(m_pString->BeforeFirst(Character).c_str()) );
+}
+
+//---------------------------------------------------------
+CSG_String CSG_String::BeforeLast(SG_Char Character) const
+{
+	return( CSG_String(m_pString->BeforeLast(Character).c_str()) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_String CSG_String::Right(size_t count) const
+{
+	return( CSG_String(m_pString->Right(count).c_str()) );
+}
+
+//---------------------------------------------------------
+CSG_String CSG_String::Mid(size_t first, size_t count) const
+{
+	return( CSG_String(m_pString->Mid(first, count <= 0 ? wxSTRING_MAXLEN : count).c_str()) );
+}
+
+//---------------------------------------------------------
+CSG_String CSG_String::Left(size_t count) const
+{
+	return( CSG_String(m_pString->Left(count).c_str()) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CSG_String::asInt(void) const
+{
+	int		Value	= 0;
+
+	asInt(Value);
+
+	return( Value );
+
+//	return( asInt(Value) ? Value : 0 );
+}
+
+bool CSG_String::asInt(int &Value) const
+{
+	long	lValue	= 0;
+
+	if( m_pString->ToLong(&lValue) || lValue != 0 )
+	{
+		Value	= (int)lValue;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+double CSG_String::asDouble(void) const
+{
+	double	Value	= 0.0;
+
+	asDouble(Value);
+
+	return( Value );
+}
+
+bool CSG_String::asDouble(double &Value) const
+{
 	const wxChar	*start = m_pString->c_str();
 	wxChar			*end;
 
 	Value	= wxStrtod(start, &end);
 
 	return( end > start );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Strings::CSG_Strings(void)
-{
-	m_nStrings	= 0;
-	m_Strings	= NULL;
-}
-
-//---------------------------------------------------------
-CSG_Strings::CSG_Strings(const CSG_Strings &Strings)
-{
-	m_nStrings	= 0;
-	m_Strings	= NULL;
-
-	Assign(Strings);
-}
-
-//---------------------------------------------------------
-CSG_Strings::CSG_Strings(int nStrings, const SG_Char **Strings)
-{
-	m_nStrings	= 0;
-	m_Strings	= NULL;
-
-	for(int i=0; i<nStrings; i++)
-	{
-		Add(Strings[i]);
-	}
-}
-
-//---------------------------------------------------------
-CSG_Strings::~CSG_Strings(void)
-{
-	Clear();
-}
-
-//---------------------------------------------------------
-void CSG_Strings::Clear(void)
-{
-	if( m_Strings )
-	{
-		for(int i=0; i<m_nStrings; i++)
-		{
-			delete(m_Strings[i]);
-		}
-
-		SG_Free(m_Strings);
-
-		m_nStrings	= 0;
-		m_Strings	= NULL;
-	}
-}
-
-//---------------------------------------------------------
-bool CSG_Strings::Assign(const CSG_Strings &Strings)
-{
-	Clear();
-
-	for(int i=0; i<Strings.m_nStrings; i++)
-	{
-		Add(Strings[i]);
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-CSG_Strings & CSG_Strings::operator  = (const CSG_Strings &Strings)
-{
-	Assign(Strings);
-
-	return( *this );
-}
-
-//---------------------------------------------------------
-bool CSG_Strings::Add(const CSG_String &String)
-{
-	m_Strings	= (CSG_String **)SG_Realloc(m_Strings, (m_nStrings + 1) * sizeof(CSG_String *));
-	m_Strings[m_nStrings++]	= new CSG_String(String);
-
-	return( true );
-}
-
-//---------------------------------------------------------
-CSG_Strings & CSG_Strings::operator  += (const CSG_String &String)
-{
-	Add(String);
-
-	return( *this );
-}
-
-//---------------------------------------------------------
-bool CSG_Strings::Set_Count(int nStrings)
-{
-	Clear();
-
-	for(int i=0; i<nStrings; i++)
-	{
-		Add(SG_T(""));
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int				SG_Printf(const SG_Char *Format, ...)
-{
-	va_list	argptr;
-
-	va_start(argptr, Format);
-
-	int		ret	= wxVprintf(Format, argptr);
-
-	va_end(argptr);
-
-	return( ret );
-}
-
-//---------------------------------------------------------
-int				SG_FPrintf(FILE* stream,const SG_Char *Format, ...)
-{
-	va_list	argptr;
-
-	va_start(argptr, Format);
-
-	int		ret	= wxVfprintf(stream, Format, argptr);
-
-	va_end(argptr);
-
-	return( ret );
-}
-
-//---------------------------------------------------------
-int				SG_Sscanf(const SG_Char *Buffer, const SG_Char *Format, ...)
-{
-	va_list	argptr;
-
-	va_start(argptr, Format);
-
-	int		ret	= 0;	// wxVsscanf(Buffer, Format, argptr);
-
-	va_end(argptr);
-
-	return( ret );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_String		SG_Get_CurrentTimeStr(bool bWithDate)
-{
-	CSG_String	s;
-	wxDateTime	t;
-
-	t.SetToCurrent();
-
-	if( bWithDate )
-	{
-		s.Append(t.FormatISODate());
-		s.Append(SG_T("/"));
-	}
-
-	s.Append(t.FormatISOTime());
-
-	return( s );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_String		SG_UTF8_To_String(const SG_Char *String)
-{
-#ifdef _SAGA_UNICODE
-	return( !String && !String[0] ? SG_T("") : String );
-#else
-	return( !String && !String[0] ? SG_T("") : wxString::FromUTF8(String).c_str() );
-#endif
-}
-
-//---------------------------------------------------------
-CSG_String		SG_String_To_UTF8(const SG_Char *String)
-{
-#ifdef _SAGA_UNICODE
-	return( !String && !String[0] ? SG_T("") : wxString(String, wxConvUTF8).c_str() );
-#else
-	return( !String && !String[0] ? SG_T("") : wxString(wxString(String).ToUTF8()).c_str() );
-#endif
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_String		SG_Double_To_Degree(double Value)
-{
-	SG_Char		c;
-	int			d, h;
-	double		s;
-	CSG_String	String;
-
-	if( Value < 0.0 )
-	{
-		Value	= -Value;
-		c		= SG_T('-');
-	}
-	else
-	{
-		c		= SG_T('+');
-	}
-
-	Value	= fmod(Value, 360.0);
-	d		= (int)Value;
-	Value	= 60.0 * (Value - d);
-	h		= (int)Value;
-	Value	= 60.0 * (Value - h);
-	s		= Value;
-
-	String.Printf(SG_T("%c%03d\xb0%02d'%02f''"), c, d, h, s);
-
-	return( String );
-}
-
-//---------------------------------------------------------
-double			SG_Degree_To_Double(const SG_Char *String)
-{
-	double		d, h, s, sig;
-	CSG_String	sVal(String);
-
-	sig	= 1.0;
-	d	= h	= s	= 0.0;
-
-	if( sVal.BeforeFirst('\xb0').asDouble(d) )
-	{
-		if( d < 0.0 )
-		{
-			sig	= -1.0;
-			d	= -d;
-		}
-
-		sVal.AfterFirst('\xb0' ).asDouble(h);
-		sVal.AfterFirst('\'').asDouble(s);
-	}
-	else
-	{
-		sVal.asDouble(d);
-	}
-
-	return( sig * (d + h / 60.0 + s / (60.0 * 60.0)) );
-}
-
-//---------------------------------------------------------
-CSG_String		SG_Number_To_Date(int Value)
-{
-	return( SG_Number_To_Date((double)Value) );
-}
-
-CSG_String		SG_Number_To_Date(double Value)
-{
-	int		y, m, d;
-
-	y	= (int)(Value / 10000);	Value	-= y * 10000;
-	m	= (int)(Value / 100);	Value	-= m * 100;
-	d	= (int)(Value / 1);
-
-	return( CSG_String::Format(SG_T("%02d.%02d.%04d"), d, m, y) );
-}
-
-//---------------------------------------------------------
-int				SG_Date_To_Number(const SG_Char *String)
-{
-	if( String && String[0] )
-	{
-		CSG_String	s(String), sValue;
-
-		sValue	= s.AfterLast	('.');
-		int	y	= sValue.asInt();
-		sValue	= s.BeforeLast	('.');	s		= sValue;
-
-		sValue	= s.AfterLast	('.');
-		int	m	= sValue.asInt();
-		sValue	= s.BeforeLast	('.');	s		= sValue;
-		int	d	= sValue.asInt();
-
-		if( d < 1 )	d	= 1;	else if( d > 31 )	d	= 31;
-		if( m < 1 )	m	= 1;	else if( m > 12 )	m	= 12;
-
-		return( 10000 * y + 100 * m + 1 * d );
-	}
-
-	return( 0.0 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int				SG_Get_Significant_Decimals(double Value, int maxDecimals)
-{
-	int		Decimals;
-	double	Reminder;
-
-	Value	= fabs(Value);
-
-	for(Decimals=0; Decimals<maxDecimals; Decimals++)
-	{
-		Reminder	= Value - (int)(Value);
-
-		if( Reminder == 0.0 )
-		{
-			return( Decimals );
-		}
-
-		Value	= 10.0 * Value;
-	}
-
-	return( maxDecimals );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void			SG_Flip_Decimal_Separators(CSG_String &String)
-{
-	for(int i=0; i<(int)String.Length(); i++)
-	{
-		switch( String[i] )
-		{
-		case '.':	String[i]	= ',';	break;
-		case ',':	String[i]	= '.';	break;
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_String		SG_Get_String(double Value, int Precision, bool bScientific)
-{
-	CSG_String	s;
-
-	if( Precision >= 0 )
-	{
-		s.Printf(SG_T("%.*f"), Precision, Value);
-	}
-	else if( Precision == -1 )
-	{
-		s.Printf(SG_T("%f"), Value);
-	}
-	else // if( Precision == -2 )
-	{
-		s.Printf(SG_T("%.*f"), SG_Get_Significant_Decimals(Value, 10), Value);
-	}
-
-	s.Replace(SG_T(","), SG_T("."));
-
-	return( s );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Strings::CSG_Strings(void)
+{
+	m_nStrings	= 0;
+	m_Strings	= NULL;
+}
+
+//---------------------------------------------------------
+CSG_Strings::CSG_Strings(const CSG_Strings &Strings)
+{
+	m_nStrings	= 0;
+	m_Strings	= NULL;
+
+	Assign(Strings);
+}
+
+//---------------------------------------------------------
+CSG_Strings::CSG_Strings(int nStrings, const SG_Char **Strings)
+{
+	m_nStrings	= 0;
+	m_Strings	= NULL;
+
+	for(int i=0; i<nStrings; i++)
+	{
+		Add(Strings[i]);
+	}
+}
+
+//---------------------------------------------------------
+CSG_Strings::~CSG_Strings(void)
+{
+	Clear();
+}
+
+//---------------------------------------------------------
+void CSG_Strings::Clear(void)
+{
+	if( m_Strings )
+	{
+		for(int i=0; i<m_nStrings; i++)
+		{
+			delete(m_Strings[i]);
+		}
+
+		SG_Free(m_Strings);
+
+		m_nStrings	= 0;
+		m_Strings	= NULL;
+	}
+}
+
+//---------------------------------------------------------
+bool CSG_Strings::Assign(const CSG_Strings &Strings)
+{
+	Clear();
+
+	for(int i=0; i<Strings.m_nStrings; i++)
+	{
+		Add(Strings[i]);
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+CSG_Strings & CSG_Strings::operator  = (const CSG_Strings &Strings)
+{
+	Assign(Strings);
+
+	return( *this );
+}
+
+//---------------------------------------------------------
+bool CSG_Strings::Add(const CSG_String &String)
+{
+	m_Strings	= (CSG_String **)SG_Realloc(m_Strings, (m_nStrings + 1) * sizeof(CSG_String *));
+	m_Strings[m_nStrings++]	= new CSG_String(String);
+
+	return( true );
+}
+
+//---------------------------------------------------------
+CSG_Strings & CSG_Strings::operator  += (const CSG_String &String)
+{
+	Add(String);
+
+	return( *this );
+}
+
+//---------------------------------------------------------
+bool CSG_Strings::Set_Count(int nStrings)
+{
+	Clear();
+
+	for(int i=0; i<nStrings; i++)
+	{
+		Add(SG_T(""));
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int				SG_Printf(const SG_Char *Format, ...)
+{
+	va_list	argptr;
+
+	va_start(argptr, Format);
+
+	int		ret	= wxVprintf(Format, argptr);
+
+	va_end(argptr);
+
+	return( ret );
+}
+
+//---------------------------------------------------------
+int				SG_FPrintf(FILE* stream,const SG_Char *Format, ...)
+{
+	va_list	argptr;
+
+	va_start(argptr, Format);
+
+	int		ret	= wxVfprintf(stream, Format, argptr);
+
+	va_end(argptr);
+
+	return( ret );
+}
+
+//---------------------------------------------------------
+int				SG_Sscanf(const SG_Char *Buffer, const SG_Char *Format, ...)
+{
+	va_list	argptr;
+
+	va_start(argptr, Format);
+
+	int		ret	= 0;	// wxVsscanf(Buffer, Format, argptr);
+
+	va_end(argptr);
+
+	return( ret );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_String		SG_Get_CurrentTimeStr(bool bWithDate)
+{
+	CSG_String	s;
+	wxDateTime	t;
+
+	t.SetToCurrent();
+
+	if( bWithDate )
+	{
+		s.Append(t.FormatISODate());
+		s.Append(SG_T("/"));
+	}
+
+	s.Append(t.FormatISOTime());
+
+	return( s );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_String		SG_UTF8_To_String(const SG_Char *String)
+{
+#ifdef _SAGA_UNICODE
+	return( !String && !String[0] ? SG_T("") : String );
+#else
+	return( !String && !String[0] ? SG_T("") : wxString::FromUTF8(String).c_str() );
+#endif
+}
+
+//---------------------------------------------------------
+CSG_String		SG_String_To_UTF8(const SG_Char *String)
+{
+#ifdef _SAGA_UNICODE
+	return( !String && !String[0] ? SG_T("") : wxString(String, wxConvUTF8).c_str() );
+#else
+	return( !String && !String[0] ? SG_T("") : wxString(wxString(String).ToUTF8()).c_str() );
+#endif
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_String		SG_Double_To_Degree(double Value)
+{
+	SG_Char		c;
+	int			d, h;
+	double		s;
+	CSG_String	String;
+
+	if( Value < 0.0 )
+	{
+		Value	= -Value;
+		c		= SG_T('-');
+	}
+	else
+	{
+		c		= SG_T('+');
+	}
+
+	Value	= fmod(Value, 360.0);
+	d		= (int)Value;
+	Value	= 60.0 * (Value - d);
+	h		= (int)Value;
+	Value	= 60.0 * (Value - h);
+	s		= Value;
+
+	String.Printf(SG_T("%c%03d\xb0%02d'%02f''"), c, d, h, s);
+
+	return( String );
+}
+
+//---------------------------------------------------------
+double			SG_Degree_To_Double(const SG_Char *String)
+{
+	double		d, h, s, sig;
+	CSG_String	sVal(String);
+
+	sig	= 1.0;
+	d	= h	= s	= 0.0;
+
+	if( sVal.BeforeFirst('\xb0').asDouble(d) )
+	{
+		if( d < 0.0 )
+		{
+			sig	= -1.0;
+			d	= -d;
+		}
+
+		sVal.AfterFirst('\xb0' ).asDouble(h);
+		sVal.AfterFirst('\'').asDouble(s);
+	}
+	else
+	{
+		sVal.asDouble(d);
+	}
+
+	return( sig * (d + h / 60.0 + s / (60.0 * 60.0)) );
+}
+
+//---------------------------------------------------------
+CSG_String		SG_Number_To_Date(int Value)
+{
+	return( SG_Number_To_Date((double)Value) );
+}
+
+CSG_String		SG_Number_To_Date(double Value)
+{
+	int		y, m, d;
+
+	y	= (int)(Value / 10000);	Value	-= y * 10000;
+	m	= (int)(Value / 100);	Value	-= m * 100;
+	d	= (int)(Value / 1);
+
+	return( CSG_String::Format(SG_T("%02d.%02d.%04d"), d, m, y) );
+}
+
+//---------------------------------------------------------
+int				SG_Date_To_Number(const SG_Char *String)
+{
+	if( String && String[0] )
+	{
+		CSG_String	s(String), sValue;
+
+		sValue	= s.AfterLast	('.');
+		int	y	= sValue.asInt();
+		sValue	= s.BeforeLast	('.');	s		= sValue;
+
+		sValue	= s.AfterLast	('.');
+		int	m	= sValue.asInt();
+		sValue	= s.BeforeLast	('.');	s		= sValue;
+		int	d	= sValue.asInt();
+
+		if( d < 1 )	d	= 1;	else if( d > 31 )	d	= 31;
+		if( m < 1 )	m	= 1;	else if( m > 12 )	m	= 12;
+
+		return( 10000 * y + 100 * m + 1 * d );
+	}
+
+	return( 0.0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int				SG_Get_Significant_Decimals(double Value, int maxDecimals)
+{
+	int		Decimals;
+	double	Reminder;
+
+	Value	= fabs(Value);
+
+	for(Decimals=0; Decimals<maxDecimals; Decimals++)
+	{
+		Reminder	= Value - floor(Value);
+
+		if( Reminder == 0.0 )
+		{
+			return( Decimals );
+		}
+
+		Value	= 10.0 * Value;
+	}
+
+	return( maxDecimals );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void			SG_Flip_Decimal_Separators(CSG_String &String)
+{
+	for(int i=0; i<(int)String.Length(); i++)
+	{
+		switch( String[i] )
+		{
+		case '.':	String[i]	= ',';	break;
+		case ',':	String[i]	= '.';	break;
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_String		SG_Get_String(double Value, int Precision, bool bScientific)
+{
+	CSG_String	s;
+
+	if( Precision >= 0 )
+	{
+		s.Printf(SG_T("%.*f"), Precision, Value);
+	}
+	else if( Precision == -1 )
+	{
+		s.Printf(SG_T("%f"), Value);
+	}
+	else // if( Precision == -2 )
+	{
+		s.Printf(SG_T("%.*f"), SG_Get_Significant_Decimals(Value, abs(Precision)), Value);
+	}
+
+	s.Replace(SG_T(","), SG_T("."));
+
+	return( s );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_api/api_translator.cpp b/src/saga_core/saga_api/api_translator.cpp
index 76474ed..1aebcb5 100644
--- a/src/saga_core/saga_api/api_translator.cpp
+++ b/src/saga_core/saga_api/api_translator.cpp
@@ -107,13 +107,20 @@ CSG_Translator::CSG_Translator(void)
 	m_Translations	= NULL;
 }
 
-//---------------------------------------------------------
-CSG_Translator::CSG_Translator(const CSG_String &File_Name, bool bSetExtension)
+CSG_Translator::CSG_Translator(const CSG_String &File_Name, bool bSetExtension, int iText, int iTranslation, bool bCmpNoCase)
+{
+	m_nTranslations	= 0;
+	m_Translations	= NULL;
+
+	Create(File_Name, bSetExtension, iText, iTranslation, bCmpNoCase);
+}
+
+CSG_Translator::CSG_Translator(class CSG_Table *pTable, int iText, int iTranslation, bool bCmpNoCase)
 {
 	m_nTranslations	= 0;
 	m_Translations	= NULL;
 
-	Create(File_Name, bSetExtension);
+	Create(pTable, iText, iTranslation, bCmpNoCase);
 }
 
 //---------------------------------------------------------
@@ -147,32 +154,65 @@ void CSG_Translator::Destroy(void)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-bool CSG_Translator::Create(const CSG_String &File_Name, bool bSetExtension)
+bool CSG_Translator::Create(const CSG_String &File_Name, bool bSetExtension, int iText, int iTranslation, bool bCmpNoCase)
 {
-	Destroy();
-
 	CSG_Table	Translations;
 	CSG_String	fName(bSetExtension ? SG_File_Make_Path(NULL, File_Name, SG_T("lng")) : File_Name);
 
 	SG_UI_Msg_Lock(true);
 
-	if( SG_File_Exists(fName) && Translations.Create(fName) && Translations.Get_Field_Count() == 2 && Translations.Get_Record_Count() > 0 )
+	Destroy();
+
+	if( SG_File_Exists(fName) && Translations.Create(fName) )
+	{
+		Create(&Translations, iText, iTranslation, bCmpNoCase);
+	}
+
+	SG_UI_Msg_Lock(false);
+
+	return( m_nTranslations > 0 );
+}
+
+//---------------------------------------------------------
+bool CSG_Translator::Create(class CSG_Table *pTranslations, int iText, int iTranslation, bool bCmpNoCase)
+{
+	SG_UI_Msg_Lock(true);
+
+	Destroy();
+
+	if( iText != iTranslation && pTranslations && pTranslations->Get_Field_Count() > iText && pTranslations->Get_Field_Count() > iTranslation && pTranslations->Get_Record_Count() > 0 )
 	{
-		m_Translations	= (CSG_Translation **)SG_Malloc(Translations.Get_Record_Count() * sizeof(CSG_Translation *));
+		int		i;
 
-		Translations.Set_Index(0, TABLE_INDEX_Ascending);
+		m_bCmpNoCase	= bCmpNoCase;
 
-		for(int i=0; i<Translations.Get_Record_Count(); i++)
+		if( m_bCmpNoCase )
 		{
-			CSG_Table_Record	*pRecord	= Translations.Get_Record_byIndex(i);
+			for(i=0; i<pTranslations->Get_Record_Count(); i++)
+			{
+				CSG_Table_Record	*pRecord	= pTranslations->Get_Record(i);
+
+				CSG_String	s	= pRecord->asString(iText);
 
-			if( *pRecord->asString(0) && *pRecord->asString(1) )
+				pRecord->Set_Value(iText, s.Make_Lower().c_str());
+			}
+		}
+
+		pTranslations->Set_Index(iText, TABLE_INDEX_Ascending);
+
+		m_Translations	= (CSG_Translation **)SG_Malloc(pTranslations->Get_Record_Count() * sizeof(CSG_Translation *));
+
+		for(i=0; i<pTranslations->Get_Record_Count(); i++)
+		{
+			CSG_Table_Record	*pRecord	= pTranslations->Get_Record_byIndex(i);
+
+			if( *pRecord->asString(iText) && *pRecord->asString(iTranslation) )
 			{
-				m_Translations[m_nTranslations++]	= new CSG_Translation(pRecord->asString(0), pRecord->asString(1));
+				m_Translations[m_nTranslations++]	= new CSG_Translation(pRecord->asString(iText), pRecord->asString(iTranslation));
 			}
 		}
 
-		if( m_nTranslations < Translations.Get_Record_Count() )
+		if( m_nTranslations < pTranslations->Get_Record_Count() )
 		{
 			m_Translations	= (CSG_Translation **)SG_Realloc(m_Translations, m_nTranslations * sizeof(CSG_Translation *));
 		}
@@ -191,13 +231,16 @@ bool CSG_Translator::Create(const CSG_String &File_Name, bool bSetExtension)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-int CSG_Translator::_Get_Index(const SG_Char *Text)
+#define COMPARE(Index, Text)	(m_bCmpNoCase ? m_Translations[Index]->m_Text.CmpNoCase(Text) : m_Translations[Index]->m_Text.Cmp(Text))
+
+//---------------------------------------------------------
+int CSG_Translator::_Get_Index(const SG_Char *Text) const
 {
 	int		a, b, i, c;
 
 	if( m_nTranslations == 1 )
 	{
-		c	= m_Translations[0]->m_Text.Cmp(Text);
+		c	= COMPARE(0, Text);
 
 		return( c >= 0 ? 0 : 1 );
 	}
@@ -207,7 +250,7 @@ int CSG_Translator::_Get_Index(const SG_Char *Text)
 		for(a=0, b=m_nTranslations-1; b - a > 1; )
 		{
 			i	= a + (b - a) / 2;
-			c	= m_Translations[i]->m_Text.Cmp(Text);
+			c	= COMPARE(i, Text);
 
 			if( c > 0 )
 			{
@@ -223,9 +266,9 @@ int CSG_Translator::_Get_Index(const SG_Char *Text)
 			}
 		}
 
-		if( m_Translations[a]->m_Text.Cmp(Text) < 0 )
+		if( COMPARE(a, Text) < 0 )
 		{
-			if( m_Translations[b]->m_Text.Cmp(Text) < 0 )
+			if( COMPARE(b, Text) < 0 )
 			{
 				return( m_nTranslations );
 			}
@@ -233,7 +276,7 @@ int CSG_Translator::_Get_Index(const SG_Char *Text)
 			return( b );
 		}
 
-		if( m_Translations[b]->m_Text.Cmp(Text) > 0 )
+		if( COMPARE(b, Text) > 0 )
 		{
 			return( a );
 		}
@@ -250,19 +293,50 @@ int CSG_Translator::_Get_Index(const SG_Char *Text)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-const SG_Char * CSG_Translator::Get_Text(int Index)
+const SG_Char * CSG_Translator::Get_Translation(const SG_Char *Text, bool bReturnNullOnNotFound) const
 {
-	return( Index >= 0 && Index < m_nTranslations ? m_Translations[Index]->m_Text : SG_T("") );
-}
+	if( Text )
+	{
+		if( m_nTranslations > 0 )
+		{
+			int			i;
+			CSG_String	s(Text);
 
-//---------------------------------------------------------
-const SG_Char * CSG_Translator::Get_Translation(int Index)
-{
-	return( Index >= 0 && Index < m_nTranslations ? m_Translations[Index]->m_Translation : SG_T("") );
+			if( *Text == '{' )
+			{
+				s	= s.AfterFirst('{').BeforeFirst('}');
+			}
+
+			if(	(i = _Get_Index(s)) < m_nTranslations && !COMPARE(i, s) )
+			{
+				return( m_Translations[i]->m_Translation );
+			}
+		}
+
+		if( bReturnNullOnNotFound )
+		{
+			return( NULL );
+		}
+
+		//-------------------------------------------------
+		if( *Text == '{' )
+		{
+			do	{	Text++;	}	while( *Text != '}' && *Text != '\0' );
+			do	{	Text++;	}	while( *Text == ' ' && *Text != '\0' );
+		}
+
+		if( *Text == '[' )
+		{
+			do	{	Text++;	}	while( *Text != ']' && *Text != '\0' );
+			do	{	Text++;	}	while( *Text == ' ' && *Text != '\0' );
+		}
+	}
+
+	return( Text );
 }
 
 //---------------------------------------------------------
-const SG_Char * CSG_Translator::Get_Translation(const SG_Char *Text)
+bool CSG_Translator::Get_Translation(const SG_Char *Text, CSG_String &Translation) const
 {
 	if( Text )
 	{
@@ -276,12 +350,15 @@ const SG_Char * CSG_Translator::Get_Translation(const SG_Char *Text)
 				s	= s.AfterFirst('{').BeforeFirst('}');
 			}
 
-			if(	(i = _Get_Index(s)) < m_nTranslations && !m_Translations[i]->m_Text.Cmp(s) )
+			if(	(i = _Get_Index(s)) < m_nTranslations && !COMPARE(i, s) )
 			{
-				return( m_Translations[i]->m_Translation );
+				Translation	= m_Translations[i]->m_Translation;
+
+				return( true );
 			}
 		}
 
+		//-------------------------------------------------
 		if( *Text == '{' )
 		{
 			do	{	Text++;	}	while( *Text != '}' && *Text != '\0' );
@@ -293,9 +370,11 @@ const SG_Char * CSG_Translator::Get_Translation(const SG_Char *Text)
 			do	{	Text++;	}	while( *Text != ']' && *Text != '\0' );
 			do	{	Text++;	}	while( *Text == ' ' && *Text != '\0' );
 		}
+
+		Translation	= Text;
 	}
 
-	return( Text );
+	return( false );
 }
 
 
diff --git a/src/saga_core/saga_api/dataobject.cpp b/src/saga_core/saga_api/dataobject.cpp
index 8a2ca21..76ebcb4 100644
--- a/src/saga_core/saga_api/dataobject.cpp
+++ b/src/saga_core/saga_api/dataobject.cpp
@@ -1,352 +1,356 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    dataobject.cpp                     //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//					class CData_Object					 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "dataobject.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-const SG_Char *	SG_Get_DataObject_Identifier(TSG_Data_Object_Type Type)
-{
-	switch( Type )
-	{
-	default:
-	case DATAOBJECT_TYPE_Undefined:		return( SG_T("UNDEFINED") );
-	case DATAOBJECT_TYPE_Grid:			return( SG_T("GRID") );
-	case DATAOBJECT_TYPE_Table:			return( SG_T("TABLE") );
-	case DATAOBJECT_TYPE_Shapes:		return( SG_T("SHAPES") );
-	case DATAOBJECT_TYPE_TIN:			return( SG_T("TIN") );
-	case DATAOBJECT_TYPE_PointCloud:	return( SG_T("POINTS") );
-	}
-}
-
-//---------------------------------------------------------
-const SG_Char *	SG_Get_DataObject_Name(TSG_Data_Object_Type Type)
-{
-	switch( Type )
-	{
-	default:
-	case DATAOBJECT_TYPE_Undefined:		return( LNG("[DAT] Undefined") );
-	case DATAOBJECT_TYPE_Grid:			return( LNG("[DAT] Grid") );
-	case DATAOBJECT_TYPE_Table:			return( LNG("[DAT] Table") );
-	case DATAOBJECT_TYPE_Shapes:		return( LNG("[DAT] Shapes") );
-	case DATAOBJECT_TYPE_TIN:			return( LNG("[DAT] TIN") );
-	case DATAOBJECT_TYPE_PointCloud:	return( LNG("[DAT] Point Cloud") );
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Data_Object::CSG_Data_Object(void)
-{
-	CSG_MetaData	*pSource;
-
-	m_MetaData.Set_Name(SG_T("SAGA_METADATA"));
-
-	m_pHistory			= m_MetaData.	Add_Child(SG_META_HST);
-
-	pSource				= m_MetaData.	Add_Child(SG_META_SRC);
-	m_pFile				= pSource->		Add_Child(SG_META_SRC_FILE);
-	m_pMetaData_DB		= pSource->		Add_Child(SG_META_SRC_DB);
-	m_pProjection		= pSource->		Add_Child(SG_META_SRC_PROJ);
-
-	//-----------------------------------------------------
-	m_File_Type			= 0;
-	m_bModified			= true;
-
-	m_NoData_Value		= -99999.0;
-	m_NoData_hiValue	= -999.0;
-
-	Set_Name			(NULL);
-	Set_File_Name		(NULL);
-
-	m_bUpdate			= false;
-}
-
-//---------------------------------------------------------
-CSG_Data_Object::~CSG_Data_Object(void)
-{
-	Destroy();
-}
-
-//---------------------------------------------------------
-bool CSG_Data_Object::Destroy(void)
-{
-	m_pHistory		->Destroy();
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSG_Data_Object::Set_Name(const SG_Char *Name)
-{
-	m_Name	= Name ? CSG_String(Name).c_str() : LNG("[DAT] new");
-}
-
-const SG_Char * CSG_Data_Object::Get_Name(void) const
-{
-	return( m_Name.c_str() );
-}
-
-//---------------------------------------------------------
-void CSG_Data_Object::Set_File_Name(const SG_Char *File_Name)
-{
-	if( File_Name )
-	{
-		m_File_Name	= File_Name;
-
-		m_Name		= SG_File_Get_Name(File_Name, false);
-
-		m_bModified	= false;
-	}
-	else
-	{
-		m_File_Name.Clear();
-
-		Set_Name(NULL);
-	}
-
-	m_pFile->Set_Content(m_File_Name);
-}
-
-const SG_Char * CSG_Data_Object::Get_File_Name(bool bNullAsString)	const
-{
-	return(	m_File_Name.Length() > 0
-		?	m_File_Name.c_str()
-		:	(bNullAsString ? (SG_Char *)LNG("[DAT] [not set]") : (SG_Char *)NULL)
-	);
-}
-
-//---------------------------------------------------------
-void CSG_Data_Object::Set_File_Type(int File_Type)
-{
-	m_File_Type	= File_Type;
-}
-
-int CSG_Data_Object::Get_File_Type(void) const
-{
-	return( m_File_Type );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSG_Data_Object::Set_NoData_Value(double Value)
-{
-	Set_NoData_Value_Range(Value, Value);
-}
-
-//---------------------------------------------------------
-void CSG_Data_Object::Set_NoData_Value_Range(double loValue, double hiValue)
-{
-	if( loValue > hiValue )
-	{
-		double	d	= loValue;
-		loValue		= hiValue;
-		hiValue		= d;
-	}
-
-	if( loValue != m_NoData_Value || hiValue != m_NoData_hiValue )
-	{
-		if( !Get_Update_Flag() )
-		{
-			Set_Update_Flag();
-		}
-
-		m_NoData_Value		= loValue;
-		m_NoData_hiValue	= hiValue;
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Data_Object::Load_MetaData(const SG_Char *File_Name)
-{
-	CSG_MetaData	m, *p;
-
-	switch( Get_ObjectType() )
-	{
-	default:							return( false );;
-	case DATAOBJECT_TYPE_Grid:			m.Load(File_Name, SG_META_EXT_GRID);		break;
-	case DATAOBJECT_TYPE_Table:			m.Load(File_Name, SG_META_EXT_TABLE);		break;
-	case DATAOBJECT_TYPE_Shapes:		m.Load(File_Name, SG_META_EXT_SHAPES);		break;
-	case DATAOBJECT_TYPE_TIN:			m.Load(File_Name, SG_META_EXT_TIN);			break;
-	case DATAOBJECT_TYPE_PointCloud:	m.Load(File_Name, SG_META_EXT_POINTCLOUD);	break;
-	}
-
-	if( (p = m.Get_Child(SG_META_SRC)) != NULL )
-	{
-		m_pMetaData_DB->Destroy();
-
-		if( p->Get_Child(SG_META_SRC_DB) )
-		{
-			m_pMetaData_DB->Assign(*p->Get_Child(SG_META_SRC_DB));
-		}
-
-		m_pProjection->Destroy();
-
-		if( p->Get_Child(SG_META_SRC_PROJ) && m_pProjection->Assign(*p->Get_Child(SG_META_SRC_PROJ)) )
-		{
-			m_Projection.Load(*m_pProjection);
-		}
-	}
-
-	m_pHistory->Destroy();
-
-	if( (p = m.Get_Child(SG_META_HST)) != NULL )
-	{
-		m_pHistory->Assign(*m.Get_Child(SG_META_HST));
-	}
-	else
-	{
-		m_pHistory->Add_Child(SG_META_SRC_FILE, File_Name);
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CSG_Data_Object::Save_MetaData(const SG_Char *File_Name)
-{
-	if( m_Projection.Get_Type() == SG_PROJ_TYPE_CS_Undefined )
-	{
-		m_pProjection->Destroy();
-	}
-	else
-	{
-		m_Projection.Save(*m_pProjection);
-	}
-
-	switch( Get_ObjectType() )
-	{
-	default:							return( m_MetaData.Save(File_Name) );
-	case DATAOBJECT_TYPE_Grid:			return( m_MetaData.Save(File_Name, SG_META_EXT_GRID) );
-	case DATAOBJECT_TYPE_Table:			return( m_MetaData.Save(File_Name, SG_META_EXT_TABLE) );
-	case DATAOBJECT_TYPE_Shapes:		return( m_MetaData.Save(File_Name, SG_META_EXT_SHAPES) );
-	case DATAOBJECT_TYPE_TIN:			return( m_MetaData.Save(File_Name, SG_META_EXT_TIN) );
-	case DATAOBJECT_TYPE_PointCloud:	return( m_MetaData.Save(File_Name, SG_META_EXT_POINTCLOUD) );
-	}
-}
-
-//---------------------------------------------------------
-bool CSG_Data_Object::Update(void)
-{
-	if( m_bUpdate )
-	{
-		m_bUpdate	= false;
-
-		return( On_Update() );
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Data_Object::Assign(CSG_Data_Object *pObject)
-{
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//           Application Programming Interface           //
+//                                                       //
+//                  Library: SAGA_API                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    dataobject.cpp                     //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//					class CData_Object					 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "dataobject.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+const SG_Char *	SG_Get_DataObject_Identifier(TSG_Data_Object_Type Type)
+{
+	switch( Type )
+	{
+	default:
+	case DATAOBJECT_TYPE_Undefined:		return( SG_T("UNDEFINED") );
+	case DATAOBJECT_TYPE_Grid:			return( SG_T("GRID") );
+	case DATAOBJECT_TYPE_Table:			return( SG_T("TABLE") );
+	case DATAOBJECT_TYPE_Shapes:		return( SG_T("SHAPES") );
+	case DATAOBJECT_TYPE_TIN:			return( SG_T("TIN") );
+	case DATAOBJECT_TYPE_PointCloud:	return( SG_T("POINTS") );
+	}
+}
+
+//---------------------------------------------------------
+const SG_Char *	SG_Get_DataObject_Name(TSG_Data_Object_Type Type)
+{
+	switch( Type )
+	{
+	default:
+	case DATAOBJECT_TYPE_Undefined:		return( LNG("[DAT] Undefined") );
+	case DATAOBJECT_TYPE_Grid:			return( LNG("[DAT] Grid") );
+	case DATAOBJECT_TYPE_Table:			return( LNG("[DAT] Table") );
+	case DATAOBJECT_TYPE_Shapes:		return( LNG("[DAT] Shapes") );
+	case DATAOBJECT_TYPE_TIN:			return( LNG("[DAT] TIN") );
+	case DATAOBJECT_TYPE_PointCloud:	return( LNG("[DAT] Point Cloud") );
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Data_Object::CSG_Data_Object(void)
+{
+	m_MetaData.Set_Name(SG_T("SAGA_METADATA"));
+
+	m_pHistory			= m_MetaData.	Add_Child(SG_META_HST);
+
+	m_pMetaData			= m_MetaData  .Add_Child(SG_META_SRC);
+	m_pFile				= m_pMetaData->Add_Child(SG_META_SRC_FILE);
+	m_pMetaData_DB		= m_pMetaData->Add_Child(SG_META_SRC_DB);
+	m_pProjection		= m_pMetaData->Add_Child(SG_META_SRC_PROJ);
+
+	//-----------------------------------------------------
+	m_File_Type			= 0;
+	m_bModified			= true;
+
+	m_NoData_Value		= -99999.0;
+	m_NoData_hiValue	= -999.0;
+
+	Set_Name			(NULL);
+	Set_File_Name		(NULL);
+
+	m_bUpdate			= false;
+}
+
+//---------------------------------------------------------
+CSG_Data_Object::~CSG_Data_Object(void)
+{
+	Destroy();
+}
+
+//---------------------------------------------------------
+bool CSG_Data_Object::Destroy(void)
+{
+	m_pHistory		->Destroy();
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CSG_Data_Object::Set_Name(const SG_Char *Name)
+{
+	m_Name	= Name ? CSG_String(Name).c_str() : LNG("[DAT] new");
+}
+
+const SG_Char * CSG_Data_Object::Get_Name(void) const
+{
+	return( m_Name.c_str() );
+}
+
+//---------------------------------------------------------
+void CSG_Data_Object::Set_File_Name(const SG_Char *File_Name)
+{
+	if( File_Name )
+	{
+		m_File_Name	= File_Name;
+
+		m_Name		= SG_File_Get_Name(File_Name, false);
+
+		m_bModified	= false;
+	}
+	else
+	{
+		m_File_Name.Clear();
+
+		Set_Name(NULL);
+	}
+
+	m_pFile->Set_Content(m_File_Name);
+}
+
+const SG_Char * CSG_Data_Object::Get_File_Name(bool bNullAsString)	const
+{
+	return(	m_File_Name.Length() > 0
+		?	m_File_Name.c_str()
+		:	(bNullAsString ? (SG_Char *)LNG("[DAT] [not set]") : (SG_Char *)NULL)
+	);
+}
+
+//---------------------------------------------------------
+void CSG_Data_Object::Set_File_Type(int File_Type)
+{
+	m_File_Type	= File_Type;
+}
+
+int CSG_Data_Object::Get_File_Type(void) const
+{
+	return( m_File_Type );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Data_Object::Set_NoData_Value(double Value)
+{
+	return( Set_NoData_Value_Range(Value, Value) );
+}
+
+//---------------------------------------------------------
+bool CSG_Data_Object::Set_NoData_Value_Range(double loValue, double hiValue)
+{
+	if( loValue > hiValue )
+	{
+		double	d	= loValue;
+		loValue		= hiValue;
+		hiValue		= d;
+	}
+
+	if( loValue != m_NoData_Value || hiValue != m_NoData_hiValue )
+	{
+		if( !Get_Update_Flag() )
+		{
+			Set_Update_Flag();
+		}
+
+		m_NoData_Value		= loValue;
+		m_NoData_hiValue	= hiValue;
+
+		On_NoData_Changed();
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Data_Object::Load_MetaData(const SG_Char *File_Name)
+{
+	CSG_MetaData	m, *p;
+
+	switch( Get_ObjectType() )
+	{
+	default:							return( false );;
+	case DATAOBJECT_TYPE_Grid:			m.Load(File_Name, SG_META_EXT_GRID);		break;
+	case DATAOBJECT_TYPE_Table:			m.Load(File_Name, SG_META_EXT_TABLE);		break;
+	case DATAOBJECT_TYPE_Shapes:		m.Load(File_Name, SG_META_EXT_SHAPES);		break;
+	case DATAOBJECT_TYPE_TIN:			m.Load(File_Name, SG_META_EXT_TIN);			break;
+	case DATAOBJECT_TYPE_PointCloud:	m.Load(File_Name, SG_META_EXT_POINTCLOUD);	break;
+	}
+
+	if( (p = m.Get_Child(SG_META_SRC)) != NULL )
+	{
+		m_pMetaData_DB->Destroy();
+
+		if( p->Get_Child(SG_META_SRC_DB) )
+		{
+			m_pMetaData_DB->Assign(*p->Get_Child(SG_META_SRC_DB));
+		}
+
+		m_pProjection->Destroy();
+
+		if( p->Get_Child(SG_META_SRC_PROJ) && m_pProjection->Assign(*p->Get_Child(SG_META_SRC_PROJ)) )
+		{
+			m_Projection.Load(*m_pProjection);
+		}
+	}
+
+	m_pHistory->Destroy();
+
+	if( (p = m.Get_Child(SG_META_HST)) != NULL )
+	{
+		m_pHistory->Assign(*m.Get_Child(SG_META_HST));
+	}
+	else
+	{
+		m_pHistory->Add_Child(SG_META_SRC_FILE, File_Name);
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_Data_Object::Save_MetaData(const SG_Char *File_Name)
+{
+	if( m_Projection.Get_Type() == SG_PROJ_TYPE_CS_Undefined )
+	{
+		m_pProjection->Destroy();
+	}
+	else
+	{
+		m_Projection.Save(*m_pProjection);
+	}
+
+	switch( Get_ObjectType() )
+	{
+	default:							return( m_MetaData.Save(File_Name) );
+	case DATAOBJECT_TYPE_Grid:			return( m_MetaData.Save(File_Name, SG_META_EXT_GRID) );
+	case DATAOBJECT_TYPE_Table:			return( m_MetaData.Save(File_Name, SG_META_EXT_TABLE) );
+	case DATAOBJECT_TYPE_Shapes:		return( m_MetaData.Save(File_Name, SG_META_EXT_SHAPES) );
+	case DATAOBJECT_TYPE_TIN:			return( m_MetaData.Save(File_Name, SG_META_EXT_TIN) );
+	case DATAOBJECT_TYPE_PointCloud:	return( m_MetaData.Save(File_Name, SG_META_EXT_POINTCLOUD) );
+	}
+}
+
+//---------------------------------------------------------
+bool CSG_Data_Object::Update(void)
+{
+	if( m_bUpdate )
+	{
+		m_bUpdate	= false;
+
+		return( On_Update() );
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Data_Object::Assign(CSG_Data_Object *pObject)
+{
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_api/dataobject.h b/src/saga_core/saga_api/dataobject.h
index 90c5a09..69047d0 100644
--- a/src/saga_core/saga_api/dataobject.h
+++ b/src/saga_core/saga_api/dataobject.h
@@ -199,8 +199,8 @@ public:
 	class CSG_PointCloud *			asPointCloud	(void)	{	return( Get_ObjectType() == DATAOBJECT_TYPE_PointCloud ? (class CSG_PointCloud *)this : NULL );	}
 	class CSG_Grid *				asGrid			(void)	{	return( Get_ObjectType() == DATAOBJECT_TYPE_Grid       ? (class CSG_Grid       *)this : NULL );	}
 
-	void							Set_NoData_Value		(double Value);
-	void							Set_NoData_Value_Range	(double loValue, double hiValue);
+	bool							Set_NoData_Value		(double Value);
+	bool							Set_NoData_Value_Range	(double loValue, double hiValue);
 	double							Get_NoData_Value		(void)	const	{	return( m_NoData_Value );	}
 	double							Get_NoData_hiValue		(void)	const	{	return( m_NoData_hiValue );	}
 
@@ -212,15 +212,16 @@ public:
 
 protected:
 
-	void							Set_File_Name	(const SG_Char *File_Name);
-	void							Set_File_Type	(int File_Type);
+	void							Set_File_Name		(const SG_Char *File_Name);
+	void							Set_File_Type		(int File_Type);
 
-	bool							Load_MetaData	(const SG_Char *File_Name);
-	bool							Save_MetaData	(const SG_Char *File_Name);
+	bool							Load_MetaData		(const SG_Char *File_Name);
+	bool							Save_MetaData		(const SG_Char *File_Name);
 
-	void							Set_Update_Flag	(bool bOn = true)	{	m_bUpdate	= bOn;		}
-	bool							Get_Update_Flag	(void)				{	return( m_bUpdate );	}
-	virtual bool					On_Update		(void)				{	return( true );			}
+	void							Set_Update_Flag		(bool bOn = true)	{	m_bUpdate	= bOn;		}
+	bool							Get_Update_Flag		(void)				{	return( m_bUpdate );	}
+	virtual bool					On_Update			(void)				{	return( true );			}
+	virtual bool					On_NoData_Changed	(void)				{	return( true );			}
 
 
 private:
diff --git a/src/saga_core/saga_api/doc_html.cpp b/src/saga_core/saga_api/doc_html.cpp
deleted file mode 100644
index b32c3c4..0000000
--- a/src/saga_core/saga_api/doc_html.cpp
+++ /dev/null
@@ -1,722 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     doc_html.cpp                      //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//                      Victor Olaya                     //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Victor Olaya                           //
-//                                                       //
-//    e-mail:     volaya at saga-gis.org                    //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "doc_html.h"
-
-//---------------------------------------------------------
-#define GRAPH_WIDTH		700
-#define GRAPH_HEIGHT	350
-#define MAP_WIDTH		700.
-#define MAP_HEIGHT		700.
-#define OFFSET_X		50
-#define OFFSET_Y		50
-
-//---------------------------------------------------------
-#define HTML_CODE_OPENING_1	SG_T("<html>\n<head><title>")
-
-#define HTML_CODE_OPENING_2	SG_T("</title>\n")\
-	SG_T("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n")\
-	SG_T("</head>\n")\
-	SG_T("<body bgcolor=\"#FFFFFF\" text=\"#000000\">\n")
-
-#define HTML_CODE_CLOSING	SG_T("</body>\n</html>")
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Doc_HTML::CSG_Doc_HTML(){}
-
-CSG_Doc_HTML::~CSG_Doc_HTML(){}
-
-void CSG_Doc_HTML::Open(const SG_Char *Title)
-{
-
-	m_sHTMLCode.Clear();
-
-	m_sHTMLCode.Append(HTML_CODE_OPENING_1);
-	m_sHTMLCode.Append(Title);
-	m_sHTMLCode.Append(HTML_CODE_OPENING_2);
-
-}
-
-bool CSG_Doc_HTML::Save(const SG_Char *Filename)
-{
-
-	m_sHTMLCode.Append(HTML_CODE_CLOSING);
-
-	CSG_File	Stream(Filename, SG_FILE_W, false);
-
-	if( Stream.is_Open() )
-	{
-		Stream.Printf(SG_T("%s"), m_sHTMLCode.c_str());
-		return true;
-	}
-
-	return false;
-
-}
-
-void CSG_Doc_HTML::AddParagraph(const SG_Char *Text)
-{
-
-	m_sHTMLCode.Append(SG_T("<p align=\"left\">"));
-	m_sHTMLCode.Append(Text);
-	m_sHTMLCode.Append(SG_T("</p>\n"));
-
-}
-
-void CSG_Doc_HTML::AddLineBreak()
-{
-
-	m_sHTMLCode.Append(SG_T("</br>"));	
-
-}
-void CSG_Doc_HTML::AddHeader(const SG_Char *Text,
-							int iOrder)
-{
-
-	m_sHTMLCode.Append(SG_T("<h"));
-	m_sHTMLCode.Append(SG_Get_String(iOrder,0));
-	m_sHTMLCode.Append(SG_T(" align=\"left\">"));
-	m_sHTMLCode.Append(Text);
-	m_sHTMLCode.Append(SG_T("</h"));
-	m_sHTMLCode.Append(SG_Get_String(iOrder,0));
-	m_sHTMLCode.Append(SG_T(">\n"));
-
-}
-
-void CSG_Doc_HTML::AddHyperlink(const SG_Char *Text,
-								const SG_Char *URL)
-{
-
-	m_sHTMLCode.Append(SG_T("<a href=\""));
-	m_sHTMLCode.Append(URL);
-	m_sHTMLCode.Append(SG_T("\">\n"));
-	m_sHTMLCode.Append(Text);
-	m_sHTMLCode.Append(SG_T("\n</a>"));
-
-}
-
-CSG_String CSG_Doc_HTML::GetHyperlinkCode(const SG_Char *Text,
-									const SG_Char *URL)
-{
-	CSG_String s;
-
-	s.Append(SG_T("<a href=\""));
-	s.Append(URL);
-	s.Append(SG_T("\">\n"));
-	s.Append(Text);
-	s.Append(SG_T("\n</a>"));
-
-	return s;
-
-}
-void CSG_Doc_HTML::AddImage(const SG_Char *Filename)
-{
-
-	m_sHTMLCode.Append(SG_T("<img src=\""));
-	m_sHTMLCode.Append(Filename);
-	m_sHTMLCode.Append(SG_T("\">\n"));
-
-}
-
-void CSG_Doc_HTML::AddThumbnail(const SG_Char *Filename,
-								int iWidth,
-								bool bIsPercent)
-{
-
-	m_sHTMLCode.Append(SG_T("<a href=\""));
-	m_sHTMLCode.Append(Filename);
-	m_sHTMLCode.Append(SG_T("\">\n"));
-    m_sHTMLCode.Append(SG_T("<img src=\""));
-    m_sHTMLCode.Append(Filename);
-    m_sHTMLCode.Append(SG_T("\" width="));
-    m_sHTMLCode.Append(SG_Get_String(iWidth,0));
-    if (bIsPercent)
-    {
-		m_sHTMLCode.Append(SG_T("%"));
-	}
-    m_sHTMLCode.Append(SG_T("></a><br><br>\n"));
-
-}
-
-void CSG_Doc_HTML::AddThumbnails(const SG_Char **Filename,
-								int iImages,
-								int iThumbnailsPerRow)
-{
-
-	int i,j;
-	int iImage	= 0;
-	int iRows	= (int)ceil((double)iImages / (double)iThumbnailsPerRow);
-	int iWidth	= (int)(100.0 / (double)iThumbnailsPerRow);
-
-    m_sHTMLCode.Append(SG_T("<table width=\"99%\" style=\"background-color:transparent;\" border=0 cellspacing=0 cellpadding=2 >\n"));
-	for (i=0; i<iRows; i++)
-	{
-		m_sHTMLCode.Append(SG_T("<tr>\n"));
-
-		for (j=0; j<iThumbnailsPerRow; j++){
-			m_sHTMLCode.Append(SG_T("<td width=\""));
-			m_sHTMLCode.Append(SG_Get_String(iWidth));
-			m_sHTMLCode.Append(SG_T("%\" align=\"center\">"));
-			AddThumbnail(Filename[iImage], 100, true);
-			iImage++;
-			if (iImage >= iImages){
-				break;
-			}
-			m_sHTMLCode.Append(SG_T("</td>"));
-		}
-		m_sHTMLCode.Append(SG_T("\n</tr>\n"));
-	}
-
-	m_sHTMLCode.Append(SG_T("\n</table>\n"));
-
-}
-
-void CSG_Doc_HTML::StartUnorderedList()
-{
-
-	m_sHTMLCode.Append(SG_T("<ul>\n"));
-
-}
-
-void CSG_Doc_HTML::StartOrderedList()
-{
-
-	m_sHTMLCode.Append(SG_T("<ol>\n"));
-
-}
-
-void CSG_Doc_HTML::CloseUnorderedList()
-{
-
-	m_sHTMLCode.Append(SG_T("</ul>\n"));
-
-}
-
-void CSG_Doc_HTML::CloseOrderedList()
-{
-
-	m_sHTMLCode.Append(SG_T("</ol>\n"));
-
-}
-
-void CSG_Doc_HTML::AddListElement(const SG_Char *Text)
-{
-
-	m_sHTMLCode.Append(SG_T("<li>"));
-	m_sHTMLCode.Append(Text);
-	m_sHTMLCode.Append(SG_T("</li>\n"));
-
-}
-
-void CSG_Doc_HTML::AddOrderedList(const SG_Char **Text, int iElements)
-{
-
-	StartOrderedList();
-	for (int i = 0; i < iElements; i++)
-	{
-		AddListElement(Text[i]);
-	}
-	CloseOrderedList();
-
-}
-
-void CSG_Doc_HTML::AddUnorderedList(const SG_Char **Text, int iElements)
-{
-
-	StartUnorderedList();
-	for (int i = 0; i < iElements; i++)
-	{
-		AddListElement(Text[i]);
-	}
-	CloseUnorderedList();
-
-}
-
-void CSG_Doc_HTML::AddCurve(const SG_Char *Filename,
-								CSG_Points &Data,
-								const SG_Char *Description,
-								int iGraphType,
-								bool bIncludeTableData)
-{
-
-	int i;
-    int iMag;
-	int iNumLines;
-    double fMinLine = 0;
-	double fWidth;
-	double fMax, fMin;
-	double fRange, fRangeX;
-	double fStep;
-    double fX, fY, fY2;
-	double fMaxX, fMinX;
-	CSG_String sValue;
-	CSG_String sTableFilename;
-	CSG_Points Points;
-	CSG_Doc_SVG SVG;
-
-	m_sHTMLCode.Append(SG_T("<object type=\"image/svg+xml\" width=\""));
-	m_sHTMLCode.Append(SG_Get_String(GRAPH_WIDTH + OFFSET_X, 0));
-	m_sHTMLCode.Append(SG_T("\" height=\""));
-	m_sHTMLCode.Append(SG_Get_String(GRAPH_HEIGHT + OFFSET_Y, 0));
-	m_sHTMLCode.Append(SG_T("\" data=\"file://"));
-	m_sHTMLCode.Append(Filename);
-	m_sHTMLCode.Append(SG_T("\"></object><br>\n"));
-
-	m_sHTMLCode.Append(SG_T("<p align=\"center\"><i>"));
-	m_sHTMLCode.Append(Description);
-	m_sHTMLCode.Append(SG_T("</i></p>\n"));
-
-	fMin = fMax = Data[0].y;
-
-	for (i = 0; i < Data.Get_Count(); i++)
-	{
-		if (Data[i].y > fMax)
-		{
-			fMax = Data[i].y;
-		}
-		if (Data[i].y < fMin)
-		{
-			fMin = Data[i].y;
-		}
-		if (iGraphType == HTML_GRAPH_TYPE_BARS){
-			fMin = M_GET_MIN(0, fMin);
-		}
-    }
-
-	fRange = fMax - fMin;
-
-	fMaxX = Data[Data.Get_Count() - 1].x;
-    fMinX = Data[0].x;
-
-	fRangeX = fMaxX - fMinX;
-
-	SVG.Open(GRAPH_WIDTH + OFFSET_X, GRAPH_HEIGHT + OFFSET_Y);
-
-	if (fMin != fMax){
-		iMag	= (int) (log(fMax - fMin) / log(10.0));
-		fStep	= (int) pow(10.0, (double) iMag);
-		if (fStep == 0)
-		{
-			fStep = 1.;
-		}
-		if (fMin < 0)
-		{
-			iMag = (int) (log(fabs(fMin)) / log(10.0));
-			fMinLine = -(int) pow(10.0, (double) iMag);
-		}
-		else
-		{
-			fMinLine=(int)(((int)(fMin/fStep)) *fStep);
-		}
-
-		iNumLines = (int) ((fMax - fMin) / fStep);
-
-		while (iNumLines < 8)
-		{
-			fStep = fStep / 2.0;
-			iNumLines = (int) ((fMax - fMin) / fStep);
-		}
-		iNumLines = (int) ((fMax - fMinLine) / fStep);
-	}
-	else{
-		if (fMin > 0)
-		{
-			fStep = fMin = 0;
-			iNumLines = 1;
-			fMinLine = fMax;
-		}
-		else if (fMin < 0)
-		{
-			fStep = 0;
-			fMin = fMin - 1;
-			fMinLine = fMax;
-		}
-		else
-		{
-			return;
-		}
-	}
-
-	for (i = 0; i < iNumLines; i++)
-	{
-        fY = (fMinLine + fStep * i - fMin) / (fRange) * GRAPH_HEIGHT;
-		fY = GRAPH_HEIGHT - fY;
-        if (fY >= 0 && fY <= GRAPH_HEIGHT)
-		{
-			SVG.Draw_Line(OFFSET_X - 10, fY, GRAPH_WIDTH + OFFSET_X, fY);
-			SVG.Draw_Text(OFFSET_X - 10, fY, SG_Get_String(fMinLine + fStep * i, 1), 0, SG_T("Verdana"), 8, SVG_ALIGNMENT_Right);
-        }
-    }
-
-	if (iGraphType == HTML_GRAPH_TYPE_BARS)
-	{
-		fWidth = GRAPH_WIDTH / (double) (Data.Get_Count()) ;
-	    for (i = 0; i < Data.Get_Count(); i++)
-		{
-	        fX = OFFSET_X + i * fWidth;
-			fY = GRAPH_HEIGHT;
-			fY2 = (Data.Get_Y(i) - fMin) / fRange * GRAPH_HEIGHT;
-			fY2 = GRAPH_HEIGHT - fY2;
-			SVG.Draw_Rectangle(fX, fY, fX + fWidth, fY2, 0x660000, 0x000000);
-	    }
-	}
-	else
-	{
-		for (i = 0; i < Data.Get_Count(); i++)
-		{
-			fX = OFFSET_X + (Data.Get_X(i) - fMinX) / fRangeX * GRAPH_WIDTH;
-			fY = (Data.Get_Y(i) - fMin) / fRange * GRAPH_HEIGHT;
-			fY = GRAPH_HEIGHT - fY;
-			Points.Add(fX, fY);
-	    }
-		SVG.Draw_Line(Points, 4, 0x660000);
-	}
-
-	if (fMaxX != fMinX)
-	{
-		iMag = (int) (log(fMaxX - fMinX) / log(10.0));
-		fStep = (double) pow(10.0, (double) iMag);
-
-		iNumLines = (int) ((fMaxX -fMinX) / fStep);
-
-		while (iNumLines < 5)
-		{
-			fStep = fStep / 2.0;
-			iNumLines = (int) ((fMaxX-fMinX) / fStep);
-		}
-		fMinLine = (int)(((int)(fMinX/fStep)) * fStep);
-		while (fMinLine <fMinX)
-		{
-			fMinLine+=fStep;
-		}
-
-		for (i = 0; i < iNumLines + 1; i++)
-		{
-			if (iGraphType == HTML_GRAPH_TYPE_BARS)
-			{
-				fX = OFFSET_X + (fMinLine + fStep * i - fMinX) / fRangeX * (GRAPH_WIDTH - fWidth);
-			}
-			else
-			{
-				fX = OFFSET_X + (fMinLine + fStep * i - fMinX) / fRangeX * GRAPH_WIDTH;
-			}
-			if (fX >= OFFSET_X && fX <= GRAPH_WIDTH + OFFSET_X){
-				if (fabs(fStep * i +fMinLine) > 100000)
-				{
-					sValue = SG_Get_String(fStep * i +fMinLine);
-				}
-				else
-				{
-					sValue = SG_Get_String(fStep * i + fMinLine, 2, true);
-				}
-				SVG.Draw_Text(fX, GRAPH_HEIGHT + 10, sValue, 0, SG_T("Verdana"), 8, SVG_ALIGNMENT_Center);
-				SVG.Draw_Line(fX, GRAPH_HEIGHT, fX, GRAPH_HEIGHT - 5);
-			}
-		}
-    }
-
-	SVG.Draw_Line(OFFSET_X, 0, OFFSET_X, GRAPH_HEIGHT, 4);
-	SVG.Draw_Line(OFFSET_X, GRAPH_HEIGHT, OFFSET_X + GRAPH_WIDTH, GRAPH_HEIGHT, 4);
-
-	SVG.Save(Filename);
-
-	if (bIncludeTableData)
-	{
-		CSG_Doc_HTML HTMLDoc;
-		HTMLDoc.Open(LNG("Data Table"));
-
-		sTableFilename = Filename;
-		sTableFilename.Append(SG_T(".htm"));
-
-		m_sHTMLCode.Append(SG_T("<a href=\"file://"));
-		m_sHTMLCode.Append(sTableFilename);
-		m_sHTMLCode.Append(SG_T("\">"));
-		m_sHTMLCode.Append(LNG("Data Table"));
-		m_sHTMLCode.Append(SG_T("</a><br><br>\n"));
-
-		HTMLDoc._AddBicolumTable(&Data);
-		HTMLDoc.Save(sTableFilename);
-
-	}
-
-
-}//method
-
-void CSG_Doc_HTML::_AddBicolumTable(CSG_Points *pData)
-{
-
-	int i;
-
-    m_sHTMLCode.Append(SG_T("<table width=\"99%\" style=\"background-color:transparent;\" border=0 cellspacing=0 cellpadding=2 >\n"));
-	m_sHTMLCode.Append(
-		SG_T("<tr bgcolor=\"#CCCCCC\">\n")
-		SG_T("<td width=\"50%\" align=\"center\">X</td><td width=\"50%\" align=\"center\">Y</td>\n")
-		SG_T("</tr>\n")
-	);
-
-	for (i=0; i<pData->Get_Count(); i++)
-	{
-		m_sHTMLCode.Append(SG_T("<tr>\n"));
-		m_sHTMLCode.Append(SG_T("<td width=\"50%\" align=\"center\">"));
-		m_sHTMLCode.Append(SG_Get_String(pData->Get_X(i),2));
-		m_sHTMLCode.Append(SG_T("</td>"));
-		m_sHTMLCode.Append(SG_T("<td width=\"50%\" align=\"center\">"));
-		m_sHTMLCode.Append(SG_Get_String(pData->Get_Y(i),2));
-		m_sHTMLCode.Append(SG_T("</td>"));
-		m_sHTMLCode.Append(SG_T("\n</tr>\n"));
-	}
-
-	m_sHTMLCode.Append(SG_T("\n</table>\n"));
-	m_sHTMLCode.Append(SG_T("<p align=\"center\"><i>"));
-	m_sHTMLCode.Append(LNG("Data Table"));
-	m_sHTMLCode.Append(SG_T("</i></p>\n"));
-
-}
-
-void CSG_Doc_HTML::AddTable(const SG_Char ***Table,
-								int iRows,
-								int iCols,
-								const SG_Char *Description)
-{
-
-	int i,j;
-	int iWidth = (int) (100/iCols);
-
-    m_sHTMLCode.Append(SG_T("<table width=\"99%\" style=\"background-color:transparent;\" border=0 cellspacing=0 cellpadding=2 >\n"));
-	for (i=0; i<iRows; i++)
-	{
-		if (i==0)
-		{
-			m_sHTMLCode.Append(SG_T("<tr bgcolor=\"#CCCCCC\">\n"));
-		}
-		else
-		{
-			m_sHTMLCode.Append(SG_T("<tr>\n"));
-		}
-		for (j=0; j<iCols; j++){
-			m_sHTMLCode.Append(SG_T("<td width=\""));
-			m_sHTMLCode.Append(SG_Get_String(iWidth,0));
-			m_sHTMLCode.Append(SG_T("%\" align=\"center\">"));
-			try
-			{
-				m_sHTMLCode.Append(Table[i][j]);
-			}
-			catch(...){}
-			m_sHTMLCode.Append(SG_T("</td>"));
-		}
-		m_sHTMLCode.Append(SG_T("\n</tr>\n"));
-	}
-
-	m_sHTMLCode.Append(SG_T("\n</table>\n"));
-	m_sHTMLCode.Append(SG_T("<p align=\"center\"><i>"));
-	m_sHTMLCode.Append(Description);
-	m_sHTMLCode.Append(SG_T("</i></p>\n"));
-
-}
-
-void CSG_Doc_HTML::AddTable(CSG_Table *pTable)
-{
-
-	int i,j;
-	int iWidth = (int) (100/pTable->Get_Field_Count());
-
-    m_sHTMLCode.Append(SG_T("<table width=\"99%\" style=\"background-color:transparent;\" border=0 cellspacing=0 cellpadding=2 >\n"));
-
-	m_sHTMLCode.Append(SG_T("<tr bgcolor=\"#CCCCCC\">\n"));
-	for (i=0; i<pTable->Get_Field_Count(); i++){
-		m_sHTMLCode.Append(SG_T("<td width=\""));
-		m_sHTMLCode.Append(SG_Get_String(iWidth,0));
-		m_sHTMLCode.Append(SG_T("%\" align=\"center\">"));
-		m_sHTMLCode.Append(pTable->Get_Field_Name(i));
-		m_sHTMLCode.Append(SG_T("</td>"));
-	}
-	m_sHTMLCode.Append(SG_T("\n</tr>\n"));
-
-	for (i=0; i<pTable->Get_Record_Count(); i++)
-	{
-		m_sHTMLCode.Append(SG_T("<tr>\n"));
-		for (j=0; j<pTable->Get_Field_Count(); j++){
-			m_sHTMLCode.Append(SG_T("<td width=\""));
-			m_sHTMLCode.Append(SG_Get_String(iWidth,0));
-			m_sHTMLCode.Append(SG_T("%\" align=\"center\">"));
-			try
-			{
-				m_sHTMLCode.Append(pTable->Get_Record(i)->asString(j));
-			}
-			catch(...){}
-			m_sHTMLCode.Append(SG_T("</td>"));
-		}
-		m_sHTMLCode.Append(SG_T("\n</tr>\n"));
-	}
-
-	m_sHTMLCode.Append(SG_T("\n</table>\n"));
-	m_sHTMLCode.Append(SG_T("<p align=\"center\"><i>"));
-	m_sHTMLCode.Append(pTable->Get_Name());
-	m_sHTMLCode.Append(SG_T("</i></p>\n"));
-
-}
-
-bool CSG_Doc_HTML::_Draw_Shape(CSG_Doc_SVG &SVG, CSG_Shape *pShape, CSG_Rect GlobalRect, int Fill_Color, int Line_Color, int Line_Width, int Point_Width)
-{
-	if( pShape && pShape->is_Valid() )
-	{
-		int			iPart, iPoint;
-		double		x,y;
-		TSG_Point	Point;
-		CSG_Points	Points;
-		double		dWidth, dHeight;
-		double		dOffsetX, dOffsetY;
-
-		if (GlobalRect.Get_XRange() / GlobalRect.Get_YRange() > MAP_WIDTH / MAP_HEIGHT)
-		{
-			dWidth	= MAP_WIDTH * .95;
-			dHeight	= MAP_HEIGHT / GlobalRect.Get_XRange() * GlobalRect.Get_YRange();
-		}
-		else{
-			dHeight	= MAP_HEIGHT * .95;
-			dWidth	= MAP_WIDTH / GlobalRect.Get_YRange() * GlobalRect.Get_XRange();
-		}
-
-		dOffsetX = (MAP_WIDTH  - dWidth)  / 2.;
-		dOffsetY = (MAP_HEIGHT - dHeight) / 2.;
-
-		SVG.Draw_Rectangle(0,0,MAP_WIDTH,MAP_HEIGHT,SG_COLOR_NONE,SG_COLOR_BLACK,1);
-
-		for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
-		{
-			Points.Clear();
-
-			for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
-			{
-				Point = pShape->Get_Point(iPoint, iPart);
-				x = dOffsetX + (Point.x - GlobalRect.Get_XMin()) / GlobalRect.Get_XRange() * dWidth;
-				y = (Point.y - GlobalRect.Get_YMin()) / GlobalRect.Get_YRange() * dHeight;
-				y = MAP_HEIGHT - y - dOffsetY;
-				Points.Add(x, y);
-			}
-
-			switch( pShape->Get_Type() )
-			{
-			case SHAPE_TYPE_Point:
-			case SHAPE_TYPE_Points:
-				for(iPoint=0; iPoint<Points.Get_Count(); iPoint++)
-				{
-					SVG.Draw_Circle(Points[iPoint].x, Points[iPoint].y, Point_Width, Fill_Color, Line_Color, Line_Width);
-				}
-				break;
-
-			case SHAPE_TYPE_Line:
-				SVG.Draw_Line(Points, Line_Width, Line_Color);
-				break;
-
-			case SHAPE_TYPE_Polygon:
-				if( ((CSG_Shape_Polygon *)pShape)->is_Lake(iPart) )
-				{
-					SVG.Draw_Polygon(Points, SG_COLOR_WHITE, Line_Color, Line_Width);
-				}
-				else
-				{
-					SVG.Draw_Polygon(Points, Fill_Color, Line_Color, Line_Width);
-				}
-				break;
-			}
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-bool CSG_Doc_HTML::Draw_Shapes(CSG_Shapes *pShapes, const SG_Char *Filename, int Fill_Color, int Line_Color, int Line_Width)
-{
-
-	CSG_Doc_SVG	SVG;
-	CSG_Rect	r;
-
-	if( pShapes && pShapes->is_Valid())
-	{
-		r = pShapes->Get_Extent();
-		SVG.Open((int)MAP_WIDTH, (int)MAP_HEIGHT);
-
-		for(int iShape=0; iShape<pShapes->Get_Count(); iShape++)
-		{
-			_Draw_Shape(SVG, pShapes->Get_Shape(iShape), r, Fill_Color, Line_Color, 1, 3);
-		}
-
-		SVG.Save(Filename);
-
-		m_sHTMLCode.Append(SG_T("<center>\n<object type=\"image/svg+xml\" width=\""));
-		m_sHTMLCode.Append(SG_Get_String(MAP_WIDTH, 0));
-		m_sHTMLCode.Append(SG_T("\" height=\""));
-		m_sHTMLCode.Append(SG_Get_String(MAP_HEIGHT, 0));
-		m_sHTMLCode.Append(SG_T("\" data=\"file://"));
-		m_sHTMLCode.Append(Filename);
-		m_sHTMLCode.Append(SG_T("\"></object></center><br>\n"));
-
-		return( true );
-
-	}
-
-	return( false );
-}
diff --git a/src/saga_core/saga_api/doc_html.h b/src/saga_core/saga_api/doc_html.h
deleted file mode 100644
index fc355d9..0000000
--- a/src/saga_core/saga_api/doc_html.h
+++ /dev/null
@@ -1,171 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                      doc_html.h                       //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//                      Victor Olaya                     //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__SAGA_API__doc_html_H
-#define HEADER_INCLUDED__SAGA_API__doc_html_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "shapes.h"
-#include "doc_svg.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define HTML_GRAPH_TYPE_BARS					1
-#define HTML_GRAPH_TYPE_LINES					2
-
-#define HTML_COLOR_RANDOM						-2
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class SAGA_API_DLL_EXPORT CSG_Doc_HTML
-{
-public:
-	CSG_Doc_HTML(void);
-	virtual ~CSG_Doc_HTML(void);
-
-	void						Open						(const SG_Char *Title);
-	bool						Save						(const SG_Char *FileName);
-
-	void						AddCurve					(const SG_Char *Filename,
-															CSG_Points &Points,
-															const SG_Char *Description,
-															int iGraphType,
-															bool bIncludeTableData);
-	void						AddTable					(const SG_Char ***Table,
-															int iRows,
-															int iCols,
-															const SG_Char *Description);
-	void						AddTable					(CSG_Table *pTable);
-	void						AddParagraph				(const SG_Char *Text);
-	void						AddLineBreak				();
-	void						AddHeader					(const SG_Char *Text, int iOrder);
-	void						AddHyperlink				(const SG_Char *Text, const SG_Char *URL);
-	CSG_String					GetHyperlinkCode			(const SG_Char *Text, const SG_Char *URL);
-
-	void						AddImage					(const SG_Char *Filename);
-	void						AddThumbnail				(const SG_Char *Filename,
-															int iWidth,
-															bool bIsPercent);
-	void						AddThumbnails				(const SG_Char **Text,
-															int iImages,
-															int iThumbnailsPerRow);
-	void						StartUnorderedList			(void);
-	void						StartOrderedList			(void);
-	void						CloseUnorderedList			(void);
-	void						CloseOrderedList			(void);
-	void						AddListElement				(const SG_Char *Text);
-	void						AddOrderedList				(const SG_Char **Text,
-															int iElement);
-	void						AddUnorderedList			(const SG_Char **Text,
-															int iElement);
-
-	bool						Draw_Shapes					(CSG_Shapes *pShapes,
-															const SG_Char *Filename,
-															int Fill_Color, 
-															int Line_Color, 
-															int Line_Width);
-
-private:
-
-	CSG_String					m_sHTMLCode;
-
-	bool						_Draw_Shape					(CSG_Doc_SVG &SVG,
-															CSG_Shape *pShape,
-															CSG_Rect GlobalRect,
-															int Fill_Color, 
-															int Line_Color, 
-															int Line_Width, 
-															int Point_Width);
-
-	void						_AddBicolumTable			(CSG_Points *pData);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__SAGA_API__doc_html_H
diff --git a/src/saga_core/saga_api/doc_pdf.cpp b/src/saga_core/saga_api/doc_pdf.cpp
deleted file mode 100644
index 4a33ea5..0000000
--- a/src/saga_core/saga_api/doc_pdf.cpp
+++ /dev/null
@@ -1,1731 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     doc_pdf.cpp                       //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//              Victor Olaya, Olaf Conrad                //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef _SAGA_DONOTUSE_HARU
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <hpdf.h>
-
-#include "doc_pdf.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define PDF_PAGE_WIDTH_A4		595.276
-#define PDF_PAGE_HEIGHT_A4		841.89
-
-#define PDF_PAGE_HEIGHT_A4_M	0.297
-
-#define PDF_PAGE_WIDTH_A3		 PDF_PAGE_HEIGHT_A4
-#define PDF_PAGE_HEIGHT_A3		(PDF_PAGE_HEIGHT_A4 * sqrt(2.0))
-
-#define PDF_METER_TO_POINT		(PDF_PAGE_HEIGHT_A4 / PDF_PAGE_HEIGHT_A4_M)
-#define PDF_POINT_TO_METER		(PDF_PAGE_HEIGHT_A4_M / PDF_PAGE_HEIGHT_A4)
-
-//---------------------------------------------------------
-#define PDF_GET_R(c)			(float)(SG_GET_R(c) / 255.0)
-#define PDF_GET_G(c)			(float)(SG_GET_G(c) / 255.0)
-#define PDF_GET_B(c)			(float)(SG_GET_B(c) / 255.0)
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Doc_PDF::CSG_Doc_PDF(void)
-{
-	m_pPDF	= NULL;
-
-	Layout_Set_Box_Space(5, false);
-
-	Open();
-}
-
-//---------------------------------------------------------
-CSG_Doc_PDF::CSG_Doc_PDF(TSG_PDF_Page_Size Size, int Orientation, const SG_Char *Title)
-{
-	m_pPDF	= NULL;
-
-	Layout_Set_Box_Space(5, false);
-
-	Open(Size, Orientation, Title);
-}
-
-//---------------------------------------------------------
-CSG_Doc_PDF::~CSG_Doc_PDF(void)
-{
-	Close();
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-const SG_Char * CSG_Doc_PDF::Get_Version(void)
-{
-	static CSG_String	s	= CSG_String::Format(SG_T("Haru Free PDF Library, Version %s"), HPDF_VERSION_TEXT);
-
-	return( s );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Open(const SG_Char *Title)
-{
-	return( Open(PDF_PAGE_SIZE_A4, PDF_PAGE_ORIENTATION_PORTRAIT, Title) );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Open(TSG_PDF_Page_Size Size, int Orientation, const SG_Char *Title)
-{
-	if( Close() )
-	{
-		m_pPDF	= HPDF_New(NULL, NULL);
-
-		m_pOutline_Last_Level_0 = NULL;
-		m_pOutline_Last_Level_1 = NULL;
-		m_pOutline_Last_Level_2 = NULL;
-
-		Set_Size_Page(Size, Orientation);
-
-		if( Title && *Title )
-		{
-			Add_Page_Title(Title);
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Close(void)
-{
-	if( m_pPDF )
-	{
-		try
-		{
-			HPDF_Free(m_pPDF);
-		}
-		catch(...)
-		{
-			return( false );
-		}
-	}
-
-	m_pPDF		= NULL;
-	m_pPage		= NULL;
-	m_nPages	= 0;
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Save(const SG_Char *FileName)
-{
-	if( m_pPDF && m_nPages > 0 && SG_Dir_Create(SG_File_Get_Path(FileName)) )
-	{
-		try
-		{
-			return( HPDF_SaveToFile(m_pPDF, SG_STR_SGTOMB(FileName)) == HPDF_OK );
-		}
-		catch(...)
-		{}
-	}
-
-	SG_UI_Msg_Add_Error(LNG("[ERR] Could not save PDF file."));
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-double CSG_Doc_PDF::Get_Page_To_Meter(void)
-{
-	return( PDF_POINT_TO_METER );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-struct _HPDF_Dict_Rec * CSG_Doc_PDF::_Get_Font(TSG_PDF_Font_Type Font)
-{
-	switch( Font )
-	{
-	default:
-	case PDF_FONT_Helvetica:				return( HPDF_GetFont(m_pPDF, "Helvetica"			, NULL) );
-	case PDF_FONT_Helvetica_Bold:			return( HPDF_GetFont(m_pPDF, "Helvetica-Bold"		, NULL) );
-	case PDF_FONT_Helvetica_Oblique:		return( HPDF_GetFont(m_pPDF, "Helvetica-Oblique"	, NULL) );
-	case PDF_FONT_Helvetica_BoldOblique:	return( HPDF_GetFont(m_pPDF, "Helvetica-BoldOblique", NULL) );
-	case PDF_FONT_Times_Roman:				return( HPDF_GetFont(m_pPDF, "Times-Roman"			, NULL) );
-	case PDF_FONT_Times_Bold:				return( HPDF_GetFont(m_pPDF, "Times-Bold"			, NULL) );
-	case PDF_FONT_Times_Italic:				return( HPDF_GetFont(m_pPDF, "Times-Italic"			, NULL) );
-	case PDF_FONT_Times_BoldItalic:			return( HPDF_GetFont(m_pPDF, "Times-BoldItalic"		, NULL) );
-	case PDF_FONT_Courier:					return( HPDF_GetFont(m_pPDF, "Courier"				, NULL) );
-	case PDF_FONT_Courier_Bold:				return( HPDF_GetFont(m_pPDF, "Courier-Bold"			, NULL) );
-	case PDF_FONT_Courier_Oblique:			return( HPDF_GetFont(m_pPDF, "Courier-Oblique"		, NULL) );
-	case PDF_FONT_Courier_BoldOblique:		return( HPDF_GetFont(m_pPDF, "Courier-BoldOblique"	, NULL) );
-	case PDF_FONT_Symbol:					return( HPDF_GetFont(m_pPDF, "Symbol"				, NULL) );
-	case PDF_FONT_ZapfDingbats:				return( HPDF_GetFont(m_pPDF, "ZapfDingbats"			, NULL) );
-	}
-
-	return( NULL );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Layout_Add_Box(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const SG_Char *ID)
-{
-	if( m_Boxes_Percent.Add(xMin_Percent, yMin_Percent, xMax_Percent, yMax_Percent) )
-	{
-		m_Boxes.Add();
-		m_Boxes_ID.Add(ID);
-
-		_Layout_Set_Box(m_Boxes.Get_Count() - 1);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Layout_Add_Box(const CSG_Rect &Box_Percent, const SG_Char *ID)
-{
-	return( Layout_Add_Box(Box_Percent.Get_XMin(), Box_Percent.Get_YMin(), Box_Percent.Get_XMax(), Box_Percent.Get_YMax(), ID) );
-}
-
-//---------------------------------------------------------
-const CSG_Rect & CSG_Doc_PDF::Layout_Get_Box(const SG_Char *ID)
-{
-	for(int i=0; i<m_Boxes_ID.Get_Count(); i++)
-	{
-		if( !m_Boxes_ID[i].Cmp(ID) )
-		{
-			return( Layout_Get_Box(i) );
-		}
-	}
-
-	return( Layout_Get_Box(-1) );
-}
-
-//---------------------------------------------------------
-void CSG_Doc_PDF::Layout_Set_Box_Space(double Space, bool bPercent)
-{
-	m_Boxes_Space_bPercent	= bPercent;
-	m_Boxes_Space			= Space;
-}
-
-//---------------------------------------------------------
-void CSG_Doc_PDF::_Layout_Set_Boxes(void)
-{
-	for(int i=0; i<m_Boxes.Get_Count(); i++)
-	{
-		_Layout_Set_Box(i);
-	}
-}
-
-//---------------------------------------------------------
-void CSG_Doc_PDF::_Layout_Set_Box(int iBox)
-{
-	if( iBox >= 0 && iBox < m_Boxes.Get_Count() && iBox < m_Boxes_Percent.Get_Count() )
-	{
-		m_Boxes[iBox].Assign(
-			m_Size_Margins.Get_XMin() + 0.01 * m_Boxes_Percent[iBox].Get_XMin() * m_Size_Margins.Get_XRange(),
-			m_Size_Margins.Get_YMax() - 0.01 * m_Boxes_Percent[iBox].Get_YMax() * m_Size_Margins.Get_YRange(),
-			m_Size_Margins.Get_XMin() + 0.01 * m_Boxes_Percent[iBox].Get_XMax() * m_Size_Margins.Get_XRange(),
-			m_Size_Margins.Get_YMax() - 0.01 * m_Boxes_Percent[iBox].Get_YMin() * m_Size_Margins.Get_YRange()
-		);
-
-		m_Boxes[iBox].Deflate(m_Boxes_Space, m_Boxes_Space_bPercent);
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::_Fit_Rectangle(double &x, double &y, double &dx, double &dy, double XToY_Ratio, bool bShrink)
-{
-	if( XToY_Ratio != 0.0 && dx != 0.0 && dy != 0.0 )
-	{
-		if( XToY_Ratio > dx / dy )
-		{
-			if( bShrink )
-			{
-				XToY_Ratio	 = dx / XToY_Ratio;
-				y			+= (dy - XToY_Ratio) / 2.0;
-				dy			 = XToY_Ratio;
-			}
-			else
-			{
-				XToY_Ratio	 = dy * XToY_Ratio;
-				x			-= (dx - XToY_Ratio) / 2.0;
-				dx			 = XToY_Ratio;
-			}
-		}
-		else
-		{
-			if( bShrink )
-			{
-				XToY_Ratio	 = dy * XToY_Ratio;
-				x			+= (dx - XToY_Ratio) / 2.0;
-				dx			 = XToY_Ratio;
-			}
-			else
-			{
-				XToY_Ratio	 = dx / XToY_Ratio;
-				y			-= (dy - XToY_Ratio) / 2.0;
-				dy			 = XToY_Ratio;
-			}
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::_Fit_Rectangle(CSG_Rect &r, double XToY_Ratio, bool bShrink)
-{
-	double	x, y, dx, dy;
-
-	x	= r.Get_XMin();
-	y	= r.Get_YMin();
-	dx	= r.Get_XRange();
-	dy	= r.Get_YRange();
-
-	if( _Fit_Rectangle(x, y, dx, dy, XToY_Ratio, bShrink) )
-	{
-		r.Assign(x, y, x + dx, y + dy);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::_Add_Outline_Item(const SG_Char *Title, struct _HPDF_Dict_Rec *pPage, TSG_PDF_Title_Level Level)
-{
-	if( m_pPDF && pPage )
-	{
-		HPDF_Outline	pOutlineItem	= NULL;
-
-		switch( Level )
-		{
-		case PDF_TITLE:
-			pOutlineItem	= m_pOutline_Last_Level_0	= HPDF_CreateOutline(m_pPDF, NULL, SG_STR_SGTOMB(Title), NULL);
-			break;
-
-		case PDF_TITLE_01:
-			if( m_pOutline_Last_Level_0 )
-			{
-				pOutlineItem	= m_pOutline_Last_Level_1	= HPDF_CreateOutline(m_pPDF, m_pOutline_Last_Level_0, SG_STR_SGTOMB(Title), NULL);
-			}
-			break;
-
-		case PDF_TITLE_02:
-			if( m_pOutline_Last_Level_1 )
-			{
-				pOutlineItem	= m_pOutline_Last_Level_2	= HPDF_CreateOutline(m_pPDF, m_pOutline_Last_Level_1, SG_STR_SGTOMB(Title), NULL);
-			}
-			break;
-
-		case PDF_TITLE_NONE:
-			if( m_pOutline_Last_Level_2 )
-			{
-				pOutlineItem	= HPDF_CreateOutline(m_pPDF, m_pOutline_Last_Level_2, SG_STR_SGTOMB(Title), NULL);
-			}
-			break;
-
-		}
-
-		if( pOutlineItem )
-		{
-			if( pPage )
-			{
-				struct _HPDF_Array_Rec	*pDestination	= HPDF_Page_CreateDestination(pPage);
-
-				HPDF_Destination_SetFit		(pDestination);
-				HPDF_Outline_SetDestination	(pOutlineItem, pDestination);
-			}
-
-			return( true );
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Add_Outline_Item(const SG_Char *Title)
-{
-	return( _Add_Outline_Item(Title, m_pPage, _Get_Lowest_Outline_Level()) );
-}
-
-//---------------------------------------------------------
-TSG_PDF_Title_Level CSG_Doc_PDF::_Get_Lowest_Outline_Level(void)
-{
-	if( m_pOutline_Last_Level_2 )
-	{
-		return( PDF_TITLE_NONE );
-	}
-	else if( m_pOutline_Last_Level_1 )
-	{
-		return( PDF_TITLE_02 );
-	}
-	else if( m_pOutline_Last_Level_0 )
-	{
-		return( PDF_TITLE_01 );
-	}
-
-	return( PDF_TITLE );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Add_Page(void)
-{
-	return( Add_Page(m_Size_Paper.Get_XRange(), m_Size_Paper.Get_YRange()) );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Add_Page(TSG_PDF_Page_Size Size, int Orientation)
-{
-	if( Add_Page() )
-	{
-		return( Set_Size_Page(Size, Orientation) );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Add_Page(double Width, double Height)
-{
-	if( m_pPDF )
-	{
-		m_nPages++;
-
-		m_pPage		= HPDF_AddPage(m_pPDF);
-
-		Set_Size_Page(Width, Height);
-
-		HPDF_Page_SetRGBStroke	(m_pPage, 0.0, 0.0, 0.0);
-		HPDF_Page_SetRGBFill	(m_pPage, 1.0, 1.0, 1.0);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Set_Size_Page(TSG_PDF_Page_Size Size, int Orientation)
-{
-	double	Width, Height;
-
-	switch( Size )
-	{
-	case PDF_PAGE_SIZE_A4:	default:
-		Width	= PDF_PAGE_WIDTH_A4;
-		Height	= PDF_PAGE_HEIGHT_A4;
-		break;
-
-	case PDF_PAGE_SIZE_A3:
-		Width	= PDF_PAGE_WIDTH_A3;
-		Height	= PDF_PAGE_HEIGHT_A3;
-		break;
-	}
-
-	//-----------------------------------------------------
-	if( Orientation == PDF_PAGE_ORIENTATION_LANDSCAPE )
-	{
-		double	a;
-
-		a		= Width;
-		Width	= Height;
-		Height	= a;
-	}
-
-	return( Set_Size_Page(Width, Height) );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Set_Size_Page(double Width, double Height)
-{
-	if( Width > 0.0 && Height > 0.0 )
-	{
-		m_Size_Paper.Assign(0.0, 0.0, Width, Height);
-
-		m_Size_Margins	= m_Size_Paper;
-		m_Size_Margins.Deflate(10.0, false);
-
-		_Layout_Set_Boxes();
-
-		if( m_pPage )
-		{
-			HPDF_Page_SetWidth	(m_pPage, (float)m_Size_Paper.Get_XRange());
-			HPDF_Page_SetHeight	(m_pPage, (float)m_Size_Paper.Get_YRange());
-		}
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Add_Page_Title(const SG_Char *Title, TSG_PDF_Title_Level Level, TSG_PDF_Page_Size Size, int Orientation)
-{
-	bool	bLine, bDestination, bPage;
-	int		FontSize;
-
-	//-----------------------------------------------------
-	if( Add_Page() )
-	{
-		if( m_nPages % 2 - 1 )
-		{
-			Add_Page();
-		}
-
-		if( Size != PDF_PAGE_SIZE_PREVIOUS || Orientation != PDF_PAGE_ORIENTATION_PREVIOUS )
-		{
-			Set_Size_Page(Size, Orientation);
-		}
-
-		//-------------------------------------------------
-		switch( Level )
-		{
-		case PDF_TITLE:
-			FontSize		= 26;
-			bLine			= true;
-			bDestination	= true;
-			bPage			= true;
-			break;
-
-		case PDF_TITLE_01:
-			FontSize		= 22;
-			bLine			= true;
-			bDestination	= false;
-			bPage			= true;
-			break;
-
-		case PDF_TITLE_02:
-			FontSize		= 20;
-			bLine			= false;
-			bDestination	= false;
-			bPage			= false;
-			break;
-		}
-
-		_Add_Outline_Item(Title, m_pPage, Level);
-
-		//-------------------------------------------------
-		Draw_Text(Get_Margins().Get_XCenter(), Get_Margins().Get_YCenter(), Title, FontSize, PDF_STYLE_TEXT_ALIGN_H_CENTER, 0.0, SG_GET_RGB(0, 0, 0));
-
-		//-------------------------------------------------
-		if( bLine )
-		{
-			double	y	= Get_Margins().Get_YCenter() - 25.0;
-
-			Draw_Line(Get_Margins().Get_XMin(), y, Get_Margins().Get_XMax(), y, 5, SG_GET_RGB(0, 0, 0), PDF_STYLE_LINE_END_ROUND);
-		}
-
-		if( bPage )
-		{
-			Add_Page();
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::_Set_Style_FillStroke(int Style, int Fill_Color, int Line_Color, int Line_Width)
-{
-	if( Is_Ready_To_Draw() )
-	{
-		if( Style & PDF_STYLE_POLYGON_STROKE )
-		{
-			if( Style & PDF_STYLE_LINE_END_ROUND )
-			{
-				HPDF_Page_SetLineCap(m_pPage, HPDF_ROUND_END);
-			}
-			else if( Style & PDF_STYLE_LINE_END_SQUARE )
-			{
-				HPDF_Page_SetLineCap(m_pPage, HPDF_PROJECTING_SCUARE_END);
-			}
-			else // if( Style & PDF_STYLE_LINE_END_BUTT )
-			{
-				HPDF_Page_SetLineCap(m_pPage, HPDF_BUTT_END);
-			}
-
-			if( Style & PDF_STYLE_LINE_JOIN_ROUND )
-			{
-				HPDF_Page_SetLineJoin(m_pPage, HPDF_ROUND_JOIN);
-			}
-			else if( Style & PDF_STYLE_LINE_JOIN_BEVEL )
-			{
-				HPDF_Page_SetLineJoin(m_pPage, HPDF_BEVEL_JOIN);
-			}
-			else // if( Style & PDF_STYLE_LINE_JOIN_MITER )
-			{
-				HPDF_Page_SetLineJoin(m_pPage, HPDF_MITER_JOIN);
-			}
-
-			HPDF_Page_SetRGBStroke	(m_pPage, PDF_GET_R(Line_Color), PDF_GET_G(Line_Color), PDF_GET_B(Line_Color));
-
-			HPDF_Page_SetLineWidth	(m_pPage, (float)Line_Width);
-		}
-
-		//-------------------------------------------------
-		if( Style & PDF_STYLE_POLYGON_FILL )
-		{
-			HPDF_Page_SetRGBFill(m_pPage, PDF_GET_R(Fill_Color), PDF_GET_G(Fill_Color), PDF_GET_B(Fill_Color));
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Point(double x, double y, double Width, int Style, int Fill_Color, int Line_Color, int Line_Width)
-{
-	if( Is_Ready_To_Draw() )
-	{
-		Width	/= 2.0;
-
-		//-------------------------------------------------
-	//	if( Style & PDF_STYLE_POINT_CIRCLE )
-		{
-		}
-	//	else // if( Style & PDF_STYLE_POINT_SQUARE )
-		{
-			return( Draw_Rectangle(x - Width, y - Width, x + Width, y + Width, Style, Fill_Color, Line_Color, Line_Width) );
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Line(double xa, double ya, double xb, double yb, int Width, int Color, int Style)
-{
-	CSG_Points	Points;
-
-	Points.Add(xa, ya);
-	Points.Add(xb, yb);
-
-	return( Draw_Line(Points, Width, Color, Style) );
-}
-
-bool CSG_Doc_PDF::Draw_Line(CSG_Points &Points, int Width, int Color, int Style)
-{
-	if( Points.Get_Count() > 1 && _Set_Style_FillStroke(Style|PDF_STYLE_POLYGON_STROKE, 0, Color, Width) )
-	{
-		HPDF_Page_MoveTo(m_pPage, (float)Points[0].x, (float)Points[0].y);
-
-		for(int i=1; i<Points.Get_Count(); i++)
-		{
-			HPDF_Page_LineTo(m_pPage, (float)Points[i].x, (float)Points[i].y);
-		}
-
-		//-------------------------------------------------
-		HPDF_Page_Stroke(m_pPage);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Rectangle(double xa, double ya, double xb, double yb, int Style, int Fill_Color, int Line_Color, int Line_Width)
-{
-	CSG_Points	Points;
-
-	Points.Add(xa, ya);
-	Points.Add(xb, ya);
-	Points.Add(xb, yb);
-	Points.Add(xa, yb);
-
-	return( Draw_Polygon(Points, Style, Fill_Color, Line_Color, Line_Width) );
-}
-
-bool CSG_Doc_PDF::Draw_Rectangle(const CSG_Rect &r, int Style, int Fill_Color, int Line_Color, int Line_Width)
-{
-	return( Draw_Rectangle(r.Get_XMin(), r.Get_YMin(), r.Get_XMax(), r.Get_YMax(), Style, Fill_Color, Line_Color, Line_Width) );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Polygon(CSG_Points &Points, int Style, int Fill_Color, int Line_Color, int Line_Width)
-{
-	if( Points.Get_Count() > 2 && _Set_Style_FillStroke(Style, Fill_Color, Line_Color, Line_Width) )
-	{
-		HPDF_Page_MoveTo(m_pPage, (float)Points[0].x, (float)Points[0].y);
-
-		for(int i=1; i<Points.Get_Count(); i++)
-		{
-			HPDF_Page_LineTo(m_pPage, (float)Points[i].x, (float)Points[i].y);
-		}
-
-		HPDF_Page_ClosePath(m_pPage);
-
-		//-------------------------------------------------
-		if( Style & PDF_STYLE_POLYGON_FILL && Style & PDF_STYLE_POLYGON_STROKE )
-		{
-			HPDF_Page_EofillStroke(m_pPage);
-		}
-		else if( Style & PDF_STYLE_POLYGON_FILL )
-		{
-			HPDF_Page_Eofill(m_pPage);
-		}
-		else // if( Style & PDF_STYLE_POLYGON_STROKE )
-		{
-			HPDF_Page_Stroke(m_pPage);
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Text(double x, double y, CSG_Strings &Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)
-{
-	if( Is_Ready_To_Draw() && Text.Get_Count() > 0 )
-	{
-		for(int i=0; i<Text.Get_Count(); i++, y-=Size)
-		{
-			_Draw_Text(x, y, Text[i], Size, Style, Angle, Color, Font);
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Text(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)
-{
-	int				n;
-	CSG_String		String(Text);
-	CSG_Strings	Strings;
-
-	while( (n = String.Find('\n')) >= 0 )
-	{
-		Strings.Add(String.Left(n));
-		String.Remove(0, n + 1);
-	}
-
-	if( Strings.Get_Count() > 0 )
-	{
-		if( String.Length() > 0 )
-		{
-			Strings.Add(String);
-		}
-
-		return( Draw_Text(x, y, Strings, Size, Style, Angle, Color, Font) );
-	}
-
-	return( _Draw_Text(x, y, Text, Size, Style, Angle, Color, Font) );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::_Draw_Text(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)
-{
-	float	Width, Height;
-
-	if( m_pPage && Text && *Text != '\0' )
-	{
-		double	ax, ay, bx, by;
-
-		HPDF_Page_SetFontAndSize(m_pPage, _Get_Font(Font), (float)Size);
-
-		HPDF_Page_SetTextRenderingMode(m_pPage, HPDF_FILL_THEN_STROKE);
-		HPDF_Page_SetLineWidth	(m_pPage, 0);
-		HPDF_Page_SetRGBStroke	(m_pPage, PDF_GET_R(Color), PDF_GET_G(Color), PDF_GET_B(Color));
-		HPDF_Page_SetRGBFill	(m_pPage, PDF_GET_R(Color), PDF_GET_G(Color), PDF_GET_B(Color));
-
-		Width	= HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(Text)) * (float)cos(Angle);
-		Height	= HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(Text)) * (float)sin(Angle) + Size;
-
-		//-------------------------------------------------
-		if( Style & PDF_STYLE_TEXT_ALIGN_H_CENTER )
-		{
-			ax	= x - HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(Text)) / 2.0;
-		}
-		else if( Style & PDF_STYLE_TEXT_ALIGN_H_RIGHT )
-		{
-			ax	= x - HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(Text));
-		}
-		else
-		{
-			ax	= x;
-		}
-
-		bx	= ax + HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(Text));
-
-		if( Style & PDF_STYLE_TEXT_ALIGN_V_CENTER )
-		{
-			ay	= y - Size / 2.0;
-		}
-		else if( Style & PDF_STYLE_TEXT_ALIGN_V_TOP )
-		{
-			ay	= y - Size;
-		}
-		else
-		{
-			ay	= y;
-		}
-
-		by	= ay;
-
-		//-------------------------------------------------
-		HPDF_Page_BeginText(m_pPage);
-
-		if( Angle != 0.0 )
-		{
-			double	dSin, dCos, dx, dy;
-
-			dSin	= sin(-Angle);
-			dCos	= cos(-Angle),
-
-			dx	= ax - x,
-			dy	= ay - y;
-			ax	= x + dCos * dx + dSin * dy;
-			ay	= y - dSin * dx + dCos * dy;
-
-			dx	= bx - x,
-			dy	= by - y;
-			bx	= x + dCos * dx + dSin * dy;
-			by	= y - dSin * dx + dCos * dy;
-
-			dSin	= sin(Angle);
-			dCos	= cos(Angle),
-
-			HPDF_Page_SetTextMatrix(m_pPage, (float)dCos, (float)dSin, -(float)dSin, (float)dCos, (float)ax, (float)ay);
-		}
-		else
-		{
-			HPDF_Page_MoveTextPos(m_pPage, (float)ax, (float)ay);
-		}
-
-		HPDF_Page_ShowText(m_pPage, SG_STR_SGTOMB(Text));
-		HPDF_Page_EndText(m_pPage);
-
-		//-------------------------------------------------
-		if( Style & PDF_STYLE_TEXT_UNDERLINE )
-		{
-			double	dx, dy;
-
-			dy	=  0.2 * Size * (ax - bx) / SG_Get_Distance(ax, ay, bx, by);
-			dx	= -0.2 * Size * (ay - by) / SG_Get_Distance(ax, ay, bx, by);
-
-			Draw_Line(ax + dx, ay + dy, bx + dx, by + dy, (int)(0.1 * Size), Color);
-		}
-
-		if( Style & PDF_STYLE_TEXT_STROKE )
-		{
-			double	dx, dy;
-
-			dy	= -0.4 * Size * (ax - bx) / SG_Get_Distance(ax, ay, bx, by);
-			dx	=  0.4 * Size * (ay - by) / SG_Get_Distance(ax, ay, bx, by);
-
-			Draw_Line(ax + dx, ay + dy, bx + dx, by + dy, (int)(0.1 * Size), Color);
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Image(double x, double y, double dx, double dy, const SG_Char *FileName)
-{
-	bool		bKeepRatio	= true;
-	double		nx, ny;
-	HPDF_Image	pImage		= NULL;
-
-	//-----------------------------------------------------
-	if( m_pPage && SG_File_Exists(FileName) && dx > 0.0 && dy > 0.0 )
-	{
-		if( SG_File_Cmp_Extension(FileName, SG_T("png")) )
-		{
-	try	{	pImage	= HPDF_LoadPngImageFromFile (m_pPDF, SG_STR_SGTOMB(FileName));	}	catch(...)	{}
-		}
-		else if( SG_File_Cmp_Extension(FileName, SG_T("jpg")) )
-		{
-	try	{	pImage	= HPDF_LoadJpegImageFromFile(m_pPDF, SG_STR_SGTOMB(FileName));	}	catch(...)	{}
-		}
-	}
-
-	//-----------------------------------------------------
-	if( pImage && (nx = HPDF_Image_GetWidth(pImage)) > 0 && (ny = HPDF_Image_GetHeight(pImage)) > 0 )
-	{
-		if( bKeepRatio )
-		{
-			_Fit_Rectangle(x, y, dx, dy, nx / ny, true);
-		}
-
-		HPDF_Page_DrawImage(m_pPage, pImage, (float)x, (float)y, (float)dx, (float)dy);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Image(const CSG_Rect &r, const SG_Char *FileName)
-{
-	return( Draw_Image(r.Get_XMin(), r.Get_YMin(), r.Get_XRange(), r.Get_YRange(), FileName) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Graticule(const CSG_Rect &r, const CSG_Rect &rWorld, int Size)
-{
-	if( Is_Ready_To_Draw() )
-	{
-		CSG_Rect	rRuler, rFrame(r);
-
-		rFrame.Inflate(Size, false);
-
-		Draw_Rectangle(rFrame, PDF_STYLE_POLYGON_STROKE);
-		Draw_Rectangle(r     , PDF_STYLE_POLYGON_STROKE);
-
-		rRuler.Assign(r.Get_XMin(), r.Get_YMax(), r.Get_XMax(), rFrame.Get_YMax());
-		_Draw_Ruler(rRuler, rWorld.Get_XMin(), rWorld.Get_XMax()  , true , true , false);
-
-		rRuler.Assign(r.Get_XMin(), r.Get_YMin(), r.Get_XMax(), rFrame.Get_YMin());
-		_Draw_Ruler(rRuler, 0.0              , rWorld.Get_XRange(), true , true , true);
-
-		rRuler.Assign(r.Get_XMin(), r.Get_YMin(), rFrame.Get_XMin(), r.Get_YMax());
-		_Draw_Ruler(rRuler, rWorld.Get_YMin(), rWorld.Get_YMax()  , false, false, false);
-
-		rRuler.Assign(r.Get_XMax(), r.Get_YMin(), rFrame.Get_XMax(), r.Get_YMax());
-		_Draw_Ruler(rRuler, 0.0              , rWorld.Get_YRange(), false, false, true);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-#define RULER_TEXT_SPACE	4
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::_Draw_Ruler(const CSG_Rect &r, double zMin, double zMax, bool bHorizontal, bool bAscendent, bool bTickAtTop)
-{
-	int			Decimals, FontSize;
-	double		xOff, yOff, Width, Height, Height_Tick, z, dz, zToDC, zDC, zPos, tPos;
-	CSG_String	s;
-
-	//-----------------------------------------------------
-	Width	= bHorizontal ? r.Get_XRange() : r.Get_YRange();
-	Height	= bHorizontal ? r.Get_YRange() : r.Get_XRange();
-
-	if( Is_Ready_To_Draw() && zMin < zMax && Width > 0 && Height > 0 )
-	{
-		xOff		= r.Get_XMin();
-		yOff		= r.Get_YMax();
-
-		FontSize	= (int)(0.45 * (double)Height);
-		HPDF_Page_SetFontAndSize(m_pPage, _Get_Font(PDF_FONT_DEFAULT), (float)FontSize);
-
-		Height_Tick	= (int)(0.3 * (double)Height);
-
-		//-------------------------------------------------
-		zToDC		= (double)Width / (zMax - zMin);
-
-		dz			= pow(10.0, floor(log10(zMax - zMin)) - 1.0);
-		Decimals	= dz >= 1.0 ? 0 : (int)fabs(log10(dz));
-
-		s.Printf(SG_T("%.*f"), Decimals, zMax);
-		zDC			= HPDF_Page_TextWidth(m_pPage, SG_STR_SGTOMB(s));
-		while( zToDC * dz < zDC + RULER_TEXT_SPACE )
-		{
-			dz	*= 2;
-		}
-
-		//-------------------------------------------------
-		z			= dz * floor(zMin / dz);
-		if( z < zMin )	z	+= dz;
-
-		for(; z<=zMax; z+=dz)
-		{
-			s.Printf(SG_T("%.*f"), Decimals, z);
-
-			zDC	= bAscendent ? zToDC * (z - zMin) : Width - zToDC * (z - zMin);
-
-			if( bHorizontal )
-			{
-				zPos	= xOff + zDC;
-
-				if( bTickAtTop )
-				{
-					tPos	= yOff;
-					Draw_Line(zPos, tPos - Height_Tick, zPos, yOff);
-					Draw_Text(zPos, tPos - Height_Tick, s, FontSize, PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_TOP, 0.0);
-				}
-				else
-				{
-					tPos	= yOff - Height;
-					Draw_Line(zPos, tPos + Height_Tick, zPos, tPos);
-					Draw_Text(zPos, tPos + Height_Tick, s, FontSize, PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_BOTTOM, 0.0);
-				}
-			}
-			else
-			{
-				zPos	= yOff - zDC;
-
-				if( bTickAtTop )
-				{
-					tPos	= xOff;
-					Draw_Line(tPos + Height_Tick, zPos, tPos, zPos);
-					Draw_Text(tPos + Height_Tick, zPos, s, FontSize, PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_TOP, M_DEG_TO_RAD * 90.0);
-				}
-				else
-				{
-					tPos	= xOff + Height;
-					Draw_Line(tPos - Height_Tick, zPos, tPos, zPos);
-					Draw_Text(tPos - Height_Tick, zPos, s, FontSize, PDF_STYLE_TEXT_ALIGN_H_CENTER|PDF_STYLE_TEXT_ALIGN_V_BOTTOM, M_DEG_TO_RAD * 90.0);
-				}
-			}
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::_Draw_Table(CSG_Rect r, CSG_Table *pTable, int iRecord, int nRecords, double CellHeight, double HeaderHeightRel)
-{
-	int				iField, dyFont, dyFont_Hdr;
-	double			xPos, yPos, dxPos, dyPos, dyPos_Hdr, xSpace, ySpace, ySpace_Hdr;
-	bool			bAddHeader;
-	CSG_Table_Record	*pRecord;
-
-	if( pTable && pTable->is_Valid() && iRecord < pTable->Get_Record_Count() )
-	{
-	//	Draw_Text(r.Get_XMin(), r.Get_YMax(), pTable->Get_Name(), 16);	// the table's name should not be drawn here...
-
-		dxPos		= r.Get_XRange() / pTable->Get_Field_Count();
-
-		if( HeaderHeightRel < 1.0 )
-			HeaderHeightRel	= 1.0;
-
-		dyPos		= CellHeight > 0.0 ? CellHeight : r.Get_YRange() / (nRecords + HeaderHeightRel);
-		dyPos_Hdr	= dyPos * HeaderHeightRel;
-
-		dyFont		= (int)(0.75 * dyPos);
-		dyFont_Hdr	= (int)(0.75 * dyPos_Hdr);
-
-		ySpace		= 0.1 * dyPos;
-		ySpace_Hdr	= 0.1 * dyPos_Hdr;
-		xSpace		= ySpace;
-
-		nRecords	+= iRecord;
-
-		if( nRecords > pTable->Get_Record_Count() )
-		{
-			nRecords	= pTable->Get_Record_Count();
-		}
-
-		//-------------------------------------------------
-		for(yPos=r.Get_YMax(), bAddHeader=true; iRecord<nRecords; iRecord++, yPos-=dyPos)
-		{
-			if( yPos < r.Get_YMin() - dyPos )
-			{
-				Add_Page();
-
-				yPos		= r.Get_YMax();
-				bAddHeader	= true;
-			}
-
-			if( bAddHeader )
-			{
-				for(iField=0, xPos=r.Get_XMin(); iField<pTable->Get_Field_Count(); iField++, xPos+=dxPos)
-				{
-					Draw_Rectangle(xPos, yPos, xPos + dxPos, yPos - dyPos_Hdr, PDF_STYLE_POLYGON_FILLSTROKE, SG_COLOR_GREY_LIGHT, SG_COLOR_BLACK, 0);
-					Draw_Text(xPos + xSpace, yPos - ySpace_Hdr, pTable->Get_Field_Name(iField), dyFont_Hdr, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP);
-				}
-
-				yPos		-= dyPos_Hdr;
-				bAddHeader	= false;
-			}
-
-			//---------------------------------------------
-			pRecord	= pTable->Get_Record(iRecord);
-
-			for(iField=0, xPos=r.Get_XMin(); iField<pTable->Get_Field_Count(); iField++, xPos+=dxPos)
-			{
-				Draw_Rectangle(xPos, yPos, xPos + dxPos, yPos - dyPos, PDF_STYLE_POLYGON_STROKE, SG_COLOR_WHITE, SG_COLOR_BLACK, 0);
-				Draw_Text(xPos + xSpace, yPos - ySpace, pRecord->asString(iField), dyFont, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP);
-			}
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Table(const CSG_Rect &r, CSG_Table *pTable, double CellHeight, double HeaderHeightRel)
-{
-	if( pTable && pTable->is_Valid() )
-	{
-		return( _Draw_Table(r, pTable, 0, pTable->Get_Record_Count(), CellHeight, HeaderHeightRel) );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Table(const CSG_Rect &r, CSG_Table *pTable, int nColumns, double CellHeight, double HeaderHeightRel)
-{
-	if( pTable && pTable->is_Valid() && nColumns > 1 )
-	{
-		int			nRecords;
-		double		dx, dxSpace;
-		CSG_Rect	rColumn(r), rTable(r);
-
-		dxSpace		= 4;
-		rTable.Inflate(dxSpace, 0.0, false);
-		dx			= rTable.Get_XRange() / (double)nColumns;
-		nRecords	= pTable->Get_Record_Count() / nColumns;
-
-		for(int i=0, iRecord=0; i<nColumns; i++, iRecord+=nRecords)
-		{
-			rColumn.m_rect.xMin	= rTable.Get_XMin() + (i + 0) * dx + dxSpace;
-			rColumn.m_rect.xMax	= rTable.Get_XMin() + (i + 1) * dx - dxSpace;
-
-			_Draw_Table(rColumn, pTable, iRecord, nRecords, CellHeight, HeaderHeightRel);
-		}
-
-		return( true );
-	}
-
-	return( Draw_Table(r, pTable, CellHeight, HeaderHeightRel) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::_Draw_Shape(CSG_Rect r, CSG_Shape *pShape, double xMin, double yMin, double World2PDF, int Style, int Fill_Color, int Line_Color, int Line_Width, int Point_Width)
-{
-	if( pShape && pShape->is_Valid() )
-	{
-		int			iPart, iPoint;
-		TSG_Point	Point;
-		CSG_Points	Points;
-
-		for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
-		{
-			Points.Clear();
-
-			for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
-			{
-				Point	= pShape->Get_Point(iPoint, iPart);
-				Point.x	= r.Get_XMin() + World2PDF * (Point.x - xMin);
-				Point.y	= r.Get_YMin() + World2PDF * (Point.y - yMin);
-				Points.Add(Point.x, Point.y);
-			}
-
-			switch( pShape->Get_Type() )
-			{
-			case SHAPE_TYPE_Point:
-			case SHAPE_TYPE_Points:
-				for(iPoint=0; iPoint<Points.Get_Count(); iPoint++)
-				{
-					Draw_Point(Points[iPoint].x, Points[iPoint].y, Point_Width, Style, Fill_Color, Line_Color, Line_Width);
-				}
-				break;
-
-			case SHAPE_TYPE_Line:
-				Draw_Line(Points, Line_Width, Line_Color, Style);
-				break;
-
-			case SHAPE_TYPE_Polygon:
-				if( ((CSG_Shape_Polygon *)pShape)->is_Lake(iPart) )
-				{
-					Draw_Polygon(Points, PDF_STYLE_POLYGON_FILLSTROKE, SG_COLOR_WHITE, Line_Color, Line_Width);
-				}
-				else
-				{
-					Draw_Polygon(Points, Style, Fill_Color, Line_Color, Line_Width);
-				}
-				break;
-			}
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Shape(const CSG_Rect &r, CSG_Shape *pShape, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld)
-{
-	double		World2PDF;
-	CSG_Rect	rWorld, rFit;
-
-	if( pShape && pShape->is_Valid() && r.Get_XRange() > 0.0 && r.Get_YRange() > 0.0 )
-	{
-		rWorld	= prWorld ? *prWorld : pShape->Get_Extent();
-
-		if( rWorld.Get_XRange() > 0.0 && rWorld.Get_YRange() > 0.0 )
-		{
-			_Fit_Rectangle(rFit = r, rWorld.Get_XRange() / rWorld.Get_YRange(), true);
-
-			World2PDF	= rFit.Get_XRange() / rWorld.Get_XRange();
-
-			_Draw_Shape(rFit, pShape, rWorld.Get_XMin(), rWorld.Get_YMin(), World2PDF, Style, Fill_Color, Line_Color, Line_Width, Line_Width);
-
-			return( true );
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Shapes(const CSG_Rect &r, CSG_Shapes *pShapes, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld)
-{
-	double		World2PDF;
-	CSG_Rect	rWorld, rFit;
-
-	if( pShapes && pShapes->is_Valid() && r.Get_XRange() > 0.0 && r.Get_YRange() > 0.0 )
-	{
-		rWorld	= prWorld ? *prWorld : pShapes->Get_Extent();
-
-		if( rWorld.Get_XRange() > 0.0 && rWorld.Get_YRange() > 0.0 )
-		{
-			_Fit_Rectangle(rFit = r, rWorld.Get_XRange() / rWorld.Get_YRange(), true);
-
-			World2PDF	= rFit.Get_XRange() / rWorld.Get_XRange();
-
-			for(int iShape=0; iShape<pShapes->Get_Count(); iShape++)
-			{
-				_Draw_Shape(rFit, pShapes->Get_Shape(iShape), rWorld.Get_XMin(), rWorld.Get_YMin(), World2PDF, Style, Fill_Color, Line_Color, Line_Width, Line_Width);
-			}
-
-			return( true );
-		}
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Doc_PDF::Draw_Grid(const CSG_Rect &r, CSG_Grid *pGrid, const CSG_Colors &Colors, double zMin, double zMax, int Style, CSG_Rect *prWorld)
-{
-	double		x, y, z, d, xFit, yFit, dFit;
-	CSG_Rect	rWorld, rFit;
-
-	if( Is_Ready_To_Draw() && pGrid && pGrid->is_Valid() && pGrid->Get_ZRange() > 0.0 )
-	{
-		rWorld	= prWorld ? *prWorld : pGrid->Get_Extent();
-
-		if( rWorld.Get_XRange() > 0.0 && rWorld.Get_YRange() > 0.0 )
-		{
-			_Fit_Rectangle(rFit = r, rWorld.Get_XRange() / rWorld.Get_YRange(), true);
-
-			dFit	= 1.0;
-			d		= dFit * (rWorld.Get_XRange() / rFit.Get_XRange());
-
-			if( zMin >= zMax )
-			{
-				zMin	= pGrid->Get_ZMin();
-				zMax	= pGrid->Get_ZMax();
-			}
-
-			zMax	= Colors.Get_Count() / (zMax - zMin);
-
-			for(y=rWorld.Get_YMin(), yFit=rFit.Get_YMin(); yFit<rFit.Get_YMax() && y<pGrid->Get_Extent().Get_YMax(); y++, yFit+=dFit, y+=d)
-			{
-				for(x=rWorld.Get_XMin(), xFit=rFit.Get_XMin(); xFit<rFit.Get_XMax() && x<pGrid->Get_Extent().Get_XMax(); x++, xFit+=dFit, x+=d)
-				{
-					if( pGrid->Get_Value(x, y, z) )
-					{
-						Draw_Point(xFit, yFit, dFit, PDF_STYLE_POINT_SQUARE|PDF_STYLE_POLYGON_FILL, Colors.Get_Color((int)(zMax * (z - zMin))));
-					}
-				}
-			}
-
-			return( true );
-		}
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSG_Doc_PDF::Draw_Curve(CSG_Points &Data, const CSG_Rect &r, int iGraphType)
-{
-/*
-	int i;
-    int iMag;
-	int iNumLines;
-	int iNumData;
-    float fMinLine = 0;
-	float fWidth;
-	float fMax, fMin;
-	float fStep;
-    float fX, fY;
-	float fMaxX, fMinX;
-	float fOffsetX;
-	CSG_String sValue;
-	CSG_Points Points;
-
-	fMin = fMax = Data[0].y;
-
-	for (i = 0; i < Data.Get_Count(); i++)
-	{
-		if (Data[i].y > fMax)
-		{
-			fMax = Data[i].y;
-		}
-		if (Data[i].y < fMin)
-		{
-			fMin = Data[i].y;
-		}
-		if (iGraphType == PDF_GRAPH_TYPE_BARS){
-			fMin = M_GET_MIN(0, fMin);
-		}
-    }
-
-	if (fMin != fMax){
-		iMag = (int) (log(fMax - fMin) / log(10.0));
-		fStep = (float) ((int) pow(10.0, (double) iMag));
-		if (fStep == 0)
-		{
-			fStep = 1.;
-		}
-		if (fMin < 0) 
-		{
-			iMag = (int) (log(fabs(fMin)) / log(10.0));
-			fMinLine = -(int) pow(10.0, (double) iMag);
-		}
-		else 
-		{
-			fMinLine=(int)(((int)(fMin/fStep)) *fStep);
-		}
-
-		iNumLines = (int) ((fMax - fMin) / fStep);
-
-		while (iNumLines < 8) 
-		{
-			fStep = fStep / 2.0;
-			iNumLines = (int) ((fMax - fMin) / fStep);
-		}
-		iNumLines = (int) ((fMax - fMinLine) / fStep);
-	}
-	else{
-		if (fMin > 0)
-		{
-			fStep = fMin = 0;
-			iNumLines = 1;
-			fMinLine = fMax;
-		}
-		else if (fMin < 0)
-		{
-			fStep = 0;
-			fMin = fMin - 1;
-			fMinLine = fMax;
-		}
-		else
-		{
-			return;
-		}		
-	}
-
-	for (i = 0; i < iNumLines; i++) 
-	{
-        fY = r.Get_YMax() - ((fMinLine + fStep * i - fMin) / (fMax - fMin)) * r.Get_YRange();
-        if (fY <= r.Get_YMax() && fY >= r.Get_YMin()) 
-		{
-			fY = HPDF_Page_Height() - fY;
-        }
-    }
-
-	if (iGraphType == PDF_GRAPH_TYPE_BARS)
-	{
-		fWidth = (float) r.Get_XRange() / (float) (Data.Get_Count());
-	    for (i = 0; i < Data.Get_Count(); i++)
-		{
-	        fX = r.Get_XMin() + i * fWidth;
-			fY = r.Get_YMax();
-			fY = HPDF_Page_Height() - fY;
-			Draw_Rectangle(fX, fY, fX + fWidth,
-					fY - r.Get_YRange() * ((Data[i].y - fMin) / (fMax - fMin)),
-					PDF_STYLE_POLYGON_FILLSTROKE, 0x660000);
-	    }
-	}
-	else
-	{
-		fWidth = (float) r.Get_XRange() / (float) (Data.Get_Count() - 1);
-		fY = r.Get_YMin() + r.Get_YRange()
-				- r.Get_YRange() * ((Data[0].y - fMin) / (fMax - fMin));
-		fY = HPDF_Page_Height() - fY;
-		Points.Add(r.Get_XMin(), fY);
-		for (i = 1; i < Data.Get_Count(); i++)
-		{
-			fY = r.Get_YMin() + r.Get_YRange()
-					- r.Get_YRange() * ((Data[i].y - fMin) / (fMax - fMin));
-			fY = HPDF_Page_Height() - fY;
-			Points.Add(r.Get_XMin() + i * fWidth, fY);
-	    }
-		Draw_Line(Points, 3, 0x660000);
-	}
-
-    fMaxX = Data[Data.Get_Count() - 1].x;
-    fMinX = Data[0].x;
-
-	if (fMaxX != fMinX)
-	{
-		iMag = (int) (log(fMaxX - fMinX) / log(10.0));
-		fStep = (float) pow(10.0, (double) iMag);
-
-		iNumData = (int) ((fMaxX-fMinX) / fStep);
-
-		while (iNumData < 3)
-		{
-			fStep = fStep / 2.0;
-			iNumData = (int) ((fMaxX-fMinX) / fStep);
-		}
-		fMinLine = (int)(((int)(fMinX/fStep)) * fStep);
-		while (fMinLine<fMinX)
-		{
-			fMinLine+=fStep;
-		}
-		fOffsetX = fMinX-fMinLine;
-
-		fY = HPDF_Page_Height() - r.Get_YMin() - r.Get_YRange();
-		for (i = 0; i < iNumData; i++)
-		{
-			fX = r.Get_XMin() + ((fStep * (float) i-fOffsetX) / (fMaxX-fMinX)) * r.Get_XRange();
-			if (fX >= r.Get_XMin() && fX < r.Get_XMin() + r.Get_XRange()){
-				if (fabs(fStep * (float)i +fMinLine) > 100000)
-				{
-					sValue = SG_Get_String(fStep * (float)i +fMinLine);
-				}
-				else
-				{
-					sValue = SG_Get_String(fStep * (float)i + fMinLine, 2, true);
-				}
-				Draw_Text(fX, fY, sValue, 9, PDF_STYLE_TEXT_ALIGN_H_RIGHT);
-				Draw_Line(fX, fY, fX, fY - 10, 1);
-			}
-		}
-    }
-
-	Draw_Line(r.Get_XMin(), HPDF_Page_Height() - r.Get_YMin(),
-			r.Get_XMin(), HPDF_Page_Height() - r.Get_YMax(), 4);
-	Draw_Line(r.Get_XMin(), HPDF_Page_Height() - r.Get_YMax(),
-			r.Get_XMax(), HPDF_Page_Height() - r.Get_YMax(), 4);
-*/
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#else // #ifndef _SAGA_DONOTUSE_HARU
-
-#include "doc_pdf.h"
-
-//---------------------------------------------------------
-const SG_Char * CSG_Doc_PDF::Get_Version(void)											{	return( NULL );	}
-CSG_Doc_PDF::CSG_Doc_PDF(void)															{	m_pPDF	= NULL;	}
-CSG_Doc_PDF::CSG_Doc_PDF(TSG_PDF_Page_Size Size, int Orientation, const SG_Char *Title)	{	m_pPDF	= NULL;	}
-CSG_Doc_PDF::~CSG_Doc_PDF(void)															{}
-void CSG_Doc_PDF::Layout_Set_Box_Space(double Space, bool bPercent)						{}
-void CSG_Doc_PDF::_Layout_Set_Boxes(void)												{}
-void CSG_Doc_PDF::_Layout_Set_Box(int iBox)												{}
-double CSG_Doc_PDF::Get_Page_To_Meter(void)												{	return( 1.0 );	}
-struct _HPDF_Dict_Rec * CSG_Doc_PDF::_Get_Font(TSG_PDF_Font_Type Font)					{	return( NULL );	}
-const CSG_Rect & CSG_Doc_PDF::Layout_Get_Box(const SG_Char *ID)							{	return( m_Size_Margins );	}
-TSG_PDF_Title_Level CSG_Doc_PDF::_Get_Lowest_Outline_Level(void)						{	return( PDF_TITLE_NONE );	}
-bool CSG_Doc_PDF::Open(const SG_Char *Title)											{	return( false );	}
-bool CSG_Doc_PDF::Open(TSG_PDF_Page_Size Size, int Orientation, const SG_Char *Title)	{	return( false );	}
-bool CSG_Doc_PDF::Close(void)															{	return( false );	}
-bool CSG_Doc_PDF::Save(const SG_Char *FileName)											{	return( false );	}
-bool CSG_Doc_PDF::Layout_Add_Box(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const SG_Char *ID)	{	return( false );	}
-bool CSG_Doc_PDF::Layout_Add_Box(const CSG_Rect &Box_Percent, const SG_Char *ID)														{	return( false );	}
-bool CSG_Doc_PDF::_Fit_Rectangle(double &x, double &y, double &dx, double &dy, double XToY_Ratio, bool bShrink)							{	return( false );	}
-bool CSG_Doc_PDF::_Fit_Rectangle(CSG_Rect &r, double XToY_Ratio, bool bShrink)															{	return( false );	}
-bool CSG_Doc_PDF::_Add_Outline_Item(const SG_Char *Title, struct _HPDF_Dict_Rec *pPage, TSG_PDF_Title_Level Level)						{	return( false );	}
-bool CSG_Doc_PDF::Add_Outline_Item(const SG_Char *Title)																				{	return( false );	}
-bool CSG_Doc_PDF::Add_Page(void)																																						{	return( false );	}
-bool CSG_Doc_PDF::Add_Page(TSG_PDF_Page_Size Size, int Orientation)																														{	return( false );	}
-bool CSG_Doc_PDF::Add_Page(double Width, double Height)																																{	return( false );	}
-bool CSG_Doc_PDF::Set_Size_Page(TSG_PDF_Page_Size Size, int Orientation)																													{	return( false );	}
-bool CSG_Doc_PDF::Set_Size_Page(double Width, double Height)																															{	return( false );	}
-bool CSG_Doc_PDF::Add_Page_Title(const SG_Char *Title, TSG_PDF_Title_Level Level, TSG_PDF_Page_Size Size, int Orientation)																		{	return( false );	}
-bool CSG_Doc_PDF::_Set_Style_FillStroke(int Style, int Fill_Color, int Line_Color, int Line_Width)																					{	return( false );	}
-bool CSG_Doc_PDF::Draw_Point(double x, double y, double Width, int Style, int Fill_Color, int Line_Color, int Line_Width)																{	return( false );	}
-bool CSG_Doc_PDF::Draw_Line(double xa, double ya, double xb, double yb, int Width, int Color, int Style)																				{	return( false );	}
-bool CSG_Doc_PDF::Draw_Line(CSG_Points &Points, int Width, int Color, int Style)																									{	return( false );	}
-bool CSG_Doc_PDF::Draw_Rectangle(double xa, double ya, double xb, double yb, int Style, int Fill_Color, int Line_Color, int Line_Width)												{	return( false );	}
-bool CSG_Doc_PDF::Draw_Rectangle(const CSG_Rect &r, int Style, int Fill_Color, int Line_Color, int Line_Width)																		{	return( false );	}
-bool CSG_Doc_PDF::Draw_Polygon(CSG_Points &Points, int Style, int Fill_Color, int Line_Color, int Line_Width)																		{	return( false );	}
-bool CSG_Doc_PDF::Draw_Text(double x, double y, CSG_Strings &Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)												{	return( false );	}
-bool CSG_Doc_PDF::Draw_Text(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)													{	return( false );	}
-bool CSG_Doc_PDF::_Draw_Text(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font)													{	return( false );	}
-bool CSG_Doc_PDF::Draw_Image(double x, double y, double dx, double dy, const SG_Char *FileName)																							{	return( false );	}
-bool CSG_Doc_PDF::Draw_Image(const CSG_Rect &r, const SG_Char *FileName)																												{	return( false );	}
-bool CSG_Doc_PDF::Draw_Graticule(const CSG_Rect &r, const CSG_Rect &rWorld, int Size)																								{	return( false );	}
-bool CSG_Doc_PDF::_Draw_Ruler(const CSG_Rect &r, double zMin, double zMax, bool bHorizontal, bool bAscendent, bool bTickAtTop)														{	return( false );	}
-bool CSG_Doc_PDF::_Draw_Table(CSG_Rect r, CSG_Table *pTable, int iRecord, int nRecords, double CellHeight, double HeaderHeightRel)														{	return( false );	}
-bool CSG_Doc_PDF::Draw_Table(const CSG_Rect &r, CSG_Table *pTable, double CellHeight, double HeaderHeightRel)																			{	return( false );	}
-bool CSG_Doc_PDF::Draw_Table(const CSG_Rect &r, CSG_Table *pTable, int nColumns, double CellHeight, double HeaderHeightRel)																{	return( false );	}
-bool CSG_Doc_PDF::_Draw_Shape(CSG_Rect r, CSG_Shape *pShape, double xMin, double yMin, double World2PDF, int Style, int Fill_Color, int Line_Color, int Line_Width, int Point_Width)	{	return( false );	}
-bool CSG_Doc_PDF::Draw_Shape(const CSG_Rect &r, CSG_Shape *pShape, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld)										{	return( false );	}
-bool CSG_Doc_PDF::Draw_Shapes(const CSG_Rect &r, CSG_Shapes *pShapes, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld)									{	return( false );	}
-bool CSG_Doc_PDF::Draw_Grid(const CSG_Rect &r, CSG_Grid *pGrid, const CSG_Colors &Colors, double zMin, double zMax, int Style, CSG_Rect *prWorld)											{	return( false );	}
-void CSG_Doc_PDF::Draw_Curve(CSG_Points &Data, const CSG_Rect &r, int iGraphType)	{}
-
-#endif	// #else // #ifndef _SAGA_DONOTUSE_HARU
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifdef _SAGA_UNICODE
-
-bool CSG_Doc_PDF::Layout_Add_Box(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const char *ID)
-{	return( Layout_Add_Box(xMin_Percent, yMin_Percent, xMax_Percent, yMax_Percent, SG_STR_MBTOSG(ID)) );	}
-
-bool CSG_Doc_PDF::Layout_Add_Box(const CSG_Rect &Box_Percent, const char *ID)
-{	return( Layout_Add_Box(Box_Percent, SG_STR_MBTOSG(ID)) );	}
-
-const CSG_Rect & CSG_Doc_PDF::Layout_Get_Box(const char *ID)
-{	return( Layout_Get_Box(SG_STR_MBTOSG(ID)) );	}
-
-#endif
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
diff --git a/src/saga_core/saga_api/doc_pdf.h b/src/saga_core/saga_api/doc_pdf.h
deleted file mode 100644
index 693641a..0000000
--- a/src/saga_core/saga_api/doc_pdf.h
+++ /dev/null
@@ -1,299 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                      doc_pdf.h                        //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//              Victor Olaya, Olaf Conrad                //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__SAGA_API__doc_pdf_H
-#define HEADER_INCLUDED__SAGA_API__doc_pdf_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "shapes.h"
-#include "grid.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define PDF_TABLE_CELL_HEIGHT_DEFAULT		20.0
-#define PDF_TABLE_HEADER_HEIGHT				40.0
-
-//---------------------------------------------------------
-#define PDF_PAGE_ORIENTATION_PREVIOUS		-1
-#define PDF_PAGE_ORIENTATION_PORTRAIT		0
-#define PDF_PAGE_ORIENTATION_LANDSCAPE		1
-
-//---------------------------------------------------------
-#define PDF_STYLE_POINT_CIRCLE				0x00000001
-#define PDF_STYLE_POINT_SQUARE				0x00000002
-
-#define PDF_STYLE_LINE_END_BUTT				0x00000004
-#define PDF_STYLE_LINE_END_ROUND			0x00000008
-#define PDF_STYLE_LINE_END_SQUARE			0x00000010
-#define PDF_STYLE_LINE_JOIN_MITER			0x00000020
-#define PDF_STYLE_LINE_JOIN_ROUND			0x00000040
-#define PDF_STYLE_LINE_JOIN_BEVEL			0x00000080
-
-#define PDF_STYLE_POLYGON_STROKE			0x00000100
-#define PDF_STYLE_POLYGON_FILL				0x00000200
-#define PDF_STYLE_POLYGON_FILLSTROKE		(PDF_STYLE_POLYGON_STROKE|PDF_STYLE_POLYGON_FILL)
-
-//---------------------------------------------------------
-#define PDF_STYLE_TEXT_ALIGN_H_LEFT			0x00000001
-#define PDF_STYLE_TEXT_ALIGN_H_CENTER		0x00000002
-#define PDF_STYLE_TEXT_ALIGN_H_RIGHT		0x00000004
-
-#define PDF_STYLE_TEXT_ALIGN_V_TOP			0x00000008
-#define PDF_STYLE_TEXT_ALIGN_V_CENTER		0x00000010
-#define PDF_STYLE_TEXT_ALIGN_V_BOTTOM		0x00000020
-
-#define PDF_STYLE_TEXT_UNDERLINE			0x00000040
-#define PDF_STYLE_TEXT_STROKE				0x00000080
-
-//----------------------------------------------------------
-#define PDF_GRAPH_TYPE_BARS					1
-#define PDF_GRAPH_TYPE_LINES				2
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-typedef enum ESG_PDF_Font_Type
-{
-	PDF_FONT_DEFAULT	= 0,
-	PDF_FONT_Helvetica	= 0,
-	PDF_FONT_Helvetica_Bold,
-	PDF_FONT_Helvetica_Oblique,
-	PDF_FONT_Helvetica_BoldOblique,
-	PDF_FONT_Times_Roman,
-	PDF_FONT_Times_Bold,
-	PDF_FONT_Times_Italic,
-	PDF_FONT_Times_BoldItalic,
-	PDF_FONT_Courier,
-	PDF_FONT_Courier_Bold,
-	PDF_FONT_Courier_Oblique,
-	PDF_FONT_Courier_BoldOblique,
-	PDF_FONT_Symbol,
-	PDF_FONT_ZapfDingbats
-}
-TSG_PDF_Font_Type;
-
-//---------------------------------------------------------
-typedef enum ESG_PDF_Page_Size
-{
-	PDF_PAGE_SIZE_A4		= 1,
-	PDF_PAGE_SIZE_A3,
-	PDF_PAGE_SIZE_PREVIOUS
-}
-TSG_PDF_Page_Size;
-
-//---------------------------------------------------------
-typedef enum ESG_PDF_Title_Level
-{
-	PDF_TITLE	= 0,
-	PDF_TITLE_01,
-	PDF_TITLE_02,
-	PDF_TITLE_NONE
-}
-TSG_PDF_Title_Level;
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class SAGA_API_DLL_EXPORT CSG_Doc_PDF
-{
-public:
-	CSG_Doc_PDF(void);
-	CSG_Doc_PDF(TSG_PDF_Page_Size Size, int Orientation = PDF_PAGE_ORIENTATION_PORTRAIT, const SG_Char *Title = NULL);
-	virtual ~CSG_Doc_PDF(void);
-
-	static const SG_Char *		Get_Version					(void);
-
-	bool						Open						(TSG_PDF_Page_Size Size = PDF_PAGE_SIZE_A4, int Orientation = PDF_PAGE_ORIENTATION_PORTRAIT, const SG_Char *Title = NULL);
-	bool						Open						(const SG_Char *Title);
-	bool						Close						(void);
-
-	bool						Save						(const SG_Char *FileName);
-
-	bool						Is_Open						(void)	{	return( m_pPDF != NULL );	}
-	bool						Is_Ready_To_Draw			(void)	{	return( m_pPDF != NULL );	}
-
-	static double				Get_Page_To_Meter			(void);
-
-	bool						Add_Page					(void);
-	bool						Add_Page					(TSG_PDF_Page_Size Size, int Orientation = PDF_PAGE_ORIENTATION_PORTRAIT);
-	bool						Add_Page					(double Width, double Height);
-
-	bool						Add_Page_Title				(const SG_Char *Title, TSG_PDF_Title_Level Level = PDF_TITLE, TSG_PDF_Page_Size Size = PDF_PAGE_SIZE_PREVIOUS, int Orientation = PDF_PAGE_ORIENTATION_PREVIOUS);
-	bool						Add_Outline_Item			(const SG_Char *Title);
-
-	bool						Set_Size_Page				(TSG_PDF_Page_Size Size, int Orientation = PDF_PAGE_ORIENTATION_PORTRAIT);
-	bool						Set_Size_Page				(double Width, double Height);
-	const CSG_Rect &			Get_Size_Page				(void)	{	return( m_Size_Paper );		}
-	const CSG_Rect &			Get_Margins					(void)	{	return( m_Size_Margins );	}
-
-	void						Layout_Set_Box_Space		(double Space, bool bPercent);
-	bool						Layout_Add_Box				(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const SG_Char *ID = NULL);
-	bool						Layout_Add_Box				(const CSG_Rect &Box_Percent, const SG_Char *ID = NULL);
-	const CSG_Rect &			Layout_Get_Box				(int iBox)	{	return( iBox >= 0 && iBox < m_Boxes.Get_Count() ? m_Boxes[iBox] : m_Size_Margins );	}
-	const CSG_Rect &			Layout_Get_Box				(const SG_Char *ID);
-#ifdef _SAGA_UNICODE
-	bool						Layout_Add_Box				(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const char *ID);
-	bool						Layout_Add_Box				(const CSG_Rect &Box_Percent, const char *ID);
-	const CSG_Rect &			Layout_Get_Box				(const char *ID);
-#endif
-
-	bool						Draw_Point					(double x, double y, double Width, int Style = PDF_STYLE_POINT_SQUARE|PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_WHITE, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0);
-	bool						Draw_Line					(double xa, double ya, double xb, double yb	, int Width = 0, int Color = SG_COLOR_BLACK, int Style = 0);
-	bool						Draw_Line					(CSG_Points &Points							, int Width = 0, int Color = SG_COLOR_BLACK, int Style = 0);
-	bool						Draw_Rectangle				(double xa, double ya, double xb, double yb	, int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_WHITE, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0);
-	bool						Draw_Rectangle				(const CSG_Rect &r							, int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_WHITE, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0);
-	bool						Draw_Polygon				(CSG_Points &Points							, int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0);
-	bool						Draw_Text					(double x, double y, const SG_Char   *Text, int Size, int Style = PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP, double Angle = 0.0, int Color = SG_COLOR_BLACK, TSG_PDF_Font_Type Font = PDF_FONT_DEFAULT);
-	bool						Draw_Text					(double x, double y, CSG_Strings  &Text, int Size, int Style = PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP, double Angle = 0.0, int Color = SG_COLOR_BLACK, TSG_PDF_Font_Type Font = PDF_FONT_DEFAULT);
-	bool						Draw_Image					(double x, double y, double dx, double dy	, const SG_Char *FileName);
-	bool						Draw_Image					(const CSG_Rect &r							, const SG_Char *FileName);
-
-	bool						Draw_Graticule				(const CSG_Rect &r, const CSG_Rect &rWorld, int Size = 10);
-	void						Draw_Curve					(CSG_Points &Data, const CSG_Rect &r, int iGraphType);
-
-	bool						Draw_Table					(const CSG_Rect &r, CSG_Table *pTable					, double CellHeight = 0.0, double HeaderHeightRel = 1.5);
-	bool						Draw_Table					(const CSG_Rect &r, CSG_Table *pTable, int nColumns	, double CellHeight = 0.0, double HeaderHeightRel = 1.5);
-
-	bool						Draw_Shape					(const CSG_Rect &r, CSG_Shape  *pShape , int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0, CSG_Rect *prWorld = NULL);
-	bool						Draw_Shapes					(const CSG_Rect &r, CSG_Shapes *pShapes, int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0, CSG_Rect *prWorld = NULL);
-
-	bool						Draw_Grid					(const CSG_Rect &r, CSG_Grid *pGrid, const CSG_Colors &Colors, double zMin = 0.0, double zMax = 0.0, int Style = 0, CSG_Rect *prWorld = NULL);
-
-
-protected:
-
-	bool						_Fit_Rectangle				(double &x, double &y, double &dx, double &dy, double XToY_Ratio, bool bShrink);
-	bool						_Fit_Rectangle				(CSG_Rect &r, double XToY_Ratio, bool bShrink);
-
-	bool						_Add_Outline_Item			(const SG_Char *Title, struct _HPDF_Dict_Rec *pPage, TSG_PDF_Title_Level Level = PDF_TITLE);
-
-	bool						_Draw_Ruler					(const CSG_Rect &r, double zMin, double zMax, bool bHorizontal, bool bAscendent, bool bTickAtTop);
-	bool						_Draw_Text					(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font);
-	bool						_Draw_Table					(CSG_Rect r, CSG_Table *pTable, int iRecord, int nRecords, double CellHeight, double HeaderHeightRel);
-	bool						_Draw_Shape					(CSG_Rect r, CSG_Shape *pShape, double xMin, double yMin, double World2PDF, int Style = PDF_STYLE_POLYGON_FILLSTROKE, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, int Line_Width = 0, int Point_Width = 5);
-
-	TSG_PDF_Title_Level			_Get_Lowest_Outline_Level	(void);
-
-
-private:
-
-	bool						m_Boxes_Space_bPercent;
-
-	int							m_nPages;
-
-	double						m_Boxes_Space;
-
-	CSG_Rect					m_Size_Paper, m_Size_Margins;
-
-	CSG_Rects					m_Boxes_Percent, m_Boxes;
-
-	CSG_Strings					m_Boxes_ID;
-
-	struct _HPDF_Doc_Rec		*m_pPDF;
-
-	struct _HPDF_Dict_Rec		*m_pPage;
-
-	struct _HPDF_Dict_Rec		*m_pOutline_Last_Level_0, *m_pOutline_Last_Level_1, *m_pOutline_Last_Level_2;
-
-
-	struct _HPDF_Dict_Rec *		_Get_Font					(TSG_PDF_Font_Type Font);
-
-	void						_Layout_Set_Boxes			(void);
-	void						_Layout_Set_Box				(int iBox);
-
-	bool						_Set_Style_FillStroke		(int Style, int Fill_Color, int Line_Color, int Line_Width);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__SAGA_API__doc_pdf_H
diff --git a/src/saga_core/saga_api/doc_svg.cpp b/src/saga_core/saga_api/doc_svg.cpp
deleted file mode 100644
index 515dd88..0000000
--- a/src/saga_core/saga_api/doc_svg.cpp
+++ /dev/null
@@ -1,398 +0,0 @@
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     doc_svg.cpp                       //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//                      Victor Olaya                     //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "doc_svg.h"
-#include <time.h>
-
-//---------------------------------------------------------
-#define SVG_CODE_OPENING_1	SG_T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n")\
-							SG_T("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" ")\
-							SG_T("\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n")\
-							SG_T("<svg version=\"1.1\" width=\"")
-
-#define SVG_CODE_OPENING_2	SG_T("\"\n xmlns=\"http://www.w3.org/2000/svg\">\n")
-
-#define SVG_CODE_CLOSING	SG_T("</svg>")
-
-//---------------------------------------------------------
-const SG_Char *g_Unit	= SG_T("");
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Doc_SVG::CSG_Doc_SVG(){}
-
-CSG_Doc_SVG::~CSG_Doc_SVG(){}
-
-void CSG_Doc_SVG::Open(int iWidth, int iHeight)
-{
-
-	m_sSVGCode.Append(SVG_CODE_OPENING_1);
-	m_sSVGCode.Append(SG_Get_String(iWidth,0));
-	m_sSVGCode.Append(SG_T("\" height=\""));
-	m_sSVGCode.Append(SG_Get_String(iHeight,0));
-	m_sSVGCode.Append(SVG_CODE_OPENING_2);
-
-	m_iWidth = iWidth;
-	m_iHeight = iHeight;
-
-}
-
-bool CSG_Doc_SVG::Save(const SG_Char *Filename)
-{
-
-	m_sSVGCode.Append(SVG_CODE_CLOSING);
-
-	CSG_File	Stream(Filename, SG_FILE_W, false);
-
-	if( Stream.is_Open() )
-	{
-		Stream.Printf(SG_T("%s"), m_sSVGCode.c_str());
-		return true;
-	}
-	
-	return false;
-
-}
-
-void CSG_Doc_SVG::_AddAttribute(const SG_Char *Attribute, 
-							   const SG_Char *Value)
-{
-
-		m_sSVGCode.Append(Attribute);
-		m_sSVGCode.Append(SG_T("=\""));
-		m_sSVGCode.Append(Value);
-		m_sSVGCode.Append(SG_T("\" "));		
-
-}
-
-void CSG_Doc_SVG::_AddAttribute(const SG_Char *Attribute, 
-							   int iValue)
-{
-
-	_AddAttribute(Attribute, SG_Get_String(iValue, 0));
-}
-
-void CSG_Doc_SVG::_AddAttribute(const SG_Char *Attribute, 
-							   double dValue)
-{
-
-	_AddAttribute(Attribute, SG_Get_String(dValue, 2));
-
-}
-
-void CSG_Doc_SVG::Draw_Circle(double x, 
-							 double y, 
-							 double Radius, 
-							 int Fill_Color, 
-							 int Line_Color, 
-							 double Line_Width)
-{
-	
-	CSG_String sWidth;
-
-	m_sSVGCode.Append(SG_T("<circle "));
-	_AddAttribute(SG_T("cx"), x);
-	_AddAttribute(SG_T("cy"), y);
-	_AddAttribute(SG_T("r"), Radius);
-	sWidth.Append(SG_Get_String(Line_Width,2));
-	sWidth.Append(g_Unit);
-	_AddAttribute(SG_T("stroke-width"), sWidth);
-	_AddAttribute(SG_T("stroke"), _Get_SVGColor(Line_Color));
-	_AddAttribute(SG_T("fill"), _Get_SVGColor(Fill_Color));
-	m_sSVGCode.Append(SG_T("/>\n"));
-
-}
-
-void CSG_Doc_SVG::Draw_LinkedCircle(double x, 
-								 double y, 
-								 double Radius, 
-								 const SG_Char *Link,
-								 int Fill_Color, 
-								 int Line_Color, 
-								 double Line_Width)
-{
-	
-	CSG_String sWidth;
-	CSG_String sLink;
-
-	m_sSVGCode.Append(SG_T("<circle "));
-	_AddAttribute(SG_T("cx"), x);
-	_AddAttribute(SG_T("cy"), y);
-	_AddAttribute(SG_T("r"), Radius);
-	sWidth.Append(SG_Get_String(Line_Width,2));
-	sWidth.Append(g_Unit);
-	_AddAttribute(SG_T("stroke-width"), sWidth);
-	_AddAttribute(SG_T("stroke"), _Get_SVGColor(Line_Color));
-	_AddAttribute(SG_T("fill"), _Get_SVGColor(Fill_Color));
-	sLink = SG_T("window.open('");
-	sLink.Append(Link);
-	sLink.Append(SG_T("')"));
-	_AddAttribute(SG_T("onclick"), sLink);
-	m_sSVGCode.Append(SG_T("/>\n"));
-
-}
-
-void CSG_Doc_SVG::Draw_Line(double xa, 
-						   double ya, 
-						   double xb, 
-						   double yb, 
-						   double Width, 
-						   int Color)
-{
-
-	CSG_String sWidth;
-
-	m_sSVGCode.Append(SG_T("<line "));
-	_AddAttribute(SG_T("x1"), xa);
-	_AddAttribute(SG_T("x2"), xb);
-	_AddAttribute(SG_T("y1"), ya);
-	_AddAttribute(SG_T("y2"), yb);
-	sWidth.Append(SG_Get_String(Width,2));
-	sWidth.Append(g_Unit);
-	_AddAttribute(SG_T("stroke-width"), sWidth);	_AddAttribute(SG_T("stroke"), _Get_SVGColor(Color));
-	m_sSVGCode.Append(SG_T("/>\n"));
-
-}
-
-void CSG_Doc_SVG::Draw_Line(CSG_Points &Points, 
-						   double Width, 
-						   int Color)
-{
-	int i;
-	CSG_String sPoints;
-	CSG_String sWidth;
-	
-	for (i = 0; i < Points.Get_Count(); i++)
-	{
-		sPoints.Append(SG_Get_String(Points.Get_X(i),2));
-		sPoints.Append(SG_T(","));
-		sPoints.Append(SG_Get_String(Points.Get_Y(i),2));
-		sPoints.Append(SG_T(" "));
-	}
-	m_sSVGCode.Append(SG_T("<polyline "));
-	_AddAttribute(SG_T("points"), sPoints);	
-	sWidth.Append(SG_Get_String(Width,2));
-	sWidth.Append(g_Unit);
-	_AddAttribute(SG_T("stroke-width"), sWidth);
-	_AddAttribute(SG_T("stroke"), _Get_SVGColor(Color));
-	_AddAttribute(SG_T("fill"), SG_T("none"));
-	m_sSVGCode.Append(SG_T("/>\n"));
-
-}
-
-void CSG_Doc_SVG::Draw_Rectangle(double xa, 
-								double ya, 
-								double xb, 
-								double yb, 
-								int Fill_Color, 
-								int Line_Color, 
-								double Line_Width)
-{
-	CSG_Points	Points;
-
-	Points.Add(xa, ya);
-	Points.Add(xb, ya);
-	Points.Add(xb, yb);
-	Points.Add(xa, yb);
-
-	Draw_Polygon(Points, Fill_Color, Line_Color, Line_Width);
-}
-
-void CSG_Doc_SVG::Draw_Rectangle(const CSG_Rect &r, 
-								int Fill_Color, 
-								int Line_Color, 
-								double Line_Width)
-{
-	Draw_Rectangle(r.Get_XMin(), r.Get_YMin(), r.Get_XMax(), r.Get_YMax(), Fill_Color, Line_Color, Line_Width) ;
-}
-
-void CSG_Doc_SVG::Draw_Polygon(CSG_Points &Points, 
-							  int Fill_Color, 
-							  int Line_Color, 
-							  double Line_Width)
-{
-	if( Points.Get_Count() > 2 )
-	{
-		int i;
-		CSG_String sPoints;
-		CSG_String sWidth;
-		
-		for (i = 0; i < Points.Get_Count(); i++)
-		{
-			sPoints.Append(SG_Get_String(Points.Get_X(i),2));
-			sPoints.Append(SG_T(","));
-			sPoints.Append(SG_Get_String(Points.Get_Y(i),2));
-			sPoints.Append(SG_T(" "));
-		}
-		m_sSVGCode.Append(SG_T("<polygon "));
-		_AddAttribute(SG_T("points"), sPoints);
-		sWidth.Append(SG_Get_String(Line_Width,2));
-		sWidth.Append(g_Unit);
-		_AddAttribute(SG_T("stroke-width"), sWidth);				
-		_AddAttribute(SG_T("stroke"), _Get_SVGColor(Line_Color));
-		_AddAttribute(SG_T("fill"), _Get_SVGColor(Fill_Color));
-		m_sSVGCode.Append(SG_T("/>\n"));
-	}
-}
-
-void CSG_Doc_SVG::Draw_LinkedPolygon(CSG_Points &Points, 
-							  const SG_Char* Link,
-							  int Fill_Color, 
-							  int Line_Color, 
-							  double Line_Width)
-{
-	if( Points.Get_Count() > 2 )
-	{
-		int i;
-		CSG_String sPoints;
-		CSG_String sWidth;
-		CSG_String sLink;
-		
-		for (i = 0; i < Points.Get_Count(); i++)
-		{
-			sPoints.Append(SG_Get_String(Points.Get_X(i),2));
-			sPoints.Append(SG_T(","));
-			sPoints.Append(SG_Get_String(Points.Get_Y(i),2));
-			sPoints.Append(SG_T(" "));
-		}
-		m_sSVGCode.Append(SG_T("<polygon "));
-		_AddAttribute(SG_T("points"), sPoints);
-		sWidth.Append(SG_Get_String(Line_Width,2));
-		sWidth.Append(g_Unit);
-		_AddAttribute(SG_T("stroke-width"), sWidth);				
-		_AddAttribute(SG_T("stroke"), _Get_SVGColor(Line_Color));
-		_AddAttribute(SG_T("fill"), _Get_SVGColor(Fill_Color));
-		sLink = SG_T("window.open('");
-		sLink.Append(Link);
-		sLink.Append(SG_T("')"));
-		_AddAttribute(SG_T("onclick"), sLink);
-		m_sSVGCode.Append(SG_T("/>\n"));
-	}
-}
-
-void CSG_Doc_SVG::Draw_Text(double x, 
-						 double y, 
-						 const SG_Char *Text, 
-						 int Color, 
-						 const SG_Char* Font, 
-						 double dSize,
-						 TSG_SVG_Alignment iAlignment)
-{
-
-	CSG_String sAlignments[] = {SG_T(""), SG_T("middle"), SG_T("end")};
-	CSG_String sSize;
-	
-	sSize.Append(SG_Get_String(dSize,2));
-	sSize.Append(g_Unit);
-	
-	m_sSVGCode.Append(SG_T("<text "));
-	_AddAttribute(SG_T("x"), x);	
-	_AddAttribute(SG_T("y"), y);
-	_AddAttribute(SG_T("font-family"), Font);
-	_AddAttribute(SG_T("fill"), _Get_SVGColor(Color));
-	_AddAttribute(SG_T("font-size"), sSize);
-	_AddAttribute(SG_T("text-anchor"), sAlignments[iAlignment]);
-	m_sSVGCode.Append(SG_T(">\n"));
-	m_sSVGCode.Append(Text);
-	m_sSVGCode.Append(SG_T("</text>"));
-
-}
-
-CSG_String CSG_Doc_SVG::_Get_SVGColor(int iColor)
-{
-
-	CSG_String s;
-
-	if (iColor == SG_COLOR_NONE)
-	{
-		return SG_T("none");
-	}
-	else if (iColor == SG_COLOR_RANDOM)
-	{
-		s.Append(SG_T("rgb("));
-		s.Append(SG_Get_String((int)(255.0 * (double)rand() / (double)RAND_MAX),0));
-		s.Append(SG_T(","));
-		s.Append(SG_Get_String((int)(255.0 * (double)rand() / (double)RAND_MAX),0));
-		s.Append(SG_T(","));
-		s.Append(SG_Get_String((int)(255.0 * (double)rand() / (double)RAND_MAX),0));
-		s.Append(SG_T(")"));
-
-		return s;
-	}
-	else
-	{
-		s.Append(SG_T("rgb("));
-		s.Append(SG_Get_String(SG_GET_R(iColor),0));
-		s.Append(SG_T(","));
-		s.Append(SG_Get_String(SG_GET_G(iColor),0));
-		s.Append(SG_T(","));
-		s.Append(SG_Get_String(SG_GET_B(iColor),0));
-		s.Append(SG_T(")"));
-
-		return s;
-	}
-
-}
diff --git a/src/saga_core/saga_api/doc_svg.h b/src/saga_core/saga_api/doc_svg.h
deleted file mode 100644
index 014192c..0000000
--- a/src/saga_core/saga_api/doc_svg.h
+++ /dev/null
@@ -1,142 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                      doc_svg.h                        //
-//                                                       //
-//                 Copyright (C) 2005 by                 //
-//                     Victor Olaya                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__SAGA_API__doc_svg_H
-#define HEADER_INCLUDED__SAGA_API__doc_svg_H
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "geo_tools.h"
-#include "api_core.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-typedef enum ESG_SVG_Alignment
-{
-	SVG_ALIGNMENT_Left	= 0,
-	SVG_ALIGNMENT_Center,
-	SVG_ALIGNMENT_Right
-}
-TSG_SVG_Alignment;
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class SAGA_API_DLL_EXPORT CSG_Doc_SVG
-{
-public:
-	CSG_Doc_SVG(void);
-	virtual ~CSG_Doc_SVG(void);
-
-	void						Open						(int iWidth, int iHeight);
-	bool						Save						(const SG_Char *FileName);
-
-	void						Draw_Line					(double xa, double ya, double xb, double yb	, double Width = 1., int Color = SG_COLOR_BLACK);
-	void						Draw_Line					(CSG_Points &Points							, double Width = 1., int Color = SG_COLOR_BLACK);
-	void						Draw_Rectangle				(double xa, double ya, double xb, double yb	, int Fill_Color = SG_COLOR_WHITE, int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
-	void						Draw_Rectangle				(const CSG_Rect &r							, int Fill_Color = SG_COLOR_WHITE, int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
-	void						Draw_Polygon				(CSG_Points &Points							, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
-	void						Draw_LinkedPolygon			(CSG_Points &Points, const SG_Char *Link	, int Fill_Color = SG_COLOR_GREEN, int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
-	void						Draw_Circle					(double x, double y, double Radius			, int Fill_Color = SG_COLOR_RED  , int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
-	void						Draw_LinkedCircle			(double x, double y, double Radius, const SG_Char *Link, int Fill_Color = SG_COLOR_RED  , int Line_Color = SG_COLOR_BLACK, double Line_Width = 1.);
-
-	void						Draw_Text					(double x, double y,  const SG_Char *Text, int iColor, const SG_Char* Font, double dSize, TSG_SVG_Alignment Alignment = SVG_ALIGNMENT_Center);
-
-protected:
-
-	CSG_String					m_sSVGCode;
-	void						_AddAttribute				(const SG_Char *Attribute, const SG_Char *Value);
-	void						_AddAttribute				(const SG_Char *Attribute, int Value);
-	void						_AddAttribute				(const SG_Char *Attribute, double Value);
-	CSG_String					_Get_SVGColor				(int iColor);
-
-private:
-	
-	int							m_iWidth, m_iHeight;
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif //#ifndef HEADER_INCLUDED__SAGA_API__doc_svg_H
diff --git a/src/saga_core/saga_api/geo_tools.h b/src/saga_core/saga_api/geo_tools.h
index 1ca9a1e..321b964 100644
--- a/src/saga_core/saga_api/geo_tools.h
+++ b/src/saga_core/saga_api/geo_tools.h
@@ -633,19 +633,23 @@ SAGA_API_DLL_EXPORT CSG_String	SG_Get_Projection_Type_Name	(TSG_Projection_Type
 //---------------------------------------------------------
 class SAGA_API_DLL_EXPORT CSG_Projection
 {
+	friend class CSG_Projections;
+
 public:
 	CSG_Projection(void);
 	virtual ~CSG_Projection(void);
 
+	void							Destroy					(void);
+
 									CSG_Projection			(const CSG_Projection &Projection);
 	bool							Create					(const CSG_Projection &Projection);
 	bool							Assign					(const CSG_Projection &Projection);
 	CSG_Projection &				operator =				(const CSG_Projection &Projection)	{	Assign(Projection);	return( *this );	}
 
-									CSG_Projection			(int EPSG_SRID);
-	bool							Create					(int EPSG_SRID);
-	bool							Assign					(int EPSG_SRID);
-	CSG_Projection &				operator =				(int EPSG_SRID)						{	Assign(EPSG_SRID);	return( *this );	}
+									CSG_Projection			(int EPSG_ID);
+	bool							Create					(int EPSG_ID);
+	bool							Assign					(int EPSG_ID);
+	CSG_Projection &				operator =				(int EPSG_ID)						{	Assign(EPSG_ID);	return( *this );	}
 
 									CSG_Projection			(const CSG_String &Projection, TSG_Projection_Format Format = SG_PROJ_FMT_WKT);
 	bool							Create					(const CSG_String &Projection, TSG_Projection_Format Format = SG_PROJ_FMT_WKT);
@@ -654,18 +658,23 @@ public:
 
 	bool							is_Okay					(void)	const	{	return( m_Type != SG_PROJ_TYPE_CS_Undefined );	}
 	bool							is_Equal				(const CSG_Projection &Projection)	const;
-	bool							operator ==				(const CSG_Projection &Projection)	const	{	return( is_Equal(Projection) );	}
+	bool							operator ==				(const CSG_Projection &Projection)	const	{	return( is_Equal(Projection) == true  );	}
+	bool							operator !=				(const CSG_Projection &Projection)	const	{	return( is_Equal(Projection) == false );	}
 
-	bool							Load					(const CSG_String &File_Name, TSG_Projection_Format Format);
-	bool							Save					(const CSG_String &File_Name, TSG_Projection_Format Format)	const;
+	bool							Load					(const CSG_String &File_Name, TSG_Projection_Format Format = SG_PROJ_FMT_WKT);
+	bool							Save					(const CSG_String &File_Name, TSG_Projection_Format Format = SG_PROJ_FMT_WKT)	const;
 
 	bool							Load					(const CSG_MetaData &Projection);
 	bool							Save					(      CSG_MetaData &Projection)	const;
 
-	const CSG_String &				Get_Name				(void)	const	{	return( m_Name  );	}
-	const CSG_String &				Get_WKT					(void)	const	{	return( m_WKT   );	}
-	const CSG_String &				Get_Proj4				(void)	const	{	return( m_Proj4 );	}
-	int								Get_EPSG				(void)	const	{	return( m_EPSG  );	}
+	const CSG_String &				Get_Name				(void)	const	{	return( m_Name          );	}
+	const CSG_String &				Get_WKT					(void)	const	{	return( m_WKT           );	}
+	const CSG_String &				Get_Proj4				(void)	const	{	return( m_Proj4         );	}
+	const CSG_String &				Get_Authority			(void)	const	{	return( m_Authority     );	}
+	int								Get_Authority_ID		(void)	const	{	return( m_Authority_ID  );	}
+	int								Get_EPSG				(void)	const	{	return( m_Authority.Cmp(SG_T("EPSG")) ? -1 : m_Authority_ID );	}
+
+	CSG_String						Get_Description			(void)	const;
 
 	TSG_Projection_Type				Get_Type				(void)	const	{	return( m_Type  );	}
 	CSG_String						Get_Type_Name			(void)	const	{	return( gSG_Projection_Type_Identifier[m_Type] );	}
@@ -674,20 +683,18 @@ public:
 
 private:
 
-	int								m_EPSG;
+	int								m_Authority_ID;
 
 	TSG_Projection_Type				m_Type;
 
-	CSG_String						m_Name, m_WKT, m_Proj4;
+	CSG_String						m_Name, m_WKT, m_Proj4, m_Authority;
 
 
-	void							_Reset					(void);
-
 };
 
 //---------------------------------------------------------
 /** CSG_Projections is a projections dictionary and translator
-  * for EPSG codes, OpenGIS Well-Known-Text, ESRI and Proj.4.
+  * for EPSG codes, OGc Well-Known-Text, and Proj.4.
 */
 //---------------------------------------------------------
 class SAGA_API_DLL_EXPORT CSG_Projections
@@ -696,40 +703,60 @@ public:
 	CSG_Projections(void);
 	virtual ~CSG_Projections(void);
 
-									CSG_Projections			(const CSG_String &File_Name);
-	bool							Create					(const CSG_String &File_Name);
-
-									CSG_Projections			(class CSG_Table *pProjections);
-	bool							Create					(class CSG_Table *pProjections);
+									CSG_Projections			(const CSG_String &File_DB);
+	bool							Create					(const CSG_String &File_DB);
 
 	void							Destroy					(void);
 
-	bool							Load					(const CSG_String &File_Name);
-	bool							Save					(const CSG_String &File_Name);
+	bool							Reset_Dictionary		(void);
+	bool							Load_Dictionary			(const CSG_String &File_Name);
+	bool							Save_Dictionary			(const CSG_String &File_Name);
 
-	bool							Add						(const CSG_Projection &Projection);
-	bool							Add						(int SRID, const SG_Char *Authority, const SG_Char *WKT, const SG_Char *Proj4);
+	bool							Load_DB					(const CSG_String &File_Name, bool bAppend = false);
+	bool							Save_DB					(const CSG_String &File_Name);
 
 	int								Get_Count				(void)	const;
-	const CSG_Projection &			Get_Projection			(int i)	const;
-	const CSG_Projection &			operator []				(int i) const;
 
-	bool							Get_Projection			(int EPSG, CSG_Projection &Projection)	const;
+	bool							Add						(const CSG_Projection &Projection);
+	bool							Add						(const SG_Char *WKT, const SG_Char *Proj4, const SG_Char *Authority, int Authority_ID);
+
+	CSG_Projection					Get_Projection			(int Index)	const;
+	CSG_Projection					operator []				(int Index) const	{	return( Get_Projection(Index) );	}
+
+	bool							Get_Projection			(CSG_Projection &Projection, int EPSG_ID)									const;
+	bool							Get_Projection			(CSG_Projection &Projection, const CSG_String &Authority, int Authority_ID)	const;
+
+	CSG_String						Get_Names_List			(TSG_Projection_Type Type = SG_PROJ_TYPE_CS_Undefined)	const;
+
+	static CSG_MetaData				WKT_to_MetaData			(const CSG_String &WKT);
 
-	CSG_String						Get_Names				(void)	const;
-	int								Get_SRID_byNamesIndex	(int i)	const;
+	bool							WKT_to_Proj4			(CSG_String &Proj4, const CSG_String &WKT  )	const;
+	bool							WKT_from_Proj4			(CSG_String &WKT  , const CSG_String &Proj4)	const;
 
-	static bool						WKT_to_Proj4			(CSG_String &Proj4, const CSG_String &WKT  );
-	static bool						WKT_from_Proj4			(CSG_String &WKT  , const CSG_String &Proj4);
+	bool							EPSG_to_Proj4			(CSG_String &Proj4, int EPSG_Code)				const;
+	bool							EPSG_to_WKT				(CSG_String &WKT  , int EPSG_Code)				const;
 
 
 private:
 
+	CSG_Translator					m_WKT_to_Proj4, m_Proj4_to_WKT, m_EPSG_to_Idx;
+
 	class CSG_Table					*m_pProjections;
 
 
 	void							_On_Construction		(void);
 
+	static bool						_WKT_to_MetaData		(CSG_MetaData &MetaData, const CSG_String &WKT);
+
+	bool							_Proj4_Read_Parameter		(CSG_String &Value, const CSG_String &Proj4, const CSG_String &Key)	const;
+	bool							_Proj4_Get_Ellipsoid		(CSG_String &Value, const CSG_String &Proj4)	const;
+	bool							_Proj4_Get_Datum			(CSG_String &Value, const CSG_String &Proj4)	const;
+	bool							_Proj4_Get_Prime_Meridian	(CSG_String &Value, const CSG_String &Proj4)	const;
+	bool							_Proj4_Get_Unit				(CSG_String &Value, const CSG_String &Proj4)	const;
+
+	bool							_Set_Dictionary				(CSG_Table      &Dictionary, int Direction);
+	bool							_Set_Dictionary				(CSG_Translator &Dictionary, int Direction);
+
 };
 
 //---------------------------------------------------------
diff --git a/src/saga_core/saga_api/grid.cpp b/src/saga_core/saga_api/grid.cpp
index fcbe906..e391240 100644
--- a/src/saga_core/saga_api/grid.cpp
+++ b/src/saga_core/saga_api/grid.cpp
@@ -1,1381 +1,1388 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                       grid.cpp                        //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "grid.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-BYTE	CSG_Grid::m_Bitmask[8]	= { 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80 };
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Grid * SG_Create_Grid(void)
-{
-	return( new CSG_Grid );
-}
-
-//---------------------------------------------------------
-CSG_Grid * SG_Create_Grid(const CSG_Grid &Grid)
-{
-	return( new CSG_Grid(Grid) );
-}
-
-//---------------------------------------------------------
-CSG_Grid * SG_Create_Grid(const CSG_String &File_Name, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
-{
-	return( new CSG_Grid(File_Name, Type, Memory_Type) );
-}
-
-//---------------------------------------------------------
-CSG_Grid * SG_Create_Grid(CSG_Grid *pGrid, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
-{
-	return( new CSG_Grid(pGrid, Type, Memory_Type) );
-}
-
-//---------------------------------------------------------
-CSG_Grid * SG_Create_Grid(const CSG_Grid_System &System, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
-{
-	return( new CSG_Grid(System, Type, Memory_Type) );
-}
-
-//---------------------------------------------------------
-CSG_Grid * SG_Create_Grid(TSG_Data_Type Type, int NX, int NY, double Cellsize, double xMin, double yMin, TSG_Grid_Memory_Type Memory_Type)
-{
-	return( new CSG_Grid(Type, NX, NY, Cellsize, xMin, yMin, Memory_Type) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-/**
-  * Default constructor.
-*/
-//---------------------------------------------------------
-CSG_Grid::CSG_Grid(void)
-	: CSG_Data_Object()
-{
-	_On_Construction();
-}
-
-//---------------------------------------------------------
-/**
-  * Copy constructor.
-*/
-//---------------------------------------------------------
-CSG_Grid::CSG_Grid(const CSG_Grid &Grid)
-	: CSG_Data_Object()
-{
-	_On_Construction();
-
-	Create(Grid);
-}
-
-//---------------------------------------------------------
-/**
-  * Create a grid from file.
-*/
-//---------------------------------------------------------
-CSG_Grid::CSG_Grid(const CSG_String &File_Name, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
-	: CSG_Data_Object()
-{
-	_On_Construction();
-
-	Create(File_Name, Type, Memory_Type);
-}
-
-//---------------------------------------------------------
-/**
-  * Create a grid similar to 'pGrid'.
-*/
-//---------------------------------------------------------
-CSG_Grid::CSG_Grid(CSG_Grid *pGrid, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
-	: CSG_Data_Object()
-{
-	_On_Construction();
-
-	Create(pGrid, Type, Memory_Type);
-}
-
-//---------------------------------------------------------
-/**
-  * Create a grid using 'System'.
-*/
-//---------------------------------------------------------
-CSG_Grid::CSG_Grid(const CSG_Grid_System &System, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
-	: CSG_Data_Object()
-{
-	_On_Construction();
-
-	Create(System, Type, Memory_Type);
-}
-
-//---------------------------------------------------------
-/**
-  * Create a grid with specified parameters.
-  * This constructor initializes the grid's data space with 'NX' x 'NY' cells of the size indicated by 'Type'.
-  * If 'DX/DY' are equal or less zero then both will be set to 1.0. 'xMin/yMin' specify the coordinates of the
-  * lower left corner of the grid.
-*/
-//---------------------------------------------------------
-CSG_Grid::CSG_Grid(TSG_Data_Type Type, int NX, int NY, double Cellsize, double xMin, double yMin, TSG_Grid_Memory_Type Memory_Type)
-	: CSG_Data_Object()
-{
-	_On_Construction();
-
-	Create(Type, NX, NY, Cellsize, xMin, yMin, Memory_Type);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSG_Grid::_On_Construction(void)
-{
-	m_bCreated			= false;
-
-	m_Type				= SG_DATATYPE_Undefined;
-	m_Memory_Type		= GRID_MEMORY_Normal;
-	m_Memory_bLock		= false;
-
-	m_Values			= NULL;
-
-	LineBuffer			= NULL;
-	LineBuffer_Count	= 5;
-
-	m_zFactor			= 1.0;
-
-	m_bIndexed			= false;
-	m_Index				= NULL;
-
-	Set_Update_Flag();
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Grid::Create(const CSG_Grid &Grid)
-{
-	if( Create((CSG_Grid *)&Grid, ((CSG_Grid *)&Grid)->Get_Type()) )
-	{
-		return( Assign((CSG_Data_Object *)&Grid) );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::Create(CSG_Grid *pGrid, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
-{
-	return( Create(Type, pGrid->Get_NX(), pGrid->Get_NY(), pGrid->Get_Cellsize(), pGrid->Get_XMin(), pGrid->Get_YMin(), Memory_Type) );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::Create(const CSG_Grid_System &System, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
-{
-	return( Create(Type, System.Get_NX(), System.Get_NY(), System.Get_Cellsize(), System.Get_XMin(), System.Get_YMin(), Memory_Type) );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::Create(const CSG_String &File_Name, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
-{
-	return( _Load(File_Name, Type, Memory_Type) );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::Create(TSG_Data_Type Type, int NX, int NY, double Cellsize, double xMin, double yMin, TSG_Grid_Memory_Type Memory_Type)
-{
-	Destroy();
-
-	_Set_Properties(Type, NX, NY, Cellsize, xMin, yMin);
-
-	if( _Memory_Create(Memory_Type) )
-	{
-		m_bCreated	= true;
-	}
-
-	return( m_bCreated );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//					Destruction							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-/**
-  * The destructor.
-*/
-CSG_Grid::~CSG_Grid(void)
-{
-	Destroy();
-}
-
-/**
-  * Destroys the data space of CSG_Grid.
-*/
-bool CSG_Grid::Destroy(void)
-{
-	_Memory_Destroy();
-
-	m_bCreated		= false;
-
-	m_Type			= SG_DATATYPE_Undefined;
-	m_Memory_Type	= GRID_MEMORY_Normal;
-
-	m_zFactor		= 1.0;
-
-	m_Description	.Clear();
-	m_Unit			.Clear();
-
-	m_System		.Assign(0.0, 0.0, 0.0, 0, 0);
-
-	return( CSG_Data_Object::Destroy() );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Header							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSG_Grid::_Set_Properties(TSG_Data_Type Type, int NX, int NY, double Cellsize, double xMin, double yMin)
-{
-	m_Type	= Type;
-
-	switch( m_Type )
-	{
-	case SG_DATATYPE_Bit:		Set_NoData_Value(          0.0);	break;
-	case SG_DATATYPE_Byte:		Set_NoData_Value(        255.0);	break;
-	case SG_DATATYPE_Char:		Set_NoData_Value(       -127.0);	break;
-	case SG_DATATYPE_Word:		Set_NoData_Value(      65535.0);	break;
-	case SG_DATATYPE_Short:		Set_NoData_Value(     -32767.0);	break;
-	case SG_DATATYPE_DWord:		Set_NoData_Value( 4294967295.0);	break;
-	case SG_DATATYPE_Int:		Set_NoData_Value(-2147483647.0);	break;
-	case SG_DATATYPE_ULong:		Set_NoData_Value( 4294967295.0);	break;
-	case SG_DATATYPE_Long:		Set_NoData_Value(-2147483647.0);	break;
-	case SG_DATATYPE_Float:		Set_NoData_Value(     -99999.0);	break;
-	case SG_DATATYPE_Double:	Set_NoData_Value(     -99999.0);	break;
-	case SG_DATATYPE_Color:		Set_NoData_Value( 4294967295.0);	break;
-
-	default:
-	m_Type = SG_DATATYPE_Float;	Set_NoData_Value(      -99999.0);	break;
-	}
-
-	m_System.Assign(Cellsize > 0.0 ? Cellsize : 1.0, xMin, yMin, NX, NY);
-
-	m_zStats.Invalidate();
-
-}
-
-//---------------------------------------------------------
-void CSG_Grid::Set_Description(const SG_Char *String)
-{
-	m_Description	= String ? String : SG_T("");
-}
-
-const SG_Char * CSG_Grid::Get_Description(void) const
-{
-	return( m_Description.c_str() );
-}
-
-//---------------------------------------------------------
-void CSG_Grid::Set_Unit(const SG_Char *String)
-{
-	m_Unit	= String ? String : SG_T("");
-}
-
-const SG_Char * CSG_Grid::Get_Unit(void) const
-{
-	return( m_Unit.c_str() );
-}
-
-//---------------------------------------------------------
-void CSG_Grid::Set_ZFactor(double Value)
-{
-	m_zFactor		= Value;
-}
-
-//---------------------------------------------------------
-double CSG_Grid::Get_ZFactor(void) const
-{
-	return( m_zFactor );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Checks							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Grid::is_Valid(void) const
-{
-	if(	m_System.is_Valid() && m_Type != SG_DATATYPE_Undefined )
-	{
-		switch( m_Memory_Type )
-		{
-		default:
-			return( m_Values != NULL );
-
-		case GRID_MEMORY_Cache:
-			return( Cache_Stream.is_Open() );
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-TSG_Intersection CSG_Grid::is_Intersecting(const CSG_Rect &Extent) const
-{
-	return( Get_Extent().Intersects(Extent.m_rect) );
-}
-
-TSG_Intersection CSG_Grid::is_Intersecting(const TSG_Rect &Extent) const
-{
-	return( Get_Extent().Intersects(Extent) );
-}
-
-TSG_Intersection CSG_Grid::is_Intersecting(double xMin, double yMin, double xMax, double yMax) const
-{
-	return( is_Intersecting(CSG_Rect(xMin, yMin, xMax, yMax)) );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::is_Compatible(CSG_Grid *pGrid) const
-{
-	return( pGrid && is_Compatible(pGrid->Get_System()) );
-}
-
-bool CSG_Grid::is_Compatible(const CSG_Grid_System &System) const
-{
-	return( m_System == System );
-}
-
-bool CSG_Grid::is_Compatible(int NX, int NY, double Cellsize, double xMin, double yMin) const
-{
-	return(	is_Compatible(CSG_Grid_System(Cellsize, xMin, yMin, NX, NY)) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//		Value access by Position (-> Interpolation)		 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-double CSG_Grid::Get_Value(TSG_Point Position, int Interpolation, bool bZFactor, bool bByteWise, bool bOnlyValidCells) const
-{
-	double	Value;
-
-	return( Get_Value(Position.x, Position.y, Value, Interpolation, bZFactor, bByteWise, bOnlyValidCells) ? Value : Get_NoData_Value() );
-}
-
-double CSG_Grid::Get_Value(double xPosition, double yPosition, int Interpolation, bool bZFactor, bool bByteWise, bool bOnlyValidCells) const
-{
-	double	Value;
-
-	return( Get_Value(xPosition, yPosition, Value, Interpolation, bZFactor, bByteWise, bOnlyValidCells) ? Value : Get_NoData_Value() );
-}
-
-bool CSG_Grid::Get_Value(TSG_Point Position, double &Value, int Interpolation, bool bZFactor, bool bByteWise, bool bOnlyValidCells) const
-{
-	return( Get_Value(Position.x, Position.y, Value, Interpolation, bZFactor, bByteWise, bOnlyValidCells) );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::Get_Value(double xPosition, double yPosition, double &Value, int Interpolation, bool bZFactor, bool bByteWise, bool bOnlyValidCells) const
-{
-	if(	m_System.Get_Extent_Cells().Contains(xPosition, yPosition) )
-	{
-		int		x	= (int)(xPosition	= (xPosition - Get_XMin()) / Get_Cellsize());
-		int		y	= (int)(yPosition	= (yPosition - Get_YMin()) / Get_Cellsize());
-
-		double	dx	= xPosition - x;
-		double	dy	= yPosition - y;
-
-		if( !bOnlyValidCells || is_InGrid(x + (int)(0.5 + dx), y + (int)(0.5 + dy)) )
-		{
-			switch( Interpolation )
-			{
-			case GRID_INTERPOLATION_NearestNeighbour:
-				Value	= _Get_ValAtPos_NearestNeighbour(x, y, dx, dy);
-				break;
-
-			case GRID_INTERPOLATION_Bilinear:
-				Value	= _Get_ValAtPos_BiLinear		(x, y, dx, dy, bByteWise);
-				break;
-
-			case GRID_INTERPOLATION_InverseDistance:
-				Value	= _Get_ValAtPos_InverseDistance	(x, y, dx, dy, bByteWise);
-				break;
-
-			case GRID_INTERPOLATION_BicubicSpline:
-				Value	= _Get_ValAtPos_BiCubicSpline	(x, y, dx, dy, bByteWise);
-				break;
-
-			default:
-			case GRID_INTERPOLATION_BSpline:
-				Value	= _Get_ValAtPos_BSpline			(x, y, dx, dy, bByteWise);
-				break;
-			}
-
-			if( !is_NoData_Value(Value) )
-			{
-				if( bZFactor )
-				{
-					Value	*= m_zFactor;
-				}
-
-				return( true );
-			}
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-inline double CSG_Grid::_Get_ValAtPos_NearestNeighbour(int x, int y, double dx, double dy) const
-{
-	x	+= (int)(0.5 + dx);
-	y	+= (int)(0.5 + dy);
-
-	if( is_InGrid(x, y) )
-	{
-		return( asDouble(x, y) );
-	}
-
-	return( Get_NoData_Value() );
-}
-
-//---------------------------------------------------------
-#define BILINEAR_ADD(ix, iy, d)			if( is_InGrid(ix, iy) ) { n += d;\
-											z += d * asDouble(ix, iy); }
-
-#define BILINEAR_ADD_BYTE(ix, iy, d)	if( is_InGrid(ix, iy) ) { n += d; v = asInt(ix, iy);\
-											z[0] += d * SG_GET_BYTE_0(v);\
-											z[1] += d * SG_GET_BYTE_1(v);\
-											z[2] += d * SG_GET_BYTE_2(v);\
-											z[3] += d * SG_GET_BYTE_3(v); }
-
-inline double CSG_Grid::_Get_ValAtPos_BiLinear(int x, int y, double dx, double dy, bool bByteWise) const
-{
-	if( !bByteWise )
-	{
-		double	z = 0.0, n = 0.0;
-
-		BILINEAR_ADD(x    , y    , (1.0 - dx) * (1.0 - dy));
-		BILINEAR_ADD(x + 1, y    , (      dx) * (1.0 - dy));
-		BILINEAR_ADD(x    , y + 1, (1.0 - dx) * (      dy));
-		BILINEAR_ADD(x + 1, y + 1, (      dx) * (      dy));
-
-		if( n > 0.0 )
-		{
-			return( z / n );
-		}
-	}
-	else
-	{
-		long	v;
-		double	z[4], n = 0.0;
-
-		z[0] = z[1] = z[2] = z[3] = 0.0;
-
-		BILINEAR_ADD_BYTE(x    , y    , (1.0 - dx) * (1.0 - dy));
-		BILINEAR_ADD_BYTE(x + 1, y    , (      dx) * (1.0 - dy));
-		BILINEAR_ADD_BYTE(x    , y + 1, (1.0 - dx) * (      dy));
-		BILINEAR_ADD_BYTE(x + 1, y + 1, (      dx) * (      dy));
-
-		if( n > 0.0 )
-		{
-			z[0]	/= n;
-			z[1]	/= n;
-			z[2]	/= n;
-			z[3]	/= n;
-
-			return( SG_GET_LONG(z[0], z[1], z[2], z[3]) );
-		}
-	}
-
-	return( Get_NoData_Value() );
-}
-
-//---------------------------------------------------------
-#define INVERSEDIST_ADD(ix, iy, dsx, dsy)		if( is_InGrid(ix, iy) ) { d = 1.0 / sqrt((dsx)*(dsx) + (dsy)*(dsy)); n += d;\
-													z += d * asDouble(ix, iy); }
-
-#define INVERSEDIST_ADD_BYTE(ix, iy, dsx, dsy)	if( is_InGrid(ix, iy) ) { d = 1.0 / sqrt((dsx)*(dsx) + (dsy)*(dsy)); n += d; v = asInt(ix, iy);\
-													z[0] += d * SG_GET_BYTE_0(v);\
-													z[1] += d * SG_GET_BYTE_1(v);\
-													z[2] += d * SG_GET_BYTE_2(v);\
-													z[3] += d * SG_GET_BYTE_3(v); }
-
-inline double CSG_Grid::_Get_ValAtPos_InverseDistance(int x, int y, double dx, double dy, bool bByteWise) const
-{
-	if( dx > 0.0 || dy > 0.0 )
-	{
-		if( !bByteWise )
-		{
-			double	z = 0.0, n = 0.0, d;
-
-			INVERSEDIST_ADD(x    , y    ,       dx,       dy);
-			INVERSEDIST_ADD(x + 1, y    , 1.0 - dx,       dy);
-			INVERSEDIST_ADD(x    , y + 1,       dx, 1.0 - dy);
-			INVERSEDIST_ADD(x + 1, y + 1, 1.0 - dx, 1.0 - dy);
-
-			if( n > 0.0 )
-			{
-				return( z / n );
-			}
-		}
-		else
-		{
-			long	v;
-			double	z[4], n = 0.0, d;
-
-			z[0] = z[1] = z[2] = z[3] = 0.0;
-
-			INVERSEDIST_ADD_BYTE(x    , y    ,       dx,       dy);
-			INVERSEDIST_ADD_BYTE(x + 1, y    , 1.0 - dx,       dy);
-			INVERSEDIST_ADD_BYTE(x    , y + 1,       dx, 1.0 - dy);
-			INVERSEDIST_ADD_BYTE(x + 1, y + 1, 1.0 - dx, 1.0 - dy);
-
-			if( n > 0.0 )
-			{
-				z[0]	/= n;
-				z[1]	/= n;
-				z[2]	/= n;
-				z[3]	/= n;
-
-				return( SG_GET_LONG(z[0], z[1], z[2], z[3]) );
-			}
-		}
-	}
-	else
-	{
-		return( asDouble(x, y) );
-	}
-
-	return( Get_NoData_Value() );
-}
-
-//---------------------------------------------------------
-inline double CSG_Grid::_Get_ValAtPos_BiCubicSpline(double dx, double dy, double z_xy[4][4]) const
-{
-	double	a0, a2, a3, b1, b2, b3, c[4];
-
-	for(int i=0; i<4; i++)
-	{
-		a0		= z_xy[0][i] - z_xy[1][i];
-		a2		= z_xy[2][i] - z_xy[1][i];
-		a3		= z_xy[3][i] - z_xy[1][i];
-
-		b1		= -a0 / 3.0 + a2       - a3 / 6.0;
-		b2		=  a0 / 2.0 + a2 / 2.0;
-		b3		= -a0 / 6.0 - a2 / 2.0 + a3 / 6.0;
-
-		c[i]	= z_xy[1][i] + b1 * dx + b2 * dx*dx + b3 * dx*dx*dx;
-	}
-
-	a0		= c[0] - c[1];
-	a2		= c[2] - c[1];
-	a3		= c[3] - c[1];
-
-	b1		= -a0 / 3.0 + a2       - a3 / 6.0;
-	b2		=  a0 / 2.0 + a2 / 2.0;
-	b3		= -a0 / 6.0 - a2 / 2.0 + a3 / 6.0;
-
-	return( c[1] + b1 * dy + b2 * dy*dy + b3 * dy*dy*dy );
-}
-
-inline double CSG_Grid::_Get_ValAtPos_BiCubicSpline(int x, int y, double dx, double dy, bool bByteWise) const
-{
-	if( !bByteWise )
-	{
-		double	z_xy[4][4];
-
-		if( _Get_ValAtPos_Fill4x4Submatrix(x, y, z_xy) )
-		{
-			return( _Get_ValAtPos_BiCubicSpline(dx, dy, z_xy) );
-		}
-	}
-	else
-	{
-		double	z_xy[4][4][4];
-
-		if( _Get_ValAtPos_Fill4x4Submatrix(x, y, z_xy) )
-		{
-			return( SG_GET_LONG(
-				_Get_ValAtPos_BiCubicSpline(dx, dy, z_xy[0]),
-				_Get_ValAtPos_BiCubicSpline(dx, dy, z_xy[1]),
-				_Get_ValAtPos_BiCubicSpline(dx, dy, z_xy[2]),
-				_Get_ValAtPos_BiCubicSpline(dx, dy, z_xy[3])
-			));
-		}
-	}
-
-	return( Get_NoData_Value() );
-}
-
-//---------------------------------------------------------
-inline double CSG_Grid::_Get_ValAtPos_BSpline(double dx, double dy, double z_xy[4][4]) const
-{
-	int		i, ix, iy;
-	double	z, px, py, Rx[4], Ry[4];
-
-	for(i=0, px=-1.0-dx, py=-1.0-dy; i<4; i++, px++, py++)
-	{
-		Rx[i]	= 0.0;
-		Ry[i]	= 0.0;
-
-		if( (z = px + 2.0) > 0.0 )
-			Rx[i]	+=        z*z*z;
-		if( (z = px + 1.0) > 0.0 )
-			Rx[i]	+= -4.0 * z*z*z;
-		if( (z = px + 0.0) > 0.0 )
-			Rx[i]	+=  6.0 * z*z*z;
-		if( (z = px - 1.0) > 0.0 )
-			Rx[i]	+= -4.0 * z*z*z;
-		if( (z = py + 2.0) > 0.0 )
-			Ry[i]	+=        z*z*z;
-		if( (z = py + 1.0) > 0.0 )
-			Ry[i]	+= -4.0 * z*z*z;
-		if( (z = py + 0.0) > 0.0 )
-			Ry[i]	+=  6.0 * z*z*z;
-		if( (z = py - 1.0) > 0.0 )
-			Ry[i]	+= -4.0 * z*z*z;
-
-		Rx[i]	/= 6.0;
-		Ry[i]	/= 6.0;
-	}
-
-	for(iy=0, z=0.0; iy<4; iy++)
-	{
-		for(ix=0; ix<4; ix++)
-		{
-			z	+= z_xy[ix][iy] * Rx[ix] * Ry[iy];
-		}
-	}
-
-	return( z );
-}
-
-inline double CSG_Grid::_Get_ValAtPos_BSpline(int x, int y, double dx, double dy, bool bByteWise) const
-{
-	if( !bByteWise )
-	{
-		double	z_xy[4][4];
-
-		if( _Get_ValAtPos_Fill4x4Submatrix(x, y, z_xy) )
-		{
-			return( _Get_ValAtPos_BSpline(dx, dy, z_xy) );
-		}
-	}
-	else
-	{
-		double	z_xy[4][4][4];
-
-		if( _Get_ValAtPos_Fill4x4Submatrix(x, y, z_xy) )
-		{
-			return( SG_GET_LONG(
-				_Get_ValAtPos_BSpline(dx, dy, z_xy[0]),
-				_Get_ValAtPos_BSpline(dx, dy, z_xy[1]),
-				_Get_ValAtPos_BSpline(dx, dy, z_xy[2]),
-				_Get_ValAtPos_BSpline(dx, dy, z_xy[3])
-			));
-		}
-	}
-
-	return( Get_NoData_Value() );
-}
-
-//---------------------------------------------------------
-inline bool CSG_Grid::_Get_ValAtPos_Fill4x4Submatrix(int x, int y, double z_xy[4][4]) const
-{
-	int		ix, iy, jx, jy, nNoData;
-
-	for(iy=0, jy=y-1, nNoData=0; iy<4; iy++, jy++)
-	{
-		for(ix=0, jx=x-1; ix<4; ix++, jx++)
-		{
-			if( is_InGrid(jx, jy) )
-			{
-				z_xy[ix][iy]	= asDouble(jx, jy);
-			}
-			else
-			{
-				z_xy[ix][iy]	= Get_NoData_Value();
-
-				nNoData++;
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	if( nNoData >= 16 )
-	{
-		return( false );
-	}
-
-	if( nNoData > 0 )
-	{
-		double	t_xy[4][4];
-
-		for(iy=0; iy<4; iy++)
-		{
-			for(ix=0; ix<4; ix++)
-			{
-				t_xy[ix][iy]	= z_xy[ix][iy];
-			}
-		}
-
-		do
-		{
-			for(iy=0; iy<4; iy++)
-			{
-				for(ix=0; ix<4; ix++)
-				{
-					if( is_NoData_Value(z_xy[ix][iy]) )
-					{
-						int		n	= 0;
-
-						for(jy=iy-1; jy<=iy+1; jy++)
-						{
-							if( jy >= 0 && jy < 4 )
-							{
-								for(jx=ix-1; jx<=ix+1; jx++)
-								{
-									if( jx >= 0 && jx < 4 && !(jx == ix && jy == iy) && !is_NoData_Value(z_xy[jx][jy]) )
-									{
-										if( n == 0 )
-										{
-											t_xy[ix][iy]	 = z_xy[jx][jy];
-										}
-										else
-										{
-											t_xy[ix][iy]	+= z_xy[jx][jy];
-										}
-
-										n++;
-									}
-								}
-							}
-						}
-
-						if( n > 0 )
-						{
-							if( n > 1 )
-							{
-								t_xy[ix][iy]	/= n;
-							}
-
-							nNoData--;
-						}
-					}
-				}
-			}
-
-			for(iy=0; iy<4; iy++)
-			{
-				for(ix=0; ix<4; ix++)
-				{
-					if( t_xy[ix][iy] != z_xy[ix][iy] )
-					{
-						z_xy[ix][iy]	= t_xy[ix][iy];
-					}
-				}
-			}
-		}
-		while( nNoData > 0 );
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-inline bool CSG_Grid::_Get_ValAtPos_Fill4x4Submatrix(int x, int y, double z_xy[4][4][4]) const
-{
-	int		ix, iy, jx, jy, nNoData;
-
-	for(iy=0, jy=y-1, nNoData=0; iy<4; iy++, jy++)
-	{
-		for(ix=0, jx=x-1; ix<4; ix++, jx++)
-		{
-			if( is_InGrid(jx, jy) )
-			{
-				int		v	= asInt(jx, jy);
-
-				z_xy[0][ix][iy]	= SG_GET_BYTE_0(v);
-				z_xy[1][ix][iy]	= SG_GET_BYTE_1(v);
-				z_xy[2][ix][iy]	= SG_GET_BYTE_2(v);
-				z_xy[3][ix][iy]	= SG_GET_BYTE_3(v);
-			}
-			else
-			{
-				z_xy[0][ix][iy]	= Get_NoData_Value();
-
-				nNoData++;
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	if( nNoData >= 16 )
-	{
-		return( false );
-	}
-
-	if( nNoData > 0 )
-	{
-		double	t_xy[4][4][4];
-
-		for(iy=0; iy<4; iy++)
-		{
-			for(ix=0; ix<4; ix++)
-			{
-				t_xy[0][ix][iy]	= z_xy[0][ix][iy];
-				t_xy[1][ix][iy]	= z_xy[1][ix][iy];
-				t_xy[2][ix][iy]	= z_xy[2][ix][iy];
-				t_xy[3][ix][iy]	= z_xy[3][ix][iy];
-			}
-		}
-
-		do
-		{
-			for(iy=0; iy<4; iy++)
-			{
-				for(ix=0; ix<4; ix++)
-				{
-					if( is_NoData_Value(z_xy[0][ix][iy]) )
-					{
-						int		n	= 0;
-
-						for(jy=iy-1; jy<=iy+1; jy++)
-						{
-							if( jy >= 0 && jy < 4 )
-							{
-								for(jx=ix-1; jx<=ix+1; jx++)
-								{
-									if( jx >= 0 && jx < 4 && !(jx == ix && jy == iy) && !is_NoData_Value(z_xy[0][jx][jy]) )
-									{
-										if( n == 0 )
-										{
-											t_xy[0][ix][iy]	 = z_xy[0][jx][jy];
-											t_xy[1][ix][iy]	 = z_xy[1][jx][jy];
-											t_xy[2][ix][iy]	 = z_xy[2][jx][jy];
-											t_xy[3][ix][iy]	 = z_xy[3][jx][jy];
-										}
-										else
-										{
-											t_xy[0][ix][iy]	+= z_xy[0][jx][jy];
-											t_xy[1][ix][iy]	+= z_xy[1][jx][jy];
-											t_xy[2][ix][iy]	+= z_xy[2][jx][jy];
-											t_xy[3][ix][iy]	+= z_xy[3][jx][jy];
-										}
-
-										n++;
-									}
-								}
-							}
-						}
-
-						if( n > 0 )
-						{
-							if( n > 1 )
-							{
-								t_xy[0][ix][iy]	/= n;
-								t_xy[1][ix][iy]	/= n;
-								t_xy[2][ix][iy]	/= n;
-								t_xy[3][ix][iy]	/= n;
-							}
-
-							nNoData--;
-						}
-					}
-				}
-			}
-
-			for(iy=0; iy<4; iy++)
-			{
-				for(ix=0; ix<4; ix++)
-				{
-					if( t_xy[0][ix][iy] != z_xy[0][ix][iy] )
-					{
-						z_xy[0][ix][iy]	= t_xy[0][ix][iy];
-						z_xy[1][ix][iy]	= t_xy[1][ix][iy];
-						z_xy[2][ix][iy]	= t_xy[2][ix][iy];
-						z_xy[3][ix][iy]	= t_xy[3][ix][iy];
-					}
-				}
-			}
-		}
-		while( nNoData > 0 );
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Statistics						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-double CSG_Grid::Get_ZMin(bool bZFactor)
-{
-	Update();	return( (bZFactor ? m_zFactor : 1.0) * m_zStats.Get_Minimum() );
-}
-
-double CSG_Grid::Get_ZMax(bool bZFactor)
-{
-	Update();	return( (bZFactor ? m_zFactor : 1.0) * m_zStats.Get_Maximum() );
-}
-
-double CSG_Grid::Get_ZRange(bool bZFactor)
-{
-	Update();	return( (bZFactor ? m_zFactor : 1.0) * m_zStats.Get_Range() );
-}
-
-double CSG_Grid::Get_ArithMean(bool bZFactor)
-{
-	Update();	return( (bZFactor ? m_zFactor : 1.0) * m_zStats.Get_Mean() );
-}
-
-double CSG_Grid::Get_StdDev(bool bZFactor)
-{
-	Update();	return( (bZFactor ? m_zFactor : 1.0) * m_zStats.Get_StdDev() );
-}
-
-double CSG_Grid::Get_Variance(void)
-{
-	Update();	return( m_zStats.Get_Variance() );
-}
-
-int CSG_Grid::Get_NoData_Count(void)
-{
-	Update();	return( Get_NCells() - m_zStats.Get_Count() );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::On_Update(void)
-{
-	if( is_Valid() )
-	{
-		m_zStats.Invalidate();
-
-		for(int y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
-		{
-			for(int x=0; x<Get_NX(); x++)
-			{
-				double	z	= asDouble(x, y);
-
-				if( !is_NoData_Value(z) )
-				{
-					m_zStats.Add_Value(z);
-				}
-			}
-		}
-
-		SG_UI_Process_Set_Ready();
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Index							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSG_Grid::Set_Value_And_Sort(long n, double Value)
-{
-	if( !m_bIndexed )
-	{
-		Set_Value(n, Value);
-
-		Set_Index(true);
-
-		return;
-	}
-
-	//-----------------------------------------------------
-	if( Value == asDouble(n) )
-		return;
-
-	long	i, j;
-
-	for(i=0, j=-1; i<Get_NCells() && j<0; i++)	// find index, could be faster...
-	{
-		if( n == m_Index[i] )
-		{
-			j	= i;
-		}
-	}
-
-	if( j > 0 )
-	{
-		if( Value < asDouble(n) )
-		{
-			for(i=j-1; i>=0; i--, j--)
-			{
-				if( Value < asDouble(m_Index[i]) )
-				{
-					m_Index[j]	= m_Index[i];
-				}
-				else
-				{
-					m_Index[j]	= n;
-					break;
-				}
-			}
-		}
-		else
-		{
-			for(i=j+1; i<Get_NCells(); i++, j++)
-			{
-				if( Value > asDouble(m_Index[i]) )
-				{
-					m_Index[j]	= m_Index[i];
-				}
-				else
-				{
-					m_Index[j]	= n;
-					break;
-				}
-			}
-		}
-
-		Set_Value(n, Value);
-
-		m_bIndexed	= true;
-	}
-}
-
-//---------------------------------------------------------
-void CSG_Grid::Set_Value_And_Sort(int x, int y, double Value)
-{
-	Set_Value_And_Sort(x + y * Get_NX(), Value);
-}
-
-//---------------------------------------------------------
-double CSG_Grid::Get_Percentile(double Percent, bool bZFactor)
-{
-	int		x, y;
-
-	if( Percent < 0.0 )
-	{
-		Percent	= 0.0;
-	}
-	else if( Percent > 100.0 )
-	{
-		Percent	= 100.0;
-	}
-
-	if( Get_Sorted((int)(Percent * Get_NCells() / 100.0), x, y, true) )
-	{
-		return( asDouble(x, y, bZFactor) );
-	}
-
-	return( 0.0 );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::Set_Index(bool bOn)
-{
-	if( bOn && !m_bIndexed && Get_NoData_Count() < Get_NCells() )
-	{
-		m_bIndexed	= true;
-
-		if( _Set_Index() == false )
-		{
-			Set_Index(false);
-
-			return( false );
-		}
-	}
-	else if( !bOn || Get_NoData_Count() >= Get_NCells() )
-	{
-		m_bIndexed	= false;
-
-		if( m_Index )
-		{
-			SG_Free(m_Index);
-			m_Index		= NULL;
-		}
-	}
-
-	return( m_bIndexed );
-}
-
-//---------------------------------------------------------
-#define SORT_SWAP(a,b)	{itemp=(a);(a)=(b);(b)=itemp;}
-
-bool CSG_Grid::_Set_Index(void)
-{
-	const int	M	= 7;
-
-	int		i, j, k, l, ir, n, nCells, *istack, jstack, nstack, indxt, itemp;
-	double	a;
-
-	//-----------------------------------------------------
-	SG_UI_Process_Set_Text(CSG_String::Format(SG_T("%s: %s"), LNG("Create index"), Get_Name()));
-
-	if( m_Index == NULL )
-	{
-		m_Index		= (long *)SG_Calloc(Get_NCells(), sizeof(long));
-
-		if( m_Index == NULL )
-		{
-			SG_UI_Msg_Add_Error(LNG("could not create index: insufficient memory"));
-
-			SG_UI_Process_Set_Ready();
-
-			return( false );
-		}
-
-		for(i=0, l=0; i<Get_NCells(); i++)
-		{
-			if(  is_NoData(i) )
-			{
-				m_Index[l++]	= i;
-			}
-		}
-
-		for(i=0, j=l; i<Get_NCells(); i++)
-		{
-			if( !is_NoData(i) )
-			{
-				m_Index[j++]	= i;
-			}
-		}
-	}
-	else
-	{
-		l	= 0;
-	}
-
-	//-----------------------------------------------------
-	if( (nCells = Get_NCells() - l) <= 1 )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	n		= 0;
-	ir		= Get_NCells() - 1;
-
-	nstack	= 64;
-	istack	= (int *)SG_Malloc(nstack * sizeof(int));
-	jstack	= 0;
-
-	for(;;)
-	{
-		if( ir - l < M )
-		{
-			if( !SG_UI_Process_Set_Progress(n += M - 1, nCells) )
-			{
-				SG_Free(istack);
-
-				return( false );
-			}
-
-			for(j=l+1; j<=ir; j++)
-			{
-				indxt	= m_Index[j];
-				a		= asDouble(indxt);
-
-				for(i=j-1; i>=0; i--)
-				{
-					if( asDouble(m_Index[i]) <= a )
-					{
-						break;
-					}
-
-					m_Index[i + 1]	= m_Index[i];
-				}
-
-				m_Index[i + 1]	= indxt;
-			}
-
-			if( jstack == 0 )
-			{
-				break;
-			}
-
-			ir		= istack[jstack--];
-			l		= istack[jstack--];
-		}
-
-		//-------------------------------------------------
-		else
-		{
-			k		= (l + ir) >> 1;
-
-			SORT_SWAP(m_Index[k], m_Index[l + 1]);
-
-			if( asDouble( m_Index[l + 1]) > asDouble(m_Index[ir]) )
-				SORT_SWAP(m_Index[l + 1],            m_Index[ir]);
-
-			if( asDouble( m_Index[l    ]) > asDouble(m_Index[ir]) )
-				SORT_SWAP(m_Index[l    ],            m_Index[ir]);
-
-			if( asDouble( m_Index[l + 1]) > asDouble(m_Index[l ]) )
-				SORT_SWAP(m_Index[l + 1],            m_Index[l ]);
-
-			i		= l + 1;
-			j		= ir;
-			indxt	= m_Index[l];
-			a		= asDouble(indxt);
-
-			for(;;)
-			{
-				do	i++;	while(asDouble(m_Index[i]) < a);
-				do	j--;	while(asDouble(m_Index[j]) > a);
-
-				if( j < i )
-				{
-					break;
-				}
-
-				SORT_SWAP(m_Index[i], m_Index[j]);
-			}
-
-			m_Index[l]	= m_Index[j];
-			m_Index[j]	= indxt;
-			jstack		+= 2;
-
-			if( jstack >= nstack )
-			{
-				nstack	+= 64;
-				istack	= (int *)SG_Realloc(istack, nstack * sizeof(int));
-			}
-
-			if( ir - i + 1 >= j - l )
-			{
-				istack[jstack]		= ir;
-				istack[jstack - 1]	= i;
-				ir					= j - 1;
-			}
-			else
-			{
-				istack[jstack]		= j - 1;
-				istack[jstack - 1]	= l;
-				l					= i;
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	SG_Free(istack);
-
-	SG_UI_Process_Set_Ready();
-
-	return( true );
-}
-#undef SORT_SWAP
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//           Application Programming Interface           //
+//                                                       //
+//                  Library: SAGA_API                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                       grid.cpp                        //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "grid.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+BYTE	CSG_Grid::m_Bitmask[8]	= { 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80 };
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Grid * SG_Create_Grid(void)
+{
+	return( new CSG_Grid );
+}
+
+//---------------------------------------------------------
+CSG_Grid * SG_Create_Grid(const CSG_Grid &Grid)
+{
+	return( new CSG_Grid(Grid) );
+}
+
+//---------------------------------------------------------
+CSG_Grid * SG_Create_Grid(const CSG_String &File_Name, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
+{
+	return( new CSG_Grid(File_Name, Type, Memory_Type) );
+}
+
+//---------------------------------------------------------
+CSG_Grid * SG_Create_Grid(CSG_Grid *pGrid, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
+{
+	return( new CSG_Grid(pGrid, Type, Memory_Type) );
+}
+
+//---------------------------------------------------------
+CSG_Grid * SG_Create_Grid(const CSG_Grid_System &System, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
+{
+	return( new CSG_Grid(System, Type, Memory_Type) );
+}
+
+//---------------------------------------------------------
+CSG_Grid * SG_Create_Grid(TSG_Data_Type Type, int NX, int NY, double Cellsize, double xMin, double yMin, TSG_Grid_Memory_Type Memory_Type)
+{
+	return( new CSG_Grid(Type, NX, NY, Cellsize, xMin, yMin, Memory_Type) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+/**
+  * Default constructor.
+*/
+//---------------------------------------------------------
+CSG_Grid::CSG_Grid(void)
+	: CSG_Data_Object()
+{
+	_On_Construction();
+}
+
+//---------------------------------------------------------
+/**
+  * Copy constructor.
+*/
+//---------------------------------------------------------
+CSG_Grid::CSG_Grid(const CSG_Grid &Grid)
+	: CSG_Data_Object()
+{
+	_On_Construction();
+
+	Create(Grid);
+}
+
+//---------------------------------------------------------
+/**
+  * Create a grid from file.
+*/
+//---------------------------------------------------------
+CSG_Grid::CSG_Grid(const CSG_String &File_Name, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
+	: CSG_Data_Object()
+{
+	_On_Construction();
+
+	Create(File_Name, Type, Memory_Type);
+}
+
+//---------------------------------------------------------
+/**
+  * Create a grid similar to 'pGrid'.
+*/
+//---------------------------------------------------------
+CSG_Grid::CSG_Grid(CSG_Grid *pGrid, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
+	: CSG_Data_Object()
+{
+	_On_Construction();
+
+	Create(pGrid, Type, Memory_Type);
+}
+
+//---------------------------------------------------------
+/**
+  * Create a grid using 'System'.
+*/
+//---------------------------------------------------------
+CSG_Grid::CSG_Grid(const CSG_Grid_System &System, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
+	: CSG_Data_Object()
+{
+	_On_Construction();
+
+	Create(System, Type, Memory_Type);
+}
+
+//---------------------------------------------------------
+/**
+  * Create a grid with specified parameters.
+  * This constructor initializes the grid's data space with 'NX' x 'NY' cells of the size indicated by 'Type'.
+  * If 'DX/DY' are equal or less zero then both will be set to 1.0. 'xMin/yMin' specify the coordinates of the
+  * lower left corner of the grid.
+*/
+//---------------------------------------------------------
+CSG_Grid::CSG_Grid(TSG_Data_Type Type, int NX, int NY, double Cellsize, double xMin, double yMin, TSG_Grid_Memory_Type Memory_Type)
+	: CSG_Data_Object()
+{
+	_On_Construction();
+
+	Create(Type, NX, NY, Cellsize, xMin, yMin, Memory_Type);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CSG_Grid::_On_Construction(void)
+{
+	m_bCreated			= false;
+
+	m_Type				= SG_DATATYPE_Undefined;
+	m_Memory_Type		= GRID_MEMORY_Normal;
+	m_Memory_bLock		= false;
+
+	m_Values			= NULL;
+
+	LineBuffer			= NULL;
+	LineBuffer_Count	= 5;
+
+	m_zFactor			= 1.0;
+
+	m_bIndexed			= false;
+	m_Index				= NULL;
+
+	Set_Update_Flag();
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Grid::Create(const CSG_Grid &Grid)
+{
+	if( Create((CSG_Grid *)&Grid, ((CSG_Grid *)&Grid)->Get_Type()) )
+	{
+		return( Assign((CSG_Data_Object *)&Grid) );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::Create(CSG_Grid *pGrid, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
+{
+	if( pGrid && Create(Type, pGrid->Get_NX(), pGrid->Get_NY(), pGrid->Get_Cellsize(), pGrid->Get_XMin(), pGrid->Get_YMin(), Memory_Type) )
+	{
+		Get_Projection()	= pGrid->Get_Projection();
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::Create(const CSG_Grid_System &System, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
+{
+	return( Create(Type, System.Get_NX(), System.Get_NY(), System.Get_Cellsize(), System.Get_XMin(), System.Get_YMin(), Memory_Type) );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::Create(const CSG_String &File_Name, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type)
+{
+	return( _Load(File_Name, Type, Memory_Type) );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::Create(TSG_Data_Type Type, int NX, int NY, double Cellsize, double xMin, double yMin, TSG_Grid_Memory_Type Memory_Type)
+{
+	Destroy();
+
+	_Set_Properties(Type, NX, NY, Cellsize, xMin, yMin);
+
+	if( _Memory_Create(Memory_Type) )
+	{
+		m_bCreated	= true;
+	}
+
+	return( m_bCreated );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//					Destruction							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+/**
+  * The destructor.
+*/
+CSG_Grid::~CSG_Grid(void)
+{
+	Destroy();
+}
+
+/**
+  * Destroys the data space of CSG_Grid.
+*/
+bool CSG_Grid::Destroy(void)
+{
+	_Memory_Destroy();
+
+	m_bCreated		= false;
+
+	m_Type			= SG_DATATYPE_Undefined;
+	m_Memory_Type	= GRID_MEMORY_Normal;
+
+	m_zFactor		= 1.0;
+
+	m_Description	.Clear();
+	m_Unit			.Clear();
+
+	m_System		.Assign(0.0, 0.0, 0.0, 0, 0);
+
+	return( CSG_Data_Object::Destroy() );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Header							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CSG_Grid::_Set_Properties(TSG_Data_Type Type, int NX, int NY, double Cellsize, double xMin, double yMin)
+{
+	m_Type	= Type;
+
+	switch( m_Type )
+	{
+	case SG_DATATYPE_Bit:		Set_NoData_Value(          0.0);	break;
+	case SG_DATATYPE_Byte:		Set_NoData_Value(        255.0);	break;
+	case SG_DATATYPE_Char:		Set_NoData_Value(       -127.0);	break;
+	case SG_DATATYPE_Word:		Set_NoData_Value(      65535.0);	break;
+	case SG_DATATYPE_Short:		Set_NoData_Value(     -32767.0);	break;
+	case SG_DATATYPE_DWord:		Set_NoData_Value( 4294967295.0);	break;
+	case SG_DATATYPE_Int:		Set_NoData_Value(-2147483647.0);	break;
+	case SG_DATATYPE_ULong:		Set_NoData_Value( 4294967295.0);	break;
+	case SG_DATATYPE_Long:		Set_NoData_Value(-2147483647.0);	break;
+	case SG_DATATYPE_Float:		Set_NoData_Value(     -99999.0);	break;
+	case SG_DATATYPE_Double:	Set_NoData_Value(     -99999.0);	break;
+	case SG_DATATYPE_Color:		Set_NoData_Value( 4294967295.0);	break;
+
+	default:
+	m_Type = SG_DATATYPE_Float;	Set_NoData_Value(      -99999.0);	break;
+	}
+
+	m_System.Assign(Cellsize > 0.0 ? Cellsize : 1.0, xMin, yMin, NX, NY);
+
+	m_zStats.Invalidate();
+
+}
+
+//---------------------------------------------------------
+void CSG_Grid::Set_Description(const SG_Char *String)
+{
+	m_Description	= String ? String : SG_T("");
+}
+
+const SG_Char * CSG_Grid::Get_Description(void) const
+{
+	return( m_Description.c_str() );
+}
+
+//---------------------------------------------------------
+void CSG_Grid::Set_Unit(const SG_Char *String)
+{
+	m_Unit	= String ? String : SG_T("");
+}
+
+const SG_Char * CSG_Grid::Get_Unit(void) const
+{
+	return( m_Unit.c_str() );
+}
+
+//---------------------------------------------------------
+void CSG_Grid::Set_ZFactor(double Value)
+{
+	m_zFactor		= Value;
+}
+
+//---------------------------------------------------------
+double CSG_Grid::Get_ZFactor(void) const
+{
+	return( m_zFactor );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Checks							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Grid::is_Valid(void) const
+{
+	if(	m_System.is_Valid() && m_Type != SG_DATATYPE_Undefined )
+	{
+		switch( m_Memory_Type )
+		{
+		default:
+			return( m_Values != NULL );
+
+		case GRID_MEMORY_Cache:
+			return( Cache_Stream.is_Open() );
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+TSG_Intersection CSG_Grid::is_Intersecting(const CSG_Rect &Extent) const
+{
+	return( Get_Extent().Intersects(Extent.m_rect) );
+}
+
+TSG_Intersection CSG_Grid::is_Intersecting(const TSG_Rect &Extent) const
+{
+	return( Get_Extent().Intersects(Extent) );
+}
+
+TSG_Intersection CSG_Grid::is_Intersecting(double xMin, double yMin, double xMax, double yMax) const
+{
+	return( is_Intersecting(CSG_Rect(xMin, yMin, xMax, yMax)) );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::is_Compatible(CSG_Grid *pGrid) const
+{
+	return( pGrid && is_Compatible(pGrid->Get_System()) );
+}
+
+bool CSG_Grid::is_Compatible(const CSG_Grid_System &System) const
+{
+	return( m_System == System );
+}
+
+bool CSG_Grid::is_Compatible(int NX, int NY, double Cellsize, double xMin, double yMin) const
+{
+	return(	is_Compatible(CSG_Grid_System(Cellsize, xMin, yMin, NX, NY)) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//		Value access by Position (-> Interpolation)		 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+double CSG_Grid::Get_Value(TSG_Point Position, int Interpolation, bool bZFactor, bool bByteWise, bool bOnlyValidCells) const
+{
+	double	Value;
+
+	return( Get_Value(Position.x, Position.y, Value, Interpolation, bZFactor, bByteWise, bOnlyValidCells) ? Value : Get_NoData_Value() );
+}
+
+double CSG_Grid::Get_Value(double xPosition, double yPosition, int Interpolation, bool bZFactor, bool bByteWise, bool bOnlyValidCells) const
+{
+	double	Value;
+
+	return( Get_Value(xPosition, yPosition, Value, Interpolation, bZFactor, bByteWise, bOnlyValidCells) ? Value : Get_NoData_Value() );
+}
+
+bool CSG_Grid::Get_Value(TSG_Point Position, double &Value, int Interpolation, bool bZFactor, bool bByteWise, bool bOnlyValidCells) const
+{
+	return( Get_Value(Position.x, Position.y, Value, Interpolation, bZFactor, bByteWise, bOnlyValidCells) );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::Get_Value(double xPosition, double yPosition, double &Value, int Interpolation, bool bZFactor, bool bByteWise, bool bOnlyValidCells) const
+{
+	if(	m_System.Get_Extent(true).Contains(xPosition, yPosition) )
+	{
+		int		x	= (int)(xPosition	= (xPosition - Get_XMin()) / Get_Cellsize());
+		int		y	= (int)(yPosition	= (yPosition - Get_YMin()) / Get_Cellsize());
+
+		double	dx	= xPosition - x;
+		double	dy	= yPosition - y;
+
+		if( !bOnlyValidCells || is_InGrid(x + (int)(0.5 + dx), y + (int)(0.5 + dy)) )
+		{
+			switch( Interpolation )
+			{
+			case GRID_INTERPOLATION_NearestNeighbour:
+				Value	= _Get_ValAtPos_NearestNeighbour(x, y, dx, dy);
+				break;
+
+			case GRID_INTERPOLATION_Bilinear:
+				Value	= _Get_ValAtPos_BiLinear		(x, y, dx, dy, bByteWise);
+				break;
+
+			case GRID_INTERPOLATION_InverseDistance:
+				Value	= _Get_ValAtPos_InverseDistance	(x, y, dx, dy, bByteWise);
+				break;
+
+			case GRID_INTERPOLATION_BicubicSpline:
+				Value	= _Get_ValAtPos_BiCubicSpline	(x, y, dx, dy, bByteWise);
+				break;
+
+			default:
+			case GRID_INTERPOLATION_BSpline:
+				Value	= _Get_ValAtPos_BSpline			(x, y, dx, dy, bByteWise);
+				break;
+			}
+
+			if( !is_NoData_Value(Value) )
+			{
+				if( bZFactor )
+				{
+					Value	*= m_zFactor;
+				}
+
+				return( true );
+			}
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+inline double CSG_Grid::_Get_ValAtPos_NearestNeighbour(int x, int y, double dx, double dy) const
+{
+	x	+= (int)(0.5 + dx);
+	y	+= (int)(0.5 + dy);
+
+	if( is_InGrid(x, y) )
+	{
+		return( asDouble(x, y) );
+	}
+
+	return( Get_NoData_Value() );
+}
+
+//---------------------------------------------------------
+#define BILINEAR_ADD(ix, iy, d)			if( is_InGrid(ix, iy) ) { n += d;\
+											z += d * asDouble(ix, iy); }
+
+#define BILINEAR_ADD_BYTE(ix, iy, d)	if( is_InGrid(ix, iy) ) { n += d; v = asInt(ix, iy);\
+											z[0] += d * SG_GET_BYTE_0(v);\
+											z[1] += d * SG_GET_BYTE_1(v);\
+											z[2] += d * SG_GET_BYTE_2(v);\
+											z[3] += d * SG_GET_BYTE_3(v); }
+
+inline double CSG_Grid::_Get_ValAtPos_BiLinear(int x, int y, double dx, double dy, bool bByteWise) const
+{
+	if( !bByteWise )
+	{
+		double	z = 0.0, n = 0.0;
+
+		BILINEAR_ADD(x    , y    , (1.0 - dx) * (1.0 - dy));
+		BILINEAR_ADD(x + 1, y    , (      dx) * (1.0 - dy));
+		BILINEAR_ADD(x    , y + 1, (1.0 - dx) * (      dy));
+		BILINEAR_ADD(x + 1, y + 1, (      dx) * (      dy));
+
+		if( n > 0.0 )
+		{
+			return( z / n );
+		}
+	}
+	else
+	{
+		long	v;
+		double	z[4], n = 0.0;
+
+		z[0] = z[1] = z[2] = z[3] = 0.0;
+
+		BILINEAR_ADD_BYTE(x    , y    , (1.0 - dx) * (1.0 - dy));
+		BILINEAR_ADD_BYTE(x + 1, y    , (      dx) * (1.0 - dy));
+		BILINEAR_ADD_BYTE(x    , y + 1, (1.0 - dx) * (      dy));
+		BILINEAR_ADD_BYTE(x + 1, y + 1, (      dx) * (      dy));
+
+		if( n > 0.0 )
+		{
+			z[0]	/= n;
+			z[1]	/= n;
+			z[2]	/= n;
+			z[3]	/= n;
+
+			return( SG_GET_LONG(z[0], z[1], z[2], z[3]) );
+		}
+	}
+
+	return( Get_NoData_Value() );
+}
+
+//---------------------------------------------------------
+#define INVERSEDIST_ADD(ix, iy, dsx, dsy)		if( is_InGrid(ix, iy) ) { d = 1.0 / sqrt((dsx)*(dsx) + (dsy)*(dsy)); n += d;\
+													z += d * asDouble(ix, iy); }
+
+#define INVERSEDIST_ADD_BYTE(ix, iy, dsx, dsy)	if( is_InGrid(ix, iy) ) { d = 1.0 / sqrt((dsx)*(dsx) + (dsy)*(dsy)); n += d; v = asInt(ix, iy);\
+													z[0] += d * SG_GET_BYTE_0(v);\
+													z[1] += d * SG_GET_BYTE_1(v);\
+													z[2] += d * SG_GET_BYTE_2(v);\
+													z[3] += d * SG_GET_BYTE_3(v); }
+
+inline double CSG_Grid::_Get_ValAtPos_InverseDistance(int x, int y, double dx, double dy, bool bByteWise) const
+{
+	if( dx > 0.0 || dy > 0.0 )
+	{
+		if( !bByteWise )
+		{
+			double	z = 0.0, n = 0.0, d;
+
+			INVERSEDIST_ADD(x    , y    ,       dx,       dy);
+			INVERSEDIST_ADD(x + 1, y    , 1.0 - dx,       dy);
+			INVERSEDIST_ADD(x    , y + 1,       dx, 1.0 - dy);
+			INVERSEDIST_ADD(x + 1, y + 1, 1.0 - dx, 1.0 - dy);
+
+			if( n > 0.0 )
+			{
+				return( z / n );
+			}
+		}
+		else
+		{
+			long	v;
+			double	z[4], n = 0.0, d;
+
+			z[0] = z[1] = z[2] = z[3] = 0.0;
+
+			INVERSEDIST_ADD_BYTE(x    , y    ,       dx,       dy);
+			INVERSEDIST_ADD_BYTE(x + 1, y    , 1.0 - dx,       dy);
+			INVERSEDIST_ADD_BYTE(x    , y + 1,       dx, 1.0 - dy);
+			INVERSEDIST_ADD_BYTE(x + 1, y + 1, 1.0 - dx, 1.0 - dy);
+
+			if( n > 0.0 )
+			{
+				z[0]	/= n;
+				z[1]	/= n;
+				z[2]	/= n;
+				z[3]	/= n;
+
+				return( SG_GET_LONG(z[0], z[1], z[2], z[3]) );
+			}
+		}
+	}
+	else
+	{
+		return( asDouble(x, y) );
+	}
+
+	return( Get_NoData_Value() );
+}
+
+//---------------------------------------------------------
+inline double CSG_Grid::_Get_ValAtPos_BiCubicSpline(double dx, double dy, double z_xy[4][4]) const
+{
+	double	a0, a2, a3, b1, b2, b3, c[4];
+
+	for(int i=0; i<4; i++)
+	{
+		a0		= z_xy[0][i] - z_xy[1][i];
+		a2		= z_xy[2][i] - z_xy[1][i];
+		a3		= z_xy[3][i] - z_xy[1][i];
+
+		b1		= -a0 / 3.0 + a2       - a3 / 6.0;
+		b2		=  a0 / 2.0 + a2 / 2.0;
+		b3		= -a0 / 6.0 - a2 / 2.0 + a3 / 6.0;
+
+		c[i]	= z_xy[1][i] + b1 * dx + b2 * dx*dx + b3 * dx*dx*dx;
+	}
+
+	a0		= c[0] - c[1];
+	a2		= c[2] - c[1];
+	a3		= c[3] - c[1];
+
+	b1		= -a0 / 3.0 + a2       - a3 / 6.0;
+	b2		=  a0 / 2.0 + a2 / 2.0;
+	b3		= -a0 / 6.0 - a2 / 2.0 + a3 / 6.0;
+
+	return( c[1] + b1 * dy + b2 * dy*dy + b3 * dy*dy*dy );
+}
+
+inline double CSG_Grid::_Get_ValAtPos_BiCubicSpline(int x, int y, double dx, double dy, bool bByteWise) const
+{
+	if( !bByteWise )
+	{
+		double	z_xy[4][4];
+
+		if( _Get_ValAtPos_Fill4x4Submatrix(x, y, z_xy) )
+		{
+			return( _Get_ValAtPos_BiCubicSpline(dx, dy, z_xy) );
+		}
+	}
+	else
+	{
+		double	z_xy[4][4][4];
+
+		if( _Get_ValAtPos_Fill4x4Submatrix(x, y, z_xy) )
+		{
+			return( SG_GET_LONG(
+				_Get_ValAtPos_BiCubicSpline(dx, dy, z_xy[0]),
+				_Get_ValAtPos_BiCubicSpline(dx, dy, z_xy[1]),
+				_Get_ValAtPos_BiCubicSpline(dx, dy, z_xy[2]),
+				_Get_ValAtPos_BiCubicSpline(dx, dy, z_xy[3])
+			));
+		}
+	}
+
+	return( Get_NoData_Value() );
+}
+
+//---------------------------------------------------------
+inline double CSG_Grid::_Get_ValAtPos_BSpline(double dx, double dy, double z_xy[4][4]) const
+{
+	int		i, ix, iy;
+	double	z, px, py, Rx[4], Ry[4];
+
+	for(i=0, px=-1.0-dx, py=-1.0-dy; i<4; i++, px++, py++)
+	{
+		Rx[i]	= 0.0;
+		Ry[i]	= 0.0;
+
+		if( (z = px + 2.0) > 0.0 )
+			Rx[i]	+=        z*z*z;
+		if( (z = px + 1.0) > 0.0 )
+			Rx[i]	+= -4.0 * z*z*z;
+		if( (z = px + 0.0) > 0.0 )
+			Rx[i]	+=  6.0 * z*z*z;
+		if( (z = px - 1.0) > 0.0 )
+			Rx[i]	+= -4.0 * z*z*z;
+		if( (z = py + 2.0) > 0.0 )
+			Ry[i]	+=        z*z*z;
+		if( (z = py + 1.0) > 0.0 )
+			Ry[i]	+= -4.0 * z*z*z;
+		if( (z = py + 0.0) > 0.0 )
+			Ry[i]	+=  6.0 * z*z*z;
+		if( (z = py - 1.0) > 0.0 )
+			Ry[i]	+= -4.0 * z*z*z;
+
+		Rx[i]	/= 6.0;
+		Ry[i]	/= 6.0;
+	}
+
+	for(iy=0, z=0.0; iy<4; iy++)
+	{
+		for(ix=0; ix<4; ix++)
+		{
+			z	+= z_xy[ix][iy] * Rx[ix] * Ry[iy];
+		}
+	}
+
+	return( z );
+}
+
+inline double CSG_Grid::_Get_ValAtPos_BSpline(int x, int y, double dx, double dy, bool bByteWise) const
+{
+	if( !bByteWise )
+	{
+		double	z_xy[4][4];
+
+		if( _Get_ValAtPos_Fill4x4Submatrix(x, y, z_xy) )
+		{
+			return( _Get_ValAtPos_BSpline(dx, dy, z_xy) );
+		}
+	}
+	else
+	{
+		double	z_xy[4][4][4];
+
+		if( _Get_ValAtPos_Fill4x4Submatrix(x, y, z_xy) )
+		{
+			return( SG_GET_LONG(
+				_Get_ValAtPos_BSpline(dx, dy, z_xy[0]),
+				_Get_ValAtPos_BSpline(dx, dy, z_xy[1]),
+				_Get_ValAtPos_BSpline(dx, dy, z_xy[2]),
+				_Get_ValAtPos_BSpline(dx, dy, z_xy[3])
+			));
+		}
+	}
+
+	return( Get_NoData_Value() );
+}
+
+//---------------------------------------------------------
+inline bool CSG_Grid::_Get_ValAtPos_Fill4x4Submatrix(int x, int y, double z_xy[4][4]) const
+{
+	int		ix, iy, jx, jy, nNoData;
+
+	for(iy=0, jy=y-1, nNoData=0; iy<4; iy++, jy++)
+	{
+		for(ix=0, jx=x-1; ix<4; ix++, jx++)
+		{
+			if( is_InGrid(jx, jy) )
+			{
+				z_xy[ix][iy]	= asDouble(jx, jy);
+			}
+			else
+			{
+				z_xy[ix][iy]	= Get_NoData_Value();
+
+				nNoData++;
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	if( nNoData >= 16 )
+	{
+		return( false );
+	}
+
+	if( nNoData > 0 )
+	{
+		double	t_xy[4][4];
+
+		for(iy=0; iy<4; iy++)
+		{
+			for(ix=0; ix<4; ix++)
+			{
+				t_xy[ix][iy]	= z_xy[ix][iy];
+			}
+		}
+
+		do
+		{
+			for(iy=0; iy<4; iy++)
+			{
+				for(ix=0; ix<4; ix++)
+				{
+					if( is_NoData_Value(z_xy[ix][iy]) )
+					{
+						int		n	= 0;
+
+						for(jy=iy-1; jy<=iy+1; jy++)
+						{
+							if( jy >= 0 && jy < 4 )
+							{
+								for(jx=ix-1; jx<=ix+1; jx++)
+								{
+									if( jx >= 0 && jx < 4 && !(jx == ix && jy == iy) && !is_NoData_Value(z_xy[jx][jy]) )
+									{
+										if( n == 0 )
+										{
+											t_xy[ix][iy]	 = z_xy[jx][jy];
+										}
+										else
+										{
+											t_xy[ix][iy]	+= z_xy[jx][jy];
+										}
+
+										n++;
+									}
+								}
+							}
+						}
+
+						if( n > 0 )
+						{
+							if( n > 1 )
+							{
+								t_xy[ix][iy]	/= n;
+							}
+
+							nNoData--;
+						}
+					}
+				}
+			}
+
+			for(iy=0; iy<4; iy++)
+			{
+				for(ix=0; ix<4; ix++)
+				{
+					if( t_xy[ix][iy] != z_xy[ix][iy] )
+					{
+						z_xy[ix][iy]	= t_xy[ix][iy];
+					}
+				}
+			}
+		}
+		while( nNoData > 0 );
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+inline bool CSG_Grid::_Get_ValAtPos_Fill4x4Submatrix(int x, int y, double z_xy[4][4][4]) const
+{
+	int		ix, iy, jx, jy, nNoData;
+
+	for(iy=0, jy=y-1, nNoData=0; iy<4; iy++, jy++)
+	{
+		for(ix=0, jx=x-1; ix<4; ix++, jx++)
+		{
+			if( is_InGrid(jx, jy) )
+			{
+				int		v	= asInt(jx, jy);
+
+				z_xy[0][ix][iy]	= SG_GET_BYTE_0(v);
+				z_xy[1][ix][iy]	= SG_GET_BYTE_1(v);
+				z_xy[2][ix][iy]	= SG_GET_BYTE_2(v);
+				z_xy[3][ix][iy]	= SG_GET_BYTE_3(v);
+			}
+			else
+			{
+				z_xy[0][ix][iy]	= Get_NoData_Value();
+
+				nNoData++;
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	if( nNoData >= 16 )
+	{
+		return( false );
+	}
+
+	if( nNoData > 0 )
+	{
+		double	t_xy[4][4][4];
+
+		for(iy=0; iy<4; iy++)
+		{
+			for(ix=0; ix<4; ix++)
+			{
+				t_xy[0][ix][iy]	= z_xy[0][ix][iy];
+				t_xy[1][ix][iy]	= z_xy[1][ix][iy];
+				t_xy[2][ix][iy]	= z_xy[2][ix][iy];
+				t_xy[3][ix][iy]	= z_xy[3][ix][iy];
+			}
+		}
+
+		do
+		{
+			for(iy=0; iy<4; iy++)
+			{
+				for(ix=0; ix<4; ix++)
+				{
+					if( is_NoData_Value(z_xy[0][ix][iy]) )
+					{
+						int		n	= 0;
+
+						for(jy=iy-1; jy<=iy+1; jy++)
+						{
+							if( jy >= 0 && jy < 4 )
+							{
+								for(jx=ix-1; jx<=ix+1; jx++)
+								{
+									if( jx >= 0 && jx < 4 && !(jx == ix && jy == iy) && !is_NoData_Value(z_xy[0][jx][jy]) )
+									{
+										if( n == 0 )
+										{
+											t_xy[0][ix][iy]	 = z_xy[0][jx][jy];
+											t_xy[1][ix][iy]	 = z_xy[1][jx][jy];
+											t_xy[2][ix][iy]	 = z_xy[2][jx][jy];
+											t_xy[3][ix][iy]	 = z_xy[3][jx][jy];
+										}
+										else
+										{
+											t_xy[0][ix][iy]	+= z_xy[0][jx][jy];
+											t_xy[1][ix][iy]	+= z_xy[1][jx][jy];
+											t_xy[2][ix][iy]	+= z_xy[2][jx][jy];
+											t_xy[3][ix][iy]	+= z_xy[3][jx][jy];
+										}
+
+										n++;
+									}
+								}
+							}
+						}
+
+						if( n > 0 )
+						{
+							if( n > 1 )
+							{
+								t_xy[0][ix][iy]	/= n;
+								t_xy[1][ix][iy]	/= n;
+								t_xy[2][ix][iy]	/= n;
+								t_xy[3][ix][iy]	/= n;
+							}
+
+							nNoData--;
+						}
+					}
+				}
+			}
+
+			for(iy=0; iy<4; iy++)
+			{
+				for(ix=0; ix<4; ix++)
+				{
+					if( t_xy[0][ix][iy] != z_xy[0][ix][iy] )
+					{
+						z_xy[0][ix][iy]	= t_xy[0][ix][iy];
+						z_xy[1][ix][iy]	= t_xy[1][ix][iy];
+						z_xy[2][ix][iy]	= t_xy[2][ix][iy];
+						z_xy[3][ix][iy]	= t_xy[3][ix][iy];
+					}
+				}
+			}
+		}
+		while( nNoData > 0 );
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Statistics						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+double CSG_Grid::Get_ZMin(bool bZFactor)
+{
+	Update();	return( (bZFactor ? m_zFactor : 1.0) * m_zStats.Get_Minimum() );
+}
+
+double CSG_Grid::Get_ZMax(bool bZFactor)
+{
+	Update();	return( (bZFactor ? m_zFactor : 1.0) * m_zStats.Get_Maximum() );
+}
+
+double CSG_Grid::Get_ZRange(bool bZFactor)
+{
+	Update();	return( (bZFactor ? m_zFactor : 1.0) * m_zStats.Get_Range() );
+}
+
+double CSG_Grid::Get_ArithMean(bool bZFactor)
+{
+	Update();	return( (bZFactor ? m_zFactor : 1.0) * m_zStats.Get_Mean() );
+}
+
+double CSG_Grid::Get_StdDev(bool bZFactor)
+{
+	Update();	return( (bZFactor ? m_zFactor : 1.0) * m_zStats.Get_StdDev() );
+}
+
+double CSG_Grid::Get_Variance(void)
+{
+	Update();	return( m_zStats.Get_Variance() );
+}
+
+int CSG_Grid::Get_NoData_Count(void)
+{
+	Update();	return( Get_NCells() - m_zStats.Get_Count() );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::On_Update(void)
+{
+	if( is_Valid() )
+	{
+		m_zStats.Invalidate();
+
+		for(int y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
+		{
+			for(int x=0; x<Get_NX(); x++)
+			{
+				double	z	= asDouble(x, y);
+
+				if( !is_NoData_Value(z) )
+				{
+					m_zStats.Add_Value(z);
+				}
+			}
+		}
+
+		SG_UI_Process_Set_Ready();
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Index							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CSG_Grid::Set_Value_And_Sort(long n, double Value)
+{
+	if( !m_bIndexed )
+	{
+		Set_Value(n, Value);
+
+		Set_Index(true);
+
+		return;
+	}
+
+	//-----------------------------------------------------
+	if( Value == asDouble(n) )
+		return;
+
+	long	i, j;
+
+	for(i=0, j=-1; i<Get_NCells() && j<0; i++)	// find index, could be faster...
+	{
+		if( n == m_Index[i] )
+		{
+			j	= i;
+		}
+	}
+
+	if( j > 0 )
+	{
+		if( Value < asDouble(n) )
+		{
+			for(i=j-1; i>=0; i--, j--)
+			{
+				if( Value < asDouble(m_Index[i]) )
+				{
+					m_Index[j]	= m_Index[i];
+				}
+				else
+				{
+					m_Index[j]	= n;
+					break;
+				}
+			}
+		}
+		else
+		{
+			for(i=j+1; i<Get_NCells(); i++, j++)
+			{
+				if( Value > asDouble(m_Index[i]) )
+				{
+					m_Index[j]	= m_Index[i];
+				}
+				else
+				{
+					m_Index[j]	= n;
+					break;
+				}
+			}
+		}
+
+		Set_Value(n, Value);
+
+		m_bIndexed	= true;
+	}
+}
+
+//---------------------------------------------------------
+void CSG_Grid::Set_Value_And_Sort(int x, int y, double Value)
+{
+	Set_Value_And_Sort(x + y * Get_NX(), Value);
+}
+
+//---------------------------------------------------------
+double CSG_Grid::Get_Percentile(double Percent, bool bZFactor)
+{
+	int		x, y;
+
+	if( Percent < 0.0 )
+	{
+		Percent	= 0.0;
+	}
+	else if( Percent > 100.0 )
+	{
+		Percent	= 100.0;
+	}
+
+	if( Get_Sorted((int)(Percent * Get_NCells() / 100.0), x, y, true) )
+	{
+		return( asDouble(x, y, bZFactor) );
+	}
+
+	return( 0.0 );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::Set_Index(bool bOn)
+{
+	if( bOn && !m_bIndexed && Get_NoData_Count() < Get_NCells() )
+	{
+		m_bIndexed	= true;
+
+		if( _Set_Index() == false )
+		{
+			Set_Index(false);
+
+			return( false );
+		}
+	}
+	else if( !bOn || Get_NoData_Count() >= Get_NCells() )
+	{
+		m_bIndexed	= false;
+
+		if( m_Index )
+		{
+			SG_Free(m_Index);
+			m_Index		= NULL;
+		}
+	}
+
+	return( m_bIndexed );
+}
+
+//---------------------------------------------------------
+#define SORT_SWAP(a,b)	{itemp=(a);(a)=(b);(b)=itemp;}
+
+bool CSG_Grid::_Set_Index(void)
+{
+	const int	M	= 7;
+
+	int		i, j, k, l, ir, n, nCells, *istack, jstack, nstack, indxt, itemp;
+	double	a;
+
+	//-----------------------------------------------------
+	SG_UI_Process_Set_Text(CSG_String::Format(SG_T("%s: %s"), LNG("Create index"), Get_Name()));
+
+	if( m_Index == NULL )
+	{
+		m_Index		= (long *)SG_Calloc(Get_NCells(), sizeof(long));
+
+		if( m_Index == NULL )
+		{
+			SG_UI_Msg_Add_Error(LNG("could not create index: insufficient memory"));
+
+			SG_UI_Process_Set_Ready();
+
+			return( false );
+		}
+
+		for(i=0, l=0; i<Get_NCells(); i++)
+		{
+			if(  is_NoData(i) )
+			{
+				m_Index[l++]	= i;
+			}
+		}
+
+		for(i=0, j=l; i<Get_NCells(); i++)
+		{
+			if( !is_NoData(i) )
+			{
+				m_Index[j++]	= i;
+			}
+		}
+	}
+	else
+	{
+		l	= 0;
+	}
+
+	//-----------------------------------------------------
+	if( (nCells = Get_NCells() - l) <= 1 )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	n		= 0;
+	ir		= Get_NCells() - 1;
+
+	nstack	= 64;
+	istack	= (int *)SG_Malloc(nstack * sizeof(int));
+	jstack	= 0;
+
+	for(;;)
+	{
+		if( ir - l < M )
+		{
+			if( !SG_UI_Process_Set_Progress(n += M - 1, nCells) )
+			{
+				SG_Free(istack);
+
+				return( false );
+			}
+
+			for(j=l+1; j<=ir; j++)
+			{
+				indxt	= m_Index[j];
+				a		= asDouble(indxt);
+
+				for(i=j-1; i>=0; i--)
+				{
+					if( asDouble(m_Index[i]) <= a )
+					{
+						break;
+					}
+
+					m_Index[i + 1]	= m_Index[i];
+				}
+
+				m_Index[i + 1]	= indxt;
+			}
+
+			if( jstack == 0 )
+			{
+				break;
+			}
+
+			ir		= istack[jstack--];
+			l		= istack[jstack--];
+		}
+
+		//-------------------------------------------------
+		else
+		{
+			k		= (l + ir) >> 1;
+
+			SORT_SWAP(m_Index[k], m_Index[l + 1]);
+
+			if( asDouble( m_Index[l + 1]) > asDouble(m_Index[ir]) )
+				SORT_SWAP(m_Index[l + 1],            m_Index[ir]);
+
+			if( asDouble( m_Index[l    ]) > asDouble(m_Index[ir]) )
+				SORT_SWAP(m_Index[l    ],            m_Index[ir]);
+
+			if( asDouble( m_Index[l + 1]) > asDouble(m_Index[l ]) )
+				SORT_SWAP(m_Index[l + 1],            m_Index[l ]);
+
+			i		= l + 1;
+			j		= ir;
+			indxt	= m_Index[l];
+			a		= asDouble(indxt);
+
+			for(;;)
+			{
+				do	i++;	while(asDouble(m_Index[i]) < a);
+				do	j--;	while(asDouble(m_Index[j]) > a);
+
+				if( j < i )
+				{
+					break;
+				}
+
+				SORT_SWAP(m_Index[i], m_Index[j]);
+			}
+
+			m_Index[l]	= m_Index[j];
+			m_Index[j]	= indxt;
+			jstack		+= 2;
+
+			if( jstack >= nstack )
+			{
+				nstack	+= 64;
+				istack	= (int *)SG_Realloc(istack, nstack * sizeof(int));
+			}
+
+			if( ir - i + 1 >= j - l )
+			{
+				istack[jstack]		= ir;
+				istack[jstack - 1]	= i;
+				ir					= j - 1;
+			}
+			else
+			{
+				istack[jstack]		= j - 1;
+				istack[jstack - 1]	= l;
+				l					= i;
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	SG_Free(istack);
+
+	SG_UI_Process_Set_Ready();
+
+	return( true );
+}
+#undef SORT_SWAP
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_api/grid.h b/src/saga_core/saga_api/grid.h
index 046e7ed..de5e248 100644
--- a/src/saga_core/saga_api/grid.h
+++ b/src/saga_core/saga_api/grid.h
@@ -151,7 +151,7 @@ const SG_Char	gSG_Grid_File_Key_Names[GRID_FILE_KEY_Count][32]	=
 
 //---------------------------------------------------------
 #define GRID_FILE_KEY_TRUE		SG_T("TRUE")
-#define GRID_FILE_KEY_FALSE		SG_T("FALSE")
+#define GRID_FILE_KEY_FALSE	SG_T("FALSE")
 
 
 ///////////////////////////////////////////////////////////
@@ -173,6 +173,7 @@ typedef enum ESG_Grid_Interpolation
 	GRID_INTERPOLATION_Mean_Cells,
 	GRID_INTERPOLATION_Minimum,
 	GRID_INTERPOLATION_Maximum,
+	GRID_INTERPOLATION_Majority,
 
 	GRID_INTERPOLATION_Undefined
 }
@@ -222,22 +223,22 @@ public:
 
 	const SG_Char *				Get_Name			(bool bShort = true);
 
-	double						Get_Cellsize		(void)	const	{	return( m_Cellsize );				}
-	double						Get_Cellarea		(void)	const	{	return( m_Cellarea );				}
-	const CSG_Rect &			Get_Extent			(void)	const	{	return( m_Extent );					}
-	const CSG_Rect &			Get_Extent_Cells	(void)	const	{	return( m_Extent_Cells );			}
+	double						Get_Cellsize		(void)	const	{	return( m_Cellsize );	}
+	double						Get_Cellarea		(void)	const	{	return( m_Cellarea );	}
 
-	int							Get_NX				(void)	const	{	return( m_NX );						}
-	int							Get_NY				(void)	const	{	return( m_NY );						}
-	long						Get_NCells			(void)	const	{	return( m_NCells );					}
+	int							Get_NX				(void)	const	{	return( m_NX );			}
+	int							Get_NY				(void)	const	{	return( m_NY );			}
+	long						Get_NCells			(void)	const	{	return( m_NCells );		}
 
-	double						Get_XMin			(void)	const	{	return( m_Extent.m_rect.xMin );		}
-	double						Get_XMax			(void)	const	{	return( m_Extent.m_rect.xMax );		}
-	double						Get_XRange			(void)	const	{	return( m_Extent.Get_XRange() );	}
+	const CSG_Rect &			Get_Extent			(bool bCells = false)	const	{	return( bCells ? m_Extent_Cells : m_Extent );	}
 
-	double						Get_YMin			(void)	const	{	return( m_Extent.m_rect.yMin );		}
-	double						Get_YMax			(void)	const	{	return( m_Extent.m_rect.yMax );		}
-	double						Get_YRange			(void)	const	{	return( m_Extent.Get_YRange() );	}
+	double						Get_XMin			(bool bCells = false)	const	{	return( bCells ? m_Extent_Cells.Get_XMin  () : m_Extent.Get_XMin  () );	}
+	double						Get_XMax			(bool bCells = false)	const	{	return( bCells ? m_Extent_Cells.Get_XMax  () : m_Extent.Get_XMax  () );	}
+	double						Get_XRange			(bool bCells = false)	const	{	return( bCells ? m_Extent_Cells.Get_XRange() : m_Extent.Get_XRange() );	}
+
+	double						Get_YMin			(bool bCells = false)	const	{	return( bCells ? m_Extent_Cells.Get_YMin  () : m_Extent.Get_YMin  () );	}
+	double						Get_YMax			(bool bCells = false)	const	{	return( bCells ? m_Extent_Cells.Get_YMax  () : m_Extent.Get_YMax  () );	}
+	double						Get_YRange			(bool bCells = false)	const	{	return( bCells ? m_Extent_Cells.Get_YRange() : m_Extent.Get_YRange() );	}
 
 
 	//-----------------------------------------------------
@@ -413,8 +414,8 @@ public:		///////////////////////////////////////////////
 
 	TSG_Data_Type				Get_Type		(void)	const	{	return( m_Type );					}
 
-	int							Get_nValueBytes	(void)	const	{	return( SG_Data_Type_Get_Size(m_Type) );	}
-	int							Get_nLineBytes	(void)	const	{	return( m_Type != SG_DATATYPE_Bit ? SG_Data_Type_Get_Size(m_Type) * Get_NX() : 1 + Get_NX() / 8 );	}
+	int							Get_nValueBytes	(void)	const	{	return( (int)SG_Data_Type_Get_Size(m_Type) );	}
+	int							Get_nLineBytes	(void)	const	{	return( m_Type != SG_DATATYPE_Bit ? (int)SG_Data_Type_Get_Size(m_Type) * Get_NX() : 1 + Get_NX() / 8 );	}
 
 	void						Set_Description	(const SG_Char *String);
 	const SG_Char *				Get_Description	(void)	const;
@@ -431,15 +432,15 @@ public:		///////////////////////////////////////////////
 	double						Get_Cellsize	(void)	const	{	return( m_System.Get_Cellsize() );	}
 	double						Get_Cellarea	(void)	const	{	return( m_System.Get_Cellarea() );	}
 
-	const CSG_Rect &			Get_Extent		(void)	const	{	return( m_System.Get_Extent() );	}
+	const CSG_Rect &			Get_Extent		(bool bCells = false)	const	{	return( m_System.Get_Extent(bCells) );	}
 
-	double						Get_XMin		(void)	const	{	return( m_System.Get_XMin() );		}
-	double						Get_XMax		(void)	const	{	return( m_System.Get_XMax() );		}
-	double						Get_XRange		(void)	const	{	return( m_System.Get_XRange() );	}
+	double						Get_XMin		(bool bCells = false)	const	{	return( m_System.Get_XMin  (bCells) );	}
+	double						Get_XMax		(bool bCells = false)	const	{	return( m_System.Get_XMax  (bCells) );	}
+	double						Get_XRange		(bool bCells = false)	const	{	return( m_System.Get_XRange(bCells) );	}
 
-	double						Get_YMin		(void)	const	{	return( m_System.Get_YMin() );		}
-	double						Get_YMax		(void)	const	{	return( m_System.Get_YMax() );		}
-	double						Get_YRange		(void)	const	{	return( m_System.Get_YRange() );	}
+	double						Get_YMin		(bool bCells = false)	const	{	return( m_System.Get_YMin  (bCells) );	}
+	double						Get_YMax		(bool bCells = false)	const	{	return( m_System.Get_YMax  (bCells) );	}
+	double						Get_YRange		(bool bCells = false)	const	{	return( m_System.Get_YRange(bCells) );	}
 
 	double						Get_ZMin		(bool bZFactor = false);
 	double						Get_ZMax		(bool bZFactor = false);
@@ -846,6 +847,7 @@ private:	///////////////////////////////////////////////
 	bool						_Assign_Interpolated	(CSG_Grid *pSource, TSG_Grid_Interpolation Interpolation);
 	bool						_Assign_MeanValue		(CSG_Grid *pSource, bool bAreaProportional);
 	bool						_Assign_ExtremeValue	(CSG_Grid *pSource, bool bMaximum);
+	bool						_Assign_Majority		(CSG_Grid *pSource);
 
 };
 
diff --git a/src/saga_core/saga_api/grid_io.cpp b/src/saga_core/saga_api/grid_io.cpp
index fec5c17..f50f567 100644
--- a/src/saga_core/saga_api/grid_io.cpp
+++ b/src/saga_core/saga_api/grid_io.cpp
@@ -722,6 +722,11 @@ bool CSG_Grid::_Load_Native(const CSG_String &File_Name, TSG_Grid_Memory_Type Me
 		}
 	}
 
+	if( bResult )
+	{
+		Get_Projection().Load(SG_File_Make_Path(NULL, File_Name, SG_T("prj")), SG_PROJ_FMT_WKT);
+	}
+
 	return( bResult );
 }
 
@@ -766,6 +771,8 @@ bool CSG_Grid::_Save_Native(const CSG_String &File_Name, int xA, int yA, int xN,
 				bResult		= _Save_ASCII	(Stream, xA, yA, xN, yN);
 			}
 		}
+
+		Get_Projection().Save(SG_File_Make_Path(NULL, File_Name, SG_T("prj")), SG_PROJ_FMT_WKT);
 	}
 
 	return( bResult );
diff --git a/src/saga_core/saga_api/grid_operation.cpp b/src/saga_core/saga_api/grid_operation.cpp
index f6cc66b..a8e6e1a 100644
--- a/src/saga_core/saga_api/grid_operation.cpp
+++ b/src/saga_core/saga_api/grid_operation.cpp
@@ -1,1000 +1,1111 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                  grid_operation.cpp                   //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <memory.h>
-
-#include "grid.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//				Data Assignments - Value				 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSG_Grid::Assign_NoData(void)
-{
-	Assign(Get_NoData_Value());
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::Assign(double Value)
-{
-	if( is_Valid() )
-	{
-		if( Value == 0.0 && m_Memory_Type == GRID_MEMORY_Normal )
-		{
-			for(int n=0, m=_Get_nLineBytes(); n<Get_NY(); n++)
-			{
-				memset(m_Values[n], 0, m);
-			}
-		}
-		else
-		{
-			for(int n=0; n<Get_NCells(); n++)
-			{
-				Set_Value(n, Value);
-			}
-		}
-
-		//-------------------------------------------------
-		Get_History().Destroy();
-		Get_History().Add_Child(SG_T("GRID_OPERATION"), Value)->Add_Property(SG_T("NAME"), LNG("Assign"));
-
-		//-------------------------------------------------
-		m_zStats.Invalidate();
-
-		Set_Update_Flag(false);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//				Data Assignments - Grid					 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Grid::Assign(CSG_Data_Object *pObject)
-{
-	if( pObject && pObject->is_Valid() && pObject->Get_ObjectType() == Get_ObjectType() )
-	{
-		return( Assign((CSG_Grid *)pObject, GRID_INTERPOLATION_Undefined) );
-	}
-
-	return( false );
-}
-
-bool CSG_Grid::Assign(CSG_Grid *pGrid, TSG_Grid_Interpolation Interpolation)
-{
-	bool	bResult	= false;
-
-	//-----------------------------------------------------
-	if(	is_Valid() && pGrid && pGrid->is_Valid() && is_Intersecting(pGrid->Get_Extent()) != INTERSECTION_None )
-	{
-		if(	Get_Cellsize() == pGrid->Get_Cellsize()			// No-Scaling...
-		&&	fmod(Get_XMin() - pGrid->Get_XMin(), Get_Cellsize()) == 0.0
-		&&	fmod(Get_YMin() - pGrid->Get_YMin(), Get_Cellsize()) == 0.0	)
-		{
-			bResult	= _Assign_Interpolated	(pGrid, GRID_INTERPOLATION_NearestNeighbour);
-		}
-		else switch( Interpolation )
-		{
-			case GRID_INTERPOLATION_NearestNeighbour:
-			case GRID_INTERPOLATION_Bilinear:
-			case GRID_INTERPOLATION_InverseDistance:
-			case GRID_INTERPOLATION_BicubicSpline:
-			case GRID_INTERPOLATION_BSpline:
-				bResult	= _Assign_Interpolated	(pGrid, Interpolation);
-				break;
-
-			case GRID_INTERPOLATION_Mean_Nodes:
-			case GRID_INTERPOLATION_Mean_Cells:
-				bResult	= _Assign_MeanValue		(pGrid, Interpolation != GRID_INTERPOLATION_Mean_Nodes);
-				break;
-
-			case GRID_INTERPOLATION_Minimum:
-			case GRID_INTERPOLATION_Maximum:
-				bResult	= _Assign_ExtremeValue	(pGrid, Interpolation == GRID_INTERPOLATION_Maximum);
-				break;
-
-			default:
-				if( Get_Cellsize() < pGrid->Get_Cellsize() )	// Down-Scaling...
-				{
-					bResult	= _Assign_Interpolated	(pGrid, GRID_INTERPOLATION_BSpline);
-				}
-				else											// Up-Scaling...
-				{
-					bResult	= _Assign_MeanValue		(pGrid, Interpolation != GRID_INTERPOLATION_Mean_Nodes);
-				}
-				break;
-		}
-
-		//-------------------------------------------------
-		if( bResult )
-		{
-//			Set_Name				(pGrid->Get_Name());
-			Set_Description			(pGrid->Get_Description());
-			Set_Unit				(pGrid->Get_Unit());
-			Set_ZFactor				(pGrid->Get_ZFactor());
-			Set_NoData_Value_Range	(pGrid->Get_NoData_Value(), pGrid->Get_NoData_hiValue());
-		}
-	}
-
-	//-----------------------------------------------------
-	return( bResult );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::_Assign_Interpolated(CSG_Grid *pGrid, TSG_Grid_Interpolation Interpolation)
-{
-	int		x, y;
-	double	xPosition, yPosition, z;
-
-	Set_NoData_Value_Range(pGrid->Get_NoData_Value(), pGrid->Get_NoData_hiValue());
-
-	for(y=0, yPosition=Get_YMin(); y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++, yPosition+=Get_Cellsize())
-	{
-		for(x=0, xPosition=Get_XMin(); x<Get_NX(); x++, xPosition+=Get_Cellsize())
-		{
-			if( pGrid->Get_Value(xPosition, yPosition, z, Interpolation) )
-			{
-				Set_Value (x, y, z);
-			}
-			else
-			{
-				Set_NoData(x, y);
-			}
-		}
-	}
-
-	Get_History()	= pGrid->Get_History();
-	Get_History().Add_Child(SG_T("GRID_OPERATION"), CSG_String::Format(SG_T("%f -> %f"), pGrid->Get_Cellsize(), Get_Cellsize()))->Add_Property(SG_T("NAME"), LNG("Resampling"));
-
-	SG_UI_Process_Set_Ready();
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::_Assign_ExtremeValue(CSG_Grid *pGrid, bool bMaximum)
-{
-	if( Get_Cellsize() < pGrid->Get_Cellsize() || is_Intersecting(pGrid->Get_Extent()) == INTERSECTION_None )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	int			x, y, ix, iy;
-	double		px, py, ax, ay, d, z;
-	CSG_Matrix	S(Get_NY(), Get_NX()), N(Get_NY(), Get_NX());
-
-	d	= pGrid->Get_Cellsize() / Get_Cellsize();
-
-	Set_NoData_Value(pGrid->Get_NoData_Value());
-
-	Assign_NoData();
-
-	//-----------------------------------------------------
-	ax	= 0.5 + (pGrid->Get_XMin() - Get_XMin()) / Get_Cellsize();
-	ay	= 0.5 + (pGrid->Get_YMin() - Get_YMin()) / Get_Cellsize();
-
-	for(y=0, py=ay; y<pGrid->Get_NY() && SG_UI_Process_Set_Progress(y, pGrid->Get_NY()); y++, py+=d)
-	{
-		if( (iy = (int)floor(py)) >= 0 && iy < Get_NY() )
-		{
-			for(x=0, px=ax; x<pGrid->Get_NX(); x++, px+=d)
-			{
-				if( !pGrid->is_NoData(x, y) && (ix = (int)floor(px)) >= 0 && ix < Get_NX() )
-				{
-					z	= pGrid->asDouble(x, y);
-
-					if( is_NoData(ix, iy)
-					||	(bMaximum == true  && z > asDouble(ix, iy))
-					||	(bMaximum == false && z < asDouble(ix, iy)) )
-					{
-						Set_Value(ix, iy, z);
-					}
-				}
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	Get_History()	= pGrid->Get_History();
-	Get_History().Add_Child(SG_T("GRID_OPERATION"), CSG_String::Format(SG_T("%f -> %f"), pGrid->Get_Cellsize(), Get_Cellsize()))->Add_Property(SG_T("NAME"), LNG("Resampling"));
-
-	SG_UI_Process_Set_Ready();
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::_Assign_MeanValue(CSG_Grid *pGrid, bool bAreaProportional)
-{
-	if( Get_Cellsize() < pGrid->Get_Cellsize() || is_Intersecting(pGrid->Get_Extent()) == INTERSECTION_None )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	int			x, y, ix, iy, jx, jy;
-	double		px, py, ax, ay, d, w, wx, wy, z;
-	CSG_Matrix	S(Get_NY(), Get_NX()), N(Get_NY(), Get_NX());
-
-	d	= pGrid->Get_Cellsize() / Get_Cellsize();
-
-	Set_NoData_Value(pGrid->Get_NoData_Value());
-
-	Assign_NoData();
-
-	//-----------------------------------------------------
-	if( bAreaProportional == false )
-	{
-		ax	= 0.5 + (pGrid->Get_XMin() - Get_XMin()) / Get_Cellsize();
-		ay	= 0.5 + (pGrid->Get_YMin() - Get_YMin()) / Get_Cellsize();
-
-		for(y=0, py=ay; y<pGrid->Get_NY() && SG_UI_Process_Set_Progress(y, pGrid->Get_NY()); y++, py+=d)
-		{
-			if( (iy = (int)floor(py)) >= 0 && iy < Get_NY() )
-			{
-				for(x=0, px=ax; x<pGrid->Get_NX(); x++, px+=d)
-				{
-					if( !pGrid->is_NoData(x, y) && (ix = (int)floor(px)) >= 0 && ix < Get_NX() )
-					{
-						S[ix][iy]	+= pGrid->asDouble(x, y);
-						N[ix][iy]	++;
-					}
-				}
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	else // if( bAreaProportional == true )
-	{
-		ax	= ((pGrid->Get_XMin() - 0.5 * pGrid->Get_Cellsize()) - (Get_XMin() - 0.5 * Get_Cellsize())) / Get_Cellsize();
-		ay	= ((pGrid->Get_YMin() - 0.5 * pGrid->Get_Cellsize()) - (Get_YMin() - 0.5 * Get_Cellsize())) / Get_Cellsize();
-
-		for(y=0, py=ay; y<pGrid->Get_NY() && SG_UI_Process_Set_Progress(y, pGrid->Get_NY()); y++, py+=d)
-		{
-			if( py > -d || py < Get_NY() )
-			{
-				iy	= (int)floor(py);
-				wy	= (py + d) - iy;
-				wy	= wy < 1.0 ? 1.0 : wy - 1.0; 
-
-				for(x=0, px=ax; x<pGrid->Get_NX(); x++, px+=d)
-				{
-					if( !pGrid->is_NoData(x, y) && (px > -d && px < Get_NX()) )
-					{
-						ix	= (int)floor(px);
-						wx	= (px + d) - ix;
-						wx	= wx < 1.0 ? 1.0 : wx - 1.0; 
-
-						z	= pGrid->asDouble(x, y);
-
-						if( iy >= 0 && iy < Get_NY() )		// wy > 0.0 is always true
-						{
-							if( ix >= 0 && ix < Get_NX() )	// wx > 0.0 is always true
-							{
-								w	= wx * wy;
-								S[ix][iy]	+= w * z;
-								N[ix][iy]	+= w;
-							}
-
-							if( wx < 1.0 && (jx = ix + 1) >= 0 && jx < Get_NX() )
-							{
-								w	= (1.0 - wx) * wy;
-								S[jx][iy]	+= w * z;
-								N[jx][iy]	+= w;
-							}
-						}
-
-						if( wy < 1.0 && (jy = iy + 1) >= 0 && jy < Get_NY() )
-						{
-							if( ix >= 0 && ix < Get_NX() )
-							{
-								w	= wx * (1.0 - wy);
-								S[ix][jy]	+= w * z;
-								N[ix][jy]	+= w;
-							}
-
-							if( wx < 1.0 && (jx = ix + 1) >= 0 && jx < Get_NX() )
-							{
-								w	= (1.0 - wx) * (1.0 - wy);
-								S[jx][jy]	+= w * z;
-								N[jx][jy]	+= w;
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
-	{
-		for(x=0; x<Get_NX(); x++)
-		{
-			if( N[x][y] )
-			{
-				Set_Value(x, y, S[x][y] / N[x][y]);
-			}
-			else
-			{
-				Set_NoData(x, y);
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	Get_History()	= pGrid->Get_History();
-	Get_History().Add_Child(SG_T("GRID_OPERATION"), CSG_String::Format(SG_T("%f -> %f"), pGrid->Get_Cellsize(), Get_Cellsize()))->Add_Property(SG_T("NAME"), LNG("Resampling"));
-
-	SG_UI_Process_Set_Ready();
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//					Operatoren							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Grid & CSG_Grid::operator = (const CSG_Grid &Grid)
-{
-	Assign((CSG_Grid *)&Grid, GRID_INTERPOLATION_Undefined);
-
-	return( *this );
-}
-
-CSG_Grid & CSG_Grid::operator =	(double Value)
-{
-	Assign(Value);
-
-	return( *this );
-}
-
-//---------------------------------------------------------
-CSG_Grid CSG_Grid::operator +		(const CSG_Grid &Grid) const
-{
-	CSG_Grid	g(*this);
-
-	return( g._Operation_Arithmetic(Grid, GRID_OPERATION_Addition) );
-}
-
-CSG_Grid CSG_Grid::operator +		(double Value) const
-{
-	CSG_Grid	g(*this);
-
-	return( g._Operation_Arithmetic(Value, GRID_OPERATION_Addition) );
-}
-
-CSG_Grid & CSG_Grid::operator +=	(const CSG_Grid &Grid)
-{
-	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Addition) );
-}
-
-CSG_Grid & CSG_Grid::operator +=	(double Value)
-{
-	return( _Operation_Arithmetic(Value, GRID_OPERATION_Addition) );
-}
-
-CSG_Grid & CSG_Grid::Add			(const CSG_Grid &Grid)
-{
-	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Addition) );
-}
-
-CSG_Grid & CSG_Grid::Add			(double Value)
-{
-	return( _Operation_Arithmetic(Value, GRID_OPERATION_Addition) );
-}
-
-//---------------------------------------------------------
-CSG_Grid CSG_Grid::operator -		(const CSG_Grid &Grid) const
-{
-	CSG_Grid	g(*this);
-
-	return( g._Operation_Arithmetic(Grid, GRID_OPERATION_Subtraction) );
-}
-
-CSG_Grid CSG_Grid::operator -		(double Value) const
-{
-	CSG_Grid	g(*this);
-
-	return( g._Operation_Arithmetic(Value, GRID_OPERATION_Subtraction) );
-}
-
-CSG_Grid & CSG_Grid::operator -=	(const CSG_Grid &Grid)
-{
-	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Subtraction) );
-}
-
-CSG_Grid & CSG_Grid::operator -=	(double Value)
-{
-	return( _Operation_Arithmetic(Value, GRID_OPERATION_Subtraction) );
-}
-
-CSG_Grid & CSG_Grid::Subtract		(const CSG_Grid &Grid)
-{
-	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Subtraction) );
-}
-
-CSG_Grid & CSG_Grid::Subtract		(double Value)
-{
-	return( _Operation_Arithmetic(Value, GRID_OPERATION_Subtraction) );
-}
-
-//---------------------------------------------------------
-CSG_Grid CSG_Grid::operator *		(const CSG_Grid &Grid) const
-{
-	CSG_Grid	g(*this);
-
-	return( g._Operation_Arithmetic(Grid, GRID_OPERATION_Multiplication) );
-}
-
-CSG_Grid CSG_Grid::operator *		(double Value) const
-{
-	CSG_Grid	g(*this);
-
-	return( g._Operation_Arithmetic(Value, GRID_OPERATION_Multiplication) );
-}
-
-CSG_Grid & CSG_Grid::operator *=	(const CSG_Grid &Grid)
-{
-	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Multiplication) );
-}
-
-CSG_Grid & CSG_Grid::operator *=	(double Value)
-{
-	return( _Operation_Arithmetic(Value, GRID_OPERATION_Multiplication) );
-}
-
-CSG_Grid & CSG_Grid::Multiply		(const CSG_Grid &Grid)
-{
-	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Multiplication) );
-}
-
-CSG_Grid & CSG_Grid::Multiply		(double Value)
-{
-	return( _Operation_Arithmetic(Value, GRID_OPERATION_Multiplication) );
-}
-
-//---------------------------------------------------------
-CSG_Grid CSG_Grid::operator /		(const CSG_Grid &Grid) const
-{
-	CSG_Grid	g(*this);
-
-	return( g._Operation_Arithmetic(Grid, GRID_OPERATION_Division) );
-}
-
-CSG_Grid CSG_Grid::operator /		(double Value) const
-{
-	CSG_Grid	g(*this);
-
-	return( g._Operation_Arithmetic(Value, GRID_OPERATION_Division) );
-}
-
-CSG_Grid & CSG_Grid::operator /=	(const CSG_Grid &Grid)
-{
-	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Division) );
-}
-
-CSG_Grid & CSG_Grid::operator /=	(double Value)
-{
-	return( _Operation_Arithmetic(Value, GRID_OPERATION_Division) );
-}
-
-CSG_Grid & CSG_Grid::Divide			(const CSG_Grid &Grid)
-{
-	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Division) );
-}
-
-CSG_Grid & CSG_Grid::Divide			(double Value)
-{
-	return( _Operation_Arithmetic(Value, GRID_OPERATION_Division) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//					Operatoren							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Grid & CSG_Grid::_Operation_Arithmetic(const CSG_Grid &Grid, TSG_Grid_Operation Operation)
-{
-	if( is_Intersecting(Grid.Get_Extent()) )
-	{
-		int						x, y;
-		double					xWorld, yWorld, Value;
-		TSG_Grid_Interpolation	Interpolation;
-
-		Interpolation	=	Get_Cellsize() == Grid.Get_Cellsize() && fmod(Get_XMin() - Grid.Get_XMin(), Get_Cellsize()) == 0.0
-						&&	Get_Cellsize() == Grid.Get_Cellsize() && fmod(Get_YMin() - Grid.Get_YMin(), Get_Cellsize()) == 0.0
-						?	GRID_INTERPOLATION_NearestNeighbour
-						:	GRID_INTERPOLATION_BSpline;
-
-		for(y=0, yWorld=Get_YMin(); y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++, yWorld+=Get_Cellsize())
-		{
-			for(x=0, xWorld=Get_XMin(); x<Get_NX(); x++, xWorld+=Get_Cellsize())
-			{
-				if( !Grid.Get_Value(xWorld, yWorld, Value, Interpolation, true) )
-				{
-					Set_NoData(x, y);
-				}
-				else switch( Operation )
-				{
-				case GRID_OPERATION_Addition:
-					Add_Value(x, y,  Value);
-					break;
-
-				case GRID_OPERATION_Subtraction:
-					Add_Value(x, y, -Value);
-					break;
-
-				case GRID_OPERATION_Multiplication:
-					Mul_Value(x, y,  Value);
-					break;
-
-				case GRID_OPERATION_Division:
-					if( Value != 0.0 )
-					{
-						Mul_Value(x, y, 1.0 / Value);
-					}
-					else
-					{
-						Set_NoData(x, y);
-					}
-					break;
-				}
-			}
-		}
-
-		SG_UI_Process_Set_Ready();
-
-		//-------------------------------------------------
-		switch( Operation )
-		{
-		case GRID_OPERATION_Addition:
-			Get_History().Add_Child(SG_T("GRID_OPERATION"), Grid.Get_Name())->Add_Property(SG_T("NAME"), LNG("Addition"));
-			break;
-
-		case GRID_OPERATION_Subtraction:
-			Get_History().Add_Child(SG_T("GRID_OPERATION"), Grid.Get_Name())->Add_Property(SG_T("NAME"), LNG("Subtraction"));
-			break;
-
-		case GRID_OPERATION_Multiplication:
-			Get_History().Add_Child(SG_T("GRID_OPERATION"), Grid.Get_Name())->Add_Property(SG_T("NAME"), LNG("Multiplication"));
-			break;
-
-		case GRID_OPERATION_Division:
-			Get_History().Add_Child(SG_T("GRID_OPERATION"), Grid.Get_Name())->Add_Property(SG_T("NAME"), LNG("Division"));
-			break;
-		}
-
-		Get_History()	+= ((CSG_Grid *)&Grid)->Get_History();
-	}
-
-	return( *this );
-}
-
-//---------------------------------------------------------
-CSG_Grid & CSG_Grid::_Operation_Arithmetic(double Value, TSG_Grid_Operation Operation)
-{
-	//-----------------------------------------------------
-	switch( Operation )
-	{
-	case GRID_OPERATION_Addition:
-		Get_History().Add_Child(SG_T("GRID_OPERATION"), Value)->Add_Property(SG_T("NAME"), LNG("Addition"));
-		break;
-
-	case GRID_OPERATION_Subtraction:
-		Get_History().Add_Child(SG_T("GRID_OPERATION"), Value)->Add_Property(SG_T("NAME"), LNG("Subtraction"));
-		Value	= -Value;
-		break;
-
-	case GRID_OPERATION_Multiplication:
-		Get_History().Add_Child(SG_T("GRID_OPERATION"), Value)->Add_Property(SG_T("NAME"), LNG("Multiplication"));
-		break;
-
-	case GRID_OPERATION_Division:
-		if( Value == 0.0 )
-			return( *this );
-
-		Get_History().Add_Child(SG_T("GRID_OPERATION"), Value)->Add_Property(SG_T("NAME"), LNG("Division"));
-		Value	= 1.0 / Value;
-		break;
-	}
-
-	//-----------------------------------------------------
-	for(int y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
-	{
-		for(int x=0; x<Get_NX(); x++)
-		{
-			if( !is_NoData(x, y) )
-			{
-				switch( Operation )
-				{
-				case GRID_OPERATION_Addition:
-				case GRID_OPERATION_Subtraction:
-					Add_Value(x, y, Value);
-					break;
-
-				case GRID_OPERATION_Multiplication:
-				case GRID_OPERATION_Division:
-					Mul_Value(x, y, Value);
-					break;
-				}
-			}
-		}
-	}
-
-	SG_UI_Process_Set_Ready();
-
-	return( *this );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//					Grid-Operations - A					 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSG_Grid::Invert(void)
-{
-	int		x, y;
-	double	zMin, zMax;
-
-	if( is_Valid() && Get_ZRange() > 0.0 )
-	{
-		zMin	= Get_ZMin();
-		zMax	= Get_ZMax();
-
-		for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
-		{
-			for(x=0; x<Get_NX(); x++)
-			{
-				if( !is_NoData(x, y) )
-				{
-					Set_Value(x, y, zMax - (asDouble(x, y) - zMin));
-				}
-			}
-		}
-
-		SG_UI_Process_Set_Ready();
-
-		Get_History().Add_Child(SG_T("GRID_OPERATION"), LNG("Inversion"));
-	}
-}
-
-//---------------------------------------------------------
-void CSG_Grid::Flip(void)
-{
-	int		x, yA, yB;
-	double	*Line, d;
-
-	if( is_Valid() )
-	{
-		Line	= (double *)SG_Malloc(Get_NX() * sizeof(double));
-
-		for(yA=0, yB=Get_NY()-1; yA<yB && SG_UI_Process_Set_Progress(2 * yA, Get_NY()); yA++, yB--)
-		{
-			for(x=0; x<Get_NX(); x++)
-			{
-				Line[x]	= asDouble(x, yA);
-			}
-
-			for(x=0; x<Get_NX(); x++)
-			{
-				d		= Line[x];
-				Line[x]	= asDouble(x, yB);
-				Set_Value(x, yB, d);
-			}
-
-			for(x=0; x<Get_NX(); x++)
-			{
-				Set_Value(x, yA, Line[x]);
-			}
-		}
-
-		SG_UI_Process_Set_Ready();
-
-		SG_Free(Line);
-
-		Get_History().Add_Child(SG_T("GRID_OPERATION"), LNG("Vertically mirrored"));
-	}
-}
-
-//---------------------------------------------------------
-void CSG_Grid::Mirror(void)
-{
-	int		xA, xB, y;
-	double	d;
-
-	if( is_Valid() )
-	{
-		for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
-		{
-			for(xA=0, xB=Get_NX()-1; xA<xB; xA++, xB--)
-			{
-				d			=    asDouble(xA, y);
-				Set_Value(xA, y, asDouble(xB, y));
-				Set_Value(xB, y, d);
-			}
-		}
-
-		SG_UI_Process_Set_Ready();
-
-		Get_History().Add_Child(SG_T("GRID_OPERATION"), LNG("Horizontally mirrored"));
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//					Grid-Operations - B					 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define NORMALISED_NODATA	9.0
-
-//---------------------------------------------------------
-void CSG_Grid::Normalise(void)
-{
-	if( is_Valid() )
-	{
-		Update();
-
-		if( m_zStats.Get_StdDev() > 0.0 )
-		{
-			int		x, y;
-
-			if(	(Get_NoData_hiValue() > -NORMALISED_NODATA && Get_NoData_hiValue() < NORMALISED_NODATA)
-			||	(Get_NoData_Value  () > -NORMALISED_NODATA && Get_NoData_Value  () < NORMALISED_NODATA) )
-			{
-				for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
-				{
-					for(x=0; x<Get_NX(); x++)
-					{
-						if( is_NoData(x, y) )
-						{
-							Set_Value(x, y, -NORMALISED_NODATA);
-						}
-					}
-				}
-
-				Set_NoData_Value(-NORMALISED_NODATA);
-			}
-
-			for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
-			{
-				for(x=0; x<Get_NX(); x++)
-				{
-					if( !is_NoData(x, y) )
-					{
-						Set_Value(x, y, (asDouble(x, y) - m_zStats.Get_Mean()) / m_zStats.Get_StdDev() );
-					}
-				}
-			}
-
-			SG_UI_Process_Set_Ready();
-
-			Get_History().Add_Child(SG_T("GRID_OPERATION"), LNG("Normalisation"));
-		}
-	}
-}
-
-//---------------------------------------------------------
-void CSG_Grid::DeNormalise(double ArithMean, double Variance)
-{
-	int		x, y;
-
-	if( is_Valid() )
-	{
-		Variance	= sqrt(Variance);
-
-		for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
-		{
-			for(x=0; x<Get_NX(); x++)
-			{
-				if( !is_NoData(x, y) )
-				{
-					Set_Value(x, y, Variance * asDouble(x, y) + ArithMean);
-				}
-			}
-		}
-
-		SG_UI_Process_Set_Ready();
-
-		Get_History().Add_Child(SG_T("GRID_OPERATION"), LNG("Denormalisation"));
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int CSG_Grid::Get_Gradient_NeighborDir(int x, int y, bool bMustBeLower)	const
-{
-	int		i, ix, iy, Direction;
-	double	z, dz, dzMax;
-
-	Direction	= -1;
-
-	if( is_InGrid(x, y) )
-	{
-		z		= asDouble(x, y);
-		dzMax	= 0.0;
-
-		for(i=0; i<8; i++)
-		{
-			ix	= m_System.Get_xTo(i, x);
-			iy	= m_System.Get_yTo(i, y);
-
-			if( !is_InGrid(ix, iy) )
-			{
-				if( 1 )	// flag 'bStopOnNoData'
-				{
-					return( -1 );
-				}
-			}
-			else
-			{
-				dz	= (z - asDouble(ix, iy)) / m_System.Get_Length(i);
-
-				if( (bMustBeLower && dz > 0.0) || !bMustBeLower )
-				{
-					if( Direction < 0 || (dz > dzMax) )
-					{
-						Direction	= i;
-						dzMax		= dz;
-					}
-				}
-			}
-		}
-	}
-
-	return( Direction );
-}
-
-//---------------------------------------------------------
-bool CSG_Grid::Get_Gradient(int x, int y, double &Decline, double &Azimuth) const
-{
-	int		i, ix, iy, iDir;
-	double	z, zm[4], G, H;
-
-	if( is_InGrid(x, y) )
-	{
-		z		= asDouble(x, y);
-
-		for(i=0, iDir=0; i<4; i++, iDir+=2)
-		{
-			ix		= m_System.Get_xTo(iDir, x);
-			iy		= m_System.Get_yTo(iDir, y);
-
-			if( is_InGrid(ix, iy) )
-			{
-				zm[i]	= asDouble(ix, iy) - z;
-			}
-			else
-			{
-				ix		= m_System.Get_xFrom(iDir, x);
-				iy		= m_System.Get_yFrom(iDir, y);
-
-				if( is_InGrid(ix, iy) )
-				{
-					zm[i]	= z - asDouble(ix, iy);
-				}
-				else
-				{
-					zm[i]	= 0.0;
-				}
-			}
-		}
-
-		G		= (zm[0] - zm[2]) / (2.0 * Get_Cellsize());
-        H		= (zm[1] - zm[3]) / (2.0 * Get_Cellsize());
-
-		Decline	= atan(sqrt(G*G + H*H));
-
-		if( G != 0.0 )
-			Azimuth	= M_PI_180 + atan2(H, G);
-		else
-			Azimuth	= H > 0.0 ? M_PI_270 : (H < 0.0 ? M_PI_090 : -1.0);
-
-		return( true );
-	}
-
-	Decline	= 0.0;
-	Azimuth	= -1.0;
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//           Application Programming Interface           //
+//                                                       //
+//                  Library: SAGA_API                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                  grid_operation.cpp                   //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <memory.h>
+
+#include "grid.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Data Assignments - Value				 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CSG_Grid::Assign_NoData(void)
+{
+	Assign(Get_NoData_Value());
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::Assign(double Value)
+{
+	if( is_Valid() )
+	{
+		if( Value == 0.0 && m_Memory_Type == GRID_MEMORY_Normal )
+		{
+			for(int n=0, m=_Get_nLineBytes(); n<Get_NY(); n++)
+			{
+				memset(m_Values[n], 0, m);
+			}
+		}
+		else
+		{
+			for(int n=0; n<Get_NCells(); n++)
+			{
+				Set_Value(n, Value);
+			}
+		}
+
+		//-------------------------------------------------
+		Get_History().Destroy();
+		Get_History().Add_Child(SG_T("GRID_OPERATION"), Value)->Add_Property(SG_T("NAME"), LNG("Assign"));
+
+		//-------------------------------------------------
+		m_zStats.Invalidate();
+
+		Set_Update_Flag(false);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//				Data Assignments - Grid					 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Grid::Assign(CSG_Data_Object *pObject)
+{
+	if( pObject && pObject->is_Valid() && pObject->Get_ObjectType() == Get_ObjectType() && Assign((CSG_Grid *)pObject, GRID_INTERPOLATION_Undefined) )
+	{
+		if( pObject->Get_Projection().is_Okay() )
+		{
+			Get_Projection()	= pObject->Get_Projection();
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+bool CSG_Grid::Assign(CSG_Grid *pGrid, TSG_Grid_Interpolation Interpolation)
+{
+	bool	bResult	= false;
+
+	//-----------------------------------------------------
+	if(	is_Valid() && pGrid && pGrid->is_Valid() && is_Intersecting(pGrid->Get_Extent()) != INTERSECTION_None )
+	{
+		if(	Get_Cellsize() == pGrid->Get_Cellsize()			// No-Scaling...
+		&&	fmod(Get_XMin() - pGrid->Get_XMin(), Get_Cellsize()) == 0.0
+		&&	fmod(Get_YMin() - pGrid->Get_YMin(), Get_Cellsize()) == 0.0	)
+		{
+			bResult	= _Assign_Interpolated	(pGrid, GRID_INTERPOLATION_NearestNeighbour);
+		}
+		else switch( Interpolation )
+		{
+			case GRID_INTERPOLATION_NearestNeighbour:
+			case GRID_INTERPOLATION_Bilinear:
+			case GRID_INTERPOLATION_InverseDistance:
+			case GRID_INTERPOLATION_BicubicSpline:
+			case GRID_INTERPOLATION_BSpline:
+				bResult	= _Assign_Interpolated	(pGrid, Interpolation);
+				break;
+
+			case GRID_INTERPOLATION_Mean_Nodes:
+			case GRID_INTERPOLATION_Mean_Cells:
+				bResult	= _Assign_MeanValue		(pGrid, Interpolation != GRID_INTERPOLATION_Mean_Nodes);
+				break;
+
+			case GRID_INTERPOLATION_Minimum:
+			case GRID_INTERPOLATION_Maximum:
+				bResult	= _Assign_ExtremeValue	(pGrid, Interpolation == GRID_INTERPOLATION_Maximum);
+				break;
+
+			case GRID_INTERPOLATION_Majority:
+				bResult	= _Assign_Majority		(pGrid);
+				break;
+
+			default:
+				if( Get_Cellsize() < pGrid->Get_Cellsize() )	// Down-Scaling...
+				{
+					bResult	= _Assign_Interpolated	(pGrid, GRID_INTERPOLATION_BSpline);
+				}
+				else											// Up-Scaling...
+				{
+					bResult	= _Assign_MeanValue		(pGrid, Interpolation != GRID_INTERPOLATION_Mean_Nodes);
+				}
+				break;
+		}
+
+		//-------------------------------------------------
+		if( bResult )
+		{
+//			Set_Name				(pGrid->Get_Name());
+			Set_Description			(pGrid->Get_Description());
+			Set_Unit				(pGrid->Get_Unit());
+			Set_ZFactor				(pGrid->Get_ZFactor());
+			Set_NoData_Value_Range	(pGrid->Get_NoData_Value(), pGrid->Get_NoData_hiValue());
+		}
+	}
+
+	//-----------------------------------------------------
+	return( bResult );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::_Assign_Interpolated(CSG_Grid *pGrid, TSG_Grid_Interpolation Interpolation)
+{
+	int		x, y;
+	double	xPosition, yPosition, z;
+
+	Set_NoData_Value_Range(pGrid->Get_NoData_Value(), pGrid->Get_NoData_hiValue());
+
+	for(y=0, yPosition=Get_YMin(); y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++, yPosition+=Get_Cellsize())
+	{
+		for(x=0, xPosition=Get_XMin(); x<Get_NX(); x++, xPosition+=Get_Cellsize())
+		{
+			if( pGrid->Get_Value(xPosition, yPosition, z, Interpolation) )
+			{
+				Set_Value (x, y, z);
+			}
+			else
+			{
+				Set_NoData(x, y);
+			}
+		}
+	}
+
+	Get_History()	= pGrid->Get_History();
+	Get_History().Add_Child(SG_T("GRID_OPERATION"), CSG_String::Format(SG_T("%f -> %f"), pGrid->Get_Cellsize(), Get_Cellsize()))->Add_Property(SG_T("NAME"), LNG("Resampling"));
+
+	SG_UI_Process_Set_Ready();
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::_Assign_ExtremeValue(CSG_Grid *pGrid, bool bMaximum)
+{
+	if( Get_Cellsize() < pGrid->Get_Cellsize() || is_Intersecting(pGrid->Get_Extent()) == INTERSECTION_None )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	int			x, y, ix, iy;
+	double		px, py, ax, ay, d, z;
+	CSG_Matrix	S(Get_NY(), Get_NX()), N(Get_NY(), Get_NX());
+
+	d	= pGrid->Get_Cellsize() / Get_Cellsize();
+
+	Set_NoData_Value(pGrid->Get_NoData_Value());
+
+	Assign_NoData();
+
+	//-----------------------------------------------------
+	ax	= 0.5 + (pGrid->Get_XMin() - Get_XMin()) / Get_Cellsize();
+	ay	= 0.5 + (pGrid->Get_YMin() - Get_YMin()) / Get_Cellsize();
+
+	for(y=0, py=ay; y<pGrid->Get_NY() && SG_UI_Process_Set_Progress(y, pGrid->Get_NY()); y++, py+=d)
+	{
+		if( (iy = (int)floor(py)) >= 0 && iy < Get_NY() )
+		{
+			for(x=0, px=ax; x<pGrid->Get_NX(); x++, px+=d)
+			{
+				if( !pGrid->is_NoData(x, y) && (ix = (int)floor(px)) >= 0 && ix < Get_NX() )
+				{
+					z	= pGrid->asDouble(x, y);
+
+					if( is_NoData(ix, iy)
+					||	(bMaximum == true  && z > asDouble(ix, iy))
+					||	(bMaximum == false && z < asDouble(ix, iy)) )
+					{
+						Set_Value(ix, iy, z);
+					}
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	Get_History()	= pGrid->Get_History();
+	Get_History().Add_Child(SG_T("GRID_OPERATION"), CSG_String::Format(SG_T("%f -> %f"), pGrid->Get_Cellsize(), Get_Cellsize()))->Add_Property(SG_T("NAME"), LNG("Resampling"));
+
+	SG_UI_Process_Set_Ready();
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::_Assign_MeanValue(CSG_Grid *pGrid, bool bAreaProportional)
+{
+	if( Get_Cellsize() < pGrid->Get_Cellsize() || is_Intersecting(pGrid->Get_Extent()) == INTERSECTION_None )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	int			x, y, ix, iy, jx, jy;
+	double		px, py, ax, ay, d, w, wx, wy, z;
+	CSG_Matrix	S(Get_NY(), Get_NX()), N(Get_NY(), Get_NX());
+
+	d	= pGrid->Get_Cellsize() / Get_Cellsize();
+
+	Set_NoData_Value(pGrid->Get_NoData_Value());
+
+	Assign_NoData();
+
+	//-----------------------------------------------------
+	if( bAreaProportional == false )
+	{
+		ax	= 0.5 + (pGrid->Get_XMin() - Get_XMin()) / Get_Cellsize();
+		ay	= 0.5 + (pGrid->Get_YMin() - Get_YMin()) / Get_Cellsize();
+
+		for(y=0, py=ay; y<pGrid->Get_NY() && SG_UI_Process_Set_Progress(y, pGrid->Get_NY()); y++, py+=d)
+		{
+			if( (iy = (int)floor(py)) >= 0 && iy < Get_NY() )
+			{
+				for(x=0, px=ax; x<pGrid->Get_NX(); x++, px+=d)
+				{
+					if( !pGrid->is_NoData(x, y) && (ix = (int)floor(px)) >= 0 && ix < Get_NX() )
+					{
+						S[ix][iy]	+= pGrid->asDouble(x, y);
+						N[ix][iy]	++;
+					}
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	else // if( bAreaProportional == true )
+	{
+		ax	= ((pGrid->Get_XMin() - 0.5 * pGrid->Get_Cellsize()) - (Get_XMin() - 0.5 * Get_Cellsize())) / Get_Cellsize();
+		ay	= ((pGrid->Get_YMin() - 0.5 * pGrid->Get_Cellsize()) - (Get_YMin() - 0.5 * Get_Cellsize())) / Get_Cellsize();
+
+		for(y=0, py=ay; y<pGrid->Get_NY() && SG_UI_Process_Set_Progress(y, pGrid->Get_NY()); y++, py+=d)
+		{
+			if( py > -d || py < Get_NY() )
+			{
+				iy	= (int)floor(py);
+				wy	= (py + d) - iy;
+				wy	= wy < 1.0 ? 1.0 : wy - 1.0; 
+
+				for(x=0, px=ax; x<pGrid->Get_NX(); x++, px+=d)
+				{
+					if( !pGrid->is_NoData(x, y) && (px > -d && px < Get_NX()) )
+					{
+						ix	= (int)floor(px);
+						wx	= (px + d) - ix;
+						wx	= wx < 1.0 ? 1.0 : wx - 1.0; 
+
+						z	= pGrid->asDouble(x, y);
+
+						if( iy >= 0 && iy < Get_NY() )		// wy > 0.0 is always true
+						{
+							if( ix >= 0 && ix < Get_NX() )	// wx > 0.0 is always true
+							{
+								w	= wx * wy;
+								S[ix][iy]	+= w * z;
+								N[ix][iy]	+= w;
+							}
+
+							if( wx < 1.0 && (jx = ix + 1) >= 0 && jx < Get_NX() )
+							{
+								w	= (1.0 - wx) * wy;
+								S[jx][iy]	+= w * z;
+								N[jx][iy]	+= w;
+							}
+						}
+
+						if( wy < 1.0 && (jy = iy + 1) >= 0 && jy < Get_NY() )
+						{
+							if( ix >= 0 && ix < Get_NX() )
+							{
+								w	= wx * (1.0 - wy);
+								S[ix][jy]	+= w * z;
+								N[ix][jy]	+= w;
+							}
+
+							if( wx < 1.0 && (jx = ix + 1) >= 0 && jx < Get_NX() )
+							{
+								w	= (1.0 - wx) * (1.0 - wy);
+								S[jx][jy]	+= w * z;
+								N[jx][jy]	+= w;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
+	{
+		for(x=0; x<Get_NX(); x++)
+		{
+			if( N[x][y] )
+			{
+				Set_Value(x, y, S[x][y] / N[x][y]);
+			}
+			else
+			{
+				Set_NoData(x, y);
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	Get_History()	= pGrid->Get_History();
+	Get_History().Add_Child(SG_T("GRID_OPERATION"), CSG_String::Format(SG_T("%f -> %f"), pGrid->Get_Cellsize(), Get_Cellsize()))->Add_Property(SG_T("NAME"), LNG("Resampling"));
+
+	SG_UI_Process_Set_Ready();
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Grid::_Assign_Majority(CSG_Grid *pGrid)
+{
+	if( Get_Cellsize() < pGrid->Get_Cellsize() || is_Intersecting(pGrid->Get_Extent()) == INTERSECTION_None )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	CSG_Class_Statistics	m;
+
+	Set_NoData_Value(pGrid->Get_NoData_Value());
+
+	Assign_NoData();
+
+	//-----------------------------------------------------
+	int	ay, by	= (int)(1.0 + (((0 - 0.5) * Get_Cellsize() + Get_YMin()) - pGrid->Get_YMin()) / pGrid->Get_Cellsize());
+
+	for(int y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
+	{
+		ay	= by;
+		by	= (int)(1.0 + (((y + 0.5) * Get_Cellsize() + Get_YMin()) - pGrid->Get_YMin()) / pGrid->Get_Cellsize());
+
+		if( ay < pGrid->Get_NY() && by > 0 )
+		{
+			if( ay < 0 )
+			{
+				ay	= 0;
+			}
+
+			if( by > pGrid->Get_NY() )
+			{
+				by	= pGrid->Get_NY();
+			}
+
+			int	ax, bx	= (int)(1.0 + (((0 - 0.5) * Get_Cellsize() + Get_XMin()) - pGrid->Get_XMin()) / pGrid->Get_Cellsize());
+
+			for(int x=0; x<Get_NX(); x++)
+			{
+				ax	= bx;
+				bx	= (int)(1.0 + (((x + 0.5) * Get_Cellsize() + Get_XMin()) - pGrid->Get_XMin()) / pGrid->Get_Cellsize());
+
+				if( ax < pGrid->Get_NX() && bx > 0 )
+				{
+					m.Reset();
+
+					if( ax < 0 )
+					{
+						ax	= 0;
+					}
+
+					if( bx > pGrid->Get_NX() )
+					{
+						bx	= pGrid->Get_NX();
+					}
+
+					for(int iy=ay; iy<by; iy++)
+					{
+						for(int ix=ax; ix<bx; ix++)
+						{
+							if( !pGrid->is_NoData(ix, iy) )
+							{
+								m.Add_Value(pGrid->asDouble(ix, iy));
+							}
+						}
+					}
+
+					int		n;
+					double	z;
+
+					if( m.Get_Majority(z, n) )//&& n > 1 )
+					{
+						Set_Value(x, y, z);
+					}
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	Get_History()	= pGrid->Get_History();
+	Get_History().Add_Child(SG_T("GRID_OPERATION"), CSG_String::Format(SG_T("%f -> %f"), pGrid->Get_Cellsize(), Get_Cellsize()))->Add_Property(SG_T("NAME"), LNG("Resampling"));
+
+	SG_UI_Process_Set_Ready();
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//					Operatoren							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Grid & CSG_Grid::operator = (const CSG_Grid &Grid)
+{
+	Assign((CSG_Grid *)&Grid, GRID_INTERPOLATION_Undefined);
+
+	return( *this );
+}
+
+CSG_Grid & CSG_Grid::operator =	(double Value)
+{
+	Assign(Value);
+
+	return( *this );
+}
+
+//---------------------------------------------------------
+CSG_Grid CSG_Grid::operator +		(const CSG_Grid &Grid) const
+{
+	CSG_Grid	g(*this);
+
+	return( g._Operation_Arithmetic(Grid, GRID_OPERATION_Addition) );
+}
+
+CSG_Grid CSG_Grid::operator +		(double Value) const
+{
+	CSG_Grid	g(*this);
+
+	return( g._Operation_Arithmetic(Value, GRID_OPERATION_Addition) );
+}
+
+CSG_Grid & CSG_Grid::operator +=	(const CSG_Grid &Grid)
+{
+	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Addition) );
+}
+
+CSG_Grid & CSG_Grid::operator +=	(double Value)
+{
+	return( _Operation_Arithmetic(Value, GRID_OPERATION_Addition) );
+}
+
+CSG_Grid & CSG_Grid::Add			(const CSG_Grid &Grid)
+{
+	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Addition) );
+}
+
+CSG_Grid & CSG_Grid::Add			(double Value)
+{
+	return( _Operation_Arithmetic(Value, GRID_OPERATION_Addition) );
+}
+
+//---------------------------------------------------------
+CSG_Grid CSG_Grid::operator -		(const CSG_Grid &Grid) const
+{
+	CSG_Grid	g(*this);
+
+	return( g._Operation_Arithmetic(Grid, GRID_OPERATION_Subtraction) );
+}
+
+CSG_Grid CSG_Grid::operator -		(double Value) const
+{
+	CSG_Grid	g(*this);
+
+	return( g._Operation_Arithmetic(Value, GRID_OPERATION_Subtraction) );
+}
+
+CSG_Grid & CSG_Grid::operator -=	(const CSG_Grid &Grid)
+{
+	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Subtraction) );
+}
+
+CSG_Grid & CSG_Grid::operator -=	(double Value)
+{
+	return( _Operation_Arithmetic(Value, GRID_OPERATION_Subtraction) );
+}
+
+CSG_Grid & CSG_Grid::Subtract		(const CSG_Grid &Grid)
+{
+	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Subtraction) );
+}
+
+CSG_Grid & CSG_Grid::Subtract		(double Value)
+{
+	return( _Operation_Arithmetic(Value, GRID_OPERATION_Subtraction) );
+}
+
+//---------------------------------------------------------
+CSG_Grid CSG_Grid::operator *		(const CSG_Grid &Grid) const
+{
+	CSG_Grid	g(*this);
+
+	return( g._Operation_Arithmetic(Grid, GRID_OPERATION_Multiplication) );
+}
+
+CSG_Grid CSG_Grid::operator *		(double Value) const
+{
+	CSG_Grid	g(*this);
+
+	return( g._Operation_Arithmetic(Value, GRID_OPERATION_Multiplication) );
+}
+
+CSG_Grid & CSG_Grid::operator *=	(const CSG_Grid &Grid)
+{
+	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Multiplication) );
+}
+
+CSG_Grid & CSG_Grid::operator *=	(double Value)
+{
+	return( _Operation_Arithmetic(Value, GRID_OPERATION_Multiplication) );
+}
+
+CSG_Grid & CSG_Grid::Multiply		(const CSG_Grid &Grid)
+{
+	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Multiplication) );
+}
+
+CSG_Grid & CSG_Grid::Multiply		(double Value)
+{
+	return( _Operation_Arithmetic(Value, GRID_OPERATION_Multiplication) );
+}
+
+//---------------------------------------------------------
+CSG_Grid CSG_Grid::operator /		(const CSG_Grid &Grid) const
+{
+	CSG_Grid	g(*this);
+
+	return( g._Operation_Arithmetic(Grid, GRID_OPERATION_Division) );
+}
+
+CSG_Grid CSG_Grid::operator /		(double Value) const
+{
+	CSG_Grid	g(*this);
+
+	return( g._Operation_Arithmetic(Value, GRID_OPERATION_Division) );
+}
+
+CSG_Grid & CSG_Grid::operator /=	(const CSG_Grid &Grid)
+{
+	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Division) );
+}
+
+CSG_Grid & CSG_Grid::operator /=	(double Value)
+{
+	return( _Operation_Arithmetic(Value, GRID_OPERATION_Division) );
+}
+
+CSG_Grid & CSG_Grid::Divide			(const CSG_Grid &Grid)
+{
+	return( _Operation_Arithmetic(Grid, GRID_OPERATION_Division) );
+}
+
+CSG_Grid & CSG_Grid::Divide			(double Value)
+{
+	return( _Operation_Arithmetic(Value, GRID_OPERATION_Division) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//					Operatoren							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Grid & CSG_Grid::_Operation_Arithmetic(const CSG_Grid &Grid, TSG_Grid_Operation Operation)
+{
+	if( is_Intersecting(Grid.Get_Extent()) )
+	{
+		int						x, y;
+		double					xWorld, yWorld, Value;
+		TSG_Grid_Interpolation	Interpolation;
+
+		Interpolation	=	Get_Cellsize() == Grid.Get_Cellsize() && fmod(Get_XMin() - Grid.Get_XMin(), Get_Cellsize()) == 0.0
+						&&	Get_Cellsize() == Grid.Get_Cellsize() && fmod(Get_YMin() - Grid.Get_YMin(), Get_Cellsize()) == 0.0
+						?	GRID_INTERPOLATION_NearestNeighbour
+						:	GRID_INTERPOLATION_BSpline;
+
+		for(y=0, yWorld=Get_YMin(); y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++, yWorld+=Get_Cellsize())
+		{
+			for(x=0, xWorld=Get_XMin(); x<Get_NX(); x++, xWorld+=Get_Cellsize())
+			{
+				if( !Grid.Get_Value(xWorld, yWorld, Value, Interpolation, true) )
+				{
+					Set_NoData(x, y);
+				}
+				else switch( Operation )
+				{
+				case GRID_OPERATION_Addition:
+					Add_Value(x, y,  Value);
+					break;
+
+				case GRID_OPERATION_Subtraction:
+					Add_Value(x, y, -Value);
+					break;
+
+				case GRID_OPERATION_Multiplication:
+					Mul_Value(x, y,  Value);
+					break;
+
+				case GRID_OPERATION_Division:
+					if( Value != 0.0 )
+					{
+						Mul_Value(x, y, 1.0 / Value);
+					}
+					else
+					{
+						Set_NoData(x, y);
+					}
+					break;
+				}
+			}
+		}
+
+		SG_UI_Process_Set_Ready();
+
+		//-------------------------------------------------
+		switch( Operation )
+		{
+		case GRID_OPERATION_Addition:
+			Get_History().Add_Child(SG_T("GRID_OPERATION"), Grid.Get_Name())->Add_Property(SG_T("NAME"), LNG("Addition"));
+			break;
+
+		case GRID_OPERATION_Subtraction:
+			Get_History().Add_Child(SG_T("GRID_OPERATION"), Grid.Get_Name())->Add_Property(SG_T("NAME"), LNG("Subtraction"));
+			break;
+
+		case GRID_OPERATION_Multiplication:
+			Get_History().Add_Child(SG_T("GRID_OPERATION"), Grid.Get_Name())->Add_Property(SG_T("NAME"), LNG("Multiplication"));
+			break;
+
+		case GRID_OPERATION_Division:
+			Get_History().Add_Child(SG_T("GRID_OPERATION"), Grid.Get_Name())->Add_Property(SG_T("NAME"), LNG("Division"));
+			break;
+		}
+
+		Get_History()	+= ((CSG_Grid *)&Grid)->Get_History();
+	}
+
+	return( *this );
+}
+
+//---------------------------------------------------------
+CSG_Grid & CSG_Grid::_Operation_Arithmetic(double Value, TSG_Grid_Operation Operation)
+{
+	//-----------------------------------------------------
+	switch( Operation )
+	{
+	case GRID_OPERATION_Addition:
+		if( Value == 0.0 )
+			return( *this );
+
+		Get_History().Add_Child(SG_T("GRID_OPERATION"), Value)->Add_Property(SG_T("NAME"), LNG("Addition"));
+		break;
+
+	case GRID_OPERATION_Subtraction:
+		if( Value == 0.0 )
+			return( *this );
+
+		Get_History().Add_Child(SG_T("GRID_OPERATION"), Value)->Add_Property(SG_T("NAME"), LNG("Subtraction"));
+		Value	= -Value;
+		break;
+
+	case GRID_OPERATION_Multiplication:
+		if( Value == 1.0 )
+			return( *this );
+
+		Get_History().Add_Child(SG_T("GRID_OPERATION"), Value)->Add_Property(SG_T("NAME"), LNG("Multiplication"));
+		break;
+
+	case GRID_OPERATION_Division:
+		if( Value == 0.0 )
+			return( *this );
+
+		Get_History().Add_Child(SG_T("GRID_OPERATION"), Value)->Add_Property(SG_T("NAME"), LNG("Division"));
+		Value	= 1.0 / Value;
+		break;
+	}
+
+	//-----------------------------------------------------
+	for(int y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
+	{
+		for(int x=0; x<Get_NX(); x++)
+		{
+			if( !is_NoData(x, y) )
+			{
+				switch( Operation )
+				{
+				case GRID_OPERATION_Addition:
+				case GRID_OPERATION_Subtraction:
+					Add_Value(x, y, Value);
+					break;
+
+				case GRID_OPERATION_Multiplication:
+				case GRID_OPERATION_Division:
+					Mul_Value(x, y, Value);
+					break;
+				}
+			}
+		}
+	}
+
+	SG_UI_Process_Set_Ready();
+
+	return( *this );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//					Grid-Operations - A					 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CSG_Grid::Invert(void)
+{
+	int		x, y;
+	double	zMin, zMax;
+
+	if( is_Valid() && Get_ZRange() > 0.0 )
+	{
+		zMin	= Get_ZMin();
+		zMax	= Get_ZMax();
+
+		for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
+		{
+			for(x=0; x<Get_NX(); x++)
+			{
+				if( !is_NoData(x, y) )
+				{
+					Set_Value(x, y, zMax - (asDouble(x, y) - zMin));
+				}
+			}
+		}
+
+		SG_UI_Process_Set_Ready();
+
+		Get_History().Add_Child(SG_T("GRID_OPERATION"), LNG("Inversion"));
+	}
+}
+
+//---------------------------------------------------------
+void CSG_Grid::Flip(void)
+{
+	int		x, yA, yB;
+	double	*Line, d;
+
+	if( is_Valid() )
+	{
+		Line	= (double *)SG_Malloc(Get_NX() * sizeof(double));
+
+		for(yA=0, yB=Get_NY()-1; yA<yB && SG_UI_Process_Set_Progress(2 * yA, Get_NY()); yA++, yB--)
+		{
+			for(x=0; x<Get_NX(); x++)
+			{
+				Line[x]	= asDouble(x, yA);
+			}
+
+			for(x=0; x<Get_NX(); x++)
+			{
+				d		= Line[x];
+				Line[x]	= asDouble(x, yB);
+				Set_Value(x, yB, d);
+			}
+
+			for(x=0; x<Get_NX(); x++)
+			{
+				Set_Value(x, yA, Line[x]);
+			}
+		}
+
+		SG_UI_Process_Set_Ready();
+
+		SG_Free(Line);
+
+		Get_History().Add_Child(SG_T("GRID_OPERATION"), LNG("Vertically mirrored"));
+	}
+}
+
+//---------------------------------------------------------
+void CSG_Grid::Mirror(void)
+{
+	int		xA, xB, y;
+	double	d;
+
+	if( is_Valid() )
+	{
+		for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
+		{
+			for(xA=0, xB=Get_NX()-1; xA<xB; xA++, xB--)
+			{
+				d			=    asDouble(xA, y);
+				Set_Value(xA, y, asDouble(xB, y));
+				Set_Value(xB, y, d);
+			}
+		}
+
+		SG_UI_Process_Set_Ready();
+
+		Get_History().Add_Child(SG_T("GRID_OPERATION"), LNG("Horizontally mirrored"));
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//					Grid-Operations - B					 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define NORMALISED_NODATA	9.0
+
+//---------------------------------------------------------
+void CSG_Grid::Normalise(void)
+{
+	if( is_Valid() )
+	{
+		Update();
+
+		if( m_zStats.Get_StdDev() > 0.0 )
+		{
+			int		x, y;
+
+			if(	(Get_NoData_hiValue() > -NORMALISED_NODATA && Get_NoData_hiValue() < NORMALISED_NODATA)
+			||	(Get_NoData_Value  () > -NORMALISED_NODATA && Get_NoData_Value  () < NORMALISED_NODATA) )
+			{
+				for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
+				{
+					for(x=0; x<Get_NX(); x++)
+					{
+						if( is_NoData(x, y) )
+						{
+							Set_Value(x, y, -NORMALISED_NODATA);
+						}
+					}
+				}
+
+				Set_NoData_Value(-NORMALISED_NODATA);
+			}
+
+			for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
+			{
+				for(x=0; x<Get_NX(); x++)
+				{
+					if( !is_NoData(x, y) )
+					{
+						Set_Value(x, y, (asDouble(x, y) - m_zStats.Get_Mean()) / m_zStats.Get_StdDev() );
+					}
+				}
+			}
+
+			SG_UI_Process_Set_Ready();
+
+			Get_History().Add_Child(SG_T("GRID_OPERATION"), LNG("Normalisation"));
+		}
+	}
+}
+
+//---------------------------------------------------------
+void CSG_Grid::DeNormalise(double ArithMean, double Variance)
+{
+	int		x, y;
+
+	if( is_Valid() )
+	{
+		Variance	= sqrt(Variance);
+
+		for(y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++)
+		{
+			for(x=0; x<Get_NX(); x++)
+			{
+				if( !is_NoData(x, y) )
+				{
+					Set_Value(x, y, Variance * asDouble(x, y) + ArithMean);
+				}
+			}
+		}
+
+		SG_UI_Process_Set_Ready();
+
+		Get_History().Add_Child(SG_T("GRID_OPERATION"), LNG("Denormalisation"));
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CSG_Grid::Get_Gradient_NeighborDir(int x, int y, bool bMustBeLower)	const
+{
+	int		i, ix, iy, Direction;
+	double	z, dz, dzMax;
+
+	Direction	= -1;
+
+	if( is_InGrid(x, y) )
+	{
+		z		= asDouble(x, y);
+		dzMax	= 0.0;
+
+		for(i=0; i<8; i++)
+		{
+			ix	= m_System.Get_xTo(i, x);
+			iy	= m_System.Get_yTo(i, y);
+
+			if( !is_InGrid(ix, iy) )
+			{
+				if( 1 )	// flag 'bStopOnNoData'
+				{
+					return( -1 );
+				}
+			}
+			else
+			{
+				dz	= (z - asDouble(ix, iy)) / m_System.Get_Length(i);
+
+				if( (bMustBeLower && dz > 0.0) || !bMustBeLower )
+				{
+					if( Direction < 0 || (dz > dzMax) )
+					{
+						Direction	= i;
+						dzMax		= dz;
+					}
+				}
+			}
+		}
+	}
+
+	return( Direction );
+}
+
+//---------------------------------------------------------
+bool CSG_Grid::Get_Gradient(int x, int y, double &Decline, double &Azimuth) const
+{
+	int		i, ix, iy, iDir;
+	double	z, zm[4], G, H;
+
+	if( is_InGrid(x, y) )
+	{
+		z		= asDouble(x, y);
+
+		for(i=0, iDir=0; i<4; i++, iDir+=2)
+		{
+			ix		= m_System.Get_xTo(iDir, x);
+			iy		= m_System.Get_yTo(iDir, y);
+
+			if( is_InGrid(ix, iy) )
+			{
+				zm[i]	= asDouble(ix, iy) - z;
+			}
+			else
+			{
+				ix		= m_System.Get_xFrom(iDir, x);
+				iy		= m_System.Get_yFrom(iDir, y);
+
+				if( is_InGrid(ix, iy) )
+				{
+					zm[i]	= z - asDouble(ix, iy);
+				}
+				else
+				{
+					zm[i]	= 0.0;
+				}
+			}
+		}
+
+		G		= (zm[0] - zm[2]) / (2.0 * Get_Cellsize());
+        H		= (zm[1] - zm[3]) / (2.0 * Get_Cellsize());
+
+		Decline	= atan(sqrt(G*G + H*H));
+
+		if( G != 0.0 )
+			Azimuth	= M_PI_180 + atan2(H, G);
+		else
+			Azimuth	= H > 0.0 ? M_PI_270 : (H < 0.0 ? M_PI_090 : -1.0);
+
+		return( true );
+	}
+
+	Decline	= 0.0;
+	Azimuth	= -1.0;
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_api/mat_tools.cpp b/src/saga_core/saga_api/mat_tools.cpp
index 312d174..6b44b0d 100644
--- a/src/saga_core/saga_api/mat_tools.cpp
+++ b/src/saga_core/saga_api/mat_tools.cpp
@@ -155,3 +155,481 @@ void CSG_Simple_Statistics::_Evaluate(void)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
+CSG_Class_Statistics::CSG_Class_Statistics(void)
+{
+	Create();
+}
+
+//---------------------------------------------------------
+CSG_Class_Statistics::~CSG_Class_Statistics(void)
+{
+	Destroy();
+}
+
+//---------------------------------------------------------
+void CSG_Class_Statistics::Create(void)
+{
+	m_Array.Create(sizeof(TClass), 0, SG_ARRAY_GROWTH_1);
+
+	m_Classes	= NULL;
+}
+
+//---------------------------------------------------------
+void CSG_Class_Statistics::Destroy(void)
+{
+	m_Array.Set_Array(0, (void **)&m_Classes);
+}
+
+//---------------------------------------------------------
+void CSG_Class_Statistics::Add_Value(double Value)
+{
+	for(size_t i=0; i<m_Array.Get_Size(); i++)
+	{
+		if( m_Classes[i].Value == Value )
+		{
+			m_Classes[i].Count++;
+
+			return;
+		}
+	}
+
+	if( m_Array.Inc_Array((void **)&m_Classes) )
+	{
+		m_Classes[Get_Count() - 1].Count	= 1;
+		m_Classes[Get_Count() - 1].Value	= Value;
+	}
+}
+
+//---------------------------------------------------------
+int CSG_Class_Statistics::Get_Majority(void)
+{
+	int		Index	= 0;
+
+	for(int i=1; i<Get_Count(); i++)
+	{
+		if( m_Classes[i].Count > m_Classes[Index].Count )
+		{
+			Index	= i;
+		}
+	}
+
+	return( Index );
+}
+
+bool CSG_Class_Statistics::Get_Majority(double &Value)
+{
+	int		Count;
+
+	return( Get_Class(Get_Majority(), Value, Count) );
+}
+
+bool CSG_Class_Statistics::Get_Majority(double &Value, int &Count)
+{
+	return( Get_Class(Get_Majority(), Value, Count) );
+}
+
+//---------------------------------------------------------
+int CSG_Class_Statistics::Get_Minority(void)
+{
+	int		Index	= 0;
+
+	for(int i=1; i<Get_Count(); i++)
+	{
+		if( m_Classes[i].Count > m_Classes[Index].Count )
+		{
+			Index	= i;
+		}
+	}
+
+	return( Index );
+}
+
+bool CSG_Class_Statistics::Get_Minority(double &Value)
+{
+	int		Count;
+
+	return( Get_Class(Get_Minority(), Value, Count) );
+}
+
+bool CSG_Class_Statistics::Get_Minority(double &Value, int &Count)
+{
+	return( Get_Class(Get_Minority(), Value, Count) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Cluster_Analysis::CSG_Cluster_Analysis(void)
+{
+	m_Centroid	= NULL;
+	m_Variance	= NULL;
+	m_nMembers	= NULL;
+	m_Cluster	= NULL;
+	m_nFeatures	= 0;
+	m_nClusters	= 0;
+	m_Iteration	= 0;
+}
+
+//---------------------------------------------------------
+CSG_Cluster_Analysis::~CSG_Cluster_Analysis(void)
+{
+	Destroy();
+}
+
+//---------------------------------------------------------
+bool CSG_Cluster_Analysis::Destroy(void)
+{
+	for(int i=0; i<m_nClusters; i++)
+	{
+		SG_Free(m_Centroid[i]);
+	}
+
+	SG_FREE_SAFE(m_Centroid);
+	SG_FREE_SAFE(m_Variance);
+	SG_FREE_SAFE(m_nMembers);
+	SG_FREE_SAFE(m_Cluster);
+
+	m_Features.Destroy();
+
+	m_nFeatures	= 0;
+	m_nClusters	= 0;
+
+	m_Iteration	= 0;
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_Cluster_Analysis::Create(int nFeatures)
+{
+	Destroy();
+
+	if( nFeatures > 0 )
+	{
+		m_nFeatures	= nFeatures;
+
+		m_Features.Create(m_nFeatures * sizeof(double), 0, SG_ARRAY_GROWTH_3);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Cluster_Analysis::Add_Element(void)
+{
+	return( m_nFeatures > 0 && m_Features.Inc_Array() );
+}
+
+//---------------------------------------------------------
+bool CSG_Cluster_Analysis::Set_Feature(int iElement, int iFeature, double Value)
+{
+	if( iElement >= 0 && iElement < Get_nElements() && iFeature >= 0 && iFeature < m_nFeatures )
+	{
+		((double *)m_Features.Get_Entry(iElement))[iFeature]	= Value;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Cluster_Analysis::Execute(int Method, int nClusters)
+{
+	if( Get_nElements() <= 1 || nClusters <= 1 )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	m_Iteration	= 0;
+
+	m_nClusters	= nClusters;
+
+	m_Cluster	= (int     *)SG_Calloc(Get_nElements()	, sizeof(int));
+
+	m_nMembers	= (int     *)SG_Calloc(m_nClusters		, sizeof(int));
+	m_Variance	= (double  *)SG_Calloc(m_nClusters		, sizeof(double));
+	m_Centroid	= (double **)SG_Calloc(m_nClusters		, sizeof(double *));
+
+	for(int iCluster=0; iCluster<m_nClusters; iCluster++)
+	{
+		m_Centroid[iCluster]	= (double *)SG_Calloc(m_nFeatures, sizeof(double));
+	}
+
+	//-----------------------------------------------------
+	switch( Method )
+	{
+	case 0: default:
+		return( Minimum_Distance(true) );
+
+	case 1:
+		return( Hill_Climbing(true) );
+
+	case 2:
+		return( Minimum_Distance(true) && Hill_Climbing(false) );
+	}
+}
+
+//---------------------------------------------------------
+bool CSG_Cluster_Analysis::Minimum_Distance(bool bInitialize)
+{
+	bool	bContinue;
+	int		iElement, iFeature, iCluster, nShifts;
+	double	*Feature, SP_Last	= -1.0;
+
+	//-----------------------------------------------------
+	for(iElement=0; iElement<Get_nElements(); iElement++)
+	{
+		iCluster	= m_Cluster[iElement];
+
+		if( bInitialize || iCluster < 0 || iCluster >= m_nClusters )
+		{
+			m_Cluster[iElement]	= iCluster = iElement % m_nClusters;
+		}
+	}
+
+	//-----------------------------------------------------
+	for(m_Iteration=1, bContinue=true; bContinue && SG_UI_Process_Get_Okay(); m_Iteration++)
+	{
+		for(iCluster=0; iCluster<m_nClusters; iCluster++)
+		{
+			m_Variance[iCluster]	= 0.0;
+			m_nMembers[iCluster]	= 0;
+
+			for(iFeature=0; iFeature<m_nFeatures; iFeature++)
+			{
+				m_Centroid[iCluster][iFeature]	= 0.0;
+			}
+		}
+
+		//-------------------------------------------------
+		for(iElement=0, Feature=(double *)m_Features.Get_Array(); iElement<Get_nElements(); iElement++, Feature+=m_nFeatures)
+		{
+			if( (iCluster = m_Cluster[iElement]) >= 0 )
+			{
+				m_nMembers[iCluster]++;
+
+				for(iFeature=0; iFeature<m_nFeatures; iFeature++)
+				{
+					m_Centroid[iCluster][iFeature]	+= Feature[iFeature];
+				}
+			}
+		}
+
+		//-------------------------------------------------
+		for(iCluster=0; iCluster<m_nClusters; iCluster++)
+		{
+			double	d	= m_nMembers[iCluster] > 0 ? 1.0 / m_nMembers[iCluster] : 0.0;
+
+			for(iFeature=0; iFeature<m_nFeatures; iFeature++)
+			{
+				m_Centroid[iCluster][iFeature]	*= d;
+			}
+		}
+
+		//-------------------------------------------------
+		for(iElement=0, Feature=(double *)m_Features.Get_Array(), m_SP=0.0, nShifts=0; iElement<Get_nElements() && bContinue; iElement++, Feature+=m_nFeatures)
+		{
+			double	minVariance	= -1.0;
+			int		minCluster	= -1;
+
+			for(iCluster=0; iCluster<m_nClusters; iCluster++)
+			{
+				double	iVariance	= 0.0;
+
+				for(iFeature=0; iFeature<m_nFeatures; iFeature++)
+				{
+					iVariance	+= SG_Get_Square(m_Centroid[iCluster][iFeature] - Feature[iFeature]);
+				}
+
+				if( minVariance < 0.0 || iVariance < minVariance )
+				{
+					minVariance	= iVariance;
+					minCluster	= iCluster;
+				}
+			}
+
+			if( m_Cluster[iElement] != minCluster )
+			{
+				m_Cluster[iElement]	= minCluster;
+				nShifts++;
+			}
+
+			m_SP					+= minVariance;
+			m_Variance[minCluster]	+= minVariance;
+		}
+
+		//-------------------------------------------------
+		if( nShifts == 0 || (SP_Last >= 0 && m_SP >= SP_Last) )
+		{
+			bContinue	= false;
+		}
+
+		SG_UI_Process_Set_Text(CSG_String::Format(SG_T("%s: %d >> %s %f"),
+			LNG("pass")		, m_Iteration,
+			LNG("change")	, m_Iteration <= 1 ? m_SP : SP_Last - m_SP
+		));
+
+		SP_Last		= m_SP;
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_Cluster_Analysis::Hill_Climbing(bool bInitialize)
+{
+	bool	bContinue;
+	int		iElement, iFeature, iCluster, noShift;
+	double	*Feature, Variance, SP_Last	= -1.0;
+
+	//-----------------------------------------------------
+	memset(m_Variance, 0, m_nClusters * sizeof(double));
+	memset(m_nMembers, 0, m_nClusters * sizeof(int));
+
+	for(iCluster=0; iCluster<m_nClusters; iCluster++)
+	{
+		memset(m_Centroid[iCluster], 0, m_nFeatures * sizeof(double));
+	}
+
+	//-----------------------------------------------------
+	for(iElement=0, Feature=(double *)m_Features.Get_Array(); iElement<Get_nElements(); iElement++, Feature+=m_nFeatures)
+	{
+		iCluster	= m_Cluster[iElement];
+
+		if( bInitialize || iCluster < 0 || iCluster >= m_nClusters )
+		{
+			m_Cluster[iElement]	= iCluster = iElement % m_nClusters;
+		}
+
+		m_nMembers[iCluster]++;
+
+		for(iFeature=0, Variance=0.0; iFeature<m_nFeatures; iFeature++)
+		{
+			double	d	 = Feature[iFeature];
+			m_Centroid[iCluster][iFeature]	+= d;
+			Variance						+= d*d;
+		}
+
+		m_Variance[iCluster]	+= Variance;
+	}
+
+	//-----------------------------------------------------
+	for(iCluster=0, m_SP=0.0; iCluster<m_nClusters; iCluster++)
+	{
+		double	d	= m_nMembers[iCluster] != 0 ? 1.0 / (double)m_nMembers[iCluster] : 0;
+
+		for(iFeature=0, Variance=0.0; iFeature<m_nFeatures; iFeature++)
+		{
+			m_Centroid[iCluster][iFeature]	*= d;
+			Variance						+= SG_Get_Square(m_Centroid[iCluster][iFeature]);
+		}
+
+		m_Variance[iCluster]	-= m_nMembers[iCluster] * Variance;
+		m_SP					+= m_Variance[iCluster];
+	}
+
+	noShift		= 0;
+
+	//-----------------------------------------------------
+	for(m_Iteration=1, bContinue=true; bContinue && SG_UI_Process_Get_Okay(false); m_Iteration++)
+	{
+		for(iElement=0, Feature=(double *)m_Features.Get_Array(); iElement<Get_nElements() && bContinue; iElement++, Feature+=m_nFeatures)
+		{
+			if( (iCluster = m_Cluster[iElement]) >= 0 )
+			{
+				if( noShift++ >= Get_nElements() )
+				{
+					bContinue	= false;
+				}
+				else if( m_nMembers[iCluster] > 1 )
+				{
+					int		jCluster, kCluster;
+					double	VMin, V1, V2;
+
+					for(iFeature=0, Variance=0.0; iFeature<m_nFeatures; iFeature++)
+					{
+						Variance	+= SG_Get_Square(m_Centroid[iCluster][iFeature] - Feature[iFeature]);
+					}
+
+					V1		= Variance * m_nMembers[iCluster] / (m_nMembers[iCluster] - 1.0);
+					VMin	= -1.0;
+
+					//-----------------------------------------
+					// Bestimme Gruppe iCluster mit evtl. groesster Verbesserung...
+
+					for(jCluster=0; jCluster<m_nClusters; jCluster++)
+					{
+						if( jCluster != iCluster )
+						{
+							for(iFeature=0, Variance=0.0; iFeature<m_nFeatures; iFeature++)
+							{
+								Variance	+= SG_Get_Square(m_Centroid[jCluster][iFeature] - Feature[iFeature]);
+							}
+
+							V2		= Variance * m_nMembers[jCluster] / (m_nMembers[jCluster] + 1.0);
+
+							if( VMin < 0.0 || V2 < VMin )
+							{
+								VMin		= V2;
+								kCluster	= jCluster;
+							}
+						}
+					}
+
+					//-----------------------------------------
+					// Gruppenwechsel und Neuberechnung der Gruppencentroide...
+
+					if( VMin >= 0 && VMin < V1 )
+					{
+						noShift					= 0;
+						m_Variance[iCluster]	-= V1;
+						m_Variance[kCluster]	+= VMin;
+						m_SP					= m_SP - V1 + VMin;
+						V1						= 1.0 / (m_nMembers[iCluster] - 1.0);
+						V2						= 1.0 / (m_nMembers[kCluster] + 1.0);
+
+						for(iFeature=0; iFeature<m_nFeatures; iFeature++)
+						{
+							double	d	= Feature[iFeature];
+
+							m_Centroid[iCluster][iFeature]	= (m_nMembers[iCluster] * m_Centroid[iCluster][iFeature] - d) * V1;
+							m_Centroid[kCluster][iFeature]	= (m_nMembers[kCluster] * m_Centroid[kCluster][iFeature] + d) * V2;
+						}
+
+						m_Cluster[iElement]	= kCluster;
+
+						m_nMembers[iCluster]--;
+						m_nMembers[kCluster]++;
+					}
+				}
+			}
+		}
+
+		SG_UI_Process_Set_Text(CSG_String::Format(SG_T("%s: %d >> %s %f"),
+			LNG("pass")		, m_Iteration,
+			LNG("change")	, m_Iteration <= 1 ? m_SP : SP_Last - m_SP
+		));
+
+		SP_Last		= m_SP;
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_api/mat_tools.h b/src/saga_core/saga_api/mat_tools.h
index c369d06..66ac0d8 100644
--- a/src/saga_core/saga_api/mat_tools.h
+++ b/src/saga_core/saga_api/mat_tools.h
@@ -490,6 +490,145 @@ protected:
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
+class SAGA_API_DLL_EXPORT CSG_Class_Statistics
+{
+private:
+
+	typedef struct SClass
+	{
+		int		Count;
+
+		double	Value;
+	}
+	TClass;
+
+
+public:
+	 CSG_Class_Statistics(void);
+	~CSG_Class_Statistics(void);
+
+	void			Create					(void);
+	void			Destroy					(void);
+
+	void			Reset					(void)	{	m_Array.Set_Array(0, (void **)&m_Classes, false);	}
+
+	int				Get_Count				(void)	{	return( (int)m_Array.Get_Size() );	}
+
+	int				Get_Class_Count			(int i)	{	return( i >= 0 && i < Get_Count() ? m_Classes[i].Count : 0 );	}
+	double			Get_Class_Value			(int i)	{	return( i >= 0 && i < Get_Count() ? m_Classes[i].Value : 0 );	}
+
+	bool			Get_Class				(int i, double &Value, int &Count)
+	{
+		if( i >= 0 && i < Get_Count() )
+		{
+			Count	= m_Classes[i].Count;
+			Value	= m_Classes[i].Value;
+
+			return( true );
+		}
+
+		return( false );
+	}
+
+	bool			Get_Class				(int i, int &Value, int &Count)
+	{
+		if( i >= 0 && i < Get_Count() )
+		{
+			Count	=      m_Classes[i].Count;
+			Value	= (int)m_Classes[i].Value;
+
+			return( true );
+		}
+
+		return( false );
+	}
+
+	void			Add_Value				(double Value);
+
+	int				Get_Majority			(void);
+	bool			Get_Majority			(double &Value);
+	bool			Get_Majority			(double &Value, int &Count);
+
+	int				Get_Minority			(void);
+	bool			Get_Minority			(double &Value);
+	bool			Get_Minority			(double &Value, int &Count);
+
+
+private:
+
+	CSG_Array		m_Array;
+
+	TClass			*m_Classes;
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+enum ESG_Cluster_Analysis_Method
+{
+	SG_CLUSTERANALYSIS_Minimum_Distance	= 0,
+	SG_CLUSTERANALYSIS_Hill_Climbing,
+	SG_CLUSTERANALYSIS_Combined
+};
+
+//---------------------------------------------------------
+class SAGA_API_DLL_EXPORT CSG_Cluster_Analysis
+{
+public:
+	CSG_Cluster_Analysis(void);
+	~CSG_Cluster_Analysis(void);
+	
+	bool					Create				(int nFeatures);
+	bool					Destroy				(void);
+
+	bool					Add_Element			(void);
+	bool					Set_Feature			(int iElement, int iFeature, double Value);
+
+	int						Get_Cluster			(int iElement)	const	{	return( iElement >= 0 && iElement < Get_nElements() ? m_Cluster[iElement] : -1 );	}
+
+	bool					Execute				(int Method, int nClusters);
+
+	int						Get_nElements		(void)	const	{	return( (int)m_Features.Get_Size() );	}
+	int						Get_nFeatures		(void)	const	{	return( m_nFeatures );	}
+	int						Get_nClusters		(void)	const	{	return( m_nClusters );	}
+
+	int						Get_Iteration		(void)	const	{	return( m_Iteration );	}
+
+	double					Get_SP				(void)	const	{	return( m_SP );			}
+
+	int						Get_nMembers		(int iCluster)					const	{	return( m_nMembers[iCluster] );	}
+	double					Get_Variance		(int iCluster)					const	{	return( m_Variance[iCluster] );	}
+	double					Get_Centroid		(int iCluster, int iFeature)	const	{	return( m_Centroid[iCluster][iFeature] );	}
+
+
+private:
+
+	int						*m_Cluster, m_Iteration, m_nFeatures, m_nClusters, *m_nMembers;
+
+	double					*m_Variance, **m_Centroid, m_SP;
+
+	CSG_Array				m_Features;
+
+
+	bool					Minimum_Distance	(bool bInitialize);
+	bool					Hill_Climbing		(bool bInitialize);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
 class SAGA_API_DLL_EXPORT CSG_Spline
 {
 public:
diff --git a/src/saga_core/saga_api/metadata.cpp b/src/saga_core/saga_api/metadata.cpp
index 86a3231..873914c 100644
--- a/src/saga_core/saga_api/metadata.cpp
+++ b/src/saga_core/saga_api/metadata.cpp
@@ -1,625 +1,626 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     metadata.cpp                      //
-//                                                       //
-//          Copyright (C) 2009 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Hamburg                  //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <wx/xml/xml.h>
-#include <wx/wfstream.h>
-
-#include "metadata.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_MetaData::CSG_MetaData(void)
-{
-	_On_Construction();
-}
-
-bool CSG_MetaData::Create(void)
-{
-	return( true );
-}
-
-//---------------------------------------------------------
-CSG_MetaData::CSG_MetaData(const CSG_MetaData &MetaData)
-{
-	_On_Construction();
-
-	Create(MetaData);
-}
-
-bool CSG_MetaData::Create(const CSG_MetaData &MetaData)
-{
-	return( Assign(MetaData) );
-}
-
-//---------------------------------------------------------
-CSG_MetaData::CSG_MetaData(const CSG_String &File, const SG_Char *Extension)
-{
-	_On_Construction();
-
-	Create(File, Extension);
-}
-
-bool CSG_MetaData::Create(const CSG_String &File, const SG_Char *Extension)
-{
-	return( Load(File, Extension) );
-}
-
-//---------------------------------------------------------
-CSG_MetaData::CSG_MetaData(CSG_File &Stream)
-{
-	_On_Construction();
-
-	Create(Stream);
-}
-
-bool CSG_MetaData::Create(CSG_File &Stream)
-{
-	return( Load(Stream) );
-}
-
-//---------------------------------------------------------
-CSG_MetaData::CSG_MetaData(CSG_MetaData *pParent)
-{
-	_On_Construction();
-
-	m_pParent	= pParent;
-}
-
-//---------------------------------------------------------
-void CSG_MetaData::_On_Construction(void)
-{
-	m_pParent	= NULL;
-	m_pChildren	= NULL;
-	m_nChildren	= 0;
-	m_nBuffer	= 0;
-}
-
-//---------------------------------------------------------
-CSG_MetaData::~CSG_MetaData(void)
-{
-	Destroy();
-}
-
-//---------------------------------------------------------
-void CSG_MetaData::Destroy(void)
-{
-	if( m_pChildren )
-	{
-		for(int i=0; i<m_nChildren; i++)
-		{
-			delete(m_pChildren[i]);
-		}
-
-		SG_Free(m_pChildren);
-
-		m_pChildren	= NULL;
-		m_nChildren	= 0;
-		m_nBuffer	= 0;
-	}
-
-//	m_pParent	= NULL;
-
-//	m_Name			.Clear();
-//	m_Content		.Clear();
-
-	m_Prop_Names	.Clear();
-	m_Prop_Values	.Clear();
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define GET_GROW_SIZE(n)	(n < 64 ? 1 : (n < 1024 ? 32 : 256))
-
-//---------------------------------------------------------
-CSG_MetaData * CSG_MetaData::Add_Child(void)
-{
-	if( (m_nChildren + 1) >= m_nBuffer )
-	{
-		CSG_MetaData	**pChildren	= (CSG_MetaData **)SG_Realloc(m_pChildren, (m_nBuffer + GET_GROW_SIZE(m_nBuffer)) * sizeof(CSG_MetaData *));
-
-		if( pChildren )
-		{
-			m_pChildren	= pChildren;
-			m_nBuffer	+= GET_GROW_SIZE(m_nBuffer);
-		}
-		else
-		{
-			return( false );
-		}
-	}
-
-	return( m_pChildren[m_nChildren++]	= new CSG_MetaData(this) );
-}
-
-CSG_MetaData * CSG_MetaData::Add_Child(const CSG_String &Name, double Content)
-{
-	return( Add_Child(Name, CSG_String::Format(SG_T("%f"), Content)) );
-}
-
-CSG_MetaData * CSG_MetaData::Add_Child(const CSG_String &Name, int Content)
-{
-	return( Add_Child(Name, CSG_String::Format(SG_T("%d"), Content)) );
-}
-
-//---------------------------------------------------------
-CSG_MetaData * CSG_MetaData::Add_Child(const CSG_String &Name, const SG_Char *Content)
-{
-	CSG_MetaData	*pChild	= Add_Child();
-
-	if( pChild )
-	{
-		pChild->m_Name		= Name;
-		pChild->m_Content	= Content ? Content : SG_T("");
-	}
-
-	return( pChild );
-}
-
-//---------------------------------------------------------
-bool CSG_MetaData::Del_Child(int Index)
-{
-	if( Index >= 0 && Index < m_nChildren )
-	{
-		delete(m_pChildren[Index]);
-
-		m_nChildren--;
-
-		if( (m_nChildren - 1) < m_nBuffer - GET_GROW_SIZE(m_nBuffer) )
-		{
-			CSG_MetaData	**pChildren	= (CSG_MetaData **)SG_Realloc(m_pChildren, (m_nBuffer - GET_GROW_SIZE(m_nBuffer)) * sizeof(CSG_MetaData *));
-
-			if( pChildren )
-			{
-				m_pChildren	= pChildren;
-				m_nBuffer	-= GET_GROW_SIZE(m_nBuffer);
-			}
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-int CSG_MetaData::_Get_Child(const CSG_String &Name) const
-{
-	for(int i=0; i<m_nChildren; i++)
-	{
-		if( Name.CmpNoCase(m_pChildren[i]->Get_Name()) == 0 )
-		{
-			return( i );
-		}
-	}
-
-	return( -1 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSG_MetaData::Set_Content(const SG_Char *Format, ...)
-{
-	wxString	s;
-	va_list		argptr;
-
-	va_start(argptr, Format);
-
-	if( s.PrintfV(Format, argptr) > 0 )
-	{
-		m_Content	= s.c_str();
-	}
-	else
-	{
-		m_Content.Clear();
-	}
-
-	va_end(argptr);
-}
-
-//---------------------------------------------------------
-bool CSG_MetaData::Cmp_Content(const CSG_String &String, bool bNoCase) const
-{
-	return( bNoCase ? !m_Content.CmpNoCase(String) : !m_Content.Cmp(String) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_MetaData::Add_Property(const CSG_String &Name, const CSG_String &Value)
-{
-	if( _Get_Property(Name) < 0 )
-	{
-		m_Prop_Names	.Add(Name);
-		m_Prop_Values	.Add(Value);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-bool CSG_MetaData::Add_Property(const CSG_String &Name, double Value)
-{
-	return( Add_Property(Name, CSG_String::Format(SG_T("%f"), Value)) );
-}
-
-bool CSG_MetaData::Add_Property(const CSG_String &Name, int Value)
-{
-	return( Add_Property(Name, CSG_String::Format(SG_T("%d"), Value)) );
-}
-
-//---------------------------------------------------------
-bool CSG_MetaData::Set_Property(const CSG_String &Name, const CSG_String &Value, bool bAddIfNotExists)
-{
-	int		Index;
-
-	if( (Index = _Get_Property(Name)) >= 0 )
-	{
-		m_Prop_Values[Index]	= Value;
-
-		return( true );
-	}
-	else if( bAddIfNotExists )
-	{
-		m_Prop_Names	.Add(Name);
-		m_Prop_Values	.Add(Value);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-bool CSG_MetaData::Set_Property(const CSG_String &Name, double Value, bool bAddIfNotExists)
-{
-	return( Set_Property(Name, CSG_String::Format(SG_T("%f"), Value, bAddIfNotExists)) );
-}
-
-bool CSG_MetaData::Set_Property(const CSG_String &Name, int Value, bool bAddIfNotExists)
-{
-	return( Set_Property(Name, CSG_String::Format(SG_T("%d"), Value, bAddIfNotExists)) );
-}
-
-//---------------------------------------------------------
-bool CSG_MetaData::Get_Property(const CSG_String &Name, CSG_String &Value)	const
-{
-	const SG_Char	*cString	= Get_Property(Name);
-
-	if( cString )
-	{
-		Value	= cString;
-
-		return( true );
-	}
-
-	return( false );
-}
-
-bool CSG_MetaData::Get_Property(const CSG_String &Name, double &Value)	const
-{
-	CSG_String	s;
-
-	return( Get_Property(Name, s) && s.asDouble(Value) );
-}
-
-bool CSG_MetaData::Get_Property(const CSG_String &Name, int &Value)	const
-{
-	CSG_String	s;
-
-	return( Get_Property(Name, s) && s.asInt(Value) );
-}
-
-//---------------------------------------------------------
-bool CSG_MetaData::Cmp_Property(const CSG_String &Name, const CSG_String &String, bool bNoCase) const
-{
-	CSG_String	s;
-
-	return( Get_Property(Name, s) && (bNoCase ? !s.CmpNoCase(String) : !s.Cmp(String)) );
-}
-
-//---------------------------------------------------------
-int CSG_MetaData::_Get_Property(const CSG_String &Name) const
-{
-	for(int i=0; i<m_Prop_Names.Get_Count(); i++)
-	{
-		if( Name.CmpNoCase(m_Prop_Names[i]) == 0 )
-		{
-			return( i );
-		}
-	}
-
-	return( -1 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_MetaData::Assign(const CSG_MetaData &MetaData, bool bAppend)
-{
-	int		i;
-
-	if( !bAppend )
-	{
-		Destroy();
-
-		Set_Name	(MetaData.Get_Name   ());
-		Set_Content	(MetaData.Get_Content());
-
-		//-------------------------------------------------
-		for(i=0; i<MetaData.Get_Property_Count(); i++)
-		{
-			Add_Property(MetaData.Get_Property_Name(i), MetaData.Get_Property(i));
-		}
-	}
-
-	//-----------------------------------------------------
-	for(i=0; i<MetaData.Get_Children_Count(); i++)
-	{
-		Add_Child()->Assign(*MetaData.Get_Child(i), false);
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_MetaData::Load(const CSG_String &File, const SG_Char *Extension)
-{
-	Destroy();
-
-	wxXmlDocument	XML;
-
-	if( SG_File_Exists(SG_File_Make_Path(NULL, File, Extension)) && XML.Load(SG_File_Make_Path(NULL, File, Extension).c_str()) )
-	{
-		_Load(XML.GetRoot());
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_MetaData::Load(CSG_File &File)
-{
-	Destroy();
-
-	wxXmlDocument	XML;
-
-	wxFFileInputStream	Stream(File.Get_Stream());
-
-	if( Stream.IsOk() && XML.Load(Stream) )
-	{
-		_Load(XML.GetRoot());
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-void CSG_MetaData::_Load(wxXmlNode *pNode)
-{
-	Set_Name	(SG_UTF8_To_String(pNode->GetName       ()).c_str());
-	Set_Content	(SG_UTF8_To_String(pNode->GetNodeContent()).c_str());
-
-	//-----------------------------------------------------
-	wxXmlProperty	*pProperty	= pNode->GetProperties();
-
-	while( pProperty )
-	{
-		Add_Property(SG_UTF8_To_String(pProperty->GetName()).c_str(), SG_UTF8_To_String(pProperty->GetValue()).c_str());
-
-		pProperty	= pProperty->GetNext();
-	}
-
-	//-----------------------------------------------------
-	wxXmlNode	*pChild	= pNode->GetChildren();
-
-	while( pChild )
-	{
-		if( pChild->GetType() != wxXML_TEXT_NODE )
-		{
-			Add_Child()->_Load(pChild);
-		}
-
-		pChild	= pChild->GetNext();
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_MetaData::Save(const CSG_String &File, const SG_Char *Extension) const
-{
-	wxXmlDocument	XML;
-
-	wxXmlNode	*pRoot	= new wxXmlNode(NULL, wxXML_ELEMENT_NODE, Get_Name().c_str());
-
-	XML.SetRoot(pRoot);
-
-	_Save(pRoot);
-
-	if( XML.Save(SG_File_Make_Path(NULL, File, Extension).c_str()) )
-	{
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_MetaData::Save(CSG_File &File) const
-{
-	wxXmlDocument	XML;
-
-	wxXmlNode	*pRoot	= new wxXmlNode(NULL, wxXML_ELEMENT_NODE, Get_Name().c_str());
-
-	XML.SetRoot(pRoot);
-
-	_Save(pRoot);
-
-	wxFFileOutputStream	Stream(File.Get_Stream());
-
-	if( Stream.IsOk() && XML.Save(Stream) )
-	{
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-void CSG_MetaData::_Save(wxXmlNode *pNode) const
-{
-	int		i;
-
-	pNode->SetName	 (Get_Name().Length() ? SG_String_To_UTF8(Get_Name()).c_str() : SG_T("NODE"));
-	pNode->SetContent(SG_String_To_UTF8(Get_Content()).c_str());
-
-	if( Get_Content().Length() > 0 )
-	{
-		wxXmlNode	*pChild	= new wxXmlNode(pNode, wxXML_TEXT_NODE, SG_T("TEXT"));// SG_String_To_UTF8(Get_Name()).c_str());
-
-		pChild->SetContent(SG_String_To_UTF8(Get_Content()).c_str());
-	}
-
-	//-----------------------------------------------------
-	for(i=0; i<Get_Property_Count(); i++)
-	{
-		pNode->AddProperty(SG_String_To_UTF8(Get_Property_Name(i)).c_str(), SG_String_To_UTF8(Get_Property(i)).c_str());
-	}
-
-	//-----------------------------------------------------
-	for(i=Get_Children_Count()-1; i>=0; i--)
-	{
-		if( Get_Child(i)->Get_Content().Length() > 0 || Get_Child(i)->Get_Children_Count() > 0 )
-		{
-			wxXmlNode	*pChild	= new wxXmlNode(pNode, wxXML_ELEMENT_NODE, SG_String_To_UTF8(Get_Child(i)->Get_Name()).c_str());
-
-			Get_Child(i)->_Save(pChild);
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_MetaData::Load_WKT(const CSG_String &WKT)
-{
-	return( false );
-}
-
-bool CSG_MetaData::_Load_WKT(const CSG_String &WKT)
-{
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_MetaData::Save_WKT(CSG_String &WKT) const
-{
-	return( false );
-}
-
-bool CSG_MetaData::_Save_WKT(CSG_String &WKT) const
-{
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//           Application Programming Interface           //
+//                                                       //
+//                  Library: SAGA_API                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     metadata.cpp                      //
+//                                                       //
+//          Copyright (C) 2009 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <wx/xml/xml.h>
+#include <wx/wfstream.h>
+
+#include "metadata.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_MetaData::CSG_MetaData(void)
+{
+	_On_Construction();
+}
+
+bool CSG_MetaData::Create(void)
+{
+	return( true );
+}
+
+//---------------------------------------------------------
+CSG_MetaData::CSG_MetaData(const CSG_MetaData &MetaData)
+{
+	_On_Construction();
+
+	Create(MetaData);
+}
+
+bool CSG_MetaData::Create(const CSG_MetaData &MetaData)
+{
+	return( Assign(MetaData) );
+}
+
+//---------------------------------------------------------
+CSG_MetaData::CSG_MetaData(const CSG_String &File, const SG_Char *Extension)
+{
+	_On_Construction();
+
+	Create(File, Extension);
+}
+
+bool CSG_MetaData::Create(const CSG_String &File, const SG_Char *Extension)
+{
+	return( Load(File, Extension) );
+}
+
+//---------------------------------------------------------
+CSG_MetaData::CSG_MetaData(CSG_File &Stream)
+{
+	_On_Construction();
+
+	Create(Stream);
+}
+
+bool CSG_MetaData::Create(CSG_File &Stream)
+{
+	return( Load(Stream) );
+}
+
+//---------------------------------------------------------
+CSG_MetaData::CSG_MetaData(CSG_MetaData *pParent)
+{
+	_On_Construction();
+
+	m_pParent	= pParent;
+}
+
+//---------------------------------------------------------
+void CSG_MetaData::_On_Construction(void)
+{
+	m_pParent	= NULL;
+	m_pChildren	= NULL;
+	m_nChildren	= 0;
+	m_nBuffer	= 0;
+}
+
+//---------------------------------------------------------
+CSG_MetaData::~CSG_MetaData(void)
+{
+	Destroy();
+}
+
+//---------------------------------------------------------
+void CSG_MetaData::Destroy(void)
+{
+	if( m_pChildren )
+	{
+		for(int i=0; i<m_nChildren; i++)
+		{
+			delete(m_pChildren[i]);
+		}
+
+		SG_Free(m_pChildren);
+
+		m_pChildren	= NULL;
+		m_nChildren	= 0;
+		m_nBuffer	= 0;
+	}
+
+//	m_pParent	= NULL;
+
+//	m_Name			.Clear();
+//	m_Content		.Clear();
+
+	m_Prop_Names	.Clear();
+	m_Prop_Values	.Clear();
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define GET_GROW_SIZE(n)	(n < 64 ? 1 : (n < 1024 ? 32 : 256))
+
+//---------------------------------------------------------
+CSG_MetaData * CSG_MetaData::Add_Child(void)
+{
+	if( (m_nChildren + 1) >= m_nBuffer )
+	{
+		CSG_MetaData	**pChildren	= (CSG_MetaData **)SG_Realloc(m_pChildren, (m_nBuffer + GET_GROW_SIZE(m_nBuffer)) * sizeof(CSG_MetaData *));
+
+		if( pChildren )
+		{
+			m_pChildren	= pChildren;
+			m_nBuffer	+= GET_GROW_SIZE(m_nBuffer);
+		}
+		else
+		{
+			return( false );
+		}
+	}
+
+	return( m_pChildren[m_nChildren++]	= new CSG_MetaData(this) );
+}
+
+CSG_MetaData * CSG_MetaData::Add_Child(const CSG_String &Name, double Content)
+{
+	return( Add_Child(Name, SG_Get_String(Content, -16)) );
+}
+
+CSG_MetaData * CSG_MetaData::Add_Child(const CSG_String &Name, int Content)
+{
+	return( Add_Child(Name, CSG_String::Format(SG_T("%d"), Content)) );
+}
+
+//---------------------------------------------------------
+CSG_MetaData * CSG_MetaData::Add_Child(const CSG_String &Name, const SG_Char *Content)
+{
+	CSG_MetaData	*pChild	= Add_Child();
+
+	if( pChild )
+	{
+		pChild->m_Name		= Name;
+		pChild->m_Content	= Content ? Content : SG_T("");
+	}
+
+	return( pChild );
+}
+
+//---------------------------------------------------------
+bool CSG_MetaData::Del_Child(int Index)
+{
+	if( Index >= 0 && Index < m_nChildren )
+	{
+		delete(m_pChildren[Index]);
+
+		m_nChildren--;
+
+		if( (m_nChildren - 1) < m_nBuffer - GET_GROW_SIZE(m_nBuffer) )
+		{
+			CSG_MetaData	**pChildren	= (CSG_MetaData **)SG_Realloc(m_pChildren, (m_nBuffer - GET_GROW_SIZE(m_nBuffer)) * sizeof(CSG_MetaData *));
+
+			if( pChildren )
+			{
+				m_pChildren	= pChildren;
+				m_nBuffer	-= GET_GROW_SIZE(m_nBuffer);
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+int CSG_MetaData::_Get_Child(const CSG_String &Name) const
+{
+	for(int i=0; i<m_nChildren; i++)
+	{
+		if( Name.CmpNoCase(m_pChildren[i]->Get_Name()) == 0 )
+		{
+			return( i );
+		}
+	}
+
+	return( -1 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CSG_MetaData::Set_Content(const SG_Char *Format, ...)
+{
+	wxString	s;
+	va_list		argptr;
+
+	va_start(argptr, Format);
+
+	if( s.PrintfV(Format, argptr) > 0 )
+	{
+		m_Content	= s.c_str();
+	}
+	else
+	{
+		m_Content.Clear();
+	}
+
+	va_end(argptr);
+}
+
+//---------------------------------------------------------
+bool CSG_MetaData::Cmp_Content(const CSG_String &String, bool bNoCase) const
+{
+	return( bNoCase ? !m_Content.CmpNoCase(String) : !m_Content.Cmp(String) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_MetaData::Add_Property(const CSG_String &Name, const CSG_String &Value)
+{
+	if( _Get_Property(Name) < 0 )
+	{
+		m_Prop_Names	.Add(Name);
+		m_Prop_Values	.Add(Value);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+bool CSG_MetaData::Add_Property(const CSG_String &Name, double Value)
+{
+	return( Add_Property(Name, CSG_String::Format(SG_T("%f"), Value)) );
+}
+
+bool CSG_MetaData::Add_Property(const CSG_String &Name, int Value)
+{
+	return( Add_Property(Name, CSG_String::Format(SG_T("%d"), Value)) );
+}
+
+//---------------------------------------------------------
+bool CSG_MetaData::Set_Property(const CSG_String &Name, const CSG_String &Value, bool bAddIfNotExists)
+{
+	int		Index;
+
+	if( (Index = _Get_Property(Name)) >= 0 )
+	{
+		m_Prop_Values[Index]	= Value;
+
+		return( true );
+	}
+	else if( bAddIfNotExists )
+	{
+		m_Prop_Names	.Add(Name);
+		m_Prop_Values	.Add(Value);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+bool CSG_MetaData::Set_Property(const CSG_String &Name, double Value, bool bAddIfNotExists)
+{
+	return( Set_Property(Name, CSG_String::Format(SG_T("%f"), Value, bAddIfNotExists)) );
+}
+
+bool CSG_MetaData::Set_Property(const CSG_String &Name, int Value, bool bAddIfNotExists)
+{
+	return( Set_Property(Name, CSG_String::Format(SG_T("%d"), Value, bAddIfNotExists)) );
+}
+
+//---------------------------------------------------------
+bool CSG_MetaData::Get_Property(const CSG_String &Name, CSG_String &Value)	const
+{
+	const SG_Char	*cString	= Get_Property(Name);
+
+	if( cString )
+	{
+		Value	= cString;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+bool CSG_MetaData::Get_Property(const CSG_String &Name, double &Value)	const
+{
+	CSG_String	s;
+
+	return( Get_Property(Name, s) && s.asDouble(Value) );
+}
+
+bool CSG_MetaData::Get_Property(const CSG_String &Name, int &Value)	const
+{
+	CSG_String	s;
+
+	return( Get_Property(Name, s) && s.asInt(Value) );
+}
+
+//---------------------------------------------------------
+bool CSG_MetaData::Cmp_Property(const CSG_String &Name, const CSG_String &String, bool bNoCase) const
+{
+	CSG_String	s;
+
+	return( Get_Property(Name, s) && (bNoCase ? !s.CmpNoCase(String) : !s.Cmp(String)) );
+}
+
+//---------------------------------------------------------
+int CSG_MetaData::_Get_Property(const CSG_String &Name) const
+{
+	for(int i=0; i<m_Prop_Names.Get_Count(); i++)
+	{
+		if( Name.CmpNoCase(m_Prop_Names[i]) == 0 )
+		{
+			return( i );
+		}
+	}
+
+	return( -1 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_MetaData::Assign(const CSG_MetaData &MetaData, bool bAppend)
+{
+	if( &MetaData == this )
+	{
+		return( true );
+	}
+
+	int		i;
+
+	if( !bAppend )
+	{
+		Destroy();
+
+		Set_Name	(MetaData.Get_Name   ());
+		Set_Content	(MetaData.Get_Content());
+
+		//-------------------------------------------------
+		for(i=0; i<MetaData.Get_Property_Count(); i++)
+		{
+			Add_Property(MetaData.Get_Property_Name(i), MetaData.Get_Property(i));
+		}
+	}
+
+	//-----------------------------------------------------
+	for(i=0; i<MetaData.Get_Children_Count(); i++)
+	{
+		Add_Child()->Assign(*MetaData.Get_Child(i), false);
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_MetaData::Load(const CSG_String &File, const SG_Char *Extension)
+{
+	Destroy();
+
+	wxXmlDocument	XML;
+
+	if( SG_File_Exists(SG_File_Make_Path(NULL, File, Extension)) && XML.Load(SG_File_Make_Path(NULL, File, Extension).c_str()) )
+	{
+		_Load(XML.GetRoot());
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_MetaData::Load(CSG_File &File)
+{
+	Destroy();
+
+	wxXmlDocument	XML;
+
+	wxFFileInputStream	Stream(File.Get_Stream());
+
+	if( Stream.IsOk() && XML.Load(Stream) )
+	{
+		_Load(XML.GetRoot());
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+void CSG_MetaData::_Load(wxXmlNode *pNode)
+{
+	m_Name		= SG_UTF8_To_String(pNode->GetName       ());
+	m_Content	= SG_UTF8_To_String(pNode->GetNodeContent());
+
+	//-----------------------------------------------------
+	wxXmlProperty	*pProperty	= pNode->GetProperties();
+
+	while( pProperty )
+	{
+		Add_Property(SG_UTF8_To_String(pProperty->GetName()).c_str(), SG_UTF8_To_String(pProperty->GetValue()).c_str());
+
+		pProperty	= pProperty->GetNext();
+	}
+
+	//-----------------------------------------------------
+	wxXmlNode	*pChild	= pNode->GetChildren();
+
+	while( pChild )
+	{
+		if( pChild->GetType() != wxXML_TEXT_NODE )
+		{
+			Add_Child()->_Load(pChild);
+		}
+
+		pChild	= pChild->GetNext();
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_MetaData::Save(const CSG_String &File, const SG_Char *Extension) const
+{
+	wxXmlDocument	XML;
+
+	wxXmlNode	*pRoot	= new wxXmlNode(NULL, wxXML_ELEMENT_NODE, Get_Name().c_str());
+
+	XML.SetRoot(pRoot);
+
+	_Save(pRoot);
+
+	if( XML.Save(SG_File_Make_Path(NULL, File, Extension).c_str()) )
+	{
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_MetaData::Save(CSG_File &File) const
+{
+	wxXmlDocument	XML;
+
+	wxXmlNode	*pRoot	= new wxXmlNode(NULL, wxXML_ELEMENT_NODE, Get_Name().c_str());
+
+	XML.SetRoot(pRoot);
+
+	_Save(pRoot);
+
+	wxFFileOutputStream	Stream(File.Get_Stream());
+
+	if( Stream.IsOk() && XML.Save(Stream) )
+	{
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+void CSG_MetaData::_Save(wxXmlNode *pNode) const
+{
+	int		i;
+
+	//-----------------------------------------------------
+	pNode->SetName	 (Get_Name().Length() ? SG_String_To_UTF8(Get_Name()).c_str() : SG_T("NODE"));
+	pNode->SetContent(SG_String_To_UTF8(Get_Content()).c_str());
+
+	if( Get_Content().Length() > 0 || (Get_Property_Count() == 0 && Get_Children_Count() == 0) )
+	{
+		wxXmlNode	*pChild	= new wxXmlNode(pNode, wxXML_TEXT_NODE, SG_T("TEXT"));// SG_String_To_UTF8(Get_Name()).c_str());
+
+		pChild->SetContent(SG_String_To_UTF8(Get_Content()).c_str());
+	}
+
+	//-----------------------------------------------------
+	for(i=0; i<Get_Property_Count(); i++)
+	{
+		pNode->AddProperty(SG_String_To_UTF8(Get_Property_Name(i)).c_str(), SG_String_To_UTF8(Get_Property(i)).c_str());
+	}
+
+	//-----------------------------------------------------
+	for(i=Get_Children_Count()-1; i>=0; i--)
+	{
+		Get_Child(i)->_Save(new wxXmlNode(pNode, wxXML_ELEMENT_NODE, SG_String_To_UTF8(Get_Child(i)->Get_Name()).c_str()));
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_MetaData::Load_WKT(const CSG_String &WKT)
+{
+	return( false );
+}
+
+bool CSG_MetaData::_Load_WKT(const CSG_String &WKT)
+{
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_MetaData::Save_WKT(CSG_String &WKT) const
+{
+	return( false );
+}
+
+bool CSG_MetaData::_Save_WKT(CSG_String &WKT) const
+{
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_api/metadata.h b/src/saga_core/saga_api/metadata.h
index 8989ddc..c908918 100644
--- a/src/saga_core/saga_api/metadata.h
+++ b/src/saga_core/saga_api/metadata.h
@@ -110,7 +110,6 @@ public:
 	CSG_MetaData &				operator  =			(const CSG_MetaData &MetaData)		{	Assign(MetaData, false);	return( *this );	}
 	CSG_MetaData &				operator +=			(const CSG_MetaData &MetaData)		{	Assign(MetaData, true );	return( *this );	}
 
-
 	const CSG_String &			Get_Name			(void)						const	{	return( m_Name );		}
 	void						Set_Name			(const CSG_String &Name)			{	m_Name		= Name;		}
 	const CSG_String &			Get_Content			(void)						const	{	return( m_Content );	}
@@ -128,6 +127,11 @@ public:
 	bool						Del_Child			(int Index);
 	bool						Del_Child			(const CSG_String &Name)			{	return( Del_Child(_Get_Child(Name)) );	}
 
+	const CSG_MetaData &		operator []			(int Index)					const	{	CSG_MetaData	*pData	= Index >= 0 && Index < m_nChildren ? m_pChildren[Index] : NULL;	return( *pData );	}
+	const CSG_MetaData &		operator []			(const CSG_String &Name)	const	{	return( *Get_Child(_Get_Child(Name)) );	}
+
+	bool						is_Valid			(void)						const	{	return( this != NULL );					}
+
 	int							Get_Property_Count	(void)						const	{	return( m_Prop_Names.Get_Count() );	}
 	const CSG_String &			Get_Property_Name	(int i)						const	{	return( m_Prop_Names [i] );			}
 	const SG_Char *				Get_Property		(int i)						const	{	return( i >= 0 && i < m_Prop_Values.Get_Count() ? m_Prop_Values[i].c_str() : NULL );	}
@@ -151,7 +155,7 @@ private:
 
 	int							m_nChildren, m_nBuffer;
 
-	CSG_MetaData				**m_pChildren, *m_pParent;
+	CSG_MetaData				**m_pChildren, *m_pParent, *m_pDummy;
 
 	CSG_String					m_Name, m_Content;
 
diff --git a/src/saga_core/saga_api/module.cpp b/src/saga_core/saga_api/module.cpp
index ae82dab..01e7329 100644
--- a/src/saga_core/saga_api/module.cpp
+++ b/src/saga_core/saga_api/module.cpp
@@ -195,7 +195,6 @@ void CSG_Module::Set_Translation(CSG_Translator &Translator)
 bool CSG_Module::Execute(void)
 {
 	bool	bResult	= false;
-	int		i;
 
 	if( m_bExecutes == false )
 	{
@@ -203,7 +202,7 @@ bool CSG_Module::Execute(void)
 
 		if( Parameters.DataObjects_Check() )
 		{
-			for(i=0; i<m_npParameters; i++)
+			for(int i=0; i<m_npParameters; i++)
 			{
 				m_pParameters[i]->DataObjects_Check();
 			}
@@ -245,12 +244,7 @@ __except(1)
 
 			Destroy();
 
-			Parameters.DataObjects_Synchronize();
-
-			for(i=0; i<m_npParameters; i++)
-			{
-				m_pParameters[i]->DataObjects_Synchronize();
-			}
+			_Synchronize_DataObjects();
 		}
 
 		m_bExecutes		= false;
@@ -267,6 +261,75 @@ __except(1)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
+bool CSG_Module::_Synchronize_DataObjects(void)
+{
+	int				i;
+	CSG_Projection	Projection;
+
+	Parameters.DataObjects_Synchronize();
+
+	for(i=0; i<m_npParameters; i++)
+	{
+		m_pParameters[i]->DataObjects_Synchronize();
+	}
+
+	if( do_Sync_Projections() && Get_Projection(Projection) )
+	{
+		Parameters.DataObjects_Set_Projection(Projection);
+
+		for(i=0; i<m_npParameters; i++)
+		{
+			m_pParameters[i]->DataObjects_Set_Projection(Projection);
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Module::Get_Projection(CSG_Projection &Projection)	const
+{
+	Projection.Destroy();
+
+	if( !Parameters.DataObjects_Get_Projection(Projection) )
+	{
+		return( false );
+	}
+
+	for(int i=0; i<m_npParameters; i++)
+	{
+		CSG_Projection	P;
+
+		if( !m_pParameters[i]->DataObjects_Get_Projection(P) )
+		{
+			return( false );
+		}
+		else if( P.is_Okay() )
+		{
+			if( !Projection.is_Okay() )
+			{
+				Projection	= P;
+			}
+			else if( Projection != P )
+			{
+				return( false );
+			}
+		}
+	}
+
+	return( Projection.is_Okay() );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
 void CSG_Module::Set_Managed(bool bOn)
 {
 	m_bManaged	= Parameters.m_bManaged	= bOn;
@@ -411,9 +474,9 @@ bool CSG_Module::Set_Progress(double Position, double Range)
 }
 
 //---------------------------------------------------------
-bool CSG_Module::Stop_Execution(void)
+bool CSG_Module::Stop_Execution(bool bDialog)
 {
-	return( SG_UI_Stop_Execution() );
+	return( SG_UI_Stop_Execution(bDialog) );
 }
 
 
diff --git a/src/saga_core/saga_api/module.h b/src/saga_core/saga_api/module.h
index d77e982..f1e9da3 100644
--- a/src/saga_core/saga_api/module.h
+++ b/src/saga_core/saga_api/module.h
@@ -153,6 +153,8 @@ public:
 	CSG_Data_Object *			Garbage_Del_Item			(int i, bool bFromListOnly = true);
 	void						Garbage_Clear				(void);
 
+	virtual bool				do_Sync_Projections			(void)	{	return( true  );	}
+
 	virtual bool				is_Interactive				(void)	{	return( false );	}
 	bool						is_Progress					(void)	{	return( SG_UI_Process_Get_Okay(false) );	}
 	bool						is_Executing				(void)	{	return( m_bExecutes );	}
@@ -202,7 +204,7 @@ protected:
 	virtual bool				Set_Progress				(int Position);
 	virtual bool				Set_Progress				(double Position, double Range);
 
-	bool						Stop_Execution				(void);
+	bool						Stop_Execution				(bool bDialog = true);
 
 	void						Message_Add					(const SG_Char *Text, bool bNewLine = true);
 	void						Message_Dlg					(const SG_Char *Text, const SG_Char *Caption = NULL);
@@ -234,6 +236,8 @@ protected:
 	bool						DataObject_Set_Parameter	(CSG_Data_Object *pDataObject, const CSG_String &ID, const SG_Char *Value);
 	bool						DataObject_Set_Parameter	(CSG_Data_Object *pDataObject, const CSG_String &ID, double loVal, double hiVal);	// Range Parameter
 
+	bool						Get_Projection				(CSG_Projection &Projection)	const;
+
 
 private:
 
@@ -250,6 +254,8 @@ private:
 
 	bool						_Garbage_Add_Item			(CSG_Data_Object *pDataObject);
 
+	bool						_Synchronize_DataObjects	(void);
+
 	void						_Set_Output_History			(void);
 
 	static int					_On_Parameter_Changed		(CSG_Parameter *pParameter);
@@ -319,7 +325,7 @@ protected:
 
 private:
 
-	CSG_Grid						*m_pLock;
+	CSG_Grid					*m_pLock;
 
 };
 
diff --git a/src/saga_core/saga_api/module_interactive_base.cpp b/src/saga_core/saga_api/module_interactive_base.cpp
index 99603cc..0095fce 100644
--- a/src/saga_core/saga_api/module_interactive_base.cpp
+++ b/src/saga_core/saga_api/module_interactive_base.cpp
@@ -113,6 +113,8 @@ bool CSG_Module_Interactive_Base::Execute_Position(CSG_Point ptWorld, TSG_Module
 
 		m_Keys						= 0;
 
+		m_pModule->_Synchronize_DataObjects();
+
 		m_pModule->m_bExecutes		= false;
 	}
 
@@ -142,6 +144,8 @@ bool CSG_Module_Interactive_Base::Execute_Keyboard(int Character, int Keys)
 
 		m_Keys						= 0;
 
+		m_pModule->_Synchronize_DataObjects();
+
 		m_pModule->m_bExecutes		= false;
 	}
 
@@ -167,6 +171,8 @@ bool CSG_Module_Interactive_Base::Execute_Finish(void)
 
 		bResult						= On_Execute_Finish();
 
+		m_pModule->_Synchronize_DataObjects();
+
 		m_pModule->m_bExecutes		= false;
 	}
 
diff --git a/src/saga_core/saga_api/parameter.cpp b/src/saga_core/saga_api/parameter.cpp
index d27b338..b497026 100644
--- a/src/saga_core/saga_api/parameter.cpp
+++ b/src/saga_core/saga_api/parameter.cpp
@@ -766,6 +766,32 @@ CSG_Grid * CSG_Parameters_Grid_Target::Get_User(const CSG_String &Identifier, TS
 	return( pGrid );
 }
 
+//---------------------------------------------------------
+bool CSG_Parameters_Grid_Target::Get_System_User(CSG_Grid_System &System)
+{
+	if( m_pUser )
+	{
+		if( m_pUser->Get_Parameter("SIZE")->asDouble() > 0.0
+		&&	m_pUser->Get_Parameter("COLS")->asInt()    > 0
+		&&	m_pUser->Get_Parameter("ROWS")->asInt()    > 0	)
+		{
+			On_User_Changed(m_pUser, m_pUser->Get_Parameter("SIZE"));
+
+			System.Assign(
+				m_pUser->Get_Parameter("SIZE")->asDouble(),
+				m_pUser->Get_Parameter("XMIN")->asDouble(),
+				m_pUser->Get_Parameter("YMIN")->asDouble(),
+				m_pUser->Get_Parameter("COLS")->asInt(),
+				m_pUser->Get_Parameter("ROWS")->asInt()
+			);
+
+			return( System.is_Valid() );
+		}
+	}
+
+	return( false );
+}
+
 
 ///////////////////////////////////////////////////////////
 //														 //
@@ -858,6 +884,39 @@ CSG_Grid * CSG_Parameters_Grid_Target::Get_Grid(const CSG_String &Identifier, TS
 
 ///////////////////////////////////////////////////////////
 //														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Parameters_Grid_Target::Add_Parameters_System(CSG_Parameters *pParameters)
+{
+	if( pParameters == NULL )
+	{
+		return( false );
+	}
+
+	m_pSystem	= pParameters;
+
+	m_pSystem->Add_Grid_System(NULL, "SYSTEM", LNG("Grid System"), LNG(""));
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameters_Grid_Target::Get_System(CSG_Grid_System &System)
+{
+	if( m_pSystem && m_pSystem->Get_Parameter("SYSTEM") && m_pSystem->Get_Parameter("SYSTEM")->asGrid_System() )
+	{
+		System.Assign(*m_pSystem->Get_Parameter("SYSTEM")->asGrid_System());
+
+		return( System.is_Valid() );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
 //														 //
 //														 //
 ///////////////////////////////////////////////////////////
diff --git a/src/saga_core/saga_api/parameter_data.cpp b/src/saga_core/saga_api/parameter_data.cpp
index 1ae80db..9b9b85a 100644
--- a/src/saga_core/saga_api/parameter_data.cpp
+++ b/src/saga_core/saga_api/parameter_data.cpp
@@ -1,2299 +1,2383 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                  parameter_data.cpp                   //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <string.h>
-
-#include "parameters.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define SG_MD_PARM_DATAOBJECT_CREATE		SG_T("CREATE")
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-const SG_Char * SG_Parameter_Type_Get_Identifier(TSG_Parameter_Type Type)
-{
-	switch( Type )
-	{
-	default:								return( SG_T("parameter") );
-
-	case PARAMETER_TYPE_Node:				return( SG_T("node") );
-
-	case PARAMETER_TYPE_Bool:				return( SG_T("boolean") );
-	case PARAMETER_TYPE_Int:				return( SG_T("integer") );
-	case PARAMETER_TYPE_Double:				return( SG_T("double") );
-	case PARAMETER_TYPE_Degree:				return( SG_T("degree") );
-	case PARAMETER_TYPE_Range:				return( SG_T("range") );
-	case PARAMETER_TYPE_Choice:				return( SG_T("choice") );
-
-	case PARAMETER_TYPE_String:				return( SG_T("text") );
-	case PARAMETER_TYPE_Text:				return( SG_T("long_text") );
-	case PARAMETER_TYPE_FilePath:			return( SG_T("file") );
-
-	case PARAMETER_TYPE_Font:				return( SG_T("font") );
-	case PARAMETER_TYPE_Color:				return( SG_T("color") );
-	case PARAMETER_TYPE_Colors:				return( SG_T("colors") );
-	case PARAMETER_TYPE_FixedTable:			return( SG_T("static_table") );
-	case PARAMETER_TYPE_Grid_System:		return( SG_T("grid_system") );
-	case PARAMETER_TYPE_Table_Field:		return( SG_T("table_field") );
-
-	case PARAMETER_TYPE_DataObject_Output:	return( SG_T("data_object") );
-	case PARAMETER_TYPE_Grid:				return( SG_T("grid") );
-	case PARAMETER_TYPE_Table:				return( SG_T("table") );
-	case PARAMETER_TYPE_Shapes:				return( SG_T("shapes") );
-	case PARAMETER_TYPE_TIN:				return( SG_T("tin") );
-	case PARAMETER_TYPE_PointCloud:			return( SG_T("points") );
-
-	case PARAMETER_TYPE_Grid_List:			return( SG_T("grid_list") );
-	case PARAMETER_TYPE_Table_List:			return( SG_T("table_list") );
-	case PARAMETER_TYPE_Shapes_List:		return( SG_T("shapes_list") );
-	case PARAMETER_TYPE_TIN_List:			return( SG_T("tin_list") );
-	case PARAMETER_TYPE_PointCloud_List:	return( SG_T("points_list") );
-
-	case PARAMETER_TYPE_Parameters:			return( SG_T("parameters") );
-	}
-}
-
-//---------------------------------------------------------
-const SG_Char * SG_Parameter_Type_Get_Name(TSG_Parameter_Type Type)
-{
-	switch( Type )
-	{
-	default:								return( LNG("[PRM] Parameter") );
-
-	case PARAMETER_TYPE_Node:				return( LNG("[PRM] Node") );
-
-	case PARAMETER_TYPE_Bool:				return( LNG("[PRM] Boolean") );
-	case PARAMETER_TYPE_Int:				return( LNG("[PRM] Integer") );
-	case PARAMETER_TYPE_Double:				return( LNG("[PRM] Floating point") );
-	case PARAMETER_TYPE_Degree:				return( LNG("[PRM] Degree") );
-	case PARAMETER_TYPE_Range:				return( LNG("[PRM] Value range") );
-	case PARAMETER_TYPE_Choice:				return( LNG("[PRM] Choice") );
-
-	case PARAMETER_TYPE_String:				return( LNG("[PRM] Text") );
-	case PARAMETER_TYPE_Text:				return( LNG("[PRM] Long text") );
-	case PARAMETER_TYPE_FilePath:			return( LNG("[PRM] File path") );
-
-	case PARAMETER_TYPE_Font:				return( LNG("[PRM] Font") );
-	case PARAMETER_TYPE_Color:				return( LNG("[PRM] Color") );
-	case PARAMETER_TYPE_Colors:				return( LNG("[PRM] Colors") );
-	case PARAMETER_TYPE_FixedTable:			return( LNG("[PRM] Static table") );
-	case PARAMETER_TYPE_Grid_System:		return( LNG("[PRM] Grid system") );
-	case PARAMETER_TYPE_Table_Field:		return( LNG("[PRM] Table field") );
-
-	case PARAMETER_TYPE_DataObject_Output:	return( LNG("[PRM] Data Object") );
-	case PARAMETER_TYPE_Grid:				return( LNG("[PRM] Grid") );
-	case PARAMETER_TYPE_Table:				return( LNG("[PRM] Table") );
-	case PARAMETER_TYPE_Shapes:				return( LNG("[PRM] Shapes") );
-	case PARAMETER_TYPE_TIN:				return( LNG("[PRM] TIN") );
-	case PARAMETER_TYPE_PointCloud:			return( LNG("[PRM] Point Cloud") );
-
-	case PARAMETER_TYPE_Grid_List:			return( LNG("[PRM] Grid list") );
-	case PARAMETER_TYPE_Table_List:			return( LNG("[PRM] Table list") );
-	case PARAMETER_TYPE_Shapes_List:		return( LNG("[PRM] Shapes list") );
-	case PARAMETER_TYPE_TIN_List:			return( LNG("[PRM] TIN list") );
-	case PARAMETER_TYPE_PointCloud_List:	return( LNG("[PRM] Point Cloud list") );
-
-	case PARAMETER_TYPE_Parameters:			return( LNG("[PRM] Parameters") );
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Base Class						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Data::CSG_Parameter_Data(CSG_Parameter *pOwner, long Constraint)
-{
-	m_pOwner		= pOwner;
-	m_Constraint	= Constraint;
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Data::Get_Type_Identifier(void)
-{
-	return( SG_Parameter_Type_Get_Identifier(Get_Type()) );
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Data::Get_Type_Name(void)
-{
-	return( SG_Parameter_Type_Get_Name(Get_Type()) );
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Data::Set_Value(int Value)
-{
-	return( false );
-}
-
-bool CSG_Parameter_Data::Set_Value(double Value)
-{
-	return( false );
-}
-
-bool CSG_Parameter_Data::Set_Value(void *Value)
-{
-	return( false );
-}
-
-//---------------------------------------------------------
-int CSG_Parameter_Data::asInt(void)
-{
-	return( 0 );
-}
-
-double CSG_Parameter_Data::asDouble(void)
-{
-	return( 0.0 );
-}
-
-void * CSG_Parameter_Data::asPointer(void)
-{
-	return( NULL );
-}
-
-const SG_Char * CSG_Parameter_Data::asString(void)
-{
-	return( NULL );
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Data::Assign(CSG_Parameter_Data *pSource)
-{
-	if( pSource && Get_Type() == pSource->Get_Type() )
-	{
-		On_Assign(pSource);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-void CSG_Parameter_Data::On_Assign(CSG_Parameter_Data *pSource)
-{}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Data::Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	return( On_Serialize(Entry, bSave) );
-}
-
-bool CSG_Parameter_Data::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	Entry.Set_Content(SG_T("-"));
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Node							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Node::CSG_Parameter_Node(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Bool							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Bool::CSG_Parameter_Bool(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{
-	m_Value		= false;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Bool::Set_Value(int Value)
-{
-	bool	bValue = Value != 0 ? true : false;
-
-	if( m_Value != bValue )
-	{
-		m_Value		= bValue;
-
-		return( true );
-	}
-
-	return( false );
-}
-
-bool CSG_Parameter_Bool::Set_Value(double Value)
-{
-	return( Set_Value((int)Value) );
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Bool::asString(void)
-{
-	return( m_Value ? LNG("[VAL] yes") : LNG("[VAL] no") );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Bool::On_Assign(CSG_Parameter_Data *pSource)
-{
-	m_Value		= ((CSG_Parameter_Bool *)pSource)->m_Value;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Bool::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( bSave )
-	{
-		Entry.Set_Content(m_Value ? SG_T("TRUE") : SG_T("FALSE"));
-	}
-	else
-	{
-		m_Value	= Entry.Cmp_Content(SG_T("TRUE"), true);
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Value							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Value::CSG_Parameter_Value(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{
-	m_Minimum	= 0.0;
-	m_bMinimum	= false;
-
-	m_Maximum	= 0.0;
-	m_bMaximum	= false;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Value::Set_Range(double Minimum, double Maximum)
-{
-	if( 1 )
-	{
-		m_Minimum		= Minimum;
-		m_Maximum		= Maximum;
-
-		switch( Get_Type() )
-		{
-		default:
-			return( false );
-
-		case PARAMETER_TYPE_Int:
-			Set_Value(asInt());
-			break;
-
-		case PARAMETER_TYPE_Double:
-		case PARAMETER_TYPE_Degree:
-			Set_Value(asDouble());
-			break;
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Value::Set_Minimum(double Minimum, bool bOn)
-{
-	if( bOn == false || (m_bMaximum && Minimum >= m_Maximum) )
-	{
-		m_bMinimum	= false;
-	}
-	else
-	{
-		m_bMinimum	= true;
-
-		Set_Range(Minimum, m_Maximum);
-	}
-}
-
-void CSG_Parameter_Value::Set_Maximum(double Maximum, bool bOn)
-{
-	if( bOn == false || (m_bMaximum && Maximum <= m_Minimum) )
-	{
-		m_bMaximum	= false;
-	}
-	else
-	{
-		m_bMaximum	= true;
-
-		Set_Range(m_Minimum, Maximum);
-	}
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Value::On_Assign(CSG_Parameter_Data *pSource)
-{
-	m_Minimum	= ((CSG_Parameter_Value *)pSource)->m_Minimum;
-	m_bMinimum	= ((CSG_Parameter_Value *)pSource)->m_bMinimum;
-
-	m_Maximum	= ((CSG_Parameter_Value *)pSource)->m_Maximum;
-	m_bMaximum	= ((CSG_Parameter_Value *)pSource)->m_bMaximum;
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Int								 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Int::CSG_Parameter_Int(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Value(pOwner, Constraint)
-{
-	m_Value		= 0;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Int::Set_Value(int Value)
-{
-	if( m_bMinimum && Value < m_Minimum )
-	{
-		return( Set_Value((int)m_Minimum) );
-	}
-
-	if( m_bMaximum && Value > m_Maximum )
-	{
-		return( Set_Value((int)m_Maximum) );
-	}
-
-	if( m_Value != Value )
-	{
-		m_Value	= Value;
-
-		return( true );
-	}
-
-	return( false );
-}
-
-bool CSG_Parameter_Int::Set_Value(double Value)
-{
-	return( Set_Value((int)Value) );
-}
-
-bool CSG_Parameter_Int::Set_Value(void *Value)
-{
-	int		i;
-
-	if( Value && CSG_String((SG_Char *)Value).asInt(i) )
-	{
-		return( Set_Value(i) );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Int::asString(void)
-{
-	m_String.Printf(SG_T("%d"), m_Value);
-
-	return( m_String );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Int::On_Assign(CSG_Parameter_Data *pSource)
-{
-	CSG_Parameter_Value::On_Assign(pSource);
-
-	Set_Value(((CSG_Parameter_Value *)pSource)->asInt());
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Int::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( bSave )
-	{
-		Entry.Set_Content(CSG_String::Format(SG_T("%d"), m_Value));
-	}
-	else
-	{
-		return( Entry.Get_Content().asInt(m_Value) );
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Double							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Double::CSG_Parameter_Double(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Value(pOwner, Constraint)
-{
-	m_Value		= 0.0;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Double::Set_Value(int Value)
-{
-	return( Set_Value((double)Value) );
-}
-
-bool CSG_Parameter_Double::Set_Value(double Value)
-{
-	if( m_bMinimum && Value < m_Minimum )
-	{
-		return( Set_Value(m_Minimum) );
-	}
-
-	if( m_bMaximum && Value > m_Maximum )
-	{
-		return( Set_Value(m_Maximum) );
-	}
-
-	if( m_Value != Value )
-	{
-		m_Value	= Value;
-
-		return( true );
-	}
-
-	return( false );
-}
-
-bool CSG_Parameter_Double::Set_Value(void *Value)
-{
-	double	d;
-
-	if( Value && CSG_String((SG_Char *)Value).asDouble(d) )
-	{
-		return( Set_Value(d) );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Double::asString(void)
-{
-	m_String.Printf(SG_T("%f"), m_Value);
-
-	return( m_String );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Double::On_Assign(CSG_Parameter_Data *pSource)
-{
-	CSG_Parameter_Value::On_Assign(pSource);
-
-	Set_Value(((CSG_Parameter_Value *)pSource)->asDouble());
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Double::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( bSave )
-	{
-		Entry.Set_Content(CSG_String::Format(SG_T("%f"), m_Value));
-	}
-	else
-	{
-		return( Entry.Get_Content().asDouble(m_Value) );
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Degree							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Degree::CSG_Parameter_Degree(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Double(pOwner, Constraint)
-{}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Degree::Set_Value(void *Value)
-{
-	return( CSG_Parameter_Double::Set_Value(SG_Degree_To_Double((const SG_Char *)Value)) );
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Degree::asString(void)
-{
-	m_String	= SG_Double_To_Degree(asDouble());
-
-	return( m_String );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Range							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Range::CSG_Parameter_Range(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{
-	pRange	= new CSG_Parameters;
-
-	if( (m_Constraint & PARAMETER_INFORMATION) != 0 )
-	{
-		pLo		= pRange->Add_Info_Value(m_pOwner, SG_T("MIN"), SG_T("Minimum"), m_pOwner->Get_Description(), PARAMETER_TYPE_Double);
-		pHi		= pRange->Add_Info_Value(m_pOwner, SG_T("MAX"), SG_T("Maximum"), m_pOwner->Get_Description(), PARAMETER_TYPE_Double);
-	}
-	else
-	{
-		pLo		= pRange->Add_Value		(m_pOwner, SG_T("MIN"), SG_T("Minimum"), m_pOwner->Get_Description(), PARAMETER_TYPE_Double);
-		pHi		= pRange->Add_Value		(m_pOwner, SG_T("MAX"), SG_T("Maximum"), m_pOwner->Get_Description(), PARAMETER_TYPE_Double);
-	}
-}
-
-CSG_Parameter_Range::~CSG_Parameter_Range(void)
-{
-	delete(pRange);
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Range::asString(void)
-{
-	m_String.Printf(SG_T("[%f] - [%f]"),
-		Get_LoParm()->asDouble(),
-		Get_HiParm()->asDouble()
-	);
-
-	return( m_String );
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Range::Set_Range(double loVal, double hiVal)
-{
-	bool	bResult;
-
-	if( loVal > hiVal )
-	{
-		bResult	 = pLo->Set_Value(hiVal);
-		bResult	|= pHi->Set_Value(loVal);
-	}
-	else
-	{
-		bResult	 = pLo->Set_Value(loVal);
-		bResult	|= pHi->Set_Value(hiVal);
-	}
-
-	return( bResult );
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Range::Set_LoVal(double newValue)
-{
-	return( pLo->Set_Value(newValue) );
-}
-
-double CSG_Parameter_Range::Get_LoVal(void)
-{
-	return( pLo->asDouble() );
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Range::Set_HiVal(double newValue)
-{
-	return( pHi->Set_Value(newValue) );
-}
-
-double CSG_Parameter_Range::Get_HiVal(void)
-{
-	return( pHi->asDouble() );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Range::On_Assign(CSG_Parameter_Data *pSource)
-{
-	pLo->Assign(((CSG_Parameter_Range *)pSource)->pLo);
-	pHi->Assign(((CSG_Parameter_Range *)pSource)->pHi);
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Range::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( bSave )
-	{
-		Entry.Set_Content(CSG_String::Format(SG_T("%f; %f"), Get_LoVal(), Get_HiVal()));
-
-		return( true );
-	}
-	else
-	{
-		double		loVal, hiVal;
-		CSG_String	s(Entry.Get_Content());
-
-		if( s.BeforeFirst(SG_T(';')).asDouble(loVal) && s.AfterFirst(SG_T(';')).asDouble(hiVal) )
-		{
-			return( Set_Range(loVal, hiVal) );
-		}
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Choice							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Choice::CSG_Parameter_Choice(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Int(pOwner, Constraint)
-{}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Choice::Set_Value(void *Value)
-{
-	if( Value && *((SG_Char *)Value) )
-	{
-		for(int i=0; i<Items.Get_Count(); i++)
-		{
-			if( Items[i].Cmp((SG_Char *)Value) == 0 )
-			{
-				m_Value	= i;
-
-				return( true );
-			}
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Choice::asString(void)
-{
-	if( m_Value >= 0 && m_Value < Items.Get_Count() )
-	{
-		return( Items[m_Value].c_str() );
-	}
-
-	return( LNG("[VAL] [no choice available]") );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Choice::Set_Items(const SG_Char *String)
-{
-	Items.Clear();
-
-	const SG_Char	*s	= String;
-
-	while( s && *s != 0 )
-	{
-		CSG_String	Item	= CSG_String(s).BeforeFirst('|');
-
-		Items	+= Item;
-		s		+= Item.Length() + 1;
-	}
-
-	if( Items.Get_Count() <= 0 )
-	{
-		Items	+= LNG("[VAL] [not set]");
-	}
-
-	Set_Minimum(              0, true);
-	Set_Maximum(Get_Count() - 1, true);
-
-	CSG_Parameter_Int::Set_Value(m_Value);
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Choice::Get_Item(int Index)
-{
-	if( Index >= 0 && Index < Items.Get_Count() )
-	{
-		return( Items[Index].c_str() );
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Choice::On_Assign(CSG_Parameter_Data *pSource)
-{
-	Items	= ((CSG_Parameter_Choice *)pSource)->Items;
-
-	CSG_Parameter_Int::On_Assign(pSource);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						String							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_String::CSG_Parameter_String(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{
-	bPassword	= false;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_String::is_Valid(void)
-{
-	return( m_String.Length() > 0 );
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_String::is_Password(void)
-{
-	return( bPassword );
-}
-
-void CSG_Parameter_String::Set_Password(bool bOn)
-{
-	bPassword	= bOn;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_String::Set_Value(void *Value)
-{
-	if( Value )
-	{
-		if( m_String.Cmp((SG_Char *)Value) )
-		{
-			m_String	= (SG_Char *)Value;
-
-			return( true );
-		}
-	}
-	else if( m_String.Length() > 0 )
-	{
-		m_String.Clear();
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_String::asString(void)
-{
-	return( m_String );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_String::On_Assign(CSG_Parameter_Data *pSource)
-{
-	m_String	= ((CSG_Parameter_String *)pSource)->m_String.c_str();
-
-	bPassword	= ((CSG_Parameter_String *)pSource)->bPassword;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_String::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( bSave )
-	{
-		Entry.Set_Content(m_String);
-	}
-	else
-	{
-		m_String	= Entry.Get_Content();
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Text							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Text::CSG_Parameter_Text(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_String(pOwner, Constraint)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						FilePath						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_File_Name::CSG_Parameter_File_Name(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_String(pOwner, Constraint)
-{
-	m_Filter.Printf(SG_T("%s|*.*"), LNG("All Files"));
-
-	m_bSave			= false;
-	m_bMultiple		= false;
-	m_bDirectory	= false;
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_File_Name::Set_Filter(const SG_Char *Filter)
-{
-	if( Filter )
-	{
-		m_Filter	= Filter;
-	}
-	else
-	{
-		m_Filter.Printf(SG_T("%s|*.*"), LNG("All Files"));
-	}
-}
-
-const SG_Char *  CSG_Parameter_File_Name::Get_Filter(void)
-{
-	return( m_Filter.c_str() );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_File_Name::Set_Flag_Save(bool bFlag)
-{
-	m_bSave			= bFlag;
-}
-
-void CSG_Parameter_File_Name::Set_Flag_Multiple(bool bFlag)
-{
-	m_bMultiple		= bFlag;
-}
-
-void CSG_Parameter_File_Name::Set_Flag_Directory(bool bFlag)
-{
-	m_bDirectory	= bFlag;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_File_Name::Get_FilePaths(CSG_Strings &FilePaths)
-{
-	FilePaths.Clear();
-
-	if( m_String.Length() > 0 )
-	{
-		if( !m_bMultiple )
-		{
-			FilePaths.Add(m_String);
-		}
-		else if( m_String[0] != '\"' )
-		{
-			FilePaths.Add(m_String);
-		}
-		else
-		{
-			CSG_String	s(m_String), sTmp;
-
-			while( s.Length() > 2 )
-			{
-				s	= s.AfterFirst('\"');
-				FilePaths.Add(s.BeforeFirst('\"'));
-				s	= s.AfterFirst('\"');
-			}
-		}
-	}
-
-	return( FilePaths.Get_Count() > 0 );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_File_Name::On_Assign(CSG_Parameter_Data *pSource)
-{
-	CSG_Parameter_String::On_Assign(pSource);
-
-	Set_Filter(((CSG_Parameter_File_Name *)pSource)->m_Filter.c_str());
-
-	m_bSave			= ((CSG_Parameter_File_Name *)pSource)->m_bSave;
-	m_bMultiple		= ((CSG_Parameter_File_Name *)pSource)->m_bMultiple;
-	m_bDirectory	= ((CSG_Parameter_File_Name *)pSource)->m_bDirectory;
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Font							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <wx/font.h>
-
-//---------------------------------------------------------
-CSG_Parameter_Font::CSG_Parameter_Font(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{
-	m_pFont		= new wxFont(10, wxSWISS, wxNORMAL, wxNORMAL);
-	m_Color		= SG_GET_RGB(0, 0, 0);
-}
-
-CSG_Parameter_Font::~CSG_Parameter_Font(void)
-{
-	delete(m_pFont);
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Font::Set_Value(int Value)
-{
-	if( m_Color != Value )
-	{
-		m_Color		= Value;
-
-		return( true );
-	}
-
-	return( false );
-}
-
-bool CSG_Parameter_Font::Set_Value(void *Value)
-{
-	if( Value )
-	{
-		*m_pFont	= *((class wxFont *)Value);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Font::asString(void)
-{
-	m_String.Printf(SG_T("%s, %dpt"), m_pFont->GetFaceName().c_str(), m_pFont->GetPointSize());
-
-	return( m_String );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Font::On_Assign(CSG_Parameter_Data *pSource)
-{
-	Set_Value(pSource->asPointer());
-	Set_Value(pSource->asInt());
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Font::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( bSave )
-	{
-		Entry.Add_Child(SG_T("COLOR")		, CSG_String::Format(SG_T("R%03d G%03d B%03d"), SG_GET_R(m_Color), SG_GET_G(m_Color), SG_GET_B(m_Color)));
-		Entry.Add_Child(SG_T("POINTSIZE")	, CSG_String::Format(SG_T("%d"), m_pFont->GetPointSize()));
-		Entry.Add_Child(SG_T("FACENAME")	, m_pFont->GetFaceName().c_str());
-		Entry.Add_Child(SG_T("UNDERLINED")	, m_pFont->GetUnderlined() ? SG_T("TRUE") : SG_T("FALSE"));
-
-		switch( m_pFont->GetFamily() )
-		{
-		default:
-		case wxFONTFAMILY_DEFAULT:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("DEFAULT"));		break;
-		case wxFONTFAMILY_DECORATIVE:	Entry.Add_Child(SG_T("FAMILY")	, SG_T("DECORATIVE"));	break;
-		case wxFONTFAMILY_ROMAN:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("ROMAN"));		break;
-		case wxFONTFAMILY_SCRIPT:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("SCRIPT"));		break;
-		case wxFONTFAMILY_SWISS:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("SWISS"));		break;
-		case wxFONTFAMILY_MODERN:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("MODERN"));		break;
-		case wxFONTFAMILY_TELETYPE:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("TELETYPE"));	break;
-		}
-
-		switch( m_pFont->GetStyle() )
-		{
-		default:
-		case wxFONTSTYLE_NORMAL:		Entry.Add_Child(SG_T("STYLE")	, SG_T("NORMAL"));		break;
-		case wxFONTSTYLE_SLANT:			Entry.Add_Child(SG_T("STYLE")	, SG_T("SLANT"));		break;
-		case wxFONTSTYLE_ITALIC:		Entry.Add_Child(SG_T("STYLE")	, SG_T("ITALIC"));		break;
-		}
-
-		switch( m_pFont->GetStyle() )
-		{
-		default:
-		case wxFONTWEIGHT_NORMAL:		Entry.Add_Child(SG_T("WEIGHT")	, SG_T("NORMAL"));		break;
-		case wxFONTWEIGHT_LIGHT:		Entry.Add_Child(SG_T("WEIGHT")	, SG_T("LIGHT"));		break;
-		case wxFONTWEIGHT_BOLD:			Entry.Add_Child(SG_T("WEIGHT")	, SG_T("BOLD"));		break;
-		}
-	}
-	else
-	{
-		int				i;
-		CSG_MetaData	*pEntry;
-
-		if( (pEntry = Entry.Get_Child(SG_T("COLOR"))) != NULL )
-		{
-			m_Color	= SG_GET_RGB(
-				pEntry->Get_Content().AfterFirst(SG_T('R')).asInt(),
-				pEntry->Get_Content().AfterFirst(SG_T('G')).asInt(),
-				pEntry->Get_Content().AfterFirst(SG_T('B')).asInt()
-			);
-		}
-
-		if( (pEntry = Entry.Get_Child(SG_T("POINTSIZE"))) != NULL && pEntry->Get_Content().asInt(i) )
-		{
-			m_pFont->SetPointSize(i);
-		}
-
-		if( (pEntry = Entry.Get_Child(SG_T("FACENAME"))) != NULL )
-		{
-			m_pFont->SetFaceName(pEntry->Get_Content().c_str());
-		}
-
-		if( (pEntry = Entry.Get_Child(SG_T("UNDERLINED"))) != NULL )
-		{
-			m_pFont->SetUnderlined(pEntry->Cmp_Content(SG_T("TRUE")));
-		}
-
-		if( (pEntry = Entry.Get_Child(SG_T("FAMILY"))) != NULL )
-		{
-			m_pFont->SetFamily(
-				pEntry->Cmp_Content(SG_T("TELETYPE"))	? wxFONTFAMILY_TELETYPE		:
-				pEntry->Cmp_Content(SG_T("MODERN"))		? wxFONTFAMILY_MODERN		:
-				pEntry->Cmp_Content(SG_T("SWISS"))		? wxFONTFAMILY_SWISS		:
-				pEntry->Cmp_Content(SG_T("SCRIPT"))		? wxFONTFAMILY_SCRIPT		:
-				pEntry->Cmp_Content(SG_T("ROMAN"))		? wxFONTFAMILY_ROMAN		:
-				pEntry->Cmp_Content(SG_T("DECORATIVE"))	? wxFONTFAMILY_DECORATIVE	: wxFONTFAMILY_DEFAULT
-			);
-		}
-
-		if( (pEntry = Entry.Get_Child(SG_T("STYLE"))) != NULL )
-		{
-			m_pFont->SetStyle(
-				pEntry->Cmp_Content(SG_T("SLANT"))		? wxFONTSTYLE_SLANT			:
-				pEntry->Cmp_Content(SG_T("ITALIC"))		? wxFONTSTYLE_ITALIC		: wxFONTSTYLE_NORMAL
-			);
-		}
-
-		if( (pEntry = Entry.Get_Child(SG_T("WEIGHT"))) != NULL )
-		{
-			m_pFont->SetWeight(
-				pEntry->Cmp_Content(SG_T("BOLD"))		? wxFONTWEIGHT_BOLD			:
-				pEntry->Cmp_Content(SG_T("LIGHT"))		? wxFONTWEIGHT_LIGHT		: wxFONTWEIGHT_NORMAL
-			);
-		}
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Color							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Color::CSG_Parameter_Color(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Int(pOwner, Constraint)
-{}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Color::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( bSave )
-	{
-		Entry.Set_Content(SG_T("R%03d G%03d B%03d"), SG_GET_R(m_Value), SG_GET_G(m_Value), SG_GET_B(m_Value));
-	}
-	else
-	{
-		m_Value	= SG_GET_RGB(
-			Entry.Get_Content().AfterFirst(SG_T('R')).asInt(),
-			Entry.Get_Content().AfterFirst(SG_T('G')).asInt(),
-			Entry.Get_Content().AfterFirst(SG_T('B')).asInt()
-		);
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Colors							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Colors::CSG_Parameter_Colors(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Colors::asString(void)
-{
-	m_String.Printf(SG_T("%d %s"), m_Colors.Get_Count(), LNG("colors"));
-
-	return( m_String );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Colors::On_Assign(CSG_Parameter_Data *pSource)
-{
-	m_Colors.Assign(&((CSG_Parameter_Colors *)pSource)->m_Colors);
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Colors::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( bSave )
-	{
-		for(int i=0; i<m_Colors.Get_Count(); i++)
-		{
-			Entry.Add_Child(SG_T("COLOR"), CSG_String::Format(SG_T("R%03d G%03d B%03d"), m_Colors.Get_Red(i), m_Colors.Get_Green(i), m_Colors.Get_Blue(i)));
-		}
-	}
-	else
-	{
-		if( Entry.Get_Children_Count() <= 1 )
-		{
-			return( false );
-		}
-
-		m_Colors.Set_Count(Entry.Get_Children_Count());
-
-		for(int i=0; i<m_Colors.Get_Count(); i++)
-		{
-			CSG_String	s(Entry.Get_Child(i)->Get_Content());
-
-			m_Colors.Set_Red  (i, s.AfterFirst(SG_T('R')).asInt());
-			m_Colors.Set_Green(i, s.AfterFirst(SG_T('G')).asInt());
-			m_Colors.Set_Blue (i, s.AfterFirst(SG_T('B')).asInt());
-		}
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						FixedTable						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Fixed_Table::CSG_Parameter_Fixed_Table(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{
-	m_Table.Set_Name(LNG("Table"));
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Fixed_Table::asString(void)
-{
-	m_String.Printf(SG_T("%s (%s: %d, %s: %d)"), m_Table.Get_Name(), LNG("columns"), m_Table.Get_Field_Count(), LNG("rows"), m_Table.Get_Record_Count());
-
-	return( m_String );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Fixed_Table::On_Assign(CSG_Parameter_Data *pSource)
-{
-	m_Table.Assign(&((CSG_Parameter_Fixed_Table *)pSource)->m_Table);
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Fixed_Table::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	int				iField, iRecord;
-	CSG_MetaData	*pNode, *pEntry;
-
-	if( bSave )
-	{
-		pNode	= Entry.Add_Child(SG_T("FIELDS"));
-
-		for(iField=0; iField<m_Table.Get_Field_Count(); iField++)
-		{
-			pEntry	= pNode->Add_Child	(SG_T("FIELD")	, m_Table.Get_Field_Name(iField));
-			pEntry	->Set_Property		(SG_T("type")	, gSG_Data_Type_Identifier[m_Table.Get_Field_Type(iField)]);
-		}
-
-		pNode	= Entry.Add_Child(SG_T("RECORDS"));
-
-		for(iRecord=0; iRecord<m_Table.Get_Count(); iRecord++)
-		{
-			pEntry	= pNode->Add_Child(SG_T("RECORD"));
-
-			for(iField=0; iField<m_Table.Get_Field_Count(); iField++)
-			{
-				pEntry->Add_Child(SG_T("FIELD"), m_Table[iRecord].asString(iField));
-			}
-		}
-	}
-	else
-	{
-		CSG_Table	t;
-
-		if( (pNode = Entry.Get_Child(SG_T("FIELDS"))) == NULL )
-		{
-			return( false );
-		}
-
-		for(iField=0; iField<pNode->Get_Children_Count(); iField++)
-		{
-			CSG_String		s;
-			TSG_Data_Type	type	= SG_DATATYPE_String;
-
-			if( pNode->Get_Child(iField)->Get_Property(SG_T("type"), s) )
-			{
-				     if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Bit   ]) )	type	= SG_DATATYPE_Bit;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Byte  ]) )	type	= SG_DATATYPE_Byte;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Char  ]) )	type	= SG_DATATYPE_Char;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Word  ]) )	type	= SG_DATATYPE_Word;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Short ]) )	type	= SG_DATATYPE_Short;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_DWord ]) )	type	= SG_DATATYPE_DWord;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Int   ]) )	type	= SG_DATATYPE_Int;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_ULong ]) )	type	= SG_DATATYPE_ULong;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Long  ]) )	type	= SG_DATATYPE_Long;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Float ]) )	type	= SG_DATATYPE_Float;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Double]) )	type	= SG_DATATYPE_Double;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_String]) )	type	= SG_DATATYPE_String;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Date  ]) )	type	= SG_DATATYPE_Date;
-				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Color ]) )	type	= SG_DATATYPE_Color;
-			}
-
-			t.Add_Field(pNode->Get_Child(iField)->Get_Content(), type);
-		}
-
-		if( (pNode = Entry.Get_Child(SG_T("RECORDS"))) == NULL )
-		{
-			return( false );
-		}
-
-		for(iRecord=0; iRecord<pNode->Get_Children_Count(); iRecord++)
-		{
-			pEntry	= pNode->Get_Child(iRecord);
-
-			t.Add_Record();
-
-			for(iField=0; iField<pEntry->Get_Children_Count(); iField++)
-			{
-				t[iRecord].Set_Value(iField, pEntry->Get_Child(iField)->Get_Content());
-			}
-		}
-
-		return( m_Table.Assign_Values(&t) );
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Grid_System						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Grid_System::CSG_Parameter_Grid_System(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Grid_System::Set_Value(void *Value)
-{
-	int						i, j;
-	CSG_Grid				*pGrid;
-	CSG_Grid_System			Invalid;
-	CSG_Parameters			*pParameters;
-	CSG_Parameter_Grid_List	*pGrids;
-
-	//-----------------------------------------------------
-	if( Value == NULL )
-	{
-		Value	= &Invalid;
-	}
-
-	//-----------------------------------------------------
-	if( !m_System.is_Equal(*((CSG_Grid_System *)Value)) )
-	{
-		m_System.Assign(*((CSG_Grid_System *)Value));
-
-		//-------------------------------------------------
-		pParameters	= m_pOwner->Get_Owner();
-
-		for(i=0; i<pParameters->Get_Count(); i++)
-		{
-			if(	pParameters->Get_Parameter(i)->Get_Parent() == m_pOwner )
-			{
-				switch( pParameters->Get_Parameter(i)->Get_Type() )
-				{
-				default:
-					break;
-
-				case PARAMETER_TYPE_Grid:
-					pGrid	= pParameters->Get_Parameter(i)->asGrid();
-
-					if(	!SG_UI_DataObject_Check(pGrid, DATAOBJECT_TYPE_Grid) || (pGrid != DATAOBJECT_NOTSET && pGrid != DATAOBJECT_CREATE && !m_System.is_Equal(pGrid->Get_System())) )
-					{
-						pParameters->Get_Parameter(i)->Set_Value(DATAOBJECT_NOTSET);
-					}
-					break;
-
-				case PARAMETER_TYPE_Grid_List:
-					pGrids	= (CSG_Parameter_Grid_List *)pParameters->Get_Parameter(i)->Get_Data();
-
-					for(j=pGrids->Get_Count()-1; j>=0; j--)
-					{
-						if( !SG_UI_DataObject_Check(pGrids->asGrid(j), DATAOBJECT_TYPE_Grid) || m_System.is_Equal(pGrids->asGrid(j)->Get_System()) == false )
-						{
-							pGrids->Del_Item(j);
-						}
-					}
-					break;
-				}
-			}
-		}
-
-		//-------------------------------------------------
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Grid_System::asString(void)
-{
-	return( m_System.Get_Name() );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Grid_System::On_Assign(CSG_Parameter_Data *pSource)
-{
-	m_System	= ((CSG_Parameter_Grid_System *)pSource)->m_System;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Grid_System::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( bSave )
-	{
-		Entry.Add_Child(SG_T("CELLSIZE"), m_System.Get_Cellsize());
-		Entry.Add_Child(SG_T("XMIN")    , m_System.Get_Extent().Get_XMin());
-		Entry.Add_Child(SG_T("XMAX")    , m_System.Get_Extent().Get_XMax());
-		Entry.Add_Child(SG_T("YMIN")    , m_System.Get_Extent().Get_YMin());
-		Entry.Add_Child(SG_T("YMAX")    , m_System.Get_Extent().Get_YMax());
-	}
-	else
-	{
-		double		Cellsize;
-		TSG_Rect	Extent;
-
-		Cellsize	= Entry.Get_Child(SG_T("CELLSIZE"))->Get_Content().asDouble();
-		Extent.xMin	= Entry.Get_Child(SG_T("XMIN"))    ->Get_Content().asDouble();
-		Extent.xMax	= Entry.Get_Child(SG_T("XMAX"))    ->Get_Content().asDouble();
-		Extent.yMin	= Entry.Get_Child(SG_T("YMIN"))    ->Get_Content().asDouble();
-		Extent.yMax	= Entry.Get_Child(SG_T("YMAX"))    ->Get_Content().asDouble();
-
-		m_System.Assign(Cellsize, CSG_Rect(Extent));
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//					Table Field							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Table_Field::CSG_Parameter_Table_Field(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Int(pOwner, Constraint)
-{}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Table_Field::asString(void)
-{
-	CSG_Table	*pTable;
-
-	if( (pTable = Get_Table()) != NULL )
-	{
-		if( m_Value >= 0 && m_Value < pTable->Get_Field_Count() )
-		{
-			return( pTable->Get_Field_Name(m_Value) );
-		}
-
-		return( LNG("[VAL] [not set]") );
-	}
-
-	return( LNG("[VAL] [no fields]") );
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Table_Field::Set_Value(int Value)
-{
-	bool		bChanged;
-	CSG_Table	*pTable;
-
-	bChanged	= false;
-
-	if( (pTable = Get_Table()) != NULL )
-	{
-		if( !m_pOwner->is_Optional() )
-		{
-			if( Value < 0 )
-			{
-				Value	= 0;
-			}
-			else if( Value >= pTable->Get_Field_Count() )
-			{
-				Value	= pTable->Get_Field_Count() - 1;
-			}
-		}
-		else if( Value < 0 || Value >= pTable->Get_Field_Count() )
-		{
-			Value	= -1;
-		}
-	}
-	else
-	{
-		Value	= -1;
-	}
-
-	if( m_Value != Value )
-	{
-		m_Value		= Value;
-		bChanged	= true;
-	}
-
-	return( bChanged );
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Table_Field::Set_Value(void *Value)
-{
-	CSG_Table	*pTable;
-
-	if( Value && *((SG_Char *)Value) && (pTable = Get_Table()) != NULL )
-	{
-		CSG_String	s((SG_Char *)Value);
-
-		for(int i=0; i<pTable->Get_Field_Count(); i++)
-		{
-			if( s.CmpNoCase(pTable->Get_Field_Name(i)) == 0 )
-			{
-				m_Value	= i;
-
-				return( true );
-			}
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-CSG_Table * CSG_Parameter_Table_Field::Get_Table(void)
-{
-	CSG_Table		*pTable;
-	CSG_Parameter	*pParent;
-
-	pTable		= NULL;
-
-	if( (pParent = m_pOwner->Get_Parent()) != NULL )
-	{
-		switch( m_pOwner->Get_Parent()->Get_Type() )
-		{
-		default:
-			break;
-
-		case PARAMETER_TYPE_Table:
-		case PARAMETER_TYPE_Shapes:
-		case PARAMETER_TYPE_TIN:
-		case PARAMETER_TYPE_PointCloud:
-			pTable	= pParent->asTable();
-			break;
-		}
-	}
-
-	return( pTable && pTable != DATAOBJECT_CREATE && pTable->Get_Field_Count() > 0 ? pTable : NULL );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						DataObject						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Data_Object::CSG_Parameter_Data_Object(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{
-	m_pDataObject	= NULL;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Data_Object::is_Valid(void)
-{
-	return(	m_pOwner->is_Optional() || (m_pDataObject && m_pDataObject->is_Valid()) );
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Data_Object::Set_Value(void *Value)
-{
-	if( m_pDataObject != Value )
-	{
-		m_pDataObject	= (CSG_Data_Object *)Value;
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Data_Object::asString(void)
-{
-	if( m_pDataObject == DATAOBJECT_NOTSET )
-	{
-		m_String	= m_pOwner->is_Output() && !m_pOwner->is_Optional()
-					? LNG("[VAL] [create]")
-					: LNG("[VAL] [not set]");
-	}
-	else if( m_pDataObject == DATAOBJECT_CREATE )
-	{
-		m_String	= LNG("[VAL] [create]");
-	}
-	else
-	{
-		m_String	= m_pDataObject->Get_Name();
-	}
-
-	return( m_String );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Data_Object::On_Assign(CSG_Parameter_Data *pSource)
-{
-	m_pDataObject	= ((CSG_Parameter_Data_Object *)pSource)->m_pDataObject;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Data_Object::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( bSave )
-	{
-		if(	m_pDataObject == DATAOBJECT_CREATE )
-		{
-			Entry.Set_Content(SG_T("CREATE"));
-		}
-		else if( m_pDataObject == DATAOBJECT_NOTSET || !m_pDataObject->Get_File_Name() )
-		{
-			Entry.Set_Content(SG_T("NOT SET"));
-		}
-		else
-		{
-			Entry.Set_Content(m_pDataObject->Get_File_Name());
-		}
-	}
-	else
-	{
-		if( Entry.Cmp_Content(SG_T("CREATE")) )
-		{
-			Set_Value(DATAOBJECT_CREATE);
-		}
-		else if( Entry.Cmp_Content(SG_T("NOT SET")) )
-		{
-			Set_Value(DATAOBJECT_NOTSET);
-		}
-		else
-		{
-			Set_Value(SG_UI_DataObject_Find(Entry.Get_Content(), -1));
-		}
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//					DataObject_Output					 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Data_Object_Output::CSG_Parameter_Data_Object_Output(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data_Object(pOwner, Constraint)
-{
-	m_Type	= DATAOBJECT_TYPE_Undefined;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Data_Object_Output::Set_Value(void *Value)
-{
-	CSG_Data_Object	*pDataObject	= (CSG_Data_Object *)Value;
-
-	if( pDataObject == DATAOBJECT_CREATE )
-	{
-		pDataObject	= NULL;
-	}
-
-	if( m_pDataObject != pDataObject && (pDataObject == NULL || pDataObject->Get_ObjectType() == m_Type) )
-	{
-		m_pDataObject	= pDataObject;
-
-		SG_UI_DataObject_Add(m_pDataObject, false);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Data_Object_Output::Set_DataObject_Type(TSG_Data_Object_Type Type)
-{
-	if( m_Type == DATAOBJECT_TYPE_Undefined )	// m_Type should not be changed after set once!!!...
-	{
-		switch( Type )
-		{
-		default:
-			break;
-
-		case DATAOBJECT_TYPE_Grid:
-		case DATAOBJECT_TYPE_Table:
-		case DATAOBJECT_TYPE_Shapes:
-		case DATAOBJECT_TYPE_TIN:
-		case DATAOBJECT_TYPE_PointCloud:
-			m_Type	= Type;
-			return( true );
-		}
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Grid							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Grid::CSG_Parameter_Grid(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data_Object(pOwner, Constraint)
-{
-	m_Type	= SG_DATATYPE_Undefined;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Grid::Set_Value(void *Value)
-{
-	CSG_Grid_System	*pSystem;
-
-	if( Value == DATAOBJECT_CREATE && !m_pOwner->is_Optional() )
-	{
-//		Value	= DATAOBJECT_NOTSET;
-	}
-
-	if( m_pDataObject != Value )
-	{
-		pSystem	= Get_System();
-
-		if(	Value == DATAOBJECT_NOTSET || Value == DATAOBJECT_CREATE
-		||	pSystem == NULL || pSystem->is_Equal(((CSG_Grid *)Value)->Get_System()) )
-		{
-			m_pDataObject	= (CSG_Data_Object *)Value;
-
-			return( true );
-		}
-		else if( !m_pOwner->Get_Owner()->is_Managed() && pSystem != NULL )
-		{
-			pSystem->Assign(((CSG_Grid *)Value)->Get_System());
-			m_pDataObject	= (CSG_Data_Object *)Value;
-
-			return( true );
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-CSG_Grid_System * CSG_Parameter_Grid::Get_System(void)
-{
-	if( m_pOwner->Get_Parent() && m_pOwner->Get_Parent()->Get_Type() == PARAMETER_TYPE_Grid_System )
-	{
-		return( m_pOwner->Get_Parent()->asGrid_System() );
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Grid::Set_Preferred_Type(TSG_Data_Type Type)
-{
-	m_Type	= Type;
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Grid::On_Assign(CSG_Parameter_Data *pSource)
-{
-	CSG_Parameter_Data_Object::On_Assign(pSource);
-
-	m_Type	= ((CSG_Parameter_Grid *)pSource)->m_Type;
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Table							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Table::CSG_Parameter_Table(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data_Object(pOwner, Constraint)
-{}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Table::Set_Value(void *Value)
-{
-	if( m_pDataObject != Value )
-	{
-		m_pDataObject	= (CSG_Data_Object *)Value;
-
-		CSG_Parameters	*pParameters	= m_pOwner->Get_Owner();
-
-		for(int i=0; i<pParameters->Get_Count(); i++)
-		{
-			if(	pParameters->Get_Parameter(i)->Get_Parent() == m_pOwner
-			&&	pParameters->Get_Parameter(i)->Get_Type()   == PARAMETER_TYPE_Table_Field )
-			{
-				pParameters->Get_Parameter(i)->Set_Value(0);
-			}				
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Shapes							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Shapes::CSG_Parameter_Shapes(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data_Object(pOwner, Constraint)
-{
-	m_Type	= SHAPE_TYPE_Undefined;
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Shapes::Set_Value(void *Value)
-{
-	if(	Value != DATAOBJECT_NOTSET && Value != DATAOBJECT_CREATE
-	&&	m_Type != SHAPE_TYPE_Undefined && m_Type != ((CSG_Shapes *)Value)->Get_Type() )
-	{
-		return( false );
-	}
-
-	if( m_pDataObject != Value )
-	{
-		m_pDataObject	= (CSG_Data_Object *)Value;
-
-		CSG_Parameters	*pParameters	= m_pOwner->Get_Owner();
-
-		for(int i=0; i<pParameters->Get_Count(); i++)
-		{
-			if(	pParameters->Get_Parameter(i)->Get_Parent() == m_pOwner
-			&&	pParameters->Get_Parameter(i)->Get_Type()   == PARAMETER_TYPE_Table_Field )
-			{
-				pParameters->Get_Parameter(i)->Set_Value(0);
-			}				
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Shapes::Set_Shape_Type(TSG_Shape_Type Type)
-{
-	m_Type	= Type;
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Shapes::On_Assign(CSG_Parameter_Data *pSource)
-{
-	CSG_Parameter_Data_Object::On_Assign(pSource);
-
-	m_Type	= ((CSG_Parameter_Shapes *)pSource)->m_Type;
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						TIN								 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_TIN::CSG_Parameter_TIN(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data_Object(pOwner, Constraint)
-{}
-
-//---------------------------------------------------------
-bool CSG_Parameter_TIN::Set_Value(void *Value)
-{
-	if( m_pDataObject != Value )
-	{
-		m_pDataObject	= (CSG_Data_Object *)Value;
-
-		CSG_Parameters	*pParameters	= m_pOwner->Get_Owner();
-
-		for(int i=0; i<pParameters->Get_Count(); i++)
-		{
-			if(	pParameters->Get_Parameter(i)->Get_Parent() == m_pOwner
-			&&	pParameters->Get_Parameter(i)->Get_Type()   == PARAMETER_TYPE_Table_Field )
-			{
-				pParameters->Get_Parameter(i)->Set_Value(0);
-			}				
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						PointCloud						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_PointCloud::CSG_Parameter_PointCloud(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data_Object(pOwner, Constraint)
-{}
-
-//---------------------------------------------------------
-void CSG_Parameter_PointCloud::On_Assign(CSG_Parameter_Data *pSource)
-{
-	CSG_Parameter_Data_Object::On_Assign(pSource);
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_PointCloud::Set_Value(void *Value)
-{
-	if( m_pDataObject != Value )
-	{
-		m_pDataObject	= (CSG_Data_Object *)Value;
-
-		CSG_Parameters	*pParameters	= m_pOwner->Get_Owner();
-
-		for(int i=0; i<pParameters->Get_Count(); i++)
-		{
-			if(	pParameters->Get_Parameter(i)->Get_Parent() == m_pOwner
-			&&	pParameters->Get_Parameter(i)->Get_Type()   == PARAMETER_TYPE_Table_Field )
-			{
-				pParameters->Get_Parameter(i)->Set_Value(0);
-			}				
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						List							 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_List::CSG_Parameter_List(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{
-	m_Objects	= NULL;
-	m_nObjects	= 0;
-}
-
-CSG_Parameter_List::~CSG_Parameter_List(void)
-{
-	Del_Items();
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_List::asString(void)
-{
-	if( Get_Count() > 0 )
-	{
-		m_String.Printf(SG_T("%d %s ("), Get_Count(), Get_Count() == 1 ? LNG("[VAL] object") : LNG("[VAL] objects"));
-
-		for(int i=0; i<Get_Count(); i++)
-		{
-			if( i > 0 )
-			{
-				m_String.Append(SG_T(", "));
-			}
-
-			m_String.Append(asDataObject(i)->Get_Name());
-		}
-
-		m_String.Append(SG_T("))"));
-	}
-	else
-	{
-		m_String.Printf(LNG("[VAL] No objects"));
-	}
-
-	return( m_String );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_List::Add_Item(CSG_Data_Object *pObject)
-{
-	if( pObject )
-	{
-		m_Objects	= (CSG_Data_Object **)SG_Realloc(m_Objects, (m_nObjects + 1) * sizeof(CSG_Data_Object *));
-		m_Objects[m_nObjects++]	= pObject;
-	}
-}
-
-//---------------------------------------------------------
-int CSG_Parameter_List::Del_Item(int iObject)
-{
-	int		i;
-
-	if( iObject >= 0 && iObject < m_nObjects )
-	{
-		m_nObjects--;
-
-		for(i=iObject; i<m_nObjects; i++)
-		{
-			m_Objects[i]	= m_Objects[i + 1];
-		}
-
-		m_Objects	= (CSG_Data_Object **)SG_Realloc(m_Objects, m_nObjects * sizeof(CSG_Data_Object *));
-	}
-
-	return( m_nObjects );
-}
-
-int CSG_Parameter_List::Del_Item(CSG_Data_Object *pObject)
-{
-	int		i;
-
-	for(i=0; i<m_nObjects; i++)
-	{
-		if( pObject == m_Objects[i] )
-		{
-			return( Del_Item(i) );
-		}
-	}
-
-	return( 0 );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_List::Del_Items(void)
-{
-	if( m_nObjects > 0 )
-	{
-		SG_Free(m_Objects);
-		m_Objects	= NULL;
-		m_nObjects	= 0;
-	}
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_List::On_Assign(CSG_Parameter_Data *pSource)
-{
-	Del_Items();
-
-	for(int i=0; i<((CSG_Parameter_List *)pSource)->Get_Count(); i++)
-	{
-		Add_Item(((CSG_Parameter_List *)pSource)->asDataObject(i));
-	}
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_List::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( bSave )
-	{
-		for(int i=0; i<Get_Count(); i++)
-		{
-			if( asDataObject(i)->Get_File_Name() )
-			{
-				Entry.Add_Child(SG_T("DATA"), asDataObject(i)->Get_File_Name());
-			}
-		}
-	}
-	else
-	{
-		for(int i=0; i<Entry.Get_Children_Count(); i++)
-		{
-			CSG_Data_Object	*pObject	= SG_UI_DataObject_Find(Entry.Get_Child(i)->Get_Content(), -1);
-
-			if( pObject )
-			{
-				Add_Item(pObject);
-			}
-		}
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Grid_List						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-
-//---------------------------------------------------------
-CSG_Parameter_Grid_List::CSG_Parameter_Grid_List(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_List(pOwner, Constraint)
-{}
-
-//---------------------------------------------------------
-CSG_Grid_System * CSG_Parameter_Grid_List::Get_System(void)
-{
-	if( m_pOwner->Get_Parent() && m_pOwner->Get_Parent()->Get_Type() == PARAMETER_TYPE_Grid_System )
-	{
-		return( m_pOwner->Get_Parent()->asGrid_System() );
-	}
-
-	return( NULL );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Table_List						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-
-//---------------------------------------------------------
-CSG_Parameter_Table_List::CSG_Parameter_Table_List(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_List(pOwner, Constraint)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Shapes_List						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-
-//---------------------------------------------------------
-CSG_Parameter_Shapes_List::CSG_Parameter_Shapes_List(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_List(pOwner, Constraint)
-{
-	m_Type	= SHAPE_TYPE_Undefined;
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Shapes_List::Set_Shape_Type(TSG_Shape_Type Type)
-{
-	m_Type	= Type;
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Shapes_List::On_Assign(CSG_Parameter_Data *pSource)
-{
-	CSG_Parameter_List::On_Assign(pSource);
-
-	m_Type	= ((CSG_Parameter_Shapes_List *)pSource)->m_Type;
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						TIN_List						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-
-//---------------------------------------------------------
-CSG_Parameter_TIN_List::CSG_Parameter_TIN_List(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_List(pOwner, Constraint)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//					PointCloud_List						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-
-//---------------------------------------------------------
-CSG_Parameter_PointCloud_List::CSG_Parameter_PointCloud_List(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_List(pOwner, Constraint)
-{}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//						Parameters						 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter_Parameters::CSG_Parameter_Parameters(CSG_Parameter *pOwner, long Constraint)
-	: CSG_Parameter_Data(pOwner, Constraint)
-{
-	m_pParameters	= new CSG_Parameters(pOwner->Get_Owner()->Get_Owner(), pOwner->Get_Name(), pOwner->Get_Description(), pOwner->Get_Identifier());
-}
-
-CSG_Parameter_Parameters::~CSG_Parameter_Parameters(void)
-{
-	delete(m_pParameters);
-}
-
-//---------------------------------------------------------
-const SG_Char * CSG_Parameter_Parameters::asString(void)
-{
-	m_String.Printf(SG_T("%d %s"), m_pParameters->Get_Count(), LNG("parameters"));
-
-	return( m_String );
-}
-
-//---------------------------------------------------------
-void CSG_Parameter_Parameters::On_Assign(CSG_Parameter_Data *pSource)
-{
-	m_pParameters->Assign(((CSG_Parameter_Parameters *)pSource)->m_pParameters);
-}
-
-//---------------------------------------------------------
-bool CSG_Parameter_Parameters::On_Serialize(CSG_MetaData &Entry, bool bSave)
-{
-	if( m_pParameters->Serialize(Entry, bSave) )
-	{
-		if( bSave )
-		{
-			Entry.Set_Property(SG_T("id")  , m_pOwner->Get_Identifier());
-			Entry.Set_Property(SG_T("type"), m_pOwner->Get_Type_Identifier());
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//           Application Programming Interface           //
+//                                                       //
+//                  Library: SAGA_API                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                  parameter_data.cpp                   //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <string.h>
+
+#include "parameters.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define SG_MD_PARM_DATAOBJECT_CREATE		SG_T("CREATE")
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+const SG_Char * SG_Parameter_Type_Get_Identifier(TSG_Parameter_Type Type)
+{
+	switch( Type )
+	{
+	default:								return( SG_T("parameter") );
+
+	case PARAMETER_TYPE_Node:				return( SG_T("node") );
+
+	case PARAMETER_TYPE_Bool:				return( SG_T("boolean") );
+	case PARAMETER_TYPE_Int:				return( SG_T("integer") );
+	case PARAMETER_TYPE_Double:				return( SG_T("double") );
+	case PARAMETER_TYPE_Degree:				return( SG_T("degree") );
+	case PARAMETER_TYPE_Range:				return( SG_T("range") );
+	case PARAMETER_TYPE_Choice:				return( SG_T("choice") );
+
+	case PARAMETER_TYPE_String:				return( SG_T("text") );
+	case PARAMETER_TYPE_Text:				return( SG_T("long_text") );
+	case PARAMETER_TYPE_FilePath:			return( SG_T("file") );
+
+	case PARAMETER_TYPE_Font:				return( SG_T("font") );
+	case PARAMETER_TYPE_Color:				return( SG_T("color") );
+	case PARAMETER_TYPE_Colors:				return( SG_T("colors") );
+	case PARAMETER_TYPE_FixedTable:			return( SG_T("static_table") );
+	case PARAMETER_TYPE_Grid_System:		return( SG_T("grid_system") );
+	case PARAMETER_TYPE_Table_Field:		return( SG_T("table_field") );
+
+	case PARAMETER_TYPE_DataObject_Output:	return( SG_T("data_object") );
+	case PARAMETER_TYPE_Grid:				return( SG_T("grid") );
+	case PARAMETER_TYPE_Table:				return( SG_T("table") );
+	case PARAMETER_TYPE_Shapes:				return( SG_T("shapes") );
+	case PARAMETER_TYPE_TIN:				return( SG_T("tin") );
+	case PARAMETER_TYPE_PointCloud:			return( SG_T("points") );
+
+	case PARAMETER_TYPE_Grid_List:			return( SG_T("grid_list") );
+	case PARAMETER_TYPE_Table_List:			return( SG_T("table_list") );
+	case PARAMETER_TYPE_Shapes_List:		return( SG_T("shapes_list") );
+	case PARAMETER_TYPE_TIN_List:			return( SG_T("tin_list") );
+	case PARAMETER_TYPE_PointCloud_List:	return( SG_T("points_list") );
+
+	case PARAMETER_TYPE_Parameters:			return( SG_T("parameters") );
+	}
+}
+
+//---------------------------------------------------------
+const SG_Char * SG_Parameter_Type_Get_Name(TSG_Parameter_Type Type)
+{
+	switch( Type )
+	{
+	default:								return( LNG("[PRM] Parameter") );
+
+	case PARAMETER_TYPE_Node:				return( LNG("[PRM] Node") );
+
+	case PARAMETER_TYPE_Bool:				return( LNG("[PRM] Boolean") );
+	case PARAMETER_TYPE_Int:				return( LNG("[PRM] Integer") );
+	case PARAMETER_TYPE_Double:				return( LNG("[PRM] Floating point") );
+	case PARAMETER_TYPE_Degree:				return( LNG("[PRM] Degree") );
+	case PARAMETER_TYPE_Range:				return( LNG("[PRM] Value range") );
+	case PARAMETER_TYPE_Choice:				return( LNG("[PRM] Choice") );
+
+	case PARAMETER_TYPE_String:				return( LNG("[PRM] Text") );
+	case PARAMETER_TYPE_Text:				return( LNG("[PRM] Long text") );
+	case PARAMETER_TYPE_FilePath:			return( LNG("[PRM] File path") );
+
+	case PARAMETER_TYPE_Font:				return( LNG("[PRM] Font") );
+	case PARAMETER_TYPE_Color:				return( LNG("[PRM] Color") );
+	case PARAMETER_TYPE_Colors:				return( LNG("[PRM] Colors") );
+	case PARAMETER_TYPE_FixedTable:			return( LNG("[PRM] Static table") );
+	case PARAMETER_TYPE_Grid_System:		return( LNG("[PRM] Grid system") );
+	case PARAMETER_TYPE_Table_Field:		return( LNG("[PRM] Table field") );
+
+	case PARAMETER_TYPE_DataObject_Output:	return( LNG("[PRM] Data Object") );
+	case PARAMETER_TYPE_Grid:				return( LNG("[PRM] Grid") );
+	case PARAMETER_TYPE_Table:				return( LNG("[PRM] Table") );
+	case PARAMETER_TYPE_Shapes:				return( LNG("[PRM] Shapes") );
+	case PARAMETER_TYPE_TIN:				return( LNG("[PRM] TIN") );
+	case PARAMETER_TYPE_PointCloud:			return( LNG("[PRM] Point Cloud") );
+
+	case PARAMETER_TYPE_Grid_List:			return( LNG("[PRM] Grid list") );
+	case PARAMETER_TYPE_Table_List:			return( LNG("[PRM] Table list") );
+	case PARAMETER_TYPE_Shapes_List:		return( LNG("[PRM] Shapes list") );
+	case PARAMETER_TYPE_TIN_List:			return( LNG("[PRM] TIN list") );
+	case PARAMETER_TYPE_PointCloud_List:	return( LNG("[PRM] Point Cloud list") );
+
+	case PARAMETER_TYPE_Parameters:			return( LNG("[PRM] Parameters") );
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Base Class						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Data::CSG_Parameter_Data(CSG_Parameter *pOwner, long Constraint)
+{
+	m_pOwner		= pOwner;
+	m_Constraint	= Constraint;
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Data::Get_Type_Identifier(void)
+{
+	return( SG_Parameter_Type_Get_Identifier(Get_Type()) );
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Data::Get_Type_Name(void)
+{
+	return( SG_Parameter_Type_Get_Name(Get_Type()) );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Data::Set_Value(int Value)
+{
+	return( false );
+}
+
+bool CSG_Parameter_Data::Set_Value(double Value)
+{
+	return( false );
+}
+
+bool CSG_Parameter_Data::Set_Value(void *Value)
+{
+	return( false );
+}
+
+//---------------------------------------------------------
+int CSG_Parameter_Data::asInt(void)
+{
+	return( 0 );
+}
+
+double CSG_Parameter_Data::asDouble(void)
+{
+	return( 0.0 );
+}
+
+void * CSG_Parameter_Data::asPointer(void)
+{
+	return( NULL );
+}
+
+const SG_Char * CSG_Parameter_Data::asString(void)
+{
+	return( NULL );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Data::Set_Default(int            Value)
+{
+	m_Default.Printf(SG_T("%d"), Value);
+}
+
+void CSG_Parameter_Data::Set_Default(double         Value)
+{
+	m_Default.Printf(SG_T("%f"), Value);
+}
+
+void CSG_Parameter_Data::Set_Default(const SG_Char *Value)
+{
+	if( Value )
+	{
+		m_Default	= Value;
+	}
+	else
+	{
+		m_Default.Clear();
+	}
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Data::Assign(CSG_Parameter_Data *pSource)
+{
+	if( pSource && Get_Type() == pSource->Get_Type() )
+	{
+		On_Assign(pSource);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+void CSG_Parameter_Data::On_Assign(CSG_Parameter_Data *pSource)
+{}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Data::Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	return( On_Serialize(Entry, bSave) );
+}
+
+bool CSG_Parameter_Data::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	Entry.Set_Content(SG_T("-"));
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Node							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Node::CSG_Parameter_Node(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Bool							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Bool::CSG_Parameter_Bool(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{
+	m_Value		= false;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Bool::Set_Value(int Value)
+{
+	bool	bValue = Value != 0 ? true : false;
+
+	if( m_Value != bValue )
+	{
+		m_Value		= bValue;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+bool CSG_Parameter_Bool::Set_Value(double Value)
+{
+	return( Set_Value((int)Value) );
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Bool::asString(void)
+{
+	return( m_Value ? LNG("[VAL] yes") : LNG("[VAL] no") );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Bool::On_Assign(CSG_Parameter_Data *pSource)
+{
+	m_Value		= ((CSG_Parameter_Bool *)pSource)->m_Value;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Bool::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( bSave )
+	{
+		Entry.Set_Content(m_Value ? SG_T("TRUE") : SG_T("FALSE"));
+	}
+	else
+	{
+		m_Value	= Entry.Cmp_Content(SG_T("TRUE"), true);
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Value							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Value::CSG_Parameter_Value(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{
+	m_Minimum	= 0.0;
+	m_bMinimum	= false;
+
+	m_Maximum	= 0.0;
+	m_bMaximum	= false;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Value::Set_Range(double Minimum, double Maximum)
+{
+	if( 1 )
+	{
+		m_Minimum		= Minimum;
+		m_Maximum		= Maximum;
+
+		switch( Get_Type() )
+		{
+		default:
+			return( false );
+
+		case PARAMETER_TYPE_Int:
+			Set_Value(asInt());
+			break;
+
+		case PARAMETER_TYPE_Double:
+		case PARAMETER_TYPE_Degree:
+			Set_Value(asDouble());
+			break;
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Value::Set_Minimum(double Minimum, bool bOn)
+{
+	if( bOn == false || (m_bMaximum && Minimum >= m_Maximum) )
+	{
+		m_bMinimum	= false;
+	}
+	else
+	{
+		m_bMinimum	= true;
+
+		Set_Range(Minimum, m_Maximum);
+	}
+}
+
+void CSG_Parameter_Value::Set_Maximum(double Maximum, bool bOn)
+{
+	if( bOn == false || (m_bMaximum && Maximum <= m_Minimum) )
+	{
+		m_bMaximum	= false;
+	}
+	else
+	{
+		m_bMaximum	= true;
+
+		Set_Range(m_Minimum, Maximum);
+	}
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Value::On_Assign(CSG_Parameter_Data *pSource)
+{
+	m_Minimum	= ((CSG_Parameter_Value *)pSource)->m_Minimum;
+	m_bMinimum	= ((CSG_Parameter_Value *)pSource)->m_bMinimum;
+
+	m_Maximum	= ((CSG_Parameter_Value *)pSource)->m_Maximum;
+	m_bMaximum	= ((CSG_Parameter_Value *)pSource)->m_bMaximum;
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Int								 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Int::CSG_Parameter_Int(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Value(pOwner, Constraint)
+{
+	m_Value		= 0;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Int::Set_Value(int Value)
+{
+	if( m_bMinimum && Value < m_Minimum )
+	{
+		return( Set_Value((int)m_Minimum) );
+	}
+
+	if( m_bMaximum && Value > m_Maximum )
+	{
+		return( Set_Value((int)m_Maximum) );
+	}
+
+	if( m_Value != Value )
+	{
+		m_Value	= Value;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+bool CSG_Parameter_Int::Set_Value(double Value)
+{
+	return( Set_Value((int)Value) );
+}
+
+bool CSG_Parameter_Int::Set_Value(void *Value)
+{
+	int		i;
+
+	if( Value && CSG_String((SG_Char *)Value).asInt(i) )
+	{
+		return( Set_Value(i) );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Int::asString(void)
+{
+	m_String.Printf(SG_T("%d"), m_Value);
+
+	return( m_String );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Int::On_Assign(CSG_Parameter_Data *pSource)
+{
+	CSG_Parameter_Value::On_Assign(pSource);
+
+	Set_Value(((CSG_Parameter_Value *)pSource)->asInt());
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Int::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( bSave )
+	{
+		Entry.Set_Content(CSG_String::Format(SG_T("%d"), m_Value));
+	}
+	else
+	{
+		return( Entry.Get_Content().asInt(m_Value) );
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Double							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Double::CSG_Parameter_Double(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Value(pOwner, Constraint)
+{
+	m_Value		= 0.0;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Double::Set_Value(int Value)
+{
+	return( Set_Value((double)Value) );
+}
+
+bool CSG_Parameter_Double::Set_Value(double Value)
+{
+	if( m_bMinimum && Value < m_Minimum )
+	{
+		return( Set_Value(m_Minimum) );
+	}
+
+	if( m_bMaximum && Value > m_Maximum )
+	{
+		return( Set_Value(m_Maximum) );
+	}
+
+	if( m_Value != Value )
+	{
+		m_Value	= Value;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+bool CSG_Parameter_Double::Set_Value(void *Value)
+{
+	double	d;
+
+	if( Value && CSG_String((SG_Char *)Value).asDouble(d) )
+	{
+		return( Set_Value(d) );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Double::asString(void)
+{
+	m_String.Printf(SG_T("%f"), m_Value);
+
+	return( m_String );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Double::On_Assign(CSG_Parameter_Data *pSource)
+{
+	CSG_Parameter_Value::On_Assign(pSource);
+
+	Set_Value(((CSG_Parameter_Value *)pSource)->asDouble());
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Double::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( bSave )
+	{
+		Entry.Set_Content(CSG_String::Format(SG_T("%f"), m_Value));
+	}
+	else
+	{
+		return( Entry.Get_Content().asDouble(m_Value) );
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Degree							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Degree::CSG_Parameter_Degree(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Double(pOwner, Constraint)
+{}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Degree::Set_Value(void *Value)
+{
+	return( CSG_Parameter_Double::Set_Value(SG_Degree_To_Double((const SG_Char *)Value)) );
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Degree::asString(void)
+{
+	m_String	= SG_Double_To_Degree(asDouble());
+
+	return( m_String );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Range							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Range::CSG_Parameter_Range(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{
+	pRange	= new CSG_Parameters;
+
+	if( (m_Constraint & PARAMETER_INFORMATION) != 0 )
+	{
+		pLo		= pRange->Add_Info_Value(m_pOwner, SG_T("MIN"), SG_T("Minimum"), m_pOwner->Get_Description(), PARAMETER_TYPE_Double);
+		pHi		= pRange->Add_Info_Value(m_pOwner, SG_T("MAX"), SG_T("Maximum"), m_pOwner->Get_Description(), PARAMETER_TYPE_Double);
+	}
+	else
+	{
+		pLo		= pRange->Add_Value		(m_pOwner, SG_T("MIN"), SG_T("Minimum"), m_pOwner->Get_Description(), PARAMETER_TYPE_Double);
+		pHi		= pRange->Add_Value		(m_pOwner, SG_T("MAX"), SG_T("Maximum"), m_pOwner->Get_Description(), PARAMETER_TYPE_Double);
+	}
+}
+
+CSG_Parameter_Range::~CSG_Parameter_Range(void)
+{
+	delete(pRange);
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Range::asString(void)
+{
+	m_String.Printf(SG_T("[%f] - [%f]"),
+		Get_LoParm()->asDouble(),
+		Get_HiParm()->asDouble()
+	);
+
+	return( m_String );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Range::Set_Range(double loVal, double hiVal)
+{
+	bool	bResult;
+
+	if( loVal > hiVal )
+	{
+		bResult	 = pLo->Set_Value(hiVal);
+		bResult	|= pHi->Set_Value(loVal);
+	}
+	else
+	{
+		bResult	 = pLo->Set_Value(loVal);
+		bResult	|= pHi->Set_Value(hiVal);
+	}
+
+	return( bResult );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Range::Set_LoVal(double newValue)
+{
+	return( pLo->Set_Value(newValue) );
+}
+
+double CSG_Parameter_Range::Get_LoVal(void)
+{
+	return( pLo->asDouble() );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Range::Set_HiVal(double newValue)
+{
+	return( pHi->Set_Value(newValue) );
+}
+
+double CSG_Parameter_Range::Get_HiVal(void)
+{
+	return( pHi->asDouble() );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Range::On_Assign(CSG_Parameter_Data *pSource)
+{
+	pLo->Assign(((CSG_Parameter_Range *)pSource)->pLo);
+	pHi->Assign(((CSG_Parameter_Range *)pSource)->pHi);
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Range::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( bSave )
+	{
+		Entry.Set_Content(CSG_String::Format(SG_T("%f; %f"), Get_LoVal(), Get_HiVal()));
+
+		return( true );
+	}
+	else
+	{
+		double		loVal, hiVal;
+		CSG_String	s(Entry.Get_Content());
+
+		if( s.BeforeFirst(SG_T(';')).asDouble(loVal) && s.AfterFirst(SG_T(';')).asDouble(hiVal) )
+		{
+			return( Set_Range(loVal, hiVal) );
+		}
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Choice							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Choice::CSG_Parameter_Choice(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Int(pOwner, Constraint)
+{}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Choice::Set_Value(void *Value)
+{
+	if( Value && *((SG_Char *)Value) )
+	{
+		for(int i=0; i<Items.Get_Count(); i++)
+		{
+			if( Items[i].Cmp((SG_Char *)Value) == 0 )
+			{
+				m_Value	= i;
+
+				return( true );
+			}
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Choice::asString(void)
+{
+	const SG_Char	*String	= Get_Item(m_Value);
+
+	return( String ? String : LNG("[VAL] [no choice available]") );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Choice::Set_Items(const SG_Char *String)
+{
+	Items.Clear();
+
+	const SG_Char	*s	= String;
+
+	while( s && *s != 0 )
+	{
+		CSG_String	Item	= CSG_String(s).BeforeFirst('|');
+
+		Items	+= Item;
+		s		+= Item.Length() + 1;
+	}
+
+	if( Items.Get_Count() <= 0 )
+	{
+		Items	+= LNG("[VAL] [not set]");
+	}
+
+	Set_Minimum(              0, true);
+	Set_Maximum(Get_Count() - 1, true);
+
+	CSG_Parameter_Int::Set_Value(m_Value);
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Choice::Get_Item(int Index)
+{
+	if( Index >= 0 && Index < Items.Get_Count() )
+	{
+		const SG_Char	*Item	= Items[Index].c_str();
+
+		if( *Item == SG_T('{') )
+		{
+			do	{	Item++;	}	while( *Item != SG_T('\0') && *Item != SG_T('}') );
+
+			if( *Item == SG_T('\0') )
+			{
+				return( Items[Index].c_str() );
+			}
+
+			Item++;
+		}
+
+		return( Item );
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Choice::Get_Data(int        &Value)
+{
+	CSG_String	sValue;
+
+	if( Get_Data(sValue) )
+	{
+		return( sValue.asInt(Value) );
+	}
+
+	return( false );
+}
+
+bool CSG_Parameter_Choice::Get_Data(double     &Value)
+{
+	CSG_String	sValue;
+
+	if( Get_Data(sValue) )
+	{
+		return( sValue.asDouble(Value) );
+	}
+
+	return( false );
+}
+
+bool CSG_Parameter_Choice::Get_Data(CSG_String &Value)
+{
+	if( m_Value >= 0 && m_Value < Items.Get_Count() )
+	{
+		const SG_Char	*Item	= Items[m_Value].c_str();
+
+		if( *Item == SG_T('{') )
+		{
+			Item++;
+
+			Value.Clear();
+
+			do
+			{
+				Value	+= *(Item++);
+			}
+			while( *Item && *Item != SG_T('}') );
+
+			return( Value.Length() > 0 );
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Choice::On_Assign(CSG_Parameter_Data *pSource)
+{
+	Items	= ((CSG_Parameter_Choice *)pSource)->Items;
+
+	CSG_Parameter_Int::On_Assign(pSource);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						String							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_String::CSG_Parameter_String(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{
+	bPassword	= false;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_String::is_Valid(void)
+{
+	return( m_String.Length() > 0 );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_String::is_Password(void)
+{
+	return( bPassword );
+}
+
+void CSG_Parameter_String::Set_Password(bool bOn)
+{
+	bPassword	= bOn;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_String::Set_Value(void *Value)
+{
+	if( Value )
+	{
+		if( m_String.Cmp((SG_Char *)Value) )
+		{
+			m_String	= (SG_Char *)Value;
+
+			return( true );
+		}
+	}
+	else if( m_String.Length() > 0 )
+	{
+		m_String.Clear();
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_String::asString(void)
+{
+	return( m_String );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_String::On_Assign(CSG_Parameter_Data *pSource)
+{
+	m_String	= ((CSG_Parameter_String *)pSource)->m_String.c_str();
+
+	bPassword	= ((CSG_Parameter_String *)pSource)->bPassword;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_String::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( bSave )
+	{
+		Entry.Set_Content(m_String);
+	}
+	else
+	{
+		m_String	= Entry.Get_Content();
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Text							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Text::CSG_Parameter_Text(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_String(pOwner, Constraint)
+{}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						FilePath						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_File_Name::CSG_Parameter_File_Name(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_String(pOwner, Constraint)
+{
+	m_Filter.Printf(SG_T("%s|*.*"), LNG("All Files"));
+
+	m_bSave			= false;
+	m_bMultiple		= false;
+	m_bDirectory	= false;
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_File_Name::Set_Filter(const SG_Char *Filter)
+{
+	if( Filter )
+	{
+		m_Filter	= Filter;
+	}
+	else
+	{
+		m_Filter.Printf(SG_T("%s|*.*"), LNG("All Files"));
+	}
+}
+
+const SG_Char *  CSG_Parameter_File_Name::Get_Filter(void)
+{
+	return( m_Filter.c_str() );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_File_Name::Set_Flag_Save(bool bFlag)
+{
+	m_bSave			= bFlag;
+}
+
+void CSG_Parameter_File_Name::Set_Flag_Multiple(bool bFlag)
+{
+	m_bMultiple		= bFlag;
+}
+
+void CSG_Parameter_File_Name::Set_Flag_Directory(bool bFlag)
+{
+	m_bDirectory	= bFlag;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_File_Name::Get_FilePaths(CSG_Strings &FilePaths)
+{
+	FilePaths.Clear();
+
+	if( m_String.Length() > 0 )
+	{
+		if( !m_bMultiple )
+		{
+			FilePaths.Add(m_String);
+		}
+		else if( m_String[0] != '\"' )
+		{
+			FilePaths.Add(m_String);
+		}
+		else
+		{
+			CSG_String	s(m_String), sTmp;
+
+			while( s.Length() > 2 )
+			{
+				s	= s.AfterFirst('\"');
+				FilePaths.Add(s.BeforeFirst('\"'));
+				s	= s.AfterFirst('\"');
+			}
+		}
+	}
+
+	return( FilePaths.Get_Count() > 0 );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_File_Name::On_Assign(CSG_Parameter_Data *pSource)
+{
+	CSG_Parameter_String::On_Assign(pSource);
+
+	Set_Filter(((CSG_Parameter_File_Name *)pSource)->m_Filter.c_str());
+
+	m_bSave			= ((CSG_Parameter_File_Name *)pSource)->m_bSave;
+	m_bMultiple		= ((CSG_Parameter_File_Name *)pSource)->m_bMultiple;
+	m_bDirectory	= ((CSG_Parameter_File_Name *)pSource)->m_bDirectory;
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Font							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <wx/font.h>
+
+//---------------------------------------------------------
+CSG_Parameter_Font::CSG_Parameter_Font(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{
+	m_pFont		= new wxFont(10, wxSWISS, wxNORMAL, wxNORMAL);
+	m_Color		= SG_GET_RGB(0, 0, 0);
+}
+
+CSG_Parameter_Font::~CSG_Parameter_Font(void)
+{
+	delete(m_pFont);
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Font::Set_Value(int Value)
+{
+	if( m_Color != Value )
+	{
+		m_Color		= Value;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+bool CSG_Parameter_Font::Set_Value(void *Value)
+{
+	if( Value )
+	{
+		*m_pFont	= *((class wxFont *)Value);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Font::asString(void)
+{
+	m_String.Printf(SG_T("%s, %dpt"), m_pFont->GetFaceName().c_str(), m_pFont->GetPointSize());
+
+	return( m_String );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Font::On_Assign(CSG_Parameter_Data *pSource)
+{
+	Set_Value(pSource->asPointer());
+	Set_Value(pSource->asInt());
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Font::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( bSave )
+	{
+		Entry.Add_Child(SG_T("COLOR")		, CSG_String::Format(SG_T("R%03d G%03d B%03d"), SG_GET_R(m_Color), SG_GET_G(m_Color), SG_GET_B(m_Color)));
+		Entry.Add_Child(SG_T("POINTSIZE")	, CSG_String::Format(SG_T("%d"), m_pFont->GetPointSize()));
+		Entry.Add_Child(SG_T("FACENAME")	, m_pFont->GetFaceName().c_str());
+		Entry.Add_Child(SG_T("UNDERLINED")	, m_pFont->GetUnderlined() ? SG_T("TRUE") : SG_T("FALSE"));
+
+		switch( m_pFont->GetFamily() )
+		{
+		default:
+		case wxFONTFAMILY_DEFAULT:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("DEFAULT"));		break;
+		case wxFONTFAMILY_DECORATIVE:	Entry.Add_Child(SG_T("FAMILY")	, SG_T("DECORATIVE"));	break;
+		case wxFONTFAMILY_ROMAN:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("ROMAN"));		break;
+		case wxFONTFAMILY_SCRIPT:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("SCRIPT"));		break;
+		case wxFONTFAMILY_SWISS:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("SWISS"));		break;
+		case wxFONTFAMILY_MODERN:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("MODERN"));		break;
+		case wxFONTFAMILY_TELETYPE:		Entry.Add_Child(SG_T("FAMILY")	, SG_T("TELETYPE"));	break;
+		}
+
+		switch( m_pFont->GetStyle() )
+		{
+		default:
+		case wxFONTSTYLE_NORMAL:		Entry.Add_Child(SG_T("STYLE")	, SG_T("NORMAL"));		break;
+		case wxFONTSTYLE_SLANT:			Entry.Add_Child(SG_T("STYLE")	, SG_T("SLANT"));		break;
+		case wxFONTSTYLE_ITALIC:		Entry.Add_Child(SG_T("STYLE")	, SG_T("ITALIC"));		break;
+		}
+
+		switch( m_pFont->GetStyle() )
+		{
+		default:
+		case wxFONTWEIGHT_NORMAL:		Entry.Add_Child(SG_T("WEIGHT")	, SG_T("NORMAL"));		break;
+		case wxFONTWEIGHT_LIGHT:		Entry.Add_Child(SG_T("WEIGHT")	, SG_T("LIGHT"));		break;
+		case wxFONTWEIGHT_BOLD:			Entry.Add_Child(SG_T("WEIGHT")	, SG_T("BOLD"));		break;
+		}
+	}
+	else
+	{
+		int				i;
+		CSG_MetaData	*pEntry;
+
+		if( (pEntry = Entry.Get_Child(SG_T("COLOR"))) != NULL )
+		{
+			m_Color	= SG_GET_RGB(
+				pEntry->Get_Content().AfterFirst(SG_T('R')).asInt(),
+				pEntry->Get_Content().AfterFirst(SG_T('G')).asInt(),
+				pEntry->Get_Content().AfterFirst(SG_T('B')).asInt()
+			);
+		}
+
+		if( (pEntry = Entry.Get_Child(SG_T("POINTSIZE"))) != NULL && pEntry->Get_Content().asInt(i) )
+		{
+			m_pFont->SetPointSize(i);
+		}
+
+		if( (pEntry = Entry.Get_Child(SG_T("FACENAME"))) != NULL )
+		{
+			m_pFont->SetFaceName(pEntry->Get_Content().c_str());
+		}
+
+		if( (pEntry = Entry.Get_Child(SG_T("UNDERLINED"))) != NULL )
+		{
+			m_pFont->SetUnderlined(pEntry->Cmp_Content(SG_T("TRUE")));
+		}
+
+		if( (pEntry = Entry.Get_Child(SG_T("FAMILY"))) != NULL )
+		{
+			m_pFont->SetFamily(
+				pEntry->Cmp_Content(SG_T("TELETYPE"))	? wxFONTFAMILY_TELETYPE		:
+				pEntry->Cmp_Content(SG_T("MODERN"))		? wxFONTFAMILY_MODERN		:
+				pEntry->Cmp_Content(SG_T("SWISS"))		? wxFONTFAMILY_SWISS		:
+				pEntry->Cmp_Content(SG_T("SCRIPT"))		? wxFONTFAMILY_SCRIPT		:
+				pEntry->Cmp_Content(SG_T("ROMAN"))		? wxFONTFAMILY_ROMAN		:
+				pEntry->Cmp_Content(SG_T("DECORATIVE"))	? wxFONTFAMILY_DECORATIVE	: wxFONTFAMILY_DEFAULT
+			);
+		}
+
+		if( (pEntry = Entry.Get_Child(SG_T("STYLE"))) != NULL )
+		{
+			m_pFont->SetStyle(
+				pEntry->Cmp_Content(SG_T("SLANT"))		? wxFONTSTYLE_SLANT			:
+				pEntry->Cmp_Content(SG_T("ITALIC"))		? wxFONTSTYLE_ITALIC		: wxFONTSTYLE_NORMAL
+			);
+		}
+
+		if( (pEntry = Entry.Get_Child(SG_T("WEIGHT"))) != NULL )
+		{
+			m_pFont->SetWeight(
+				pEntry->Cmp_Content(SG_T("BOLD"))		? wxFONTWEIGHT_BOLD			:
+				pEntry->Cmp_Content(SG_T("LIGHT"))		? wxFONTWEIGHT_LIGHT		: wxFONTWEIGHT_NORMAL
+			);
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Color							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Color::CSG_Parameter_Color(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Int(pOwner, Constraint)
+{}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Color::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( bSave )
+	{
+		Entry.Set_Content(SG_T("R%03d G%03d B%03d"), SG_GET_R(m_Value), SG_GET_G(m_Value), SG_GET_B(m_Value));
+	}
+	else
+	{
+		m_Value	= SG_GET_RGB(
+			Entry.Get_Content().AfterFirst(SG_T('R')).asInt(),
+			Entry.Get_Content().AfterFirst(SG_T('G')).asInt(),
+			Entry.Get_Content().AfterFirst(SG_T('B')).asInt()
+		);
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Colors							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Colors::CSG_Parameter_Colors(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Colors::asString(void)
+{
+	m_String.Printf(SG_T("%d %s"), m_Colors.Get_Count(), LNG("colors"));
+
+	return( m_String );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Colors::On_Assign(CSG_Parameter_Data *pSource)
+{
+	m_Colors.Assign(&((CSG_Parameter_Colors *)pSource)->m_Colors);
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Colors::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( bSave )
+	{
+		for(int i=0; i<m_Colors.Get_Count(); i++)
+		{
+			Entry.Add_Child(SG_T("COLOR"), CSG_String::Format(SG_T("R%03d G%03d B%03d"), m_Colors.Get_Red(i), m_Colors.Get_Green(i), m_Colors.Get_Blue(i)));
+		}
+	}
+	else
+	{
+		if( Entry.Get_Children_Count() <= 1 )
+		{
+			return( false );
+		}
+
+		m_Colors.Set_Count(Entry.Get_Children_Count());
+
+		for(int i=0; i<m_Colors.Get_Count(); i++)
+		{
+			CSG_String	s(Entry.Get_Child(i)->Get_Content());
+
+			m_Colors.Set_Red  (i, s.AfterFirst(SG_T('R')).asInt());
+			m_Colors.Set_Green(i, s.AfterFirst(SG_T('G')).asInt());
+			m_Colors.Set_Blue (i, s.AfterFirst(SG_T('B')).asInt());
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						FixedTable						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Fixed_Table::CSG_Parameter_Fixed_Table(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{
+	m_Table.Set_Name(LNG("Table"));
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Fixed_Table::asString(void)
+{
+	m_String.Printf(SG_T("%s (%s: %d, %s: %d)"), m_Table.Get_Name(), LNG("columns"), m_Table.Get_Field_Count(), LNG("rows"), m_Table.Get_Record_Count());
+
+	return( m_String );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Fixed_Table::On_Assign(CSG_Parameter_Data *pSource)
+{
+	m_Table.Assign(&((CSG_Parameter_Fixed_Table *)pSource)->m_Table);
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Fixed_Table::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	int				iField, iRecord;
+	CSG_MetaData	*pNode, *pEntry;
+
+	if( bSave )
+	{
+		pNode	= Entry.Add_Child(SG_T("FIELDS"));
+
+		for(iField=0; iField<m_Table.Get_Field_Count(); iField++)
+		{
+			pEntry	= pNode->Add_Child	(SG_T("FIELD")	, m_Table.Get_Field_Name(iField));
+			pEntry	->Set_Property		(SG_T("type")	, gSG_Data_Type_Identifier[m_Table.Get_Field_Type(iField)]);
+		}
+
+		pNode	= Entry.Add_Child(SG_T("RECORDS"));
+
+		for(iRecord=0; iRecord<m_Table.Get_Count(); iRecord++)
+		{
+			pEntry	= pNode->Add_Child(SG_T("RECORD"));
+
+			for(iField=0; iField<m_Table.Get_Field_Count(); iField++)
+			{
+				pEntry->Add_Child(SG_T("FIELD"), m_Table[iRecord].asString(iField));
+			}
+		}
+	}
+	else
+	{
+		CSG_Table	t;
+
+		if( (pNode = Entry.Get_Child(SG_T("FIELDS"))) == NULL )
+		{
+			return( false );
+		}
+
+		for(iField=0; iField<pNode->Get_Children_Count(); iField++)
+		{
+			CSG_String		s;
+			TSG_Data_Type	type	= SG_DATATYPE_String;
+
+			if( pNode->Get_Child(iField)->Get_Property(SG_T("type"), s) )
+			{
+				     if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Bit   ]) )	type	= SG_DATATYPE_Bit;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Byte  ]) )	type	= SG_DATATYPE_Byte;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Char  ]) )	type	= SG_DATATYPE_Char;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Word  ]) )	type	= SG_DATATYPE_Word;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Short ]) )	type	= SG_DATATYPE_Short;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_DWord ]) )	type	= SG_DATATYPE_DWord;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Int   ]) )	type	= SG_DATATYPE_Int;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_ULong ]) )	type	= SG_DATATYPE_ULong;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Long  ]) )	type	= SG_DATATYPE_Long;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Float ]) )	type	= SG_DATATYPE_Float;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Double]) )	type	= SG_DATATYPE_Double;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_String]) )	type	= SG_DATATYPE_String;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Date  ]) )	type	= SG_DATATYPE_Date;
+				else if( !s.Cmp(gSG_Data_Type_Identifier[SG_DATATYPE_Color ]) )	type	= SG_DATATYPE_Color;
+			}
+
+			t.Add_Field(pNode->Get_Child(iField)->Get_Content(), type);
+		}
+
+		if( (pNode = Entry.Get_Child(SG_T("RECORDS"))) == NULL )
+		{
+			return( false );
+		}
+
+		for(iRecord=0; iRecord<pNode->Get_Children_Count(); iRecord++)
+		{
+			pEntry	= pNode->Get_Child(iRecord);
+
+			t.Add_Record();
+
+			for(iField=0; iField<pEntry->Get_Children_Count(); iField++)
+			{
+				t[iRecord].Set_Value(iField, pEntry->Get_Child(iField)->Get_Content());
+			}
+		}
+
+		return( m_Table.Assign_Values(&t) );
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Grid_System						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Grid_System::CSG_Parameter_Grid_System(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Grid_System::Set_Value(void *Value)
+{
+	int						i, j;
+	CSG_Grid				*pGrid;
+	CSG_Grid_System			Invalid;
+	CSG_Parameters			*pParameters;
+	CSG_Parameter_Grid_List	*pGrids;
+
+	//-----------------------------------------------------
+	if( Value == NULL )
+	{
+		Value	= &Invalid;
+	}
+
+	//-----------------------------------------------------
+	if( !m_System.is_Equal(*((CSG_Grid_System *)Value)) )
+	{
+		m_System.Assign(*((CSG_Grid_System *)Value));
+
+		//-------------------------------------------------
+		pParameters	= m_pOwner->Get_Owner();
+
+		for(i=0; i<pParameters->Get_Count(); i++)
+		{
+			if(	pParameters->Get_Parameter(i)->Get_Parent() == m_pOwner )
+			{
+				switch( pParameters->Get_Parameter(i)->Get_Type() )
+				{
+				default:
+					break;
+
+				case PARAMETER_TYPE_Grid:
+					pGrid	= pParameters->Get_Parameter(i)->asGrid();
+
+					if(	!m_System.is_Valid() || !SG_UI_DataObject_Check(pGrid, DATAOBJECT_TYPE_Grid) || (pGrid != DATAOBJECT_NOTSET && pGrid != DATAOBJECT_CREATE && !m_System.is_Equal(pGrid->Get_System())) )
+					{
+						pParameters->Get_Parameter(i)->Set_Value(DATAOBJECT_NOTSET);
+					}
+					break;
+
+				case PARAMETER_TYPE_Grid_List:
+					pGrids	= (CSG_Parameter_Grid_List *)pParameters->Get_Parameter(i)->Get_Data();
+
+					for(j=pGrids->Get_Count()-1; j>=0; j--)
+					{
+						if( !m_System.is_Valid() || !SG_UI_DataObject_Check(pGrids->asGrid(j), DATAOBJECT_TYPE_Grid) || m_System.is_Equal(pGrids->asGrid(j)->Get_System()) == false )
+						{
+							pGrids->Del_Item(j);
+						}
+					}
+					break;
+				}
+			}
+		}
+
+		//-------------------------------------------------
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Grid_System::asString(void)
+{
+	return( m_System.Get_Name() );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Grid_System::On_Assign(CSG_Parameter_Data *pSource)
+{
+	m_System	= ((CSG_Parameter_Grid_System *)pSource)->m_System;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Grid_System::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( bSave )
+	{
+		Entry.Add_Child(SG_T("CELLSIZE"), m_System.Get_Cellsize());
+		Entry.Add_Child(SG_T("XMIN")    , m_System.Get_Extent().Get_XMin());
+		Entry.Add_Child(SG_T("XMAX")    , m_System.Get_Extent().Get_XMax());
+		Entry.Add_Child(SG_T("YMIN")    , m_System.Get_Extent().Get_YMin());
+		Entry.Add_Child(SG_T("YMAX")    , m_System.Get_Extent().Get_YMax());
+	}
+	else
+	{
+		double		Cellsize;
+		TSG_Rect	Extent;
+
+		Cellsize	= Entry.Get_Child(SG_T("CELLSIZE"))->Get_Content().asDouble();
+		Extent.xMin	= Entry.Get_Child(SG_T("XMIN"))    ->Get_Content().asDouble();
+		Extent.xMax	= Entry.Get_Child(SG_T("XMAX"))    ->Get_Content().asDouble();
+		Extent.yMin	= Entry.Get_Child(SG_T("YMIN"))    ->Get_Content().asDouble();
+		Extent.yMax	= Entry.Get_Child(SG_T("YMAX"))    ->Get_Content().asDouble();
+
+		m_System.Assign(Cellsize, CSG_Rect(Extent));
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//					Table Field							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Table_Field::CSG_Parameter_Table_Field(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Int(pOwner, Constraint)
+{}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Table_Field::asString(void)
+{
+	CSG_Table	*pTable;
+
+	if( (pTable = Get_Table()) != NULL )
+	{
+		if( m_Value >= 0 && m_Value < pTable->Get_Field_Count() )
+		{
+			return( pTable->Get_Field_Name(m_Value) );
+		}
+
+		return( LNG("[VAL] [not set]") );
+	}
+
+	return( LNG("[VAL] [no fields]") );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Table_Field::Set_Value(int Value)
+{
+	bool		bChanged;
+	CSG_Table	*pTable;
+
+	bChanged	= false;
+
+	if( (pTable = Get_Table()) != NULL )
+	{
+		if( !m_pOwner->is_Optional() )
+		{
+			if( Value < 0 )
+			{
+				Value	= 0;
+			}
+			else if( Value >= pTable->Get_Field_Count() )
+			{
+				Value	= pTable->Get_Field_Count() - 1;
+			}
+		}
+		else if( Value < 0 || Value >= pTable->Get_Field_Count() )
+		{
+			Value	= -1;
+		}
+	}
+	else
+	{
+		Value	= -1;
+	}
+
+	if( m_Value != Value )
+	{
+		m_Value		= Value;
+		bChanged	= true;
+	}
+
+	return( bChanged );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Table_Field::Set_Value(void *Value)
+{
+	CSG_Table	*pTable;
+
+	if( Value && *((SG_Char *)Value) && (pTable = Get_Table()) != NULL )
+	{
+		CSG_String	s((SG_Char *)Value);
+
+		for(int i=0; i<pTable->Get_Field_Count(); i++)
+		{
+			if( s.CmpNoCase(pTable->Get_Field_Name(i)) == 0 )
+			{
+				m_Value	= i;
+
+				return( true );
+			}
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+CSG_Table * CSG_Parameter_Table_Field::Get_Table(void)
+{
+	CSG_Table		*pTable;
+	CSG_Parameter	*pParent;
+
+	pTable		= NULL;
+
+	if( (pParent = m_pOwner->Get_Parent()) != NULL )
+	{
+		switch( m_pOwner->Get_Parent()->Get_Type() )
+		{
+		default:
+			break;
+
+		case PARAMETER_TYPE_Table:
+		case PARAMETER_TYPE_Shapes:
+		case PARAMETER_TYPE_TIN:
+		case PARAMETER_TYPE_PointCloud:
+			pTable	= pParent->asTable();
+			break;
+		}
+	}
+
+	return( pTable && pTable != DATAOBJECT_CREATE && pTable->Get_Field_Count() > 0 ? pTable : NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						DataObject						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Data_Object::CSG_Parameter_Data_Object(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{
+	m_pDataObject	= NULL;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Data_Object::is_Valid(void)
+{
+	return(	m_pOwner->is_Optional() || (m_pDataObject && m_pDataObject->is_Valid()) );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Data_Object::Set_Value(void *Value)
+{
+	if( m_pDataObject != Value )
+	{
+		m_pDataObject	= (CSG_Data_Object *)Value;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Data_Object::asString(void)
+{
+	if( m_pDataObject == DATAOBJECT_NOTSET )
+	{
+		m_String	= m_pOwner->is_Output() && !m_pOwner->is_Optional()
+					? LNG("[VAL] [create]")
+					: LNG("[VAL] [not set]");
+	}
+	else if( m_pDataObject == DATAOBJECT_CREATE )
+	{
+		m_String	= LNG("[VAL] [create]");
+	}
+	else
+	{
+		m_String	= m_pDataObject->Get_Name();
+	}
+
+	return( m_String );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Data_Object::On_Assign(CSG_Parameter_Data *pSource)
+{
+	m_pDataObject	= ((CSG_Parameter_Data_Object *)pSource)->m_pDataObject;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Data_Object::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( bSave )
+	{
+		if(	m_pDataObject == DATAOBJECT_CREATE )
+		{
+			Entry.Set_Content(SG_T("CREATE"));
+		}
+		else if( m_pDataObject == DATAOBJECT_NOTSET || !m_pDataObject->Get_File_Name() )
+		{
+			Entry.Set_Content(SG_T("NOT SET"));
+		}
+		else
+		{
+			Entry.Set_Content(m_pDataObject->Get_File_Name());
+		}
+	}
+	else
+	{
+		if( Entry.Cmp_Content(SG_T("CREATE")) )
+		{
+			Set_Value(DATAOBJECT_CREATE);
+		}
+		else if( Entry.Cmp_Content(SG_T("NOT SET")) )
+		{
+			Set_Value(DATAOBJECT_NOTSET);
+		}
+		else
+		{
+			Set_Value(SG_UI_DataObject_Find(Entry.Get_Content(), -1));
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//					DataObject_Output					 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Data_Object_Output::CSG_Parameter_Data_Object_Output(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data_Object(pOwner, Constraint)
+{
+	m_Type	= DATAOBJECT_TYPE_Undefined;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Data_Object_Output::Set_Value(void *Value)
+{
+	CSG_Data_Object	*pDataObject	= (CSG_Data_Object *)Value;
+
+	if( pDataObject == DATAOBJECT_CREATE )
+	{
+		pDataObject	= NULL;
+	}
+
+	if( m_pDataObject != pDataObject && (pDataObject == NULL || pDataObject->Get_ObjectType() == m_Type) )
+	{
+		m_pDataObject	= pDataObject;
+
+		SG_UI_DataObject_Add(m_pDataObject, false);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Data_Object_Output::Set_DataObject_Type(TSG_Data_Object_Type Type)
+{
+	if( m_Type == DATAOBJECT_TYPE_Undefined )	// m_Type should not be changed after set once!!!...
+	{
+		switch( Type )
+		{
+		default:
+			break;
+
+		case DATAOBJECT_TYPE_Grid:
+		case DATAOBJECT_TYPE_Table:
+		case DATAOBJECT_TYPE_Shapes:
+		case DATAOBJECT_TYPE_TIN:
+		case DATAOBJECT_TYPE_PointCloud:
+			m_Type	= Type;
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Grid							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Grid::CSG_Parameter_Grid(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data_Object(pOwner, Constraint)
+{
+	m_Type	= SG_DATATYPE_Undefined;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Grid::Set_Value(void *Value)
+{
+	CSG_Grid_System	*pSystem;
+
+	if( Value == DATAOBJECT_CREATE && !m_pOwner->is_Optional() )
+	{
+//		Value	= DATAOBJECT_NOTSET;
+	}
+
+	if( m_pDataObject != Value )
+	{
+		pSystem	= Get_System();
+
+		if(	Value == DATAOBJECT_NOTSET || Value == DATAOBJECT_CREATE
+		||	pSystem == NULL || pSystem->is_Equal(((CSG_Grid *)Value)->Get_System()) )
+		{
+			m_pDataObject	= (CSG_Data_Object *)Value;
+
+			return( true );
+		}
+		else if( !m_pOwner->Get_Owner()->is_Managed() && pSystem != NULL )
+		{
+			pSystem->Assign(((CSG_Grid *)Value)->Get_System());
+			m_pDataObject	= (CSG_Data_Object *)Value;
+
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+CSG_Grid_System * CSG_Parameter_Grid::Get_System(void)
+{
+	if( m_pOwner->Get_Parent() && m_pOwner->Get_Parent()->Get_Type() == PARAMETER_TYPE_Grid_System )
+	{
+		return( m_pOwner->Get_Parent()->asGrid_System() );
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Grid::Set_Preferred_Type(TSG_Data_Type Type)
+{
+	m_Type	= Type;
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Grid::On_Assign(CSG_Parameter_Data *pSource)
+{
+	CSG_Parameter_Data_Object::On_Assign(pSource);
+
+	m_Type	= ((CSG_Parameter_Grid *)pSource)->m_Type;
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Table							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Table::CSG_Parameter_Table(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data_Object(pOwner, Constraint)
+{}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Table::Set_Value(void *Value)
+{
+	if( m_pDataObject != Value )
+	{
+		m_pDataObject	= (CSG_Data_Object *)Value;
+
+		CSG_Parameters	*pParameters	= m_pOwner->Get_Owner();
+
+		for(int i=0; i<pParameters->Get_Count(); i++)
+		{
+			if(	pParameters->Get_Parameter(i)->Get_Parent() == m_pOwner
+			&&	pParameters->Get_Parameter(i)->Get_Type()   == PARAMETER_TYPE_Table_Field )
+			{
+				pParameters->Get_Parameter(i)->Set_Value(0);
+			}				
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Shapes							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Shapes::CSG_Parameter_Shapes(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data_Object(pOwner, Constraint)
+{
+	m_Type	= SHAPE_TYPE_Undefined;
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Shapes::Set_Value(void *Value)
+{
+	if(	Value != DATAOBJECT_NOTSET && Value != DATAOBJECT_CREATE
+	&&	m_Type != SHAPE_TYPE_Undefined && m_Type != ((CSG_Shapes *)Value)->Get_Type() )
+	{
+		return( false );
+	}
+
+	if( m_pDataObject != Value )
+	{
+		m_pDataObject	= (CSG_Data_Object *)Value;
+
+		CSG_Parameters	*pParameters	= m_pOwner->Get_Owner();
+
+		for(int i=0; i<pParameters->Get_Count(); i++)
+		{
+			if(	pParameters->Get_Parameter(i)->Get_Parent() == m_pOwner
+			&&	pParameters->Get_Parameter(i)->Get_Type()   == PARAMETER_TYPE_Table_Field )
+			{
+				pParameters->Get_Parameter(i)->Set_Value(0);
+			}				
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Shapes::Set_Shape_Type(TSG_Shape_Type Type)
+{
+	m_Type	= Type;
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Shapes::On_Assign(CSG_Parameter_Data *pSource)
+{
+	CSG_Parameter_Data_Object::On_Assign(pSource);
+
+	m_Type	= ((CSG_Parameter_Shapes *)pSource)->m_Type;
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						TIN								 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_TIN::CSG_Parameter_TIN(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data_Object(pOwner, Constraint)
+{}
+
+//---------------------------------------------------------
+bool CSG_Parameter_TIN::Set_Value(void *Value)
+{
+	if( m_pDataObject != Value )
+	{
+		m_pDataObject	= (CSG_Data_Object *)Value;
+
+		CSG_Parameters	*pParameters	= m_pOwner->Get_Owner();
+
+		for(int i=0; i<pParameters->Get_Count(); i++)
+		{
+			if(	pParameters->Get_Parameter(i)->Get_Parent() == m_pOwner
+			&&	pParameters->Get_Parameter(i)->Get_Type()   == PARAMETER_TYPE_Table_Field )
+			{
+				pParameters->Get_Parameter(i)->Set_Value(0);
+			}				
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						PointCloud						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_PointCloud::CSG_Parameter_PointCloud(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data_Object(pOwner, Constraint)
+{}
+
+//---------------------------------------------------------
+void CSG_Parameter_PointCloud::On_Assign(CSG_Parameter_Data *pSource)
+{
+	CSG_Parameter_Data_Object::On_Assign(pSource);
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_PointCloud::Set_Value(void *Value)
+{
+	if( m_pDataObject != Value )
+	{
+		m_pDataObject	= (CSG_Data_Object *)Value;
+
+		CSG_Parameters	*pParameters	= m_pOwner->Get_Owner();
+
+		for(int i=0; i<pParameters->Get_Count(); i++)
+		{
+			if(	pParameters->Get_Parameter(i)->Get_Parent() == m_pOwner
+			&&	pParameters->Get_Parameter(i)->Get_Type()   == PARAMETER_TYPE_Table_Field )
+			{
+				pParameters->Get_Parameter(i)->Set_Value(0);
+			}				
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						List							 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_List::CSG_Parameter_List(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{
+	m_Objects	= NULL;
+	m_nObjects	= 0;
+}
+
+CSG_Parameter_List::~CSG_Parameter_List(void)
+{
+	Del_Items();
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_List::asString(void)
+{
+	if( Get_Count() > 0 )
+	{
+		m_String.Printf(SG_T("%d %s ("), Get_Count(), Get_Count() == 1 ? LNG("[VAL] object") : LNG("[VAL] objects"));
+
+		for(int i=0; i<Get_Count(); i++)
+		{
+			if( i > 0 )
+			{
+				m_String.Append(SG_T(", "));
+			}
+
+			m_String.Append(asDataObject(i)->Get_Name());
+		}
+
+		m_String.Append(SG_T("))"));
+	}
+	else
+	{
+		m_String.Printf(LNG("[VAL] No objects"));
+	}
+
+	return( m_String );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_List::Add_Item(CSG_Data_Object *pObject)
+{
+	if( pObject )
+	{
+		m_Objects	= (CSG_Data_Object **)SG_Realloc(m_Objects, (m_nObjects + 1) * sizeof(CSG_Data_Object *));
+		m_Objects[m_nObjects++]	= pObject;
+	}
+}
+
+//---------------------------------------------------------
+int CSG_Parameter_List::Del_Item(int iObject)
+{
+	int		i;
+
+	if( iObject >= 0 && iObject < m_nObjects )
+	{
+		m_nObjects--;
+
+		for(i=iObject; i<m_nObjects; i++)
+		{
+			m_Objects[i]	= m_Objects[i + 1];
+		}
+
+		m_Objects	= (CSG_Data_Object **)SG_Realloc(m_Objects, m_nObjects * sizeof(CSG_Data_Object *));
+	}
+
+	return( m_nObjects );
+}
+
+int CSG_Parameter_List::Del_Item(CSG_Data_Object *pObject)
+{
+	int		i;
+
+	for(i=0; i<m_nObjects; i++)
+	{
+		if( pObject == m_Objects[i] )
+		{
+			return( Del_Item(i) );
+		}
+	}
+
+	return( 0 );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_List::Del_Items(void)
+{
+	if( m_nObjects > 0 )
+	{
+		SG_Free(m_Objects);
+		m_Objects	= NULL;
+		m_nObjects	= 0;
+	}
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_List::On_Assign(CSG_Parameter_Data *pSource)
+{
+	Del_Items();
+
+	for(int i=0; i<((CSG_Parameter_List *)pSource)->Get_Count(); i++)
+	{
+		Add_Item(((CSG_Parameter_List *)pSource)->asDataObject(i));
+	}
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_List::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( bSave )
+	{
+		for(int i=0; i<Get_Count(); i++)
+		{
+			if( asDataObject(i)->Get_File_Name() )
+			{
+				Entry.Add_Child(SG_T("DATA"), asDataObject(i)->Get_File_Name());
+			}
+		}
+	}
+	else
+	{
+		for(int i=0; i<Entry.Get_Children_Count(); i++)
+		{
+			CSG_Data_Object	*pObject	= SG_UI_DataObject_Find(Entry.Get_Child(i)->Get_Content(), -1);
+
+			if( pObject )
+			{
+				Add_Item(pObject);
+			}
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Grid_List						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+
+//---------------------------------------------------------
+CSG_Parameter_Grid_List::CSG_Parameter_Grid_List(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_List(pOwner, Constraint)
+{}
+
+//---------------------------------------------------------
+CSG_Grid_System * CSG_Parameter_Grid_List::Get_System(void)
+{
+	if( m_pOwner->Get_Parent() && m_pOwner->Get_Parent()->Get_Type() == PARAMETER_TYPE_Grid_System )
+	{
+		return( m_pOwner->Get_Parent()->asGrid_System() );
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Table_List						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+
+//---------------------------------------------------------
+CSG_Parameter_Table_List::CSG_Parameter_Table_List(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_List(pOwner, Constraint)
+{}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Shapes_List						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+
+//---------------------------------------------------------
+CSG_Parameter_Shapes_List::CSG_Parameter_Shapes_List(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_List(pOwner, Constraint)
+{
+	m_Type	= SHAPE_TYPE_Undefined;
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Shapes_List::Set_Shape_Type(TSG_Shape_Type Type)
+{
+	m_Type	= Type;
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Shapes_List::On_Assign(CSG_Parameter_Data *pSource)
+{
+	CSG_Parameter_List::On_Assign(pSource);
+
+	m_Type	= ((CSG_Parameter_Shapes_List *)pSource)->m_Type;
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						TIN_List						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+
+//---------------------------------------------------------
+CSG_Parameter_TIN_List::CSG_Parameter_TIN_List(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_List(pOwner, Constraint)
+{}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//					PointCloud_List						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+
+//---------------------------------------------------------
+CSG_Parameter_PointCloud_List::CSG_Parameter_PointCloud_List(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_List(pOwner, Constraint)
+{}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//						Parameters						 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter_Parameters::CSG_Parameter_Parameters(CSG_Parameter *pOwner, long Constraint)
+	: CSG_Parameter_Data(pOwner, Constraint)
+{
+	m_pParameters	= new CSG_Parameters(pOwner->Get_Owner()->Get_Owner(), pOwner->Get_Name(), pOwner->Get_Description(), pOwner->Get_Identifier());
+}
+
+CSG_Parameter_Parameters::~CSG_Parameter_Parameters(void)
+{
+	delete(m_pParameters);
+}
+
+//---------------------------------------------------------
+const SG_Char * CSG_Parameter_Parameters::asString(void)
+{
+	m_String.Printf(SG_T("%d %s"), m_pParameters->Get_Count(), LNG("parameters"));
+
+	return( m_String );
+}
+
+//---------------------------------------------------------
+void CSG_Parameter_Parameters::On_Assign(CSG_Parameter_Data *pSource)
+{
+	m_pParameters->Assign(((CSG_Parameter_Parameters *)pSource)->m_pParameters);
+}
+
+//---------------------------------------------------------
+bool CSG_Parameter_Parameters::On_Serialize(CSG_MetaData &Entry, bool bSave)
+{
+	if( m_pParameters->Serialize(Entry, bSave) )
+	{
+		if( bSave )
+		{
+			Entry.Set_Property(SG_T("id")  , m_pOwner->Get_Identifier());
+			Entry.Set_Property(SG_T("type"), m_pOwner->Get_Type_Identifier());
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_api/parameters.cpp b/src/saga_core/saga_api/parameters.cpp
index 907d4dc..75e65fb 100644
--- a/src/saga_core/saga_api/parameters.cpp
+++ b/src/saga_core/saga_api/parameters.cpp
@@ -162,11 +162,6 @@ void CSG_Parameters::Set_Identifier(const SG_Char *String)
 	}
 }
 
-const SG_Char * CSG_Parameters::Get_Identifier(void)
-{
-	return( m_Identifier );
-}
-
 //---------------------------------------------------------
 void CSG_Parameters::Set_Name(const SG_Char *String)
 {
@@ -180,11 +175,6 @@ void CSG_Parameters::Set_Name(const SG_Char *String)
 	}
 }
 
-const SG_Char * CSG_Parameters::Get_Name(void)
-{
-	return( m_Name );
-}
-
 //---------------------------------------------------------
 void CSG_Parameters::Set_Description(const SG_Char *String)
 {
@@ -198,11 +188,6 @@ void CSG_Parameters::Set_Description(const SG_Char *String)
 	}
 }
 
-const SG_Char * CSG_Parameters::Get_Description(void)
-{
-	return( m_Description );
-}
-
 //---------------------------------------------------------
 void CSG_Parameters::Set_Translation(CSG_Translator &Translator)
 {
@@ -279,7 +264,8 @@ CSG_Parameter * CSG_Parameters::Add_Choice(CSG_Parameter *pParent, const SG_Char
 	m_pData		= (CSG_Parameter_Choice *)pParameter->m_pData;
 	m_pData->Set_Items(Items);
 
-	pParameter->Set_Value(Default);
+	pParameter->Set_Value  (Default);
+	pParameter->Set_Default(Default);
 
 	return( pParameter );
 }
@@ -309,7 +295,8 @@ CSG_Parameter * CSG_Parameters::Add_FilePath(CSG_Parameter *pParent, const SG_Ch
 	m_pData->Set_Flag_Multiple	(bMultiple);
 	m_pData->Set_Flag_Directory	(bDirectory);
 
-	pParameter->Set_Value((void *)Default);
+	pParameter->Set_Value  ((void *)Default);
+	pParameter->Set_Default(Default);
 
 	return( pParameter );
 }
@@ -638,8 +625,8 @@ CSG_Parameter * CSG_Parameters::Add_Parameters(CSG_Parameter *pParent, const SG_
 //---------------------------------------------------------
 CSG_Parameter * CSG_Parameters::_Add_Value(CSG_Parameter *pParent, const SG_Char *Identifier, const SG_Char *Name, const SG_Char *Description, bool bInformation, TSG_Parameter_Type Type, double Value, double Minimum, bool bMinimum, double Maximum, bool bMaximum)
 {
-	CSG_Parameter			*pParameter;
-	CSG_Parameter_Value	*m_pData;
+	CSG_Parameter		*pParameter;
+	CSG_Parameter_Value	*pData;
 
 	switch( Type )	// Check if Type is valid...
 	{
@@ -667,14 +654,15 @@ CSG_Parameter * CSG_Parameters::_Add_Value(CSG_Parameter *pParent, const SG_Char
 		case PARAMETER_TYPE_Int:
 		case PARAMETER_TYPE_Double:
 		case PARAMETER_TYPE_Degree:
-			m_pData		= (CSG_Parameter_Value *)pParameter->m_pData;
-			m_pData->Set_Minimum(Minimum, bMinimum);
-			m_pData->Set_Maximum(Maximum, bMaximum);
+			pData		= (CSG_Parameter_Value *)pParameter->m_pData;
+			pData->Set_Minimum(Minimum, bMinimum);
+			pData->Set_Maximum(Maximum, bMaximum);
 			break;
 		}
 	}
 
-	pParameter->Set_Value(Value);
+	pParameter->Set_Value  (Value);
+	pParameter->Set_Default(Value);
 
 	return( pParameter );
 }
@@ -683,8 +671,8 @@ CSG_Parameter * CSG_Parameters::_Add_Value(CSG_Parameter *pParent, const SG_Char
 CSG_Parameter * CSG_Parameters::_Add_Range(CSG_Parameter *pParent, const SG_Char *Identifier, const SG_Char *Name, const SG_Char *Description, bool bInformation, double Default_Min, double Default_Max, double Minimum, bool bMinimum, double Maximum, bool bMaximum)
 {
 	double				d;
-	CSG_Parameter			*pParameter;
-	CSG_Parameter_Range	*m_pData;
+	CSG_Parameter		*pParameter;
+	CSG_Parameter_Range	*pData;
 
 	//-----------------------------------------------------
 	if( Default_Min > Default_Max )
@@ -697,15 +685,18 @@ CSG_Parameter * CSG_Parameters::_Add_Range(CSG_Parameter *pParent, const SG_Char
 	//-----------------------------------------------------
 	pParameter	= _Add(pParent, Identifier, Name, Description, PARAMETER_TYPE_Range, bInformation ? PARAMETER_INFORMATION : 0);
 
-	m_pData		= pParameter->asRange();
+	pData		= pParameter->asRange();
+
+	pData->Get_LoParm()->asValue()->Set_Minimum(Minimum, bMinimum);
+	pData->Get_LoParm()->asValue()->Set_Maximum(Maximum, bMaximum);
+	pData->Get_HiParm()->asValue()->Set_Minimum(Minimum, bMinimum);
+	pData->Get_HiParm()->asValue()->Set_Maximum(Maximum, bMaximum);
 
-	m_pData->Get_LoParm()->asValue()->Set_Minimum(Minimum, bMinimum);
-	m_pData->Get_LoParm()->asValue()->Set_Maximum(Maximum, bMaximum);
-	m_pData->Get_HiParm()->asValue()->Set_Minimum(Minimum, bMinimum);
-	m_pData->Get_HiParm()->asValue()->Set_Maximum(Maximum, bMaximum);
+	pData->Set_LoVal(Default_Min);
+	pData->Set_HiVal(Default_Max);
 
-	m_pData->Set_LoVal(Default_Min);
-	m_pData->Set_HiVal(Default_Max);
+	pData->Get_LoParm()->asValue()->Set_Default(Default_Min);
+	pData->Get_HiParm()->asValue()->Set_Default(Default_Max);
 
 	return( pParameter );
 }
@@ -717,7 +708,8 @@ CSG_Parameter * CSG_Parameters::_Add_String(CSG_Parameter *pParent, const SG_Cha
 
 	pParameter	= _Add(pParent, Identifier, Name, Description, bLongText ? PARAMETER_TYPE_Text : PARAMETER_TYPE_String, bInformation ? PARAMETER_INFORMATION : 0);
 
-	pParameter->Set_Value((void *)String);
+	pParameter->Set_Value  ((void *)String);
+	pParameter->Set_Default(String);
 
 	((CSG_Parameter_String *)pParameter->Get_Data())->Set_Password(bPassword);
 
@@ -813,8 +805,8 @@ CSG_Parameter * CSG_Parameters::Get_Parameter(const SG_Char *Identifier)
 }
 
 //---------------------------------------------------------
-bool CSG_Parameters::Del_Parameter(int iParameter)
-{
+bool CSG_Parameters::Del_Parameter(int iParameter)
+{
 	if( m_Parameters && iParameter >= 0 && iParameter < m_nParameters )
 	{
 		delete(m_Parameters[iParameter]);
@@ -832,11 +824,11 @@ bool CSG_Parameters::Del_Parameter(int iParameter)
 	}
 
 	return( false );
-}
+}
 
 //---------------------------------------------------------
-bool CSG_Parameters::Del_Parameter(const SG_Char *Identifier)
-{
+bool CSG_Parameters::Del_Parameter(const SG_Char *Identifier)
+{
 	if( m_Parameters && Identifier )
 	{
 		for(int i=0; i<m_nParameters; i++)
@@ -848,12 +840,12 @@ bool CSG_Parameters::Del_Parameter(const SG_Char *Identifier)
 		}
 	}
 
-	return( false );
-}
+	return( false );
+}
 
 //---------------------------------------------------------
-bool CSG_Parameters::Del_Parameters(void)
-{
+bool CSG_Parameters::Del_Parameters(void)
+{
 	if( m_nParameters > 0 )
 	{
 		for(int i=0; i<m_nParameters; i++)
@@ -866,10 +858,10 @@ bool CSG_Parameters::Del_Parameters(void)
 		m_Parameters	= NULL;
 		m_nParameters	= 0;
 	}
-
-	return( true );
-}
-
+
+	return( true );
+}
+
 
 ///////////////////////////////////////////////////////////
 //														 //
@@ -1005,44 +997,48 @@ bool CSG_Parameters::Set_Parameter(const SG_Char *Identifier, int Type, const SG
 //---------------------------------------------------------
 int CSG_Parameters::Assign(CSG_Parameters *pSource)
 {
-	int				i;
-	CSG_Parameter	*pParameter;
-
-	if( pSource && pSource != this )
+	if( pSource != this )
 	{
 		Destroy();
 
-		m_pOwner	= pSource->Get_Owner();
+		if( pSource )
+		{
+			m_pOwner	= pSource->Get_Owner();
 
-		Set_Identifier	(pSource->Get_Identifier());
-		Set_Name		(pSource->Get_Name());
-		Set_Description	(pSource->Get_Description());
+			Set_Identifier	(pSource->Get_Identifier());
+			Set_Name		(pSource->Get_Name());
+			Set_Description	(pSource->Get_Description());
 
-		m_Callback	= pSource->m_Callback;
-		m_bCallback	= pSource->m_bCallback;
+			m_Callback	= pSource->m_Callback;
+			m_bCallback	= pSource->m_bCallback;
 
-		if( pSource->Get_Count() > 0 )
-		{
-			for(i=0; i<pSource->Get_Count(); i++)
+			if( pSource->Get_Count() > 0 )
 			{
-				_Add(pSource->Get_Parameter(i));
-			}
+				int		i;
 
-			for(i=0; i<pSource->Get_Count(); i++)
-			{
-				if( Get_Parameter(i) && (pParameter = pSource->Get_Parameter(i)->Get_Parent()) != NULL )
+				for(i=0; i<pSource->Get_Count(); i++)
 				{
-					Get_Parameter(i)->m_pParent	= Get_Parameter(pParameter->Get_Identifier());
+					_Add(pSource->Get_Parameter(i));
 				}
-			}
 
-			if( pSource->m_pGrid_System )
-			{
-				m_pGrid_System	= Get_Parameter(pSource->m_pGrid_System->Get_Identifier());
+				for(i=0; i<pSource->Get_Count(); i++)
+				{
+					CSG_Parameter	*pParameter;
+
+					if( Get_Parameter(i) && (pParameter = pSource->Get_Parameter(i)->Get_Parent()) != NULL )
+					{
+						Get_Parameter(i)->m_pParent	= Get_Parameter(pParameter->Get_Identifier());
+					}
+				}
+
+				if( pSource->m_pGrid_System )
+				{
+					m_pGrid_System	= Get_Parameter(pSource->m_pGrid_System->Get_Identifier());
+				}
 			}
-		}
 
-		return( m_nParameters );
+			return( m_nParameters );
+		}
 	}
 
 	return( -1 );
@@ -1102,6 +1098,7 @@ bool CSG_Parameters::DataObjects_Check(bool bSilent)
 		case PARAMETER_TYPE_Table:
 		case PARAMETER_TYPE_Shapes:
 		case PARAMETER_TYPE_TIN:
+		case PARAMETER_TYPE_PointCloud:
 			bInvalid	=  m_Parameters[i]->is_Input()				== true
 						&& m_Parameters[i]->is_Optional()			== false
 						&& m_Parameters[i]->asDataObject()			== NULL;
@@ -1210,6 +1207,23 @@ bool CSG_Parameters::DataObjects_Create(void)
 					}
 				}
 			}
+			else if( p->is_DataObject_List() && p->is_Output() )
+			{
+				TSG_Data_Object_Type	Type
+					= p->Get_Type() == PARAMETER_TYPE_Grid_List       ? DATAOBJECT_TYPE_Grid
+					: p->Get_Type() == PARAMETER_TYPE_Table_List      ? DATAOBJECT_TYPE_Table
+					: p->Get_Type() == PARAMETER_TYPE_Shapes_List     ? DATAOBJECT_TYPE_Shapes
+					: p->Get_Type() == PARAMETER_TYPE_TIN_List        ? DATAOBJECT_TYPE_TIN
+					: p->Get_Type() == PARAMETER_TYPE_PointCloud_List ? DATAOBJECT_TYPE_PointCloud : DATAOBJECT_TYPE_Undefined;
+
+				for(int j=p->asList()->Get_Count()-1; j>=0; j--)
+				{
+					if( !SG_UI_DataObject_Check(p->asList()->asDataObject(j), Type) )
+					{
+						p->asList()->Del_Item(j);
+					}
+				}
+			}
 		}
 	}
 
@@ -1263,6 +1277,113 @@ bool CSG_Parameters::DataObjects_Synchronize(void)
 	return( true );
 }
 
+//---------------------------------------------------------
+bool CSG_Parameters::DataObjects_Get_Projection(CSG_Projection &Projection)	const
+{
+	for(int i=0; i<Get_Count(); i++)
+	{
+		CSG_Parameter	*p	= m_Parameters[i];
+
+		if( !p->ignore_Projection() )
+		{
+			CSG_Projection	P;
+
+			if( p->Get_Type() == PARAMETER_TYPE_Parameters )
+			{
+				if( !p->asParameters()->DataObjects_Get_Projection(P) )
+				{
+					return( false );
+				}
+
+				if( P.is_Okay() )
+				{
+					if( !Projection.is_Okay() )
+					{
+						Projection	= P;
+					}
+					else if( Projection != P )
+					{
+						return( false );
+					}
+				}
+			}
+			else if( p->is_Input() )
+			{
+				if( p->is_DataObject() && p->asDataObject() )
+				{
+					P	= p->asDataObject()->Get_Projection();
+
+					if( P.is_Okay() )
+					{
+						if( !Projection.is_Okay() )
+						{
+							Projection	= P;
+						}
+						else if( Projection != P )
+						{
+							return( false );
+						}
+					}
+				}
+				else if( p->is_DataObject_List() )
+				{
+					for(int j=0; j<p->asList()->Get_Count(); j++)
+					{
+						P	= p->asList()->asDataObject(j)->Get_Projection();
+
+						if( P.is_Okay() )
+						{
+							if( !Projection.is_Okay() )
+							{
+								Projection	= P;
+							}
+							else if( Projection != P )
+							{
+								return( false );
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_Parameters::DataObjects_Set_Projection(const CSG_Projection &Projection)
+{
+	for(int i=0; i<Get_Count(); i++)
+	{
+		CSG_Parameter	*p	= m_Parameters[i];
+
+		if( !p->ignore_Projection() )
+		{
+			if( p->Get_Type() == PARAMETER_TYPE_Parameters )
+			{
+				p->asParameters()->DataObjects_Set_Projection(Projection);
+			}
+			else if( p->is_Output() )
+			{
+				if( p->is_DataObject() && p->asDataObject() )
+				{
+					p->asDataObject()->Get_Projection()	= Projection;
+				}
+				else if( p->is_DataObject_List() )
+				{
+					for(int j=0; j<p->asList()->Get_Count(); j++)
+					{
+						p->asList()->asDataObject(j)->Get_Projection()	= Projection;
+					}
+				}
+			}
+		}
+	}
+
+	return( true );
+}
+
 
 ///////////////////////////////////////////////////////////
 //														 //
diff --git a/src/saga_core/saga_api/parameters.h b/src/saga_core/saga_api/parameters.h
index adac29d..ad75df5 100644
--- a/src/saga_core/saga_api/parameters.h
+++ b/src/saga_core/saga_api/parameters.h
@@ -85,10 +85,11 @@
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-#define PARAMETER_INPUT						0x01
+#define PARAMETER_INPUT					0x01
 #define PARAMETER_OUTPUT					0x02
 #define PARAMETER_OPTIONAL					0x04
 #define PARAMETER_INFORMATION				0x08
+#define PARAMETER_IGNORE_PROJECTION		0x10
 
 #define PARAMETER_INPUT_OPTIONAL			(PARAMETER_INPUT  | PARAMETER_OPTIONAL)
 #define PARAMETER_OUTPUT_OPTIONAL			(PARAMETER_OUTPUT | PARAMETER_OPTIONAL)
@@ -212,9 +213,9 @@ public:
 	bool						Assign					(CSG_Parameter_Data *pSource);
 	bool						Serialize				(CSG_MetaData &Entry, bool bSave);
 
-	virtual bool				Set_Value				(int Value);
+	virtual bool				Set_Value				(int    Value);
 	virtual bool				Set_Value				(double Value);
-	virtual bool				Set_Value				(void *Value);
+	virtual bool				Set_Value				(void  *Value);
 
 	virtual int					asInt					(void);
 	virtual double				asDouble				(void);
@@ -222,12 +223,17 @@ public:
 
 	virtual const SG_Char *		asString				(void);
 
+	CSG_String					Get_Default				(void)	{	return( m_Default );	}
+	void						Set_Default				(int            Value);
+	void						Set_Default				(double         Value);
+	void						Set_Default				(const SG_Char *Value);
+
 
 protected:
 
 	int							m_Constraint;
 
-	CSG_String					m_String;
+	CSG_String					m_String, m_Default;
 
 	CSG_Parameter				*m_pOwner;
 
@@ -260,7 +266,7 @@ public:
 	virtual bool				Set_Value				(int Value);
 	virtual bool				Set_Value				(double Value);
 
-	virtual int					asInt					(void)	{	return( m_Value );	}
+	virtual int					asInt					(void)	{	return( m_Value );		}
 
 	virtual const SG_Char *		asString				(void);
 
@@ -425,6 +431,10 @@ public:
 
 	const SG_Char *				Get_Item				(int Index);
 
+	bool						Get_Data				(int        &Value);
+	bool						Get_Data				(double     &Value);
+	bool						Get_Data				(CSG_String &Value);
+
 	int							Get_Count				(void)	{	return( Items.Get_Count() );	}
 
 
@@ -950,6 +960,7 @@ public:
 
 	bool						Add_Parameters_User		(CSG_Parameters *pParameters, bool bAddDefaultGrid = true);
 	bool						Add_Parameters_Grid		(CSG_Parameters *pParameters, bool bAddDefaultGrid = true);
+	bool						Add_Parameters_System	(CSG_Parameters *pParameters);
 
 	bool						Add_Grid_Parameter		(const CSG_String &Identifier, const CSG_String &Name, bool bOptional);
 
@@ -962,10 +973,13 @@ public:
 	CSG_Grid *					Get_Grid				(                              TSG_Data_Type Type = SG_DATATYPE_Float);
 	CSG_Grid *					Get_Grid				(const CSG_String &Identifier, TSG_Data_Type Type = SG_DATATYPE_Float);
 
+	bool						Get_System_User			(CSG_Grid_System &System);
+	bool						Get_System				(CSG_Grid_System &System);
+
 
 private:
 
-	CSG_Parameters				*m_pUser, *m_pGrid;
+	CSG_Parameters				*m_pUser, *m_pGrid, *m_pSystem;
 
 };
 
@@ -1000,11 +1014,13 @@ public:
 	bool						Set_Enabled				(bool bEnabled);
 	bool						is_Enabled				(void)	{	return( m_bEnabled );				}
 
+	bool						ignore_Projection		(void)	{	return( !!(m_pData->Get_Constraint() & PARAMETER_IGNORE_PROJECTION) );	}
+
 	bool						is_Valid				(void)	{	return( m_pData->is_Valid() );		}
-	bool						is_Input				(void)	{	return( !!(m_pData->Get_Constraint() & PARAMETER_INPUT)	      );	}
-	bool						is_Output				(void)	{	return( !!(m_pData->Get_Constraint() & PARAMETER_OUTPUT)      );	}
-	bool						is_Optional				(void)	{	return( !!(m_pData->Get_Constraint() & PARAMETER_OPTIONAL)    );	}
-	bool						is_Information			(void)	{	return( !!(m_pData->Get_Constraint() & PARAMETER_INFORMATION) );	}
+	bool						is_Input				(void)	{	return( !!(m_pData->Get_Constraint() & PARAMETER_INPUT)	        );	}
+	bool						is_Output				(void)	{	return( !!(m_pData->Get_Constraint() & PARAMETER_OUTPUT)        );	}
+	bool						is_Optional				(void)	{	return( !!(m_pData->Get_Constraint() & PARAMETER_OPTIONAL)      );	}
+	bool						is_Information			(void)	{	return( !!(m_pData->Get_Constraint() & PARAMETER_INFORMATION)   );	}
 	bool						is_Option				(void);
 	bool						is_DataObject			(void);
 	bool						is_DataObject_List		(void);
@@ -1020,6 +1036,10 @@ public:
 	bool						Set_Value				(void          *Value);
 	bool						Set_Value				(const SG_Char *Value);
 
+	void						Set_Default				(int            Value)	{	m_pData->Set_Default(Value);	}
+	void						Set_Default				(double         Value)	{	m_pData->Set_Default(Value);	}
+	void						Set_Default				(const SG_Char *Value)	{	m_pData->Set_Default(Value);	}
+
 	bool						has_Changed				(void);
 
 	bool						asBool					(void)	{	return( (bool          )!!m_pData->asInt	() );	}
@@ -1109,17 +1129,17 @@ public:
 	void						Destroy					(void);
 
 	//-----------------------------------------------------
-	void *						Get_Owner				(void)	{	return( m_pOwner );			}
-	int							Get_Count				(void)	{	return( m_nParameters );	}
+	void *						Get_Owner				(void)	const	{	return( m_pOwner );			}
+	int							Get_Count				(void)	const	{	return( m_nParameters );	}
 
 	void						Set_Identifier			(const SG_Char *String);
-	const SG_Char *				Get_Identifier			(void);
+	const SG_Char *				Get_Identifier			(void)	const	{	return( m_Identifier );		}
 
 	void						Set_Name				(const SG_Char *String);
-	const SG_Char *				Get_Name				(void);
+	const SG_Char *				Get_Name				(void)	const	{	return( m_Name );			}
 
 	void						Set_Description			(const SG_Char *String);
-	const SG_Char *				Get_Description			(void);
+	const SG_Char *				Get_Description			(void)	const	{	return( m_Description );	}
 
 	void						Set_Translation			(CSG_Translator &Translator);
 
@@ -1277,8 +1297,10 @@ private:
 	CSG_Parameter *				_Add					(CSG_Parameter *pParent, const SG_Char *Identifier, const SG_Char *Name, const SG_Char *Description, TSG_Parameter_Type Type, int Constraint);
 	CSG_Parameter *				_Add					(CSG_Parameter *pSource);
 
-	bool						DataObjects_Create		(void);
-	bool						DataObjects_Synchronize	(void);
+	bool						DataObjects_Create			(void);
+	bool						DataObjects_Synchronize		(void);
+	bool						DataObjects_Get_Projection	(CSG_Projection &Projection)		const;
+	bool						DataObjects_Set_Projection	(const CSG_Projection &Projection);
 
 };
 
diff --git a/src/saga_core/saga_api/pointcloud.cpp b/src/saga_core/saga_api/pointcloud.cpp
index 658e9ff..4956ab8 100644
--- a/src/saga_core/saga_api/pointcloud.cpp
+++ b/src/saga_core/saga_api/pointcloud.cpp
@@ -202,10 +202,11 @@ void CSG_PointCloud::_On_Construction(void)
 
 	m_Cursor		= NULL;
 	m_bXYZPrecDbl	= true;
-	m_NoData_Value	= -999999;
 
-	m_Selected		= NULL;
-	m_nSelected		= 0;
+	m_Selected		= NULL;
+	m_nSelected		= 0;
+
+	Set_NoData_Value(-999999);
 
 	Set_Update_Flag();
 
@@ -213,7 +214,7 @@ void CSG_PointCloud::_On_Construction(void)
 	m_Shapes.Add_Shape();
 	m_Shapes_Index	= -1;
 
-	m_Array_Points  .Create(sizeof(char *), 0, SG_ARRAY_GROWTH_2);
+	m_Array_Points  .Create(sizeof(char *), 0, SG_ARRAY_GROWTH_3);
 	m_Array_Selected.Create(sizeof(int   ), 0, SG_ARRAY_GROWTH_3);
 }
 
@@ -368,6 +369,8 @@ bool CSG_PointCloud::_Load(const CSG_String &File_Name)
 		return( false );
 	}
 
+	Get_Projection().Load(SG_File_Make_Path(NULL, File_Name, SG_T("prj")), SG_PROJ_FMT_WKT);
+
 	SG_UI_Msg_Add(LNG("[MSG] okay"), false, SG_UI_MSG_STYLE_SUCCESS);
 
 	return( true );
@@ -415,6 +418,8 @@ bool CSG_PointCloud::_Save(const CSG_String &File_Name)
 	Set_File_Name(SG_File_Make_Path(NULL, File_Name, SG_T("spc")));
 
 	Save_MetaData(File_Name);
+
+	Get_Projection().Save(SG_File_Make_Path(NULL, File_Name, SG_T("prj")), SG_PROJ_FMT_WKT);
 
 	SG_UI_Msg_Add(LNG("[MSG] okay"), false, SG_UI_MSG_STYLE_SUCCESS);
 
@@ -662,35 +667,35 @@ double CSG_PointCloud::_Get_Field_Value(char *pPoint, int iField) const
 }
 
 //---------------------------------------------------------
-bool CSG_PointCloud::Set_Value(int iPoint, int iField, const SG_Char *Value)
-{
-	if( iPoint >= 0 && iPoint < m_nRecords && Value && *Value )
-	{
-		double		d;
-		CSG_String	s(Value);
-
-		if( s.asDouble(d) )
-		{
-			return( _Set_Field_Value(m_Points[iPoint], iField, d) );
-		}
-	}
-
-	return( false );
-}
+bool CSG_PointCloud::Set_Value(int iPoint, int iField, const SG_Char *Value)
+{
+	if( iPoint >= 0 && iPoint < m_nRecords && Value && *Value )
+	{
+		double		d;
+		CSG_String	s(Value);
+
+		if( s.asDouble(d) )
+		{
+			return( _Set_Field_Value(m_Points[iPoint], iField, d) );
+		}
+	}
+
+	return( false );
+}
 
 //---------------------------------------------------------
-bool CSG_PointCloud::Get_Value(int iPoint, int iField, CSG_String &Value)	const
-{
-	if( iPoint >= 0 && iPoint < m_nRecords && iField >= 0 && iField < m_nFields )
-	{
-		Value.Printf(SG_T("%f"), _Get_Field_Value(m_Points[iPoint], iField));
-
-		return( true );
-	}
-
-	return( false );
-}
-
+bool CSG_PointCloud::Get_Value(int iPoint, int iField, CSG_String &Value)	const
+{
+	if( iPoint >= 0 && iPoint < m_nRecords && iField >= 0 && iField < m_nFields )
+	{
+		Value.Printf(SG_T("%f"), _Get_Field_Value(m_Points[iPoint], iField));
+
+		return( true );
+	}
+
+	return( false );
+}
+
 
 ///////////////////////////////////////////////////////////
 //														 //
@@ -739,19 +744,14 @@ TSG_Point_Z CSG_PointCloud::Get_Point(int iPoint)	const
 }
 
 //---------------------------------------------------------
-bool CSG_PointCloud::Set_NoData_Value(double NoData_Value)
+bool CSG_PointCloud::On_NoData_Changed(void)
 {
-	if( NoData_Value != m_NoData_Value )
+	for(int i=3; i<m_nFields; i++)
 	{
-		for(int i=3; i<m_nFields; i++)
-		{
-			m_Field_Stats[i]->Invalidate();
-		}
-
-		return( true );
+		m_Field_Stats[i]->Invalidate();
 	}
 
-	return( false );
+	return( true );
 }
 
 
@@ -883,6 +883,8 @@ bool CSG_PointCloud::On_Update(void)
 {
 	if( m_nFields >= 2 )
 	{
+		_Set_Shape(m_Shapes_Index);
+
 		_Stats_Update(0);
 		_Stats_Update(1);
 
@@ -908,7 +910,7 @@ bool CSG_PointCloud::_Stats_Update(int iField) const
 			{
 				double	Value	= _Get_Field_Value(*pPoint, iField);
 
-				if( iField < 3 || Value != m_NoData_Value )
+				if( iField < 3 || is_NoData_Value(Value) == false )
 				{
 					m_Field_Stats[iField]->Add_Value(Value);
 				}
@@ -927,10 +929,12 @@ bool CSG_PointCloud::_Stats_Update(int iField) const
 //														 //
 //														 //
 ///////////////////////////////////////////////////////////
-
+
 //---------------------------------------------------------
-CSG_Shape * CSG_PointCloud::_Set_Shape(int iPoint)
-{
+CSG_Shape * CSG_PointCloud::_Set_Shape(int iPoint)
+{
+	SG_UI_Progress_Lock(true);
+
 	CSG_Shape	*pShape	= m_Shapes.Get_Shape(0);
 
 	if( pShape->is_Modified() && m_Shapes_Index >= 0 && m_Shapes_Index < Get_Count() )
@@ -941,6 +945,9 @@ CSG_Shape * CSG_PointCloud::_Set_Shape(int iPoint)
 		{
 			Set_Value(i, pShape->asDouble(i));
 		}
+
+		Set_Value(0, pShape->Get_Point(0).x);
+		Set_Value(1, pShape->Get_Point(0).y);
 	}
 
 	if( iPoint != m_Shapes_Index && iPoint >= 0 && iPoint < Get_Count() )
@@ -958,13 +965,17 @@ CSG_Shape * CSG_PointCloud::_Set_Shape(int iPoint)
 
 		m_Shapes_Index	= iPoint;
 
+		SG_UI_Progress_Lock(false);
+
 		return( pShape );
 	}
 
 	m_Shapes_Index	= -1;
 
+	SG_UI_Progress_Lock(false);
+
 	return( NULL );
-}
+}
 
 //---------------------------------------------------------
 CSG_Table_Record * CSG_PointCloud::Get_Record(int iRecord)	const
@@ -1011,106 +1022,137 @@ CSG_Shape * CSG_PointCloud::Get_Shape(TSG_Point Point, double Epsilon)
 
 	return( NULL );
 }
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-bool CSG_PointCloud::Select(int iRecord, bool bInvert)
+CSG_Table_Record * CSG_PointCloud::Ins_Record(int iRecord, CSG_Table_Record *pCopy)
 {
-	if( !bInvert )
-	{
-		for(int i=0; i<m_nSelected; i++)
-		{
-			m_Points[m_Selected[i]][0]	&= ~SG_TABLE_REC_FLAG_Selected;
-		}
-
-		m_Array_Selected.Destroy();
-		m_Selected	= NULL;
-		m_nSelected	= 0;
-	}
-
-	if( Set_Cursor(iRecord) )
-	{
-		if( (m_Cursor[0] & SG_TABLE_REC_FLAG_Selected) == 0 )	// select
-		{
-			if( m_Array_Selected.Set_Array(m_nSelected + 1, (void **)&m_Selected) )
-			{
-				m_Cursor[0]	|= SG_TABLE_REC_FLAG_Selected;
-
-				m_Selected[m_nSelected++]	= iRecord;
-
-				return( true );
-			}
-		}
-		else													// deselect
-		{
-			m_Cursor[0]	&= ~SG_TABLE_REC_FLAG_Selected;
-
-			m_nSelected--;
-
-			for(int i=0; i<m_nSelected; i++)
-			{
-				if( m_Points[iRecord] == m_Points[m_Selected[i]] )
-				{
-					for(; i<m_nSelected; i++)
-					{
-						m_Selected[i]	= m_Selected[i + 1];
-					}
-				}
-			}
-
-			m_Array_Selected.Set_Array(m_nSelected, (void **)&m_Selected);
-
-			return( true );
-		}
-	}
-
-	return( false );
+	return( NULL );
 }
 
 //---------------------------------------------------------
-bool CSG_PointCloud::Select(CSG_Shape *pShape, bool bInvert)
+CSG_Table_Record * CSG_PointCloud::Add_Record(CSG_Table_Record *pCopy)
 {
-	return( false );
+	return( NULL );
 }
 
 //---------------------------------------------------------
-bool CSG_PointCloud::Select(TSG_Rect Extent, bool bInvert)
+CSG_Shape * CSG_PointCloud::Add_Shape(CSG_Table_Record *pCopy, TSG_ADD_Shape_Copy_Mode mCopy)
 {
-	if( !bInvert )	// clear selection
-	{
-		Select(-1, false);
-	}
+	Add_Point(0.0, 0.0, 0.0);
 
-	if( Get_Extent().Intersects(Extent) != INTERSECTION_None )
-	{
-		for(int i=0; i<Get_Count(); i++)
+	if( pCopy && (mCopy == SHAPE_COPY_ATTR || mCopy == SHAPE_COPY) )
+	{
+		for(int iField=0; iField<Get_Field_Count() && iField<pCopy->Get_Table()->Get_Field_Count(); iField++)
 		{
-			Set_Cursor(i);
-
-			if(	Extent.xMin <= Get_X() && Get_X() <= Extent.xMax
-			&&	Extent.yMin <= Get_Y() && Get_Y() <= Extent.yMax )
+			if( Get_Field_Type(iField) == pCopy->Get_Table()->Get_Field_Type(iField) )
 			{
-				Select(i, true);
+				Set_Value(iField, pCopy->asDouble(iField));
 			}
 		}
 	}
 
-	return( m_nSelected > 0 );
+	return( _Set_Shape(Get_Count() - 1) );
 }
-
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
 //---------------------------------------------------------
-bool CSG_PointCloud::Select(TSG_Point Point, bool bInvert)
-{
-	CSG_Rect	r(Point.x, Point.y, Point.x, Point.y);
-
-	return( Select(r.m_rect, bInvert) );
-}
+bool CSG_PointCloud::Select(int iRecord, bool bInvert)
+{
+	if( !bInvert )
+	{
+		for(int i=0; i<m_nSelected; i++)
+		{
+			m_Points[m_Selected[i]][0]	&= ~SG_TABLE_REC_FLAG_Selected;
+		}
+
+		m_Array_Selected.Destroy();
+		m_Selected	= NULL;
+		m_nSelected	= 0;
+	}
+
+	if( Set_Cursor(iRecord) )
+	{
+		if( (m_Cursor[0] & SG_TABLE_REC_FLAG_Selected) == 0 )	// select
+		{
+			if( m_Array_Selected.Set_Array(m_nSelected + 1, (void **)&m_Selected) )
+			{
+				m_Cursor[0]	|= SG_TABLE_REC_FLAG_Selected;
+
+				m_Selected[m_nSelected++]	= iRecord;
+
+				return( true );
+			}
+		}
+		else													// deselect
+		{
+			m_Cursor[0]	&= ~SG_TABLE_REC_FLAG_Selected;
+
+			m_nSelected--;
+
+			for(int i=0; i<m_nSelected; i++)
+			{
+				if( m_Points[iRecord] == m_Points[m_Selected[i]] )
+				{
+					for(; i<m_nSelected; i++)
+					{
+						m_Selected[i]	= m_Selected[i + 1];
+					}
+				}
+			}
+
+			m_Array_Selected.Set_Array(m_nSelected, (void **)&m_Selected);
+
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_PointCloud::Select(CSG_Shape *pShape, bool bInvert)
+{
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_PointCloud::Select(TSG_Rect Extent, bool bInvert)
+{
+	if( !bInvert )	// clear selection
+	{
+		Select(-1, false);
+	}
+
+	if( Get_Extent().Intersects(Extent) != INTERSECTION_None )
+	{
+		for(int i=0; i<Get_Count(); i++)
+		{
+			Set_Cursor(i);
+
+			if(	Extent.xMin <= Get_X() && Get_X() <= Extent.xMax
+			&&	Extent.yMin <= Get_Y() && Get_Y() <= Extent.yMax )
+			{
+				Select(i, true);
+			}
+		}
+	}
+
+	return( m_nSelected > 0 );
+}
+
+//---------------------------------------------------------
+bool CSG_PointCloud::Select(TSG_Point Point, bool bInvert)
+{
+	CSG_Rect	r(Point.x, Point.y, Point.x, Point.y);
+
+	return( Select(r.m_rect, bInvert) );
+}
 
 
 ///////////////////////////////////////////////////////////
@@ -1118,121 +1160,121 @@ bool CSG_PointCloud::Select(TSG_Point Point, bool bInvert)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-bool CSG_PointCloud::is_Selected(int iRecord)	const
-{
+bool CSG_PointCloud::is_Selected(int iRecord)	const
+{
 	return( iRecord >= 0 && iRecord < Get_Count() && (m_Points[iRecord][0] & SG_TABLE_REC_FLAG_Selected) != 0 );
-}
-
+}
+
 
 ///////////////////////////////////////////////////////////
 //														 //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-CSG_Shape * CSG_PointCloud::Get_Selection(int Index)
-{
+CSG_Shape * CSG_PointCloud::Get_Selection(int Index)
+{
 	return( Index >= 0 && Index < m_nSelected ? _Set_Shape(m_Selected[Index]) : NULL );
-}
-
+}
+
 //---------------------------------------------------------
-const CSG_Rect & CSG_PointCloud::Get_Selection_Extent(void)
-{
-	if( m_nSelected > 0 && Set_Cursor(m_Selected[0]) )
-	{
-		TSG_Rect	r;
-
-		r.xMin	= r.xMax	= Get_X();
-		r.yMin	= r.yMax	= Get_Y();
-
-		for(int i=1; i<m_nSelected; i++)
-		{
-			if( Set_Cursor(m_Selected[i]) )
-			{
-				if( Get_X() < r.xMin )	r.xMin	= Get_X();	else if( Get_X() > r.xMax )	r.xMax	= Get_X();
-				if( Get_Y() < r.yMin )	r.yMin	= Get_Y();	else if( Get_Y() > r.yMax )	r.yMax	= Get_Y();
-			}
-		}
-
-		m_Extent_Selected.Assign(r);
-	}
-	else
-	{
-		m_Extent_Selected.Assign(0.0, 0.0, 0.0, 0.0);
-	}
-
-	return( m_Extent_Selected );
-}
-
+const CSG_Rect & CSG_PointCloud::Get_Selection_Extent(void)
+{
+	if( m_nSelected > 0 && Set_Cursor(m_Selected[0]) )
+	{
+		TSG_Rect	r;
+
+		r.xMin	= r.xMax	= Get_X();
+		r.yMin	= r.yMax	= Get_Y();
+
+		for(int i=1; i<m_nSelected; i++)
+		{
+			if( Set_Cursor(m_Selected[i]) )
+			{
+				if( Get_X() < r.xMin )	r.xMin	= Get_X();	else if( Get_X() > r.xMax )	r.xMax	= Get_X();
+				if( Get_Y() < r.yMin )	r.yMin	= Get_Y();	else if( Get_Y() > r.yMax )	r.yMax	= Get_Y();
+			}
+		}
+
+		m_Extent_Selected.Assign(r);
+	}
+	else
+	{
+		m_Extent_Selected.Assign(0.0, 0.0, 0.0, 0.0);
+	}
+
+	return( m_Extent_Selected );
+}
+
 
 ///////////////////////////////////////////////////////////
 //														 //
 ///////////////////////////////////////////////////////////
 
-//---------------------------------------------------------
-int CSG_PointCloud::Del_Selection(void)
-{
-	if( m_nSelected <= 0 )
-	{
-		return( 0 );
-	}
-
-	//-----------------------------------------------------
-	int		i, n;
-
-	m_Array_Selected.Set_Array(0, (void **)&m_Selected);
-	m_nSelected	= 0;
+//---------------------------------------------------------
+int CSG_PointCloud::Del_Selection(void)
+{
+	if( m_nSelected <= 0 )
+	{
+		return( 0 );
+	}
+
+	//-----------------------------------------------------
+	int		i, n;
+
+	m_Array_Selected.Set_Array(0, (void **)&m_Selected);
+	m_nSelected	= 0;
 	m_Cursor	= NULL;
-
-	for(i=0, n=0; i<m_nRecords; i++)
-	{
-		if( (m_Points[i][0] & SG_TABLE_REC_FLAG_Selected) != 0 )
-		{
+
+	for(i=0, n=0; i<m_nRecords; i++)
+	{
+		if( (m_Points[i][0] & SG_TABLE_REC_FLAG_Selected) != 0 )
+		{
 			SG_Free(m_Points[i]);
-		}
-		else
-		{
-			if( n < i )
-			{
-				m_Points[n]	= m_Points[i];
-			}
-
-			n++;
-		}
-	}
-
+		}
+		else
+		{
+			if( n < i )
+			{
+				m_Points[n]	= m_Points[i];
+			}
+
+			n++;
+		}
+	}
+
 	m_Array_Points.Set_Array(m_nRecords = n, (void **)&m_Points);
-
-	return( n );
-}
-
-//---------------------------------------------------------
-int CSG_PointCloud::Inv_Selection(void)
-{
-	char	**pPoint;
-	int		i, n;
-
-	n	= m_nRecords - m_nSelected;
-
-	if( m_Array_Selected.Set_Array(n, (void **)&m_Selected) )
-	{
-		for(i=0, m_nSelected=0, pPoint=m_Points; i<m_nRecords; i++, pPoint++)
-		{
-			if( ((*pPoint)[0] & SG_TABLE_REC_FLAG_Selected) != 0 && m_nSelected < n )
-			{
-				m_Selected[m_nSelected++]	= i;
-
-				(*pPoint)[0]	|= SG_TABLE_REC_FLAG_Selected;
-			}
-			else
-			{
-				(*pPoint)[0]	&= ~SG_TABLE_REC_FLAG_Selected;
-			}
-		}
-	}
-
-	return( m_nSelected );
-}
-
+
+	return( n );
+}
+
+//---------------------------------------------------------
+int CSG_PointCloud::Inv_Selection(void)
+{
+	char	**pPoint;
+	int		i, n;
+
+	n	= m_nRecords - m_nSelected;
+
+	if( m_Array_Selected.Set_Array(n, (void **)&m_Selected) )
+	{
+		for(i=0, m_nSelected=0, pPoint=m_Points; i<m_nRecords; i++, pPoint++)
+		{
+			if( ((*pPoint)[0] & SG_TABLE_REC_FLAG_Selected) == 0 && m_nSelected < n )
+			{
+				m_Selected[m_nSelected++]	= i;
+
+				(*pPoint)[0]	|= SG_TABLE_REC_FLAG_Selected;
+			}
+			else
+			{
+				(*pPoint)[0]	&= ~SG_TABLE_REC_FLAG_Selected;
+			}
+		}
+	}
+
+	return( m_nSelected );
+}
+
 
 ///////////////////////////////////////////////////////////
 //														 //
diff --git a/src/saga_core/saga_api/pointcloud.h b/src/saga_core/saga_api/pointcloud.h
index 14ac779..7aab18e 100644
--- a/src/saga_core/saga_api/pointcloud.h
+++ b/src/saga_core/saga_api/pointcloud.h
@@ -139,8 +139,8 @@ public:
 	double							Get_Z				(void)			const		{	return( _Get_Field_Value(m_Cursor, 2) );				}
 	bool							Set_Attribute		(int iField, double Value)	{	return( Set_Value(iField + 3, Value) );					}
 	double							Get_Attribute		(int iField)	const		{	return( Get_Value(iField + 3) );						}
-	bool							Set_NoData			(int iField)				{	return( Set_Attribute(iField, m_NoData_Value) );		}
-	bool							is_NoData			(int iField)	const		{	return( Get_Attribute(iField) == m_NoData_Value );		}
+	bool							Set_NoData			(int iField)				{	return( Set_Attribute(iField, Get_NoData_Value()) );	}
+	bool							is_NoData			(int iField)	const		{	return( is_NoData_Value(Get_Attribute(iField)) );		}
 
 	virtual bool					Set_Value			(int iPoint, int iField, double Value)	{	return( _Set_Field_Value(iPoint >= 0 && iPoint < m_nRecords ? m_Points[iPoint] : NULL, iField, Value) );	}
 	virtual double					Get_Value			(int iPoint, int iField)	const		{	return( _Get_Field_Value(iPoint >= 0 && iPoint < m_nRecords ? m_Points[iPoint] : NULL, iField) );		}
@@ -149,8 +149,8 @@ public:
 	double							Get_Z				(int iPoint)				const		{	return( _Get_Field_Value(iPoint >= 0 && iPoint < m_nRecords ? m_Points[iPoint] : NULL, 2) );				}
 	bool							Set_Attribute		(int iPoint, int iField, double Value)	{	return( Set_Value(iPoint, iField + 3, Value) );				}
 	double							Get_Attribute		(int iPoint, int iField)	const		{	return( Get_Value(iPoint, iField + 3) );					}
-	bool							Set_NoData			(int iPoint, int iField)				{	return( Set_Attribute(iPoint, iField, m_NoData_Value) );	}
-	bool							is_NoData			(int iPoint, int iField)	const		{	return( Get_Attribute(iPoint, iField) == m_NoData_Value );	}
+	bool							Set_NoData			(int iPoint, int iField)				{	return( Set_Attribute(iPoint, iField, Get_NoData_Value()) );}
+	bool							is_NoData			(int iPoint, int iField)	const		{	return( is_NoData_Value(Get_Attribute(iPoint, iField)) );	}
 
 	virtual bool					Set_Value			(int iPoint, int iField, const SG_Char *Value);
 	virtual bool					Get_Value			(int iPoint, int iField, CSG_String    &Value)	const;
@@ -158,9 +158,6 @@ public:
 	TSG_Point_Z						Get_Point			(void)			const;
 	TSG_Point_Z						Get_Point			(int iPoint)	const;
 
-	double							Get_NoData_Value	(void)			const		{	return( m_NoData_Value );	}
-	bool							Set_NoData_Value	(double NoData_Value);
-
 	virtual void					Set_Modified		(bool bModified = true)		{	CSG_Data_Object::Set_Modified(bModified);	}
 
 
@@ -176,9 +173,9 @@ public:
 	virtual bool					Del_Records			(void)			{	return( Del_Points() );			}
 	virtual bool					Del_Shapes			(void)			{	return( Del_Points() );			}
 
-	virtual CSG_Table_Record *		Ins_Record			(int iRecord, CSG_Table_Record *pCopy = NULL)	{	return( NULL );	}
-	virtual CSG_Table_Record *		Add_Record			(             CSG_Table_Record *pCopy = NULL)	{	return( NULL );	}
-	virtual CSG_Shape *				Add_Shape			(             CSG_Table_Record *pCopy = NULL, TSG_ADD_Shape_Copy_Mode mCopy = SHAPE_COPY)	{	return( NULL );	}
+	virtual CSG_Table_Record *		Ins_Record			(int iRecord, CSG_Table_Record *pCopy = NULL);
+	virtual CSG_Table_Record *		Add_Record			(             CSG_Table_Record *pCopy = NULL);
+	virtual CSG_Shape *				Add_Shape			(             CSG_Table_Record *pCopy = NULL, TSG_ADD_Shape_Copy_Mode mCopy = SHAPE_COPY);
 	virtual bool					Del_Shape			(CSG_Shape *pShape)	{	return( false );	}
 
 	virtual bool					Select				(int iRecord             , bool bInvert = false);
@@ -198,6 +195,8 @@ protected:
 
 	virtual bool					On_Update			(void);
 
+	virtual bool					On_NoData_Changed	(void);
+
 	virtual void					_On_Construction	(void);
 
 	virtual bool					_Stats_Update		(int iField)	const;
@@ -211,8 +210,6 @@ private:
 
 	int								m_nPointBytes, *m_Field_Offset, m_Shapes_Index, *m_Selected;
 
-	double							m_NoData_Value;
-
 	CSG_Array						m_Array_Points, m_Array_Selected;
 
 	CSG_Shapes						m_Shapes;
diff --git a/src/saga_core/saga_api/projections.cpp b/src/saga_core/saga_api/projections.cpp
index d069fa6..3b448ef 100644
--- a/src/saga_core/saga_api/projections.cpp
+++ b/src/saga_core/saga_api/projections.cpp
@@ -1,591 +1,1752 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//           Application Programming Interface           //
-//                                                       //
-//                  Library: SAGA_API                    //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    projections.cpp                    //
-//                                                       //
-//          Copyright (C) 2009 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'.                              //
-//                                                       //
-// This library is free software; you can redistribute   //
-// it and/or modify it under the terms of the GNU Lesser //
-// General Public License as published by the Free       //
-// Software Foundation, version 2.1 of the License.      //
-//                                                       //
-// This library 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 Lesser General Public //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU Lesser     //
-// 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.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Hamburg                  //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "geo_tools.h"
-
-#include "table.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Projections		gSG_Projections;
-
-//---------------------------------------------------------
-CSG_Projections &	SG_Get_Projections(void)
-{
-	return( gSG_Projections );
-}
-
-//---------------------------------------------------------
-CSG_String			SG_Get_Projection_Type_Name(TSG_Projection_Type Type)
-{
-	switch( Type )
-	{
-	default:
-	case SG_PROJ_TYPE_CS_Undefined:		return( LNG("Undefined Coordinate System") );
-	case SG_PROJ_TYPE_CS_Projected:		return( LNG("Projected Coordinate System") );
-	case SG_PROJ_TYPE_CS_Geographic:	return( LNG("Geographic Coordinate System") );
-	case SG_PROJ_TYPE_CS_Geocentric:	return( LNG("Geocentric Coordinate System") );
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Projection::CSG_Projection(void)
-{
-	_Reset();
-}
-
-CSG_Projection::~CSG_Projection(void)
-{}
-
-//---------------------------------------------------------
-CSG_Projection::CSG_Projection(const CSG_Projection &Projection)
-{
-	_Reset();
-
-	Create(Projection);
-}
-
-bool CSG_Projection::Create(const CSG_Projection &Projection)
-{
-	return( Assign(Projection) );
-}
-
-bool CSG_Projection::Assign(const CSG_Projection &Projection)
-{
-	m_Name		= Projection.m_Name;
-	m_Type		= Projection.m_Type;
-	m_WKT		= Projection.m_WKT;
-	m_Proj4		= Projection.m_Proj4;
-	m_EPSG		= Projection.m_EPSG;
-
-	return( true );
-}
-
-//---------------------------------------------------------
-CSG_Projection::CSG_Projection(int EPSG_SRID)
-{
-	_Reset();
-
-	Create(EPSG_SRID);
-}
-
-bool CSG_Projection::Create(int EPSG_SRID)
-{
-	return( Assign(EPSG_SRID) );
-}
-
-bool CSG_Projection::Assign(int EPSG_SRID)
-{
-	return( Assign(CSG_String::Format(SG_T("%d"), EPSG_SRID), SG_PROJ_FMT_EPSG) );
-}
-
-//---------------------------------------------------------
-CSG_Projection::CSG_Projection(const CSG_String &Projection, TSG_Projection_Format Format)
-{
-	_Reset();
-
-	Create(Projection, Format);
-}
-
-bool CSG_Projection::Create(const CSG_String &Projection, TSG_Projection_Format Format)
-{
-	return( Assign(Projection, Format) );
-}
-
-bool CSG_Projection::Assign(const CSG_String &Projection, TSG_Projection_Format Format)
-{
-	_Reset();
-
-	switch( Format )
-	{
-	default:
-		return( false );
-
-	case SG_PROJ_FMT_WKT:
-		if( !gSG_Projections.WKT_to_Proj4(m_Proj4, Projection) )
-		{
-			return( false );
-		}
-
-		m_WKT	= Projection;
-
-		break;
-
-	case SG_PROJ_FMT_Proj4:
-		if( !gSG_Projections.WKT_to_Proj4(m_WKT  , Projection) )
-		{
-			return( false );
-		}
-
-		m_Proj4	= Projection;
-
-		break;
-
-	case SG_PROJ_FMT_EPSG:
-		if( !Projection.asInt(m_EPSG) || !gSG_Projections.Get_Projection(m_EPSG, *this) )
-		{
-			return( false );
-		}
-		break;
-	}
-
-	m_Name	= m_WKT.AfterFirst(SG_T('\"')).BeforeFirst(SG_T('\"'));
-
-	if(      m_WKT.Make_Upper().Find(SG_T("GEOGCS")) >= 0 )
-	{
-		m_Type	= SG_PROJ_TYPE_CS_Geographic;
-	}
-	else if( m_WKT.Make_Upper().Find(SG_T("PROJCS")) >= 0 )
-	{
-		m_Type	= SG_PROJ_TYPE_CS_Projected;
-	}
-	else
-	{
-		m_Type	= SG_PROJ_TYPE_CS_Geocentric;
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-void CSG_Projection::_Reset(void)
-{
-	m_Name		= LNG("undefined");
-	m_Type		= SG_PROJ_TYPE_CS_Undefined;
-	m_WKT		.Clear();
-	m_Proj4		.Clear();
-	m_EPSG		= -1;
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Projection::Load(const CSG_String &File_Name, TSG_Projection_Format Format)
-{
-	CSG_File	Stream;
-	CSG_String	s;
-
-	if( Stream.Open(File_Name, SG_FILE_R, false) )
-	{
-		Stream.Read(s, Stream.Length());
-
-		return( Assign(s, Format) );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Projection::Save(const CSG_String &File_Name, TSG_Projection_Format Format) const
-{
-	if( is_Okay() )
-	{
-		CSG_File	Stream;
-
-		switch( Format )
-		{
-		default:
-			break;
-
-		case SG_PROJ_FMT_WKT:
-			if( Stream.Open(File_Name, SG_FILE_W, false) )
-			{
-				Stream.Write((void *)m_WKT.c_str(), m_WKT.Length());
-
-				return( true );
-			}
-			break;
-
-		case SG_PROJ_FMT_Proj4:
-			if( Stream.Open(File_Name, SG_FILE_W, false) )
-			{
-				Stream.Write((void *)m_Proj4.c_str(), m_Proj4.Length());
-
-				return( true );
-			}
-			break;
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Projection::Load(const CSG_MetaData &Projection)
-{
-	CSG_MetaData	*pEntry;
-
-	if( (pEntry = Projection.Get_Child(SG_T("OGC_WKT"))) != NULL )
-	{
-		Assign(pEntry->Get_Content(), SG_PROJ_FMT_WKT);
-
-		if( (pEntry = Projection.Get_Child(SG_T("PROJ4"))) != NULL )
-		{
-			m_Proj4	= pEntry->Get_Content();
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Projection::Save(CSG_MetaData &Projection) const
-{
-	Projection.Add_Child(SG_T("OGC_WKT"), m_WKT  );
-	Projection.Add_Child(SG_T("PROJ4")  , m_Proj4);
-	Projection.Add_Child(SG_T("EPSG")   , m_EPSG );
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Projection::is_Equal(const CSG_Projection &Projection)	const
-{
-	return(	m_Proj4 == Projection.m_Proj4 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-enum ESG_PROJ_FIELD_ID
-{
-	PRJ_FIELD_SRID		= 0,
-	PRJ_FIELD_AUTH_NAME,
-	PRJ_FIELD_AUTH_SRID,
-	PRJ_FIELD_SRTEXT,
-	PRJ_FIELD_PROJ4TEXT
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Projections::CSG_Projections(void)
-{
-	_On_Construction();
-}
-
-//---------------------------------------------------------
-CSG_Projections::CSG_Projections(const CSG_String &File_Name)
-{
-	_On_Construction();
-
-	Create(File_Name);
-}
-
-bool CSG_Projections::Create(const CSG_String &File_Name)
-{
-	CSG_Table	Projections(File_Name);
-
-	return( Create(&Projections) );
-}
-
-//---------------------------------------------------------
-CSG_Projections::CSG_Projections(CSG_Table *pProjections)
-{
-	_On_Construction();
-
-	Create(pProjections);
-}
-
-bool CSG_Projections::Create(CSG_Table *pProjections)
-{
-	Destroy();
-
-	if( !pProjections )
-	{
-		return( false );
-	}
-
-	for(int i=0; i<pProjections->Get_Count() && SG_UI_Process_Set_Progress(i, pProjections->Get_Count()); i++)
-	{
-		m_pProjections->Add_Record(pProjections->Get_Record(i));
-	}
-
-	return( Get_Count() > 0 );
-}
-
-//---------------------------------------------------------
-void CSG_Projections::_On_Construction(void)
-{
-	m_pProjections	= new CSG_Table;
-
-	m_pProjections->Add_Field(SG_T("srid")		, SG_DATATYPE_Int);
-	m_pProjections->Add_Field(SG_T("auth_name")	, SG_DATATYPE_String);
-	m_pProjections->Add_Field(SG_T("auth_srid")	, SG_DATATYPE_Int);
-	m_pProjections->Add_Field(SG_T("srtext")	, SG_DATATYPE_String);
-	m_pProjections->Add_Field(SG_T("proj4text")	, SG_DATATYPE_String);
-}
-
-//---------------------------------------------------------
-CSG_Projections::~CSG_Projections(void)
-{
-	Destroy();
-
-	delete(m_pProjections);
-}
-
-//---------------------------------------------------------
-void CSG_Projections::Destroy(void)
-{
-	if( m_pProjections )
-	{
-		m_pProjections->Del_Records();
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Projections::Load(const CSG_String &File_Name)
-{
-	return( Create(File_Name) );
-}
-
-//---------------------------------------------------------
-bool CSG_Projections::Save(const CSG_String &File_Name)
-{
-	CSG_Table	Table;
-
-/*	Table.Add_Field(SG_T("srid")		, SG_DATATYPE_Int);
-	Table.Add_Field(SG_T("auth_name")	, SG_DATATYPE_String);
-	Table.Add_Field(SG_T("auth_srid")	, SG_DATATYPE_Int);
-	Table.Add_Field(SG_T("srtext")		, SG_DATATYPE_String);
-	Table.Add_Field(SG_T("proj4text")	, SG_DATATYPE_String);
-
-	for(int i=0; i<Get_Count() && SG_UI_Process_Set_Progress(i, Get_Count()); i++)
-	{
-		CSG_Table_Record	*pRecord	= Table.Add_Record();
-
-		pRecord->Set_Value(PRJ_FIELD_SRID		, Table.Get_Count());
-		pRecord->Set_Value(PRJ_FIELD_AUTH_NAME	, m_pProjections[i]->Get_EPSG() > 0 ? SG_T("EPSG") : SG_T(""));
-		pRecord->Set_Value(PRJ_FIELD_AUTH_SRID	, m_pProjections[i]->Get_EPSG());
-		pRecord->Set_Value(PRJ_FIELD_SRTEXT		, m_pProjections[i]->Get_WKT());
-		pRecord->Set_Value(PRJ_FIELD_PROJ4TEXT	, m_pProjections[i]->Get_Proj4());
-	}
-/**/
-	return( Table.Save(File_Name) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int CSG_Projections::Get_Count(void) const
-{
-	return( m_pProjections->Get_Count() );
-}
-
-//---------------------------------------------------------
-bool CSG_Projections::Add(const CSG_Projection &Projection)
-{
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CSG_Projections::Add(int SRID, const SG_Char *Authority, const SG_Char *WKT, const SG_Char *Proj4)
-{
-	CSG_Table_Record	*pProjection	= m_pProjections->Add_Record();
-
-	pProjection->Set_Value(SG_T("srid")     , SRID);
-	pProjection->Set_Value(SG_T("auth_name"), Authority);
-	pProjection->Set_Value(SG_T("auth_srid"), SRID);
-	pProjection->Set_Value(SG_T("srtext")   , WKT);
-	pProjection->Set_Value(SG_T("proj4text"), Proj4);
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_String CSG_Projections::Get_Names(void) const
-{
-	CSG_String	Names, WKT, Type;
-
-	m_pProjections->Set_Index(PRJ_FIELD_SRTEXT, TABLE_INDEX_Ascending);
-
-	for(int i=0; i<Get_Count(); i++)
-	{
-		WKT	= m_pProjections->Get_Record_byIndex(i)->asString(PRJ_FIELD_SRTEXT);
-
-		     if( !WKT.BeforeFirst('[').Cmp(SG_T("PROJCS")) )
-		{
-			Type	= SG_Get_Projection_Type_Name(SG_PROJ_TYPE_CS_Projected);
-		}
-		else if( !WKT.BeforeFirst('[').Cmp(SG_T("GEOGCS")) )
-		{
-			Type	= SG_Get_Projection_Type_Name(SG_PROJ_TYPE_CS_Geographic);
-		}
-		else // if( !WKT.BeforeFirst('[').Cmp(SG_T("GEOCCS")) )
-		{
-			Type	= SG_Get_Projection_Type_Name(SG_PROJ_TYPE_CS_Geocentric);
-		}
-
-		Names	+= CSG_String::Format(SG_T("[%s] %s|"), Type.c_str(), WKT.AfterFirst('\"').BeforeFirst('\"').c_str());
-	}
-
-	return( Names );
-}
-
-//---------------------------------------------------------
-int CSG_Projections::Get_SRID_byNamesIndex(int i) const
-{
-	if( i >= 0 && i < Get_Count() )
-	{
-		m_pProjections->Set_Index(PRJ_FIELD_SRTEXT, TABLE_INDEX_Ascending);
-
-		return( m_pProjections->Get_Record_byIndex(i)->asInt(PRJ_FIELD_SRID) );
-	}
-
-	return( -1 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CSG_Projections::WKT_to_Proj4(CSG_String &Proj4, const CSG_String &WKT)
-{
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CSG_Projections::WKT_from_Proj4(CSG_String &Projection, const CSG_String &Proj4)
-{
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-// obsolete: to be removed...
-
-const CSG_Projection & CSG_Projections::Get_Projection(int i)	const
-{
-	static CSG_Projection	p;
-
-	return( p );
-}
-
-const CSG_Projection & CSG_Projections::operator []	(int i) const
-{
-	return( Get_Projection(i) );
-}
-
-//---------------------------------------------------------
-bool CSG_Projections::Get_Projection(int EPSG, CSG_Projection &Projection)	const
-{
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//           Application Programming Interface           //
+//                                                       //
+//                  Library: SAGA_API                    //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    projections.cpp                    //
+//                                                       //
+//          Copyright (C) 2009 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'.                              //
+//                                                       //
+// This library is free software; you can redistribute   //
+// it and/or modify it under the terms of the GNU Lesser //
+// General Public License as published by the Free       //
+// Software Foundation, version 2.1 of the License.      //
+//                                                       //
+// This library 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 Lesser General Public //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU Lesser     //
+// 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.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "geo_tools.h"
+
+#include "table.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Projections		gSG_Projections;
+
+//---------------------------------------------------------
+CSG_Projections &	SG_Get_Projections(void)
+{
+	return( gSG_Projections );
+}
+
+//---------------------------------------------------------
+CSG_String			SG_Get_Projection_Type_Name(TSG_Projection_Type Type)
+{
+	switch( Type )
+	{
+	default:
+	case SG_PROJ_TYPE_CS_Undefined:		return( LNG("Undefined Coordinate System") );
+	case SG_PROJ_TYPE_CS_Projected:		return( LNG("Projected Coordinate System") );
+	case SG_PROJ_TYPE_CS_Geographic:	return( LNG("Geographic Coordinate System") );
+	case SG_PROJ_TYPE_CS_Geocentric:	return( LNG("Geocentric Coordinate System") );
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Projection::CSG_Projection(void)
+{
+	Destroy();
+}
+
+CSG_Projection::~CSG_Projection(void)
+{}
+
+//---------------------------------------------------------
+CSG_Projection::CSG_Projection(const CSG_Projection &Projection)
+{
+	Destroy();
+
+	Create(Projection);
+}
+
+bool CSG_Projection::Create(const CSG_Projection &Projection)
+{
+	return( Assign(Projection) );
+}
+
+bool CSG_Projection::Assign(const CSG_Projection &Projection)
+{
+	m_Name			= Projection.m_Name;
+	m_Type			= Projection.m_Type;
+	m_WKT			= Projection.m_WKT;
+	m_Proj4			= Projection.m_Proj4;
+	m_Authority		= Projection.m_Authority;
+	m_Authority_ID	= Projection.m_Authority_ID;
+
+	return( true );
+}
+
+//---------------------------------------------------------
+CSG_Projection::CSG_Projection(int EPSG_SRID)
+{
+	Destroy();
+
+	Create(EPSG_SRID);
+}
+
+bool CSG_Projection::Create(int EPSG_SRID)
+{
+	return( Assign(EPSG_SRID) );
+}
+
+bool CSG_Projection::Assign(int EPSG_SRID)
+{
+	return( Assign(CSG_String::Format(SG_T("%d"), EPSG_SRID), SG_PROJ_FMT_EPSG) );
+}
+
+//---------------------------------------------------------
+CSG_Projection::CSG_Projection(const CSG_String &Projection, TSG_Projection_Format Format)
+{
+	Destroy();
+
+	Create(Projection, Format);
+}
+
+bool CSG_Projection::Create(const CSG_String &Projection, TSG_Projection_Format Format)
+{
+	return( Assign(Projection, Format) );
+}
+
+bool CSG_Projection::Assign(const CSG_String &Projection, TSG_Projection_Format Format)
+{
+	int				i;
+	CSG_String		s;
+	CSG_MetaData	m;
+
+	Destroy();
+
+	switch( Format )
+	{
+	default:
+		return( false );
+
+	case SG_PROJ_FMT_EPSG:
+		return( Projection.asInt(i) && gSG_Projections.Get_Projection(*this, i) );
+
+	case SG_PROJ_FMT_Proj4:
+		if( !gSG_Projections.WKT_from_Proj4(s, Projection) )
+		{
+			return( false );
+		}
+
+		m_WKT	= s;
+		m_Proj4	= Projection;
+
+		m		= gSG_Projections.WKT_to_MetaData(m_WKT);
+
+		break;
+
+	case SG_PROJ_FMT_WKT:
+		m		= gSG_Projections.WKT_to_MetaData(Projection);
+
+		if(	m.Get_Property("authority_name", s) && s.CmpNoCase(SG_T("EPSG")) == 0
+		&&	m.Get_Property("authority_code", i) && gSG_Projections.Get_Projection(*this, i) )
+		{
+			return( true );
+		}
+
+		if( gSG_Projections.WKT_to_Proj4(s, Projection) )
+		{
+			m_Proj4	= s;
+		}
+
+		m_WKT	= Projection;
+
+		break;
+	}
+
+	//-----------------------------------------------------
+	m_Name	= m.Get_Property("name");
+	m_Type	= !m.Get_Name().Cmp(SG_T("GEOCCS")) ? SG_PROJ_TYPE_CS_Geocentric
+			: !m.Get_Name().Cmp(SG_T("GEOGCS")) ? SG_PROJ_TYPE_CS_Geographic
+			: !m.Get_Name().Cmp(SG_T("PROJCS")) ? SG_PROJ_TYPE_CS_Projected
+			: SG_PROJ_TYPE_CS_Undefined;
+
+	return( true );
+}
+
+//---------------------------------------------------------
+void CSG_Projection::Destroy(void)
+{
+	m_Name			= LNG("undefined");
+	m_Type			= SG_PROJ_TYPE_CS_Undefined;
+	m_WKT			.Clear();
+	m_Proj4			.Clear();
+	m_Authority		.Clear();
+	m_Authority_ID	= -1;
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Projection::Load(const CSG_String &File_Name, TSG_Projection_Format Format)
+{
+	CSG_File	Stream;
+	CSG_String	s;
+
+	if( Stream.Open(File_Name, SG_FILE_R, false) )
+	{
+		Stream.Read(s, Stream.Length());
+
+		return( Assign(s, Format) );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Projection::Save(const CSG_String &File_Name, TSG_Projection_Format Format) const
+{
+	if( is_Okay() )
+	{
+		CSG_File	Stream;
+
+		switch( Format )
+		{
+		default:
+			break;
+
+		case SG_PROJ_FMT_WKT:
+			if( Stream.Open(File_Name, SG_FILE_W, false) )
+			{
+				Stream.Write((void *)m_WKT.c_str(), m_WKT.Length());
+
+				return( true );
+			}
+			break;
+
+		case SG_PROJ_FMT_Proj4:
+			if( Stream.Open(File_Name, SG_FILE_W, false) )
+			{
+				Stream.Write((void *)m_Proj4.c_str(), m_Proj4.Length());
+
+				return( true );
+			}
+			break;
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Projection::Load(const CSG_MetaData &Projection)
+{
+	CSG_MetaData	*pEntry;
+
+	if( (pEntry = Projection.Get_Child(SG_T("OGC_WKT"))) != NULL )
+	{
+		Assign(pEntry->Get_Content(), SG_PROJ_FMT_WKT);
+
+		if( (pEntry = Projection.Get_Child(SG_T("PROJ4"))) != NULL )
+		{
+			m_Proj4	= pEntry->Get_Content();
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Projection::Save(CSG_MetaData &Projection) const
+{
+	Projection.Add_Child(SG_T("OGC_WKT"), m_WKT  );
+	Projection.Add_Child(SG_T("PROJ4")  , m_Proj4);
+	Projection.Add_Child(SG_T("EPSG")   , Get_EPSG() );
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Projection::is_Equal(const CSG_Projection &Projection)	const
+{
+	return(	(!m_Authority.CmpNoCase(Projection.m_Authority) && m_Authority_ID == Projection.m_Authority_ID)
+		||	(!m_Proj4    .CmpNoCase(Projection.m_Proj4))
+	);
+}
+
+//---------------------------------------------------------
+CSG_String CSG_Projection::Get_Description(void)	const
+{
+	CSG_String	s;
+
+	s	= SG_Get_Projection_Type_Name(m_Type);
+
+	if( is_Okay() )
+	{
+		if( m_Authority.Length() > 0 && m_Authority_ID > 0 )
+		{
+			s	+= CSG_String::Format(SG_T(" [%s %d]"), m_Authority.c_str(), m_Authority_ID);
+		}
+
+		s	+= SG_T(":\n") + m_Name;
+
+		if( m_Proj4.Length() > 0 )
+		{
+			s	+= CSG_String::Format(SG_T("\n[%s]"), m_Proj4.c_str());
+		}
+	}
+
+	return( s );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+enum ESG_PROJ_FIELD_ID
+{
+	PRJ_FIELD_SRID		= 0,
+	PRJ_FIELD_AUTH_NAME,
+	PRJ_FIELD_AUTH_SRID,
+	PRJ_FIELD_SRTEXT,
+	PRJ_FIELD_PROJ4TEXT
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Projections::CSG_Projections(void)
+{
+	_On_Construction();
+}
+
+//---------------------------------------------------------
+CSG_Projections::CSG_Projections(const CSG_String &File_DB)
+{
+	_On_Construction();
+
+	Create(File_DB);
+}
+
+bool CSG_Projections::Create(const CSG_String &File_DB)
+{
+	SG_UI_Msg_Lock(true);
+
+	bool	bResult	= Load_DB(File_DB);
+
+	SG_UI_Msg_Lock(false);
+
+	return( bResult );
+}
+
+//---------------------------------------------------------
+void CSG_Projections::_On_Construction(void)
+{
+	m_pProjections	= new CSG_Table;
+
+	m_pProjections->Add_Field(SG_T("srid")		, SG_DATATYPE_Int);		// PRJ_FIELD_SRID
+	m_pProjections->Add_Field(SG_T("auth_name")	, SG_DATATYPE_String);	// PRJ_FIELD_AUTH_NAME
+	m_pProjections->Add_Field(SG_T("auth_srid")	, SG_DATATYPE_Int);		// PRJ_FIELD_AUTH_SRID
+	m_pProjections->Add_Field(SG_T("srtext")	, SG_DATATYPE_String);	// PRJ_FIELD_SRTEXT
+	m_pProjections->Add_Field(SG_T("proj4text")	, SG_DATATYPE_String);	// PRJ_FIELD_PROJ4TEXT
+
+	Reset_Dictionary();
+}
+
+//---------------------------------------------------------
+CSG_Projections::~CSG_Projections(void)
+{
+	Destroy();
+
+	delete(m_pProjections);
+}
+
+//---------------------------------------------------------
+void CSG_Projections::Destroy(void)
+{
+	if( m_pProjections )
+	{
+		m_pProjections->Del_Records();
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Projections::Reset_Dictionary(void)
+{
+	_Set_Dictionary(m_Proj4_to_WKT,  1);
+	_Set_Dictionary(m_WKT_to_Proj4, -1);
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::Load_Dictionary(const CSG_String &File_Name)
+{
+	CSG_Table	Table;
+
+	if( SG_File_Exists(File_Name) && Table.Create(File_Name) && Table.Get_Field_Count() >= 3 )
+	{
+		CSG_Table	Proj4_to_WKT(&Table), WKT_to_Proj4(&Table);
+
+		for(int i=0; i<Table.Get_Count(); i++)
+		{
+			switch( Table[i].asString(1)[0] )
+			{
+			case SG_T('<'):	// ignore proj4 to wkt translation
+				WKT_to_Proj4.Add_Record(Table.Get_Record(i));
+				break;
+
+			case SG_T('>'):	// ignore wkt to proj4 translation
+				Proj4_to_WKT.Add_Record(Table.Get_Record(i));
+				break;
+
+			default:
+				Proj4_to_WKT.Add_Record(Table.Get_Record(i));
+				WKT_to_Proj4.Add_Record(Table.Get_Record(i));
+			}
+		}
+
+		m_Proj4_to_WKT.Create(&Proj4_to_WKT, 0, 2, true);
+		m_WKT_to_Proj4.Create(&WKT_to_Proj4, 2, 0, true);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::Save_Dictionary(const CSG_String &File_Name)
+{
+	CSG_Table	Table;
+
+	return( _Set_Dictionary(Table, 0) && Table.Save(File_Name) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Projections::Load_DB(const CSG_String &File_Name, bool bAppend)
+{
+	CSG_Table	Table;
+
+	if( SG_File_Exists(File_Name) && Table.Create(File_Name) )
+	{
+		if( !bAppend )
+		{
+			Destroy();
+		}
+
+		Table.Set_Index(PRJ_FIELD_SRTEXT, TABLE_INDEX_Ascending);
+
+		for(int i=0; i<Table.Get_Count() && SG_UI_Process_Set_Progress(i, Table.Get_Count()); i++)
+		{
+			m_pProjections->Add_Record(Table.Get_Record_byIndex(i));
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::Save_DB(const CSG_String &File_Name)
+{
+	return( m_pProjections->Save(File_Name) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CSG_Projections::Get_Count(void) const
+{
+	return( m_pProjections->Get_Count() );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::Add(const CSG_Projection &Projection)
+{
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::Add(const SG_Char *WKT, const SG_Char *Proj4, const SG_Char *Authority, int Authority_ID)
+{
+	CSG_Table_Record	*pProjection	= m_pProjections->Add_Record();
+
+	pProjection->Set_Value(PRJ_FIELD_SRID     , m_pProjections->Get_Count());
+	pProjection->Set_Value(PRJ_FIELD_AUTH_NAME, Authority);
+	pProjection->Set_Value(PRJ_FIELD_AUTH_SRID, Authority_ID);
+	pProjection->Set_Value(PRJ_FIELD_SRTEXT   , WKT);
+	pProjection->Set_Value(PRJ_FIELD_PROJ4TEXT, Proj4);
+
+	return( true );
+}
+
+//---------------------------------------------------------
+CSG_Projection CSG_Projections::Get_Projection(int Index)	const
+{
+	CSG_Projection	Projection;
+
+	if( Index >= 0 && Index < m_pProjections->Get_Count() )
+	{
+		CSG_Table_Record	*pRecord	= m_pProjections->Get_Record(Index);
+
+		Projection.m_Authority		= pRecord->asString(PRJ_FIELD_AUTH_NAME);
+		Projection.m_Authority_ID	= pRecord->asInt   (PRJ_FIELD_AUTH_SRID);
+		Projection.m_WKT			= pRecord->asString(PRJ_FIELD_SRTEXT   );
+		Projection.m_Proj4			= pRecord->asString(PRJ_FIELD_PROJ4TEXT);
+
+		CSG_MetaData	m	= WKT_to_MetaData(Projection.m_WKT);
+
+		Projection.m_Name	= m.Get_Property("name");
+		Projection.m_Type	= !m.Get_Name().Cmp(SG_T("GEOCCS")) ? SG_PROJ_TYPE_CS_Geocentric
+							: !m.Get_Name().Cmp(SG_T("GEOGCS")) ? SG_PROJ_TYPE_CS_Geographic
+							: !m.Get_Name().Cmp(SG_T("PROJCS")) ? SG_PROJ_TYPE_CS_Projected
+							: SG_PROJ_TYPE_CS_Undefined;
+	}
+
+	return( Projection );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::Get_Projection(CSG_Projection &Projection, int EPSG_ID)	const
+{
+	return( Get_Projection(Projection, SG_T("EPSG"), EPSG_ID) );
+}
+
+bool CSG_Projections::Get_Projection(CSG_Projection &Projection, const CSG_String &Authority, int Authority_ID)	const
+{
+	for(int i=0; i<m_pProjections->Get_Count(); i++)
+	{
+		CSG_Table_Record	*pProjection	= m_pProjections->Get_Record(i);
+
+		if( Authority.CmpNoCase(pProjection->asString(PRJ_FIELD_AUTH_NAME)) == 0
+		&&	Authority_ID ==     pProjection->asInt   (PRJ_FIELD_AUTH_SRID)	)
+		{
+			Projection	= Get_Projection(i);
+
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Projections::EPSG_to_Proj4(CSG_String &Proj4, int EPSG_Code) const
+{
+	for(int i=0; i<m_pProjections->Get_Count(); i++)
+	{
+		if( m_pProjections->Get_Record(i)->asInt(PRJ_FIELD_AUTH_SRID) == EPSG_Code )
+		{
+			Proj4	= m_pProjections->Get_Record(i)->asString(PRJ_FIELD_PROJ4TEXT);
+
+			return( true );
+		}
+	}
+
+	Proj4.Printf(SG_T("+init=epsg:%d"), EPSG_Code);
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::EPSG_to_WKT(CSG_String &WKT, int EPSG_Code) const
+{
+	for(int i=0; i<m_pProjections->Get_Count(); i++)
+	{
+		if( m_pProjections->Get_Record(i)->asInt(PRJ_FIELD_AUTH_SRID) == EPSG_Code )
+		{
+			WKT		= m_pProjections->Get_Record(i)->asString(PRJ_FIELD_SRTEXT);
+
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_String CSG_Projections::Get_Names_List(TSG_Projection_Type Type) const
+{
+	TSG_Projection_Type	iType;
+	CSG_String			Names, iWKT;
+
+	for(int i=0; i<Get_Count(); i++)
+	{
+		CSG_Table_Record	*pProjection	= m_pProjections->Get_Record(i);
+
+		iWKT	= pProjection->asString(PRJ_FIELD_SRTEXT);
+
+		iType	= !iWKT.BeforeFirst('[').Cmp(SG_T("PROJCS")) ? SG_PROJ_TYPE_CS_Projected
+				: !iWKT.BeforeFirst('[').Cmp(SG_T("GEOGCS")) ? SG_PROJ_TYPE_CS_Geographic
+				: !iWKT.BeforeFirst('[').Cmp(SG_T("GEOCCS")) ? SG_PROJ_TYPE_CS_Geocentric
+				: SG_PROJ_TYPE_CS_Undefined;
+
+		if( Type == SG_PROJ_TYPE_CS_Undefined )
+		{
+			Names	+= CSG_String::Format(SG_T("{%d}%s: %s|"), i,
+				SG_Get_Projection_Type_Name(iType).c_str(),
+				iWKT.AfterFirst('\"').BeforeFirst('\"').c_str()
+			);
+		}
+		else if( Type == iType )
+		{
+			Names	+= CSG_String::Format(SG_T("{%d}%s|"), i,
+				iWKT.AfterFirst('\"').BeforeFirst('\"').c_str()
+			);
+		}
+	}
+
+	return( Names );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Projections::_WKT_to_MetaData(CSG_MetaData &MetaData, const CSG_String &WKT)
+{
+	int			i, l;
+	CSG_String	Key;
+	CSG_Strings	Content;
+
+	//-----------------------------------------------------
+	Content.Add(SG_T(""));
+
+	for(i=0, l=-1; l!=0 && i<(int)WKT.Length(); i++)
+	{
+		if( l < 0 )	// read key
+		{
+			switch( WKT[i] )
+			{
+			default:						Key		+= WKT[i];	break;
+			case SG_T('['): case SG_T('('):	l		 = 1;		break;
+			case SG_T(']'): case SG_T(')'):	return( false );
+			}
+		}
+		else		// read content
+		{
+			bool	bAdd;
+
+			switch( WKT[i] )
+			{
+			default:						bAdd	= true;		break;
+			case SG_T('\"'):				bAdd	= false;	break;
+			case SG_T('['): case SG_T('('):	bAdd	= ++l > 1;	break;
+			case SG_T(']'): case SG_T(')'):	bAdd	= l-- > 1;	break;
+			case SG_T(','):	if( !(bAdd = l > 1) )	Content.Add(SG_T(""));	break;
+			}
+
+			if( bAdd )
+			{
+				Content[Content.Get_Count() - 1]	+= WKT[i];
+			}
+		}
+	}
+
+	if( Key.Length() == 0 || Content[0].Length() == 0 )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	if( !Key.Cmp(SG_T("AUTHORITY")) && Content.Get_Count() == 2 )		// AUTHORITY  ["<name>", "<code>"]
+	{
+		MetaData.Add_Property(SG_T("authority_name"), Content[0]);
+		MetaData.Add_Property(SG_T("authority_code"), Content[1]);
+
+		return( true );
+	}
+
+	CSG_MetaData	*pKey	= MetaData.Add_Child(Key);
+
+	if(	(!Key.Cmp(SG_T("GEOCCS"))		&& Content.Get_Count() >= 4)	// GEOCCS     ["<name>", <datum>, <prime meridian>, <linear unit> {,<axis>, <axis>, <axis>} {,<authority>}]
+	||	(!Key.Cmp(SG_T("GEOGCS"))		&& Content.Get_Count() >= 4)	// GEOGCS     ["<name>", <datum>, <prime meridian>, <angular unit> {,<twin axes>} {,<authority>}]
+	||	(!Key.Cmp(SG_T("PROJCS"))		&& Content.Get_Count() >= 3)	// PROJCS     ["<name>", <geographic cs>, <projection>, {<parameter>,}* <linear unit> {,<twin axes>}{,<authority>}]
+	||	(!Key.Cmp(SG_T("DATUM"))		&& Content.Get_Count() >= 2) )	// DATUM      ["<name>", <spheroid> {,<to wgs84>} {,<authority>}]
+	{
+		pKey->Add_Property(SG_T("name"), Content[0]);
+	}
+
+	if(	(!Key.Cmp(SG_T("PRIMEM"))		&& Content.Get_Count() >= 2)	// PRIMEM     ["<name>", <longitude> {,<authority>}]
+	||	(!Key.Cmp(SG_T("UNIT"))			&& Content.Get_Count() >= 2)	// UNIT       ["<name>", <conversion factor> {,<authority>}]
+	||	(!Key.Cmp(SG_T("AXIS"))			&& Content.Get_Count() >= 2)	// AXIS       ["<name>", NORTH|SOUTH|EAST|WEST|UP|DOWN|OTHER]
+	||	(!Key.Cmp(SG_T("PARAMETER"))	&& Content.Get_Count() >= 2) )	// PARAMETER  ["<name>", <value>]
+	{
+		pKey->Add_Property(SG_T("name"), Content[0]);
+		pKey->Set_Content(Content[1]);
+	}
+
+	if( (!Key.Cmp(SG_T("SPHEROID"))		&& Content.Get_Count() >= 3) )	// SPHEROID   ["<name>", <semi-major axis>, <inverse flattening> {,<authority>}]
+	{
+		pKey->Add_Property(SG_T("name"), Content[0]);
+		pKey->Add_Child   (SG_T("a")   , Content[1]);
+		pKey->Add_Child   (SG_T("rf")  , Content[2]);
+	}
+
+	if( (!Key.Cmp(SG_T("TOWGS84"))		&& Content.Get_Count() >= 7) )	// TOWGS84    [<dx>, <dy>, <dz>, <ex>, <ey>, <ez>, <ppm>]
+	{
+		pKey->Add_Child(SG_T("dx")     , Content[0]);
+		pKey->Add_Child(SG_T("dy")     , Content[1]);
+		pKey->Add_Child(SG_T("dz")     , Content[2]);
+		pKey->Add_Child(SG_T("ex")     , Content[3]);
+		pKey->Add_Child(SG_T("ey")     , Content[4]);
+		pKey->Add_Child(SG_T("ez")     , Content[5]);
+		pKey->Add_Child(SG_T("ppm")    , Content[6]);
+	}
+
+	if( (!Key.Cmp(SG_T("PROJECTION"))	&& Content.Get_Count() >= 1) )	// PROJECTION ["<name>" {,<authority>}]
+	{
+		pKey->Set_Content(Content[0]);
+	}
+
+	//-----------------------------------------------------
+	for(i=0; i<Content.Get_Count(); i++)
+	{
+		_WKT_to_MetaData(*pKey, Content[i]);
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+CSG_MetaData CSG_Projections::WKT_to_MetaData(const CSG_String &WKT)
+{
+	CSG_MetaData	MetaData;
+
+	_WKT_to_MetaData(MetaData, WKT);
+
+	if( MetaData.Get_Children_Count() == 1 )
+	{
+		return( *MetaData.Get_Child(0) );
+	}
+
+	MetaData.Destroy();
+
+	return( MetaData );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Projections::WKT_to_Proj4(CSG_String &Proj4, const CSG_String &WKT) const
+{
+	CSG_MetaData	m	= WKT_to_MetaData(WKT);
+
+//	m.Save("e:/wkt_metadata.xml");
+
+	if( m.Get_Children_Count() == 0 )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	int			Authority_Code;
+	CSG_String	Authority_Name;
+
+	if(	m.Get_Property("authority_name", Authority_Name) && Authority_Name.CmpNoCase(SG_T("EPSG")) == 0
+	&&	m.Get_Property("authority_code", Authority_Code) && EPSG_to_Proj4(Proj4, Authority_Code) )
+	{	//	Proj4.Printf(SG_T("+init=epsg:%d"), Authority_Code);
+		return( true );
+	}
+
+	//-----------------------------------------------------
+	int			i;
+	double		a, d;
+	CSG_String	s;
+
+	//-----------------------------------------------------
+	if( !m.Get_Name().Cmp(SG_T("GEOCCS")) )
+	{
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	// GEOGCS["<name>
+	//    DATUM  ["<name>
+	//        SPHEROID["<name>", <semi-major axis>, <inverse flattening>],
+	//       *TOWGS84 [<dx>, <dy>, <dz>, <ex>, <ey>, <ez>, <ppm>]
+	//    ],
+	//    PRIMEM ["<name>", <longitude>],
+	//    UNIT   ["<name>", <conversion factor>],
+	//   *AXIS   ["<name>", NORTH|SOUTH|EAST|WEST|UP|DOWN|OTHER],
+	//   *AXIS   ["<name>", NORTH|SOUTH|EAST|WEST|UP|DOWN|OTHER]
+	// ]
+	if( !m.Get_Name().Cmp(SG_T("GEOGCS")) )
+	{
+		if(	!m["DATUM"].is_Valid()
+		||	!m["DATUM"]["SPHEROID"].is_Valid()
+		||	 m["DATUM"]["SPHEROID"].Get_Children_Count() != 2
+		||	!m["DATUM"]["SPHEROID"][0].Get_Content().asDouble(a) || a <= 0.0
+		||	!m["DATUM"]["SPHEROID"][1].Get_Content().asDouble(d) || d <  0.0 )
+		{
+			return( false );
+		}
+
+		Proj4	+= CSG_String::Format(SG_T( "+proj=longlat"));
+
+		Proj4	+= CSG_String::Format(SG_T(" +a=%f"), a);						// Semimajor radius of the ellipsoid axis
+		Proj4	+= CSG_String::Format(SG_T(" +b=%f"), d > 0.0 ? a - a / d : a);	// Semiminor radius of the ellipsoid axis
+
+		if(	m["DATUM"]["TOWGS84"].is_Valid() && m["DATUM"]["TOWGS84"].Get_Children_Count() == 7 )
+		{
+			for(i=0; i<7; i++)
+			{
+				Proj4	+= (i == 0 ? SG_T(" +towgs84=") : SG_T(",")) + m["DATUM"]["TOWGS84"][i].Get_Content();
+			}
+		}
+
+		if( m["PRIMEM"].is_Valid() && m["PRIMEM"].Get_Content().asDouble(d) && d != 0.0 )
+		{
+			Proj4	+= CSG_String::Format(SG_T(" +pm=%f"), d);
+		}
+	}
+
+	//-----------------------------------------------------
+	// PROJCS["<name>
+	//     GEOGCS["<name>
+	//           DATUM  ["<name>
+	//                   SPHEROID["<name>", <semi-major axis>, <inverse flattening>],
+	//                  *TOWGS84 [<dx>, <dy>, <dz>, <ex>, <ey>, <ez>, <ppm>]
+	//           ],
+	//           PRIMEM ["<name>", <longitude>],
+	//           UNIT   ["<name>", <conversion factor>],
+	//          *AXIS   ["<name>", NORTH|SOUTH|EAST|WEST|UP|DOWN|OTHER],
+	//          *AXIS   ["<name>", NORTH|SOUTH|EAST|WEST|UP|DOWN|OTHER]
+	//     ],
+	//     PROJECTION["<name>"],
+	//    *PARAMETER ["<name>", <value>], ...
+	//     UNIT      ["<name>", <conversion factor>],
+	//    *AXIS      ["<name>", NORTH|SOUTH|EAST|WEST|UP|DOWN|OTHER],
+	//    *AXIS      ["<name>", NORTH|SOUTH|EAST|WEST|UP|DOWN|OTHER]
+	// ]
+	if( !m.Get_Name().Cmp(SG_T("PROJCS")) )
+	{
+		if( !m["PROJECTION"].is_Valid() )
+		{
+			SG_UI_Msg_Add_Error(CSG_String::Format(SG_T(">> WKT: %s"), LNG("no projection specified")));
+
+			return( false );
+		}
+
+		if( !m_WKT_to_Proj4.Get_Translation(m["PROJECTION"].Get_Content(), s) )
+		{
+			SG_UI_Msg_Add_Error(CSG_String::Format(SG_T(">> WKT: %s [%s]"), LNG("unknown projection"), m["PROJECTION"].Get_Content().c_str()));
+
+			return( false );
+		}
+
+		if(	!m["GEOGCS"].is_Valid()
+		||	!m["GEOGCS"]["DATUM"].is_Valid()
+		||	!m["GEOGCS"]["DATUM"]["SPHEROID"].is_Valid()
+		||	 m["GEOGCS"]["DATUM"]["SPHEROID"].Get_Children_Count() != 2
+		||	!m["GEOGCS"]["DATUM"]["SPHEROID"][0].Get_Content().asDouble(a) || a <= 0.0
+		||	!m["GEOGCS"]["DATUM"]["SPHEROID"][1].Get_Content().asDouble(d) || d <  0.0 )
+		{
+			SG_UI_Msg_Add_Error(CSG_String::Format(SG_T(">> WKT: %s"), LNG("invalid geographic coordinate system / datum")));
+
+			return( false );
+		}
+
+		Proj4	+= CSG_String::Format(SG_T( "+proj=%s"), s.c_str());
+
+		Proj4	+= CSG_String::Format(SG_T(" +a=%f"), a);
+		Proj4	+= CSG_String::Format(SG_T(" +b=%f"), d <= 0.0 ? a : a - a / d);	// Semiminor radius of the ellipsoid axis
+
+		if(	m["GEOGCS"]["DATUM"]["TOWGS84"].is_Valid() && m["GEOGCS"]["DATUM"]["TOWGS84"].Get_Children_Count() == 7 )
+		{
+			for(i=0; i<7; i++)
+			{
+				Proj4	+= (i == 0 ? SG_T(" +towgs84=") : SG_T(",")) + m["GEOGCS"]["DATUM"]["TOWGS84"][i].Get_Content();
+			}
+		}
+
+		if( m["PRIMEM"].is_Valid() && m["PRIMEM"].Get_Content().asDouble(d) && d != 0.0 )
+		{
+			Proj4	+= CSG_String::Format(SG_T(" +pm=%f"), d);
+		}
+
+		for(i=0; i<m.Get_Children_Count(); i++)
+		{
+			if( !m[i].Get_Name().Cmp(SG_T("PARAMETER")) )
+			{
+				if( !m_WKT_to_Proj4.Get_Translation(m[i].Get_Property("name"), s) )
+				{
+					SG_UI_Msg_Add_Error(CSG_String::Format(SG_T(">> WKT: %s [%s]"), LNG("unknown parameter"), m[i].Get_Property("name")));
+				}
+				else
+				{
+					Proj4	+= CSG_String::Format(SG_T(" +%s=%s"), s.c_str(), m[i].Get_Content().c_str());
+				}
+			}
+		}
+
+		if( m["UNIT"].is_Valid() && m["UNIT"].Get_Content().asDouble(d) && d != 0.0 && d != 1.0 )
+		{
+			Proj4	+= CSG_String::Format(SG_T(" +to_meter=%f"), d);
+		}
+	}
+
+	//-----------------------------------------------------
+	Proj4	+= CSG_String::Format(SG_T(" +no_defs"));	// Don't use the /usr/share/proj/proj_def.dat defaults file
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Projections::_Proj4_Read_Parameter(CSG_String &Value, const CSG_String &Proj4, const CSG_String &Key) const
+{
+	Value.Clear();
+
+	int		l, i	= Proj4.Find(CSG_String::Format(SG_T("+%s="), Key.c_str()));
+
+	if( i >= 0 )
+	{
+		for(++i, l=0; l<2 && i<(int)Proj4.Length(); i++)
+		{
+			switch( Proj4[i] )
+			{
+			case SG_T('='):	l++;	break;
+			case SG_T('+'):	l=2;	break;
+			case SG_T(' '):	l=2;	break;
+			default:
+				if( l == 1 )
+				{
+					Value	+= Proj4[i];
+				}
+			}
+		}
+	}
+
+	return( Value.Length() > 0 );
+}
+
+//---------------------------------------------------------
+/*/ ellipsoids (a, b)
+	{	"MERIT"		, "6378137.0"	, "6356752.298"	},	// MERIT 1983
+	{	"SGS85"		, "6378136.0"	, "6356751.302"	},	// Soviet Geodetic System 85
+	{	"GRS80"		, "6378137.0"	, "6356752.314"	},	// GRS 1980 (IUGG, 1980)
+	{	"IAU76"		, "6378140.0"	, "6356755.288"	},	// IAU 1976
+	{	"airy"		, "6377563.396"	, "6356256.91"	},	// Airy 1830
+	{	"APL4.9"	, "6378137.0"	, "6356751.796"	},	// Appl. Physics. 1965
+	{	"NWL9D"		, "6378145.0"	, "6356759.769"	},	// Naval Weapons Lab., 1965
+	{	"mod_airy"	, "6377340.189"	, "6356034.446"	},	// Modified Airy
+	{	"andrae"	, "6377104.43"	, "6355847.415"	},	// Andrae 1876 (Den., Iclnd.)
+	{	"aust_SA"	, "6378160.0"	, "6356774.719"	},	// Australian Natl & S. Amer. 1969
+	{	"GRS67"		, "6378160.0"	, "6356774.516"	},	// GRS 67 (IUGG 1967)
+	{	"bessel"	, "6377397.155"	, "6356078.963"	},	// Bessel 1841
+	{	"bess_nam"	, "6377483.865"	, "6356165.383"	},	// Bessel 1841 (Namibia)
+	{	"clrk66"	, "6378206.4"	, "6356583.8"	},	// Clarke 1866
+	{	"clrk80"	, "6378249.145"	, "6356514.966"	},	// Clarke 1880 mod.
+	{	"CPM"		, "6375738.7"	, "6356666.222"	},	// Comm. des Poids et Mesures 1799
+	{	"delmbr"	, "6376428.0"	, "6355957.926"	},	// Delambre 1810 (Belgium)
+	{	"engelis"	, "6378136.05"	, "6356751.323"	},	// Engelis 1985
+	{	"evrst30"	, "6377276.345"	, "6356075.413"	},	// Everest 1830
+	{	"evrst48"	, "6377304.063"	, "6356103.039"	},	// Everest 1948
+	{	"evrst56"	, "6377301.243"	, "6356100.228"	},	// Everest 1956
+	{	"evrst69"	, "6377295.664"	, "6356094.668"	},	// Everest 1969
+	{	"evrstSS"	, "6377298.556"	, "6356097.55"	},	// Everest (Sabah & Sarawak)
+	{	"fschr60"	, "6378166.0"	, "6356784.284"	},	// Fischer (Mercury Datum) 1960
+	{	"fschr60m"	, "6378155.0"	, "6356773.32"	},	// Modified Fischer 1960
+	{	"fschr68"	, "6378150.0"	, "6356768.337"	},	// Fischer 1968
+	{	"helmert"	, "6378200.0"	, "6356818.17"	},	// Helmert 1906
+	{	"hough"		, "6378270.0"	, "6356794.343"	},	// Hough
+	{	"intl"		, "6378388.0"	, "6356911.946"	},	// International 1909 (Hayford)
+	{	"krass"		, "6378245.0"	, "6356863.019"	},	// Krassovsky, 1942
+	{	"kaula"		, "6378163.0"	, "6356776.992"	},	// Kaula 1961
+	{	"lerch"		, "6378139.0"	, "6356754.292"	},	// Lerch 1979
+	{	"mprts"		, "6397300.0"	, "6363806.283"	},	// Maupertius 1738
+	{	"new_intl"	, "6378157.5"	, "6356772.2"	},	// New International 1967
+	{	"plessis"	, "6376523.0"	, "6355863"		},	// Plessis 1817 (France)
+	{	"SEasia"	, "6378155.0"	, "6356773.321"	},	// Southeast Asia
+	{	"walbeck"	, "6376896.0"	, "6355834.847"	},	// Walbeck
+	{	"WGS60"		, "6378165.0"	, "6356783.287"	},	// WGS 60
+	{	"WGS66"		, "6378145.0"	, "6356759.769"	},	// WGS 66
+	{	"WGS72"		, "6378135.0"	, "6356750.52"	},	// WGS 72
+	{	"WGS84"		, "6378137.0"	, "6356752.314"	},	// WGS 84
+	{	"sphere"	, "6370997.0"	, "6370997.0"	}	// Normal Sphere (r=6370997)
+/**/
+
+bool CSG_Projections::_Proj4_Get_Ellipsoid(CSG_String &Value, const CSG_String &Proj4) const
+{
+	const char	ellipsoid[42][2][32]	= 
+	{	//  ellipsoid	      a				   b
+		{	"MERIT"		, "6378137.0,298.257"		},	// MERIT 1983
+		{	"SGS85"		, "6378136.0,298.257"		},	// Soviet Geodetic System 85
+		{	"GRS80"		, "6378137.0,298.2572221"	},	// GRS 1980 (IUGG, 1980)
+		{	"IAU76"		, "6378140.0,298.257"		},	// IAU 1976
+		{	"airy"		, "6377563.396,299.3249753"	},	// Airy 1830
+		{	"APL4.9"	, "6378137.0,298.25"		},	// Appl. Physics. 1965
+		{	"NWL9D"		, "6378145.0,298.25"		},	// Naval Weapons Lab., 1965
+		{	"mod_airy"	, "6377340.189,299.3249374"	},	// Modified Airy
+		{	"andrae"	, "6377104.43,300"			},	// Andrae 1876 (Den., Iclnd.)
+		{	"aust_SA"	, "6378160.0,298.25"		},	// Australian Natl & S. Amer. 1969
+		{	"GRS67"		, "6378160.0,298.2471674"	},	// GRS 67 (IUGG 1967)
+		{	"bessel"	, "6377397.155,299.1528128"	},	// Bessel 1841
+		{	"bess_nam"	, "6377483.865,299.1528128"	},	// Bessel 1841 (Namibia)
+		{	"clrk66"	, "6378206.4,294.9786982"	},	// Clarke 1866
+		{	"clrk80"	, "6378249.145,293.4663"	},	// Clarke 1880 mod.
+		{	"CPM"		, "6375738.7,334.29"		},	// Comm. des Poids et Mesures 1799
+		{	"delmbr"	, "6376428.0,311.5"			},	// Delambre 1810 (Belgium)
+		{	"engelis"	, "6378136.05,298.2566"		},	// Engelis 1985
+		{	"evrst30"	, "6377276.345,300.8017"	},	// Everest 1830
+		{	"evrst48"	, "6377304.063,300.8017"	},	// Everest 1948
+		{	"evrst56"	, "6377301.243,300.8017"	},	// Everest 1956
+		{	"evrst69"	, "6377295.664,300.8017"	},	// Everest 1969
+		{	"evrstSS"	, "6377298.556,300.8017"	},	// Everest (Sabah & Sarawak)
+		{	"fschr60"	, "6378166.0,298.3"			},	// Fischer (Mercury Datum) 1960
+		{	"fschr60m"	, "6378155.0,298.3"			},	// Modified Fischer 1960
+		{	"fschr68"	, "6378150.0,298.3"			},	// Fischer 1968
+		{	"helmert"	, "6378200.0,298.3"			},	// Helmert 1906
+		{	"hough"		, "6378270.0,297"			},	// Hough
+		{	"intl"		, "6378388.0,297"			},	// International 1909 (Hayford)
+		{	"krass"		, "6378245.0,298.3"			},	// Krassovsky, 1942
+		{	"kaula"		, "6378163.0,298.24"		},	// Kaula 1961
+		{	"lerch"		, "6378139.0,298.257"		},	// Lerch 1979
+		{	"mprts"		, "6397300.0,191"			},	// Maupertius 1738
+		{	"new_intl"	, "6378157.5,298.2496154"	},	// New International 1967
+		{	"plessis"	, "6376523.0,308.6409971"	},	// Plessis 1817 (France)
+		{	"SEasia"	, "6378155.0,298.3000002"	},	// Southeast Asia
+		{	"walbeck"	, "6376896.0,302.7800002"	},	// Walbeck
+		{	"WGS60"		, "6378165.0,298.3"			},	// WGS 60
+		{	"WGS66"		, "6378145.0,298.25"		},	// WGS 66
+		{	"WGS72"		, "6378135.0,298.26"		},	// WGS 72
+		{	"WGS84"		, "6378137.0,298.2572236"	},	// WGS 84
+		{	"sphere"	, "6370997.0,-1"			}	// Normal Sphere (r=6370997)
+	};
+
+	//-----------------------------------------------------
+	if( _Proj4_Read_Parameter(Value, Proj4, "ellps") )
+	{
+		for(int i=0; i<42; i++)
+		{
+			if( !Value.CmpNoCase(ellipsoid[i][0]) )
+			{
+				Value.Printf(SG_T("SPHEROID[\"%s\",%s]"), SG_STR_MBTOSG(ellipsoid[i][0]), SG_STR_MBTOSG(ellipsoid[i][1]));
+
+				return( true );
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	double	a, b;
+
+	a	= _Proj4_Read_Parameter(Value, Proj4, "a" ) && Value.asDouble(a) ? a : 6378137.0;
+
+	b	= _Proj4_Read_Parameter(Value, Proj4, "b" ) && Value.asDouble(b) ? a / (a - b)
+		: _Proj4_Read_Parameter(Value, Proj4, "rf") && Value.asDouble(b) ? b
+		: _Proj4_Read_Parameter(Value, Proj4, "f" ) && Value.asDouble(b) ? 1.0 / b
+		: _Proj4_Read_Parameter(Value, Proj4, "e" ) && Value.asDouble(b) ? a / (a - sqrt(b*b - a*a))
+		: _Proj4_Read_Parameter(Value, Proj4, "es") && Value.asDouble(b) ? a / (a - sqrt( b  - a*a))
+		: 298.2572236;
+
+	Value	= CSG_String::Format(SG_T("SPHEROID[\"Ellipsoid\",%f,%f]"), a, b);
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::_Proj4_Get_Datum(CSG_String &Value, const CSG_String &Proj4) const
+{
+	const char	datum[9][3][64]	=
+	{	//	datum_id		  ellipse		  definition
+		{	"WGS84"			, "WGS84"		, "0,0,0,0,0,0,0"											},
+		{	"GGRS87"		, "GRS80"		, "-199.87,74.79,246.62,0,0,0,0"							},	// Greek_Geodetic_Reference_System_1987
+		{	"NAD83"			, "GRS80"		, "0,0,0,0,0,0,0"											},	// North_American_Datum_1983
+	//	{	"NAD27"			, "clrk66"		, "nadgrids=@conus, at alaska, at ntv2_0.gsb, at ntv1_can.dat"		},	// North_American_Datum_1927
+		{	"potsdam"		, "bessel"		, "606.0,23.0,413.0,0,0,0,0"								},	// Potsdam Rauenberg 1950 DHDN
+		{	"carthage"		, "clark80"		, "-263.0,6.0,431.0,0,0,0,0"								},	// Carthage 1934 Tunisia
+		{	"hermannskogel"	, "bessel"		, "653.0,-212.0,449.0,0,0,0,0"								},	// Hermannskogel
+		{	"ire65"			, "mod_airy"	, "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15"		},	// Ireland 1965
+		{	"nzgd49"		, "intl"		, "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993"				},	// New Zealand Geodetic Datum 1949
+		{	"OSGB36"		, "airy"		, "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894"	}	// Airy 1830
+	};
+
+	CSG_String	Spheroid, ToWGS84;
+
+	//-----------------------------------------------------
+	if( _Proj4_Read_Parameter(Value, Proj4, "datum") )
+	{
+		for(int i=0; i<9; i++)
+		{
+			if( !Value.CmpNoCase(datum[i][0]) && _Proj4_Get_Ellipsoid(Spheroid, CSG_String::Format(SG_T("+ellps=%s"), SG_STR_MBTOSG(datum[i][1]))) )
+			{
+				Value.Printf(SG_T("DATUM[\"%s\",%s,TOWGS84[%s]]"), SG_STR_MBTOSG(datum[i][0]), Spheroid.c_str(), SG_STR_MBTOSG(datum[i][2]));
+
+				return( true );
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	if( _Proj4_Get_Ellipsoid(Spheroid, Proj4) )
+	{
+		Value	 = CSG_String::Format(SG_T("DATUM[\"Datum\",%s"), Spheroid.c_str());
+
+		if( _Proj4_Read_Parameter(ToWGS84, Proj4, "towgs84") )
+		{
+			Value	+= CSG_String::Format(SG_T(",TOWGS84[%s]"), ToWGS84.c_str());
+		}
+
+		Value	+= SG_T("]");
+	}
+
+	//-----------------------------------------------------
+	Value	= SG_T("DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563],TOWGS84[0,0,0,0,0,0,0]]");
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::_Proj4_Get_Prime_Meridian(CSG_String &Value, const CSG_String &Proj4) const
+{
+	const char	meridian[12][2][16]	=
+	{
+		{	"lisbon"	, "-9.131906111"	},
+		{	"paris"		, "2.337229167"		},
+		{	"bogota"	, "74.08091667"		},
+		{	"madrid"	, "-3.687911111"	},
+		{	"rome"		, "12.45233333"		},
+		{	"bern"		, "7.439583333"		},
+		{	"jakarta"	, "106.8077194"		},
+		{	"ferro"		, "-17.66666667"	},
+		{	"brussels"	, "4.367975"		},
+		{	"stockholm"	, "18.05827778"		},
+		{	"athens"	, "23.7163375"		},
+		{	"oslo"		, "10.72291667"		}
+	};
+
+	//-----------------------------------------------------
+	if( _Proj4_Read_Parameter(Value, Proj4, "pm") )
+	{
+		for(int i=0; i<12; i++)
+		{
+			if( !Value.CmpNoCase(meridian[i][0]) )
+			{
+				Value.Printf(SG_T("PRIMEM[\"%s\",%s]"), SG_STR_MBTOSG(meridian[i][0]), SG_STR_MBTOSG(meridian[i][1]));
+
+				return( true );
+			}
+		}
+
+		double	d;
+
+		if( Value.asDouble(d) && d != 0.0 )
+		{
+			Value.Printf(SG_T("PRIMEM[\"Prime_Meridian\",%f]"), d);
+
+			return( true );
+		}
+	}
+
+	//-----------------------------------------------------
+	Value	= SG_T("PRIMEM[\"Greenwich\",0]");
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::_Proj4_Get_Unit(CSG_String &Value, const CSG_String &Proj4) const
+{
+	const char	unit[21][3][32]	=
+	{
+		{	"km"		,"1000.0"				, "Kilometer"						},
+		{	"m"			,"1.0"					, "Meter"							},
+		{	"dm"		,"0.1"					, "Decimeter"						},
+		{	"cm"		,"0.01"					, "Centimeter"						},
+		{	"mm"		,"0.001"				, "Millimeter"						},
+		{	"kmi"		,"1852.0"				, "International Nautical Mile"		},
+		{	"in"		,"0.0254"				, "International Inch"				},
+		{	"ft"		,"0.3048"				, "International Foot"				},
+		{	"yd"		,"0.9144"				, "International Yard"				},
+		{	"mi"		,"1609.344"				, "International Statute Mile"		},
+		{	"fath"		,"1.8288"				, "International Fathom"			},
+		{	"ch"		,"20.1168"				, "International Chain"				},
+		{	"link"		,"0.201168"				, "International Link"				},
+		{	"us-in"		,"1./39.37"				, "U.S. Surveyor's Inch"			},
+		{	"us-ft"		,"0.304800609601219"	, "U.S. Surveyor's Foot"			},
+		{	"us-yd"		,"0.914401828803658"	, "U.S. Surveyor's Yard"			},
+		{	"us-ch"		,"20.11684023368047"	, "U.S. Surveyor's Chain"			},
+		{	"us-mi"		,"1609.347218694437"	, "U.S. Surveyor's Statute Mile"	},
+		{	"ind-yd"	,"0.91439523"			, "Indian Yard"						},
+		{	"ind-ft"	,"0.30479841"			, "Indian Foot"						},
+		{	"ind-ch"	,"20.11669506"			, "Indian Chain"					}
+	};
+
+	//-----------------------------------------------------
+	if( _Proj4_Read_Parameter(Value, Proj4, "units") )
+	{
+		for(int i=0; i<21; i++)
+		{
+			if( !Value.CmpNoCase(unit[i][0]) )
+			{
+				Value.Printf(SG_T("UNIT[\"%s\",%s]"), SG_STR_MBTOSG(unit[i][2]), SG_STR_MBTOSG(unit[i][1]));
+
+				return( true );
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	double	 d;
+
+	if( _Proj4_Read_Parameter(Value, Proj4, "to_meter") && Value.asDouble(d) && d > 0.0 && d != 1.0 )
+	{
+		Value.Printf(SG_T("UNIT[\"Unit\",%f]"), d);
+
+		return( true );
+	}
+
+	//-----------------------------------------------------
+	Value	= SG_T("UNIT[\"metre\",1");
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::WKT_from_Proj4(CSG_String &WKT, const CSG_String &Proj4) const
+{
+	CSG_String	Value, GeogCS, ProjCS;
+
+	//-----------------------------------------------------
+	if( !_Proj4_Read_Parameter(ProjCS, Proj4, "proj") )
+	{
+		SG_UI_Msg_Add_Error(CSG_String::Format(SG_T("Proj4 >> WKT: %s"), LNG("no projection type defined")));
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	// GEOGCS["<name>
+	//    DATUM  ["<name>
+	//        SPHEROID["<name>", <semi-major axis>, <inverse flattening>],
+	//       *TOWGS84 [<dx>, <dy>, <dz>, <ex>, <ey>, <ez>, <ppm>]
+	//    ],
+	//    PRIMEM ["<name>", <longitude>],
+	//    UNIT   ["<name>", <conversion factor>],
+	//   *AXIS   ["<name>", NORTH|SOUTH|EAST|WEST|UP|DOWN|OTHER],
+	//   *AXIS   ["<name>", NORTH|SOUTH|EAST|WEST|UP|DOWN|OTHER]
+	// ]
+
+	GeogCS	 = SG_T("GEOGCS[\"GCS\",");
+
+	_Proj4_Get_Datum			(Value, Proj4);	GeogCS	+= Value;	GeogCS	+= SG_T(",");
+	_Proj4_Get_Prime_Meridian	(Value, Proj4);	GeogCS	+= Value;	GeogCS	+= SG_T(",");
+
+	GeogCS	+= SG_T("UNIT[\"degree\",0.01745329251994328]]");
+
+	//-----------------------------------------------------
+	if(	!ProjCS.CmpNoCase("lonlat") || !ProjCS.CmpNoCase("longlat")
+	||	!ProjCS.CmpNoCase("latlon") || !ProjCS.CmpNoCase("latlong") )
+	{
+		WKT	= GeogCS;
+
+		return( true );
+	}
+
+	//-----------------------------------------------------
+	// PROJCS["<name>
+	//     GEOGCS    [ ...... ],
+	//     PROJECTION["<name>"],
+	//    *PARAMETER ["<name>", <value>], ...
+	//     UNIT      ["<name>", <conversion factor>],
+	//    *AXIS      ["<name>", NORTH|SOUTH|EAST|WEST|UP|DOWN|OTHER],
+	//    *AXIS      ["<name>", NORTH|SOUTH|EAST|WEST|UP|DOWN|OTHER]
+	// ]
+
+	if( !m_Proj4_to_WKT.Get_Translation(ProjCS, Value) )
+	{
+		SG_UI_Msg_Add_Error(CSG_String::Format(SG_T("Proj4 >> WKT: %s [%s]"), LNG("no translation available"), ProjCS.c_str()));
+
+		return( false );
+	}
+
+	WKT		 = CSG_String::Format(SG_T("PROJCS[\"%s\",%s,PROJECTION[%s]"), Value.c_str(), GeogCS.c_str(), Value.c_str());
+
+	//-----------------------------------------------------
+	// UTM ...
+
+	if( !ProjCS.CmpNoCase(SG_T("utm")) )
+	{
+		double	Zone, Northing;
+
+		if( !_Proj4_Read_Parameter(Value, Proj4, "zone") || !Value.asDouble(Zone) )
+		{
+			SG_UI_Msg_Add_Error(CSG_String::Format(SG_T("Proj4 >> WKT: %s"), LNG("invalid utm zone")));
+
+			return( false );
+		}
+
+		Northing	= _Proj4_Read_Parameter(Value, Proj4, "south") ? 10000000 : 0;
+
+		WKT		+= CSG_String::Format(SG_T(",PARAMETER[\"%s\",%f]"), SG_T("latitude_of_origin"), 0);
+		WKT		+= CSG_String::Format(SG_T(",PARAMETER[\"%s\",%f]"), SG_T("central_meridian")  , Zone * 6.0 - 183);
+		WKT		+= CSG_String::Format(SG_T(",PARAMETER[\"%s\",%f]"), SG_T("scale_factor")      , 0.9996);
+		WKT		+= CSG_String::Format(SG_T(",PARAMETER[\"%s\",%f]"), SG_T("false_easting")     , 500000);
+		WKT		+= CSG_String::Format(SG_T(",PARAMETER[\"%s\",%f]"), SG_T("false_northing")    , Northing);
+		WKT		+= SG_T(",UNIT[\"metre\",1]]");
+
+		return( true );
+	}
+
+	//-----------------------------------------------------
+	// Parameters ...
+
+	ProjCS	= Proj4;
+
+	while( ProjCS.Find(SG_T('+')) >= 0 )
+	{
+		CSG_String	Key;
+
+		ProjCS	= ProjCS.AfterFirst (SG_T('+'));
+		Value	= ProjCS.BeforeFirst(SG_T('='));
+
+		if( m_Proj4_to_WKT.Get_Translation(Value, Key) )
+		{
+			Value	= ProjCS.AfterFirst(SG_T('='));
+
+			if( Value.Find(SG_T('+')) >= 0 )
+			{
+				Value	= Value.BeforeFirst(SG_T('+'));
+			}
+
+			WKT		+= CSG_String::Format(SG_T(",PARAMETER[\"%s\",%s]"), Key.c_str(), Value.c_str());
+		}
+	}
+
+	//-----------------------------------------------------
+	// Unit ...
+
+	_Proj4_Get_Unit(Value, Proj4);
+
+	WKT	+= CSG_String::Format(SG_T(",%s]"), Value.c_str());
+
+	//-----------------------------------------------------
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CSG_Projections::_Set_Dictionary(CSG_Table &Dictionary, int Direction)
+{
+	const int	n	= 207;
+	const char	Translation[n][4][128]	= {
+		//	 PROJ4		  DIR	WKT										   DESCRIPTION
+
+		// Projection Types, *) = not verified
+		{	"aea"		, " ", "Albers_Conic_Equal_Area"				, "Albers Equal Area"	},
+		{	"aea"		, "<", "Albers"									, "[ESRI] Albers Equal Area"	},
+		{	"aeqd"		, " ", "Azimuthal_Equidistant"					, "Azimuthal Equidistant"	},
+		{	"airy"		, " ", "Airy"									, "*) Airy"	},
+		{	"aitoff"	, " ", "Aitoff"									, "[ESRI] Aitoff"	},
+		{	"alsk"		, " ", "Mod_Stererographics_of_Alaska"			, "*) Mod. Stererographics of Alaska"	},
+		{	"apian"		, " ", "Apian_Globular_I"						, "*) Apian Globular I"	},
+		{	"august"	, " ", "August_Epicycloidal"					, "*) August Epicycloidal"	},
+		{	"bacon"		, " ", "Bacon_Globular"							, "*) Bacon Globular"	},
+		{	"bipc"		, " ", "Bipolar_conic_of_western_hemisphere"	, "*) Bipolar conic of western hemisphere"	},
+		{	"boggs"		, " ", "Boggs_Eumorphic"						, "*) Boggs Eumorphic"	},
+		{	"bonne"		, " ", "Bonne"									, "Bonne (Werner lat_1=90)"	},
+		{	"cass"		, " ", "Cassini_Soldner"						, "Cassini"	},
+		{	"cass"		, "<", "Cassini"								, "[ESRI] Cassini"	},
+		{	"cc"		, " ", "Central_Cylindrical"					, "*) Central Cylindrical"	},
+		{	"cea"		, " ", "Cylindrical_Equal_Area"					, "Equal Area Cylindrical, alias: Lambert Cyl.Eq.A., Normal Authalic Cyl. (FME), Behrmann (SP=30), Gall Orthogr. (SP=45)"	},
+		{	"cea"		, "<", "Behrmann"								, "[ESRI] Behrmann (standard parallel = 30)"	},
+		{	"chamb"		, " ", "Chamberlin_Trimetric"					, "*) Chamberlin Trimetric"	},
+		{	"collg"		, " ", "Collignon"								, "*) Collignon"	},
+		{	"crast"		, " ", "Craster_Parabolic"						, "[ESRI] Craster Parabolic (Putnins P4)"	},
+		{	"denoy"		, " ", "Denoyer_Semi_Elliptical"				, "*) Denoyer Semi-Elliptical"	},
+		{	"eck1"		, " ", "Eckert_I"								, "*) Eckert I"	},
+		{	"eck2"		, " ", "Eckert_II"								, "*) Eckert II"	},
+		{	"eck3"		, " ", "Eckert_III"								, "*) Eckert III"	},
+		{	"eck4"		, " ", "Eckert_IV"								, "Eckert IV"	},
+		{	"eck5"		, " ", "Eckert_V"								, "*) Eckert V"	},
+		{	"eck6"		, " ", "Eckert_VI"								, "Eckert VI"	},
+		{	"eqc"		, " ", "Equirectangular"						, "Equidistant Cylindrical (Plate Caree)"	},
+		{	"eqc"		, "<", "Equidistant_Cylindrical"				, "[ESRI] Equidistant Cylindrical (Plate Caree)"	},
+		{	"eqc"		, "<", "Plate_Carree"							, "[ESRI] Equidistant Cylindrical (Plate Caree)"	},
+		{	"eqdc"		, " ", "Equidistant_Conic"						, "*) Equidistant Conic"	},
+		{	"euler"		, " ", "Euler"									, "*) Euler"	},
+		{	"fahey"		, " ", "Fahey"									, "*) Fahey"	},
+		{	"fouc"		, " ", "Foucault"								, "*) Foucaut"	},
+		{	"fouc_s"	, " ", "Foucault_Sinusoidal"					, "*) Foucaut Sinusoidal"	},
+		{	"gall"		, " ", "Gall_Stereographic"						, "Gall (Gall Stereographic)"	},
+		{	"geocent"	, " ", "Geocentric"								, "*) Geocentric"	},
+		{	"geos"		, " ", "GEOS"									, "Geostationary Satellite View"	},
+		{	"gins8"		, " ", "Ginsburg_VIII"							, "*) Ginsburg VIII (TsNIIGAiK)"	},
+		{	"gn_sinu"	, " ", "General_Sinusoidal_Series"				, "*) General Sinusoidal Series"	},
+		{	"gnom"		, " ", "Gnomonic"								, "Gnomonic"	},
+		{	"goode"		, " ", "Goode_Homolosine"						, "*) Goode Homolosine"	},
+		{	"gs48"		, " ", "Mod_Stererographics_48"					, "*) Mod. Stererographics of 48 U.S."	},
+		{	"gs50"		, " ", "Mod_Stererographics_50"					, "*) Mod. Stererographics of 50 U.S."	},
+		{	"hammer"	, " ", "Hammer_Eckert_Greifendorff"				, "*) Hammer & Eckert-Greifendorff"	},
+		{	"hatano"	, " ", "Hatano_Asymmetrical_Equal_Area"			, "*) Hatano Asymmetrical Equal Area"	},
+		{	"imw_p"		, " ", "Internation_Map_of_the_World_Polyconic"	, "*) Internation Map of the World Polyconic"	},
+		{	"kav5"		, " ", "Kavraisky_V"							, "*) Kavraisky V"	},
+		{	"kav7"		, " ", "Kavraisky_VII"							, "*) Kavraisky VII"	},
+		{	"krovak"	, " ", "Krovak"									, "Krovak"	},
+		{	"labrd"		, " ", "Laborde_Oblique_Mercator"				, "*) Laborde"	},
+		{	"laea"		, " ", "Lambert_Azimuthal_Equal_Area"			, "Lambert Azimuthal Equal Area"	},
+		{	"lagrng"	, " ", "Lagrange"								, "*) Lagrange"	},
+		{	"larr"		, " ", "Larrivee"								, "*) Larrivee"	},
+		{	"lask"		, " ", "Laskowski"								, "*) Laskowski"	},
+		{	"lcc"		, "<", "Lambert_Conformal_Conic_1SP"			, "Lambert Conformal Conic (1 standard parallel)"	},
+		{	"lcc"		, "<", "Lambert_Conformal_Conic_2SP"			, "Lambert Conformal Conic (2 standard parallels)"	},
+		{	"lcc"		, " ", "Lambert_Conformal_Conic"				, "Lambert Conformal Conic"	},
+		{	"lcca"		, " ", "Lambert_Conformal_Conic_Alternative"	, "*) Lambert Conformal Conic Alternative"	},
+		{	"leac"		, " ", "Lambert_Equal_Area_Conic"				, "*) Lambert Equal Area Conic"	},
+		{	"lee_os"	, " ", "Lee_Oblated_Stereographic"				, "*) Lee Oblated Stereographic"	},
+		{	"loxim"		, " ", "Loximuthal"								, "[ESRI] Loximuthal"	},
+		{	"lsat"		, " ", "Space_oblique_for_LANDSAT"				, "*) Space oblique for LANDSAT"	},
+		{	"mbt_s"		, " ", "McBryde_Thomas_Flat_Polar_Sine"			, "*) McBryde-Thomas Flat-Polar Sine"	},
+		{	"mbt_fps"	, " ", "McBryde_Thomas_Flat_Polar_Sine_2"		, "*) McBryde-Thomas Flat-Pole Sine (No. 2)"	},
+		{	"mbtfpp"	, " ", "McBryde_Thomas_Flat_Polar_Parabolic"	, "*) McBride-Thomas Flat-Polar Parabolic"	},
+		{	"mbtfpq"	, " ", "Flat_Polar_Quartic"						, "[ESRI] McBryde-Thomas Flat-Polar Quartic"	},
+		{	"mbtfps"	, " ", "McBryde_Thomas_Flat_Polar_Sinusoidal"	, "*) McBryde-Thomas Flat-Polar Sinusoidal"	},
+		{	"merc"		, " ", "Mercator"								, "[ESRI] Mercator"	},
+		{	"merc"		, "<", "Mercator_1SP"							, "Mercator (1 standard parallel)"	},
+		{	"merc"		, "<", "Mercator_2SP"							, "Mercator (2 standard parallels)"	},
+		{	"mil_os"	, " ", "Miller_Oblated_Stereographic"			, "*) Miller Oblated Stereographic"	},
+		{	"mill"		, " ", "Miller_Cylindrical"						, "Miller Cylindrical"	},
+		{	"moll"		, " ", "Mollweide"								, "Mollweide"	},
+		{	"murd1"		, " ", "Murdoch_I"								, "*) Murdoch I"	},
+		{	"murd2"		, " ", "Murdoch_II"								, "*) Murdoch II"	},
+		{	"murd3"		, " ", "Murdoch_III"							, "*) Murdoch III"	},
+		{	"nell"		, " ", "Nell"									, "*) Nell"	},
+		{	"nell_h"	, " ", "Nell_Hammer"							, "*) Nell-Hammer"	},
+		{	"nicol"		, " ", "Nicolosi_Globular"						, "*) Nicolosi Globular"	},
+		{	"nsper"		, " ", "Near_sided_perspective"					, "*) Near-sided perspective"	},
+		{	"nzmg"		, " ", "New_Zealand_Map_Grid"					, "New Zealand Map Grid"	},
+		{	"ob_tran"	, " ", "General_Oblique_Transformation"			, "*) General Oblique Transformation"	},
+		{	"ocea"		, " ", "Oblique_Cylindrical_Equal_Area"			, "*) Oblique Cylindrical Equal Area"	},
+		{	"oea"		, " ", "Oblated_Equal_Area"						, "*) Oblated Equal Area"	},
+		{	"omerc"		, " ", "Hotine_Oblique_Mercator"				, "Oblique Mercator"	},
+		{	"omerc"		, "<", "Oblique_Mercator"						, "Oblique Mercator"	},
+		{	"ortel"		, " ", "Ortelius_Oval"							, "*) Ortelius Oval"	},
+		{	"ortho"		, " ", "Orthographic"							, "Orthographic (ESRI: World from Space)"	},
+		{	"pconic"	, " ", "Perspective_Conic"						, "*) Perspective Conic"	},
+		{	"poly"		, " ", "Polyconic"								, "*) Polyconic (American)"	},
+		{	"putp1"		, " ", "Putnins_P1"								, "*) Putnins P1"	},
+		{	"putp2"		, " ", "Putnins_P2"								, "*) Putnins P2"	},
+		{	"putp3"		, " ", "Putnins_P3"								, "*) Putnins P3"	},
+		{	"putp3p"	, " ", "Putnins_P3'"							, "*) Putnins P3'"	},
+		{	"putp4p"	, " ", "Putnins_P4'"							, "*) Putnins P4'"	},
+		{	"putp5"		, " ", "Putnins_P5"								, "*) Putnins P5"	},
+		{	"putp5p"	, " ", "Putnins_P5'"							, "*) Putnins P5'"	},
+		{	"putp6"		, " ", "Putnins_P6"								, "*) Putnins P6"	},
+		{	"putp6p"	, " ", "Putnins_P6'"							, "*) Putnins P6'"	},
+		{	"qua_aut"	, " ", "Quartic_Authalic"						, "[ESRI] Quartic Authalic"	},
+		{	"robin"		, " ", "Robinson"								, "Robinson"	},
+		{	"rouss"		, " ", "Roussilhe_Stereographic"				, "*) Roussilhe Stereographic"	},
+		{	"rpoly"		, " ", "Rectangular_Polyconic"					, "*) Rectangular Polyconic"	},
+		{	"sinu"		, " ", "Sinusoidal"								, "Sinusoidal (Sanson-Flamsteed)"	},
+		{	"somerc"	, " ", "Hotine_Oblique_Mercator"				, "Swiss Oblique Mercator"	},
+		{	"somerc"	, "<", "Swiss_Oblique_Cylindrical"				, "Swiss Oblique Cylindrical"	},
+		{	"somerc"	, "<", "Hotine_Oblique_Mercator_Azimuth_Center"	, "[ESRI] Swiss Oblique Mercator/Cylindrical"	},
+		{	"stere"		, "<", "Polar_Stereographic"					, "Stereographic"	},
+		{	"stere"		, " ", "Stereographic"							, "[ESRI] Stereographic"	},
+		{	"sterea"	, " ", "Oblique_Stereographic"					, "Oblique Stereographic Alternative"	},
+		{	"gstmerc"	, " ", "Gauss_Schreiber_Transverse_Mercator"	, "*) Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)"	},
+		{	"tcc"		, " ", "Transverse_Central_Cylindrical"			, "*) Transverse Central Cylindrical"	},
+		{	"tcea"		, " ", "Transverse_Cylindrical_Equal_Area"		, "*) Transverse Cylindrical Equal Area"	},
+		{	"tissot"	, " ", "Tissot_Conic"							, "*) Tissot Conic"	},
+		{	"tmerc"		, " ", "Transverse_Mercator"					, "*) Transverse Mercator"	},
+		{	"tmerc"		, "<", "Gauss_Kruger"							, "[ESRI] DHDN"	},
+		{	"tpeqd"		, " ", "Two_Point_Equidistant"					, "*) Two Point Equidistant"	},
+		{	"tpers"		, " ", "Tilted_perspective"						, "*) Tilted perspective"	},
+		{	"ups"		, " ", "Universal_Polar_Stereographic"			, "*) Universal Polar Stereographic"	},
+		{	"urm5"		, " ", "Urmaev_V"								, "*) Urmaev V"	},
+		{	"urmfps"	, " ", "Urmaev_Flat_Polar_Sinusoidal"			, "*) Urmaev Flat-Polar Sinusoidal"	},
+		{	"utm"		, ">", "Transverse_Mercator"					, "*) Universal Transverse Mercator (UTM)"	},
+		{	"vandg"		, "<", "Van_Der_Grinten_I"						, "[ESRI] van der Grinten (I)"	},
+		{	"vandg"		, " ", "VanDerGrinten"							, "van der Grinten (I)"	},
+		{	"vandg2"	, " ", "VanDerGrinten_II"						, "*) van der Grinten II"	},
+		{	"vandg3"	, " ", "VanDerGrinten_III"						, "*) van der Grinten III"	},
+		{	"vandg4"	, " ", "VanDerGrinten_IV"						, "*) van der Grinten IV"	},
+		{	"vitk1"		, " ", "Vitkovsky_I"							, "*) Vitkovsky I"	},
+		{	"wag1"		, " ", "Wagner_I"								, "*) Wagner I (Kavraisky VI)"	},
+		{	"wag2"		, " ", "Wagner_II"								, "*) Wagner II"	},
+		{	"wag3"		, " ", "Wagner_III"								, "*) Wagner III"	},
+		{	"wag4"		, " ", "Wagner_IV"								, "*) Wagner IV"	},
+		{	"wag5"		, " ", "Wagner_V"								, "*) Wagner V"	},
+		{	"wag6"		, " ", "Wagner_VI"								, "*) Wagner VI"	},
+		{	"wag7"		, " ", "Wagner_VII"								, "*) Wagner VII"	},
+		{	"weren"		, " ", "Werenskiold_I"							, "*) Werenskiold I"	},
+		{	"wink1"		, " ", "Winkel_I"								, "[ESRI] Winkel I"	},
+		{	"wink2"		, " ", "Winkel_II"								, "[ESRI] Winkel II"	},
+		{	"wintri"	, " ", "Winkel_Tripel"							, "[ESRI] Winkel Tripel"	},
+
+		// Core Projection Types and Parameters that don't require explicit translation"	},
+	//	{	"lonlat"	, " ", "GEOGCS"									, "Lat/long (Geodetic)"	},
+	//	{	"latlon"	, ">", "GEOGCS"									, "Lat/long (Geodetic alias)"	},
+	//	{	"latlong"	, ">", "GEOGCS"									, "Lat/long (Geodetic alias)"	},
+	//	{	"longlat"	, ">", "GEOGCS"									, "Lat/long (Geodetic alias)"	},
+
+	//	{	"a"			, " ", ""										, "Semimajor radius of the ellipsoid axis"	},
+	//	{	"axis"		, " ", ""										, "Axis orientation (new in 4.8.0)"	},
+	//	{	"b			, " ", ""										, "Semiminor radius of the ellipsoid axis"	},
+	//	{	"datum		, " ", ""										, "Datum name (see `proj -ld`)"	},
+	//	{	"ellps		, " ", ""										, "Ellipsoid name (see `proj -le`)"	},
+	//	{	"nadgrids	, " ", ""										, "Filename of NTv2 grid file to use for datum transforms (see below)"	},
+	//	{	"no_defs	, " ", ""										, "Don't use the /usr/share/proj/proj_def.dat defaults file"	},
+	//	{	"pm			, " ", ""										, "Alternate prime meridian (typically a city name, see below)"	},
+	//	{	"proj		, " ", ""										, "Projection name (see `proj -l`)"	},
+	//	{	"to_meter	, " ", ""										, "Multiplier to convert map units to 1.0m"	},
+	//	{	"towgs84	, " ", ""										, "3 or 7 term datum transform parameters (see below)"	},
+	//	{	"units		, " ", ""										, "meters, US survey feet, etc."	},
+
+	//	{	"south		, " ", ""										, "Denotes southern hemisphere UTM zone"	},
+	//	{	"zone		, " ", ""										, "UTM zone"	},
+
+	//	{	"lon_wrap"	, " ", ""										, "Center longitude to use for wrapping (see below)"	},
+	//	{	"over"		, " ", ""										, "Allow longitude output outside -180 to 180 range, disables wrapping (see below)"	},
+
+		// General Projection Parameters"	},
+		{	"alpha"		, " ", "azimuth"								, "? Used with Oblique Mercator and possibly a few others"	},
+		{	"k"			, ">", "scale_factor"							, "Scaling factor (old name)"	},
+		{	"K"			, ">", "scale_factor"							, "? Scaling factor (old name)"	},
+		{	"k_0"		, " ", "scale_factor"							, "Scaling factor (new name)"	},
+		{	"lat_0"		, " ", "latitude_of_origin"						, "Latitude of origin"	},
+		{	"lat_0"		, "<", "latitude_of_center"						, "Latitude of center"	},
+		{	"lat_0"		, "<", "central_parallel"						, "[ESRI] Latitude of center"	},
+		{	"lat_1"		, " ", "standard_parallel_1"					, "Latitude of first standard parallel"	},
+		{	"lat_2"		, " ", "standard_parallel_2"					, "Latitude of second standard parallel"	},
+		{	"lat_ts"	, ">", "latitude_of_origin"						, "Latitude of true scale"	},
+		{	"lon_0"		, " ", "central_meridian"						, "Central meridian"	},
+		{	"lon_0"		, "<", "longitude_of_center"					, "Longitude of center"	},
+		{	"lonc"		, " ", "longitude_of_center"					, "? Longitude used with Oblique Mercator and possibly a few others"	},
+		{	"x_0"		, " ", "false_easting"							, "False easting"	},
+		{	"y_0"		, " ", "false_northing"							, "False northing"	},
+
+		// Additional Projection Parameters"	},
+		{	"azi"		, " ", ""										, ""	},
+		{	"belgium"	, " ", ""										, ""	},
+		{	"beta"		, " ", ""										, ""	},
+		{	"czech"		, " ", ""										, ""	},
+		{	"gamma"		, " ", ""										, ""	},
+		{	"geoc"		, " ", ""										, ""	},
+		{	"guam"		, " ", ""										, ""	},
+		{	"h"			, " ", "satellite_height"						, "Satellite height (geos - Geostationary Satellite View)"	},
+		{	"lat_b"		, " ", ""										, ""	},
+		{	"lat_t"		, " ", ""										, ""	},
+		{	"lon_1"		, " ", ""										, ""	},
+		{	"lon_2"		, " ", ""										, ""	},
+		{	"lsat"		, " ", ""										, ""	},
+		{	"m"			, " ", ""										, ""	},
+		{	"M"			, " ", ""										, ""	},
+		{	"n"			, " ", ""										, ""	},
+		{	"no_cut"	, " ", ""										, ""	},
+		{	"no_off"	, " ", ""										, ""	},
+		{	"no_rot"	, " ", ""										, ""	},
+		{	"ns"		, " ", ""										, ""	},
+		{	"o_alpha"	, " ", ""										, ""	},
+		{	"o_lat_1"	, " ", ""										, ""	},
+		{	"o_lat_2"	, " ", ""										, ""	},
+		{	"o_lat_c"	, " ", ""										, ""	},
+		{	"o_lat_p"	, " ", ""										, ""	},
+		{	"o_lon_1"	, " ", ""										, ""	},
+		{	"o_lon_2"	, " ", ""										, ""	},
+		{	"o_lon_c"	, " ", ""										, ""	},
+		{	"o_lon_p"	, " ", ""										, ""	},
+		{	"o_proj"	, " ", ""										, ""	},
+		{	"over"		, " ", ""										, ""	},
+		{	"p"			, " ", ""										, ""	},
+		{	"path"		, " ", ""										, ""	},
+		{	"q"			, " ", ""										, ""	},
+		{	"R"			, " ", ""										, ""	},
+		{	"R_a"		, " ", ""										, ""	},
+		{	"R_A"		, " ", ""										, ""	},
+		{	"R_g"		, " ", ""										, ""	},
+		{	"R_h"		, " ", ""										, ""	},
+		{	"R_lat_a"	, " ", ""										, ""	},
+		{	"R_lat_g"	, " ", ""										, ""	},
+		{	"rot"		, " ", ""										, ""	},
+		{	"R_V"		, " ", ""										, ""	},
+		{	"s"			, " ", ""										, ""	},
+		{	"sym"		, " ", ""										, ""	},
+		{	"t"			, " ", ""										, ""	},
+		{	"theta"		, " ", ""										, ""	},
+		{	"tilt"		, " ", ""										, ""	},
+		{	"vopt"		, " ", ""										, ""	},
+		{	"W"			, " ", ""										, ""	},
+		{	"westo"		, " ", ""										, ""	},
+
+		{	""			, " ", ""										, ""	}	// dummy
+	};
+
+	//-----------------------------------------------------
+	Dictionary.Create(SG_T("Proj.4-WKT Dictionary"));
+
+	if( Direction == 0 )
+	{
+		Dictionary.Add_Field(SG_T("PROJ4"), SG_DATATYPE_String);
+		Dictionary.Add_Field(SG_T("DIR")  , SG_DATATYPE_String);
+		Dictionary.Add_Field(SG_T("WKT")  , SG_DATATYPE_String);
+		Dictionary.Add_Field(SG_T("DESC") , SG_DATATYPE_String);
+
+		for(int i=0; i<n; i++)
+		{
+			CSG_Table_Record	*pRecord	= Dictionary.Add_Record();
+
+			pRecord->Set_Value(0, SG_STR_MBTOSG(Translation[i][0]));
+			pRecord->Set_Value(1, SG_STR_MBTOSG(Translation[i][1]));
+			pRecord->Set_Value(2, SG_STR_MBTOSG(Translation[i][2]));
+			pRecord->Set_Value(3, SG_STR_MBTOSG(Translation[i][3]));
+		}
+	}
+	else if( Direction > 0 )	// Proj4 to WKT
+	{
+		Dictionary.Add_Field(SG_T("PROJ4"), SG_DATATYPE_String);
+		Dictionary.Add_Field(SG_T("WKT")  , SG_DATATYPE_String);
+
+		for(int i=0; i<n; i++)
+		{
+			if( Translation[i][1][0] != '<' )	// only WKT to Proj4
+			{
+				CSG_Table_Record	*pRecord	= Dictionary.Add_Record();
+
+				pRecord->Set_Value(0, SG_STR_MBTOSG(Translation[i][0]));
+				pRecord->Set_Value(1, SG_STR_MBTOSG(Translation[i][2]));
+			}
+		}
+	}
+	else if( Direction < 0 )	// WKT to Proj4
+	{
+		Dictionary.Add_Field(SG_T("WKT")  , SG_DATATYPE_String);
+		Dictionary.Add_Field(SG_T("PROJ4"), SG_DATATYPE_String);
+
+		for(int i=0; i<n; i++)
+		{
+			if( Translation[i][1][0] != '<' )	// only Proj4 to WKT
+			{
+				CSG_Table_Record	*pRecord	= Dictionary.Add_Record();
+
+				pRecord->Set_Value(0, SG_STR_MBTOSG(Translation[i][2]));
+				pRecord->Set_Value(1, SG_STR_MBTOSG(Translation[i][0]));
+			}
+		}
+	}
+
+	return( Dictionary.Get_Count() > 0 );
+}
+
+//---------------------------------------------------------
+bool CSG_Projections::_Set_Dictionary(CSG_Translator &Dictionary, int Direction)
+{
+	CSG_Table	Table;
+
+	return( _Set_Dictionary(Table, Direction) && Dictionary.Create(&Table, 0, 1, true) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_api/saga_api.h b/src/saga_core/saga_api/saga_api.h
index 97edf65..2e7ff63 100644
--- a/src/saga_core/saga_api/saga_api.h
+++ b/src/saga_core/saga_api/saga_api.h
@@ -63,13 +63,15 @@
 #ifdef SWIG
 
 //---------------------------------------------------------
+#ifdef _SAGA_UNICODE
+%include <typemaps.i>
+%include <python/cwstring.i>
+#endif
+
 %module saga_api
 %{
 #include "api_core.h"
 #include "dataobject.h"
-#include "doc_html.h"
-#include "doc_pdf.h"
-#include "doc_svg.h"
 #include "geo_tools.h"
 #include "grid.h"
 #include "grid_pyramid.h"
@@ -111,9 +113,6 @@
 //---------------------------------------------------------
 #include "module_library.h"
 
-#include "doc_pdf.h"
-#include "doc_html.h"
-
 
 ///////////////////////////////////////////////////////////
 //														 //
@@ -132,7 +131,7 @@ SAGA_API_DLL_EXPORT const SG_Char *	SAGA_API_Get_Version(void);
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-#define SAGA_API_VERSION			SG_T("2.0.5")
+#define SAGA_API_VERSION			SG_T("2.0.6")
 
 
 ///////////////////////////////////////////////////////////
diff --git a/src/saga_core/saga_api/saga_api.py b/src/saga_core/saga_api/saga_api.py
new file mode 100644
index 0000000..314a8ab
--- /dev/null
+++ b/src/saga_core/saga_api/saga_api.py
@@ -0,0 +1,4109 @@
+# This file was automatically generated by SWIG (http://www.swig.org).
+# Version 1.3.40
+#
+# Do not make changes to this file unless you know what you are doing--modify
+# the SWIG interface file instead.
+# This file is compatible with both classic and new-style classes.
+
+from sys import version_info
+if version_info >= (2,6,0):
+    def swig_import_helper():
+        from os.path import dirname
+        import imp
+        fp = None
+        try:
+            fp, pathname, description = imp.find_module('_saga_api', [dirname(__file__)])
+        except ImportError:
+            import _saga_api
+            return _saga_api
+        if fp is not None:
+            try:
+                _mod = imp.load_module('_saga_api', fp, pathname, description)
+            finally:
+                fp.close()
+            return _mod
+    _saga_api = swig_import_helper()
+    del swig_import_helper
+else:
+    import _saga_api
+del version_info
+try:
+    _swig_property = property
+except NameError:
+    pass # Python < 2.2 doesn't have 'property'.
+def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
+    if (name == "thisown"): return self.this.own(value)
+    if (name == "this"):
+        if type(value).__name__ == 'SwigPyObject':
+            self.__dict__[name] = value
+            return
+    method = class_type.__swig_setmethods__.get(name,None)
+    if method: return method(self,value)
+    if (not static) or hasattr(self,name):
+        self.__dict__[name] = value
+    else:
+        raise AttributeError("You cannot add attributes to %s" % self)
+
+def _swig_setattr(self,class_type,name,value):
+    return _swig_setattr_nondynamic(self,class_type,name,value,0)
+
+def _swig_getattr(self,class_type,name):
+    if (name == "thisown"): return self.this.own()
+    method = class_type.__swig_getmethods__.get(name,None)
+    if method: return method(self)
+    raise AttributeError(name)
+
+def _swig_repr(self):
+    try: strthis = "proxy of " + self.this.__repr__()
+    except: strthis = ""
+    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
+
+try:
+    _object = object
+    _newclass = 1
+except AttributeError:
+    class _object : pass
+    _newclass = 0
+
+
+SIZEOF_LONG = _saga_api.SIZEOF_LONG
+
+def SG_Malloc(*args):
+  return _saga_api.SG_Malloc(*args)
+SG_Malloc = _saga_api.SG_Malloc
+
+def SG_Calloc(*args):
+  return _saga_api.SG_Calloc(*args)
+SG_Calloc = _saga_api.SG_Calloc
+
+def SG_Realloc(*args):
+  return _saga_api.SG_Realloc(*args)
+SG_Realloc = _saga_api.SG_Realloc
+
+def SG_Free(*args):
+  return _saga_api.SG_Free(*args)
+SG_Free = _saga_api.SG_Free
+
+def SG_Swap_Bytes(*args):
+  return _saga_api.SG_Swap_Bytes(*args)
+SG_Swap_Bytes = _saga_api.SG_Swap_Bytes
+
+def SG_Mem_Get_Int(*args):
+  return _saga_api.SG_Mem_Get_Int(*args)
+SG_Mem_Get_Int = _saga_api.SG_Mem_Get_Int
+
+def SG_Mem_Set_Int(*args):
+  return _saga_api.SG_Mem_Set_Int(*args)
+SG_Mem_Set_Int = _saga_api.SG_Mem_Set_Int
+
+def SG_Mem_Get_Double(*args):
+  return _saga_api.SG_Mem_Get_Double(*args)
+SG_Mem_Get_Double = _saga_api.SG_Mem_Get_Double
+
+def SG_Mem_Set_Double(*args):
+  return _saga_api.SG_Mem_Set_Double(*args)
+SG_Mem_Set_Double = _saga_api.SG_Mem_Set_Double
+class CSG_String(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_String, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_String, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_String(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_String
+    __del__ = lambda self : None;
+    def c_str(self): return _saga_api.CSG_String_c_str(self)
+    def b_str(self): return _saga_api.CSG_String_b_str(self)
+    def Length(self): return _saga_api.CSG_String_Length(self)
+    def Clear(self): return _saga_api.CSG_String_Clear(self)
+    __swig_getmethods__["Format"] = lambda x: _saga_api.CSG_String_Format
+    if _newclass:Format = staticmethod(_saga_api.CSG_String_Format)
+    def Printf(self, *args): return _saga_api.CSG_String_Printf(self, *args)
+    def Scanf(self, *args): return _saga_api.CSG_String_Scanf(self, *args)
+    def Append(self, *args): return _saga_api.CSG_String_Append(self, *args)
+    def __add__(self, *args): return _saga_api.CSG_String___add__(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_String___iadd__(self, *args)
+    def Cmp(self, *args): return _saga_api.CSG_String_Cmp(self, *args)
+    def CmpNoCase(self, *args): return _saga_api.CSG_String_CmpNoCase(self, *args)
+    def Make_Lower(self): return _saga_api.CSG_String_Make_Lower(self)
+    def Make_Upper(self): return _saga_api.CSG_String_Make_Upper(self)
+    def Replace(self, *args): return _saga_api.CSG_String_Replace(self, *args)
+    def Remove(self, *args): return _saga_api.CSG_String_Remove(self, *args)
+    def Trim(self, fromRight = False): return _saga_api.CSG_String_Trim(self, fromRight)
+    def Find(self, *args): return _saga_api.CSG_String_Find(self, *args)
+    def Contains(self, *args): return _saga_api.CSG_String_Contains(self, *args)
+    def AfterFirst(self, *args): return _saga_api.CSG_String_AfterFirst(self, *args)
+    def AfterLast(self, *args): return _saga_api.CSG_String_AfterLast(self, *args)
+    def BeforeFirst(self, *args): return _saga_api.CSG_String_BeforeFirst(self, *args)
+    def BeforeLast(self, *args): return _saga_api.CSG_String_BeforeLast(self, *args)
+    def Right(self, *args): return _saga_api.CSG_String_Right(self, *args)
+    def Mid(self, *args): return _saga_api.CSG_String_Mid(self, *args)
+    def Left(self, *args): return _saga_api.CSG_String_Left(self, *args)
+    def asInt(self, *args): return _saga_api.CSG_String_asInt(self, *args)
+    def asDouble(self, *args): return _saga_api.CSG_String_asDouble(self, *args)
+CSG_String_swigregister = _saga_api.CSG_String_swigregister
+CSG_String_swigregister(CSG_String)
+
+def CSG_String_Format(*args):
+  return _saga_api.CSG_String_Format(*args)
+CSG_String_Format = _saga_api.CSG_String_Format
+
+class CSG_Strings(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Strings, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Strings, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Strings(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Strings
+    __del__ = lambda self : None;
+    def Clear(self): return _saga_api.CSG_Strings_Clear(self)
+    def Assign(self, *args): return _saga_api.CSG_Strings_Assign(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Strings_Add(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_Strings___iadd__(self, *args)
+    def Set_Count(self, *args): return _saga_api.CSG_Strings_Set_Count(self, *args)
+    def Get_Count(self): return _saga_api.CSG_Strings_Get_Count(self)
+    def Get_String(self, *args): return _saga_api.CSG_Strings_Get_String(self, *args)
+CSG_Strings_swigregister = _saga_api.CSG_Strings_swigregister
+CSG_Strings_swigregister(CSG_Strings)
+
+
+def SG_Printf(*args):
+  return _saga_api.SG_Printf(*args)
+SG_Printf = _saga_api.SG_Printf
+
+def SG_FPrintf(*args):
+  return _saga_api.SG_FPrintf(*args)
+SG_FPrintf = _saga_api.SG_FPrintf
+
+def SG_Sscanf(*args):
+  return _saga_api.SG_Sscanf(*args)
+SG_Sscanf = _saga_api.SG_Sscanf
+
+def SG_UTF8_To_String(*args):
+  return _saga_api.SG_UTF8_To_String(*args)
+SG_UTF8_To_String = _saga_api.SG_UTF8_To_String
+
+def SG_String_To_UTF8(*args):
+  return _saga_api.SG_String_To_UTF8(*args)
+SG_String_To_UTF8 = _saga_api.SG_String_To_UTF8
+
+def SG_Degree_To_Double(*args):
+  return _saga_api.SG_Degree_To_Double(*args)
+SG_Degree_To_Double = _saga_api.SG_Degree_To_Double
+
+def SG_Double_To_Degree(*args):
+  return _saga_api.SG_Double_To_Degree(*args)
+SG_Double_To_Degree = _saga_api.SG_Double_To_Degree
+
+def SG_Date_To_Number(*args):
+  return _saga_api.SG_Date_To_Number(*args)
+SG_Date_To_Number = _saga_api.SG_Date_To_Number
+
+def SG_Flip_Decimal_Separators(*args):
+  return _saga_api.SG_Flip_Decimal_Separators(*args)
+SG_Flip_Decimal_Separators = _saga_api.SG_Flip_Decimal_Separators
+SG_ARRAY_GROWTH_0 = _saga_api.SG_ARRAY_GROWTH_0
+SG_ARRAY_GROWTH_1 = _saga_api.SG_ARRAY_GROWTH_1
+SG_ARRAY_GROWTH_2 = _saga_api.SG_ARRAY_GROWTH_2
+SG_ARRAY_GROWTH_3 = _saga_api.SG_ARRAY_GROWTH_3
+class CSG_Array(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Array, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Array, name)
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Array
+    __del__ = lambda self : None;
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Array(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Array_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_Array_Destroy(self)
+    def Set_Growth(self, *args): return _saga_api.CSG_Array_Set_Growth(self, *args)
+    def Get_Growth(self): return _saga_api.CSG_Array_Get_Growth(self)
+    def Get_Size(self): return _saga_api.CSG_Array_Get_Size(self)
+    def Get_Entry(self, *args): return _saga_api.CSG_Array_Get_Entry(self, *args)
+    def Get_Array(self, *args): return _saga_api.CSG_Array_Get_Array(self, *args)
+    def Set_Array(self, *args): return _saga_api.CSG_Array_Set_Array(self, *args)
+    def Inc_Array(self, *args): return _saga_api.CSG_Array_Inc_Array(self, *args)
+    def Dec_Array(self, *args): return _saga_api.CSG_Array_Dec_Array(self, *args)
+CSG_Array_swigregister = _saga_api.CSG_Array_swigregister
+CSG_Array_swigregister(CSG_Array)
+
+def SG_Get_CurrentTimeStr(bWithDate = True):
+  return _saga_api.SG_Get_CurrentTimeStr(bWithDate)
+SG_Get_CurrentTimeStr = _saga_api.SG_Get_CurrentTimeStr
+
+def SG_Number_To_Date(*args):
+  return _saga_api.SG_Number_To_Date(*args)
+SG_Number_To_Date = _saga_api.SG_Number_To_Date
+
+def SG_Get_Significant_Decimals(*args):
+  return _saga_api.SG_Get_Significant_Decimals(*args)
+SG_Get_Significant_Decimals = _saga_api.SG_Get_Significant_Decimals
+
+def SG_Get_String(*args):
+  return _saga_api.SG_Get_String(*args)
+SG_Get_String = _saga_api.SG_Get_String
+
+class CSG_Buffer(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Buffer, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Buffer, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Buffer(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Buffer_Create(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_Buffer
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Buffer_Destroy(self)
+    def Set_Size(self, *args): return _saga_api.CSG_Buffer_Set_Size(self, *args)
+    def Inc_Size(self, *args): return _saga_api.CSG_Buffer_Inc_Size(self, *args)
+    def Get_Size(self): return _saga_api.CSG_Buffer_Get_Size(self)
+    def Set_Data(self, *args): return _saga_api.CSG_Buffer_Set_Data(self, *args)
+    def Get_Data(self, Offset = 0): return _saga_api.CSG_Buffer_Get_Data(self, Offset)
+    def Add_Value(self, *args): return _saga_api.CSG_Buffer_Add_Value(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_Buffer___iadd__(self, *args)
+    def Set_Value(self, *args): return _saga_api.CSG_Buffer_Set_Value(self, *args)
+    def asShort(self, *args): return _saga_api.CSG_Buffer_asShort(self, *args)
+    def asInt(self, *args): return _saga_api.CSG_Buffer_asInt(self, *args)
+    def asFloat(self, *args): return _saga_api.CSG_Buffer_asFloat(self, *args)
+    def asDouble(self, *args): return _saga_api.CSG_Buffer_asDouble(self, *args)
+CSG_Buffer_swigregister = _saga_api.CSG_Buffer_swigregister
+CSG_Buffer_swigregister(CSG_Buffer)
+
+class CSG_Bytes(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Bytes, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Bytes, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Bytes(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Bytes_Create(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_Bytes
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Bytes_Destroy(self)
+    def Clear(self): return _saga_api.CSG_Bytes_Clear(self)
+    def Rewind(self): return _saga_api.CSG_Bytes_Rewind(self)
+    def is_EOF(self): return _saga_api.CSG_Bytes_is_EOF(self)
+    def Get_Count(self): return _saga_api.CSG_Bytes_Get_Count(self)
+    def Get_Bytes(self, *args): return _saga_api.CSG_Bytes_Get_Bytes(self, *args)
+    def __add__(self, *args): return _saga_api.CSG_Bytes___add__(self, *args)
+    def Get_Byte(self, *args): return _saga_api.CSG_Bytes_Get_Byte(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_Bytes_Assign(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Bytes_Add(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_Bytes___iadd__(self, *args)
+    def asByte(self, *args): return _saga_api.CSG_Bytes_asByte(self, *args)
+    def asChar(self, *args): return _saga_api.CSG_Bytes_asChar(self, *args)
+    def asShort(self, *args): return _saga_api.CSG_Bytes_asShort(self, *args)
+    def asWord(self, *args): return _saga_api.CSG_Bytes_asWord(self, *args)
+    def asInt(self, *args): return _saga_api.CSG_Bytes_asInt(self, *args)
+    def asDWord(self, *args): return _saga_api.CSG_Bytes_asDWord(self, *args)
+    def asFloat(self, *args): return _saga_api.CSG_Bytes_asFloat(self, *args)
+    def asDouble(self, *args): return _saga_api.CSG_Bytes_asDouble(self, *args)
+    def Read_Byte(self): return _saga_api.CSG_Bytes_Read_Byte(self)
+    def Read_Char(self): return _saga_api.CSG_Bytes_Read_Char(self)
+    def Read_Short(self, bSwapBytes = False): return _saga_api.CSG_Bytes_Read_Short(self, bSwapBytes)
+    def Read_Word(self, bSwapBytes = False): return _saga_api.CSG_Bytes_Read_Word(self, bSwapBytes)
+    def Read_Int(self, bSwapBytes = False): return _saga_api.CSG_Bytes_Read_Int(self, bSwapBytes)
+    def Read_DWord(self, bSwapBytes = False): return _saga_api.CSG_Bytes_Read_DWord(self, bSwapBytes)
+    def Read_Float(self, bSwapBytes = False): return _saga_api.CSG_Bytes_Read_Float(self, bSwapBytes)
+    def Read_Double(self, bSwapBytes = False): return _saga_api.CSG_Bytes_Read_Double(self, bSwapBytes)
+    def toHexString(self): return _saga_api.CSG_Bytes_toHexString(self)
+    def fromHexString(self, *args): return _saga_api.CSG_Bytes_fromHexString(self, *args)
+CSG_Bytes_swigregister = _saga_api.CSG_Bytes_swigregister
+CSG_Bytes_swigregister(CSG_Bytes)
+
+class CSG_Bytes_Array(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Bytes_Array, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Bytes_Array, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Bytes_Array()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Bytes_Array
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Bytes_Array_Destroy(self)
+    def Get_Count(self): return _saga_api.CSG_Bytes_Array_Get_Count(self)
+    def Get_Bytes(self, *args): return _saga_api.CSG_Bytes_Array_Get_Bytes(self, *args)
+    def Add(self): return _saga_api.CSG_Bytes_Array_Add(self)
+CSG_Bytes_Array_swigregister = _saga_api.CSG_Bytes_Array_swigregister
+CSG_Bytes_Array_swigregister(CSG_Bytes_Array)
+
+class CSG_Stack(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Stack, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Stack, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Stack(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Stack
+    __del__ = lambda self : None;
+    def Get_RecordSize(self): return _saga_api.CSG_Stack_Get_RecordSize(self)
+    def Get_Size(self): return _saga_api.CSG_Stack_Get_Size(self)
+    def Clear(self): return _saga_api.CSG_Stack_Clear(self)
+    def Destroy(self): return _saga_api.CSG_Stack_Destroy(self)
+CSG_Stack_swigregister = _saga_api.CSG_Stack_swigregister
+CSG_Stack_swigregister(CSG_Stack)
+
+SG_DATATYPE_Bit = _saga_api.SG_DATATYPE_Bit
+SG_DATATYPE_Byte = _saga_api.SG_DATATYPE_Byte
+SG_DATATYPE_Char = _saga_api.SG_DATATYPE_Char
+SG_DATATYPE_Word = _saga_api.SG_DATATYPE_Word
+SG_DATATYPE_Short = _saga_api.SG_DATATYPE_Short
+SG_DATATYPE_DWord = _saga_api.SG_DATATYPE_DWord
+SG_DATATYPE_Int = _saga_api.SG_DATATYPE_Int
+SG_DATATYPE_ULong = _saga_api.SG_DATATYPE_ULong
+SG_DATATYPE_Long = _saga_api.SG_DATATYPE_Long
+SG_DATATYPE_Float = _saga_api.SG_DATATYPE_Float
+SG_DATATYPE_Double = _saga_api.SG_DATATYPE_Double
+SG_DATATYPE_String = _saga_api.SG_DATATYPE_String
+SG_DATATYPE_Date = _saga_api.SG_DATATYPE_Date
+SG_DATATYPE_Color = _saga_api.SG_DATATYPE_Color
+SG_DATATYPE_Binary = _saga_api.SG_DATATYPE_Binary
+SG_DATATYPE_Undefined = _saga_api.SG_DATATYPE_Undefined
+
+def SG_Data_Type_Get_Size(*args):
+  return _saga_api.SG_Data_Type_Get_Size(*args)
+SG_Data_Type_Get_Size = _saga_api.SG_Data_Type_Get_Size
+
+def SG_Data_Type_Get_Name(*args):
+  return _saga_api.SG_Data_Type_Get_Name(*args)
+SG_Data_Type_Get_Name = _saga_api.SG_Data_Type_Get_Name
+
+def SG_Data_Type_is_Numeric(*args):
+  return _saga_api.SG_Data_Type_is_Numeric(*args)
+SG_Data_Type_is_Numeric = _saga_api.SG_Data_Type_is_Numeric
+
+def SG_DataType_Range_Check(*args):
+  return _saga_api.SG_DataType_Range_Check(*args)
+SG_DataType_Range_Check = _saga_api.SG_DataType_Range_Check
+SG_FILE_R = _saga_api.SG_FILE_R
+SG_FILE_W = _saga_api.SG_FILE_W
+SG_FILE_RW = _saga_api.SG_FILE_RW
+SG_FILE_WA = _saga_api.SG_FILE_WA
+SG_FILE_RWA = _saga_api.SG_FILE_RWA
+SG_FILE_START = _saga_api.SG_FILE_START
+SG_FILE_CURRENT = _saga_api.SG_FILE_CURRENT
+SG_FILE_END = _saga_api.SG_FILE_END
+class CSG_File(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_File, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_File, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_File(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_File
+    __del__ = lambda self : None;
+    def Attach(self, *args): return _saga_api.CSG_File_Attach(self, *args)
+    def Detach(self): return _saga_api.CSG_File_Detach(self)
+    def Get_Stream(self): return _saga_api.CSG_File_Get_Stream(self)
+    def Get_UnicodeFlag(self): return _saga_api.CSG_File_Get_UnicodeFlag(self)
+    def Set_UnicodeFlag(self, *args): return _saga_api.CSG_File_Set_UnicodeFlag(self, *args)
+    def Open(self, *args): return _saga_api.CSG_File_Open(self, *args)
+    def Close(self): return _saga_api.CSG_File_Close(self)
+    def is_Open(self): return _saga_api.CSG_File_is_Open(self)
+    def is_EOF(self): return _saga_api.CSG_File_is_EOF(self)
+    def Length(self): return _saga_api.CSG_File_Length(self)
+    def Seek(self, *args): return _saga_api.CSG_File_Seek(self, *args)
+    def Seek_Start(self): return _saga_api.CSG_File_Seek_Start(self)
+    def Seek_End(self): return _saga_api.CSG_File_Seek_End(self)
+    def Tell(self): return _saga_api.CSG_File_Tell(self)
+    def Flush(self): return _saga_api.CSG_File_Flush(self)
+    def Printf(self, *args): return _saga_api.CSG_File_Printf(self, *args)
+    def Scanf(self, *args): return _saga_api.CSG_File_Scanf(self, *args)
+    def Get_Character(self): return _saga_api.CSG_File_Get_Character(self)
+    def Read(self, *args): return _saga_api.CSG_File_Read(self, *args)
+    def Write(self, *args): return _saga_api.CSG_File_Write(self, *args)
+    def Read_Line(self, *args): return _saga_api.CSG_File_Read_Line(self, *args)
+    def Read_Int(self, bBigEndian = False): return _saga_api.CSG_File_Read_Int(self, bBigEndian)
+    def Write_Int(self, *args): return _saga_api.CSG_File_Write_Int(self, *args)
+    def Read_Double(self, bBigEndian = False): return _saga_api.CSG_File_Read_Double(self, bBigEndian)
+    def Write_Double(self, *args): return _saga_api.CSG_File_Write_Double(self, *args)
+    def Scan(self, *args): return _saga_api.CSG_File_Scan(self, *args)
+    def Scan_Int(self): return _saga_api.CSG_File_Scan_Int(self)
+    def Scan_Double(self): return _saga_api.CSG_File_Scan_Double(self)
+    def Scan_String(self, *args): return _saga_api.CSG_File_Scan_String(self, *args)
+CSG_File_swigregister = _saga_api.CSG_File_swigregister
+CSG_File_swigregister(CSG_File)
+cvar = _saga_api.cvar
+gSG_Data_Type_Identifier = cvar.gSG_Data_Type_Identifier
+
+
+def SG_Dir_Exists(*args):
+  return _saga_api.SG_Dir_Exists(*args)
+SG_Dir_Exists = _saga_api.SG_Dir_Exists
+
+def SG_Dir_Create(*args):
+  return _saga_api.SG_Dir_Create(*args)
+SG_Dir_Create = _saga_api.SG_Dir_Create
+
+def SG_Dir_Get_Current():
+  return _saga_api.SG_Dir_Get_Current()
+SG_Dir_Get_Current = _saga_api.SG_Dir_Get_Current
+
+def SG_File_Exists(*args):
+  return _saga_api.SG_File_Exists(*args)
+SG_File_Exists = _saga_api.SG_File_Exists
+
+def SG_File_Delete(*args):
+  return _saga_api.SG_File_Delete(*args)
+SG_File_Delete = _saga_api.SG_File_Delete
+
+def SG_File_Get_TmpName(*args):
+  return _saga_api.SG_File_Get_TmpName(*args)
+SG_File_Get_TmpName = _saga_api.SG_File_Get_TmpName
+
+def SG_File_Get_Name(*args):
+  return _saga_api.SG_File_Get_Name(*args)
+SG_File_Get_Name = _saga_api.SG_File_Get_Name
+
+def SG_File_Get_Path(*args):
+  return _saga_api.SG_File_Get_Path(*args)
+SG_File_Get_Path = _saga_api.SG_File_Get_Path
+
+def SG_File_Cmp_Extension(*args):
+  return _saga_api.SG_File_Cmp_Extension(*args)
+SG_File_Cmp_Extension = _saga_api.SG_File_Cmp_Extension
+
+def SG_File_Get_Extension(*args):
+  return _saga_api.SG_File_Get_Extension(*args)
+SG_File_Get_Extension = _saga_api.SG_File_Get_Extension
+
+def SG_File_Set_Extension(*args):
+  return _saga_api.SG_File_Set_Extension(*args)
+SG_File_Set_Extension = _saga_api.SG_File_Set_Extension
+
+def SG_Read_Line(*args):
+  return _saga_api.SG_Read_Line(*args)
+SG_Read_Line = _saga_api.SG_Read_Line
+SG_COLOR_NONE = _saga_api.SG_COLOR_NONE
+SG_COLOR_RANDOM = _saga_api.SG_COLOR_RANDOM
+SG_COLORS_DEFAULT = _saga_api.SG_COLORS_DEFAULT
+SG_COLORS_DEFAULT_BRIGHT = _saga_api.SG_COLORS_DEFAULT_BRIGHT
+SG_COLORS_BLACK_WHITE = _saga_api.SG_COLORS_BLACK_WHITE
+SG_COLORS_BLACK_RED = _saga_api.SG_COLORS_BLACK_RED
+SG_COLORS_BLACK_GREEN = _saga_api.SG_COLORS_BLACK_GREEN
+SG_COLORS_BLACK_BLUE = _saga_api.SG_COLORS_BLACK_BLUE
+SG_COLORS_WHITE_RED = _saga_api.SG_COLORS_WHITE_RED
+SG_COLORS_WHITE_GREEN = _saga_api.SG_COLORS_WHITE_GREEN
+SG_COLORS_WHITE_BLUE = _saga_api.SG_COLORS_WHITE_BLUE
+SG_COLORS_YELLOW_RED = _saga_api.SG_COLORS_YELLOW_RED
+SG_COLORS_YELLOW_GREEN = _saga_api.SG_COLORS_YELLOW_GREEN
+SG_COLORS_YELLOW_BLUE = _saga_api.SG_COLORS_YELLOW_BLUE
+SG_COLORS_RED_GREEN = _saga_api.SG_COLORS_RED_GREEN
+SG_COLORS_RED_BLUE = _saga_api.SG_COLORS_RED_BLUE
+SG_COLORS_GREEN_BLUE = _saga_api.SG_COLORS_GREEN_BLUE
+SG_COLORS_RED_GREY_BLUE = _saga_api.SG_COLORS_RED_GREY_BLUE
+SG_COLORS_RED_GREY_GREEN = _saga_api.SG_COLORS_RED_GREY_GREEN
+SG_COLORS_GREEN_GREY_BLUE = _saga_api.SG_COLORS_GREEN_GREY_BLUE
+SG_COLORS_RED_GREEN_BLUE = _saga_api.SG_COLORS_RED_GREEN_BLUE
+SG_COLORS_RED_BLUE_GREEN = _saga_api.SG_COLORS_RED_BLUE_GREEN
+SG_COLORS_GREEN_RED_BLUE = _saga_api.SG_COLORS_GREEN_RED_BLUE
+SG_COLORS_RAINBOW = _saga_api.SG_COLORS_RAINBOW
+SG_COLORS_NEON = _saga_api.SG_COLORS_NEON
+SG_COLORS_COUNT = _saga_api.SG_COLORS_COUNT
+class CSG_Colors(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Colors, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Colors, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Colors(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Colors
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Colors_Destroy(self)
+    def Set_Count(self, *args): return _saga_api.CSG_Colors_Set_Count(self, *args)
+    def Get_Count(self): return _saga_api.CSG_Colors_Get_Count(self)
+    def Set_Color(self, *args): return _saga_api.CSG_Colors_Set_Color(self, *args)
+    def Set_Red(self, *args): return _saga_api.CSG_Colors_Set_Red(self, *args)
+    def Set_Green(self, *args): return _saga_api.CSG_Colors_Set_Green(self, *args)
+    def Set_Blue(self, *args): return _saga_api.CSG_Colors_Set_Blue(self, *args)
+    def Set_Brightness(self, *args): return _saga_api.CSG_Colors_Set_Brightness(self, *args)
+    def Get_Color(self, *args): return _saga_api.CSG_Colors_Get_Color(self, *args)
+    def Get_Red(self, *args): return _saga_api.CSG_Colors_Get_Red(self, *args)
+    def Get_Green(self, *args): return _saga_api.CSG_Colors_Get_Green(self, *args)
+    def Get_Blue(self, *args): return _saga_api.CSG_Colors_Get_Blue(self, *args)
+    def Get_Brightness(self, *args): return _saga_api.CSG_Colors_Get_Brightness(self, *args)
+    def Set_Default(self, nColors = 100): return _saga_api.CSG_Colors_Set_Default(self, nColors)
+    def Set_Palette(self, *args): return _saga_api.CSG_Colors_Set_Palette(self, *args)
+    def Set_Ramp(self, *args): return _saga_api.CSG_Colors_Set_Ramp(self, *args)
+    def Set_Ramp_Brighness(self, *args): return _saga_api.CSG_Colors_Set_Ramp_Brighness(self, *args)
+    def Random(self): return _saga_api.CSG_Colors_Random(self)
+    def Invert(self): return _saga_api.CSG_Colors_Invert(self)
+    def Revert(self): return _saga_api.CSG_Colors_Revert(self)
+    def Assign(self, *args): return _saga_api.CSG_Colors_Assign(self, *args)
+    def Load(self, *args): return _saga_api.CSG_Colors_Load(self, *args)
+    def Save(self, *args): return _saga_api.CSG_Colors_Save(self, *args)
+    def Serialize(self, *args): return _saga_api.CSG_Colors_Serialize(self, *args)
+CSG_Colors_swigregister = _saga_api.CSG_Colors_swigregister
+CSG_Colors_swigregister(CSG_Colors)
+
+def SG_File_Make_Path(*args):
+  return _saga_api.SG_File_Make_Path(*args)
+SG_File_Make_Path = _saga_api.SG_File_Make_Path
+
+class CSG_Translator(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Translator, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Translator, name)
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Translator
+    __del__ = lambda self : None;
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Translator(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Translator_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_Translator_Destroy(self)
+    def is_CaseSensitive(self): return _saga_api.CSG_Translator_is_CaseSensitive(self)
+    def Get_Count(self): return _saga_api.CSG_Translator_Get_Count(self)
+    def Get_Text(self, *args): return _saga_api.CSG_Translator_Get_Text(self, *args)
+    def Get_Translation(self, *args): return _saga_api.CSG_Translator_Get_Translation(self, *args)
+CSG_Translator_swigregister = _saga_api.CSG_Translator_swigregister
+CSG_Translator_swigregister(CSG_Translator)
+
+
+def SG_Get_Translator():
+  return _saga_api.SG_Get_Translator()
+SG_Get_Translator = _saga_api.SG_Get_Translator
+
+def SG_Translate(*args):
+  return _saga_api.SG_Translate(*args)
+SG_Translate = _saga_api.SG_Translate
+SG_UI_MSG_STYLE_NORMAL = _saga_api.SG_UI_MSG_STYLE_NORMAL
+SG_UI_MSG_STYLE_BOLD = _saga_api.SG_UI_MSG_STYLE_BOLD
+SG_UI_MSG_STYLE_ITALIC = _saga_api.SG_UI_MSG_STYLE_ITALIC
+SG_UI_MSG_STYLE_SUCCESS = _saga_api.SG_UI_MSG_STYLE_SUCCESS
+SG_UI_MSG_STYLE_FAILURE = _saga_api.SG_UI_MSG_STYLE_FAILURE
+SG_UI_MSG_STYLE_BIG = _saga_api.SG_UI_MSG_STYLE_BIG
+SG_UI_MSG_STYLE_SMALL = _saga_api.SG_UI_MSG_STYLE_SMALL
+SG_UI_MSG_STYLE_01 = _saga_api.SG_UI_MSG_STYLE_01
+SG_UI_MSG_STYLE_02 = _saga_api.SG_UI_MSG_STYLE_02
+SG_UI_MSG_STYLE_03 = _saga_api.SG_UI_MSG_STYLE_03
+SG_UI_DATAOBJECT_UPDATE_ONLY = _saga_api.SG_UI_DATAOBJECT_UPDATE_ONLY
+SG_UI_DATAOBJECT_SHOW = _saga_api.SG_UI_DATAOBJECT_SHOW
+SG_UI_DATAOBJECT_SHOW_NEW_MAP = _saga_api.SG_UI_DATAOBJECT_SHOW_NEW_MAP
+SG_UI_DATAOBJECT_SHOW_LAST_MAP = _saga_api.SG_UI_DATAOBJECT_SHOW_LAST_MAP
+CALLBACK_PROCESS_GET_OKAY = _saga_api.CALLBACK_PROCESS_GET_OKAY
+CALLBACK_PROCESS_SET_OKAY = _saga_api.CALLBACK_PROCESS_SET_OKAY
+CALLBACK_PROCESS_SET_PROGRESS = _saga_api.CALLBACK_PROCESS_SET_PROGRESS
+CALLBACK_PROCESS_SET_READY = _saga_api.CALLBACK_PROCESS_SET_READY
+CALLBACK_PROCESS_SET_TEXT = _saga_api.CALLBACK_PROCESS_SET_TEXT
+CALLBACK_STOP_EXECUTION = _saga_api.CALLBACK_STOP_EXECUTION
+CALLBACK_DLG_MESSAGE = _saga_api.CALLBACK_DLG_MESSAGE
+CALLBACK_DLG_CONTINUE = _saga_api.CALLBACK_DLG_CONTINUE
+CALLBACK_DLG_ERROR = _saga_api.CALLBACK_DLG_ERROR
+CALLBACK_DLG_PARAMETERS = _saga_api.CALLBACK_DLG_PARAMETERS
+CALLBACK_MESSAGE_ADD = _saga_api.CALLBACK_MESSAGE_ADD
+CALLBACK_MESSAGE_ADD_ERROR = _saga_api.CALLBACK_MESSAGE_ADD_ERROR
+CALLBACK_MESSAGE_ADD_EXECUTION = _saga_api.CALLBACK_MESSAGE_ADD_EXECUTION
+CALLBACK_DATAOBJECT_FIND_BY_FILE = _saga_api.CALLBACK_DATAOBJECT_FIND_BY_FILE
+CALLBACK_DATAOBJECT_CHECK = _saga_api.CALLBACK_DATAOBJECT_CHECK
+CALLBACK_DATAOBJECT_ADD = _saga_api.CALLBACK_DATAOBJECT_ADD
+CALLBACK_DATAOBJECT_UPDATE = _saga_api.CALLBACK_DATAOBJECT_UPDATE
+CALLBACK_DATAOBJECT_SHOW = _saga_api.CALLBACK_DATAOBJECT_SHOW
+CALLBACK_DATAOBJECT_ASIMAGE = _saga_api.CALLBACK_DATAOBJECT_ASIMAGE
+CALLBACK_DATAOBJECT_COLORS_GET = _saga_api.CALLBACK_DATAOBJECT_COLORS_GET
+CALLBACK_DATAOBJECT_COLORS_SET = _saga_api.CALLBACK_DATAOBJECT_COLORS_SET
+CALLBACK_DATAOBJECT_PARAMS_GET = _saga_api.CALLBACK_DATAOBJECT_PARAMS_GET
+CALLBACK_DATAOBJECT_PARAMS_SET = _saga_api.CALLBACK_DATAOBJECT_PARAMS_SET
+CALLBACK_DATAOBJECT_GET_ALL = _saga_api.CALLBACK_DATAOBJECT_GET_ALL
+CALLBACK_GUI_GET_WINDOW = _saga_api.CALLBACK_GUI_GET_WINDOW
+CALLBACK_GET_APP_PATH = _saga_api.CALLBACK_GET_APP_PATH
+class CSG_UI_Parameter(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_UI_Parameter, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_UI_Parameter, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_UI_Parameter(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_setmethods__["True"] = _saga_api.CSG_UI_Parameter_True_set
+    __swig_getmethods__["True"] = _saga_api.CSG_UI_Parameter_True_get
+    if _newclass:True = _swig_property(_saga_api.CSG_UI_Parameter_True_get, _saga_api.CSG_UI_Parameter_True_set)
+    __swig_setmethods__["Number"] = _saga_api.CSG_UI_Parameter_Number_set
+    __swig_getmethods__["Number"] = _saga_api.CSG_UI_Parameter_Number_get
+    if _newclass:Number = _swig_property(_saga_api.CSG_UI_Parameter_Number_get, _saga_api.CSG_UI_Parameter_Number_set)
+    __swig_setmethods__["Pointer"] = _saga_api.CSG_UI_Parameter_Pointer_set
+    __swig_getmethods__["Pointer"] = _saga_api.CSG_UI_Parameter_Pointer_get
+    if _newclass:Pointer = _swig_property(_saga_api.CSG_UI_Parameter_Pointer_get, _saga_api.CSG_UI_Parameter_Pointer_set)
+    __swig_destroy__ = _saga_api.delete_CSG_UI_Parameter
+    __del__ = lambda self : None;
+CSG_UI_Parameter_swigregister = _saga_api.CSG_UI_Parameter_swigregister
+CSG_UI_Parameter_swigregister(CSG_UI_Parameter)
+
+
+def SG_Set_UI_Callback(*args):
+  return _saga_api.SG_Set_UI_Callback(*args)
+SG_Set_UI_Callback = _saga_api.SG_Set_UI_Callback
+
+def SG_Get_UI_Callback():
+  return _saga_api.SG_Get_UI_Callback()
+SG_Get_UI_Callback = _saga_api.SG_Get_UI_Callback
+
+def SG_UI_Progress_Lock(*args):
+  return _saga_api.SG_UI_Progress_Lock(*args)
+SG_UI_Progress_Lock = _saga_api.SG_UI_Progress_Lock
+
+def SG_UI_Process_Set_Progress(*args):
+  return _saga_api.SG_UI_Process_Set_Progress(*args)
+SG_UI_Process_Set_Progress = _saga_api.SG_UI_Process_Set_Progress
+
+def SG_UI_Process_Set_Ready():
+  return _saga_api.SG_UI_Process_Set_Ready()
+SG_UI_Process_Set_Ready = _saga_api.SG_UI_Process_Set_Ready
+
+def SG_UI_Process_Set_Text(*args):
+  return _saga_api.SG_UI_Process_Set_Text(*args)
+SG_UI_Process_Set_Text = _saga_api.SG_UI_Process_Set_Text
+
+def SG_UI_Stop_Execution(*args):
+  return _saga_api.SG_UI_Stop_Execution(*args)
+SG_UI_Stop_Execution = _saga_api.SG_UI_Stop_Execution
+
+def SG_UI_Dlg_Message(*args):
+  return _saga_api.SG_UI_Dlg_Message(*args)
+SG_UI_Dlg_Message = _saga_api.SG_UI_Dlg_Message
+
+def SG_UI_Dlg_Continue(*args):
+  return _saga_api.SG_UI_Dlg_Continue(*args)
+SG_UI_Dlg_Continue = _saga_api.SG_UI_Dlg_Continue
+
+def SG_UI_Dlg_Error(*args):
+  return _saga_api.SG_UI_Dlg_Error(*args)
+SG_UI_Dlg_Error = _saga_api.SG_UI_Dlg_Error
+
+def SG_UI_Dlg_Parameters(*args):
+  return _saga_api.SG_UI_Dlg_Parameters(*args)
+SG_UI_Dlg_Parameters = _saga_api.SG_UI_Dlg_Parameters
+
+def SG_UI_Msg_Lock(*args):
+  return _saga_api.SG_UI_Msg_Lock(*args)
+SG_UI_Msg_Lock = _saga_api.SG_UI_Msg_Lock
+
+def SG_UI_Msg_Add_Error(*args):
+  return _saga_api.SG_UI_Msg_Add_Error(*args)
+SG_UI_Msg_Add_Error = _saga_api.SG_UI_Msg_Add_Error
+
+def SG_UI_DataObject_Find(*args):
+  return _saga_api.SG_UI_DataObject_Find(*args)
+SG_UI_DataObject_Find = _saga_api.SG_UI_DataObject_Find
+
+def SG_UI_DataObject_Check(*args):
+  return _saga_api.SG_UI_DataObject_Check(*args)
+SG_UI_DataObject_Check = _saga_api.SG_UI_DataObject_Check
+
+def SG_UI_DataObject_Add(*args):
+  return _saga_api.SG_UI_DataObject_Add(*args)
+SG_UI_DataObject_Add = _saga_api.SG_UI_DataObject_Add
+
+def SG_UI_DataObject_Update(*args):
+  return _saga_api.SG_UI_DataObject_Update(*args)
+SG_UI_DataObject_Update = _saga_api.SG_UI_DataObject_Update
+
+def SG_UI_DataObject_Show(*args):
+  return _saga_api.SG_UI_DataObject_Show(*args)
+SG_UI_DataObject_Show = _saga_api.SG_UI_DataObject_Show
+
+def SG_UI_DataObject_asImage(*args):
+  return _saga_api.SG_UI_DataObject_asImage(*args)
+SG_UI_DataObject_asImage = _saga_api.SG_UI_DataObject_asImage
+
+def SG_UI_DataObject_Colors_Get(*args):
+  return _saga_api.SG_UI_DataObject_Colors_Get(*args)
+SG_UI_DataObject_Colors_Get = _saga_api.SG_UI_DataObject_Colors_Get
+
+def SG_UI_DataObject_Colors_Set(*args):
+  return _saga_api.SG_UI_DataObject_Colors_Set(*args)
+SG_UI_DataObject_Colors_Set = _saga_api.SG_UI_DataObject_Colors_Set
+
+def SG_UI_DataObject_Params_Get(*args):
+  return _saga_api.SG_UI_DataObject_Params_Get(*args)
+SG_UI_DataObject_Params_Get = _saga_api.SG_UI_DataObject_Params_Get
+
+def SG_UI_DataObject_Params_Set(*args):
+  return _saga_api.SG_UI_DataObject_Params_Set(*args)
+SG_UI_DataObject_Params_Set = _saga_api.SG_UI_DataObject_Params_Set
+
+def SG_UI_DataObject_Get_All(*args):
+  return _saga_api.SG_UI_DataObject_Get_All(*args)
+SG_UI_DataObject_Get_All = _saga_api.SG_UI_DataObject_Get_All
+
+def SG_UI_Get_Window_Main():
+  return _saga_api.SG_UI_Get_Window_Main()
+SG_UI_Get_Window_Main = _saga_api.SG_UI_Get_Window_Main
+
+def SG_UI_Get_Application_Path():
+  return _saga_api.SG_UI_Get_Application_Path()
+SG_UI_Get_Application_Path = _saga_api.SG_UI_Get_Application_Path
+class CSG_MetaData(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_MetaData, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_MetaData, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_MetaData(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_MetaData_Create(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_MetaData
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_MetaData_Destroy(self)
+    def Load(self, *args): return _saga_api.CSG_MetaData_Load(self, *args)
+    def Save(self, *args): return _saga_api.CSG_MetaData_Save(self, *args)
+    def Load_WKT(self, *args): return _saga_api.CSG_MetaData_Load_WKT(self, *args)
+    def Save_WKT(self, *args): return _saga_api.CSG_MetaData_Save_WKT(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_MetaData_Assign(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_MetaData___iadd__(self, *args)
+    def Get_Name(self): return _saga_api.CSG_MetaData_Get_Name(self)
+    def Set_Name(self, *args): return _saga_api.CSG_MetaData_Set_Name(self, *args)
+    def Get_Content(self): return _saga_api.CSG_MetaData_Get_Content(self)
+    def Set_Content(self, *args): return _saga_api.CSG_MetaData_Set_Content(self, *args)
+    def Cmp_Content(self, *args): return _saga_api.CSG_MetaData_Cmp_Content(self, *args)
+    def Get_Children_Count(self): return _saga_api.CSG_MetaData_Get_Children_Count(self)
+    def Get_Child(self, *args): return _saga_api.CSG_MetaData_Get_Child(self, *args)
+    def Add_Child(self, *args): return _saga_api.CSG_MetaData_Add_Child(self, *args)
+    def Del_Child(self, *args): return _saga_api.CSG_MetaData_Del_Child(self, *args)
+    def is_Valid(self): return _saga_api.CSG_MetaData_is_Valid(self)
+    def Get_Property_Count(self): return _saga_api.CSG_MetaData_Get_Property_Count(self)
+    def Get_Property_Name(self, *args): return _saga_api.CSG_MetaData_Get_Property_Name(self, *args)
+    def Get_Property(self, *args): return _saga_api.CSG_MetaData_Get_Property(self, *args)
+    def Add_Property(self, *args): return _saga_api.CSG_MetaData_Add_Property(self, *args)
+    def Set_Property(self, *args): return _saga_api.CSG_MetaData_Set_Property(self, *args)
+    def Cmp_Property(self, *args): return _saga_api.CSG_MetaData_Cmp_Property(self, *args)
+CSG_MetaData_swigregister = _saga_api.CSG_MetaData_swigregister
+CSG_MetaData_swigregister(CSG_MetaData)
+
+def SG_UI_Process_Get_Okay(bBlink = False):
+  return _saga_api.SG_UI_Process_Get_Okay(bBlink)
+SG_UI_Process_Get_Okay = _saga_api.SG_UI_Process_Get_Okay
+
+def SG_UI_Process_Set_Okay(bOkay = True):
+  return _saga_api.SG_UI_Process_Set_Okay(bOkay)
+SG_UI_Process_Set_Okay = _saga_api.SG_UI_Process_Set_Okay
+
+def SG_UI_Msg_Add(*args):
+  return _saga_api.SG_UI_Msg_Add(*args)
+SG_UI_Msg_Add = _saga_api.SG_UI_Msg_Add
+
+def SG_UI_Msg_Add_Execution(*args):
+  return _saga_api.SG_UI_Msg_Add_Execution(*args)
+SG_UI_Msg_Add_Execution = _saga_api.SG_UI_Msg_Add_Execution
+
+INTERSECTION_None = _saga_api.INTERSECTION_None
+INTERSECTION_Identical = _saga_api.INTERSECTION_Identical
+INTERSECTION_Overlaps = _saga_api.INTERSECTION_Overlaps
+INTERSECTION_Contained = _saga_api.INTERSECTION_Contained
+INTERSECTION_Contains = _saga_api.INTERSECTION_Contains
+SG_POINT_TYPE_XY = _saga_api.SG_POINT_TYPE_XY
+SG_POINT_TYPE_XYZ = _saga_api.SG_POINT_TYPE_XYZ
+SG_POINT_TYPE_XYZM = _saga_api.SG_POINT_TYPE_XYZM
+SG_POINT_TYPE_XY_Int = _saga_api.SG_POINT_TYPE_XY_Int
+class TSG_Point(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, TSG_Point, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, TSG_Point, name)
+    __repr__ = _swig_repr
+    __swig_setmethods__["x"] = _saga_api.TSG_Point_x_set
+    __swig_getmethods__["x"] = _saga_api.TSG_Point_x_get
+    if _newclass:x = _swig_property(_saga_api.TSG_Point_x_get, _saga_api.TSG_Point_x_set)
+    __swig_setmethods__["y"] = _saga_api.TSG_Point_y_set
+    __swig_getmethods__["y"] = _saga_api.TSG_Point_y_get
+    if _newclass:y = _swig_property(_saga_api.TSG_Point_y_get, _saga_api.TSG_Point_y_set)
+    def __init__(self): 
+        this = _saga_api.new_TSG_Point()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_TSG_Point
+    __del__ = lambda self : None;
+TSG_Point_swigregister = _saga_api.TSG_Point_swigregister
+TSG_Point_swigregister(TSG_Point)
+
+class TSG_Point_Z(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, TSG_Point_Z, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, TSG_Point_Z, name)
+    __repr__ = _swig_repr
+    __swig_setmethods__["x"] = _saga_api.TSG_Point_Z_x_set
+    __swig_getmethods__["x"] = _saga_api.TSG_Point_Z_x_get
+    if _newclass:x = _swig_property(_saga_api.TSG_Point_Z_x_get, _saga_api.TSG_Point_Z_x_set)
+    __swig_setmethods__["y"] = _saga_api.TSG_Point_Z_y_set
+    __swig_getmethods__["y"] = _saga_api.TSG_Point_Z_y_get
+    if _newclass:y = _swig_property(_saga_api.TSG_Point_Z_y_get, _saga_api.TSG_Point_Z_y_set)
+    __swig_setmethods__["z"] = _saga_api.TSG_Point_Z_z_set
+    __swig_getmethods__["z"] = _saga_api.TSG_Point_Z_z_get
+    if _newclass:z = _swig_property(_saga_api.TSG_Point_Z_z_get, _saga_api.TSG_Point_Z_z_set)
+    def __init__(self): 
+        this = _saga_api.new_TSG_Point_Z()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_TSG_Point_Z
+    __del__ = lambda self : None;
+TSG_Point_Z_swigregister = _saga_api.TSG_Point_Z_swigregister
+TSG_Point_Z_swigregister(TSG_Point_Z)
+
+class TSG_Point_ZM(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, TSG_Point_ZM, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, TSG_Point_ZM, name)
+    __repr__ = _swig_repr
+    __swig_setmethods__["x"] = _saga_api.TSG_Point_ZM_x_set
+    __swig_getmethods__["x"] = _saga_api.TSG_Point_ZM_x_get
+    if _newclass:x = _swig_property(_saga_api.TSG_Point_ZM_x_get, _saga_api.TSG_Point_ZM_x_set)
+    __swig_setmethods__["y"] = _saga_api.TSG_Point_ZM_y_set
+    __swig_getmethods__["y"] = _saga_api.TSG_Point_ZM_y_get
+    if _newclass:y = _swig_property(_saga_api.TSG_Point_ZM_y_get, _saga_api.TSG_Point_ZM_y_set)
+    __swig_setmethods__["z"] = _saga_api.TSG_Point_ZM_z_set
+    __swig_getmethods__["z"] = _saga_api.TSG_Point_ZM_z_get
+    if _newclass:z = _swig_property(_saga_api.TSG_Point_ZM_z_get, _saga_api.TSG_Point_ZM_z_set)
+    __swig_setmethods__["m"] = _saga_api.TSG_Point_ZM_m_set
+    __swig_getmethods__["m"] = _saga_api.TSG_Point_ZM_m_get
+    if _newclass:m = _swig_property(_saga_api.TSG_Point_ZM_m_get, _saga_api.TSG_Point_ZM_m_set)
+    def __init__(self): 
+        this = _saga_api.new_TSG_Point_ZM()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_TSG_Point_ZM
+    __del__ = lambda self : None;
+TSG_Point_ZM_swigregister = _saga_api.TSG_Point_ZM_swigregister
+TSG_Point_ZM_swigregister(TSG_Point_ZM)
+
+class TSG_Point_Int(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, TSG_Point_Int, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, TSG_Point_Int, name)
+    __repr__ = _swig_repr
+    __swig_setmethods__["x"] = _saga_api.TSG_Point_Int_x_set
+    __swig_getmethods__["x"] = _saga_api.TSG_Point_Int_x_get
+    if _newclass:x = _swig_property(_saga_api.TSG_Point_Int_x_get, _saga_api.TSG_Point_Int_x_set)
+    __swig_setmethods__["y"] = _saga_api.TSG_Point_Int_y_set
+    __swig_getmethods__["y"] = _saga_api.TSG_Point_Int_y_get
+    if _newclass:y = _swig_property(_saga_api.TSG_Point_Int_y_get, _saga_api.TSG_Point_Int_y_set)
+    def __init__(self): 
+        this = _saga_api.new_TSG_Point_Int()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_TSG_Point_Int
+    __del__ = lambda self : None;
+TSG_Point_Int_swigregister = _saga_api.TSG_Point_Int_swigregister
+TSG_Point_Int_swigregister(TSG_Point_Int)
+
+class TSG_Rect(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, TSG_Rect, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, TSG_Rect, name)
+    __repr__ = _swig_repr
+    __swig_setmethods__["xMin"] = _saga_api.TSG_Rect_xMin_set
+    __swig_getmethods__["xMin"] = _saga_api.TSG_Rect_xMin_get
+    if _newclass:xMin = _swig_property(_saga_api.TSG_Rect_xMin_get, _saga_api.TSG_Rect_xMin_set)
+    __swig_setmethods__["yMin"] = _saga_api.TSG_Rect_yMin_set
+    __swig_getmethods__["yMin"] = _saga_api.TSG_Rect_yMin_get
+    if _newclass:yMin = _swig_property(_saga_api.TSG_Rect_yMin_get, _saga_api.TSG_Rect_yMin_set)
+    __swig_setmethods__["xMax"] = _saga_api.TSG_Rect_xMax_set
+    __swig_getmethods__["xMax"] = _saga_api.TSG_Rect_xMax_get
+    if _newclass:xMax = _swig_property(_saga_api.TSG_Rect_xMax_get, _saga_api.TSG_Rect_xMax_set)
+    __swig_setmethods__["yMax"] = _saga_api.TSG_Rect_yMax_set
+    __swig_getmethods__["yMax"] = _saga_api.TSG_Rect_yMax_get
+    if _newclass:yMax = _swig_property(_saga_api.TSG_Rect_yMax_get, _saga_api.TSG_Rect_yMax_set)
+    def __init__(self): 
+        this = _saga_api.new_TSG_Rect()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_TSG_Rect
+    __del__ = lambda self : None;
+TSG_Rect_swigregister = _saga_api.TSG_Rect_swigregister
+TSG_Rect_swigregister(TSG_Rect)
+
+class CSG_Point(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Point, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Point, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Point(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Point
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Point_Get_Type(self)
+    def Get_X(self): return _saga_api.CSG_Point_Get_X(self)
+    def Set_X(self, *args): return _saga_api.CSG_Point_Set_X(self, *args)
+    def Get_Y(self): return _saga_api.CSG_Point_Get_Y(self)
+    def Set_Y(self, *args): return _saga_api.CSG_Point_Set_Y(self, *args)
+    def __eq__(self, *args): return _saga_api.CSG_Point___eq__(self, *args)
+    def __ne__(self, *args): return _saga_api.CSG_Point___ne__(self, *args)
+    def __add__(self, *args): return _saga_api.CSG_Point___add__(self, *args)
+    def __sub__(self, *args): return _saga_api.CSG_Point___sub__(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_Point___iadd__(self, *args)
+    def __isub__(self, *args): return _saga_api.CSG_Point___isub__(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_Point_Assign(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Point_Add(self, *args)
+    def Subtract(self, *args): return _saga_api.CSG_Point_Subtract(self, *args)
+    def is_Equal(self, *args): return _saga_api.CSG_Point_is_Equal(self, *args)
+CSG_Point_swigregister = _saga_api.CSG_Point_swigregister
+CSG_Point_swigregister(CSG_Point)
+
+class CSG_Point_Z(CSG_Point):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Point]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Point_Z, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Point]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Point_Z, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Point_Z(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Point_Z
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Point_Z_Get_Type(self)
+    def Get_Z(self): return _saga_api.CSG_Point_Z_Get_Z(self)
+    def Set_Z(self, *args): return _saga_api.CSG_Point_Z_Set_Z(self, *args)
+    def __eq__(self, *args): return _saga_api.CSG_Point_Z___eq__(self, *args)
+    def __ne__(self, *args): return _saga_api.CSG_Point_Z___ne__(self, *args)
+    def __add__(self, *args): return _saga_api.CSG_Point_Z___add__(self, *args)
+    def __sub__(self, *args): return _saga_api.CSG_Point_Z___sub__(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_Point_Z___iadd__(self, *args)
+    def __isub__(self, *args): return _saga_api.CSG_Point_Z___isub__(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_Point_Z_Assign(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Point_Z_Add(self, *args)
+    def Subtract(self, *args): return _saga_api.CSG_Point_Z_Subtract(self, *args)
+    def is_Equal(self, *args): return _saga_api.CSG_Point_Z_is_Equal(self, *args)
+CSG_Point_Z_swigregister = _saga_api.CSG_Point_Z_swigregister
+CSG_Point_Z_swigregister(CSG_Point_Z)
+
+class CSG_Point_ZM(CSG_Point_Z):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Point_Z]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Point_ZM, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Point_Z]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Point_ZM, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Point_ZM(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Point_ZM
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Point_ZM_Get_Type(self)
+    def Get_M(self): return _saga_api.CSG_Point_ZM_Get_M(self)
+    def Set_M(self, *args): return _saga_api.CSG_Point_ZM_Set_M(self, *args)
+    def __eq__(self, *args): return _saga_api.CSG_Point_ZM___eq__(self, *args)
+    def __ne__(self, *args): return _saga_api.CSG_Point_ZM___ne__(self, *args)
+    def __add__(self, *args): return _saga_api.CSG_Point_ZM___add__(self, *args)
+    def __sub__(self, *args): return _saga_api.CSG_Point_ZM___sub__(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_Point_ZM___iadd__(self, *args)
+    def __isub__(self, *args): return _saga_api.CSG_Point_ZM___isub__(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_Point_ZM_Assign(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Point_ZM_Add(self, *args)
+    def Subtract(self, *args): return _saga_api.CSG_Point_ZM_Subtract(self, *args)
+    def is_Equal(self, *args): return _saga_api.CSG_Point_ZM_is_Equal(self, *args)
+CSG_Point_ZM_swigregister = _saga_api.CSG_Point_ZM_swigregister
+CSG_Point_ZM_swigregister(CSG_Point_ZM)
+
+class CSG_Points(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Points, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Points, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Points()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Points
+    __del__ = lambda self : None;
+    def Clear(self): return _saga_api.CSG_Points_Clear(self)
+    def Assign(self, *args): return _saga_api.CSG_Points_Assign(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Points_Add(self, *args)
+    def Del(self, *args): return _saga_api.CSG_Points_Del(self, *args)
+    def Set_Count(self, *args): return _saga_api.CSG_Points_Set_Count(self, *args)
+    def Get_Count(self): return _saga_api.CSG_Points_Get_Count(self)
+    def Get_Point(self, *args): return _saga_api.CSG_Points_Get_Point(self, *args)
+    def Get_X(self, *args): return _saga_api.CSG_Points_Get_X(self, *args)
+    def Get_Y(self, *args): return _saga_api.CSG_Points_Get_Y(self, *args)
+CSG_Points_swigregister = _saga_api.CSG_Points_swigregister
+CSG_Points_swigregister(CSG_Points)
+
+class CSG_Points_Int(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Points_Int, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Points_Int, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Points_Int()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Points_Int
+    __del__ = lambda self : None;
+    def Clear(self): return _saga_api.CSG_Points_Int_Clear(self)
+    def Assign(self, *args): return _saga_api.CSG_Points_Int_Assign(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Points_Int_Add(self, *args)
+    def Del(self, *args): return _saga_api.CSG_Points_Int_Del(self, *args)
+    def Set_Count(self, *args): return _saga_api.CSG_Points_Int_Set_Count(self, *args)
+    def Get_Count(self): return _saga_api.CSG_Points_Int_Get_Count(self)
+    def Get_Point(self, *args): return _saga_api.CSG_Points_Int_Get_Point(self, *args)
+    def Get_X(self, *args): return _saga_api.CSG_Points_Int_Get_X(self, *args)
+    def Get_Y(self, *args): return _saga_api.CSG_Points_Int_Get_Y(self, *args)
+CSG_Points_Int_swigregister = _saga_api.CSG_Points_Int_swigregister
+CSG_Points_Int_swigregister(CSG_Points_Int)
+
+class CSG_Points_Z(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Points_Z, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Points_Z, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Points_Z()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Points_Z
+    __del__ = lambda self : None;
+    def Clear(self): return _saga_api.CSG_Points_Z_Clear(self)
+    def Assign(self, *args): return _saga_api.CSG_Points_Z_Assign(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Points_Z_Add(self, *args)
+    def Del(self, *args): return _saga_api.CSG_Points_Z_Del(self, *args)
+    def Set_Count(self, *args): return _saga_api.CSG_Points_Z_Set_Count(self, *args)
+    def Get_Count(self): return _saga_api.CSG_Points_Z_Get_Count(self)
+    def Get_Point(self, *args): return _saga_api.CSG_Points_Z_Get_Point(self, *args)
+    def Get_X(self, *args): return _saga_api.CSG_Points_Z_Get_X(self, *args)
+    def Get_Y(self, *args): return _saga_api.CSG_Points_Z_Get_Y(self, *args)
+    def Get_Z(self, *args): return _saga_api.CSG_Points_Z_Get_Z(self, *args)
+CSG_Points_Z_swigregister = _saga_api.CSG_Points_Z_swigregister
+CSG_Points_Z_swigregister(CSG_Points_Z)
+
+class CSG_Rect(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Rect, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Rect, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Rect(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Rect
+    __del__ = lambda self : None;
+    def __eq__(self, *args): return _saga_api.CSG_Rect___eq__(self, *args)
+    def __ne__(self, *args): return _saga_api.CSG_Rect___ne__(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_Rect___iadd__(self, *args)
+    def __isub__(self, *args): return _saga_api.CSG_Rect___isub__(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_Rect_Assign(self, *args)
+    def Set_BottomLeft(self, *args): return _saga_api.CSG_Rect_Set_BottomLeft(self, *args)
+    def Set_TopRight(self, *args): return _saga_api.CSG_Rect_Set_TopRight(self, *args)
+    def is_Equal(self, *args): return _saga_api.CSG_Rect_is_Equal(self, *args)
+    def Get_XMin(self): return _saga_api.CSG_Rect_Get_XMin(self)
+    def Get_XMax(self): return _saga_api.CSG_Rect_Get_XMax(self)
+    def Get_YMin(self): return _saga_api.CSG_Rect_Get_YMin(self)
+    def Get_YMax(self): return _saga_api.CSG_Rect_Get_YMax(self)
+    def Get_XRange(self): return _saga_api.CSG_Rect_Get_XRange(self)
+    def Get_YRange(self): return _saga_api.CSG_Rect_Get_YRange(self)
+    def Get_TopLeft(self): return _saga_api.CSG_Rect_Get_TopLeft(self)
+    def Get_BottomRight(self): return _saga_api.CSG_Rect_Get_BottomRight(self)
+    def Get_Center(self): return _saga_api.CSG_Rect_Get_Center(self)
+    def Get_XCenter(self): return _saga_api.CSG_Rect_Get_XCenter(self)
+    def Get_YCenter(self): return _saga_api.CSG_Rect_Get_YCenter(self)
+    def Move(self, *args): return _saga_api.CSG_Rect_Move(self, *args)
+    def Inflate(self, *args): return _saga_api.CSG_Rect_Inflate(self, *args)
+    def Deflate(self, *args): return _saga_api.CSG_Rect_Deflate(self, *args)
+    def Union(self, *args): return _saga_api.CSG_Rect_Union(self, *args)
+    def Intersect(self, *args): return _saga_api.CSG_Rect_Intersect(self, *args)
+    def Intersects(self, *args): return _saga_api.CSG_Rect_Intersects(self, *args)
+    def Contains(self, *args): return _saga_api.CSG_Rect_Contains(self, *args)
+    __swig_setmethods__["m_rect"] = _saga_api.CSG_Rect_m_rect_set
+    __swig_getmethods__["m_rect"] = _saga_api.CSG_Rect_m_rect_get
+    if _newclass:m_rect = _swig_property(_saga_api.CSG_Rect_m_rect_get, _saga_api.CSG_Rect_m_rect_set)
+CSG_Rect_swigregister = _saga_api.CSG_Rect_swigregister
+CSG_Rect_swigregister(CSG_Rect)
+
+class CSG_Rects(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Rects, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Rects, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Rects()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Rects
+    __del__ = lambda self : None;
+    def Clear(self): return _saga_api.CSG_Rects_Clear(self)
+    def Assign(self, *args): return _saga_api.CSG_Rects_Assign(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Rects_Add(self, *args)
+    def Get_Count(self): return _saga_api.CSG_Rects_Get_Count(self)
+    def Get_Rect(self, *args): return _saga_api.CSG_Rects_Get_Rect(self, *args)
+CSG_Rects_swigregister = _saga_api.CSG_Rects_swigregister
+CSG_Rects_swigregister(CSG_Rects)
+
+SG_DISTWGHT_None = _saga_api.SG_DISTWGHT_None
+SG_DISTWGHT_IDW = _saga_api.SG_DISTWGHT_IDW
+SG_DISTWGHT_EXP = _saga_api.SG_DISTWGHT_EXP
+SG_DISTWGHT_GAUSS = _saga_api.SG_DISTWGHT_GAUSS
+class CSG_Distance_Weighting(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Distance_Weighting, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Distance_Weighting, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Distance_Weighting()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Distance_Weighting
+    __del__ = lambda self : None;
+    def Get_Parameters(self): return _saga_api.CSG_Distance_Weighting_Get_Parameters(self)
+    def Set_Parameters(self, *args): return _saga_api.CSG_Distance_Weighting_Set_Parameters(self, *args)
+    def Get_Weighting(self): return _saga_api.CSG_Distance_Weighting_Get_Weighting(self)
+    def Set_Weighting(self, *args): return _saga_api.CSG_Distance_Weighting_Set_Weighting(self, *args)
+    def Get_IDW_Power(self): return _saga_api.CSG_Distance_Weighting_Get_IDW_Power(self)
+    def Set_IDW_Power(self, *args): return _saga_api.CSG_Distance_Weighting_Set_IDW_Power(self, *args)
+    def Get_IDW_Offset(self): return _saga_api.CSG_Distance_Weighting_Get_IDW_Offset(self)
+    def Set_IDW_Offset(self, bOn = True): return _saga_api.CSG_Distance_Weighting_Set_IDW_Offset(self, bOn)
+    def Get_BandWidth(self): return _saga_api.CSG_Distance_Weighting_Get_BandWidth(self)
+    def Set_BandWidth(self, *args): return _saga_api.CSG_Distance_Weighting_Set_BandWidth(self, *args)
+    def Get_Weight(self, *args): return _saga_api.CSG_Distance_Weighting_Get_Weight(self, *args)
+CSG_Distance_Weighting_swigregister = _saga_api.CSG_Distance_Weighting_swigregister
+CSG_Distance_Weighting_swigregister(CSG_Distance_Weighting)
+
+SG_PROJ_FMT_WKT = _saga_api.SG_PROJ_FMT_WKT
+SG_PROJ_FMT_Proj4 = _saga_api.SG_PROJ_FMT_Proj4
+SG_PROJ_FMT_EPSG = _saga_api.SG_PROJ_FMT_EPSG
+SG_PROJ_FMT_Undefined = _saga_api.SG_PROJ_FMT_Undefined
+SG_PROJ_TYPE_CS_Undefined = _saga_api.SG_PROJ_TYPE_CS_Undefined
+SG_PROJ_TYPE_CS_Projected = _saga_api.SG_PROJ_TYPE_CS_Projected
+SG_PROJ_TYPE_CS_Geographic = _saga_api.SG_PROJ_TYPE_CS_Geographic
+SG_PROJ_TYPE_CS_Geocentric = _saga_api.SG_PROJ_TYPE_CS_Geocentric
+
+def SG_Get_Projection_Type_Name(*args):
+  return _saga_api.SG_Get_Projection_Type_Name(*args)
+SG_Get_Projection_Type_Name = _saga_api.SG_Get_Projection_Type_Name
+class CSG_Projection(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Projection, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Projection, name)
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Projection
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Projection_Destroy(self)
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Projection(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Projection_Create(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_Projection_Assign(self, *args)
+    def is_Okay(self): return _saga_api.CSG_Projection_is_Okay(self)
+    def is_Equal(self, *args): return _saga_api.CSG_Projection_is_Equal(self, *args)
+    def __eq__(self, *args): return _saga_api.CSG_Projection___eq__(self, *args)
+    def __ne__(self, *args): return _saga_api.CSG_Projection___ne__(self, *args)
+    def Load(self, *args): return _saga_api.CSG_Projection_Load(self, *args)
+    def Save(self, *args): return _saga_api.CSG_Projection_Save(self, *args)
+    def Get_Name(self): return _saga_api.CSG_Projection_Get_Name(self)
+    def Get_WKT(self): return _saga_api.CSG_Projection_Get_WKT(self)
+    def Get_Proj4(self): return _saga_api.CSG_Projection_Get_Proj4(self)
+    def Get_Authority(self): return _saga_api.CSG_Projection_Get_Authority(self)
+    def Get_Authority_ID(self): return _saga_api.CSG_Projection_Get_Authority_ID(self)
+    def Get_EPSG(self): return _saga_api.CSG_Projection_Get_EPSG(self)
+    def Get_Description(self): return _saga_api.CSG_Projection_Get_Description(self)
+    def Get_Type(self): return _saga_api.CSG_Projection_Get_Type(self)
+    def Get_Type_Name(self): return _saga_api.CSG_Projection_Get_Type_Name(self)
+    def Get_Type_Identifier(self): return _saga_api.CSG_Projection_Get_Type_Identifier(self)
+CSG_Projection_swigregister = _saga_api.CSG_Projection_swigregister
+CSG_Projection_swigregister(CSG_Projection)
+gSG_Projection_Type_Identifier = cvar.gSG_Projection_Type_Identifier
+
+class CSG_Projections(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Projections, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Projections, name)
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Projections
+    __del__ = lambda self : None;
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Projections(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Projections_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_Projections_Destroy(self)
+    def Reset_Dictionary(self): return _saga_api.CSG_Projections_Reset_Dictionary(self)
+    def Load_Dictionary(self, *args): return _saga_api.CSG_Projections_Load_Dictionary(self, *args)
+    def Save_Dictionary(self, *args): return _saga_api.CSG_Projections_Save_Dictionary(self, *args)
+    def Load_DB(self, *args): return _saga_api.CSG_Projections_Load_DB(self, *args)
+    def Save_DB(self, *args): return _saga_api.CSG_Projections_Save_DB(self, *args)
+    def Get_Count(self): return _saga_api.CSG_Projections_Get_Count(self)
+    def Add(self, *args): return _saga_api.CSG_Projections_Add(self, *args)
+    def Get_Projection(self, *args): return _saga_api.CSG_Projections_Get_Projection(self, *args)
+    def Get_Names_List(self, *args): return _saga_api.CSG_Projections_Get_Names_List(self, *args)
+    __swig_getmethods__["WKT_to_MetaData"] = lambda x: _saga_api.CSG_Projections_WKT_to_MetaData
+    if _newclass:WKT_to_MetaData = staticmethod(_saga_api.CSG_Projections_WKT_to_MetaData)
+    def WKT_to_Proj4(self, *args): return _saga_api.CSG_Projections_WKT_to_Proj4(self, *args)
+    def WKT_from_Proj4(self, *args): return _saga_api.CSG_Projections_WKT_from_Proj4(self, *args)
+    def EPSG_to_Proj4(self, *args): return _saga_api.CSG_Projections_EPSG_to_Proj4(self, *args)
+    def EPSG_to_WKT(self, *args): return _saga_api.CSG_Projections_EPSG_to_WKT(self, *args)
+CSG_Projections_swigregister = _saga_api.CSG_Projections_swigregister
+CSG_Projections_swigregister(CSG_Projections)
+
+def CSG_Projections_WKT_to_MetaData(*args):
+  return _saga_api.CSG_Projections_WKT_to_MetaData(*args)
+CSG_Projections_WKT_to_MetaData = _saga_api.CSG_Projections_WKT_to_MetaData
+
+
+def SG_Get_Projections():
+  return _saga_api.SG_Get_Projections()
+SG_Get_Projections = _saga_api.SG_Get_Projections
+
+def SG_Get_Length(*args):
+  return _saga_api.SG_Get_Length(*args)
+SG_Get_Length = _saga_api.SG_Get_Length
+
+def SG_Get_Crossing_InRegion(*args):
+  return _saga_api.SG_Get_Crossing_InRegion(*args)
+SG_Get_Crossing_InRegion = _saga_api.SG_Get_Crossing_InRegion
+
+def SG_Get_Triangle_CircumCircle(*args):
+  return _saga_api.SG_Get_Triangle_CircumCircle(*args)
+SG_Get_Triangle_CircumCircle = _saga_api.SG_Get_Triangle_CircumCircle
+M_PI = _saga_api.M_PI
+M_PI_045 = _saga_api.M_PI_045
+M_PI_090 = _saga_api.M_PI_090
+M_PI_135 = _saga_api.M_PI_135
+M_PI_180 = _saga_api.M_PI_180
+M_PI_225 = _saga_api.M_PI_225
+M_PI_270 = _saga_api.M_PI_270
+M_PI_315 = _saga_api.M_PI_315
+M_PI_360 = _saga_api.M_PI_360
+M_RAD_TO_DEG = _saga_api.M_RAD_TO_DEG
+M_DEG_TO_RAD = _saga_api.M_DEG_TO_RAD
+M_EULER = _saga_api.M_EULER
+N_MEGABYTE_BYTES = _saga_api.N_MEGABYTE_BYTES
+M_ALMOST_ZERO = _saga_api.M_ALMOST_ZERO
+M_TINY = _saga_api.M_TINY
+
+def SG_Get_Square(*args):
+  return _saga_api.SG_Get_Square(*args)
+SG_Get_Square = _saga_api.SG_Get_Square
+class CSG_Index(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Index, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Index, name)
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Index
+    __del__ = lambda self : None;
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Index(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Index_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_Index_Destroy(self)
+    def is_Okay(self): return _saga_api.CSG_Index_is_Okay(self)
+    def Get_Count(self): return _saga_api.CSG_Index_Get_Count(self)
+    def Get_Index(self, *args): return _saga_api.CSG_Index_Get_Index(self, *args)
+CSG_Index_swigregister = _saga_api.CSG_Index_swigregister
+CSG_Index_swigregister(CSG_Index)
+
+def SG_Get_Distance(*args):
+  return _saga_api.SG_Get_Distance(*args)
+SG_Get_Distance = _saga_api.SG_Get_Distance
+
+def SG_Get_Angle_Of_Direction(*args):
+  return _saga_api.SG_Get_Angle_Of_Direction(*args)
+SG_Get_Angle_Of_Direction = _saga_api.SG_Get_Angle_Of_Direction
+
+def SG_Get_Crossing(*args):
+  return _saga_api.SG_Get_Crossing(*args)
+SG_Get_Crossing = _saga_api.SG_Get_Crossing
+
+def SG_Get_Nearest_Point_On_Line(*args):
+  return _saga_api.SG_Get_Nearest_Point_On_Line(*args)
+SG_Get_Nearest_Point_On_Line = _saga_api.SG_Get_Nearest_Point_On_Line
+
+def SG_Get_Polygon_Area(*args):
+  return _saga_api.SG_Get_Polygon_Area(*args)
+SG_Get_Polygon_Area = _saga_api.SG_Get_Polygon_Area
+
+class CSG_Vector(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Vector, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Vector, name)
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Vector
+    __del__ = lambda self : None;
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Vector(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Vector_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_Vector_Destroy(self)
+    def Get_N(self): return _saga_api.CSG_Vector_Get_N(self)
+    def Get_Data(self): return _saga_api.CSG_Vector_Get_Data(self)
+    def __call__(self, *args): return _saga_api.CSG_Vector___call__(self, *args)
+    def asString(self): return _saga_api.CSG_Vector_asString(self)
+    def is_Equal(self, *args): return _saga_api.CSG_Vector_is_Equal(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_Vector_Assign(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Vector_Add(self, *args)
+    def Subtract(self, *args): return _saga_api.CSG_Vector_Subtract(self, *args)
+    def Multiply_Scalar(self, *args): return _saga_api.CSG_Vector_Multiply_Scalar(self, *args)
+    def Multiply(self, *args): return _saga_api.CSG_Vector_Multiply(self, *args)
+    def __eq__(self, *args): return _saga_api.CSG_Vector___eq__(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_Vector___iadd__(self, *args)
+    def __isub__(self, *args): return _saga_api.CSG_Vector___isub__(self, *args)
+    def __imul__(self, *args): return _saga_api.CSG_Vector___imul__(self, *args)
+    def __add__(self, *args): return _saga_api.CSG_Vector___add__(self, *args)
+    def __sub__(self, *args): return _saga_api.CSG_Vector___sub__(self, *args)
+    def __mul__(self, *args): return _saga_api.CSG_Vector___mul__(self, *args)
+    def Set_Zero(self): return _saga_api.CSG_Vector_Set_Zero(self)
+    def Set_Unity(self): return _saga_api.CSG_Vector_Set_Unity(self)
+    def Get_Length(self): return _saga_api.CSG_Vector_Get_Length(self)
+    def Get_Angle(self, *args): return _saga_api.CSG_Vector_Get_Angle(self, *args)
+    def Get_Unity(self): return _saga_api.CSG_Vector_Get_Unity(self)
+CSG_Vector_swigregister = _saga_api.CSG_Vector_swigregister
+CSG_Vector_swigregister(CSG_Vector)
+
+class CSG_Matrix(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Matrix, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Matrix, name)
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Matrix
+    __del__ = lambda self : None;
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Matrix(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Matrix_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_Matrix_Destroy(self)
+    def Add_Cols(self, *args): return _saga_api.CSG_Matrix_Add_Cols(self, *args)
+    def Add_Rows(self, *args): return _saga_api.CSG_Matrix_Add_Rows(self, *args)
+    def Get_NX(self): return _saga_api.CSG_Matrix_Get_NX(self)
+    def Get_NY(self): return _saga_api.CSG_Matrix_Get_NY(self)
+    def Get_Data(self): return _saga_api.CSG_Matrix_Get_Data(self)
+    def __call__(self, *args): return _saga_api.CSG_Matrix___call__(self, *args)
+    def asString(self): return _saga_api.CSG_Matrix_asString(self)
+    def is_Square(self): return _saga_api.CSG_Matrix_is_Square(self)
+    def is_Equal(self, *args): return _saga_api.CSG_Matrix_is_Equal(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_Matrix_Assign(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Matrix_Add(self, *args)
+    def Subtract(self, *args): return _saga_api.CSG_Matrix_Subtract(self, *args)
+    def Multiply(self, *args): return _saga_api.CSG_Matrix_Multiply(self, *args)
+    def __eq__(self, *args): return _saga_api.CSG_Matrix___eq__(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_Matrix___iadd__(self, *args)
+    def __isub__(self, *args): return _saga_api.CSG_Matrix___isub__(self, *args)
+    def __imul__(self, *args): return _saga_api.CSG_Matrix___imul__(self, *args)
+    def __add__(self, *args): return _saga_api.CSG_Matrix___add__(self, *args)
+    def __sub__(self, *args): return _saga_api.CSG_Matrix___sub__(self, *args)
+    def __mul__(self, *args): return _saga_api.CSG_Matrix___mul__(self, *args)
+    def Set_Zero(self): return _saga_api.CSG_Matrix_Set_Zero(self)
+    def Set_Identity(self): return _saga_api.CSG_Matrix_Set_Identity(self)
+    def Set_Transpose(self): return _saga_api.CSG_Matrix_Set_Transpose(self)
+    def Set_Inverse(self, bSilent = True, nSubSquare = 0): return _saga_api.CSG_Matrix_Set_Inverse(self, bSilent, nSubSquare)
+    def Get_Determinant(self): return _saga_api.CSG_Matrix_Get_Determinant(self)
+    def Get_Transpose(self): return _saga_api.CSG_Matrix_Get_Transpose(self)
+    def Get_Inverse(self, bSilent = True, nSubSquare = 0): return _saga_api.CSG_Matrix_Get_Inverse(self, bSilent, nSubSquare)
+CSG_Matrix_swigregister = _saga_api.CSG_Matrix_swigregister
+CSG_Matrix_swigregister(CSG_Matrix)
+
+class CSG_Grid_Radius(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Grid_Radius, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Grid_Radius, name)
+    __repr__ = _swig_repr
+    def __init__(self, maxRadius = 0): 
+        this = _saga_api.new_CSG_Grid_Radius(maxRadius)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Grid_Radius
+    __del__ = lambda self : None;
+    def Create(self, *args): return _saga_api.CSG_Grid_Radius_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_Grid_Radius_Destroy(self)
+    def Get_Maximum(self): return _saga_api.CSG_Grid_Radius_Get_Maximum(self)
+    def Get_nPoints(self, *args): return _saga_api.CSG_Grid_Radius_Get_nPoints(self, *args)
+    def Get_Point(self, *args): return _saga_api.CSG_Grid_Radius_Get_Point(self, *args)
+CSG_Grid_Radius_swigregister = _saga_api.CSG_Grid_Radius_swigregister
+CSG_Grid_Radius_swigregister(CSG_Grid_Radius)
+
+def SG_Matrix_Solve(*args):
+  return _saga_api.SG_Matrix_Solve(*args)
+SG_Matrix_Solve = _saga_api.SG_Matrix_Solve
+
+class CSG_Simple_Statistics(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Simple_Statistics, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Simple_Statistics, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Simple_Statistics()
+        try: self.this.append(this)
+        except: self.this = this
+    def Invalidate(self): return _saga_api.CSG_Simple_Statistics_Invalidate(self)
+    def is_Evaluated(self): return _saga_api.CSG_Simple_Statistics_is_Evaluated(self)
+    def Get_Count(self): return _saga_api.CSG_Simple_Statistics_Get_Count(self)
+    def Get_Weights(self): return _saga_api.CSG_Simple_Statistics_Get_Weights(self)
+    def Get_Minimum(self): return _saga_api.CSG_Simple_Statistics_Get_Minimum(self)
+    def Get_Maximum(self): return _saga_api.CSG_Simple_Statistics_Get_Maximum(self)
+    def Get_Range(self): return _saga_api.CSG_Simple_Statistics_Get_Range(self)
+    def Get_Sum(self): return _saga_api.CSG_Simple_Statistics_Get_Sum(self)
+    def Get_Mean(self): return _saga_api.CSG_Simple_Statistics_Get_Mean(self)
+    def Get_Variance(self): return _saga_api.CSG_Simple_Statistics_Get_Variance(self)
+    def Get_StdDev(self): return _saga_api.CSG_Simple_Statistics_Get_StdDev(self)
+    def Add_Value(self, *args): return _saga_api.CSG_Simple_Statistics_Add_Value(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_Simple_Statistics
+    __del__ = lambda self : None;
+CSG_Simple_Statistics_swigregister = _saga_api.CSG_Simple_Statistics_swigregister
+CSG_Simple_Statistics_swigregister(CSG_Simple_Statistics)
+
+class CSG_Class_Statistics(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Class_Statistics, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Class_Statistics, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Class_Statistics()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Class_Statistics
+    __del__ = lambda self : None;
+    def Create(self): return _saga_api.CSG_Class_Statistics_Create(self)
+    def Destroy(self): return _saga_api.CSG_Class_Statistics_Destroy(self)
+    def Reset(self): return _saga_api.CSG_Class_Statistics_Reset(self)
+    def Get_Count(self): return _saga_api.CSG_Class_Statistics_Get_Count(self)
+    def Get_Class_Count(self, *args): return _saga_api.CSG_Class_Statistics_Get_Class_Count(self, *args)
+    def Get_Class_Value(self, *args): return _saga_api.CSG_Class_Statistics_Get_Class_Value(self, *args)
+    def Get_Class(self, *args): return _saga_api.CSG_Class_Statistics_Get_Class(self, *args)
+    def Add_Value(self, *args): return _saga_api.CSG_Class_Statistics_Add_Value(self, *args)
+    def Get_Majority(self, *args): return _saga_api.CSG_Class_Statistics_Get_Majority(self, *args)
+    def Get_Minority(self, *args): return _saga_api.CSG_Class_Statistics_Get_Minority(self, *args)
+CSG_Class_Statistics_swigregister = _saga_api.CSG_Class_Statistics_swigregister
+CSG_Class_Statistics_swigregister(CSG_Class_Statistics)
+
+SG_CLUSTERANALYSIS_Minimum_Distance = _saga_api.SG_CLUSTERANALYSIS_Minimum_Distance
+SG_CLUSTERANALYSIS_Hill_Climbing = _saga_api.SG_CLUSTERANALYSIS_Hill_Climbing
+SG_CLUSTERANALYSIS_Combined = _saga_api.SG_CLUSTERANALYSIS_Combined
+class CSG_Cluster_Analysis(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Cluster_Analysis, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Cluster_Analysis, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Cluster_Analysis()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Cluster_Analysis
+    __del__ = lambda self : None;
+    def Create(self, *args): return _saga_api.CSG_Cluster_Analysis_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_Cluster_Analysis_Destroy(self)
+    def Add_Element(self): return _saga_api.CSG_Cluster_Analysis_Add_Element(self)
+    def Set_Feature(self, *args): return _saga_api.CSG_Cluster_Analysis_Set_Feature(self, *args)
+    def Get_Cluster(self, *args): return _saga_api.CSG_Cluster_Analysis_Get_Cluster(self, *args)
+    def Execute(self, *args): return _saga_api.CSG_Cluster_Analysis_Execute(self, *args)
+    def Get_nElements(self): return _saga_api.CSG_Cluster_Analysis_Get_nElements(self)
+    def Get_nFeatures(self): return _saga_api.CSG_Cluster_Analysis_Get_nFeatures(self)
+    def Get_nClusters(self): return _saga_api.CSG_Cluster_Analysis_Get_nClusters(self)
+    def Get_Iteration(self): return _saga_api.CSG_Cluster_Analysis_Get_Iteration(self)
+    def Get_SP(self): return _saga_api.CSG_Cluster_Analysis_Get_SP(self)
+    def Get_nMembers(self, *args): return _saga_api.CSG_Cluster_Analysis_Get_nMembers(self, *args)
+    def Get_Variance(self, *args): return _saga_api.CSG_Cluster_Analysis_Get_Variance(self, *args)
+    def Get_Centroid(self, *args): return _saga_api.CSG_Cluster_Analysis_Get_Centroid(self, *args)
+CSG_Cluster_Analysis_swigregister = _saga_api.CSG_Cluster_Analysis_swigregister
+CSG_Cluster_Analysis_swigregister(CSG_Cluster_Analysis)
+
+class CSG_Spline(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Spline, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Spline, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Spline()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Spline
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Spline_Destroy(self)
+    def Create(self, *args): return _saga_api.CSG_Spline_Create(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Spline_Add(self, *args)
+    def Get_xMin(self): return _saga_api.CSG_Spline_Get_xMin(self)
+    def Get_xMax(self): return _saga_api.CSG_Spline_Get_xMax(self)
+    def Get_Value(self, *args): return _saga_api.CSG_Spline_Get_Value(self, *args)
+CSG_Spline_swigregister = _saga_api.CSG_Spline_swigregister
+CSG_Spline_swigregister(CSG_Spline)
+
+class CSG_Thin_Plate_Spline(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Thin_Plate_Spline, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Thin_Plate_Spline, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Thin_Plate_Spline()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Thin_Plate_Spline
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Thin_Plate_Spline_Destroy(self)
+    def Set_Point_Count(self, *args): return _saga_api.CSG_Thin_Plate_Spline_Set_Point_Count(self, *args)
+    def Get_Point_Count(self): return _saga_api.CSG_Thin_Plate_Spline_Get_Point_Count(self)
+    def Get_Points(self): return _saga_api.CSG_Thin_Plate_Spline_Get_Points(self)
+    def Add_Point(self, *args): return _saga_api.CSG_Thin_Plate_Spline_Add_Point(self, *args)
+    def Set_Point(self, *args): return _saga_api.CSG_Thin_Plate_Spline_Set_Point(self, *args)
+    def Create(self, Regularization = 0.0, bSilent = True): return _saga_api.CSG_Thin_Plate_Spline_Create(self, Regularization, bSilent)
+    def is_Okay(self): return _saga_api.CSG_Thin_Plate_Spline_is_Okay(self)
+    def Get_Value(self, *args): return _saga_api.CSG_Thin_Plate_Spline_Get_Value(self, *args)
+CSG_Thin_Plate_Spline_swigregister = _saga_api.CSG_Thin_Plate_Spline_swigregister
+CSG_Thin_Plate_Spline_swigregister(CSG_Thin_Plate_Spline)
+
+REGRESSION_Linear = _saga_api.REGRESSION_Linear
+REGRESSION_Rez_X = _saga_api.REGRESSION_Rez_X
+REGRESSION_Rez_Y = _saga_api.REGRESSION_Rez_Y
+REGRESSION_Pow = _saga_api.REGRESSION_Pow
+REGRESSION_Exp = _saga_api.REGRESSION_Exp
+REGRESSION_Log = _saga_api.REGRESSION_Log
+class CSG_Regression(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Regression, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Regression, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Regression()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Regression
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Regression_Destroy(self)
+    def Set_Values(self, *args): return _saga_api.CSG_Regression_Set_Values(self, *args)
+    def Add_Values(self, *args): return _saga_api.CSG_Regression_Add_Values(self, *args)
+    def Get_Count(self): return _saga_api.CSG_Regression_Get_Count(self)
+    def Get_xValue(self, *args): return _saga_api.CSG_Regression_Get_xValue(self, *args)
+    def Get_yValue(self, *args): return _saga_api.CSG_Regression_Get_yValue(self, *args)
+    def Get_Values(self, *args): return _saga_api.CSG_Regression_Get_Values(self, *args)
+    def Get_xMin(self): return _saga_api.CSG_Regression_Get_xMin(self)
+    def Get_xMax(self): return _saga_api.CSG_Regression_Get_xMax(self)
+    def Get_xMean(self): return _saga_api.CSG_Regression_Get_xMean(self)
+    def Get_xVariance(self): return _saga_api.CSG_Regression_Get_xVariance(self)
+    def Get_x(self, *args): return _saga_api.CSG_Regression_Get_x(self, *args)
+    def Get_yMin(self): return _saga_api.CSG_Regression_Get_yMin(self)
+    def Get_yMax(self): return _saga_api.CSG_Regression_Get_yMax(self)
+    def Get_yMean(self): return _saga_api.CSG_Regression_Get_yMean(self)
+    def Get_yVariance(self): return _saga_api.CSG_Regression_Get_yVariance(self)
+    def Get_y(self, *args): return _saga_api.CSG_Regression_Get_y(self, *args)
+    def Get_Constant(self): return _saga_api.CSG_Regression_Get_Constant(self)
+    def Get_Coefficient(self): return _saga_api.CSG_Regression_Get_Coefficient(self)
+    def Get_R(self): return _saga_api.CSG_Regression_Get_R(self)
+    def Get_R2(self): return _saga_api.CSG_Regression_Get_R2(self)
+    def asString(self): return _saga_api.CSG_Regression_asString(self)
+    def Get_Type(self): return _saga_api.CSG_Regression_Get_Type(self)
+    def Calculate(self, *args): return _saga_api.CSG_Regression_Calculate(self, *args)
+CSG_Regression_swigregister = _saga_api.CSG_Regression_swigregister
+CSG_Regression_swigregister(CSG_Regression)
+
+class CSG_Regression_Multiple(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Regression_Multiple, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Regression_Multiple, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Regression_Multiple()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Regression_Multiple
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Regression_Multiple_Destroy(self)
+    def Calculate(self, *args): return _saga_api.CSG_Regression_Multiple_Calculate(self, *args)
+    def Get_Result(self): return _saga_api.CSG_Regression_Multiple_Get_Result(self)
+    def Get_Count(self): return _saga_api.CSG_Regression_Multiple_Get_Count(self)
+    def Get_Index(self, *args): return _saga_api.CSG_Regression_Multiple_Get_Index(self, *args)
+    def Get_Order(self, *args): return _saga_api.CSG_Regression_Multiple_Get_Order(self, *args)
+    def Get_RConst(self): return _saga_api.CSG_Regression_Multiple_Get_RConst(self)
+    def Get_RCoeff(self, *args): return _saga_api.CSG_Regression_Multiple_Get_RCoeff(self, *args)
+    def Get_R2(self, *args): return _saga_api.CSG_Regression_Multiple_Get_R2(self, *args)
+    def Get_R2_Change(self, *args): return _saga_api.CSG_Regression_Multiple_Get_R2_Change(self, *args)
+    def Get_Name(self, *args): return _saga_api.CSG_Regression_Multiple_Get_Name(self, *args)
+CSG_Regression_Multiple_swigregister = _saga_api.CSG_Regression_Multiple_swigregister
+CSG_Regression_Multiple_swigregister(CSG_Regression_Multiple)
+
+class CSG_Formula(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Formula, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Formula, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Formula()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Formula
+    __del__ = lambda self : None;
+    __swig_getmethods__["Get_Help_Operators"] = lambda x: _saga_api.CSG_Formula_Get_Help_Operators
+    if _newclass:Get_Help_Operators = staticmethod(_saga_api.CSG_Formula_Get_Help_Operators)
+    __swig_getmethods__["Get_Help_Usage"] = lambda x: _saga_api.CSG_Formula_Get_Help_Usage
+    if _newclass:Get_Help_Usage = staticmethod(_saga_api.CSG_Formula_Get_Help_Usage)
+    def Get_Error(self, pPosition = None, pMessage = None): return _saga_api.CSG_Formula_Get_Error(self, pPosition, pMessage)
+    def Add_Function(self, *args): return _saga_api.CSG_Formula_Add_Function(self, *args)
+    def Del_Function(self, *args): return _saga_api.CSG_Formula_Del_Function(self, *args)
+    def Set_Formula(self, *args): return _saga_api.CSG_Formula_Set_Formula(self, *args)
+    def Get_Formula(self): return _saga_api.CSG_Formula_Get_Formula(self)
+    def Set_Variable(self, *args): return _saga_api.CSG_Formula_Set_Variable(self, *args)
+    def Get_Value(self, *args): return _saga_api.CSG_Formula_Get_Value(self, *args)
+    def Get_Used_Variables(self): return _saga_api.CSG_Formula_Get_Used_Variables(self)
+CSG_Formula_swigregister = _saga_api.CSG_Formula_swigregister
+CSG_Formula_swigregister(CSG_Formula)
+
+def CSG_Formula_Get_Help_Operators():
+  return _saga_api.CSG_Formula_Get_Help_Operators()
+CSG_Formula_Get_Help_Operators = _saga_api.CSG_Formula_Get_Help_Operators
+
+def CSG_Formula_Get_Help_Usage():
+  return _saga_api.CSG_Formula_Get_Help_Usage()
+CSG_Formula_Get_Help_Usage = _saga_api.CSG_Formula_Get_Help_Usage
+
+class CSG_Formula_TSG_Formula_Item(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Formula_TSG_Formula_Item, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Formula_TSG_Formula_Item, name)
+    __repr__ = _swig_repr
+    __swig_setmethods__["name"] = _saga_api.CSG_Formula_TSG_Formula_Item_name_set
+    __swig_getmethods__["name"] = _saga_api.CSG_Formula_TSG_Formula_Item_name_get
+    if _newclass:name = _swig_property(_saga_api.CSG_Formula_TSG_Formula_Item_name_get, _saga_api.CSG_Formula_TSG_Formula_Item_name_set)
+    __swig_setmethods__["f"] = _saga_api.CSG_Formula_TSG_Formula_Item_f_set
+    __swig_getmethods__["f"] = _saga_api.CSG_Formula_TSG_Formula_Item_f_get
+    if _newclass:f = _swig_property(_saga_api.CSG_Formula_TSG_Formula_Item_f_get, _saga_api.CSG_Formula_TSG_Formula_Item_f_set)
+    __swig_setmethods__["n_pars"] = _saga_api.CSG_Formula_TSG_Formula_Item_n_pars_set
+    __swig_getmethods__["n_pars"] = _saga_api.CSG_Formula_TSG_Formula_Item_n_pars_get
+    if _newclass:n_pars = _swig_property(_saga_api.CSG_Formula_TSG_Formula_Item_n_pars_get, _saga_api.CSG_Formula_TSG_Formula_Item_n_pars_set)
+    __swig_setmethods__["varying"] = _saga_api.CSG_Formula_TSG_Formula_Item_varying_set
+    __swig_getmethods__["varying"] = _saga_api.CSG_Formula_TSG_Formula_Item_varying_get
+    if _newclass:varying = _swig_property(_saga_api.CSG_Formula_TSG_Formula_Item_varying_get, _saga_api.CSG_Formula_TSG_Formula_Item_varying_set)
+    def __init__(self): 
+        this = _saga_api.new_CSG_Formula_TSG_Formula_Item()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Formula_TSG_Formula_Item
+    __del__ = lambda self : None;
+CSG_Formula_TSG_Formula_Item_swigregister = _saga_api.CSG_Formula_TSG_Formula_Item_swigregister
+CSG_Formula_TSG_Formula_Item_swigregister(CSG_Formula_TSG_Formula_Item)
+
+SG_TREND_STRING_Formula = _saga_api.SG_TREND_STRING_Formula
+SG_TREND_STRING_Function = _saga_api.SG_TREND_STRING_Function
+SG_TREND_STRING_Formula_Parameters = _saga_api.SG_TREND_STRING_Formula_Parameters
+SG_TREND_STRING_Complete = _saga_api.SG_TREND_STRING_Complete
+class CSG_Trend(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Trend, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Trend, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Trend()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Trend
+    __del__ = lambda self : None;
+    def Set_Formula(self, Formula = None): return _saga_api.CSG_Trend_Set_Formula(self, Formula)
+    def Get_Formula(self, *args): return _saga_api.CSG_Trend_Get_Formula(self, *args)
+    def Get_Parameter_Count(self): return _saga_api.CSG_Trend_Get_Parameter_Count(self)
+    def Get_Parameters(self): return _saga_api.CSG_Trend_Get_Parameters(self)
+    def Clr_Data(self): return _saga_api.CSG_Trend_Clr_Data(self)
+    def Set_Data(self, *args): return _saga_api.CSG_Trend_Set_Data(self, *args)
+    def Add_Data(self, *args): return _saga_api.CSG_Trend_Add_Data(self, *args)
+    def Get_Data_Count(self): return _saga_api.CSG_Trend_Get_Data_Count(self)
+    def Get_Data_X(self, *args): return _saga_api.CSG_Trend_Get_Data_X(self, *args)
+    def Get_Data_Y(self, *args): return _saga_api.CSG_Trend_Get_Data_Y(self, *args)
+    def Get_Data_XMin(self): return _saga_api.CSG_Trend_Get_Data_XMin(self)
+    def Get_Data_XMax(self): return _saga_api.CSG_Trend_Get_Data_XMax(self)
+    def Get_Data_YMin(self): return _saga_api.CSG_Trend_Get_Data_YMin(self)
+    def Get_Data_YMax(self): return _saga_api.CSG_Trend_Get_Data_YMax(self)
+    def Set_Max_Iterations(self, *args): return _saga_api.CSG_Trend_Set_Max_Iterations(self, *args)
+    def Get_Max_Iterations(self): return _saga_api.CSG_Trend_Get_Max_Iterations(self)
+    def Set_Max_Lambda(self, *args): return _saga_api.CSG_Trend_Set_Max_Lambda(self, *args)
+    def Get_Max_Lambda(self): return _saga_api.CSG_Trend_Get_Max_Lambda(self)
+    def Get_Trend(self, *args): return _saga_api.CSG_Trend_Get_Trend(self, *args)
+    def is_Okay(self): return _saga_api.CSG_Trend_is_Okay(self)
+    def Get_Error(self): return _saga_api.CSG_Trend_Get_Error(self)
+    def Get_ChiSquare(self): return _saga_api.CSG_Trend_Get_ChiSquare(self)
+    def Get_R2(self): return _saga_api.CSG_Trend_Get_R2(self)
+    def Get_Value(self, *args): return _saga_api.CSG_Trend_Get_Value(self, *args)
+CSG_Trend_swigregister = _saga_api.CSG_Trend_swigregister
+CSG_Trend_swigregister(CSG_Trend)
+
+DATAOBJECT_TYPE_Grid = _saga_api.DATAOBJECT_TYPE_Grid
+DATAOBJECT_TYPE_Table = _saga_api.DATAOBJECT_TYPE_Table
+DATAOBJECT_TYPE_Shapes = _saga_api.DATAOBJECT_TYPE_Shapes
+DATAOBJECT_TYPE_TIN = _saga_api.DATAOBJECT_TYPE_TIN
+DATAOBJECT_TYPE_PointCloud = _saga_api.DATAOBJECT_TYPE_PointCloud
+DATAOBJECT_TYPE_Undefined = _saga_api.DATAOBJECT_TYPE_Undefined
+
+def SG_Get_DataObject_Identifier(*args):
+  return _saga_api.SG_Get_DataObject_Identifier(*args)
+SG_Get_DataObject_Identifier = _saga_api.SG_Get_DataObject_Identifier
+
+def SG_Get_DataObject_Name(*args):
+  return _saga_api.SG_Get_DataObject_Name(*args)
+SG_Get_DataObject_Name = _saga_api.SG_Get_DataObject_Name
+class CSG_Data_Object(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Data_Object, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Data_Object, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Data_Object
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Data_Object_Destroy(self)
+    def Get_ObjectType(self): return _saga_api.CSG_Data_Object_Get_ObjectType(self)
+    def is_Valid(self): return _saga_api.CSG_Data_Object_is_Valid(self)
+    def Save(self, *args): return _saga_api.CSG_Data_Object_Save(self, *args)
+    def Get_File_Name(self, bNullAsString = False): return _saga_api.CSG_Data_Object_Get_File_Name(self, bNullAsString)
+    def Get_File_Type(self): return _saga_api.CSG_Data_Object_Get_File_Type(self)
+    def Assign(self, *args): return _saga_api.CSG_Data_Object_Assign(self, *args)
+    def Set_Name(self, *args): return _saga_api.CSG_Data_Object_Set_Name(self, *args)
+    def Get_Name(self): return _saga_api.CSG_Data_Object_Get_Name(self)
+    def Set_Modified(self, bOn = True): return _saga_api.CSG_Data_Object_Set_Modified(self, bOn)
+    def is_Modified(self): return _saga_api.CSG_Data_Object_is_Modified(self)
+    def Update(self): return _saga_api.CSG_Data_Object_Update(self)
+    def Get_MetaData(self): return _saga_api.CSG_Data_Object_Get_MetaData(self)
+    def Get_MetaData_DB(self): return _saga_api.CSG_Data_Object_Get_MetaData_DB(self)
+    def Get_History(self): return _saga_api.CSG_Data_Object_Get_History(self)
+    def Get_Projection(self): return _saga_api.CSG_Data_Object_Get_Projection(self)
+    def asTable(self): return _saga_api.CSG_Data_Object_asTable(self)
+    def asShapes(self): return _saga_api.CSG_Data_Object_asShapes(self)
+    def asTIN(self): return _saga_api.CSG_Data_Object_asTIN(self)
+    def asPointCloud(self): return _saga_api.CSG_Data_Object_asPointCloud(self)
+    def asGrid(self): return _saga_api.CSG_Data_Object_asGrid(self)
+    def Set_NoData_Value(self, *args): return _saga_api.CSG_Data_Object_Set_NoData_Value(self, *args)
+    def Set_NoData_Value_Range(self, *args): return _saga_api.CSG_Data_Object_Set_NoData_Value_Range(self, *args)
+    def Get_NoData_Value(self): return _saga_api.CSG_Data_Object_Get_NoData_Value(self)
+    def Get_NoData_hiValue(self): return _saga_api.CSG_Data_Object_Get_NoData_hiValue(self)
+    def is_NoData_Value(self, *args): return _saga_api.CSG_Data_Object_is_NoData_Value(self, *args)
+CSG_Data_Object_swigregister = _saga_api.CSG_Data_Object_swigregister
+CSG_Data_Object_swigregister(CSG_Data_Object)
+
+class CSG_Table_Value(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Table_Value, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Table_Value, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Table_Value
+    __del__ = lambda self : None;
+    def Set_Value(self, *args): return _saga_api.CSG_Table_Value_Set_Value(self, *args)
+    def asBinary(self): return _saga_api.CSG_Table_Value_asBinary(self)
+    def asString(self, *args): return _saga_api.CSG_Table_Value_asString(self, *args)
+    def asInt(self): return _saga_api.CSG_Table_Value_asInt(self)
+    def asDouble(self): return _saga_api.CSG_Table_Value_asDouble(self)
+CSG_Table_Value_swigregister = _saga_api.CSG_Table_Value_swigregister
+CSG_Table_Value_swigregister(CSG_Table_Value)
+
+class CSG_Table_Value_Binary(CSG_Table_Value):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Table_Value]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Table_Value_Binary, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Table_Value]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Table_Value_Binary, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Table_Value_Binary()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Table_Value_Binary
+    __del__ = lambda self : None;
+    def Set_Value(self, *args): return _saga_api.CSG_Table_Value_Binary_Set_Value(self, *args)
+    def Set_NoData(self): return _saga_api.CSG_Table_Value_Binary_Set_NoData(self)
+    def is_NoData(self): return _saga_api.CSG_Table_Value_Binary_is_NoData(self)
+    def asBinary(self): return _saga_api.CSG_Table_Value_Binary_asBinary(self)
+    def asString(self, *args): return _saga_api.CSG_Table_Value_Binary_asString(self, *args)
+    def asInt(self): return _saga_api.CSG_Table_Value_Binary_asInt(self)
+    def asDouble(self): return _saga_api.CSG_Table_Value_Binary_asDouble(self)
+    def Get_Binary(self): return _saga_api.CSG_Table_Value_Binary_Get_Binary(self)
+CSG_Table_Value_Binary_swigregister = _saga_api.CSG_Table_Value_Binary_swigregister
+CSG_Table_Value_Binary_swigregister(CSG_Table_Value_Binary)
+
+class CSG_Table_Value_String(CSG_Table_Value):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Table_Value]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Table_Value_String, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Table_Value]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Table_Value_String, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Table_Value_String()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Table_Value_String
+    __del__ = lambda self : None;
+    def Set_Value(self, *args): return _saga_api.CSG_Table_Value_String_Set_Value(self, *args)
+    def asBinary(self): return _saga_api.CSG_Table_Value_String_asBinary(self)
+    def asString(self, *args): return _saga_api.CSG_Table_Value_String_asString(self, *args)
+    def asInt(self): return _saga_api.CSG_Table_Value_String_asInt(self)
+    def asDouble(self): return _saga_api.CSG_Table_Value_String_asDouble(self)
+CSG_Table_Value_String_swigregister = _saga_api.CSG_Table_Value_String_swigregister
+CSG_Table_Value_String_swigregister(CSG_Table_Value_String)
+
+class CSG_Table_Value_Date(CSG_Table_Value):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Table_Value]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Table_Value_Date, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Table_Value]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Table_Value_Date, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Table_Value_Date()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Table_Value_Date
+    __del__ = lambda self : None;
+    def Set_Value(self, *args): return _saga_api.CSG_Table_Value_Date_Set_Value(self, *args)
+    def asBinary(self): return _saga_api.CSG_Table_Value_Date_asBinary(self)
+    def asString(self, *args): return _saga_api.CSG_Table_Value_Date_asString(self, *args)
+    def asInt(self): return _saga_api.CSG_Table_Value_Date_asInt(self)
+    def asDouble(self): return _saga_api.CSG_Table_Value_Date_asDouble(self)
+CSG_Table_Value_Date_swigregister = _saga_api.CSG_Table_Value_Date_swigregister
+CSG_Table_Value_Date_swigregister(CSG_Table_Value_Date)
+
+class CSG_Table_Value_Int(CSG_Table_Value):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Table_Value]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Table_Value_Int, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Table_Value]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Table_Value_Int, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Table_Value_Int()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Table_Value_Int
+    __del__ = lambda self : None;
+    def Set_Value(self, *args): return _saga_api.CSG_Table_Value_Int_Set_Value(self, *args)
+    def asString(self, *args): return _saga_api.CSG_Table_Value_Int_asString(self, *args)
+    def asBinary(self): return _saga_api.CSG_Table_Value_Int_asBinary(self)
+    def asInt(self): return _saga_api.CSG_Table_Value_Int_asInt(self)
+    def asDouble(self): return _saga_api.CSG_Table_Value_Int_asDouble(self)
+CSG_Table_Value_Int_swigregister = _saga_api.CSG_Table_Value_Int_swigregister
+CSG_Table_Value_Int_swigregister(CSG_Table_Value_Int)
+
+class CSG_Table_Value_Double(CSG_Table_Value):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Table_Value]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Table_Value_Double, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Table_Value]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Table_Value_Double, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Table_Value_Double()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Table_Value_Double
+    __del__ = lambda self : None;
+    def Set_Value(self, *args): return _saga_api.CSG_Table_Value_Double_Set_Value(self, *args)
+    def asString(self, *args): return _saga_api.CSG_Table_Value_Double_asString(self, *args)
+    def asBinary(self): return _saga_api.CSG_Table_Value_Double_asBinary(self)
+    def asInt(self): return _saga_api.CSG_Table_Value_Double_asInt(self)
+    def asDouble(self): return _saga_api.CSG_Table_Value_Double_asDouble(self)
+CSG_Table_Value_Double_swigregister = _saga_api.CSG_Table_Value_Double_swigregister
+CSG_Table_Value_Double_swigregister(CSG_Table_Value_Double)
+
+TABLE_FILETYPE_Undefined = _saga_api.TABLE_FILETYPE_Undefined
+TABLE_FILETYPE_Text = _saga_api.TABLE_FILETYPE_Text
+TABLE_FILETYPE_Text_NoHeadLine = _saga_api.TABLE_FILETYPE_Text_NoHeadLine
+TABLE_FILETYPE_DBase = _saga_api.TABLE_FILETYPE_DBase
+TABLE_INDEX_None = _saga_api.TABLE_INDEX_None
+TABLE_INDEX_Ascending = _saga_api.TABLE_INDEX_Ascending
+TABLE_INDEX_Descending = _saga_api.TABLE_INDEX_Descending
+SG_TABLE_REC_FLAG_Modified = _saga_api.SG_TABLE_REC_FLAG_Modified
+SG_TABLE_REC_FLAG_Selected = _saga_api.SG_TABLE_REC_FLAG_Selected
+class CSG_Table_Record(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Table_Record, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Table_Record, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def Get_Table(self): return _saga_api.CSG_Table_Record_Get_Table(self)
+    def Get_Index(self): return _saga_api.CSG_Table_Record_Get_Index(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Table_Record_Set_Value(self, *args)
+    def Add_Value(self, *args): return _saga_api.CSG_Table_Record_Add_Value(self, *args)
+    def Mul_Value(self, *args): return _saga_api.CSG_Table_Record_Mul_Value(self, *args)
+    def Set_NoData(self, *args): return _saga_api.CSG_Table_Record_Set_NoData(self, *args)
+    def is_NoData(self, *args): return _saga_api.CSG_Table_Record_is_NoData(self, *args)
+    def asString(self, *args): return _saga_api.CSG_Table_Record_asString(self, *args)
+    def asChar(self, *args): return _saga_api.CSG_Table_Record_asChar(self, *args)
+    def asShort(self, *args): return _saga_api.CSG_Table_Record_asShort(self, *args)
+    def asInt(self, *args): return _saga_api.CSG_Table_Record_asInt(self, *args)
+    def asFloat(self, *args): return _saga_api.CSG_Table_Record_asFloat(self, *args)
+    def asDouble(self, *args): return _saga_api.CSG_Table_Record_asDouble(self, *args)
+    def Get_Value(self, *args): return _saga_api.CSG_Table_Record_Get_Value(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_Table_Record_Assign(self, *args)
+    def is_Selected(self): return _saga_api.CSG_Table_Record_is_Selected(self)
+    def is_Modified(self): return _saga_api.CSG_Table_Record_is_Modified(self)
+CSG_Table_Record_swigregister = _saga_api.CSG_Table_Record_swigregister
+CSG_Table_Record_swigregister(CSG_Table_Record)
+
+class CSG_Table(CSG_Data_Object):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Data_Object]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Table, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Data_Object]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Table, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Table(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Table_Create(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_Table
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Table_Destroy(self)
+    def Get_ObjectType(self): return _saga_api.CSG_Table_Get_ObjectType(self)
+    def Assign(self, *args): return _saga_api.CSG_Table_Assign(self, *args)
+    def Assign_Values(self, *args): return _saga_api.CSG_Table_Assign_Values(self, *args)
+    def Save(self, *args): return _saga_api.CSG_Table_Save(self, *args)
+    def Serialize(self, *args): return _saga_api.CSG_Table_Serialize(self, *args)
+    def Get_Owner(self): return _saga_api.CSG_Table_Get_Owner(self)
+    def is_Private(self): return _saga_api.CSG_Table_is_Private(self)
+    def is_Valid(self): return _saga_api.CSG_Table_is_Valid(self)
+    def is_Compatible(self, *args): return _saga_api.CSG_Table_is_Compatible(self, *args)
+    def Add_Field(self, *args): return _saga_api.CSG_Table_Add_Field(self, *args)
+    def Del_Field(self, *args): return _saga_api.CSG_Table_Del_Field(self, *args)
+    def Get_Field_Count(self): return _saga_api.CSG_Table_Get_Field_Count(self)
+    def Get_Field_Name(self, *args): return _saga_api.CSG_Table_Get_Field_Name(self, *args)
+    def Get_Field_Type(self, *args): return _saga_api.CSG_Table_Get_Field_Type(self, *args)
+    def Get_Field_Length(self, *args): return _saga_api.CSG_Table_Get_Field_Length(self, *args)
+    def Set_Field_Name(self, *args): return _saga_api.CSG_Table_Set_Field_Name(self, *args)
+    def Get_Minimum(self, *args): return _saga_api.CSG_Table_Get_Minimum(self, *args)
+    def Get_Maximum(self, *args): return _saga_api.CSG_Table_Get_Maximum(self, *args)
+    def Get_Range(self, *args): return _saga_api.CSG_Table_Get_Range(self, *args)
+    def Get_Mean(self, *args): return _saga_api.CSG_Table_Get_Mean(self, *args)
+    def Get_StdDev(self, *args): return _saga_api.CSG_Table_Get_StdDev(self, *args)
+    def Get_Variance(self, *args): return _saga_api.CSG_Table_Get_Variance(self, *args)
+    def Add_Record(self, pCopy = None): return _saga_api.CSG_Table_Add_Record(self, pCopy)
+    def Ins_Record(self, *args): return _saga_api.CSG_Table_Ins_Record(self, *args)
+    def Del_Record(self, *args): return _saga_api.CSG_Table_Del_Record(self, *args)
+    def Del_Records(self): return _saga_api.CSG_Table_Del_Records(self)
+    def Get_Count(self): return _saga_api.CSG_Table_Get_Count(self)
+    def Get_Record_Count(self): return _saga_api.CSG_Table_Get_Record_Count(self)
+    def Get_Record(self, *args): return _saga_api.CSG_Table_Get_Record(self, *args)
+    def Get_Index(self, *args): return _saga_api.CSG_Table_Get_Index(self, *args)
+    def Get_Record_byIndex(self, *args): return _saga_api.CSG_Table_Get_Record_byIndex(self, *args)
+    def Set_Value(self, *args): return _saga_api.CSG_Table_Set_Value(self, *args)
+    def Get_Value(self, *args): return _saga_api.CSG_Table_Get_Value(self, *args)
+    def Set_Modified(self, bModified = True): return _saga_api.CSG_Table_Set_Modified(self, bModified)
+    def Get_Selection_Count(self): return _saga_api.CSG_Table_Get_Selection_Count(self)
+    def Get_Selection(self, Index = 0): return _saga_api.CSG_Table_Get_Selection(self, Index)
+    def is_Selected(self, *args): return _saga_api.CSG_Table_is_Selected(self, *args)
+    def Select(self, *args): return _saga_api.CSG_Table_Select(self, *args)
+    def Del_Selection(self): return _saga_api.CSG_Table_Del_Selection(self)
+    def Inv_Selection(self): return _saga_api.CSG_Table_Inv_Selection(self)
+    def Set_Index(self, *args): return _saga_api.CSG_Table_Set_Index(self, *args)
+    def Del_Index(self): return _saga_api.CSG_Table_Del_Index(self)
+    def Toggle_Index(self, *args): return _saga_api.CSG_Table_Toggle_Index(self, *args)
+    def is_Indexed(self): return _saga_api.CSG_Table_is_Indexed(self)
+    def Get_Index_Field(self, *args): return _saga_api.CSG_Table_Get_Index_Field(self, *args)
+    def Get_Index_Order(self, *args): return _saga_api.CSG_Table_Get_Index_Order(self, *args)
+CSG_Table_swigregister = _saga_api.CSG_Table_swigregister
+CSG_Table_swigregister(CSG_Table)
+
+GRID_PYRAMID_Mean = _saga_api.GRID_PYRAMID_Mean
+GRID_PYRAMID_Max = _saga_api.GRID_PYRAMID_Max
+GRID_PYRAMID_Min = _saga_api.GRID_PYRAMID_Min
+GRID_PYRAMID_MaxCount = _saga_api.GRID_PYRAMID_MaxCount
+GRID_PYRAMID_Arithmetic = _saga_api.GRID_PYRAMID_Arithmetic
+GRID_PYRAMID_Geometric = _saga_api.GRID_PYRAMID_Geometric
+class CSG_Grid_Pyramid(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Grid_Pyramid, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Grid_Pyramid, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Grid_Pyramid(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Grid_Pyramid_Create(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_Grid_Pyramid
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Grid_Pyramid_Destroy(self)
+    def Get_Count(self): return _saga_api.CSG_Grid_Pyramid_Get_Count(self)
+    def Get_Grid(self, *args): return _saga_api.CSG_Grid_Pyramid_Get_Grid(self, *args)
+CSG_Grid_Pyramid_swigregister = _saga_api.CSG_Grid_Pyramid_swigregister
+CSG_Grid_Pyramid_swigregister(CSG_Grid_Pyramid)
+
+def SG_Create_Table(*args):
+  return _saga_api.SG_Create_Table(*args)
+SG_Create_Table = _saga_api.SG_Create_Table
+
+GRID_MEMORY_Normal = _saga_api.GRID_MEMORY_Normal
+GRID_MEMORY_Cache = _saga_api.GRID_MEMORY_Cache
+GRID_MEMORY_Compression = _saga_api.GRID_MEMORY_Compression
+GRID_FILE_FORMAT_Undefined = _saga_api.GRID_FILE_FORMAT_Undefined
+GRID_FILE_FORMAT_Binary = _saga_api.GRID_FILE_FORMAT_Binary
+GRID_FILE_FORMAT_ASCII = _saga_api.GRID_FILE_FORMAT_ASCII
+GRID_FILE_KEY_NAME = _saga_api.GRID_FILE_KEY_NAME
+GRID_FILE_KEY_DESCRIPTION = _saga_api.GRID_FILE_KEY_DESCRIPTION
+GRID_FILE_KEY_UNITNAME = _saga_api.GRID_FILE_KEY_UNITNAME
+GRID_FILE_KEY_DATAFILE_NAME = _saga_api.GRID_FILE_KEY_DATAFILE_NAME
+GRID_FILE_KEY_DATAFILE_OFFSET = _saga_api.GRID_FILE_KEY_DATAFILE_OFFSET
+GRID_FILE_KEY_DATAFORMAT = _saga_api.GRID_FILE_KEY_DATAFORMAT
+GRID_FILE_KEY_BYTEORDER_BIG = _saga_api.GRID_FILE_KEY_BYTEORDER_BIG
+GRID_FILE_KEY_POSITION_XMIN = _saga_api.GRID_FILE_KEY_POSITION_XMIN
+GRID_FILE_KEY_POSITION_YMIN = _saga_api.GRID_FILE_KEY_POSITION_YMIN
+GRID_FILE_KEY_CELLCOUNT_X = _saga_api.GRID_FILE_KEY_CELLCOUNT_X
+GRID_FILE_KEY_CELLCOUNT_Y = _saga_api.GRID_FILE_KEY_CELLCOUNT_Y
+GRID_FILE_KEY_CELLSIZE = _saga_api.GRID_FILE_KEY_CELLSIZE
+GRID_FILE_KEY_Z_FACTOR = _saga_api.GRID_FILE_KEY_Z_FACTOR
+GRID_FILE_KEY_NODATA_VALUE = _saga_api.GRID_FILE_KEY_NODATA_VALUE
+GRID_FILE_KEY_TOPTOBOTTOM = _saga_api.GRID_FILE_KEY_TOPTOBOTTOM
+GRID_FILE_KEY_Count = _saga_api.GRID_FILE_KEY_Count
+GRID_INTERPOLATION_NearestNeighbour = _saga_api.GRID_INTERPOLATION_NearestNeighbour
+GRID_INTERPOLATION_Bilinear = _saga_api.GRID_INTERPOLATION_Bilinear
+GRID_INTERPOLATION_InverseDistance = _saga_api.GRID_INTERPOLATION_InverseDistance
+GRID_INTERPOLATION_BicubicSpline = _saga_api.GRID_INTERPOLATION_BicubicSpline
+GRID_INTERPOLATION_BSpline = _saga_api.GRID_INTERPOLATION_BSpline
+GRID_INTERPOLATION_Mean_Nodes = _saga_api.GRID_INTERPOLATION_Mean_Nodes
+GRID_INTERPOLATION_Mean_Cells = _saga_api.GRID_INTERPOLATION_Mean_Cells
+GRID_INTERPOLATION_Minimum = _saga_api.GRID_INTERPOLATION_Minimum
+GRID_INTERPOLATION_Maximum = _saga_api.GRID_INTERPOLATION_Maximum
+GRID_INTERPOLATION_Majority = _saga_api.GRID_INTERPOLATION_Majority
+GRID_INTERPOLATION_Undefined = _saga_api.GRID_INTERPOLATION_Undefined
+GRID_OPERATION_Addition = _saga_api.GRID_OPERATION_Addition
+GRID_OPERATION_Subtraction = _saga_api.GRID_OPERATION_Subtraction
+GRID_OPERATION_Multiplication = _saga_api.GRID_OPERATION_Multiplication
+GRID_OPERATION_Division = _saga_api.GRID_OPERATION_Division
+class CSG_Grid_System(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Grid_System, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Grid_System, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Grid_System(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Grid_System
+    __del__ = lambda self : None;
+    def is_Valid(self): return _saga_api.CSG_Grid_System_is_Valid(self)
+    def Get_Name(self, bShort = True): return _saga_api.CSG_Grid_System_Get_Name(self, bShort)
+    def Get_Cellsize(self): return _saga_api.CSG_Grid_System_Get_Cellsize(self)
+    def Get_Cellarea(self): return _saga_api.CSG_Grid_System_Get_Cellarea(self)
+    def Get_NX(self): return _saga_api.CSG_Grid_System_Get_NX(self)
+    def Get_NY(self): return _saga_api.CSG_Grid_System_Get_NY(self)
+    def Get_NCells(self): return _saga_api.CSG_Grid_System_Get_NCells(self)
+    def Get_Extent(self, bCells = False): return _saga_api.CSG_Grid_System_Get_Extent(self, bCells)
+    def Get_XMin(self, bCells = False): return _saga_api.CSG_Grid_System_Get_XMin(self, bCells)
+    def Get_XMax(self, bCells = False): return _saga_api.CSG_Grid_System_Get_XMax(self, bCells)
+    def Get_XRange(self, bCells = False): return _saga_api.CSG_Grid_System_Get_XRange(self, bCells)
+    def Get_YMin(self, bCells = False): return _saga_api.CSG_Grid_System_Get_YMin(self, bCells)
+    def Get_YMax(self, bCells = False): return _saga_api.CSG_Grid_System_Get_YMax(self, bCells)
+    def Get_YRange(self, bCells = False): return _saga_api.CSG_Grid_System_Get_YRange(self, bCells)
+    def __eq__(self, *args): return _saga_api.CSG_Grid_System___eq__(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_Grid_System_Assign(self, *args)
+    def is_Equal(self, *args): return _saga_api.CSG_Grid_System_is_Equal(self, *args)
+    def Fit_xto_Grid_System(self, *args): return _saga_api.CSG_Grid_System_Fit_xto_Grid_System(self, *args)
+    def Fit_yto_Grid_System(self, *args): return _saga_api.CSG_Grid_System_Fit_yto_Grid_System(self, *args)
+    def Fit_to_Grid_System(self, *args): return _saga_api.CSG_Grid_System_Fit_to_Grid_System(self, *args)
+    def Get_xGrid_to_World(self, *args): return _saga_api.CSG_Grid_System_Get_xGrid_to_World(self, *args)
+    def Get_yGrid_to_World(self, *args): return _saga_api.CSG_Grid_System_Get_yGrid_to_World(self, *args)
+    def Get_Grid_to_World(self, *args): return _saga_api.CSG_Grid_System_Get_Grid_to_World(self, *args)
+    def Get_xWorld_to_Grid(self, *args): return _saga_api.CSG_Grid_System_Get_xWorld_to_Grid(self, *args)
+    def Get_yWorld_to_Grid(self, *args): return _saga_api.CSG_Grid_System_Get_yWorld_to_Grid(self, *args)
+    def Get_World_to_Grid(self, *args): return _saga_api.CSG_Grid_System_Get_World_to_Grid(self, *args)
+    def Get_Neighbor_Pos(self, *args): return _saga_api.CSG_Grid_System_Get_Neighbor_Pos(self, *args)
+    def Get_xTo(self, *args): return _saga_api.CSG_Grid_System_Get_xTo(self, *args)
+    def Get_yTo(self, *args): return _saga_api.CSG_Grid_System_Get_yTo(self, *args)
+    def Get_xFrom(self, *args): return _saga_api.CSG_Grid_System_Get_xFrom(self, *args)
+    def Get_yFrom(self, *args): return _saga_api.CSG_Grid_System_Get_yFrom(self, *args)
+    def Get_xToSave(self, *args): return _saga_api.CSG_Grid_System_Get_xToSave(self, *args)
+    def Get_yToSave(self, *args): return _saga_api.CSG_Grid_System_Get_yToSave(self, *args)
+    def Get_xFromSave(self, *args): return _saga_api.CSG_Grid_System_Get_xFromSave(self, *args)
+    def Get_yFromSave(self, *args): return _saga_api.CSG_Grid_System_Get_yFromSave(self, *args)
+    def is_InGrid(self, *args): return _saga_api.CSG_Grid_System_is_InGrid(self, *args)
+    def Get_Length(self, *args): return _saga_api.CSG_Grid_System_Get_Length(self, *args)
+    def Get_UnitLength(self, *args): return _saga_api.CSG_Grid_System_Get_UnitLength(self, *args)
+CSG_Grid_System_swigregister = _saga_api.CSG_Grid_System_swigregister
+CSG_Grid_System_swigregister(CSG_Grid_System)
+gSG_Grid_File_Key_Names = cvar.gSG_Grid_File_Key_Names
+
+class CSG_Grid(CSG_Data_Object):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Data_Object]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Grid, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Data_Object]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Grid, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Grid(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Grid_Create(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_Grid
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Grid_Destroy(self)
+    def Get_ObjectType(self): return _saga_api.CSG_Grid_Get_ObjectType(self)
+    def Get_Type(self): return _saga_api.CSG_Grid_Get_Type(self)
+    def Get_nValueBytes(self): return _saga_api.CSG_Grid_Get_nValueBytes(self)
+    def Get_nLineBytes(self): return _saga_api.CSG_Grid_Get_nLineBytes(self)
+    def Set_Description(self, *args): return _saga_api.CSG_Grid_Set_Description(self, *args)
+    def Get_Description(self): return _saga_api.CSG_Grid_Get_Description(self)
+    def Set_Unit(self, *args): return _saga_api.CSG_Grid_Set_Unit(self, *args)
+    def Get_Unit(self): return _saga_api.CSG_Grid_Get_Unit(self)
+    def Get_System(self): return _saga_api.CSG_Grid_Get_System(self)
+    def Get_NX(self): return _saga_api.CSG_Grid_Get_NX(self)
+    def Get_NY(self): return _saga_api.CSG_Grid_Get_NY(self)
+    def Get_NCells(self): return _saga_api.CSG_Grid_Get_NCells(self)
+    def Get_Cellsize(self): return _saga_api.CSG_Grid_Get_Cellsize(self)
+    def Get_Cellarea(self): return _saga_api.CSG_Grid_Get_Cellarea(self)
+    def Get_Extent(self, bCells = False): return _saga_api.CSG_Grid_Get_Extent(self, bCells)
+    def Get_XMin(self, bCells = False): return _saga_api.CSG_Grid_Get_XMin(self, bCells)
+    def Get_XMax(self, bCells = False): return _saga_api.CSG_Grid_Get_XMax(self, bCells)
+    def Get_XRange(self, bCells = False): return _saga_api.CSG_Grid_Get_XRange(self, bCells)
+    def Get_YMin(self, bCells = False): return _saga_api.CSG_Grid_Get_YMin(self, bCells)
+    def Get_YMax(self, bCells = False): return _saga_api.CSG_Grid_Get_YMax(self, bCells)
+    def Get_YRange(self, bCells = False): return _saga_api.CSG_Grid_Get_YRange(self, bCells)
+    def Get_ZMin(self, bZFactor = False): return _saga_api.CSG_Grid_Get_ZMin(self, bZFactor)
+    def Get_ZMax(self, bZFactor = False): return _saga_api.CSG_Grid_Get_ZMax(self, bZFactor)
+    def Get_ZRange(self, bZFactor = False): return _saga_api.CSG_Grid_Get_ZRange(self, bZFactor)
+    def Set_ZFactor(self, *args): return _saga_api.CSG_Grid_Set_ZFactor(self, *args)
+    def Get_ZFactor(self): return _saga_api.CSG_Grid_Get_ZFactor(self)
+    def Get_ArithMean(self, bZFactor = False): return _saga_api.CSG_Grid_Get_ArithMean(self, bZFactor)
+    def Get_StdDev(self, bZFactor = False): return _saga_api.CSG_Grid_Get_StdDev(self, bZFactor)
+    def Get_Variance(self): return _saga_api.CSG_Grid_Get_Variance(self)
+    def Get_NoData_Count(self): return _saga_api.CSG_Grid_Get_NoData_Count(self)
+    def Save(self, *args): return _saga_api.CSG_Grid_Save(self, *args)
+    def is_Valid(self): return _saga_api.CSG_Grid_is_Valid(self)
+    def is_Intersecting(self, *args): return _saga_api.CSG_Grid_is_Intersecting(self, *args)
+    def is_Compatible(self, *args): return _saga_api.CSG_Grid_is_Compatible(self, *args)
+    def is_InGrid(self, *args): return _saga_api.CSG_Grid_is_InGrid(self, *args)
+    def is_InGrid_byPos(self, *args): return _saga_api.CSG_Grid_is_InGrid_byPos(self, *args)
+    def Get_Buffer_Size(self): return _saga_api.CSG_Grid_Get_Buffer_Size(self)
+    def Set_Buffer_Size(self, *args): return _saga_api.CSG_Grid_Set_Buffer_Size(self, *args)
+    def Set_Cache(self, *args): return _saga_api.CSG_Grid_Set_Cache(self, *args)
+    def is_Cached(self): return _saga_api.CSG_Grid_is_Cached(self)
+    def Set_Compression(self, *args): return _saga_api.CSG_Grid_Set_Compression(self, *args)
+    def is_Compressed(self): return _saga_api.CSG_Grid_is_Compressed(self)
+    def Get_Compression_Ratio(self): return _saga_api.CSG_Grid_Get_Compression_Ratio(self)
+    def Assign_NoData(self): return _saga_api.CSG_Grid_Assign_NoData(self)
+    def Assign(self, *args): return _saga_api.CSG_Grid_Assign(self, *args)
+    def Flip(self): return _saga_api.CSG_Grid_Flip(self)
+    def Mirror(self): return _saga_api.CSG_Grid_Mirror(self)
+    def Invert(self): return _saga_api.CSG_Grid_Invert(self)
+    def Normalise(self): return _saga_api.CSG_Grid_Normalise(self)
+    def DeNormalise(self, *args): return _saga_api.CSG_Grid_DeNormalise(self, *args)
+    def Get_Gradient_NeighborDir(self, *args): return _saga_api.CSG_Grid_Get_Gradient_NeighborDir(self, *args)
+    def Get_Gradient(self, *args): return _saga_api.CSG_Grid_Get_Gradient(self, *args)
+    def Set_Modified(self, bFlag = True): return _saga_api.CSG_Grid_Set_Modified(self, bFlag)
+    def Set_Index(self, bOn = False): return _saga_api.CSG_Grid_Set_Index(self, bOn)
+    def Get_Sorted(self, *args): return _saga_api.CSG_Grid_Get_Sorted(self, *args)
+    def Get_Percentile(self, *args): return _saga_api.CSG_Grid_Get_Percentile(self, *args)
+    def is_NoData(self, *args): return _saga_api.CSG_Grid_is_NoData(self, *args)
+    def Set_NoData(self, *args): return _saga_api.CSG_Grid_Set_NoData(self, *args)
+    def __add__(self, *args): return _saga_api.CSG_Grid___add__(self, *args)
+    def __iadd__(self, *args): return _saga_api.CSG_Grid___iadd__(self, *args)
+    def Add(self, *args): return _saga_api.CSG_Grid_Add(self, *args)
+    def __sub__(self, *args): return _saga_api.CSG_Grid___sub__(self, *args)
+    def __isub__(self, *args): return _saga_api.CSG_Grid___isub__(self, *args)
+    def Subtract(self, *args): return _saga_api.CSG_Grid_Subtract(self, *args)
+    def __mul__(self, *args): return _saga_api.CSG_Grid___mul__(self, *args)
+    def __imul__(self, *args): return _saga_api.CSG_Grid___imul__(self, *args)
+    def Multiply(self, *args): return _saga_api.CSG_Grid_Multiply(self, *args)
+    def __div__(self, *args): return _saga_api.CSG_Grid___div__(self, *args)
+    def __idiv__(self, *args): return _saga_api.CSG_Grid___idiv__(self, *args)
+    def Divide(self, *args): return _saga_api.CSG_Grid_Divide(self, *args)
+    def __call__(self, *args): return _saga_api.CSG_Grid___call__(self, *args)
+    def Get_Value(self, *args): return _saga_api.CSG_Grid_Get_Value(self, *args)
+    def asByte(self, *args): return _saga_api.CSG_Grid_asByte(self, *args)
+    def asChar(self, *args): return _saga_api.CSG_Grid_asChar(self, *args)
+    def asShort(self, *args): return _saga_api.CSG_Grid_asShort(self, *args)
+    def asInt(self, *args): return _saga_api.CSG_Grid_asInt(self, *args)
+    def asFloat(self, *args): return _saga_api.CSG_Grid_asFloat(self, *args)
+    def asDouble(self, *args): return _saga_api.CSG_Grid_asDouble(self, *args)
+    def Add_Value(self, *args): return _saga_api.CSG_Grid_Add_Value(self, *args)
+    def Mul_Value(self, *args): return _saga_api.CSG_Grid_Mul_Value(self, *args)
+    def Set_Value(self, *args): return _saga_api.CSG_Grid_Set_Value(self, *args)
+    def Set_Value_And_Sort(self, *args): return _saga_api.CSG_Grid_Set_Value_And_Sort(self, *args)
+CSG_Grid_swigregister = _saga_api.CSG_Grid_swigregister
+CSG_Grid_swigregister(CSG_Grid)
+
+
+def SG_Grid_Cache_Get_Directory():
+  return _saga_api.SG_Grid_Cache_Get_Directory()
+SG_Grid_Cache_Get_Directory = _saga_api.SG_Grid_Cache_Get_Directory
+
+def SG_Grid_Cache_Set_Directory(*args):
+  return _saga_api.SG_Grid_Cache_Set_Directory(*args)
+SG_Grid_Cache_Set_Directory = _saga_api.SG_Grid_Cache_Set_Directory
+
+def SG_Grid_Cache_Set_Automatic(*args):
+  return _saga_api.SG_Grid_Cache_Set_Automatic(*args)
+SG_Grid_Cache_Set_Automatic = _saga_api.SG_Grid_Cache_Set_Automatic
+
+def SG_Grid_Cache_Get_Automatic():
+  return _saga_api.SG_Grid_Cache_Get_Automatic()
+SG_Grid_Cache_Get_Automatic = _saga_api.SG_Grid_Cache_Get_Automatic
+
+def SG_Grid_Cache_Set_Confirm(*args):
+  return _saga_api.SG_Grid_Cache_Set_Confirm(*args)
+SG_Grid_Cache_Set_Confirm = _saga_api.SG_Grid_Cache_Set_Confirm
+
+def SG_Grid_Cache_Get_Confirm():
+  return _saga_api.SG_Grid_Cache_Get_Confirm()
+SG_Grid_Cache_Get_Confirm = _saga_api.SG_Grid_Cache_Get_Confirm
+
+def SG_Grid_Cache_Set_Threshold(*args):
+  return _saga_api.SG_Grid_Cache_Set_Threshold(*args)
+SG_Grid_Cache_Set_Threshold = _saga_api.SG_Grid_Cache_Set_Threshold
+
+def SG_Grid_Cache_Set_Threshold_MB(*args):
+  return _saga_api.SG_Grid_Cache_Set_Threshold_MB(*args)
+SG_Grid_Cache_Set_Threshold_MB = _saga_api.SG_Grid_Cache_Set_Threshold_MB
+
+def SG_Grid_Cache_Get_Threshold():
+  return _saga_api.SG_Grid_Cache_Get_Threshold()
+SG_Grid_Cache_Get_Threshold = _saga_api.SG_Grid_Cache_Get_Threshold
+
+def SG_Grid_Cache_Get_Threshold_MB():
+  return _saga_api.SG_Grid_Cache_Get_Threshold_MB()
+SG_Grid_Cache_Get_Threshold_MB = _saga_api.SG_Grid_Cache_Get_Threshold_MB
+class CSG_Grid_Stack(CSG_Stack):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Stack]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Grid_Stack, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Stack]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Grid_Stack, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Grid_Stack()
+        try: self.this.append(this)
+        except: self.this = this
+    def Push(self, *args): return _saga_api.CSG_Grid_Stack_Push(self, *args)
+    def Pop(self, *args): return _saga_api.CSG_Grid_Stack_Pop(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_Grid_Stack
+    __del__ = lambda self : None;
+CSG_Grid_Stack_swigregister = _saga_api.CSG_Grid_Stack_swigregister
+CSG_Grid_Stack_swigregister(CSG_Grid_Stack)
+
+def SG_Create_Grid(*args):
+  return _saga_api.SG_Create_Grid(*args)
+SG_Create_Grid = _saga_api.SG_Create_Grid
+
+class CSG_Grid_Cell_Addressor(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Grid_Cell_Addressor, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Grid_Cell_Addressor, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Grid_Cell_Addressor()
+        try: self.this.append(this)
+        except: self.this = this
+    def Destroy(self): return _saga_api.CSG_Grid_Cell_Addressor_Destroy(self)
+    def Get_Weighting(self): return _saga_api.CSG_Grid_Cell_Addressor_Get_Weighting(self)
+    def Set_Radius(self, *args): return _saga_api.CSG_Grid_Cell_Addressor_Set_Radius(self, *args)
+    def Set_Sector(self, *args): return _saga_api.CSG_Grid_Cell_Addressor_Set_Sector(self, *args)
+    def Get_Count(self): return _saga_api.CSG_Grid_Cell_Addressor_Get_Count(self)
+    def Get_X(self, *args): return _saga_api.CSG_Grid_Cell_Addressor_Get_X(self, *args)
+    def Get_Y(self, *args): return _saga_api.CSG_Grid_Cell_Addressor_Get_Y(self, *args)
+    def Get_Distance(self, *args): return _saga_api.CSG_Grid_Cell_Addressor_Get_Distance(self, *args)
+    def Get_Weight(self, *args): return _saga_api.CSG_Grid_Cell_Addressor_Get_Weight(self, *args)
+    def Get_Values(self, *args): return _saga_api.CSG_Grid_Cell_Addressor_Get_Values(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_Grid_Cell_Addressor
+    __del__ = lambda self : None;
+CSG_Grid_Cell_Addressor_swigregister = _saga_api.CSG_Grid_Cell_Addressor_swigregister
+CSG_Grid_Cell_Addressor_swigregister(CSG_Grid_Cell_Addressor)
+
+SG_VERTEX_TYPE_XY = _saga_api.SG_VERTEX_TYPE_XY
+SG_VERTEX_TYPE_XYZ = _saga_api.SG_VERTEX_TYPE_XYZ
+SG_VERTEX_TYPE_XYZM = _saga_api.SG_VERTEX_TYPE_XYZM
+SHAPE_TYPE_Undefined = _saga_api.SHAPE_TYPE_Undefined
+SHAPE_TYPE_Point = _saga_api.SHAPE_TYPE_Point
+SHAPE_TYPE_Points = _saga_api.SHAPE_TYPE_Points
+SHAPE_TYPE_Line = _saga_api.SHAPE_TYPE_Line
+SHAPE_TYPE_Polygon = _saga_api.SHAPE_TYPE_Polygon
+
+def SG_Get_ShapeType_Name(*args):
+  return _saga_api.SG_Get_ShapeType_Name(*args)
+SG_Get_ShapeType_Name = _saga_api.SG_Get_ShapeType_Name
+class CSG_Shape(CSG_Table_Record):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Table_Record]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shape, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Table_Record]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shape, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+    def Destroy(self): return _saga_api.CSG_Shape_Destroy(self)
+    def Assign(self, *args): return _saga_api.CSG_Shape_Assign(self, *args)
+    def Get_Type(self): return _saga_api.CSG_Shape_Get_Type(self)
+    def is_Valid(self): return _saga_api.CSG_Shape_is_Valid(self)
+    def Del_Point(self, *args): return _saga_api.CSG_Shape_Del_Point(self, *args)
+    def Add_Point(self, *args): return _saga_api.CSG_Shape_Add_Point(self, *args)
+    def Ins_Point(self, *args): return _saga_api.CSG_Shape_Ins_Point(self, *args)
+    def Set_Point(self, *args): return _saga_api.CSG_Shape_Set_Point(self, *args)
+    def Del_Part(self, *args): return _saga_api.CSG_Shape_Del_Part(self, *args)
+    def Del_Parts(self): return _saga_api.CSG_Shape_Del_Parts(self)
+    def Get_Part_Count(self): return _saga_api.CSG_Shape_Get_Part_Count(self)
+    def Get_Point_Count(self, *args): return _saga_api.CSG_Shape_Get_Point_Count(self, *args)
+    def Get_Point(self, *args): return _saga_api.CSG_Shape_Get_Point(self, *args)
+    def Set_Z(self, *args): return _saga_api.CSG_Shape_Set_Z(self, *args)
+    def Get_Z(self, *args): return _saga_api.CSG_Shape_Get_Z(self, *args)
+    def Get_ZMin(self): return _saga_api.CSG_Shape_Get_ZMin(self)
+    def Get_ZMax(self): return _saga_api.CSG_Shape_Get_ZMax(self)
+    def Set_M(self, *args): return _saga_api.CSG_Shape_Set_M(self, *args)
+    def Get_M(self, *args): return _saga_api.CSG_Shape_Get_M(self, *args)
+    def Get_MMin(self): return _saga_api.CSG_Shape_Get_MMin(self)
+    def Get_MMax(self): return _saga_api.CSG_Shape_Get_MMax(self)
+    def Get_Extent(self, *args): return _saga_api.CSG_Shape_Get_Extent(self, *args)
+    def Intersects(self, *args): return _saga_api.CSG_Shape_Intersects(self, *args)
+    def Get_Distance(self, *args): return _saga_api.CSG_Shape_Get_Distance(self, *args)
+CSG_Shape_swigregister = _saga_api.CSG_Shape_swigregister
+CSG_Shape_swigregister(CSG_Shape)
+
+class CSG_Shape_Point(CSG_Shape):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Shape]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shape_Point, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Shape]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shape_Point, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def is_Valid(self): return _saga_api.CSG_Shape_Point_is_Valid(self)
+    def Add_Point(self, *args): return _saga_api.CSG_Shape_Point_Add_Point(self, *args)
+    def Ins_Point(self, *args): return _saga_api.CSG_Shape_Point_Ins_Point(self, *args)
+    def Set_Point(self, *args): return _saga_api.CSG_Shape_Point_Set_Point(self, *args)
+    def Del_Point(self, *args): return _saga_api.CSG_Shape_Point_Del_Point(self, *args)
+    def Del_Part(self, *args): return _saga_api.CSG_Shape_Point_Del_Part(self, *args)
+    def Del_Parts(self): return _saga_api.CSG_Shape_Point_Del_Parts(self)
+    def Get_Part_Count(self): return _saga_api.CSG_Shape_Point_Get_Part_Count(self)
+    def Get_Point_Count(self, *args): return _saga_api.CSG_Shape_Point_Get_Point_Count(self, *args)
+    def Get_Point(self, *args): return _saga_api.CSG_Shape_Point_Get_Point(self, *args)
+    def Get_Extent(self): return _saga_api.CSG_Shape_Point_Get_Extent(self)
+    def Get_Distance(self, *args): return _saga_api.CSG_Shape_Point_Get_Distance(self, *args)
+CSG_Shape_Point_swigregister = _saga_api.CSG_Shape_Point_swigregister
+CSG_Shape_Point_swigregister(CSG_Shape_Point)
+
+class CSG_Shape_Point_Z(CSG_Shape_Point):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Shape_Point]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shape_Point_Z, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Shape_Point]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shape_Point_Z, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Shape_Point_Z(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Set_Z(self, *args): return _saga_api.CSG_Shape_Point_Z_Set_Z(self, *args)
+    def Get_Z(self, *args): return _saga_api.CSG_Shape_Point_Z_Get_Z(self, *args)
+    def Get_ZMin(self): return _saga_api.CSG_Shape_Point_Z_Get_ZMin(self)
+    def Get_ZMax(self): return _saga_api.CSG_Shape_Point_Z_Get_ZMax(self)
+    __swig_destroy__ = _saga_api.delete_CSG_Shape_Point_Z
+    __del__ = lambda self : None;
+CSG_Shape_Point_Z_swigregister = _saga_api.CSG_Shape_Point_Z_swigregister
+CSG_Shape_Point_Z_swigregister(CSG_Shape_Point_Z)
+
+class CSG_Shape_Point_ZM(CSG_Shape_Point_Z):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Shape_Point_Z]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shape_Point_ZM, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Shape_Point_Z]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shape_Point_ZM, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Shape_Point_ZM(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Set_M(self, *args): return _saga_api.CSG_Shape_Point_ZM_Set_M(self, *args)
+    def Get_M(self, *args): return _saga_api.CSG_Shape_Point_ZM_Get_M(self, *args)
+    def Get_MMin(self): return _saga_api.CSG_Shape_Point_ZM_Get_MMin(self)
+    def Get_MMax(self): return _saga_api.CSG_Shape_Point_ZM_Get_MMax(self)
+    __swig_destroy__ = _saga_api.delete_CSG_Shape_Point_ZM
+    __del__ = lambda self : None;
+CSG_Shape_Point_ZM_swigregister = _saga_api.CSG_Shape_Point_ZM_swigregister
+CSG_Shape_Point_ZM_swigregister(CSG_Shape_Point_ZM)
+
+class CSG_Shape_Part(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shape_Part, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shape_Part, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def Get_Owner(self): return _saga_api.CSG_Shape_Part_Get_Owner(self)
+    def Destroy(self): return _saga_api.CSG_Shape_Part_Destroy(self)
+    def Assign(self, *args): return _saga_api.CSG_Shape_Part_Assign(self, *args)
+    def Get_Extent(self): return _saga_api.CSG_Shape_Part_Get_Extent(self)
+    def Get_Count(self): return _saga_api.CSG_Shape_Part_Get_Count(self)
+    def Get_Point(self, *args): return _saga_api.CSG_Shape_Part_Get_Point(self, *args)
+    def Add_Point(self, *args): return _saga_api.CSG_Shape_Part_Add_Point(self, *args)
+    def Ins_Point(self, *args): return _saga_api.CSG_Shape_Part_Ins_Point(self, *args)
+    def Set_Point(self, *args): return _saga_api.CSG_Shape_Part_Set_Point(self, *args)
+    def Del_Point(self, *args): return _saga_api.CSG_Shape_Part_Del_Point(self, *args)
+    def Set_Z(self, *args): return _saga_api.CSG_Shape_Part_Set_Z(self, *args)
+    def Get_Z(self, *args): return _saga_api.CSG_Shape_Part_Get_Z(self, *args)
+    def Get_ZMin(self): return _saga_api.CSG_Shape_Part_Get_ZMin(self)
+    def Get_ZMax(self): return _saga_api.CSG_Shape_Part_Get_ZMax(self)
+    def Set_M(self, *args): return _saga_api.CSG_Shape_Part_Set_M(self, *args)
+    def Get_M(self, *args): return _saga_api.CSG_Shape_Part_Get_M(self, *args)
+    def Get_MMin(self): return _saga_api.CSG_Shape_Part_Get_MMin(self)
+    def Get_MMax(self): return _saga_api.CSG_Shape_Part_Get_MMax(self)
+CSG_Shape_Part_swigregister = _saga_api.CSG_Shape_Part_swigregister
+CSG_Shape_Part_swigregister(CSG_Shape_Part)
+
+class CSG_Shape_Part_Z(CSG_Shape_Part):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Shape_Part]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shape_Part_Z, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Shape_Part]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shape_Part_Z, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def Destroy(self): return _saga_api.CSG_Shape_Part_Z_Destroy(self)
+    def Assign(self, *args): return _saga_api.CSG_Shape_Part_Z_Assign(self, *args)
+    def Set_Z(self, *args): return _saga_api.CSG_Shape_Part_Z_Set_Z(self, *args)
+    def Get_Z(self, *args): return _saga_api.CSG_Shape_Part_Z_Get_Z(self, *args)
+    def Get_ZMin(self): return _saga_api.CSG_Shape_Part_Z_Get_ZMin(self)
+    def Get_ZMax(self): return _saga_api.CSG_Shape_Part_Z_Get_ZMax(self)
+CSG_Shape_Part_Z_swigregister = _saga_api.CSG_Shape_Part_Z_swigregister
+CSG_Shape_Part_Z_swigregister(CSG_Shape_Part_Z)
+
+class CSG_Shape_Part_ZM(CSG_Shape_Part_Z):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Shape_Part_Z]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shape_Part_ZM, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Shape_Part_Z]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shape_Part_ZM, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def Destroy(self): return _saga_api.CSG_Shape_Part_ZM_Destroy(self)
+    def Assign(self, *args): return _saga_api.CSG_Shape_Part_ZM_Assign(self, *args)
+    def Set_M(self, *args): return _saga_api.CSG_Shape_Part_ZM_Set_M(self, *args)
+    def Get_M(self, *args): return _saga_api.CSG_Shape_Part_ZM_Get_M(self, *args)
+    def Get_MMin(self): return _saga_api.CSG_Shape_Part_ZM_Get_MMin(self)
+    def Get_MMax(self): return _saga_api.CSG_Shape_Part_ZM_Get_MMax(self)
+CSG_Shape_Part_ZM_swigregister = _saga_api.CSG_Shape_Part_ZM_swigregister
+CSG_Shape_Part_ZM_swigregister(CSG_Shape_Part_ZM)
+
+class CSG_Shape_Points(CSG_Shape):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Shape]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shape_Points, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Shape]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shape_Points, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def Destroy(self): return _saga_api.CSG_Shape_Points_Destroy(self)
+    def is_Valid(self): return _saga_api.CSG_Shape_Points_is_Valid(self)
+    def Add_Point(self, *args): return _saga_api.CSG_Shape_Points_Add_Point(self, *args)
+    def Ins_Point(self, *args): return _saga_api.CSG_Shape_Points_Ins_Point(self, *args)
+    def Set_Point(self, *args): return _saga_api.CSG_Shape_Points_Set_Point(self, *args)
+    def Del_Point(self, *args): return _saga_api.CSG_Shape_Points_Del_Point(self, *args)
+    def Del_Part(self, *args): return _saga_api.CSG_Shape_Points_Del_Part(self, *args)
+    def Del_Parts(self): return _saga_api.CSG_Shape_Points_Del_Parts(self)
+    def Get_Part_Count(self): return _saga_api.CSG_Shape_Points_Get_Part_Count(self)
+    def Get_Part(self, *args): return _saga_api.CSG_Shape_Points_Get_Part(self, *args)
+    def Get_Point_Count(self, *args): return _saga_api.CSG_Shape_Points_Get_Point_Count(self, *args)
+    def Get_Point(self, *args): return _saga_api.CSG_Shape_Points_Get_Point(self, *args)
+    def Set_Z(self, *args): return _saga_api.CSG_Shape_Points_Set_Z(self, *args)
+    def Get_Z(self, *args): return _saga_api.CSG_Shape_Points_Get_Z(self, *args)
+    def Get_ZMin(self): return _saga_api.CSG_Shape_Points_Get_ZMin(self)
+    def Get_ZMax(self): return _saga_api.CSG_Shape_Points_Get_ZMax(self)
+    def Set_M(self, *args): return _saga_api.CSG_Shape_Points_Set_M(self, *args)
+    def Get_M(self, *args): return _saga_api.CSG_Shape_Points_Get_M(self, *args)
+    def Get_MMin(self): return _saga_api.CSG_Shape_Points_Get_MMin(self)
+    def Get_MMax(self): return _saga_api.CSG_Shape_Points_Get_MMax(self)
+    def Get_Extent(self): return _saga_api.CSG_Shape_Points_Get_Extent(self)
+    def Get_Distance(self, *args): return _saga_api.CSG_Shape_Points_Get_Distance(self, *args)
+CSG_Shape_Points_swigregister = _saga_api.CSG_Shape_Points_swigregister
+CSG_Shape_Points_swigregister(CSG_Shape_Points)
+
+class CSG_Shape_Line(CSG_Shape_Points):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Shape_Points]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shape_Line, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Shape_Points]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shape_Line, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def is_Valid(self): return _saga_api.CSG_Shape_Line_is_Valid(self)
+    def Get_Length(self, *args): return _saga_api.CSG_Shape_Line_Get_Length(self, *args)
+    def Get_Distance(self, *args): return _saga_api.CSG_Shape_Line_Get_Distance(self, *args)
+CSG_Shape_Line_swigregister = _saga_api.CSG_Shape_Line_swigregister
+CSG_Shape_Line_swigregister(CSG_Shape_Line)
+
+class CSG_Shape_Polygon_Part(CSG_Shape_Part):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Shape_Part]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shape_Polygon_Part, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Shape_Part]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shape_Polygon_Part, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def is_Clockwise(self): return _saga_api.CSG_Shape_Polygon_Part_is_Clockwise(self)
+    def Get_Perimeter(self): return _saga_api.CSG_Shape_Polygon_Part_Get_Perimeter(self)
+    def Get_Area(self): return _saga_api.CSG_Shape_Polygon_Part_Get_Area(self)
+    def Get_Centroid(self): return _saga_api.CSG_Shape_Polygon_Part_Get_Centroid(self)
+    def is_Containing(self, *args): return _saga_api.CSG_Shape_Polygon_Part_is_Containing(self, *args)
+    def Get_Distance(self, *args): return _saga_api.CSG_Shape_Polygon_Part_Get_Distance(self, *args)
+CSG_Shape_Polygon_Part_swigregister = _saga_api.CSG_Shape_Polygon_Part_swigregister
+CSG_Shape_Polygon_Part_swigregister(CSG_Shape_Polygon_Part)
+
+class CSG_Shape_Polygon(CSG_Shape_Points):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Shape_Points]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shape_Polygon, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Shape_Points]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shape_Polygon, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def is_Valid(self): return _saga_api.CSG_Shape_Polygon_is_Valid(self)
+    def Get_Polygon_Part(self, *args): return _saga_api.CSG_Shape_Polygon_Get_Polygon_Part(self, *args)
+    def is_Lake(self, *args): return _saga_api.CSG_Shape_Polygon_is_Lake(self, *args)
+    def is_Clockwise(self, *args): return _saga_api.CSG_Shape_Polygon_is_Clockwise(self, *args)
+    def Get_Perimeter(self, *args): return _saga_api.CSG_Shape_Polygon_Get_Perimeter(self, *args)
+    def Get_Area(self, *args): return _saga_api.CSG_Shape_Polygon_Get_Area(self, *args)
+    def Get_Centroid(self, *args): return _saga_api.CSG_Shape_Polygon_Get_Centroid(self, *args)
+    def is_Containing(self, *args): return _saga_api.CSG_Shape_Polygon_is_Containing(self, *args)
+    def Get_Distance(self, *args): return _saga_api.CSG_Shape_Polygon_Get_Distance(self, *args)
+CSG_Shape_Polygon_swigregister = _saga_api.CSG_Shape_Polygon_swigregister
+CSG_Shape_Polygon_swigregister(CSG_Shape_Polygon)
+
+SHAPE_NO_COPY = _saga_api.SHAPE_NO_COPY
+SHAPE_COPY_GEOM = _saga_api.SHAPE_COPY_GEOM
+SHAPE_COPY_ATTR = _saga_api.SHAPE_COPY_ATTR
+SHAPE_COPY = _saga_api.SHAPE_COPY
+class CSG_Shapes(CSG_Table):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Table]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shapes, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Table]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shapes, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Shapes(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Shapes_Create(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_Shapes
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Shapes_Destroy(self)
+    def Get_ObjectType(self): return _saga_api.CSG_Shapes_Get_ObjectType(self)
+    def Assign(self, *args): return _saga_api.CSG_Shapes_Assign(self, *args)
+    def Save(self, *args): return _saga_api.CSG_Shapes_Save(self, *args)
+    def is_Valid(self): return _saga_api.CSG_Shapes_is_Valid(self)
+    def Get_Type(self): return _saga_api.CSG_Shapes_Get_Type(self)
+    def Get_Vertex_Type(self): return _saga_api.CSG_Shapes_Get_Vertex_Type(self)
+    def Get_Extent(self): return _saga_api.CSG_Shapes_Get_Extent(self)
+    def Get_ZMin(self): return _saga_api.CSG_Shapes_Get_ZMin(self)
+    def Get_ZMax(self): return _saga_api.CSG_Shapes_Get_ZMax(self)
+    def Get_MMin(self): return _saga_api.CSG_Shapes_Get_MMin(self)
+    def Get_MMax(self): return _saga_api.CSG_Shapes_Get_MMax(self)
+    def Add_Shape(self, *args): return _saga_api.CSG_Shapes_Add_Shape(self, *args)
+    def Del_Shape(self, *args): return _saga_api.CSG_Shapes_Del_Shape(self, *args)
+    def Del_Shapes(self): return _saga_api.CSG_Shapes_Del_Shapes(self)
+    def Get_Shape(self, *args): return _saga_api.CSG_Shapes_Get_Shape(self, *args)
+    def Get_Shape_byIndex(self, *args): return _saga_api.CSG_Shapes_Get_Shape_byIndex(self, *args)
+    def Make_Clean(self): return _saga_api.CSG_Shapes_Make_Clean(self)
+    def Get_Selection(self, Index = 0): return _saga_api.CSG_Shapes_Get_Selection(self, Index)
+    def Get_Selection_Extent(self): return _saga_api.CSG_Shapes_Get_Selection_Extent(self)
+    def Select(self, *args): return _saga_api.CSG_Shapes_Select(self, *args)
+CSG_Shapes_swigregister = _saga_api.CSG_Shapes_swigregister
+CSG_Shapes_swigregister(CSG_Shapes)
+
+class CSG_PRQuadTree_Item(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_PRQuadTree_Item, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_PRQuadTree_Item, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def is_Leaf(self): return _saga_api.CSG_PRQuadTree_Item_is_Leaf(self)
+    def is_Node(self): return _saga_api.CSG_PRQuadTree_Item_is_Node(self)
+    def Get_Extent(self): return _saga_api.CSG_PRQuadTree_Item_Get_Extent(self)
+    def Get_xMin(self): return _saga_api.CSG_PRQuadTree_Item_Get_xMin(self)
+    def Get_yMin(self): return _saga_api.CSG_PRQuadTree_Item_Get_yMin(self)
+    def Get_xCenter(self): return _saga_api.CSG_PRQuadTree_Item_Get_xCenter(self)
+    def Get_yCenter(self): return _saga_api.CSG_PRQuadTree_Item_Get_yCenter(self)
+    def Get_xMax(self): return _saga_api.CSG_PRQuadTree_Item_Get_xMax(self)
+    def Get_yMax(self): return _saga_api.CSG_PRQuadTree_Item_Get_yMax(self)
+    def Get_Size(self): return _saga_api.CSG_PRQuadTree_Item_Get_Size(self)
+    def Contains(self, *args): return _saga_api.CSG_PRQuadTree_Item_Contains(self, *args)
+    def asLeaf(self): return _saga_api.CSG_PRQuadTree_Item_asLeaf(self)
+    def asNode(self): return _saga_api.CSG_PRQuadTree_Item_asNode(self)
+    __swig_destroy__ = _saga_api.delete_CSG_PRQuadTree_Item
+    __del__ = lambda self : None;
+CSG_PRQuadTree_Item_swigregister = _saga_api.CSG_PRQuadTree_Item_swigregister
+CSG_PRQuadTree_Item_swigregister(CSG_PRQuadTree_Item)
+
+def SG_Create_Shapes(*args):
+  return _saga_api.SG_Create_Shapes(*args)
+SG_Create_Shapes = _saga_api.SG_Create_Shapes
+
+class CSG_PRQuadTree_Leaf(CSG_PRQuadTree_Item):
+    __swig_setmethods__ = {}
+    for _s in [CSG_PRQuadTree_Item]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_PRQuadTree_Leaf, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_PRQuadTree_Item]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_PRQuadTree_Leaf, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def is_Leaf(self): return _saga_api.CSG_PRQuadTree_Leaf_is_Leaf(self)
+    def Get_Point(self): return _saga_api.CSG_PRQuadTree_Leaf_Get_Point(self)
+    def Get_X(self): return _saga_api.CSG_PRQuadTree_Leaf_Get_X(self)
+    def Get_Y(self): return _saga_api.CSG_PRQuadTree_Leaf_Get_Y(self)
+    def Get_Z(self): return _saga_api.CSG_PRQuadTree_Leaf_Get_Z(self)
+    __swig_destroy__ = _saga_api.delete_CSG_PRQuadTree_Leaf
+    __del__ = lambda self : None;
+CSG_PRQuadTree_Leaf_swigregister = _saga_api.CSG_PRQuadTree_Leaf_swigregister
+CSG_PRQuadTree_Leaf_swigregister(CSG_PRQuadTree_Leaf)
+
+class CSG_PRQuadTree_Node(CSG_PRQuadTree_Item):
+    __swig_setmethods__ = {}
+    for _s in [CSG_PRQuadTree_Item]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_PRQuadTree_Node, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_PRQuadTree_Item]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_PRQuadTree_Node, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def is_Node(self): return _saga_api.CSG_PRQuadTree_Node_is_Node(self)
+    def Get_Child(self, *args): return _saga_api.CSG_PRQuadTree_Node_Get_Child(self, *args)
+    def Add_Point(self, *args): return _saga_api.CSG_PRQuadTree_Node_Add_Point(self, *args)
+CSG_PRQuadTree_Node_swigregister = _saga_api.CSG_PRQuadTree_Node_swigregister
+CSG_PRQuadTree_Node_swigregister(CSG_PRQuadTree_Node)
+
+class CSG_PRQuadTree(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_PRQuadTree, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_PRQuadTree, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_PRQuadTree(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_PRQuadTree
+    __del__ = lambda self : None;
+    def Create(self, *args): return _saga_api.CSG_PRQuadTree_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_PRQuadTree_Destroy(self)
+    def Add_Point(self, *args): return _saga_api.CSG_PRQuadTree_Add_Point(self, *args)
+    def Get_Point_Count(self): return _saga_api.CSG_PRQuadTree_Get_Point_Count(self)
+    def Get_Root(self): return _saga_api.CSG_PRQuadTree_Get_Root(self)
+    def is_Okay(self): return _saga_api.CSG_PRQuadTree_is_Okay(self)
+    def Get_Nearest_Point(self, *args): return _saga_api.CSG_PRQuadTree_Get_Nearest_Point(self, *args)
+    def Select_Nearest_Points(self, *args): return _saga_api.CSG_PRQuadTree_Select_Nearest_Points(self, *args)
+    def Get_Selected_Count(self): return _saga_api.CSG_PRQuadTree_Get_Selected_Count(self)
+    def Get_Selected_Point(self, *args): return _saga_api.CSG_PRQuadTree_Get_Selected_Point(self, *args)
+CSG_PRQuadTree_swigregister = _saga_api.CSG_PRQuadTree_swigregister
+CSG_PRQuadTree_swigregister(CSG_PRQuadTree)
+
+class CSG_Shapes_Search(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shapes_Search, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shapes_Search, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Shapes_Search(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Shapes_Search
+    __del__ = lambda self : None;
+    def Create(self, *args): return _saga_api.CSG_Shapes_Search_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_Shapes_Search_Destroy(self)
+    def is_Valid(self): return _saga_api.CSG_Shapes_Search_is_Valid(self)
+    def Get_Point_Nearest(self, *args): return _saga_api.CSG_Shapes_Search_Get_Point_Nearest(self, *args)
+    def Select_Radius(self, *args): return _saga_api.CSG_Shapes_Search_Select_Radius(self, *args)
+    def Select_Quadrants(self, *args): return _saga_api.CSG_Shapes_Search_Select_Quadrants(self, *args)
+    def Get_Selected_Count(self): return _saga_api.CSG_Shapes_Search_Get_Selected_Count(self)
+    def Get_Selected_Point(self, *args): return _saga_api.CSG_Shapes_Search_Get_Selected_Point(self, *args)
+CSG_Shapes_Search_swigregister = _saga_api.CSG_Shapes_Search_swigregister
+CSG_Shapes_Search_swigregister(CSG_Shapes_Search)
+
+SG_OGIS_BYTEORDER_XDR = _saga_api.SG_OGIS_BYTEORDER_XDR
+SG_OGIS_BYTEORDER_NDR = _saga_api.SG_OGIS_BYTEORDER_NDR
+SG_OGIS_TYPE_Point = _saga_api.SG_OGIS_TYPE_Point
+SG_OGIS_TYPE_LineString = _saga_api.SG_OGIS_TYPE_LineString
+SG_OGIS_TYPE_Polygon = _saga_api.SG_OGIS_TYPE_Polygon
+SG_OGIS_TYPE_MultiPoint = _saga_api.SG_OGIS_TYPE_MultiPoint
+SG_OGIS_TYPE_MultiLineString = _saga_api.SG_OGIS_TYPE_MultiLineString
+SG_OGIS_TYPE_MultiPolygon = _saga_api.SG_OGIS_TYPE_MultiPolygon
+SG_OGIS_TYPE_GeometryCollection = _saga_api.SG_OGIS_TYPE_GeometryCollection
+SG_OGIS_TYPE_PolyhedralSurface = _saga_api.SG_OGIS_TYPE_PolyhedralSurface
+SG_OGIS_TYPE_TIN = _saga_api.SG_OGIS_TYPE_TIN
+SG_OGIS_TYPE_Triangle = _saga_api.SG_OGIS_TYPE_Triangle
+SG_OGIS_TYPE_PointZ = _saga_api.SG_OGIS_TYPE_PointZ
+SG_OGIS_TYPE_LineStringZ = _saga_api.SG_OGIS_TYPE_LineStringZ
+SG_OGIS_TYPE_PolygonZ = _saga_api.SG_OGIS_TYPE_PolygonZ
+SG_OGIS_TYPE_MultiPointZ = _saga_api.SG_OGIS_TYPE_MultiPointZ
+SG_OGIS_TYPE_MultiLineStringZ = _saga_api.SG_OGIS_TYPE_MultiLineStringZ
+SG_OGIS_TYPE_MultiPolygonZ = _saga_api.SG_OGIS_TYPE_MultiPolygonZ
+SG_OGIS_TYPE_GeometryCollectionZ = _saga_api.SG_OGIS_TYPE_GeometryCollectionZ
+SG_OGIS_TYPE_PolyhedralSurfaceZ = _saga_api.SG_OGIS_TYPE_PolyhedralSurfaceZ
+SG_OGIS_TYPE_TINZ = _saga_api.SG_OGIS_TYPE_TINZ
+SG_OGIS_TYPE_Trianglez = _saga_api.SG_OGIS_TYPE_Trianglez
+SG_OGIS_TYPE_PointM = _saga_api.SG_OGIS_TYPE_PointM
+SG_OGIS_TYPE_LineStringM = _saga_api.SG_OGIS_TYPE_LineStringM
+SG_OGIS_TYPE_PolygonM = _saga_api.SG_OGIS_TYPE_PolygonM
+SG_OGIS_TYPE_MultiPointM = _saga_api.SG_OGIS_TYPE_MultiPointM
+SG_OGIS_TYPE_MultiLineStringM = _saga_api.SG_OGIS_TYPE_MultiLineStringM
+SG_OGIS_TYPE_MultiPolygonM = _saga_api.SG_OGIS_TYPE_MultiPolygonM
+SG_OGIS_TYPE_GeometryCollectionM = _saga_api.SG_OGIS_TYPE_GeometryCollectionM
+SG_OGIS_TYPE_PolyhedralSurfaceM = _saga_api.SG_OGIS_TYPE_PolyhedralSurfaceM
+SG_OGIS_TYPE_TINM = _saga_api.SG_OGIS_TYPE_TINM
+SG_OGIS_TYPE_TriangleM = _saga_api.SG_OGIS_TYPE_TriangleM
+SG_OGIS_TYPE_PointZM = _saga_api.SG_OGIS_TYPE_PointZM
+SG_OGIS_TYPE_LineStringZM = _saga_api.SG_OGIS_TYPE_LineStringZM
+SG_OGIS_TYPE_PolygonZM = _saga_api.SG_OGIS_TYPE_PolygonZM
+SG_OGIS_TYPE_MultiPointZM = _saga_api.SG_OGIS_TYPE_MultiPointZM
+SG_OGIS_TYPE_MultiLineStringZM = _saga_api.SG_OGIS_TYPE_MultiLineStringZM
+SG_OGIS_TYPE_MultiPolygonZM = _saga_api.SG_OGIS_TYPE_MultiPolygonZM
+SG_OGIS_TYPE_GeometryCollectionZM = _saga_api.SG_OGIS_TYPE_GeometryCollectionZM
+SG_OGIS_TYPE_PolyhedralSurfaceZM = _saga_api.SG_OGIS_TYPE_PolyhedralSurfaceZM
+SG_OGIS_TYPE_TinZM = _saga_api.SG_OGIS_TYPE_TinZM
+SG_OGIS_TYPE_TriangleZM = _saga_api.SG_OGIS_TYPE_TriangleZM
+class CSG_Shapes_OGIS_Converter(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Shapes_OGIS_Converter, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Shapes_OGIS_Converter, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Shapes_OGIS_Converter()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_getmethods__["from_WKText"] = lambda x: _saga_api.CSG_Shapes_OGIS_Converter_from_WKText
+    if _newclass:from_WKText = staticmethod(_saga_api.CSG_Shapes_OGIS_Converter_from_WKText)
+    __swig_getmethods__["to_WKText"] = lambda x: _saga_api.CSG_Shapes_OGIS_Converter_to_WKText
+    if _newclass:to_WKText = staticmethod(_saga_api.CSG_Shapes_OGIS_Converter_to_WKText)
+    __swig_getmethods__["from_WKBinary"] = lambda x: _saga_api.CSG_Shapes_OGIS_Converter_from_WKBinary
+    if _newclass:from_WKBinary = staticmethod(_saga_api.CSG_Shapes_OGIS_Converter_from_WKBinary)
+    __swig_getmethods__["to_WKBinary"] = lambda x: _saga_api.CSG_Shapes_OGIS_Converter_to_WKBinary
+    if _newclass:to_WKBinary = staticmethod(_saga_api.CSG_Shapes_OGIS_Converter_to_WKBinary)
+    __swig_destroy__ = _saga_api.delete_CSG_Shapes_OGIS_Converter
+    __del__ = lambda self : None;
+CSG_Shapes_OGIS_Converter_swigregister = _saga_api.CSG_Shapes_OGIS_Converter_swigregister
+CSG_Shapes_OGIS_Converter_swigregister(CSG_Shapes_OGIS_Converter)
+
+def CSG_Shapes_OGIS_Converter_from_WKText(*args):
+  return _saga_api.CSG_Shapes_OGIS_Converter_from_WKText(*args)
+CSG_Shapes_OGIS_Converter_from_WKText = _saga_api.CSG_Shapes_OGIS_Converter_from_WKText
+
+def CSG_Shapes_OGIS_Converter_to_WKText(*args):
+  return _saga_api.CSG_Shapes_OGIS_Converter_to_WKText(*args)
+CSG_Shapes_OGIS_Converter_to_WKText = _saga_api.CSG_Shapes_OGIS_Converter_to_WKText
+
+def CSG_Shapes_OGIS_Converter_from_WKBinary(*args):
+  return _saga_api.CSG_Shapes_OGIS_Converter_from_WKBinary(*args)
+CSG_Shapes_OGIS_Converter_from_WKBinary = _saga_api.CSG_Shapes_OGIS_Converter_from_WKBinary
+
+def CSG_Shapes_OGIS_Converter_to_WKBinary(*args):
+  return _saga_api.CSG_Shapes_OGIS_Converter_to_WKBinary(*args)
+CSG_Shapes_OGIS_Converter_to_WKBinary = _saga_api.CSG_Shapes_OGIS_Converter_to_WKBinary
+
+class CSG_TIN_Node(CSG_Table_Record):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Table_Record]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_TIN_Node, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Table_Record]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_TIN_Node, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def Get_ID(self): return _saga_api.CSG_TIN_Node_Get_ID(self)
+    def Get_Point(self): return _saga_api.CSG_TIN_Node_Get_Point(self)
+    def Get_X(self): return _saga_api.CSG_TIN_Node_Get_X(self)
+    def Get_Y(self): return _saga_api.CSG_TIN_Node_Get_Y(self)
+    def Get_Neighbor_Count(self): return _saga_api.CSG_TIN_Node_Get_Neighbor_Count(self)
+    def Get_Neighbor(self, *args): return _saga_api.CSG_TIN_Node_Get_Neighbor(self, *args)
+    def Get_Gradient(self, *args): return _saga_api.CSG_TIN_Node_Get_Gradient(self, *args)
+    def Get_Triangle_Count(self): return _saga_api.CSG_TIN_Node_Get_Triangle_Count(self)
+    def Get_Triangle(self, *args): return _saga_api.CSG_TIN_Node_Get_Triangle(self, *args)
+    def Get_Polygon(self, *args): return _saga_api.CSG_TIN_Node_Get_Polygon(self, *args)
+    def Get_Polygon_Area(self): return _saga_api.CSG_TIN_Node_Get_Polygon_Area(self)
+CSG_TIN_Node_swigregister = _saga_api.CSG_TIN_Node_swigregister
+CSG_TIN_Node_swigregister(CSG_TIN_Node)
+
+class CSG_TIN_Edge(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_TIN_Edge, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_TIN_Edge, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def Get_Node(self, *args): return _saga_api.CSG_TIN_Edge_Get_Node(self, *args)
+CSG_TIN_Edge_swigregister = _saga_api.CSG_TIN_Edge_swigregister
+CSG_TIN_Edge_swigregister(CSG_TIN_Edge)
+
+class CSG_TIN_Triangle(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_TIN_Triangle, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_TIN_Triangle, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def Get_Node(self, *args): return _saga_api.CSG_TIN_Triangle_Get_Node(self, *args)
+    def Get_Extent(self): return _saga_api.CSG_TIN_Triangle_Get_Extent(self)
+    def Get_Area(self): return _saga_api.CSG_TIN_Triangle_Get_Area(self)
+    def is_Containing(self, *args): return _saga_api.CSG_TIN_Triangle_is_Containing(self, *args)
+    def Get_Gradient(self, *args): return _saga_api.CSG_TIN_Triangle_Get_Gradient(self, *args)
+    def Get_CircumCircle(self, *args): return _saga_api.CSG_TIN_Triangle_Get_CircumCircle(self, *args)
+    def Get_CircumCircle_Radius(self): return _saga_api.CSG_TIN_Triangle_Get_CircumCircle_Radius(self)
+    def Get_CircumCircle_Point(self): return _saga_api.CSG_TIN_Triangle_Get_CircumCircle_Point(self)
+CSG_TIN_Triangle_swigregister = _saga_api.CSG_TIN_Triangle_swigregister
+CSG_TIN_Triangle_swigregister(CSG_TIN_Triangle)
+
+class CSG_TIN(CSG_Table):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Table]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_TIN, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Table]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_TIN, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_TIN(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_TIN_Create(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_TIN
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_TIN_Destroy(self)
+    def Get_ObjectType(self): return _saga_api.CSG_TIN_Get_ObjectType(self)
+    def Assign(self, *args): return _saga_api.CSG_TIN_Assign(self, *args)
+    def Save(self, *args): return _saga_api.CSG_TIN_Save(self, *args)
+    def is_Valid(self): return _saga_api.CSG_TIN_is_Valid(self)
+    def Get_Extent(self): return _saga_api.CSG_TIN_Get_Extent(self)
+    def Add_Node(self, *args): return _saga_api.CSG_TIN_Add_Node(self, *args)
+    def Del_Node(self, *args): return _saga_api.CSG_TIN_Del_Node(self, *args)
+    def Get_Node_Count(self): return _saga_api.CSG_TIN_Get_Node_Count(self)
+    def Get_Node(self, *args): return _saga_api.CSG_TIN_Get_Node(self, *args)
+    def Get_Edge_Count(self): return _saga_api.CSG_TIN_Get_Edge_Count(self)
+    def Get_Edge(self, *args): return _saga_api.CSG_TIN_Get_Edge(self, *args)
+    def Get_Triangle_Count(self): return _saga_api.CSG_TIN_Get_Triangle_Count(self)
+    def Get_Triangle(self, *args): return _saga_api.CSG_TIN_Get_Triangle(self, *args)
+CSG_TIN_swigregister = _saga_api.CSG_TIN_swigregister
+CSG_TIN_swigregister(CSG_TIN)
+
+class CSG_PointCloud(CSG_Shapes):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Shapes]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_PointCloud, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Shapes]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_PointCloud, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_PointCloud(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_PointCloud_Create(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_PointCloud
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_PointCloud_Destroy(self)
+    def Get_ObjectType(self): return _saga_api.CSG_PointCloud_Get_ObjectType(self)
+    def Assign(self, *args): return _saga_api.CSG_PointCloud_Assign(self, *args)
+    def Save(self, *args): return _saga_api.CSG_PointCloud_Save(self, *args)
+    def Set_XYZ_Precision(self, *args): return _saga_api.CSG_PointCloud_Set_XYZ_Precision(self, *args)
+    def is_Valid(self): return _saga_api.CSG_PointCloud_is_Valid(self)
+    def is_Compatible(self, *args): return _saga_api.CSG_PointCloud_is_Compatible(self, *args)
+    def Add_Field(self, *args): return _saga_api.CSG_PointCloud_Add_Field(self, *args)
+    def Del_Field(self, *args): return _saga_api.CSG_PointCloud_Del_Field(self, *args)
+    def Get_Attribute_Count(self): return _saga_api.CSG_PointCloud_Get_Attribute_Count(self)
+    def Get_Attribute_Name(self, *args): return _saga_api.CSG_PointCloud_Get_Attribute_Name(self, *args)
+    def Get_Attribute_Type(self, *args): return _saga_api.CSG_PointCloud_Get_Attribute_Type(self, *args)
+    def Add_Point(self, *args): return _saga_api.CSG_PointCloud_Add_Point(self, *args)
+    def Del_Point(self, *args): return _saga_api.CSG_PointCloud_Del_Point(self, *args)
+    def Del_Points(self): return _saga_api.CSG_PointCloud_Del_Points(self)
+    def Get_Point_Count(self): return _saga_api.CSG_PointCloud_Get_Point_Count(self)
+    def Set_Cursor(self, *args): return _saga_api.CSG_PointCloud_Set_Cursor(self, *args)
+    def Get_X(self, *args): return _saga_api.CSG_PointCloud_Get_X(self, *args)
+    def Get_Y(self, *args): return _saga_api.CSG_PointCloud_Get_Y(self, *args)
+    def Get_Z(self, *args): return _saga_api.CSG_PointCloud_Get_Z(self, *args)
+    def Set_Attribute(self, *args): return _saga_api.CSG_PointCloud_Set_Attribute(self, *args)
+    def Get_Attribute(self, *args): return _saga_api.CSG_PointCloud_Get_Attribute(self, *args)
+    def Set_NoData(self, *args): return _saga_api.CSG_PointCloud_Set_NoData(self, *args)
+    def is_NoData(self, *args): return _saga_api.CSG_PointCloud_is_NoData(self, *args)
+    def Set_Value(self, *args): return _saga_api.CSG_PointCloud_Set_Value(self, *args)
+    def Get_Value(self, *args): return _saga_api.CSG_PointCloud_Get_Value(self, *args)
+    def Get_Point(self, *args): return _saga_api.CSG_PointCloud_Get_Point(self, *args)
+    def Set_Modified(self, bModified = True): return _saga_api.CSG_PointCloud_Set_Modified(self, bModified)
+    def Get_Record(self, *args): return _saga_api.CSG_PointCloud_Get_Record(self, *args)
+    def Get_Shape(self, *args): return _saga_api.CSG_PointCloud_Get_Shape(self, *args)
+    def Del_Record(self, *args): return _saga_api.CSG_PointCloud_Del_Record(self, *args)
+    def Del_Records(self): return _saga_api.CSG_PointCloud_Del_Records(self)
+    def Del_Shapes(self): return _saga_api.CSG_PointCloud_Del_Shapes(self)
+    def Ins_Record(self, *args): return _saga_api.CSG_PointCloud_Ins_Record(self, *args)
+    def Add_Record(self, pCopy = None): return _saga_api.CSG_PointCloud_Add_Record(self, pCopy)
+    def Add_Shape(self, *args): return _saga_api.CSG_PointCloud_Add_Shape(self, *args)
+    def Del_Shape(self, *args): return _saga_api.CSG_PointCloud_Del_Shape(self, *args)
+    def Select(self, *args): return _saga_api.CSG_PointCloud_Select(self, *args)
+    def is_Selected(self, *args): return _saga_api.CSG_PointCloud_is_Selected(self, *args)
+    def Del_Selection(self): return _saga_api.CSG_PointCloud_Del_Selection(self)
+    def Inv_Selection(self): return _saga_api.CSG_PointCloud_Inv_Selection(self)
+    def Get_Selection(self, Index = 0): return _saga_api.CSG_PointCloud_Get_Selection(self, Index)
+    def Get_Selection_Extent(self): return _saga_api.CSG_PointCloud_Get_Selection_Extent(self)
+CSG_PointCloud_swigregister = _saga_api.CSG_PointCloud_swigregister
+CSG_PointCloud_swigregister(CSG_PointCloud)
+
+def SG_Create_TIN(*args):
+  return _saga_api.SG_Create_TIN(*args)
+SG_Create_TIN = _saga_api.SG_Create_TIN
+
+PARAMETER_INPUT = _saga_api.PARAMETER_INPUT
+PARAMETER_OUTPUT = _saga_api.PARAMETER_OUTPUT
+PARAMETER_OPTIONAL = _saga_api.PARAMETER_OPTIONAL
+PARAMETER_INFORMATION = _saga_api.PARAMETER_INFORMATION
+PARAMETER_IGNORE_PROJECTION = _saga_api.PARAMETER_IGNORE_PROJECTION
+PARAMETER_INPUT_OPTIONAL = _saga_api.PARAMETER_INPUT_OPTIONAL
+PARAMETER_OUTPUT_OPTIONAL = _saga_api.PARAMETER_OUTPUT_OPTIONAL
+PARAMETER_DESCRIPTION_NAME = _saga_api.PARAMETER_DESCRIPTION_NAME
+PARAMETER_DESCRIPTION_TYPE = _saga_api.PARAMETER_DESCRIPTION_TYPE
+PARAMETER_DESCRIPTION_OPTIONAL = _saga_api.PARAMETER_DESCRIPTION_OPTIONAL
+PARAMETER_DESCRIPTION_PROPERTIES = _saga_api.PARAMETER_DESCRIPTION_PROPERTIES
+PARAMETER_DESCRIPTION_TEXT = _saga_api.PARAMETER_DESCRIPTION_TEXT
+PARAMETER_DESCRIPTION_ALL = _saga_api.PARAMETER_DESCRIPTION_ALL
+PARAMETER_TYPE_Node = _saga_api.PARAMETER_TYPE_Node
+PARAMETER_TYPE_Bool = _saga_api.PARAMETER_TYPE_Bool
+PARAMETER_TYPE_Int = _saga_api.PARAMETER_TYPE_Int
+PARAMETER_TYPE_Double = _saga_api.PARAMETER_TYPE_Double
+PARAMETER_TYPE_Degree = _saga_api.PARAMETER_TYPE_Degree
+PARAMETER_TYPE_Range = _saga_api.PARAMETER_TYPE_Range
+PARAMETER_TYPE_Choice = _saga_api.PARAMETER_TYPE_Choice
+PARAMETER_TYPE_String = _saga_api.PARAMETER_TYPE_String
+PARAMETER_TYPE_Text = _saga_api.PARAMETER_TYPE_Text
+PARAMETER_TYPE_FilePath = _saga_api.PARAMETER_TYPE_FilePath
+PARAMETER_TYPE_Font = _saga_api.PARAMETER_TYPE_Font
+PARAMETER_TYPE_Color = _saga_api.PARAMETER_TYPE_Color
+PARAMETER_TYPE_Colors = _saga_api.PARAMETER_TYPE_Colors
+PARAMETER_TYPE_FixedTable = _saga_api.PARAMETER_TYPE_FixedTable
+PARAMETER_TYPE_Grid_System = _saga_api.PARAMETER_TYPE_Grid_System
+PARAMETER_TYPE_Table_Field = _saga_api.PARAMETER_TYPE_Table_Field
+PARAMETER_TYPE_PointCloud = _saga_api.PARAMETER_TYPE_PointCloud
+PARAMETER_TYPE_Grid = _saga_api.PARAMETER_TYPE_Grid
+PARAMETER_TYPE_Table = _saga_api.PARAMETER_TYPE_Table
+PARAMETER_TYPE_Shapes = _saga_api.PARAMETER_TYPE_Shapes
+PARAMETER_TYPE_TIN = _saga_api.PARAMETER_TYPE_TIN
+PARAMETER_TYPE_Grid_List = _saga_api.PARAMETER_TYPE_Grid_List
+PARAMETER_TYPE_Table_List = _saga_api.PARAMETER_TYPE_Table_List
+PARAMETER_TYPE_Shapes_List = _saga_api.PARAMETER_TYPE_Shapes_List
+PARAMETER_TYPE_TIN_List = _saga_api.PARAMETER_TYPE_TIN_List
+PARAMETER_TYPE_PointCloud_List = _saga_api.PARAMETER_TYPE_PointCloud_List
+PARAMETER_TYPE_DataObject_Output = _saga_api.PARAMETER_TYPE_DataObject_Output
+PARAMETER_TYPE_Parameters = _saga_api.PARAMETER_TYPE_Parameters
+PARAMETER_TYPE_Undefined = _saga_api.PARAMETER_TYPE_Undefined
+
+def SG_Parameter_Type_Get_Identifier(*args):
+  return _saga_api.SG_Parameter_Type_Get_Identifier(*args)
+SG_Parameter_Type_Get_Identifier = _saga_api.SG_Parameter_Type_Get_Identifier
+
+def SG_Parameter_Type_Get_Name(*args):
+  return _saga_api.SG_Parameter_Type_Get_Name(*args)
+SG_Parameter_Type_Get_Name = _saga_api.SG_Parameter_Type_Get_Name
+class CSG_Parameter_Data(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Data, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Data, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Data
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Data_Get_Type(self)
+    def Get_Type_Identifier(self): return _saga_api.CSG_Parameter_Data_Get_Type_Identifier(self)
+    def Get_Type_Name(self): return _saga_api.CSG_Parameter_Data_Get_Type_Name(self)
+    def Get_Constraint(self): return _saga_api.CSG_Parameter_Data_Get_Constraint(self)
+    def is_Valid(self): return _saga_api.CSG_Parameter_Data_is_Valid(self)
+    def Assign(self, *args): return _saga_api.CSG_Parameter_Data_Assign(self, *args)
+    def Serialize(self, *args): return _saga_api.CSG_Parameter_Data_Serialize(self, *args)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Data_Set_Value(self, *args)
+    def asInt(self): return _saga_api.CSG_Parameter_Data_asInt(self)
+    def asDouble(self): return _saga_api.CSG_Parameter_Data_asDouble(self)
+    def asPointer(self): return _saga_api.CSG_Parameter_Data_asPointer(self)
+    def asString(self): return _saga_api.CSG_Parameter_Data_asString(self)
+    def Get_Default(self): return _saga_api.CSG_Parameter_Data_Get_Default(self)
+    def Set_Default(self, *args): return _saga_api.CSG_Parameter_Data_Set_Default(self, *args)
+CSG_Parameter_Data_swigregister = _saga_api.CSG_Parameter_Data_swigregister
+CSG_Parameter_Data_swigregister(CSG_Parameter_Data)
+
+def SG_Create_PointCloud(*args):
+  return _saga_api.SG_Create_PointCloud(*args)
+SG_Create_PointCloud = _saga_api.SG_Create_PointCloud
+
+class CSG_Parameter_Node(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Node, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Node, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Node(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Node
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Node_Get_Type(self)
+CSG_Parameter_Node_swigregister = _saga_api.CSG_Parameter_Node_swigregister
+CSG_Parameter_Node_swigregister(CSG_Parameter_Node)
+
+class CSG_Parameter_Bool(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Bool, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Bool, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Bool(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Bool
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Bool_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Bool_Set_Value(self, *args)
+    def asInt(self): return _saga_api.CSG_Parameter_Bool_asInt(self)
+    def asString(self): return _saga_api.CSG_Parameter_Bool_asString(self)
+CSG_Parameter_Bool_swigregister = _saga_api.CSG_Parameter_Bool_swigregister
+CSG_Parameter_Bool_swigregister(CSG_Parameter_Bool)
+
+class CSG_Parameter_Value(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Value, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Value, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Value
+    __del__ = lambda self : None;
+    def Set_Range(self, *args): return _saga_api.CSG_Parameter_Value_Set_Range(self, *args)
+    def Set_Minimum(self, *args): return _saga_api.CSG_Parameter_Value_Set_Minimum(self, *args)
+    def Get_Minimum(self): return _saga_api.CSG_Parameter_Value_Get_Minimum(self)
+    def has_Minimum(self): return _saga_api.CSG_Parameter_Value_has_Minimum(self)
+    def Set_Maximum(self, *args): return _saga_api.CSG_Parameter_Value_Set_Maximum(self, *args)
+    def Get_Maximum(self): return _saga_api.CSG_Parameter_Value_Get_Maximum(self)
+    def has_Maximum(self): return _saga_api.CSG_Parameter_Value_has_Maximum(self)
+CSG_Parameter_Value_swigregister = _saga_api.CSG_Parameter_Value_swigregister
+CSG_Parameter_Value_swigregister(CSG_Parameter_Value)
+
+class CSG_Parameter_Int(CSG_Parameter_Value):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Value]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Int, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Value]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Int, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Int(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Int
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Int_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Int_Set_Value(self, *args)
+    def asInt(self): return _saga_api.CSG_Parameter_Int_asInt(self)
+    def asDouble(self): return _saga_api.CSG_Parameter_Int_asDouble(self)
+    def asString(self): return _saga_api.CSG_Parameter_Int_asString(self)
+CSG_Parameter_Int_swigregister = _saga_api.CSG_Parameter_Int_swigregister
+CSG_Parameter_Int_swigregister(CSG_Parameter_Int)
+
+class CSG_Parameter_Double(CSG_Parameter_Value):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Value]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Double, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Value]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Double, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Double(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Double
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Double_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Double_Set_Value(self, *args)
+    def asInt(self): return _saga_api.CSG_Parameter_Double_asInt(self)
+    def asDouble(self): return _saga_api.CSG_Parameter_Double_asDouble(self)
+    def asString(self): return _saga_api.CSG_Parameter_Double_asString(self)
+CSG_Parameter_Double_swigregister = _saga_api.CSG_Parameter_Double_swigregister
+CSG_Parameter_Double_swigregister(CSG_Parameter_Double)
+
+class CSG_Parameter_Degree(CSG_Parameter_Double):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Double]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Degree, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Double]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Degree, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Degree(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Degree
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Degree_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Degree_Set_Value(self, *args)
+    def asString(self): return _saga_api.CSG_Parameter_Degree_asString(self)
+CSG_Parameter_Degree_swigregister = _saga_api.CSG_Parameter_Degree_swigregister
+CSG_Parameter_Degree_swigregister(CSG_Parameter_Degree)
+
+class CSG_Parameter_Range(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Range, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Range, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Range(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Range
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Range_Get_Type(self)
+    def asString(self): return _saga_api.CSG_Parameter_Range_asString(self)
+    def Set_Range(self, *args): return _saga_api.CSG_Parameter_Range_Set_Range(self, *args)
+    def Set_LoVal(self, *args): return _saga_api.CSG_Parameter_Range_Set_LoVal(self, *args)
+    def Get_LoVal(self): return _saga_api.CSG_Parameter_Range_Get_LoVal(self)
+    def Set_HiVal(self, *args): return _saga_api.CSG_Parameter_Range_Set_HiVal(self, *args)
+    def Get_HiVal(self): return _saga_api.CSG_Parameter_Range_Get_HiVal(self)
+    def Get_LoParm(self): return _saga_api.CSG_Parameter_Range_Get_LoParm(self)
+    def Get_HiParm(self): return _saga_api.CSG_Parameter_Range_Get_HiParm(self)
+CSG_Parameter_Range_swigregister = _saga_api.CSG_Parameter_Range_swigregister
+CSG_Parameter_Range_swigregister(CSG_Parameter_Range)
+
+class CSG_Parameter_Choice(CSG_Parameter_Int):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Int]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Choice, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Int]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Choice, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Choice(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Choice
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Choice_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Choice_Set_Value(self, *args)
+    def asString(self): return _saga_api.CSG_Parameter_Choice_asString(self)
+    def Set_Items(self, *args): return _saga_api.CSG_Parameter_Choice_Set_Items(self, *args)
+    def Get_Item(self, *args): return _saga_api.CSG_Parameter_Choice_Get_Item(self, *args)
+    def Get_Data(self, *args): return _saga_api.CSG_Parameter_Choice_Get_Data(self, *args)
+    def Get_Count(self): return _saga_api.CSG_Parameter_Choice_Get_Count(self)
+CSG_Parameter_Choice_swigregister = _saga_api.CSG_Parameter_Choice_swigregister
+CSG_Parameter_Choice_swigregister(CSG_Parameter_Choice)
+
+class CSG_Parameter_String(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_String, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_String, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_String(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_String
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_String_Get_Type(self)
+    def asString(self): return _saga_api.CSG_Parameter_String_asString(self)
+    def is_Valid(self): return _saga_api.CSG_Parameter_String_is_Valid(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_String_Set_Value(self, *args)
+    def Set_Password(self, *args): return _saga_api.CSG_Parameter_String_Set_Password(self, *args)
+    def is_Password(self): return _saga_api.CSG_Parameter_String_is_Password(self)
+CSG_Parameter_String_swigregister = _saga_api.CSG_Parameter_String_swigregister
+CSG_Parameter_String_swigregister(CSG_Parameter_String)
+
+class CSG_Parameter_Text(CSG_Parameter_String):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_String]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Text, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_String]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Text, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Text(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Text
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Text_Get_Type(self)
+CSG_Parameter_Text_swigregister = _saga_api.CSG_Parameter_Text_swigregister
+CSG_Parameter_Text_swigregister(CSG_Parameter_Text)
+
+class CSG_Parameter_File_Name(CSG_Parameter_String):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_String]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_File_Name, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_String]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_File_Name, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_File_Name(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_File_Name
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_File_Name_Get_Type(self)
+    def Set_Filter(self, *args): return _saga_api.CSG_Parameter_File_Name_Set_Filter(self, *args)
+    def Get_Filter(self): return _saga_api.CSG_Parameter_File_Name_Get_Filter(self)
+    def Set_Flag_Save(self, *args): return _saga_api.CSG_Parameter_File_Name_Set_Flag_Save(self, *args)
+    def is_Save(self): return _saga_api.CSG_Parameter_File_Name_is_Save(self)
+    def Set_Flag_Multiple(self, *args): return _saga_api.CSG_Parameter_File_Name_Set_Flag_Multiple(self, *args)
+    def is_Multiple(self): return _saga_api.CSG_Parameter_File_Name_is_Multiple(self)
+    def Set_Flag_Directory(self, *args): return _saga_api.CSG_Parameter_File_Name_Set_Flag_Directory(self, *args)
+    def is_Directory(self): return _saga_api.CSG_Parameter_File_Name_is_Directory(self)
+    def Get_FilePaths(self, *args): return _saga_api.CSG_Parameter_File_Name_Get_FilePaths(self, *args)
+CSG_Parameter_File_Name_swigregister = _saga_api.CSG_Parameter_File_Name_swigregister
+CSG_Parameter_File_Name_swigregister(CSG_Parameter_File_Name)
+
+class CSG_Parameter_Font(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Font, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Font, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Font(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Font
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Font_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Font_Set_Value(self, *args)
+    def asInt(self): return _saga_api.CSG_Parameter_Font_asInt(self)
+    def asPointer(self): return _saga_api.CSG_Parameter_Font_asPointer(self)
+    def asString(self): return _saga_api.CSG_Parameter_Font_asString(self)
+CSG_Parameter_Font_swigregister = _saga_api.CSG_Parameter_Font_swigregister
+CSG_Parameter_Font_swigregister(CSG_Parameter_Font)
+
+class CSG_Parameter_Color(CSG_Parameter_Int):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Int]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Color, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Int]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Color, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Color(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Color
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Color_Get_Type(self)
+CSG_Parameter_Color_swigregister = _saga_api.CSG_Parameter_Color_swigregister
+CSG_Parameter_Color_swigregister(CSG_Parameter_Color)
+
+class CSG_Parameter_Colors(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Colors, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Colors, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Colors(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Colors
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Colors_Get_Type(self)
+    def asInt(self): return _saga_api.CSG_Parameter_Colors_asInt(self)
+    def asPointer(self): return _saga_api.CSG_Parameter_Colors_asPointer(self)
+    def asString(self): return _saga_api.CSG_Parameter_Colors_asString(self)
+CSG_Parameter_Colors_swigregister = _saga_api.CSG_Parameter_Colors_swigregister
+CSG_Parameter_Colors_swigregister(CSG_Parameter_Colors)
+
+class CSG_Parameter_Fixed_Table(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Fixed_Table, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Fixed_Table, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Fixed_Table(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Fixed_Table
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Fixed_Table_Get_Type(self)
+    def asPointer(self): return _saga_api.CSG_Parameter_Fixed_Table_asPointer(self)
+    def asString(self): return _saga_api.CSG_Parameter_Fixed_Table_asString(self)
+CSG_Parameter_Fixed_Table_swigregister = _saga_api.CSG_Parameter_Fixed_Table_swigregister
+CSG_Parameter_Fixed_Table_swigregister(CSG_Parameter_Fixed_Table)
+
+class CSG_Parameter_Grid_System(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Grid_System, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Grid_System, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Grid_System(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Grid_System
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Grid_System_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Grid_System_Set_Value(self, *args)
+    def asPointer(self): return _saga_api.CSG_Parameter_Grid_System_asPointer(self)
+    def asString(self): return _saga_api.CSG_Parameter_Grid_System_asString(self)
+CSG_Parameter_Grid_System_swigregister = _saga_api.CSG_Parameter_Grid_System_swigregister
+CSG_Parameter_Grid_System_swigregister(CSG_Parameter_Grid_System)
+
+class CSG_Parameter_Table_Field(CSG_Parameter_Int):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Int]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Table_Field, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Int]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Table_Field, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Table_Field(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Table_Field
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Table_Field_Get_Type(self)
+    def asString(self): return _saga_api.CSG_Parameter_Table_Field_asString(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Table_Field_Set_Value(self, *args)
+    def Get_Table(self): return _saga_api.CSG_Parameter_Table_Field_Get_Table(self)
+CSG_Parameter_Table_Field_swigregister = _saga_api.CSG_Parameter_Table_Field_swigregister
+CSG_Parameter_Table_Field_swigregister(CSG_Parameter_Table_Field)
+
+class CSG_Parameter_Data_Object(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Data_Object, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Data_Object, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Data_Object
+    __del__ = lambda self : None;
+    def is_Valid(self): return _saga_api.CSG_Parameter_Data_Object_is_Valid(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Data_Object_Set_Value(self, *args)
+    def asPointer(self): return _saga_api.CSG_Parameter_Data_Object_asPointer(self)
+    def asString(self): return _saga_api.CSG_Parameter_Data_Object_asString(self)
+CSG_Parameter_Data_Object_swigregister = _saga_api.CSG_Parameter_Data_Object_swigregister
+CSG_Parameter_Data_Object_swigregister(CSG_Parameter_Data_Object)
+
+class CSG_Parameter_Data_Object_Output(CSG_Parameter_Data_Object):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Data_Object_Output, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Data_Object_Output, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Data_Object_Output(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Data_Object_Output
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Data_Object_Output_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Data_Object_Output_Set_Value(self, *args)
+    def Set_DataObject_Type(self, *args): return _saga_api.CSG_Parameter_Data_Object_Output_Set_DataObject_Type(self, *args)
+    def Get_DataObject_Type(self): return _saga_api.CSG_Parameter_Data_Object_Output_Get_DataObject_Type(self)
+CSG_Parameter_Data_Object_Output_swigregister = _saga_api.CSG_Parameter_Data_Object_Output_swigregister
+CSG_Parameter_Data_Object_Output_swigregister(CSG_Parameter_Data_Object_Output)
+
+class CSG_Parameter_Grid(CSG_Parameter_Data_Object):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Grid, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Grid, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Grid(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Grid
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Grid_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Grid_Set_Value(self, *args)
+    def Set_Preferred_Type(self, *args): return _saga_api.CSG_Parameter_Grid_Set_Preferred_Type(self, *args)
+    def Get_Preferred_Type(self): return _saga_api.CSG_Parameter_Grid_Get_Preferred_Type(self)
+    def Get_System(self): return _saga_api.CSG_Parameter_Grid_Get_System(self)
+CSG_Parameter_Grid_swigregister = _saga_api.CSG_Parameter_Grid_swigregister
+CSG_Parameter_Grid_swigregister(CSG_Parameter_Grid)
+
+class CSG_Parameter_Table(CSG_Parameter_Data_Object):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Table, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Table, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Table(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Table
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Table_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Table_Set_Value(self, *args)
+CSG_Parameter_Table_swigregister = _saga_api.CSG_Parameter_Table_swigregister
+CSG_Parameter_Table_swigregister(CSG_Parameter_Table)
+
+class CSG_Parameter_Shapes(CSG_Parameter_Data_Object):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Shapes, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Shapes, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Shapes(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Shapes
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Shapes_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Shapes_Set_Value(self, *args)
+    def Set_Shape_Type(self, *args): return _saga_api.CSG_Parameter_Shapes_Set_Shape_Type(self, *args)
+    def Get_Shape_Type(self): return _saga_api.CSG_Parameter_Shapes_Get_Shape_Type(self)
+CSG_Parameter_Shapes_swigregister = _saga_api.CSG_Parameter_Shapes_swigregister
+CSG_Parameter_Shapes_swigregister(CSG_Parameter_Shapes)
+
+class CSG_Parameter_TIN(CSG_Parameter_Data_Object):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_TIN, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_TIN, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_TIN(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_TIN
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_TIN_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_TIN_Set_Value(self, *args)
+CSG_Parameter_TIN_swigregister = _saga_api.CSG_Parameter_TIN_swigregister
+CSG_Parameter_TIN_swigregister(CSG_Parameter_TIN)
+
+class CSG_Parameter_PointCloud(CSG_Parameter_Data_Object):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_PointCloud, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data_Object]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_PointCloud, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_PointCloud(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_PointCloud
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_PointCloud_Get_Type(self)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_PointCloud_Set_Value(self, *args)
+CSG_Parameter_PointCloud_swigregister = _saga_api.CSG_Parameter_PointCloud_swigregister
+CSG_Parameter_PointCloud_swigregister(CSG_Parameter_PointCloud)
+
+class CSG_Parameter_List(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_List, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_List, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_List
+    __del__ = lambda self : None;
+    def asString(self): return _saga_api.CSG_Parameter_List_asString(self)
+    def asInt(self): return _saga_api.CSG_Parameter_List_asInt(self)
+    def asPointer(self): return _saga_api.CSG_Parameter_List_asPointer(self)
+    def Add_Item(self, *args): return _saga_api.CSG_Parameter_List_Add_Item(self, *args)
+    def Del_Item(self, *args): return _saga_api.CSG_Parameter_List_Del_Item(self, *args)
+    def Del_Items(self): return _saga_api.CSG_Parameter_List_Del_Items(self)
+    def Get_Count(self): return _saga_api.CSG_Parameter_List_Get_Count(self)
+    def asDataObject(self, *args): return _saga_api.CSG_Parameter_List_asDataObject(self, *args)
+CSG_Parameter_List_swigregister = _saga_api.CSG_Parameter_List_swigregister
+CSG_Parameter_List_swigregister(CSG_Parameter_List)
+
+class CSG_Parameter_Grid_List(CSG_Parameter_List):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_List]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Grid_List, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_List]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Grid_List, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Grid_List(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Grid_List
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Grid_List_Get_Type(self)
+    def Get_System(self): return _saga_api.CSG_Parameter_Grid_List_Get_System(self)
+    def asGrid(self, *args): return _saga_api.CSG_Parameter_Grid_List_asGrid(self, *args)
+CSG_Parameter_Grid_List_swigregister = _saga_api.CSG_Parameter_Grid_List_swigregister
+CSG_Parameter_Grid_List_swigregister(CSG_Parameter_Grid_List)
+
+class CSG_Parameter_Table_List(CSG_Parameter_List):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_List]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Table_List, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_List]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Table_List, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Table_List(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Table_List
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Table_List_Get_Type(self)
+    def asTable(self, *args): return _saga_api.CSG_Parameter_Table_List_asTable(self, *args)
+CSG_Parameter_Table_List_swigregister = _saga_api.CSG_Parameter_Table_List_swigregister
+CSG_Parameter_Table_List_swigregister(CSG_Parameter_Table_List)
+
+class CSG_Parameter_Shapes_List(CSG_Parameter_List):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_List]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Shapes_List, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_List]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Shapes_List, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Shapes_List(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Shapes_List
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Shapes_List_Get_Type(self)
+    def Set_Shape_Type(self, *args): return _saga_api.CSG_Parameter_Shapes_List_Set_Shape_Type(self, *args)
+    def Get_Shape_Type(self): return _saga_api.CSG_Parameter_Shapes_List_Get_Shape_Type(self)
+    def asShapes(self, *args): return _saga_api.CSG_Parameter_Shapes_List_asShapes(self, *args)
+CSG_Parameter_Shapes_List_swigregister = _saga_api.CSG_Parameter_Shapes_List_swigregister
+CSG_Parameter_Shapes_List_swigregister(CSG_Parameter_Shapes_List)
+
+class CSG_Parameter_TIN_List(CSG_Parameter_List):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_List]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_TIN_List, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_List]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_TIN_List, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_TIN_List(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_TIN_List
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_TIN_List_Get_Type(self)
+    def asTIN(self, *args): return _saga_api.CSG_Parameter_TIN_List_asTIN(self, *args)
+CSG_Parameter_TIN_List_swigregister = _saga_api.CSG_Parameter_TIN_List_swigregister
+CSG_Parameter_TIN_List_swigregister(CSG_Parameter_TIN_List)
+
+class CSG_Parameter_PointCloud_List(CSG_Parameter_List):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_List]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_PointCloud_List, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_List]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_PointCloud_List, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_PointCloud_List(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_PointCloud_List
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_PointCloud_List_Get_Type(self)
+    def asPointCloud(self, *args): return _saga_api.CSG_Parameter_PointCloud_List_asPointCloud(self, *args)
+CSG_Parameter_PointCloud_List_swigregister = _saga_api.CSG_Parameter_PointCloud_List_swigregister
+CSG_Parameter_PointCloud_List_swigregister(CSG_Parameter_PointCloud_List)
+
+class CSG_Parameter_Parameters(CSG_Parameter_Data):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter_Parameters, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Parameter_Data]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter_Parameters, name)
+    __repr__ = _swig_repr
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameter_Parameters(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Parameter_Parameters
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Parameter_Parameters_Get_Type(self)
+    def asString(self): return _saga_api.CSG_Parameter_Parameters_asString(self)
+    def asPointer(self): return _saga_api.CSG_Parameter_Parameters_asPointer(self)
+CSG_Parameter_Parameters_swigregister = _saga_api.CSG_Parameter_Parameters_swigregister
+CSG_Parameter_Parameters_swigregister(CSG_Parameter_Parameters)
+
+class CSG_Parameters_Grid_Target(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameters_Grid_Target, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameters_Grid_Target, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Parameters_Grid_Target()
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self): return _saga_api.CSG_Parameters_Grid_Target_Create(self)
+    def Add_Parameters_User(self, *args): return _saga_api.CSG_Parameters_Grid_Target_Add_Parameters_User(self, *args)
+    def Add_Parameters_Grid(self, *args): return _saga_api.CSG_Parameters_Grid_Target_Add_Parameters_Grid(self, *args)
+    def Add_Parameters_System(self, *args): return _saga_api.CSG_Parameters_Grid_Target_Add_Parameters_System(self, *args)
+    def Add_Grid_Parameter(self, *args): return _saga_api.CSG_Parameters_Grid_Target_Add_Grid_Parameter(self, *args)
+    def On_User_Changed(self, *args): return _saga_api.CSG_Parameters_Grid_Target_On_User_Changed(self, *args)
+    def Init_User(self, *args): return _saga_api.CSG_Parameters_Grid_Target_Init_User(self, *args)
+    def Get_User(self, *args): return _saga_api.CSG_Parameters_Grid_Target_Get_User(self, *args)
+    def Get_Grid(self, *args): return _saga_api.CSG_Parameters_Grid_Target_Get_Grid(self, *args)
+    def Get_System_User(self, *args): return _saga_api.CSG_Parameters_Grid_Target_Get_System_User(self, *args)
+    def Get_System(self, *args): return _saga_api.CSG_Parameters_Grid_Target_Get_System(self, *args)
+    __swig_destroy__ = _saga_api.delete_CSG_Parameters_Grid_Target
+    __del__ = lambda self : None;
+CSG_Parameters_Grid_Target_swigregister = _saga_api.CSG_Parameters_Grid_Target_swigregister
+CSG_Parameters_Grid_Target_swigregister(CSG_Parameters_Grid_Target)
+
+class CSG_Parameter(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameter, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameter, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
+    __repr__ = _swig_repr
+    def Get_Owner(self): return _saga_api.CSG_Parameter_Get_Owner(self)
+    def Get_Parent(self): return _saga_api.CSG_Parameter_Get_Parent(self)
+    def Get_Type(self): return _saga_api.CSG_Parameter_Get_Type(self)
+    def Get_Type_Identifier(self): return _saga_api.CSG_Parameter_Get_Type_Identifier(self)
+    def Get_Type_Name(self): return _saga_api.CSG_Parameter_Get_Type_Name(self)
+    def Get_Data(self): return _saga_api.CSG_Parameter_Get_Data(self)
+    def Get_Identifier(self): return _saga_api.CSG_Parameter_Get_Identifier(self)
+    def Get_Name(self): return _saga_api.CSG_Parameter_Get_Name(self)
+    def Get_Description(self, *args): return _saga_api.CSG_Parameter_Get_Description(self, *args)
+    def Set_Enabled(self, *args): return _saga_api.CSG_Parameter_Set_Enabled(self, *args)
+    def is_Enabled(self): return _saga_api.CSG_Parameter_is_Enabled(self)
+    def ignore_Projection(self): return _saga_api.CSG_Parameter_ignore_Projection(self)
+    def is_Valid(self): return _saga_api.CSG_Parameter_is_Valid(self)
+    def is_Input(self): return _saga_api.CSG_Parameter_is_Input(self)
+    def is_Output(self): return _saga_api.CSG_Parameter_is_Output(self)
+    def is_Optional(self): return _saga_api.CSG_Parameter_is_Optional(self)
+    def is_Information(self): return _saga_api.CSG_Parameter_is_Information(self)
+    def is_Option(self): return _saga_api.CSG_Parameter_is_Option(self)
+    def is_DataObject(self): return _saga_api.CSG_Parameter_is_DataObject(self)
+    def is_DataObject_List(self): return _saga_api.CSG_Parameter_is_DataObject_List(self)
+    def is_Parameters(self): return _saga_api.CSG_Parameter_is_Parameters(self)
+    def is_Serializable(self): return _saga_api.CSG_Parameter_is_Serializable(self)
+    def Get_Children_Count(self): return _saga_api.CSG_Parameter_Get_Children_Count(self)
+    def Get_Child(self, *args): return _saga_api.CSG_Parameter_Get_Child(self, *args)
+    def Set_Value(self, *args): return _saga_api.CSG_Parameter_Set_Value(self, *args)
+    def Set_Default(self, *args): return _saga_api.CSG_Parameter_Set_Default(self, *args)
+    def has_Changed(self): return _saga_api.CSG_Parameter_has_Changed(self)
+    def asBool(self): return _saga_api.CSG_Parameter_asBool(self)
+    def asInt(self): return _saga_api.CSG_Parameter_asInt(self)
+    def asColor(self): return _saga_api.CSG_Parameter_asColor(self)
+    def asDouble(self): return _saga_api.CSG_Parameter_asDouble(self)
+    def asPointer(self): return _saga_api.CSG_Parameter_asPointer(self)
+    def asString(self): return _saga_api.CSG_Parameter_asString(self)
+    def asFont(self): return _saga_api.CSG_Parameter_asFont(self)
+    def asColors(self): return _saga_api.CSG_Parameter_asColors(self)
+    def asGrid_System(self): return _saga_api.CSG_Parameter_asGrid_System(self)
+    def asDataObject(self): return _saga_api.CSG_Parameter_asDataObject(self)
+    def asGrid(self): return _saga_api.CSG_Parameter_asGrid(self)
+    def asTable(self): return _saga_api.CSG_Parameter_asTable(self)
+    def asShapes(self): return _saga_api.CSG_Parameter_asShapes(self)
+    def asTIN(self): return _saga_api.CSG_Parameter_asTIN(self)
+    def asPointCloud(self): return _saga_api.CSG_Parameter_asPointCloud(self)
+    def asValue(self): return _saga_api.CSG_Parameter_asValue(self)
+    def asChoice(self): return _saga_api.CSG_Parameter_asChoice(self)
+    def asRange(self): return _saga_api.CSG_Parameter_asRange(self)
+    def asFilePath(self): return _saga_api.CSG_Parameter_asFilePath(self)
+    def asList(self): return _saga_api.CSG_Parameter_asList(self)
+    def asGridList(self): return _saga_api.CSG_Parameter_asGridList(self)
+    def asTableList(self): return _saga_api.CSG_Parameter_asTableList(self)
+    def asShapesList(self): return _saga_api.CSG_Parameter_asShapesList(self)
+    def asTINList(self): return _saga_api.CSG_Parameter_asTINList(self)
+    def asPointCloudList(self): return _saga_api.CSG_Parameter_asPointCloudList(self)
+    def asParameters(self): return _saga_api.CSG_Parameter_asParameters(self)
+    def Assign(self, *args): return _saga_api.CSG_Parameter_Assign(self, *args)
+    def Serialize(self, *args): return _saga_api.CSG_Parameter_Serialize(self, *args)
+CSG_Parameter_swigregister = _saga_api.CSG_Parameter_swigregister
+CSG_Parameter_swigregister(CSG_Parameter)
+
+class CSG_Parameters(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Parameters, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Parameters, name)
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Parameters
+    __del__ = lambda self : None;
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Parameters(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Parameters_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_Parameters_Destroy(self)
+    def Get_Owner(self): return _saga_api.CSG_Parameters_Get_Owner(self)
+    def Get_Count(self): return _saga_api.CSG_Parameters_Get_Count(self)
+    def Set_Identifier(self, *args): return _saga_api.CSG_Parameters_Set_Identifier(self, *args)
+    def Get_Identifier(self): return _saga_api.CSG_Parameters_Get_Identifier(self)
+    def Set_Name(self, *args): return _saga_api.CSG_Parameters_Set_Name(self, *args)
+    def Get_Name(self): return _saga_api.CSG_Parameters_Get_Name(self)
+    def Set_Description(self, *args): return _saga_api.CSG_Parameters_Set_Description(self, *args)
+    def Get_Description(self): return _saga_api.CSG_Parameters_Get_Description(self)
+    def Set_Translation(self, *args): return _saga_api.CSG_Parameters_Set_Translation(self, *args)
+    def Set_Enabled(self, *args): return _saga_api.CSG_Parameters_Set_Enabled(self, *args)
+    def Set_Callback_On_Parameter_Changed(self, *args): return _saga_api.CSG_Parameters_Set_Callback_On_Parameter_Changed(self, *args)
+    def Set_Callback(self, bActive = True): return _saga_api.CSG_Parameters_Set_Callback(self, bActive)
+    def Del_Parameters(self): return _saga_api.CSG_Parameters_Del_Parameters(self)
+    def Set_Parameter(self, *args): return _saga_api.CSG_Parameters_Set_Parameter(self, *args)
+    def Assign(self, *args): return _saga_api.CSG_Parameters_Assign(self, *args)
+    def Assign_Values(self, *args): return _saga_api.CSG_Parameters_Assign_Values(self, *args)
+    def Serialize(self, *args): return _saga_api.CSG_Parameters_Serialize(self, *args)
+    def Serialize_Compatibility(self, *args): return _saga_api.CSG_Parameters_Serialize_Compatibility(self, *args)
+    def DataObjects_Check(self, bSilent = False): return _saga_api.CSG_Parameters_DataObjects_Check(self, bSilent)
+    def Get_String(self, *args): return _saga_api.CSG_Parameters_Get_String(self, *args)
+    def Msg_String(self, *args): return _saga_api.CSG_Parameters_Msg_String(self, *args)
+    def Set_History(self, *args): return _saga_api.CSG_Parameters_Set_History(self, *args)
+    def Get_Grid_System(self): return _saga_api.CSG_Parameters_Get_Grid_System(self)
+    def is_Managed(self): return _saga_api.CSG_Parameters_is_Managed(self)
+    def Get_Parameter(self, *args): return _saga_api.CSG_Parameters_Get_Parameter(self, *args)
+    def __call__(self, *args): return _saga_api.CSG_Parameters___call__(self, *args)
+    def Del_Parameter(self, *args): return _saga_api.CSG_Parameters_Del_Parameter(self, *args)
+    def Add_Node(self, *args): return _saga_api.CSG_Parameters_Add_Node(self, *args)
+    def Add_Value(self, *args): return _saga_api.CSG_Parameters_Add_Value(self, *args)
+    def Add_Info_Value(self, *args): return _saga_api.CSG_Parameters_Add_Info_Value(self, *args)
+    def Add_Range(self, *args): return _saga_api.CSG_Parameters_Add_Range(self, *args)
+    def Add_Info_Range(self, *args): return _saga_api.CSG_Parameters_Add_Info_Range(self, *args)
+    def Add_Choice(self, *args): return _saga_api.CSG_Parameters_Add_Choice(self, *args)
+    def Add_String(self, *args): return _saga_api.CSG_Parameters_Add_String(self, *args)
+    def Add_Info_String(self, *args): return _saga_api.CSG_Parameters_Add_Info_String(self, *args)
+    def Add_FilePath(self, *args): return _saga_api.CSG_Parameters_Add_FilePath(self, *args)
+    def Add_Font(self, *args): return _saga_api.CSG_Parameters_Add_Font(self, *args)
+    def Add_Colors(self, *args): return _saga_api.CSG_Parameters_Add_Colors(self, *args)
+    def Add_FixedTable(self, *args): return _saga_api.CSG_Parameters_Add_FixedTable(self, *args)
+    def Add_Grid_System(self, *args): return _saga_api.CSG_Parameters_Add_Grid_System(self, *args)
+    def Add_Grid(self, *args): return _saga_api.CSG_Parameters_Add_Grid(self, *args)
+    def Add_Grid_Output(self, *args): return _saga_api.CSG_Parameters_Add_Grid_Output(self, *args)
+    def Add_Grid_List(self, *args): return _saga_api.CSG_Parameters_Add_Grid_List(self, *args)
+    def Add_Table_Field(self, *args): return _saga_api.CSG_Parameters_Add_Table_Field(self, *args)
+    def Add_Table(self, *args): return _saga_api.CSG_Parameters_Add_Table(self, *args)
+    def Add_Table_Output(self, *args): return _saga_api.CSG_Parameters_Add_Table_Output(self, *args)
+    def Add_Table_List(self, *args): return _saga_api.CSG_Parameters_Add_Table_List(self, *args)
+    def Add_Shapes(self, *args): return _saga_api.CSG_Parameters_Add_Shapes(self, *args)
+    def Add_Shapes_Output(self, *args): return _saga_api.CSG_Parameters_Add_Shapes_Output(self, *args)
+    def Add_Shapes_List(self, *args): return _saga_api.CSG_Parameters_Add_Shapes_List(self, *args)
+    def Add_TIN(self, *args): return _saga_api.CSG_Parameters_Add_TIN(self, *args)
+    def Add_TIN_Output(self, *args): return _saga_api.CSG_Parameters_Add_TIN_Output(self, *args)
+    def Add_TIN_List(self, *args): return _saga_api.CSG_Parameters_Add_TIN_List(self, *args)
+    def Add_PointCloud(self, *args): return _saga_api.CSG_Parameters_Add_PointCloud(self, *args)
+    def Add_PointCloud_Output(self, *args): return _saga_api.CSG_Parameters_Add_PointCloud_Output(self, *args)
+    def Add_PointCloud_List(self, *args): return _saga_api.CSG_Parameters_Add_PointCloud_List(self, *args)
+    def Add_Parameters(self, *args): return _saga_api.CSG_Parameters_Add_Parameters(self, *args)
+CSG_Parameters_swigregister = _saga_api.CSG_Parameters_swigregister
+CSG_Parameters_swigregister(CSG_Parameters)
+
+MODULE_TYPE_Base = _saga_api.MODULE_TYPE_Base
+MODULE_TYPE_Interactive = _saga_api.MODULE_TYPE_Interactive
+MODULE_TYPE_Grid = _saga_api.MODULE_TYPE_Grid
+MODULE_TYPE_Grid_Interactive = _saga_api.MODULE_TYPE_Grid_Interactive
+MODULE_ERROR_Unknown = _saga_api.MODULE_ERROR_Unknown
+MODULE_ERROR_Calculation = _saga_api.MODULE_ERROR_Calculation
+class CSG_Module(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Module, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Module, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Module
+    __del__ = lambda self : None;
+    def Destroy(self): return _saga_api.CSG_Module_Destroy(self)
+    def Get_Type(self): return _saga_api.CSG_Module_Get_Type(self)
+    def Get_Name(self): return _saga_api.CSG_Module_Get_Name(self)
+    def Get_Description(self): return _saga_api.CSG_Module_Get_Description(self)
+    def Get_Author(self): return _saga_api.CSG_Module_Get_Author(self)
+    def Get_Icon(self): return _saga_api.CSG_Module_Get_Icon(self)
+    def Get_MenuPath(self): return _saga_api.CSG_Module_Get_MenuPath(self)
+    def Get_Parameters_Count(self): return _saga_api.CSG_Module_Get_Parameters_Count(self)
+    def Get_Parameters(self, *args): return _saga_api.CSG_Module_Get_Parameters(self, *args)
+    def Garbage_Get_Count(self): return _saga_api.CSG_Module_Garbage_Get_Count(self)
+    def Garbage_Get_Item(self, *args): return _saga_api.CSG_Module_Garbage_Get_Item(self, *args)
+    def Garbage_Del_Item(self, *args): return _saga_api.CSG_Module_Garbage_Del_Item(self, *args)
+    def Garbage_Clear(self): return _saga_api.CSG_Module_Garbage_Clear(self)
+    def do_Sync_Projections(self): return _saga_api.CSG_Module_do_Sync_Projections(self)
+    def is_Interactive(self): return _saga_api.CSG_Module_is_Interactive(self)
+    def is_Progress(self): return _saga_api.CSG_Module_is_Progress(self)
+    def is_Executing(self): return _saga_api.CSG_Module_is_Executing(self)
+    def Set_Translation(self, *args): return _saga_api.CSG_Module_Set_Translation(self, *args)
+    def Set_Managed(self, bOn = True): return _saga_api.CSG_Module_Set_Managed(self, bOn)
+    def Set_Show_Progress(self, bOn = True): return _saga_api.CSG_Module_Set_Show_Progress(self, bOn)
+    def On_Before_Execution(self): return _saga_api.CSG_Module_On_Before_Execution(self)
+    def On_After_Execution(self): return _saga_api.CSG_Module_On_After_Execution(self)
+    def Execute(self): return _saga_api.CSG_Module_Execute(self)
+CSG_Module_swigregister = _saga_api.CSG_Module_swigregister
+CSG_Module_swigregister(CSG_Module)
+
+class CSG_Module_Grid(CSG_Module):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Module]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Module_Grid, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Module]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Module_Grid, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Module_Grid
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Module_Grid_Get_Type(self)
+    def Get_System(self): return _saga_api.CSG_Module_Grid_Get_System(self)
+CSG_Module_Grid_swigregister = _saga_api.CSG_Module_Grid_swigregister
+CSG_Module_Grid_swigregister(CSG_Module_Grid)
+
+MODULE_INTERACTIVE_UNDEFINED = _saga_api.MODULE_INTERACTIVE_UNDEFINED
+MODULE_INTERACTIVE_LDOWN = _saga_api.MODULE_INTERACTIVE_LDOWN
+MODULE_INTERACTIVE_LUP = _saga_api.MODULE_INTERACTIVE_LUP
+MODULE_INTERACTIVE_LDCLICK = _saga_api.MODULE_INTERACTIVE_LDCLICK
+MODULE_INTERACTIVE_MDOWN = _saga_api.MODULE_INTERACTIVE_MDOWN
+MODULE_INTERACTIVE_MUP = _saga_api.MODULE_INTERACTIVE_MUP
+MODULE_INTERACTIVE_MDCLICK = _saga_api.MODULE_INTERACTIVE_MDCLICK
+MODULE_INTERACTIVE_RDOWN = _saga_api.MODULE_INTERACTIVE_RDOWN
+MODULE_INTERACTIVE_RUP = _saga_api.MODULE_INTERACTIVE_RUP
+MODULE_INTERACTIVE_RDCLICK = _saga_api.MODULE_INTERACTIVE_RDCLICK
+MODULE_INTERACTIVE_MOVE = _saga_api.MODULE_INTERACTIVE_MOVE
+MODULE_INTERACTIVE_MOVE_LDOWN = _saga_api.MODULE_INTERACTIVE_MOVE_LDOWN
+MODULE_INTERACTIVE_MOVE_MDOWN = _saga_api.MODULE_INTERACTIVE_MOVE_MDOWN
+MODULE_INTERACTIVE_MOVE_RDOWN = _saga_api.MODULE_INTERACTIVE_MOVE_RDOWN
+MODULE_INTERACTIVE_DRAG_NONE = _saga_api.MODULE_INTERACTIVE_DRAG_NONE
+MODULE_INTERACTIVE_DRAG_LINE = _saga_api.MODULE_INTERACTIVE_DRAG_LINE
+MODULE_INTERACTIVE_DRAG_BOX = _saga_api.MODULE_INTERACTIVE_DRAG_BOX
+MODULE_INTERACTIVE_DRAG_CIRCLE = _saga_api.MODULE_INTERACTIVE_DRAG_CIRCLE
+MODULE_INTERACTIVE_KEY_LEFT = _saga_api.MODULE_INTERACTIVE_KEY_LEFT
+MODULE_INTERACTIVE_KEY_MIDDLE = _saga_api.MODULE_INTERACTIVE_KEY_MIDDLE
+MODULE_INTERACTIVE_KEY_RIGHT = _saga_api.MODULE_INTERACTIVE_KEY_RIGHT
+MODULE_INTERACTIVE_KEY_SHIFT = _saga_api.MODULE_INTERACTIVE_KEY_SHIFT
+MODULE_INTERACTIVE_KEY_ALT = _saga_api.MODULE_INTERACTIVE_KEY_ALT
+MODULE_INTERACTIVE_KEY_CTRL = _saga_api.MODULE_INTERACTIVE_KEY_CTRL
+class CSG_Module_Interactive_Base(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Module_Interactive_Base, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Module_Interactive_Base, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Module_Interactive_Base()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Module_Interactive_Base
+    __del__ = lambda self : None;
+    def Execute_Position(self, *args): return _saga_api.CSG_Module_Interactive_Base_Execute_Position(self, *args)
+    def Execute_Keyboard(self, *args): return _saga_api.CSG_Module_Interactive_Base_Execute_Keyboard(self, *args)
+    def Execute_Finish(self): return _saga_api.CSG_Module_Interactive_Base_Execute_Finish(self)
+    def Get_Drag_Mode(self): return _saga_api.CSG_Module_Interactive_Base_Get_Drag_Mode(self)
+CSG_Module_Interactive_Base_swigregister = _saga_api.CSG_Module_Interactive_Base_swigregister
+CSG_Module_Interactive_Base_swigregister(CSG_Module_Interactive_Base)
+
+class CSG_Module_Interactive(CSG_Module_Interactive_Base,CSG_Module):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Module_Interactive_Base,CSG_Module]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Module_Interactive, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Module_Interactive_Base,CSG_Module]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Module_Interactive, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Module_Interactive
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Module_Interactive_Get_Type(self)
+    def is_Interactive(self): return _saga_api.CSG_Module_Interactive_is_Interactive(self)
+CSG_Module_Interactive_swigregister = _saga_api.CSG_Module_Interactive_swigregister
+CSG_Module_Interactive_swigregister(CSG_Module_Interactive)
+
+class CSG_Module_Grid_Interactive(CSG_Module_Interactive_Base,CSG_Module_Grid):
+    __swig_setmethods__ = {}
+    for _s in [CSG_Module_Interactive_Base,CSG_Module_Grid]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Module_Grid_Interactive, name, value)
+    __swig_getmethods__ = {}
+    for _s in [CSG_Module_Interactive_Base,CSG_Module_Grid]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Module_Grid_Interactive, name)
+    def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Module_Grid_Interactive
+    __del__ = lambda self : None;
+    def Get_Type(self): return _saga_api.CSG_Module_Grid_Interactive_Get_Type(self)
+    def is_Interactive(self): return _saga_api.CSG_Module_Grid_Interactive_is_Interactive(self)
+CSG_Module_Grid_Interactive_swigregister = _saga_api.CSG_Module_Grid_Interactive_swigregister
+CSG_Module_Grid_Interactive_swigregister(CSG_Module_Grid_Interactive)
+
+MLB_INFO_Name = _saga_api.MLB_INFO_Name
+MLB_INFO_Description = _saga_api.MLB_INFO_Description
+MLB_INFO_Author = _saga_api.MLB_INFO_Author
+MLB_INFO_Version = _saga_api.MLB_INFO_Version
+MLB_INFO_Menu_Path = _saga_api.MLB_INFO_Menu_Path
+MLB_INFO_User = _saga_api.MLB_INFO_User
+MLB_INFO_Count = _saga_api.MLB_INFO_Count
+class CSG_Module_Library_Interface(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Module_Library_Interface, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Module_Library_Interface, name)
+    __repr__ = _swig_repr
+    def __init__(self): 
+        this = _saga_api.new_CSG_Module_Library_Interface()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _saga_api.delete_CSG_Module_Library_Interface
+    __del__ = lambda self : None;
+    def Set_Info(self, *args): return _saga_api.CSG_Module_Library_Interface_Set_Info(self, *args)
+    def Get_Info(self, *args): return _saga_api.CSG_Module_Library_Interface_Get_Info(self, *args)
+    def Get_Count(self): return _saga_api.CSG_Module_Library_Interface_Get_Count(self)
+    def Add_Module(self, *args): return _saga_api.CSG_Module_Library_Interface_Add_Module(self, *args)
+    def Get_Module(self, *args): return _saga_api.CSG_Module_Library_Interface_Get_Module(self, *args)
+    def Set_File_Name(self, *args): return _saga_api.CSG_Module_Library_Interface_Set_File_Name(self, *args)
+    def Get_File_Name(self): return _saga_api.CSG_Module_Library_Interface_Get_File_Name(self)
+    def Get_Translation(self, *args): return _saga_api.CSG_Module_Library_Interface_Get_Translation(self, *args)
+CSG_Module_Library_Interface_swigregister = _saga_api.CSG_Module_Library_Interface_swigregister
+CSG_Module_Library_Interface_swigregister(CSG_Module_Library_Interface)
+
+class CSG_Module_Library(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, CSG_Module_Library, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, CSG_Module_Library, name)
+    __repr__ = _swig_repr
+    __swig_destroy__ = _saga_api.delete_CSG_Module_Library
+    __del__ = lambda self : None;
+    def __init__(self, *args): 
+        this = _saga_api.new_CSG_Module_Library(*args)
+        try: self.this.append(this)
+        except: self.this = this
+    def Create(self, *args): return _saga_api.CSG_Module_Library_Create(self, *args)
+    def Destroy(self): return _saga_api.CSG_Module_Library_Destroy(self)
+    def is_Valid(self): return _saga_api.CSG_Module_Library_is_Valid(self)
+    def Get_File_Name(self): return _saga_api.CSG_Module_Library_Get_File_Name(self)
+    def Get_Info(self, *args): return _saga_api.CSG_Module_Library_Get_Info(self, *args)
+    def Get_Name(self): return _saga_api.CSG_Module_Library_Get_Name(self)
+    def Get_Description(self): return _saga_api.CSG_Module_Library_Get_Description(self)
+    def Get_Author(self): return _saga_api.CSG_Module_Library_Get_Author(self)
+    def Get_Version(self): return _saga_api.CSG_Module_Library_Get_Version(self)
+    def Get_Summary(self, bHTML = False): return _saga_api.CSG_Module_Library_Get_Summary(self, bHTML)
+    def Get_Count(self): return _saga_api.CSG_Module_Library_Get_Count(self)
+    def Get_Module(self, *args): return _saga_api.CSG_Module_Library_Get_Module(self, *args)
+    def Get_Module_Grid(self, *args): return _saga_api.CSG_Module_Library_Get_Module_Grid(self, *args)
+    def Get_Module_I(self, *args): return _saga_api.CSG_Module_Library_Get_Module_I(self, *args)
+    def Get_Module_Grid_I(self, *args): return _saga_api.CSG_Module_Library_Get_Module_Grid_I(self, *args)
+    def Get_Menu(self, *args): return _saga_api.CSG_Module_Library_Get_Menu(self, *args)
+CSG_Module_Library_swigregister = _saga_api.CSG_Module_Library_swigregister
+CSG_Module_Library_swigregister(CSG_Module_Library)
+
+
+def SAGA_API_Get_Version():
+  return _saga_api.SAGA_API_Get_Version()
+SAGA_API_Get_Version = _saga_api.SAGA_API_Get_Version
+
+
diff --git a/src/saga_core/saga_api/saga_api_wrap.cxx b/src/saga_core/saga_api/saga_api_wrap.cxx
new file mode 100644
index 0000000..ac14c08
--- /dev/null
+++ b/src/saga_core/saga_api/saga_api_wrap.cxx
@@ -0,0 +1,131751 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.40
+ * 
+ * This file is not intended to be easily readable and contains a number of 
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG 
+ * interface file instead. 
+ * ----------------------------------------------------------------------------- */
+
+#define SWIGPYTHON
+#define SWIG_PYTHON_DIRECTOR_NO_VTABLE
+
+
+#ifdef __cplusplus
+/* SwigValueWrapper is described in swig.swg */
+template<typename T> class SwigValueWrapper {
+  struct SwigMovePointer {
+    T *ptr;
+    SwigMovePointer(T *p) : ptr(p) { }
+    ~SwigMovePointer() { delete ptr; }
+    SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; }
+  } pointer;
+  SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
+  SwigValueWrapper(const SwigValueWrapper<T>& rhs);
+public:
+  SwigValueWrapper() : pointer(0) { }
+  SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; }
+  operator T&() const { return *pointer.ptr; }
+  T *operator&() { return pointer.ptr; }
+};
+
+template <typename T> T SwigValueInit() {
+  return T();
+}
+#endif
+
+/* -----------------------------------------------------------------------------
+ *  This section contains generic SWIG labels for method/variable
+ *  declarations/attributes, and other compiler dependent labels.
+ * ----------------------------------------------------------------------------- */
+
+/* template workaround for compilers that cannot correctly implement the C++ standard */
+#ifndef SWIGTEMPLATEDISAMBIGUATOR
+# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
+#  define SWIGTEMPLATEDISAMBIGUATOR template
+# elif defined(__HP_aCC)
+/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
+/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
+#  define SWIGTEMPLATEDISAMBIGUATOR template
+# else
+#  define SWIGTEMPLATEDISAMBIGUATOR
+# endif
+#endif
+
+/* inline attribute */
+#ifndef SWIGINLINE
+# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
+#   define SWIGINLINE inline
+# else
+#   define SWIGINLINE
+# endif
+#endif
+
+/* attribute recognised by some compilers to avoid 'unused' warnings */
+#ifndef SWIGUNUSED
+# if defined(__GNUC__)
+#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+#     define SWIGUNUSED __attribute__ ((__unused__)) 
+#   else
+#     define SWIGUNUSED
+#   endif
+# elif defined(__ICC)
+#   define SWIGUNUSED __attribute__ ((__unused__)) 
+# else
+#   define SWIGUNUSED 
+# endif
+#endif
+
+#ifndef SWIG_MSC_UNSUPPRESS_4505
+# if defined(_MSC_VER)
+#   pragma warning(disable : 4505) /* unreferenced local function has been removed */
+# endif 
+#endif
+
+#ifndef SWIGUNUSEDPARM
+# ifdef __cplusplus
+#   define SWIGUNUSEDPARM(p)
+# else
+#   define SWIGUNUSEDPARM(p) p SWIGUNUSED 
+# endif
+#endif
+
+/* internal SWIG method */
+#ifndef SWIGINTERN
+# define SWIGINTERN static SWIGUNUSED
+#endif
+
+/* internal inline SWIG method */
+#ifndef SWIGINTERNINLINE
+# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
+#endif
+
+/* exporting methods */
+#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+#  ifndef GCC_HASCLASSVISIBILITY
+#    define GCC_HASCLASSVISIBILITY
+#  endif
+#endif
+
+#ifndef SWIGEXPORT
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+#   if defined(STATIC_LINKED)
+#     define SWIGEXPORT
+#   else
+#     define SWIGEXPORT __declspec(dllexport)
+#   endif
+# else
+#   if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
+#     define SWIGEXPORT __attribute__ ((visibility("default")))
+#   else
+#     define SWIGEXPORT
+#   endif
+# endif
+#endif
+
+/* calling conventions for Windows */
+#ifndef SWIGSTDCALL
+# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+#   define SWIGSTDCALL __stdcall
+# else
+#   define SWIGSTDCALL
+# endif 
+#endif
+
+/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
+#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
+# define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
+#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
+# define _SCL_SECURE_NO_DEPRECATE
+#endif
+
+
+
+/* Python.h has to appear first */
+#include <Python.h>
+
+/* -----------------------------------------------------------------------------
+ * swigrun.swg
+ *
+ * This file contains generic C API SWIG runtime support for pointer
+ * type checking.
+ * ----------------------------------------------------------------------------- */
+
+/* This should only be incremented when either the layout of swig_type_info changes,
+   or for whatever reason, the runtime changes incompatibly */
+#define SWIG_RUNTIME_VERSION "4"
+
+/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
+#ifdef SWIG_TYPE_TABLE
+# define SWIG_QUOTE_STRING(x) #x
+# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
+# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
+#else
+# define SWIG_TYPE_TABLE_NAME
+#endif
+
+/*
+  You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
+  creating a static or dynamic library from the SWIG runtime code.
+  In 99.9% of the cases, SWIG just needs to declare them as 'static'.
+  
+  But only do this if strictly necessary, ie, if you have problems
+  with your compiler or suchlike.
+*/
+
+#ifndef SWIGRUNTIME
+# define SWIGRUNTIME SWIGINTERN
+#endif
+
+#ifndef SWIGRUNTIMEINLINE
+# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
+#endif
+
+/*  Generic buffer size */
+#ifndef SWIG_BUFFER_SIZE
+# define SWIG_BUFFER_SIZE 1024
+#endif
+
+/* Flags for pointer conversions */
+#define SWIG_POINTER_DISOWN        0x1
+#define SWIG_CAST_NEW_MEMORY       0x2
+
+/* Flags for new pointer objects */
+#define SWIG_POINTER_OWN           0x1
+
+
+/* 
+   Flags/methods for returning states.
+   
+   The SWIG conversion methods, as ConvertPtr, return and integer 
+   that tells if the conversion was successful or not. And if not,
+   an error code can be returned (see swigerrors.swg for the codes).
+   
+   Use the following macros/flags to set or process the returning
+   states.
+   
+   In old versions of SWIG, code such as the following was usually written:
+
+     if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) {
+       // success code
+     } else {
+       //fail code
+     }
+
+   Now you can be more explicit:
+
+    int res = SWIG_ConvertPtr(obj,vptr,ty.flags);
+    if (SWIG_IsOK(res)) {
+      // success code
+    } else {
+      // fail code
+    }
+
+   which is the same really, but now you can also do
+
+    Type *ptr;
+    int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags);
+    if (SWIG_IsOK(res)) {
+      // success code
+      if (SWIG_IsNewObj(res) {
+        ...
+	delete *ptr;
+      } else {
+        ...
+      }
+    } else {
+      // fail code
+    }
+    
+   I.e., now SWIG_ConvertPtr can return new objects and you can
+   identify the case and take care of the deallocation. Of course that
+   also requires SWIG_ConvertPtr to return new result values, such as
+
+      int SWIG_ConvertPtr(obj, ptr,...) {         
+        if (<obj is ok>) {			       
+          if (<need new object>) {		       
+            *ptr = <ptr to new allocated object>; 
+            return SWIG_NEWOBJ;		       
+          } else {				       
+            *ptr = <ptr to old object>;	       
+            return SWIG_OLDOBJ;		       
+          } 				       
+        } else {				       
+          return SWIG_BADOBJ;		       
+        }					       
+      }
+
+   Of course, returning the plain '0(success)/-1(fail)' still works, but you can be
+   more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the
+   SWIG errors code.
+
+   Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
+   allows to return the 'cast rank', for example, if you have this
+
+       int food(double)
+       int fooi(int);
+
+   and you call
+ 
+      food(1)   // cast rank '1'  (1 -> 1.0)
+      fooi(1)   // cast rank '0'
+
+   just use the SWIG_AddCast()/SWIG_CheckState()
+*/
+
+#define SWIG_OK                    (0) 
+#define SWIG_ERROR                 (-1)
+#define SWIG_IsOK(r)               (r >= 0)
+#define SWIG_ArgError(r)           ((r != SWIG_ERROR) ? r : SWIG_TypeError)  
+
+/* The CastRankLimit says how many bits are used for the cast rank */
+#define SWIG_CASTRANKLIMIT         (1 << 8)
+/* The NewMask denotes the object was created (using new/malloc) */
+#define SWIG_NEWOBJMASK            (SWIG_CASTRANKLIMIT  << 1)
+/* The TmpMask is for in/out typemaps that use temporal objects */
+#define SWIG_TMPOBJMASK            (SWIG_NEWOBJMASK << 1)
+/* Simple returning values */
+#define SWIG_BADOBJ                (SWIG_ERROR)
+#define SWIG_OLDOBJ                (SWIG_OK)
+#define SWIG_NEWOBJ                (SWIG_OK | SWIG_NEWOBJMASK)
+#define SWIG_TMPOBJ                (SWIG_OK | SWIG_TMPOBJMASK)
+/* Check, add and del mask methods */
+#define SWIG_AddNewMask(r)         (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
+#define SWIG_DelNewMask(r)         (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
+#define SWIG_IsNewObj(r)           (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
+#define SWIG_AddTmpMask(r)         (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r)
+#define SWIG_DelTmpMask(r)         (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r)
+#define SWIG_IsTmpObj(r)           (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK))
+
+/* Cast-Rank Mode */
+#if defined(SWIG_CASTRANK_MODE)
+#  ifndef SWIG_TypeRank
+#    define SWIG_TypeRank             unsigned long
+#  endif
+#  ifndef SWIG_MAXCASTRANK            /* Default cast allowed */
+#    define SWIG_MAXCASTRANK          (2)
+#  endif
+#  define SWIG_CASTRANKMASK          ((SWIG_CASTRANKLIMIT) -1)
+#  define SWIG_CastRank(r)           (r & SWIG_CASTRANKMASK)
+SWIGINTERNINLINE int SWIG_AddCast(int r) { 
+  return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r;
+}
+SWIGINTERNINLINE int SWIG_CheckState(int r) { 
+  return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; 
+}
+#else /* no cast-rank mode */
+#  define SWIG_AddCast
+#  define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0)
+#endif
+
+
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void *(*swig_converter_func)(void *, int *);
+typedef struct swig_type_info *(*swig_dycast_func)(void **);
+
+/* Structure to store information on one type */
+typedef struct swig_type_info {
+  const char             *name;			/* mangled name of this type */
+  const char             *str;			/* human readable name of this type */
+  swig_dycast_func        dcast;		/* dynamic cast function down a hierarchy */
+  struct swig_cast_info  *cast;			/* linked list of types that can cast into this type */
+  void                   *clientdata;		/* language specific type data */
+  int                    owndata;		/* flag if the structure owns the clientdata */
+} swig_type_info;
+
+/* Structure to store a type and conversion function used for casting */
+typedef struct swig_cast_info {
+  swig_type_info         *type;			/* pointer to type that is equivalent to this type */
+  swig_converter_func     converter;		/* function to cast the void pointers */
+  struct swig_cast_info  *next;			/* pointer to next cast in linked list */
+  struct swig_cast_info  *prev;			/* pointer to the previous cast */
+} swig_cast_info;
+
+/* Structure used to store module information
+ * Each module generates one structure like this, and the runtime collects
+ * all of these structures and stores them in a circularly linked list.*/
+typedef struct swig_module_info {
+  swig_type_info         **types;		/* Array of pointers to swig_type_info structures that are in this module */
+  size_t                 size;		        /* Number of types in this module */
+  struct swig_module_info *next;		/* Pointer to next element in circularly linked list */
+  swig_type_info         **type_initial;	/* Array of initially generated type structures */
+  swig_cast_info         **cast_initial;	/* Array of initially generated casting structures */
+  void                    *clientdata;		/* Language specific module data */
+} swig_module_info;
+
+/* 
+  Compare two type names skipping the space characters, therefore
+  "char*" == "char *" and "Class<int>" == "Class<int >", etc.
+
+  Return 0 when the two name types are equivalent, as in
+  strncmp, but skipping ' '.
+*/
+SWIGRUNTIME int
+SWIG_TypeNameComp(const char *f1, const char *l1,
+		  const char *f2, const char *l2) {
+  for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
+    while ((*f1 == ' ') && (f1 != l1)) ++f1;
+    while ((*f2 == ' ') && (f2 != l2)) ++f2;
+    if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
+  }
+  return (int)((l1 - f1) - (l2 - f2));
+}
+
+/*
+  Check type equivalence in a name list like <name1>|<name2>|...
+  Return 0 if not equal, 1 if equal
+*/
+SWIGRUNTIME int
+SWIG_TypeEquiv(const char *nb, const char *tb) {
+  int equiv = 0;
+  const char* te = tb + strlen(tb);
+  const char* ne = nb;
+  while (!equiv && *ne) {
+    for (nb = ne; *ne; ++ne) {
+      if (*ne == '|') break;
+    }
+    equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+    if (*ne) ++ne;
+  }
+  return equiv;
+}
+
+/*
+  Check type equivalence in a name list like <name1>|<name2>|...
+  Return 0 if equal, -1 if nb < tb, 1 if nb > tb
+*/
+SWIGRUNTIME int
+SWIG_TypeCompare(const char *nb, const char *tb) {
+  int equiv = 0;
+  const char* te = tb + strlen(tb);
+  const char* ne = nb;
+  while (!equiv && *ne) {
+    for (nb = ne; *ne; ++ne) {
+      if (*ne == '|') break;
+    }
+    equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+    if (*ne) ++ne;
+  }
+  return equiv;
+}
+
+
+/*
+  Check the typename
+*/
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheck(const char *c, swig_type_info *ty) {
+  if (ty) {
+    swig_cast_info *iter = ty->cast;
+    while (iter) {
+      if (strcmp(iter->type->name, c) == 0) {
+        if (iter == ty->cast)
+          return iter;
+        /* Move iter to the top of the linked list */
+        iter->prev->next = iter->next;
+        if (iter->next)
+          iter->next->prev = iter->prev;
+        iter->next = ty->cast;
+        iter->prev = 0;
+        if (ty->cast) ty->cast->prev = iter;
+        ty->cast = iter;
+        return iter;
+      }
+      iter = iter->next;
+    }
+  }
+  return 0;
+}
+
+/* 
+  Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison
+*/
+SWIGRUNTIME swig_cast_info *
+SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) {
+  if (ty) {
+    swig_cast_info *iter = ty->cast;
+    while (iter) {
+      if (iter->type == from) {
+        if (iter == ty->cast)
+          return iter;
+        /* Move iter to the top of the linked list */
+        iter->prev->next = iter->next;
+        if (iter->next)
+          iter->next->prev = iter->prev;
+        iter->next = ty->cast;
+        iter->prev = 0;
+        if (ty->cast) ty->cast->prev = iter;
+        ty->cast = iter;
+        return iter;
+      }
+      iter = iter->next;
+    }
+  }
+  return 0;
+}
+
+/*
+  Cast a pointer up an inheritance hierarchy
+*/
+SWIGRUNTIMEINLINE void *
+SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
+  return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
+}
+
+/* 
+   Dynamic pointer casting. Down an inheritance hierarchy
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
+  swig_type_info *lastty = ty;
+  if (!ty || !ty->dcast) return ty;
+  while (ty && (ty->dcast)) {
+    ty = (*ty->dcast)(ptr);
+    if (ty) lastty = ty;
+  }
+  return lastty;
+}
+
+/*
+  Return the name associated with this type
+*/
+SWIGRUNTIMEINLINE const char *
+SWIG_TypeName(const swig_type_info *ty) {
+  return ty->name;
+}
+
+/*
+  Return the pretty name associated with this type,
+  that is an unmangled type name in a form presentable to the user.
+*/
+SWIGRUNTIME const char *
+SWIG_TypePrettyName(const swig_type_info *type) {
+  /* The "str" field contains the equivalent pretty names of the
+     type, separated by vertical-bar characters.  We choose
+     to print the last name, as it is often (?) the most
+     specific. */
+  if (!type) return NULL;
+  if (type->str != NULL) {
+    const char *last_name = type->str;
+    const char *s;
+    for (s = type->str; *s; s++)
+      if (*s == '|') last_name = s+1;
+    return last_name;
+  }
+  else
+    return type->name;
+}
+
+/* 
+   Set the clientdata field for a type
+*/
+SWIGRUNTIME void
+SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
+  swig_cast_info *cast = ti->cast;
+  /* if (ti->clientdata == clientdata) return; */
+  ti->clientdata = clientdata;
+  
+  while (cast) {
+    if (!cast->converter) {
+      swig_type_info *tc = cast->type;
+      if (!tc->clientdata) {
+	SWIG_TypeClientData(tc, clientdata);
+      }
+    }    
+    cast = cast->next;
+  }
+}
+SWIGRUNTIME void
+SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
+  SWIG_TypeClientData(ti, clientdata);
+  ti->owndata = 1;
+}
+  
+/*
+  Search for a swig_type_info structure only by mangled name
+  Search is a O(log #types)
+  
+  We start searching at module start, and finish searching when start == end.  
+  Note: if start == end at the beginning of the function, we go all the way around
+  the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_MangledTypeQueryModule(swig_module_info *start, 
+                            swig_module_info *end, 
+		            const char *name) {
+  swig_module_info *iter = start;
+  do {
+    if (iter->size) {
+      register size_t l = 0;
+      register size_t r = iter->size - 1;
+      do {
+	/* since l+r >= 0, we can (>> 1) instead (/ 2) */
+	register size_t i = (l + r) >> 1; 
+	const char *iname = iter->types[i]->name;
+	if (iname) {
+	  register int compare = strcmp(name, iname);
+	  if (compare == 0) {	    
+	    return iter->types[i];
+	  } else if (compare < 0) {
+	    if (i) {
+	      r = i - 1;
+	    } else {
+	      break;
+	    }
+	  } else if (compare > 0) {
+	    l = i + 1;
+	  }
+	} else {
+	  break; /* should never happen */
+	}
+      } while (l <= r);
+    }
+    iter = iter->next;
+  } while (iter != end);
+  return 0;
+}
+
+/*
+  Search for a swig_type_info structure for either a mangled name or a human readable name.
+  It first searches the mangled names of the types, which is a O(log #types)
+  If a type is not found it then searches the human readable names, which is O(#types).
+  
+  We start searching at module start, and finish searching when start == end.  
+  Note: if start == end at the beginning of the function, we go all the way around
+  the circular list.
+*/
+SWIGRUNTIME swig_type_info *
+SWIG_TypeQueryModule(swig_module_info *start, 
+                     swig_module_info *end, 
+		     const char *name) {
+  /* STEP 1: Search the name field using binary search */
+  swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
+  if (ret) {
+    return ret;
+  } else {
+    /* STEP 2: If the type hasn't been found, do a complete search
+       of the str field (the human readable name) */
+    swig_module_info *iter = start;
+    do {
+      register size_t i = 0;
+      for (; i < iter->size; ++i) {
+	if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
+	  return iter->types[i];
+      }
+      iter = iter->next;
+    } while (iter != end);
+  }
+  
+  /* neither found a match */
+  return 0;
+}
+
+/* 
+   Pack binary data into a string
+*/
+SWIGRUNTIME char *
+SWIG_PackData(char *c, void *ptr, size_t sz) {
+  static const char hex[17] = "0123456789abcdef";
+  register const unsigned char *u = (unsigned char *) ptr;
+  register const unsigned char *eu =  u + sz;
+  for (; u != eu; ++u) {
+    register unsigned char uu = *u;
+    *(c++) = hex[(uu & 0xf0) >> 4];
+    *(c++) = hex[uu & 0xf];
+  }
+  return c;
+}
+
+/* 
+   Unpack binary data from a string
+*/
+SWIGRUNTIME const char *
+SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
+  register unsigned char *u = (unsigned char *) ptr;
+  register const unsigned char *eu = u + sz;
+  for (; u != eu; ++u) {
+    register char d = *(c++);
+    register unsigned char uu;
+    if ((d >= '0') && (d <= '9'))
+      uu = ((d - '0') << 4);
+    else if ((d >= 'a') && (d <= 'f'))
+      uu = ((d - ('a'-10)) << 4);
+    else 
+      return (char *) 0;
+    d = *(c++);
+    if ((d >= '0') && (d <= '9'))
+      uu |= (d - '0');
+    else if ((d >= 'a') && (d <= 'f'))
+      uu |= (d - ('a'-10));
+    else 
+      return (char *) 0;
+    *u = uu;
+  }
+  return c;
+}
+
+/* 
+   Pack 'void *' into a string buffer.
+*/
+SWIGRUNTIME char *
+SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
+  char *r = buff;
+  if ((2*sizeof(void *) + 2) > bsz) return 0;
+  *(r++) = '_';
+  r = SWIG_PackData(r,&ptr,sizeof(void *));
+  if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
+  strcpy(r,name);
+  return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
+  if (*c != '_') {
+    if (strcmp(c,"NULL") == 0) {
+      *ptr = (void *) 0;
+      return name;
+    } else {
+      return 0;
+    }
+  }
+  return SWIG_UnpackData(++c,ptr,sizeof(void *));
+}
+
+SWIGRUNTIME char *
+SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
+  char *r = buff;
+  size_t lname = (name ? strlen(name) : 0);
+  if ((2*sz + 2 + lname) > bsz) return 0;
+  *(r++) = '_';
+  r = SWIG_PackData(r,ptr,sz);
+  if (lname) {
+    strncpy(r,name,lname+1);
+  } else {
+    *r = 0;
+  }
+  return buff;
+}
+
+SWIGRUNTIME const char *
+SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
+  if (*c != '_') {
+    if (strcmp(c,"NULL") == 0) {
+      memset(ptr,0,sz);
+      return name;
+    } else {
+      return 0;
+    }
+  }
+  return SWIG_UnpackData(++c,ptr,sz);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+/*  Errors in SWIG */
+#define  SWIG_UnknownError    	   -1 
+#define  SWIG_IOError        	   -2 
+#define  SWIG_RuntimeError   	   -3 
+#define  SWIG_IndexError     	   -4 
+#define  SWIG_TypeError      	   -5 
+#define  SWIG_DivisionByZero 	   -6 
+#define  SWIG_OverflowError  	   -7 
+#define  SWIG_SyntaxError    	   -8 
+#define  SWIG_ValueError     	   -9 
+#define  SWIG_SystemError    	   -10
+#define  SWIG_AttributeError 	   -11
+#define  SWIG_MemoryError    	   -12 
+#define  SWIG_NullReferenceError   -13
+
+
+
+/* Compatibility macros for Python 3 */
+#if PY_VERSION_HEX >= 0x03000000
+
+#define PyClass_Check(obj) PyObject_IsInstance(obj, (PyObject *)&PyType_Type)
+#define PyInt_Check(x) PyLong_Check(x)
+#define PyInt_AsLong(x) PyLong_AsLong(x)
+#define PyInt_FromLong(x) PyLong_FromLong(x)
+#define PyString_Format(fmt, args)  PyUnicode_Format(fmt, args)
+
+#endif
+
+#ifndef Py_TYPE
+#  define Py_TYPE(op) ((op)->ob_type)
+#endif
+
+/* SWIG APIs for compatibility of both Python 2 & 3 */
+
+#if PY_VERSION_HEX >= 0x03000000
+#  define SWIG_Python_str_FromFormat PyUnicode_FromFormat
+#else
+#  define SWIG_Python_str_FromFormat PyString_FromFormat
+#endif
+
+
+/* Warning: This function will allocate a new string in Python 3,
+ * so please call SWIG_Python_str_DelForPy3(x) to free the space.
+ */
+SWIGINTERN char*
+SWIG_Python_str_AsChar(PyObject *str)
+{
+#if PY_VERSION_HEX >= 0x03000000
+  char *cstr;
+  char *newstr;
+  Py_ssize_t len;
+  str = PyUnicode_AsUTF8String(str);
+  PyBytes_AsStringAndSize(str, &cstr, &len);
+  newstr = (char *) malloc(len+1);
+  memcpy(newstr, cstr, len+1);
+  Py_XDECREF(str);
+  return newstr;
+#else
+  return PyString_AsString(str);
+#endif
+}
+
+#if PY_VERSION_HEX >= 0x03000000
+#  define SWIG_Python_str_DelForPy3(x) free( (void*) (x) )
+#else
+#  define SWIG_Python_str_DelForPy3(x) 
+#endif
+
+
+SWIGINTERN PyObject*
+SWIG_Python_str_FromChar(const char *c)
+{
+#if PY_VERSION_HEX >= 0x03000000
+  return PyUnicode_FromString(c); 
+#else
+  return PyString_FromString(c);
+#endif
+}
+
+/* Add PyOS_snprintf for old Pythons */
+#if PY_VERSION_HEX < 0x02020000
+# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM)
+#  define PyOS_snprintf _snprintf
+# else
+#  define PyOS_snprintf snprintf
+# endif
+#endif
+
+/* A crude PyString_FromFormat implementation for old Pythons */
+#if PY_VERSION_HEX < 0x02020000
+
+#ifndef SWIG_PYBUFFER_SIZE
+# define SWIG_PYBUFFER_SIZE 1024
+#endif
+
+static PyObject *
+PyString_FromFormat(const char *fmt, ...) {
+  va_list ap;
+  char buf[SWIG_PYBUFFER_SIZE * 2];
+  int res;
+  va_start(ap, fmt);
+  res = vsnprintf(buf, sizeof(buf), fmt, ap);
+  va_end(ap);
+  return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf);
+}
+#endif
+
+/* Add PyObject_Del for old Pythons */
+#if PY_VERSION_HEX < 0x01060000
+# define PyObject_Del(op) PyMem_DEL((op))
+#endif
+#ifndef PyObject_DEL
+# define PyObject_DEL PyObject_Del
+#endif
+
+/* A crude PyExc_StopIteration exception for old Pythons */
+#if PY_VERSION_HEX < 0x02020000
+# ifndef PyExc_StopIteration
+#  define PyExc_StopIteration PyExc_RuntimeError
+# endif
+# ifndef PyObject_GenericGetAttr
+#  define PyObject_GenericGetAttr 0
+# endif
+#endif
+
+/* Py_NotImplemented is defined in 2.1 and up. */
+#if PY_VERSION_HEX < 0x02010000
+# ifndef Py_NotImplemented
+#  define Py_NotImplemented PyExc_RuntimeError
+# endif
+#endif
+
+/* A crude PyString_AsStringAndSize implementation for old Pythons */
+#if PY_VERSION_HEX < 0x02010000
+# ifndef PyString_AsStringAndSize
+#  define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;}
+# endif
+#endif
+
+/* PySequence_Size for old Pythons */
+#if PY_VERSION_HEX < 0x02000000
+# ifndef PySequence_Size
+#  define PySequence_Size PySequence_Length
+# endif
+#endif
+
+/* PyBool_FromLong for old Pythons */
+#if PY_VERSION_HEX < 0x02030000
+static
+PyObject *PyBool_FromLong(long ok)
+{
+  PyObject *result = ok ? Py_True : Py_False;
+  Py_INCREF(result);
+  return result;
+}
+#endif
+
+/* Py_ssize_t for old Pythons */
+/* This code is as recommended by: */
+/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */
+#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
+typedef int Py_ssize_t;
+# define PY_SSIZE_T_MAX INT_MAX
+# define PY_SSIZE_T_MIN INT_MIN
+#endif
+
+/* -----------------------------------------------------------------------------
+ * error manipulation
+ * ----------------------------------------------------------------------------- */
+
+SWIGRUNTIME PyObject*
+SWIG_Python_ErrorType(int code) {
+  PyObject* type = 0;
+  switch(code) {
+  case SWIG_MemoryError:
+    type = PyExc_MemoryError;
+    break;
+  case SWIG_IOError:
+    type = PyExc_IOError;
+    break;
+  case SWIG_RuntimeError:
+    type = PyExc_RuntimeError;
+    break;
+  case SWIG_IndexError:
+    type = PyExc_IndexError;
+    break;
+  case SWIG_TypeError:
+    type = PyExc_TypeError;
+    break;
+  case SWIG_DivisionByZero:
+    type = PyExc_ZeroDivisionError;
+    break;
+  case SWIG_OverflowError:
+    type = PyExc_OverflowError;
+    break;
+  case SWIG_SyntaxError:
+    type = PyExc_SyntaxError;
+    break;
+  case SWIG_ValueError:
+    type = PyExc_ValueError;
+    break;
+  case SWIG_SystemError:
+    type = PyExc_SystemError;
+    break;
+  case SWIG_AttributeError:
+    type = PyExc_AttributeError;
+    break;
+  default:
+    type = PyExc_RuntimeError;
+  }
+  return type;
+}
+
+
+SWIGRUNTIME void
+SWIG_Python_AddErrorMsg(const char* mesg)
+{
+  PyObject *type = 0;
+  PyObject *value = 0;
+  PyObject *traceback = 0;
+
+  if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback);
+  if (value) {
+    char *tmp;
+    PyObject *old_str = PyObject_Str(value);
+    PyErr_Clear();
+    Py_XINCREF(type);
+
+    PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg);
+    SWIG_Python_str_DelForPy3(tmp);
+    Py_DECREF(old_str);
+    Py_DECREF(value);
+  } else {
+    PyErr_SetString(PyExc_RuntimeError, mesg);
+  }
+}
+
+#if defined(SWIG_PYTHON_NO_THREADS)
+#  if defined(SWIG_PYTHON_THREADS)
+#    undef SWIG_PYTHON_THREADS
+#  endif
+#endif
+#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */
+#  if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL)
+#    if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */
+#      define SWIG_PYTHON_USE_GIL
+#    endif
+#  endif
+#  if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */
+#    ifndef SWIG_PYTHON_INITIALIZE_THREADS
+#     define SWIG_PYTHON_INITIALIZE_THREADS  PyEval_InitThreads() 
+#    endif
+#    ifdef __cplusplus /* C++ code */
+       class SWIG_Python_Thread_Block {
+         bool status;
+         PyGILState_STATE state;
+       public:
+         void end() { if (status) { PyGILState_Release(state); status = false;} }
+         SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {}
+         ~SWIG_Python_Thread_Block() { end(); }
+       };
+       class SWIG_Python_Thread_Allow {
+         bool status;
+         PyThreadState *save;
+       public:
+         void end() { if (status) { PyEval_RestoreThread(save); status = false; }}
+         SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {}
+         ~SWIG_Python_Thread_Allow() { end(); }
+       };
+#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK   SWIG_Python_Thread_Block _swig_thread_block
+#      define SWIG_PYTHON_THREAD_END_BLOCK     _swig_thread_block.end()
+#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW   SWIG_Python_Thread_Allow _swig_thread_allow
+#      define SWIG_PYTHON_THREAD_END_ALLOW     _swig_thread_allow.end()
+#    else /* C code */
+#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK   PyGILState_STATE _swig_thread_block = PyGILState_Ensure()
+#      define SWIG_PYTHON_THREAD_END_BLOCK     PyGILState_Release(_swig_thread_block)
+#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW   PyThreadState *_swig_thread_allow = PyEval_SaveThread()
+#      define SWIG_PYTHON_THREAD_END_ALLOW     PyEval_RestoreThread(_swig_thread_allow)
+#    endif
+#  else /* Old thread way, not implemented, user must provide it */
+#    if !defined(SWIG_PYTHON_INITIALIZE_THREADS)
+#      define SWIG_PYTHON_INITIALIZE_THREADS
+#    endif
+#    if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK)
+#      define SWIG_PYTHON_THREAD_BEGIN_BLOCK
+#    endif
+#    if !defined(SWIG_PYTHON_THREAD_END_BLOCK)
+#      define SWIG_PYTHON_THREAD_END_BLOCK
+#    endif
+#    if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW)
+#      define SWIG_PYTHON_THREAD_BEGIN_ALLOW
+#    endif
+#    if !defined(SWIG_PYTHON_THREAD_END_ALLOW)
+#      define SWIG_PYTHON_THREAD_END_ALLOW
+#    endif
+#  endif
+#else /* No thread support */
+#  define SWIG_PYTHON_INITIALIZE_THREADS
+#  define SWIG_PYTHON_THREAD_BEGIN_BLOCK
+#  define SWIG_PYTHON_THREAD_END_BLOCK
+#  define SWIG_PYTHON_THREAD_BEGIN_ALLOW
+#  define SWIG_PYTHON_THREAD_END_ALLOW
+#endif
+
+/* -----------------------------------------------------------------------------
+ * Python API portion that goes into the runtime
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* cc-mode */
+#endif
+#endif
+
+/* -----------------------------------------------------------------------------
+ * Constant declarations
+ * ----------------------------------------------------------------------------- */
+
+/* Constant Types */
+#define SWIG_PY_POINTER 4
+#define SWIG_PY_BINARY  5
+
+/* Constant information structure */
+typedef struct swig_const_info {
+  int type;
+  char *name;
+  long lvalue;
+  double dvalue;
+  void   *pvalue;
+  swig_type_info **ptype;
+} swig_const_info;
+
+
+/* -----------------------------------------------------------------------------
+ * Wrapper of PyInstanceMethod_New() used in Python 3
+ * It is exported to the generated module, used for -fastproxy
+ * ----------------------------------------------------------------------------- */
+SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *self, PyObject *func)
+{
+#if PY_VERSION_HEX >= 0x03000000
+  return PyInstanceMethod_New(func);
+#else
+  return NULL;
+#endif
+}
+
+#ifdef __cplusplus
+#if 0
+{ /* cc-mode */
+#endif
+}
+#endif
+
+
+/* -----------------------------------------------------------------------------
+ * See the LICENSE file for information on copyright, usage and redistribution
+ * of SWIG, and the README file for authors - http://www.swig.org/release.html.
+ *
+ * pyrun.swg
+ *
+ * This file contains the runtime support for Python modules
+ * and includes code for managing global variables and pointer
+ * type checking.
+ *
+ * ----------------------------------------------------------------------------- */
+
+/* Common SWIG API */
+
+/* for raw pointers */
+#define SWIG_Python_ConvertPtr(obj, pptr, type, flags)  SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0)
+#define SWIG_ConvertPtr(obj, pptr, type, flags)         SWIG_Python_ConvertPtr(obj, pptr, type, flags)
+#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own)  SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own)
+#define SWIG_NewPointerObj(ptr, type, flags)            SWIG_Python_NewPointerObj(ptr, type, flags)
+#define SWIG_CheckImplicit(ty)                          SWIG_Python_CheckImplicit(ty) 
+#define SWIG_AcquirePtr(ptr, src)                       SWIG_Python_AcquirePtr(ptr, src)
+#define swig_owntype                                    int
+
+/* for raw packed data */
+#define SWIG_ConvertPacked(obj, ptr, sz, ty)            SWIG_Python_ConvertPacked(obj, ptr, sz, ty)
+#define SWIG_NewPackedObj(ptr, sz, type)                SWIG_Python_NewPackedObj(ptr, sz, type)
+
+/* for class or struct pointers */
+#define SWIG_ConvertInstance(obj, pptr, type, flags)    SWIG_ConvertPtr(obj, pptr, type, flags)
+#define SWIG_NewInstanceObj(ptr, type, flags)           SWIG_NewPointerObj(ptr, type, flags)
+
+/* for C or C++ function pointers */
+#define SWIG_ConvertFunctionPtr(obj, pptr, type)        SWIG_Python_ConvertFunctionPtr(obj, pptr, type)
+#define SWIG_NewFunctionPtrObj(ptr, type)               SWIG_Python_NewPointerObj(ptr, type, 0)
+
+/* for C++ member pointers, ie, member methods */
+#define SWIG_ConvertMember(obj, ptr, sz, ty)            SWIG_Python_ConvertPacked(obj, ptr, sz, ty)
+#define SWIG_NewMemberObj(ptr, sz, type)                SWIG_Python_NewPackedObj(ptr, sz, type)
+
+
+/* Runtime API */
+
+#define SWIG_GetModule(clientdata)                      SWIG_Python_GetModule()
+#define SWIG_SetModule(clientdata, pointer)             SWIG_Python_SetModule(pointer)
+#define SWIG_NewClientData(obj)                         SwigPyClientData_New(obj)
+
+#define SWIG_SetErrorObj                                SWIG_Python_SetErrorObj                            
+#define SWIG_SetErrorMsg                        	SWIG_Python_SetErrorMsg				   
+#define SWIG_ErrorType(code)                    	SWIG_Python_ErrorType(code)                        
+#define SWIG_Error(code, msg)            		SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) 
+#define SWIG_fail                        		goto fail					   
+
+
+/* Runtime API implementation */
+
+/* Error manipulation */
+
+SWIGINTERN void 
+SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
+  SWIG_PYTHON_THREAD_BEGIN_BLOCK; 
+  PyErr_SetObject(errtype, obj);
+  Py_DECREF(obj);
+  SWIG_PYTHON_THREAD_END_BLOCK;
+}
+
+SWIGINTERN void 
+SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
+  SWIG_PYTHON_THREAD_BEGIN_BLOCK;
+  PyErr_SetString(errtype, (char *) msg);
+  SWIG_PYTHON_THREAD_END_BLOCK;
+}
+
+#define SWIG_Python_Raise(obj, type, desc)  SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj)
+
+/* Set a constant value */
+
+SWIGINTERN void
+SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {   
+  PyDict_SetItemString(d, (char*) name, obj);
+  Py_DECREF(obj);                            
+}
+
+/* Append a value to the result obj */
+
+SWIGINTERN PyObject*
+SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) {
+#if !defined(SWIG_PYTHON_OUTPUT_TUPLE)
+  if (!result) {
+    result = obj;
+  } else if (result == Py_None) {
+    Py_DECREF(result);
+    result = obj;
+  } else {
+    if (!PyList_Check(result)) {
+      PyObject *o2 = result;
+      result = PyList_New(1);
+      PyList_SetItem(result, 0, o2);
+    }
+    PyList_Append(result,obj);
+    Py_DECREF(obj);
+  }
+  return result;
+#else
+  PyObject*   o2;
+  PyObject*   o3;
+  if (!result) {
+    result = obj;
+  } else if (result == Py_None) {
+    Py_DECREF(result);
+    result = obj;
+  } else {
+    if (!PyTuple_Check(result)) {
+      o2 = result;
+      result = PyTuple_New(1);
+      PyTuple_SET_ITEM(result, 0, o2);
+    }
+    o3 = PyTuple_New(1);
+    PyTuple_SET_ITEM(o3, 0, obj);
+    o2 = result;
+    result = PySequence_Concat(o2, o3);
+    Py_DECREF(o2);
+    Py_DECREF(o3);
+  }
+  return result;
+#endif
+}
+
+/* Unpack the argument tuple */
+
+SWIGINTERN int
+SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs)
+{
+  if (!args) {
+    if (!min && !max) {
+      return 1;
+    } else {
+      PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", 
+		   name, (min == max ? "" : "at least "), (int)min);
+      return 0;
+    }
+  }  
+  if (!PyTuple_Check(args)) {
+    PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple");
+    return 0;
+  } else {
+    register Py_ssize_t l = PyTuple_GET_SIZE(args);
+    if (l < min) {
+      PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", 
+		   name, (min == max ? "" : "at least "), (int)min, (int)l);
+      return 0;
+    } else if (l > max) {
+      PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", 
+		   name, (min == max ? "" : "at most "), (int)max, (int)l);
+      return 0;
+    } else {
+      register int i;
+      for (i = 0; i < l; ++i) {
+	objs[i] = PyTuple_GET_ITEM(args, i);
+      }
+      for (; l < max; ++l) {
+	objs[l] = 0;
+      }
+      return i + 1;
+    }    
+  }
+}
+
+/* A functor is a function object with one single object argument */
+#if PY_VERSION_HEX >= 0x02020000
+#define SWIG_Python_CallFunctor(functor, obj)	        PyObject_CallFunctionObjArgs(functor, obj, NULL);
+#else
+#define SWIG_Python_CallFunctor(functor, obj)	        PyObject_CallFunction(functor, "O", obj);
+#endif
+
+/*
+  Helper for static pointer initialization for both C and C++ code, for example
+  static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...);
+*/
+#ifdef __cplusplus
+#define SWIG_STATIC_POINTER(var)  var
+#else
+#define SWIG_STATIC_POINTER(var)  var = 0; if (!var) var
+#endif
+
+/* -----------------------------------------------------------------------------
+ * Pointer declarations
+ * ----------------------------------------------------------------------------- */
+
+/* Flags for new pointer objects */
+#define SWIG_POINTER_NOSHADOW       (SWIG_POINTER_OWN      << 1)
+#define SWIG_POINTER_NEW            (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN)
+
+#define SWIG_POINTER_IMPLICIT_CONV  (SWIG_POINTER_DISOWN   << 1)
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* cc-mode */
+#endif
+#endif
+
+/*  How to access Py_None */
+#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+#  ifndef SWIG_PYTHON_NO_BUILD_NONE
+#    ifndef SWIG_PYTHON_BUILD_NONE
+#      define SWIG_PYTHON_BUILD_NONE
+#    endif
+#  endif
+#endif
+
+#ifdef SWIG_PYTHON_BUILD_NONE
+#  ifdef Py_None
+#   undef Py_None
+#   define Py_None SWIG_Py_None()
+#  endif
+SWIGRUNTIMEINLINE PyObject * 
+_SWIG_Py_None(void)
+{
+  PyObject *none = Py_BuildValue((char*)"");
+  Py_DECREF(none);
+  return none;
+}
+SWIGRUNTIME PyObject * 
+SWIG_Py_None(void)
+{
+  static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None();
+  return none;
+}
+#endif
+
+/* The python void return value */
+
+SWIGRUNTIMEINLINE PyObject * 
+SWIG_Py_Void(void)
+{
+  PyObject *none = Py_None;
+  Py_INCREF(none);
+  return none;
+}
+
+/* SwigPyClientData */
+
+typedef struct {
+  PyObject *klass;
+  PyObject *newraw;
+  PyObject *newargs;
+  PyObject *destroy;
+  int delargs;
+  int implicitconv;
+} SwigPyClientData;
+
+SWIGRUNTIMEINLINE int 
+SWIG_Python_CheckImplicit(swig_type_info *ty)
+{
+  SwigPyClientData *data = (SwigPyClientData *)ty->clientdata;
+  return data ? data->implicitconv : 0;
+}
+
+SWIGRUNTIMEINLINE PyObject *
+SWIG_Python_ExceptionType(swig_type_info *desc) {
+  SwigPyClientData *data = desc ? (SwigPyClientData *) desc->clientdata : 0;
+  PyObject *klass = data ? data->klass : 0;
+  return (klass ? klass : PyExc_RuntimeError);
+}
+
+
+SWIGRUNTIME SwigPyClientData * 
+SwigPyClientData_New(PyObject* obj)
+{
+  if (!obj) {
+    return 0;
+  } else {
+    SwigPyClientData *data = (SwigPyClientData *)malloc(sizeof(SwigPyClientData));
+    /* the klass element */
+    data->klass = obj;
+    Py_INCREF(data->klass);
+    /* the newraw method and newargs arguments used to create a new raw instance */
+    if (PyClass_Check(obj)) {
+      data->newraw = 0;
+      data->newargs = obj;
+      Py_INCREF(obj);
+    } else {
+#if (PY_VERSION_HEX < 0x02020000)
+      data->newraw = 0;
+#else
+      data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__");
+#endif
+      if (data->newraw) {
+	Py_INCREF(data->newraw);
+	data->newargs = PyTuple_New(1);
+	PyTuple_SetItem(data->newargs, 0, obj);
+      } else {
+	data->newargs = obj;
+      }
+      Py_INCREF(data->newargs);
+    }
+    /* the destroy method, aka as the C++ delete method */
+    data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__");
+    if (PyErr_Occurred()) {
+      PyErr_Clear();
+      data->destroy = 0;
+    }
+    if (data->destroy) {
+      int flags;
+      Py_INCREF(data->destroy);
+      flags = PyCFunction_GET_FLAGS(data->destroy);
+#ifdef METH_O
+      data->delargs = !(flags & (METH_O));
+#else
+      data->delargs = 0;
+#endif
+    } else {
+      data->delargs = 0;
+    }
+    data->implicitconv = 0;
+    return data;
+  }
+}
+
+SWIGRUNTIME void 
+SwigPyClientData_Del(SwigPyClientData* data)
+{
+  Py_XDECREF(data->newraw);
+  Py_XDECREF(data->newargs);
+  Py_XDECREF(data->destroy);
+}
+
+/* =============== SwigPyObject =====================*/
+
+typedef struct {
+  PyObject_HEAD
+  void *ptr;
+  swig_type_info *ty;
+  int own;
+  PyObject *next;
+} SwigPyObject;
+
+SWIGRUNTIME PyObject *
+SwigPyObject_long(SwigPyObject *v)
+{
+  return PyLong_FromVoidPtr(v->ptr);
+}
+
+SWIGRUNTIME PyObject *
+SwigPyObject_format(const char* fmt, SwigPyObject *v)
+{
+  PyObject *res = NULL;
+  PyObject *args = PyTuple_New(1);
+  if (args) {
+    if (PyTuple_SetItem(args, 0, SwigPyObject_long(v)) == 0) {
+      PyObject *ofmt = SWIG_Python_str_FromChar(fmt);
+      if (ofmt) {
+#if PY_VERSION_HEX >= 0x03000000
+	res = PyUnicode_Format(ofmt,args);
+#else
+	res = PyString_Format(ofmt,args);
+#endif
+	Py_DECREF(ofmt);
+      }
+      Py_DECREF(args);
+    }
+  }
+  return res;
+}
+
+SWIGRUNTIME PyObject *
+SwigPyObject_oct(SwigPyObject *v)
+{
+  return SwigPyObject_format("%o",v);
+}
+
+SWIGRUNTIME PyObject *
+SwigPyObject_hex(SwigPyObject *v)
+{
+  return SwigPyObject_format("%x",v);
+}
+
+SWIGRUNTIME PyObject *
+#ifdef METH_NOARGS
+SwigPyObject_repr(SwigPyObject *v)
+#else
+SwigPyObject_repr(SwigPyObject *v, PyObject *args)
+#endif
+{
+  const char *name = SWIG_TypePrettyName(v->ty);
+  PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, v);
+  if (v->next) {
+#ifdef METH_NOARGS
+    PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
+#else
+    PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next, args);
+#endif
+#if PY_VERSION_HEX >= 0x03000000
+    PyObject *joined = PyUnicode_Concat(repr, nrep);
+    Py_DecRef(repr);
+    Py_DecRef(nrep);
+    repr = joined;
+#else
+    PyString_ConcatAndDel(&repr,nrep);
+#endif
+  }
+  return repr;  
+}
+
+SWIGRUNTIME int
+SwigPyObject_print(SwigPyObject *v, FILE *fp, int SWIGUNUSEDPARM(flags))
+{
+  char *str;
+#ifdef METH_NOARGS
+  PyObject *repr = SwigPyObject_repr(v);
+#else
+  PyObject *repr = SwigPyObject_repr(v, NULL);
+#endif
+  if (repr) {
+    str = SWIG_Python_str_AsChar(repr); 
+    fputs(str, fp);
+    SWIG_Python_str_DelForPy3(str);
+    Py_DECREF(repr);
+    return 0; 
+  } else {
+    return 1; 
+  }
+}
+
+SWIGRUNTIME PyObject *
+SwigPyObject_str(SwigPyObject *v)
+{
+  char result[SWIG_BUFFER_SIZE];
+  return SWIG_PackVoidPtr(result, v->ptr, v->ty->name, sizeof(result)) ?
+    SWIG_Python_str_FromChar(result) : 0;
+}
+
+SWIGRUNTIME int
+SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w)
+{
+  void *i = v->ptr;
+  void *j = w->ptr;
+  return (i < j) ? -1 : ((i > j) ? 1 : 0);
+}
+
+/* Added for Python 3.x, would it also be useful for Python 2.x? */
+SWIGRUNTIME PyObject*
+SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op)
+{
+  PyObject* res;
+  if( op != Py_EQ && op != Py_NE ) {
+    Py_INCREF(Py_NotImplemented);
+    return Py_NotImplemented;
+  }
+  if( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) )
+    res = Py_True;
+  else
+    res = Py_False;
+  Py_INCREF(res);
+  return res;  
+}
+
+
+SWIGRUNTIME PyTypeObject* _PySwigObject_type(void);
+
+SWIGRUNTIME PyTypeObject*
+SwigPyObject_type(void) {
+  static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigObject_type();
+  return type;
+}
+
+SWIGRUNTIMEINLINE int
+SwigPyObject_Check(PyObject *op) {
+  return (Py_TYPE(op) == SwigPyObject_type())
+    || (strcmp(Py_TYPE(op)->tp_name,"SwigPyObject") == 0);
+}
+
+SWIGRUNTIME PyObject *
+SwigPyObject_New(void *ptr, swig_type_info *ty, int own);
+
+SWIGRUNTIME void
+SwigPyObject_dealloc(PyObject *v)
+{
+  SwigPyObject *sobj = (SwigPyObject *) v;
+  PyObject *next = sobj->next;
+  if (sobj->own == SWIG_POINTER_OWN) {
+    swig_type_info *ty = sobj->ty;
+    SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0;
+    PyObject *destroy = data ? data->destroy : 0;
+    if (destroy) {
+      /* destroy is always a VARARGS method */
+      PyObject *res;
+      if (data->delargs) {
+	/* we need to create a temporary object to carry the destroy operation */
+	PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0);
+	res = SWIG_Python_CallFunctor(destroy, tmp);
+	Py_DECREF(tmp);
+      } else {
+	PyCFunction meth = PyCFunction_GET_FUNCTION(destroy);
+	PyObject *mself = PyCFunction_GET_SELF(destroy);
+	res = ((*meth)(mself, v));
+      }
+      Py_XDECREF(res);
+    } 
+#if !defined(SWIG_PYTHON_SILENT_MEMLEAK)
+    else {
+      const char *name = SWIG_TypePrettyName(ty);
+      printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown"));
+    }
+#endif
+  } 
+  Py_XDECREF(next);
+  PyObject_DEL(v);
+}
+
+SWIGRUNTIME PyObject* 
+SwigPyObject_append(PyObject* v, PyObject* next)
+{
+  SwigPyObject *sobj = (SwigPyObject *) v;
+#ifndef METH_O
+  PyObject *tmp = 0;
+  if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL;
+  next = tmp;
+#endif
+  if (!SwigPyObject_Check(next)) {
+    return NULL;
+  }
+  sobj->next = next;
+  Py_INCREF(next);
+  return SWIG_Py_Void();
+}
+
+SWIGRUNTIME PyObject* 
+#ifdef METH_NOARGS
+SwigPyObject_next(PyObject* v)
+#else
+SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
+#endif
+{
+  SwigPyObject *sobj = (SwigPyObject *) v;
+  if (sobj->next) {    
+    Py_INCREF(sobj->next);
+    return sobj->next;
+  } else {
+    return SWIG_Py_Void();
+  }
+}
+
+SWIGINTERN PyObject*
+#ifdef METH_NOARGS
+SwigPyObject_disown(PyObject *v)
+#else
+SwigPyObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
+#endif
+{
+  SwigPyObject *sobj = (SwigPyObject *)v;
+  sobj->own = 0;
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject*
+#ifdef METH_NOARGS
+SwigPyObject_acquire(PyObject *v)
+#else
+SwigPyObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
+#endif
+{
+  SwigPyObject *sobj = (SwigPyObject *)v;
+  sobj->own = SWIG_POINTER_OWN;
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject*
+SwigPyObject_own(PyObject *v, PyObject *args)
+{
+  PyObject *val = 0;
+#if (PY_VERSION_HEX < 0x02020000)
+  if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
+#else
+  if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) 
+#endif
+    {
+      return NULL;
+    } 
+  else
+    {
+      SwigPyObject *sobj = (SwigPyObject *)v;
+      PyObject *obj = PyBool_FromLong(sobj->own);
+      if (val) {
+#ifdef METH_NOARGS
+	if (PyObject_IsTrue(val)) {
+	  SwigPyObject_acquire(v);
+	} else {
+	  SwigPyObject_disown(v);
+	}
+#else
+	if (PyObject_IsTrue(val)) {
+	  SwigPyObject_acquire(v,args);
+	} else {
+	  SwigPyObject_disown(v,args);
+	}
+#endif
+      } 
+      return obj;
+    }
+}
+
+#ifdef METH_O
+static PyMethodDef
+swigobject_methods[] = {
+  {(char *)"disown",  (PyCFunction)SwigPyObject_disown,  METH_NOARGS,  (char *)"releases ownership of the pointer"},
+  {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS,  (char *)"aquires ownership of the pointer"},
+  {(char *)"own",     (PyCFunction)SwigPyObject_own,     METH_VARARGS, (char *)"returns/sets ownership of the pointer"},
+  {(char *)"append",  (PyCFunction)SwigPyObject_append,  METH_O,       (char *)"appends another 'this' object"},
+  {(char *)"next",    (PyCFunction)SwigPyObject_next,    METH_NOARGS,  (char *)"returns the next 'this' object"},
+  {(char *)"__repr__",(PyCFunction)SwigPyObject_repr,    METH_NOARGS,  (char *)"returns object representation"},
+  {0, 0, 0, 0}  
+};
+#else
+static PyMethodDef
+swigobject_methods[] = {
+  {(char *)"disown",  (PyCFunction)SwigPyObject_disown,  METH_VARARGS,  (char *)"releases ownership of the pointer"},
+  {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS,  (char *)"aquires ownership of the pointer"},
+  {(char *)"own",     (PyCFunction)SwigPyObject_own,     METH_VARARGS,  (char *)"returns/sets ownership of the pointer"},
+  {(char *)"append",  (PyCFunction)SwigPyObject_append,  METH_VARARGS,  (char *)"appends another 'this' object"},
+  {(char *)"next",    (PyCFunction)SwigPyObject_next,    METH_VARARGS,  (char *)"returns the next 'this' object"},
+  {(char *)"__repr__",(PyCFunction)SwigPyObject_repr,   METH_VARARGS,  (char *)"returns object representation"},
+  {0, 0, 0, 0}  
+};
+#endif
+
+#if PY_VERSION_HEX < 0x02020000
+SWIGINTERN PyObject *
+SwigPyObject_getattr(SwigPyObject *sobj,char *name)
+{
+  return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name);
+}
+#endif
+
+SWIGRUNTIME PyTypeObject*
+_PySwigObject_type(void) {
+  static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer";
+  
+  static PyNumberMethods SwigPyObject_as_number = {
+    (binaryfunc)0, /*nb_add*/
+    (binaryfunc)0, /*nb_subtract*/
+    (binaryfunc)0, /*nb_multiply*/
+    /* nb_divide removed in Python 3 */
+#if PY_VERSION_HEX < 0x03000000
+    (binaryfunc)0, /*nb_divide*/
+#endif
+    (binaryfunc)0, /*nb_remainder*/
+    (binaryfunc)0, /*nb_divmod*/
+    (ternaryfunc)0,/*nb_power*/
+    (unaryfunc)0,  /*nb_negative*/
+    (unaryfunc)0,  /*nb_positive*/
+    (unaryfunc)0,  /*nb_absolute*/
+    (inquiry)0,    /*nb_nonzero*/
+    0,		   /*nb_invert*/
+    0,		   /*nb_lshift*/
+    0,		   /*nb_rshift*/
+    0,		   /*nb_and*/
+    0,		   /*nb_xor*/
+    0,		   /*nb_or*/
+#if PY_VERSION_HEX < 0x03000000
+    0,   /*nb_coerce*/
+#endif
+    (unaryfunc)SwigPyObject_long, /*nb_int*/
+#if PY_VERSION_HEX < 0x03000000
+    (unaryfunc)SwigPyObject_long, /*nb_long*/
+#else
+    0, /*nb_reserved*/
+#endif
+    (unaryfunc)0,                 /*nb_float*/
+#if PY_VERSION_HEX < 0x03000000
+    (unaryfunc)SwigPyObject_oct,  /*nb_oct*/
+    (unaryfunc)SwigPyObject_hex,  /*nb_hex*/
+#endif
+#if PY_VERSION_HEX >= 0x03000000 /* 3.0 */
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */
+#elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */
+#elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */
+#elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */
+    0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */
+#endif
+  };
+
+  static PyTypeObject swigpyobject_type;  
+  static int type_init = 0;
+  if (!type_init) {
+    const PyTypeObject tmp
+      = {
+	/* PyObject header changed in Python 3 */
+#if PY_VERSION_HEX >= 0x03000000
+	PyVarObject_HEAD_INIT(&PyType_Type, 0)
+#else    
+	PyObject_HEAD_INIT(NULL)
+	0,				    /* ob_size */
+#endif
+	(char *)"SwigPyObject",		    /* tp_name */
+	sizeof(SwigPyObject),		    /* tp_basicsize */
+	0,			            /* tp_itemsize */
+	(destructor)SwigPyObject_dealloc,   /* tp_dealloc */
+	(printfunc)SwigPyObject_print,	    /* tp_print */
+#if PY_VERSION_HEX < 0x02020000
+	(getattrfunc)SwigPyObject_getattr,  /* tp_getattr */ 
+#else
+	(getattrfunc)0,			    /* tp_getattr */ 
+#endif
+	(setattrfunc)0,			    /* tp_setattr */ 
+#if PY_VERSION_HEX >= 0x03000000
+    0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */
+#else
+	(cmpfunc)SwigPyObject_compare,	    /* tp_compare */
+#endif
+	(reprfunc)SwigPyObject_repr,	    /* tp_repr */    
+	&SwigPyObject_as_number,	    /* tp_as_number */
+	0,				    /* tp_as_sequence */
+	0,				    /* tp_as_mapping */
+	(hashfunc)0,			    /* tp_hash */
+	(ternaryfunc)0,			    /* tp_call */
+	(reprfunc)SwigPyObject_str,	    /* tp_str */
+	PyObject_GenericGetAttr,            /* tp_getattro */
+	0,				    /* tp_setattro */
+	0,		                    /* tp_as_buffer */
+	Py_TPFLAGS_DEFAULT,	            /* tp_flags */
+	swigobject_doc, 	            /* tp_doc */        
+	0,                                  /* tp_traverse */
+	0,                                  /* tp_clear */
+	(richcmpfunc)SwigPyObject_richcompare,           /* tp_richcompare */
+	0,                                  /* tp_weaklistoffset */
+#if PY_VERSION_HEX >= 0x02020000
+	0,                                  /* tp_iter */
+	0,                                  /* tp_iternext */
+	swigobject_methods,		    /* tp_methods */ 
+	0,			            /* tp_members */
+	0,				    /* tp_getset */	    	
+	0,			            /* tp_base */	        
+	0,				    /* tp_dict */	    	
+	0,				    /* tp_descr_get */  	
+	0,				    /* tp_descr_set */  	
+	0,				    /* tp_dictoffset */ 	
+	0,				    /* tp_init */	    	
+	0,				    /* tp_alloc */	    	
+	0,			            /* tp_new */	    	
+	0,	                            /* tp_free */	   
+	0,                                  /* tp_is_gc */  
+	0,				    /* tp_bases */   
+	0,				    /* tp_mro */
+	0,				    /* tp_cache */   
+	0,				    /* tp_subclasses */
+	0,				    /* tp_weaklist */
+#endif
+#if PY_VERSION_HEX >= 0x02030000
+	0,                                  /* tp_del */
+#endif
+#ifdef COUNT_ALLOCS
+	0,0,0,0                             /* tp_alloc -> tp_next */
+#endif
+      };
+    swigpyobject_type = tmp;
+    /* for Python 3 we already assigned ob_type in PyVarObject_HEAD_INIT() */
+#if PY_VERSION_HEX < 0x03000000
+    swigpyobject_type.ob_type = &PyType_Type;
+#endif
+    type_init = 1;
+  }
+  return &swigpyobject_type;
+}
+
+SWIGRUNTIME PyObject *
+SwigPyObject_New(void *ptr, swig_type_info *ty, int own)
+{
+  SwigPyObject *sobj = PyObject_NEW(SwigPyObject, SwigPyObject_type());
+  if (sobj) {
+    sobj->ptr  = ptr;
+    sobj->ty   = ty;
+    sobj->own  = own;
+    sobj->next = 0;
+  }
+  return (PyObject *)sobj;
+}
+
+/* -----------------------------------------------------------------------------
+ * Implements a simple Swig Packed type, and use it instead of string
+ * ----------------------------------------------------------------------------- */
+
+typedef struct {
+  PyObject_HEAD
+  void *pack;
+  swig_type_info *ty;
+  size_t size;
+} SwigPyPacked;
+
+SWIGRUNTIME int
+SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags))
+{
+  char result[SWIG_BUFFER_SIZE];
+  fputs("<Swig Packed ", fp); 
+  if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) {
+    fputs("at ", fp); 
+    fputs(result, fp); 
+  }
+  fputs(v->ty->name,fp); 
+  fputs(">", fp);
+  return 0; 
+}
+  
+SWIGRUNTIME PyObject *
+SwigPyPacked_repr(SwigPyPacked *v)
+{
+  char result[SWIG_BUFFER_SIZE];
+  if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) {
+    return SWIG_Python_str_FromFormat("<Swig Packed at %s%s>", result, v->ty->name);
+  } else {
+    return SWIG_Python_str_FromFormat("<Swig Packed %s>", v->ty->name);
+  }  
+}
+
+SWIGRUNTIME PyObject *
+SwigPyPacked_str(SwigPyPacked *v)
+{
+  char result[SWIG_BUFFER_SIZE];
+  if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){
+    return SWIG_Python_str_FromFormat("%s%s", result, v->ty->name);
+  } else {
+    return SWIG_Python_str_FromChar(v->ty->name);
+  }  
+}
+
+SWIGRUNTIME int
+SwigPyPacked_compare(SwigPyPacked *v, SwigPyPacked *w)
+{
+  size_t i = v->size;
+  size_t j = w->size;
+  int s = (i < j) ? -1 : ((i > j) ? 1 : 0);
+  return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size);
+}
+
+SWIGRUNTIME PyTypeObject* _PySwigPacked_type(void);
+
+SWIGRUNTIME PyTypeObject*
+SwigPyPacked_type(void) {
+  static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigPacked_type();
+  return type;
+}
+
+SWIGRUNTIMEINLINE int
+SwigPyPacked_Check(PyObject *op) {
+  return ((op)->ob_type == _PySwigPacked_type()) 
+    || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0);
+}
+
+SWIGRUNTIME void
+SwigPyPacked_dealloc(PyObject *v)
+{
+  if (SwigPyPacked_Check(v)) {
+    SwigPyPacked *sobj = (SwigPyPacked *) v;
+    free(sobj->pack);
+  }
+  PyObject_DEL(v);
+}
+
+SWIGRUNTIME PyTypeObject*
+_PySwigPacked_type(void) {
+  static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer";
+  static PyTypeObject swigpypacked_type;
+  static int type_init = 0;  
+  if (!type_init) {
+    const PyTypeObject tmp
+      = {
+    /* PyObject header changed in Python 3 */
+#if PY_VERSION_HEX>=0x03000000
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
+#else
+	PyObject_HEAD_INIT(NULL)
+    0,				    /* ob_size */	
+#endif
+	(char *)"SwigPyPacked",		    /* tp_name */	
+	sizeof(SwigPyPacked),		    /* tp_basicsize */	
+	0,				    /* tp_itemsize */	
+	(destructor)SwigPyPacked_dealloc,   /* tp_dealloc */	
+	(printfunc)SwigPyPacked_print,	    /* tp_print */   	
+	(getattrfunc)0,			    /* tp_getattr */ 	
+	(setattrfunc)0,			    /* tp_setattr */ 	
+#if PY_VERSION_HEX>=0x03000000
+    0, /* tp_reserved in 3.0.1 */
+#else
+    (cmpfunc)SwigPyPacked_compare,	    /* tp_compare */
+#endif
+	(reprfunc)SwigPyPacked_repr,	    /* tp_repr */
+	0,	                            /* tp_as_number */
+	0,				    /* tp_as_sequence */
+	0,				    /* tp_as_mapping */
+	(hashfunc)0,			    /* tp_hash */
+	(ternaryfunc)0,			    /* tp_call */
+	(reprfunc)SwigPyPacked_str,	    /* tp_str */
+	PyObject_GenericGetAttr,            /* tp_getattro */
+	0,				    /* tp_setattro */
+	0,		                    /* tp_as_buffer */
+	Py_TPFLAGS_DEFAULT,	            /* tp_flags */
+	swigpacked_doc, 	            /* tp_doc */
+	0,                                  /* tp_traverse */
+	0,                                  /* tp_clear */
+	0,                                  /* tp_richcompare */
+	0,                                  /* tp_weaklistoffset */
+#if PY_VERSION_HEX >= 0x02020000
+	0,                                  /* tp_iter */
+	0,                                  /* tp_iternext */
+	0,		                    /* tp_methods */ 
+	0,			            /* tp_members */
+	0,				    /* tp_getset */	    	
+	0,			            /* tp_base */	        
+	0,				    /* tp_dict */	    	
+	0,				    /* tp_descr_get */  	
+	0,				    /* tp_descr_set */  	
+	0,				    /* tp_dictoffset */ 	
+	0,				    /* tp_init */	    	
+	0,				    /* tp_alloc */	    	
+	0,			            /* tp_new */	    	
+	0, 	                            /* tp_free */	   
+        0,                                  /* tp_is_gc */  
+	0,				    /* tp_bases */   
+	0,				    /* tp_mro */
+	0,				    /* tp_cache */   
+ 	0,				    /* tp_subclasses */
+	0,				    /* tp_weaklist */
+#endif
+#if PY_VERSION_HEX >= 0x02030000
+	0,                                  /* tp_del */
+#endif
+#ifdef COUNT_ALLOCS
+	0,0,0,0                             /* tp_alloc -> tp_next */
+#endif
+      };
+    swigpypacked_type = tmp;
+    /* for Python 3 the ob_type already assigned in PyVarObject_HEAD_INIT() */
+#if PY_VERSION_HEX < 0x03000000
+    swigpypacked_type.ob_type = &PyType_Type;
+#endif
+    type_init = 1;
+  }
+  return &swigpypacked_type;
+}
+
+SWIGRUNTIME PyObject *
+SwigPyPacked_New(void *ptr, size_t size, swig_type_info *ty)
+{
+  SwigPyPacked *sobj = PyObject_NEW(SwigPyPacked, SwigPyPacked_type());
+  if (sobj) {
+    void *pack = malloc(size);
+    if (pack) {
+      memcpy(pack, ptr, size);
+      sobj->pack = pack;
+      sobj->ty   = ty;
+      sobj->size = size;
+    } else {
+      PyObject_DEL((PyObject *) sobj);
+      sobj = 0;
+    }
+  }
+  return (PyObject *) sobj;
+}
+
+SWIGRUNTIME swig_type_info *
+SwigPyPacked_UnpackData(PyObject *obj, void *ptr, size_t size)
+{
+  if (SwigPyPacked_Check(obj)) {
+    SwigPyPacked *sobj = (SwigPyPacked *)obj;
+    if (sobj->size != size) return 0;
+    memcpy(ptr, sobj->pack, size);
+    return sobj->ty;
+  } else {
+    return 0;
+  }
+}
+
+/* -----------------------------------------------------------------------------
+ * pointers/data manipulation
+ * ----------------------------------------------------------------------------- */
+
+SWIGRUNTIMEINLINE PyObject *
+_SWIG_This(void)
+{
+    return SWIG_Python_str_FromChar("this");
+}
+
+SWIGRUNTIME PyObject *
+SWIG_This(void)
+{
+  static PyObject *SWIG_STATIC_POINTER(swig_this) = _SWIG_This();
+  return swig_this;
+}
+
+/* #define SWIG_PYTHON_SLOW_GETSET_THIS */
+
+/* TODO: I don't know how to implement the fast getset in Python 3 right now */
+#if PY_VERSION_HEX>=0x03000000
+#define SWIG_PYTHON_SLOW_GETSET_THIS 
+#endif
+
+SWIGRUNTIME SwigPyObject *
+SWIG_Python_GetSwigThis(PyObject *pyobj) 
+{
+  if (SwigPyObject_Check(pyobj)) {
+    return (SwigPyObject *) pyobj;
+  } else {
+    PyObject *obj = 0;
+#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000))
+    if (PyInstance_Check(pyobj)) {
+      obj = _PyInstance_Lookup(pyobj, SWIG_This());      
+    } else {
+      PyObject **dictptr = _PyObject_GetDictPtr(pyobj);
+      if (dictptr != NULL) {
+	PyObject *dict = *dictptr;
+	obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0;
+      } else {
+#ifdef PyWeakref_CheckProxy
+	if (PyWeakref_CheckProxy(pyobj)) {
+	  PyObject *wobj = PyWeakref_GET_OBJECT(pyobj);
+	  return wobj ? SWIG_Python_GetSwigThis(wobj) : 0;
+	}
+#endif
+	obj = PyObject_GetAttr(pyobj,SWIG_This());
+	if (obj) {
+	  Py_DECREF(obj);
+	} else {
+	  if (PyErr_Occurred()) PyErr_Clear();
+	  return 0;
+	}
+      }
+    }
+#else
+    obj = PyObject_GetAttr(pyobj,SWIG_This());
+    if (obj) {
+      Py_DECREF(obj);
+    } else {
+      if (PyErr_Occurred()) PyErr_Clear();
+      return 0;
+    }
+#endif
+    if (obj && !SwigPyObject_Check(obj)) {
+      /* a PyObject is called 'this', try to get the 'real this'
+	 SwigPyObject from it */ 
+      return SWIG_Python_GetSwigThis(obj);
+    }
+    return (SwigPyObject *)obj;
+  }
+}
+
+/* Acquire a pointer value */
+
+SWIGRUNTIME int
+SWIG_Python_AcquirePtr(PyObject *obj, int own) {
+  if (own == SWIG_POINTER_OWN) {
+    SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj);
+    if (sobj) {
+      int oldown = sobj->own;
+      sobj->own = own;
+      return oldown;
+    }
+  }
+  return 0;
+}
+
+/* Convert a pointer value */
+
+SWIGRUNTIME int
+SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) {
+  if (!obj) return SWIG_ERROR;
+  if (obj == Py_None) {
+    if (ptr) *ptr = 0;
+    return SWIG_OK;
+  } else {
+    SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj);
+    if (own)
+      *own = 0;
+    while (sobj) {
+      void *vptr = sobj->ptr;
+      if (ty) {
+	swig_type_info *to = sobj->ty;
+	if (to == ty) {
+	  /* no type cast needed */
+	  if (ptr) *ptr = vptr;
+	  break;
+	} else {
+	  swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
+	  if (!tc) {
+	    sobj = (SwigPyObject *)sobj->next;
+	  } else {
+	    if (ptr) {
+              int newmemory = 0;
+              *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
+              if (newmemory == SWIG_CAST_NEW_MEMORY) {
+                assert(own);
+                if (own)
+                  *own = *own | SWIG_CAST_NEW_MEMORY;
+              }
+            }
+	    break;
+	  }
+	}
+      } else {
+	if (ptr) *ptr = vptr;
+	break;
+      }
+    }
+    if (sobj) {
+      if (own)
+        *own = *own | sobj->own;
+      if (flags & SWIG_POINTER_DISOWN) {
+	sobj->own = 0;
+      }
+      return SWIG_OK;
+    } else {
+      int res = SWIG_ERROR;
+      if (flags & SWIG_POINTER_IMPLICIT_CONV) {
+	SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0;
+	if (data && !data->implicitconv) {
+	  PyObject *klass = data->klass;
+	  if (klass) {
+	    PyObject *impconv;
+	    data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/
+	    impconv = SWIG_Python_CallFunctor(klass, obj);
+	    data->implicitconv = 0;
+	    if (PyErr_Occurred()) {
+	      PyErr_Clear();
+	      impconv = 0;
+	    }
+	    if (impconv) {
+	      SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv);
+	      if (iobj) {
+		void *vptr;
+		res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0);
+		if (SWIG_IsOK(res)) {
+		  if (ptr) {
+		    *ptr = vptr;
+		    /* transfer the ownership to 'ptr' */
+		    iobj->own = 0;
+		    res = SWIG_AddCast(res);
+		    res = SWIG_AddNewMask(res);
+		  } else {
+		    res = SWIG_AddCast(res);		    
+		  }
+		}
+	      }
+	      Py_DECREF(impconv);
+	    }
+	  }
+	}
+      }
+      return res;
+    }
+  }
+}
+
+/* Convert a function ptr value */
+
+SWIGRUNTIME int
+SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) {
+  if (!PyCFunction_Check(obj)) {
+    return SWIG_ConvertPtr(obj, ptr, ty, 0);
+  } else {
+    void *vptr = 0;
+    
+    /* here we get the method pointer for callbacks */
+    const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc);
+    const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0;
+    if (desc)
+      desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0;
+    if (!desc) 
+      return SWIG_ERROR;
+    if (ty) {
+      swig_cast_info *tc = SWIG_TypeCheck(desc,ty);
+      if (tc) {
+        int newmemory = 0;
+        *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
+        assert(!newmemory); /* newmemory handling not yet implemented */
+      } else {
+        return SWIG_ERROR;
+      }
+    } else {
+      *ptr = vptr;
+    }
+    return SWIG_OK;
+  }
+}
+
+/* Convert a packed value value */
+
+SWIGRUNTIME int
+SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) {
+  swig_type_info *to = SwigPyPacked_UnpackData(obj, ptr, sz);
+  if (!to) return SWIG_ERROR;
+  if (ty) {
+    if (to != ty) {
+      /* check type cast? */
+      swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
+      if (!tc) return SWIG_ERROR;
+    }
+  }
+  return SWIG_OK;
+}  
+
+/* -----------------------------------------------------------------------------
+ * Create a new pointer object
+ * ----------------------------------------------------------------------------- */
+
+/*
+  Create a new instance object, without calling __init__, and set the
+  'this' attribute.
+*/
+
+SWIGRUNTIME PyObject* 
+SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
+{
+#if (PY_VERSION_HEX >= 0x02020000)
+  PyObject *inst = 0;
+  PyObject *newraw = data->newraw;
+  if (newraw) {
+    inst = PyObject_Call(newraw, data->newargs, NULL);
+    if (inst) {
+#if !defined(SWIG_PYTHON_SLOW_GETSET_THIS)
+      PyObject **dictptr = _PyObject_GetDictPtr(inst);
+      if (dictptr != NULL) {
+	PyObject *dict = *dictptr;
+	if (dict == NULL) {
+	  dict = PyDict_New();
+	  *dictptr = dict;
+	  PyDict_SetItem(dict, SWIG_This(), swig_this);
+	}
+      }
+#else
+      PyObject *key = SWIG_This();
+      PyObject_SetAttr(inst, key, swig_this);
+#endif
+    }
+  } else {
+#if PY_VERSION_HEX >= 0x03000000
+    inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None);
+    PyObject_SetAttr(inst, SWIG_This(), swig_this);
+    Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
+#else
+    PyObject *dict = PyDict_New();
+    PyDict_SetItem(dict, SWIG_This(), swig_this);
+    inst = PyInstance_NewRaw(data->newargs, dict);
+    Py_DECREF(dict);
+#endif
+  }
+  return inst;
+#else
+#if (PY_VERSION_HEX >= 0x02010000)
+  PyObject *inst;
+  PyObject *dict = PyDict_New();
+  PyDict_SetItem(dict, SWIG_This(), swig_this);
+  inst = PyInstance_NewRaw(data->newargs, dict);
+  Py_DECREF(dict);
+  return (PyObject *) inst;
+#else
+  PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
+  if (inst == NULL) {
+    return NULL;
+  }
+  inst->in_class = (PyClassObject *)data->newargs;
+  Py_INCREF(inst->in_class);
+  inst->in_dict = PyDict_New();
+  if (inst->in_dict == NULL) {
+    Py_DECREF(inst);
+    return NULL;
+  }
+#ifdef Py_TPFLAGS_HAVE_WEAKREFS
+  inst->in_weakreflist = NULL;
+#endif
+#ifdef Py_TPFLAGS_GC
+  PyObject_GC_Init(inst);
+#endif
+  PyDict_SetItem(inst->in_dict, SWIG_This(), swig_this);
+  return (PyObject *) inst;
+#endif
+#endif
+}
+
+SWIGRUNTIME void
+SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
+{
+ PyObject *dict;
+#if (PY_VERSION_HEX >= 0x02020000) && !defined(SWIG_PYTHON_SLOW_GETSET_THIS)
+ PyObject **dictptr = _PyObject_GetDictPtr(inst);
+ if (dictptr != NULL) {
+   dict = *dictptr;
+   if (dict == NULL) {
+     dict = PyDict_New();
+     *dictptr = dict;
+   }
+   PyDict_SetItem(dict, SWIG_This(), swig_this);
+   return;
+ }
+#endif
+ dict = PyObject_GetAttrString(inst, (char*)"__dict__");
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ Py_DECREF(dict);
+} 
+
+
+SWIGINTERN PyObject *
+SWIG_Python_InitShadowInstance(PyObject *args) {
+  PyObject *obj[2];
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+    return NULL;
+  } else {
+    SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
+    if (sthis) {
+      SwigPyObject_append((PyObject*) sthis, obj[1]);
+    } else {
+      SWIG_Python_SetSwigThis(obj[0], obj[1]);
+    }
+    return SWIG_Py_Void();
+  }
+}
+
+/* Create a new pointer object */
+
+SWIGRUNTIME PyObject *
+SWIG_Python_NewPointerObj(void *ptr, swig_type_info *type, int flags) {
+  if (!ptr) {
+    return SWIG_Py_Void();
+  } else {
+    int own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0;
+    PyObject *robj = SwigPyObject_New(ptr, type, own);
+    SwigPyClientData *clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0;
+    if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
+      PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
+      if (inst) {
+	Py_DECREF(robj);
+	robj = inst;
+      }
+    }
+    return robj;
+  }
+}
+
+/* Create a new packed object */
+
+SWIGRUNTIMEINLINE PyObject *
+SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) {
+  return ptr ? SwigPyPacked_New((void *) ptr, sz, type) : SWIG_Py_Void();
+}
+
+/* -----------------------------------------------------------------------------*
+ *  Get type list 
+ * -----------------------------------------------------------------------------*/
+
+#ifdef SWIG_LINK_RUNTIME
+void *SWIG_ReturnGlobalTypeList(void *);
+#endif
+
+SWIGRUNTIME swig_module_info *
+SWIG_Python_GetModule(void) {
+  static void *type_pointer = (void *)0;
+  /* first check if module already created */
+  if (!type_pointer) {
+#ifdef SWIG_LINK_RUNTIME
+    type_pointer = SWIG_ReturnGlobalTypeList((void *)0);
+#else
+    type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION,
+				    (char*)"type_pointer" SWIG_TYPE_TABLE_NAME);
+    if (PyErr_Occurred()) {
+      PyErr_Clear();
+      type_pointer = (void *)0;
+    }
+#endif
+  }
+  return (swig_module_info *) type_pointer;
+}
+
+#if PY_MAJOR_VERSION < 2
+/* PyModule_AddObject function was introduced in Python 2.0.  The following function
+   is copied out of Python/modsupport.c in python version 2.3.4 */
+SWIGINTERN int
+PyModule_AddObject(PyObject *m, char *name, PyObject *o)
+{
+  PyObject *dict;
+  if (!PyModule_Check(m)) {
+    PyErr_SetString(PyExc_TypeError,
+		    "PyModule_AddObject() needs module as first arg");
+    return SWIG_ERROR;
+  }
+  if (!o) {
+    PyErr_SetString(PyExc_TypeError,
+		    "PyModule_AddObject() needs non-NULL value");
+    return SWIG_ERROR;
+  }
+  
+  dict = PyModule_GetDict(m);
+  if (dict == NULL) {
+    /* Internal error -- modules must have a dict! */
+    PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
+		 PyModule_GetName(m));
+    return SWIG_ERROR;
+  }
+  if (PyDict_SetItemString(dict, name, o))
+    return SWIG_ERROR;
+  Py_DECREF(o);
+  return SWIG_OK;
+}
+#endif
+
+SWIGRUNTIME void
+SWIG_Python_DestroyModule(void *vptr)
+{
+  swig_module_info *swig_module = (swig_module_info *) vptr;
+  swig_type_info **types = swig_module->types;
+  size_t i;
+  for (i =0; i < swig_module->size; ++i) {
+    swig_type_info *ty = types[i];
+    if (ty->owndata) {
+      SwigPyClientData *data = (SwigPyClientData *) ty->clientdata;
+      if (data) SwigPyClientData_Del(data);
+    }
+  }
+  Py_DECREF(SWIG_This());
+}
+
+SWIGRUNTIME void
+SWIG_Python_SetModule(swig_module_info *swig_module) {
+  static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} };/* Sentinel */
+
+#if PY_VERSION_HEX >= 0x03000000
+ /* Add a dummy module object into sys.modules */
+  PyObject *module = PyImport_AddModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION);
+#else
+  PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION,
+				   swig_empty_runtime_method_table);
+#endif
+  PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule);
+  if (pointer && module) {
+    PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer);
+  } else {
+    Py_XDECREF(pointer);
+  }
+}
+
+/* The python cached type query */
+SWIGRUNTIME PyObject *
+SWIG_Python_TypeCache(void) {
+  static PyObject *SWIG_STATIC_POINTER(cache) = PyDict_New();
+  return cache;
+}
+
+SWIGRUNTIME swig_type_info *
+SWIG_Python_TypeQuery(const char *type)
+{
+  PyObject *cache = SWIG_Python_TypeCache();
+  PyObject *key = SWIG_Python_str_FromChar(type); 
+  PyObject *obj = PyDict_GetItem(cache, key);
+  swig_type_info *descriptor;
+  if (obj) {
+    descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
+  } else {
+    swig_module_info *swig_module = SWIG_Python_GetModule();
+    descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
+    if (descriptor) {
+      obj = PyCObject_FromVoidPtr(descriptor, NULL);
+      PyDict_SetItem(cache, key, obj);
+      Py_DECREF(obj);
+    }
+  }
+  Py_DECREF(key);
+  return descriptor;
+}
+
+/* 
+   For backward compatibility only
+*/
+#define SWIG_POINTER_EXCEPTION  0
+#define SWIG_arg_fail(arg)      SWIG_Python_ArgFail(arg)
+#define SWIG_MustGetPtr(p, type, argnum, flags)  SWIG_Python_MustGetPtr(p, type, argnum, flags)
+
+SWIGRUNTIME int
+SWIG_Python_AddErrMesg(const char* mesg, int infront)
+{  
+  if (PyErr_Occurred()) {
+    PyObject *type = 0;
+    PyObject *value = 0;
+    PyObject *traceback = 0;
+    PyErr_Fetch(&type, &value, &traceback);
+    if (value) {
+      char *tmp;
+      PyObject *old_str = PyObject_Str(value);
+      Py_XINCREF(type);
+      PyErr_Clear();
+      if (infront) {
+	PyErr_Format(type, "%s %s", mesg, tmp = SWIG_Python_str_AsChar(old_str));
+      } else {
+	PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg);
+      }
+      SWIG_Python_str_DelForPy3(tmp);
+      Py_DECREF(old_str);
+    }
+    return 1;
+  } else {
+    return 0;
+  }
+}
+  
+SWIGRUNTIME int
+SWIG_Python_ArgFail(int argnum)
+{
+  if (PyErr_Occurred()) {
+    /* add information about failing argument */
+    char mesg[256];
+    PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum);
+    return SWIG_Python_AddErrMesg(mesg, 1);
+  } else {
+    return 0;
+  }
+}
+
+SWIGRUNTIMEINLINE const char *
+SwigPyObject_GetDesc(PyObject *self)
+{
+  SwigPyObject *v = (SwigPyObject *)self;
+  swig_type_info *ty = v ? v->ty : 0;
+  return ty ? ty->str : (char*)"";
+}
+
+SWIGRUNTIME void
+SWIG_Python_TypeError(const char *type, PyObject *obj)
+{
+  if (type) {
+#if defined(SWIG_COBJECT_TYPES)
+    if (obj && SwigPyObject_Check(obj)) {
+      const char *otype = (const char *) SwigPyObject_GetDesc(obj);
+      if (otype) {
+	PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'SwigPyObject(%s)' is received",
+		     type, otype);
+	return;
+      }
+    } else 
+#endif      
+    {
+      const char *otype = (obj ? obj->ob_type->tp_name : 0); 
+      if (otype) {
+	PyObject *str = PyObject_Str(obj);
+	const char *cstr = str ? SWIG_Python_str_AsChar(str) : 0;
+	if (cstr) {
+	  PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received",
+		       type, otype, cstr);
+          SWIG_Python_str_DelForPy3(cstr);
+	} else {
+	  PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received",
+		       type, otype);
+	}
+	Py_XDECREF(str);
+	return;
+      }
+    }   
+    PyErr_Format(PyExc_TypeError, "a '%s' is expected", type);
+  } else {
+    PyErr_Format(PyExc_TypeError, "unexpected type is received");
+  }
+}
+
+
+/* Convert a pointer value, signal an exception on a type mismatch */
+SWIGRUNTIME void *
+SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags) {
+  void *result;
+  if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) {
+    PyErr_Clear();
+#if SWIG_POINTER_EXCEPTION
+    if (flags) {
+      SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj);
+      SWIG_Python_ArgFail(argnum);
+    }
+#endif
+  }
+  return result;
+}
+
+
+#ifdef __cplusplus
+#if 0
+{ /* cc-mode */
+#endif
+}
+#endif
+
+
+
+#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) 
+
+#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else 
+
+
+
+/* -------- TYPES TABLE (BEGIN) -------- */
+
+#define SWIGTYPE_p_BYTE swig_types[0]
+#define SWIGTYPE_p_CSG_Array swig_types[1]
+#define SWIGTYPE_p_CSG_Buffer swig_types[2]
+#define SWIGTYPE_p_CSG_Bytes swig_types[3]
+#define SWIGTYPE_p_CSG_Bytes_Array swig_types[4]
+#define SWIGTYPE_p_CSG_Class_Statistics swig_types[5]
+#define SWIGTYPE_p_CSG_Cluster_Analysis swig_types[6]
+#define SWIGTYPE_p_CSG_Colors swig_types[7]
+#define SWIGTYPE_p_CSG_Data_Object swig_types[8]
+#define SWIGTYPE_p_CSG_Distance_Weighting swig_types[9]
+#define SWIGTYPE_p_CSG_File swig_types[10]
+#define SWIGTYPE_p_CSG_Formula swig_types[11]
+#define SWIGTYPE_p_CSG_Formula_TSG_Formula_Item swig_types[12]
+#define SWIGTYPE_p_CSG_Grid swig_types[13]
+#define SWIGTYPE_p_CSG_Grid_Cell_Addressor swig_types[14]
+#define SWIGTYPE_p_CSG_Grid_Pyramid swig_types[15]
+#define SWIGTYPE_p_CSG_Grid_Radius swig_types[16]
+#define SWIGTYPE_p_CSG_Grid_Stack swig_types[17]
+#define SWIGTYPE_p_CSG_Grid_System swig_types[18]
+#define SWIGTYPE_p_CSG_Index swig_types[19]
+#define SWIGTYPE_p_CSG_Matrix swig_types[20]
+#define SWIGTYPE_p_CSG_MetaData swig_types[21]
+#define SWIGTYPE_p_CSG_Module swig_types[22]
+#define SWIGTYPE_p_CSG_Module_Grid swig_types[23]
+#define SWIGTYPE_p_CSG_Module_Grid_Interactive swig_types[24]
+#define SWIGTYPE_p_CSG_Module_Interactive swig_types[25]
+#define SWIGTYPE_p_CSG_Module_Interactive_Base swig_types[26]
+#define SWIGTYPE_p_CSG_Module_Library swig_types[27]
+#define SWIGTYPE_p_CSG_Module_Library_Interface swig_types[28]
+#define SWIGTYPE_p_CSG_PRQuadTree swig_types[29]
+#define SWIGTYPE_p_CSG_PRQuadTree_Item swig_types[30]
+#define SWIGTYPE_p_CSG_PRQuadTree_Leaf swig_types[31]
+#define SWIGTYPE_p_CSG_PRQuadTree_Node swig_types[32]
+#define SWIGTYPE_p_CSG_Parameter swig_types[33]
+#define SWIGTYPE_p_CSG_Parameter_Bool swig_types[34]
+#define SWIGTYPE_p_CSG_Parameter_Choice swig_types[35]
+#define SWIGTYPE_p_CSG_Parameter_Color swig_types[36]
+#define SWIGTYPE_p_CSG_Parameter_Colors swig_types[37]
+#define SWIGTYPE_p_CSG_Parameter_Data swig_types[38]
+#define SWIGTYPE_p_CSG_Parameter_Data_Object swig_types[39]
+#define SWIGTYPE_p_CSG_Parameter_Data_Object_Output swig_types[40]
+#define SWIGTYPE_p_CSG_Parameter_Degree swig_types[41]
+#define SWIGTYPE_p_CSG_Parameter_Double swig_types[42]
+#define SWIGTYPE_p_CSG_Parameter_File_Name swig_types[43]
+#define SWIGTYPE_p_CSG_Parameter_Fixed_Table swig_types[44]
+#define SWIGTYPE_p_CSG_Parameter_Font swig_types[45]
+#define SWIGTYPE_p_CSG_Parameter_Grid swig_types[46]
+#define SWIGTYPE_p_CSG_Parameter_Grid_List swig_types[47]
+#define SWIGTYPE_p_CSG_Parameter_Grid_System swig_types[48]
+#define SWIGTYPE_p_CSG_Parameter_Int swig_types[49]
+#define SWIGTYPE_p_CSG_Parameter_List swig_types[50]
+#define SWIGTYPE_p_CSG_Parameter_Node swig_types[51]
+#define SWIGTYPE_p_CSG_Parameter_Parameters swig_types[52]
+#define SWIGTYPE_p_CSG_Parameter_PointCloud swig_types[53]
+#define SWIGTYPE_p_CSG_Parameter_PointCloud_List swig_types[54]
+#define SWIGTYPE_p_CSG_Parameter_Range swig_types[55]
+#define SWIGTYPE_p_CSG_Parameter_Shapes swig_types[56]
+#define SWIGTYPE_p_CSG_Parameter_Shapes_List swig_types[57]
+#define SWIGTYPE_p_CSG_Parameter_String swig_types[58]
+#define SWIGTYPE_p_CSG_Parameter_TIN swig_types[59]
+#define SWIGTYPE_p_CSG_Parameter_TIN_List swig_types[60]
+#define SWIGTYPE_p_CSG_Parameter_Table swig_types[61]
+#define SWIGTYPE_p_CSG_Parameter_Table_Field swig_types[62]
+#define SWIGTYPE_p_CSG_Parameter_Table_List swig_types[63]
+#define SWIGTYPE_p_CSG_Parameter_Text swig_types[64]
+#define SWIGTYPE_p_CSG_Parameter_Value swig_types[65]
+#define SWIGTYPE_p_CSG_Parameters swig_types[66]
+#define SWIGTYPE_p_CSG_Parameters_Grid_Target swig_types[67]
+#define SWIGTYPE_p_CSG_Point swig_types[68]
+#define SWIGTYPE_p_CSG_PointCloud swig_types[69]
+#define SWIGTYPE_p_CSG_Point_Z swig_types[70]
+#define SWIGTYPE_p_CSG_Point_ZM swig_types[71]
+#define SWIGTYPE_p_CSG_Points swig_types[72]
+#define SWIGTYPE_p_CSG_Points_Int swig_types[73]
+#define SWIGTYPE_p_CSG_Points_Z swig_types[74]
+#define SWIGTYPE_p_CSG_Projection swig_types[75]
+#define SWIGTYPE_p_CSG_Projections swig_types[76]
+#define SWIGTYPE_p_CSG_Rect swig_types[77]
+#define SWIGTYPE_p_CSG_Rects swig_types[78]
+#define SWIGTYPE_p_CSG_Regression swig_types[79]
+#define SWIGTYPE_p_CSG_Regression_Multiple swig_types[80]
+#define SWIGTYPE_p_CSG_Shape swig_types[81]
+#define SWIGTYPE_p_CSG_Shape_Line swig_types[82]
+#define SWIGTYPE_p_CSG_Shape_Part swig_types[83]
+#define SWIGTYPE_p_CSG_Shape_Part_Z swig_types[84]
+#define SWIGTYPE_p_CSG_Shape_Part_ZM swig_types[85]
+#define SWIGTYPE_p_CSG_Shape_Point swig_types[86]
+#define SWIGTYPE_p_CSG_Shape_Point_Z swig_types[87]
+#define SWIGTYPE_p_CSG_Shape_Point_ZM swig_types[88]
+#define SWIGTYPE_p_CSG_Shape_Points swig_types[89]
+#define SWIGTYPE_p_CSG_Shape_Polygon swig_types[90]
+#define SWIGTYPE_p_CSG_Shape_Polygon_Part swig_types[91]
+#define SWIGTYPE_p_CSG_Shapes swig_types[92]
+#define SWIGTYPE_p_CSG_Shapes_OGIS_Converter swig_types[93]
+#define SWIGTYPE_p_CSG_Shapes_Search swig_types[94]
+#define SWIGTYPE_p_CSG_Simple_Statistics swig_types[95]
+#define SWIGTYPE_p_CSG_Spline swig_types[96]
+#define SWIGTYPE_p_CSG_Stack swig_types[97]
+#define SWIGTYPE_p_CSG_String swig_types[98]
+#define SWIGTYPE_p_CSG_Strings swig_types[99]
+#define SWIGTYPE_p_CSG_TIN swig_types[100]
+#define SWIGTYPE_p_CSG_TIN_Edge swig_types[101]
+#define SWIGTYPE_p_CSG_TIN_Node swig_types[102]
+#define SWIGTYPE_p_CSG_TIN_Triangle swig_types[103]
+#define SWIGTYPE_p_CSG_Table swig_types[104]
+#define SWIGTYPE_p_CSG_Table_Record swig_types[105]
+#define SWIGTYPE_p_CSG_Table_Value swig_types[106]
+#define SWIGTYPE_p_CSG_Table_Value_Binary swig_types[107]
+#define SWIGTYPE_p_CSG_Table_Value_Date swig_types[108]
+#define SWIGTYPE_p_CSG_Table_Value_Double swig_types[109]
+#define SWIGTYPE_p_CSG_Table_Value_Int swig_types[110]
+#define SWIGTYPE_p_CSG_Table_Value_String swig_types[111]
+#define SWIGTYPE_p_CSG_Thin_Plate_Spline swig_types[112]
+#define SWIGTYPE_p_CSG_Translator swig_types[113]
+#define SWIGTYPE_p_CSG_Trend swig_types[114]
+#define SWIGTYPE_p_CSG_UI_Parameter swig_types[115]
+#define SWIGTYPE_p_CSG_Vector swig_types[116]
+#define SWIGTYPE_p_DWORD swig_types[117]
+#define SWIGTYPE_p_ESG_Array_Growth swig_types[118]
+#define SWIGTYPE_p_ESG_Data_Object_Type swig_types[119]
+#define SWIGTYPE_p_ESG_Data_Type swig_types[120]
+#define SWIGTYPE_p_ESG_Distance_Weighting swig_types[121]
+#define SWIGTYPE_p_ESG_Grid_File_Format swig_types[122]
+#define SWIGTYPE_p_ESG_Grid_File_Key swig_types[123]
+#define SWIGTYPE_p_ESG_Grid_Interpolation swig_types[124]
+#define SWIGTYPE_p_ESG_Grid_Memory_Type swig_types[125]
+#define SWIGTYPE_p_ESG_Grid_Operation swig_types[126]
+#define SWIGTYPE_p_ESG_Grid_Pyramid_Generalisation swig_types[127]
+#define SWIGTYPE_p_ESG_Grid_Pyramid_Grow_Type swig_types[128]
+#define SWIGTYPE_p_ESG_Intersection swig_types[129]
+#define SWIGTYPE_p_ESG_MLB_Info swig_types[130]
+#define SWIGTYPE_p_ESG_Module_Error swig_types[131]
+#define SWIGTYPE_p_ESG_Module_Interactive_DragMode swig_types[132]
+#define SWIGTYPE_p_ESG_Module_Interactive_Mode swig_types[133]
+#define SWIGTYPE_p_ESG_Module_Type swig_types[134]
+#define SWIGTYPE_p_ESG_Parameter_Type swig_types[135]
+#define SWIGTYPE_p_ESG_Point_Type swig_types[136]
+#define SWIGTYPE_p_ESG_Projection_Format swig_types[137]
+#define SWIGTYPE_p_ESG_Projection_Type swig_types[138]
+#define SWIGTYPE_p_ESG_Regression_Type swig_types[139]
+#define SWIGTYPE_p_ESG_Shape_Copy_Mode swig_types[140]
+#define SWIGTYPE_p_ESG_Shape_Type swig_types[141]
+#define SWIGTYPE_p_ESG_Table_FileType swig_types[142]
+#define SWIGTYPE_p_ESG_Table_Index_Order swig_types[143]
+#define SWIGTYPE_p_ESG_UI_Callback_ID swig_types[144]
+#define SWIGTYPE_p_ESG_UI_DataObject_Update swig_types[145]
+#define SWIGTYPE_p_ESG_UI_MSG_STYLE swig_types[146]
+#define SWIGTYPE_p_ESG_Vertex_Type swig_types[147]
+#define SWIGTYPE_p_FILE swig_types[148]
+#define SWIGTYPE_p_SSG_Point swig_types[149]
+#define SWIGTYPE_p_SSG_Point_Int swig_types[150]
+#define SWIGTYPE_p_SSG_Point_Z swig_types[151]
+#define SWIGTYPE_p_SSG_Point_ZM swig_types[152]
+#define SWIGTYPE_p_SSG_Rect swig_types[153]
+#define SWIGTYPE_p_WORD swig_types[154]
+#define SWIGTYPE_p_a_32__wchar_t swig_types[155]
+#define SWIGTYPE_p_char swig_types[156]
+#define SWIGTYPE_p_double swig_types[157]
+#define SWIGTYPE_p_f_double__double swig_types[158]
+#define SWIGTYPE_p_f_enum_ESG_UI_Callback_ID_r_CSG_UI_Parameter_r_CSG_UI_Parameter__int swig_types[159]
+#define SWIGTYPE_p_f_p_CSG_Parameter__int swig_types[160]
+#define SWIGTYPE_p_f_q_const__int_q_const__int__int swig_types[161]
+#define SWIGTYPE_p_int swig_types[162]
+#define SWIGTYPE_p_long swig_types[163]
+#define SWIGTYPE_p_p_double swig_types[164]
+#define SWIGTYPE_p_p_void swig_types[165]
+#define SWIGTYPE_p_p_wchar_t swig_types[166]
+#define SWIGTYPE_p_void swig_types[167]
+#define SWIGTYPE_p_wchar_t swig_types[168]
+#define SWIGTYPE_p_wxFont swig_types[169]
+static swig_type_info *swig_types[171];
+static swig_module_info swig_module = {swig_types, 170, 0, 0, 0, 0};
+#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
+#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
+
+/* -------- TYPES TABLE (END) -------- */
+
+#if (PY_VERSION_HEX <= 0x02000000)
+# if !defined(SWIG_PYTHON_CLASSIC)
+#  error "This python version requires swig to be run with the '-classic' option"
+# endif
+#endif
+
+/*-----------------------------------------------
+              @(target):= _saga_api.so
+  ------------------------------------------------*/
+#if PY_VERSION_HEX >= 0x03000000
+#  define SWIG_init    PyInit__saga_api
+
+#else
+#  define SWIG_init    init_saga_api
+
+#endif
+#define SWIG_name    "_saga_api"
+
+#define SWIGVERSION 0x010340 
+#define SWIG_VERSION SWIGVERSION
+
+
+#define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a)) 
+#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a)) 
+
+
+#include <stdexcept>
+
+
+namespace swig {
+  class SwigPtr_PyObject {
+  protected:
+    PyObject *_obj;
+
+  public:
+    SwigPtr_PyObject() :_obj(0)
+    {
+    }
+
+    SwigPtr_PyObject(const SwigPtr_PyObject& item) : _obj(item._obj)
+    {
+      Py_XINCREF(_obj);      
+    }
+    
+    SwigPtr_PyObject(PyObject *obj, bool initial_ref = true) :_obj(obj)
+    {
+      if (initial_ref) {
+        Py_XINCREF(_obj);
+      }
+    }
+    
+    SwigPtr_PyObject & operator=(const SwigPtr_PyObject& item) 
+    {
+      Py_XINCREF(item._obj);
+      Py_XDECREF(_obj);
+      _obj = item._obj;
+      return *this;      
+    }
+    
+    ~SwigPtr_PyObject() 
+    {
+      Py_XDECREF(_obj);
+    }
+    
+    operator PyObject *() const
+    {
+      return _obj;
+    }
+
+    PyObject *operator->() const
+    {
+      return _obj;
+    }
+  };
+}
+
+
+namespace swig {
+  struct SwigVar_PyObject : SwigPtr_PyObject {
+    SwigVar_PyObject(PyObject* obj = 0) : SwigPtr_PyObject(obj, false) { }
+    
+    SwigVar_PyObject & operator = (PyObject* obj)
+    {
+      Py_XDECREF(_obj);
+      _obj = obj;
+      return *this;      
+    }
+  };
+}
+
+
+#include "api_core.h"
+#include "dataobject.h"
+#include "geo_tools.h"
+#include "grid.h"
+#include "grid_pyramid.h"
+#include "mat_tools.h"
+#include "metadata.h"
+#include "module.h"
+#include "module_library.h"
+#include "parameters.h"
+#include "pointcloud.h"
+#include "saga_api.h"
+#include "shapes.h"
+#include "table.h"
+#include "table_dbase.h"
+#include "table_value.h"
+#include "tin.h"
+
+
+  #define SWIG_From_long   PyInt_FromLong 
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_From_int  (int value)
+{    
+  return SWIG_From_long  (value);
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_double (PyObject *obj, double *val)
+{
+  int res = SWIG_TypeError;
+  if (PyFloat_Check(obj)) {
+    if (val) *val = PyFloat_AsDouble(obj);
+    return SWIG_OK;
+  } else if (PyInt_Check(obj)) {
+    if (val) *val = PyInt_AsLong(obj);
+    return SWIG_OK;
+  } else if (PyLong_Check(obj)) {
+    double v = PyLong_AsDouble(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_OK;
+    } else {
+      PyErr_Clear();
+    }
+  }
+#ifdef SWIG_PYTHON_CAST_MODE
+  {
+    int dispatch = 0;
+    double d = PyFloat_AsDouble(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = d;
+      return SWIG_AddCast(SWIG_OK);
+    } else {
+      PyErr_Clear();
+    }
+    if (!dispatch) {
+      long v = PyLong_AsLong(obj);
+      if (!PyErr_Occurred()) {
+	if (val) *val = v;
+	return SWIG_AddCast(SWIG_AddCast(SWIG_OK));
+      } else {
+	PyErr_Clear();
+      }
+    }
+  }
+#endif
+  return res;
+}
+
+
+#include <float.h>
+
+
+#include <math.h>
+
+
+SWIGINTERNINLINE int
+SWIG_CanCastAsInteger(double *d, double min, double max) {
+  double x = *d;
+  if ((min <= x && x <= max)) {
+   double fx = floor(x);
+   double cx = ceil(x);
+   double rd =  ((x - fx) < 0.5) ? fx : cx; /* simple rint */
+   if ((errno == EDOM) || (errno == ERANGE)) {
+     errno = 0;
+   } else {
+     double summ, reps, diff;
+     if (rd < x) {
+       diff = x - rd;
+     } else if (rd > x) {
+       diff = rd - x;
+     } else {
+       return 1;
+     }
+     summ = rd + x;
+     reps = diff/summ;
+     if (reps < 8*DBL_EPSILON) {
+       *d = rd;
+       return 1;
+     }
+   }
+  }
+  return 0;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val) 
+{
+  if (PyInt_Check(obj)) {
+    long v = PyInt_AsLong(obj);
+    if (v >= 0) {
+      if (val) *val = v;
+      return SWIG_OK;
+    } else {
+      return SWIG_OverflowError;
+    }
+  } else if (PyLong_Check(obj)) {
+    unsigned long v = PyLong_AsUnsignedLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_OK;
+    } else {
+      PyErr_Clear();
+    }
+  }
+#ifdef SWIG_PYTHON_CAST_MODE
+  {
+    int dispatch = 0;
+    unsigned long v = PyLong_AsUnsignedLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_AddCast(SWIG_OK);
+    } else {
+      PyErr_Clear();
+    }
+    if (!dispatch) {
+      double d;
+      int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d));
+      if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) {
+	if (val) *val = (unsigned long)(d);
+	return res;
+      }
+    }
+  }
+#endif
+  return SWIG_TypeError;
+}
+
+
+SWIGINTERNINLINE int
+SWIG_AsVal_size_t (PyObject * obj, size_t *val)
+{
+  unsigned long v;
+  int res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0);
+  if (SWIG_IsOK(res) && val) *val = static_cast< size_t >(v);
+  return res;
+}
+
+
+#include <limits.h>
+#if !defined(SWIG_NO_LLONG_MAX)
+# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
+#   define LLONG_MAX __LONG_LONG_MAX__
+#   define LLONG_MIN (-LLONG_MAX - 1LL)
+#   define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
+# endif
+#endif
+
+
+SWIGINTERN int
+SWIG_AsVal_long (PyObject *obj, long* val)
+{
+  if (PyInt_Check(obj)) {
+    if (val) *val = PyInt_AsLong(obj);
+    return SWIG_OK;
+  } else if (PyLong_Check(obj)) {
+    long v = PyLong_AsLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_OK;
+    } else {
+      PyErr_Clear();
+    }
+  }
+#ifdef SWIG_PYTHON_CAST_MODE
+  {
+    int dispatch = 0;
+    long v = PyInt_AsLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_AddCast(SWIG_OK);
+    } else {
+      PyErr_Clear();
+    }
+    if (!dispatch) {
+      double d;
+      int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d));
+      if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) {
+	if (val) *val = (long)(d);
+	return res;
+      }
+    }
+  }
+#endif
+  return SWIG_TypeError;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_int (PyObject * obj, int *val)
+{
+  long v;
+  int res = SWIG_AsVal_long (obj, &v);
+  if (SWIG_IsOK(res)) {
+    if ((v < INT_MIN || v > INT_MAX)) {
+      return SWIG_OverflowError;
+    } else {
+      if (val) *val = static_cast< int >(v);
+    }
+  }  
+  return res;
+}
+
+
+SWIGINTERN swig_type_info*
+SWIG_pchar_descriptor(void)
+{
+  static int init = 0;
+  static swig_type_info* info = 0;
+  if (!init) {
+    info = SWIG_TypeQuery("_p_char");
+    init = 1;
+  }
+  return info;
+}
+
+
+SWIGINTERN int
+SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
+{
+#if PY_VERSION_HEX>=0x03000000
+  if (PyUnicode_Check(obj))
+#else  
+  if (PyString_Check(obj))
+#endif
+  {
+    char *cstr; Py_ssize_t len;
+#if PY_VERSION_HEX>=0x03000000
+    if (!alloc && cptr) {
+        /* We can't allow converting without allocation, since the internal
+           representation of string in Python 3 is UCS-2/UCS-4 but we require
+           a UTF-8 representation.
+           TODO(bhy) More detailed explanation */
+        return SWIG_RuntimeError;
+    }
+    obj = PyUnicode_AsUTF8String(obj);
+    PyBytes_AsStringAndSize(obj, &cstr, &len);
+    if(alloc) *alloc = SWIG_NEWOBJ;
+#else
+    PyString_AsStringAndSize(obj, &cstr, &len);
+#endif
+    if (cptr) {
+      if (alloc) {
+	/* 
+	   In python the user should not be able to modify the inner
+	   string representation. To warranty that, if you define
+	   SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string
+	   buffer is always returned.
+
+	   The default behavior is just to return the pointer value,
+	   so, be careful.
+	*/ 
+#if defined(SWIG_PYTHON_SAFE_CSTRINGS)
+	if (*alloc != SWIG_OLDOBJ) 
+#else
+	if (*alloc == SWIG_NEWOBJ) 
+#endif
+	  {
+	    *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1)));
+	    *alloc = SWIG_NEWOBJ;
+	  }
+	else {
+	  *cptr = cstr;
+	  *alloc = SWIG_OLDOBJ;
+	}
+      } else {
+        #if PY_VERSION_HEX>=0x03000000
+        assert(0); /* Should never reach here in Python 3 */
+        #endif
+	*cptr = SWIG_Python_str_AsChar(obj);
+      }
+    }
+    if (psize) *psize = len + 1;
+#if PY_VERSION_HEX>=0x03000000
+    Py_XDECREF(obj);
+#endif
+    return SWIG_OK;
+  } else {
+    swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+    if (pchar_descriptor) {
+      void* vptr = 0;
+      if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) {
+	if (cptr) *cptr = (char *) vptr;
+	if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0;
+	if (alloc) *alloc = SWIG_OLDOBJ;
+	return SWIG_OK;
+      }
+    }
+  }
+  return SWIG_TypeError;
+}
+
+
+
+
+
+SWIGINTERN int
+SWIG_AsVal_bool (PyObject *obj, bool *val)
+{
+  int r = PyObject_IsTrue(obj);
+  if (r == -1)
+    return SWIG_ERROR;
+  if (val) *val = r ? true : false;
+  return SWIG_OK;
+}
+
+
+  #define SWIG_From_double   PyFloat_FromDouble 
+
+
+#include <wchar.h>
+#include <limits.h>
+#ifndef WCHAR_MIN
+#  define WCHAR_MIN 0
+#endif
+#ifndef WCHAR_MAX
+#  define WCHAR_MAX 65535
+#endif
+
+
+SWIGINTERN swig_type_info*
+SWIG_pwchar_descriptor()
+{
+  static int init = 0;
+  static swig_type_info* info = 0;
+  if (!init) {
+    info = SWIG_TypeQuery("_p_wchar_t");
+    init = 1;
+  }
+  return info;
+}
+
+
+SWIGINTERN int
+SWIG_AsWCharPtrAndSize(PyObject *obj, wchar_t **cptr, size_t *psize, int *alloc)
+{
+  PyObject *tmp = 0;
+  int isunicode = PyUnicode_Check(obj);
+#if PY_VERSION_HEX < 0x03000000
+  if (!isunicode && PyString_Check(obj)) {
+    if (cptr) {
+      obj = tmp = PyUnicode_FromObject(obj);
+    }
+    isunicode = 1;
+  }
+#endif
+  if (isunicode) {
+    Py_ssize_t len = PyUnicode_GetSize(obj);
+    if (cptr) {
+      *cptr = (new wchar_t[len + 1]);
+      PyUnicode_AsWideChar((PyUnicodeObject *)obj, *cptr, len);
+      (*cptr)[len] = 0;
+    }
+    if (psize) *psize = (size_t) len + 1;
+    if (alloc) *alloc = cptr ? SWIG_NEWOBJ : 0;
+    Py_XDECREF(tmp);
+    return SWIG_OK;
+  } else {
+    swig_type_info* pwchar_descriptor = SWIG_pwchar_descriptor();
+    if (pwchar_descriptor) {
+      void * vptr = 0;
+      if (SWIG_ConvertPtr(obj, &vptr, pwchar_descriptor, 0) == SWIG_OK) {
+	if (cptr) *cptr = (wchar_t *)vptr;
+	if (psize) *psize = vptr ? (wcslen((wchar_t *)vptr) + 1) : 0;
+	return SWIG_OK;
+      }
+    }
+  }
+  return SWIG_TypeError;
+}
+
+
+
+
+
+SWIGINTERN int
+SWIG_AsWCharArray(PyObject * obj, wchar_t *val, size_t size)
+{ 
+  wchar_t* cptr = 0; size_t csize = 0; int alloc = SWIG_OLDOBJ;
+  int res = SWIG_AsWCharPtrAndSize(obj, &cptr, &csize, &alloc);
+  if (SWIG_IsOK(res)) {
+    if ((csize == size + 1) && cptr && !(cptr[csize-1])) --csize;
+    if (csize <= size) {
+      if (val) {
+	if (csize) memcpy(val, cptr, csize*sizeof(wchar_t));
+	if (csize < size) memset(val + csize, 0, (size - csize)*sizeof(wchar_t));
+      }
+      if (alloc == SWIG_NEWOBJ) {
+	delete[] cptr;
+	res = SWIG_DelNewMask(res);
+      }      
+      return res;
+    }
+    if (alloc == SWIG_NEWOBJ) delete[] cptr;
+  }
+  return SWIG_TypeError;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_wchar_t (PyObject * obj, wchar_t *val)
+{    
+  int res = SWIG_AsWCharArray(obj, val, 1);
+  if (!SWIG_IsOK(res)) {
+    long v;
+    res = SWIG_AddCast(SWIG_AsVal_long (obj, &v));
+    if (SWIG_IsOK(res)) {
+      if ((WCHAR_MIN <= v) && (v <= WCHAR_MAX)) {
+	if (val) *val = static_cast< wchar_t >(v);
+      } else {
+	res = SWIG_OverflowError;
+      }
+    }
+  }
+  return res;
+}
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_FromWCharPtrAndSize(const wchar_t * carray, size_t size)
+{
+  if (carray) {
+    if (size > INT_MAX) {
+      swig_type_info* pwchar_descriptor = SWIG_pwchar_descriptor();
+      return pwchar_descriptor ? 
+	SWIG_NewPointerObj(const_cast< wchar_t * >(carray), pwchar_descriptor, 0) : SWIG_Py_Void();
+    } else {
+      return PyUnicode_FromWideChar(carray, static_cast< int >(size));
+    }
+  } else {
+    return SWIG_Py_Void();
+  }
+}
+
+
+SWIGINTERNINLINE PyObject * 
+SWIG_FromWCharPtr(const wchar_t *cptr)
+{ 
+  return SWIG_FromWCharPtrAndSize(cptr, (cptr ? wcslen(cptr) : 0));
+}
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_FromCharPtrAndSize(const char* carray, size_t size)
+{
+  if (carray) {
+    if (size > INT_MAX) {
+      swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+      return pchar_descriptor ? 
+	SWIG_NewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void();
+    } else {
+#if PY_VERSION_HEX >= 0x03000000
+      return PyUnicode_FromStringAndSize(carray, static_cast< int >(size));
+#else
+      return PyString_FromStringAndSize(carray, static_cast< int >(size));
+#endif
+    }
+  } else {
+    return SWIG_Py_Void();
+  }
+}
+
+
+SWIGINTERNINLINE PyObject * 
+SWIG_FromCharPtr(const char *cptr)
+{ 
+  return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0));
+}
+
+
+SWIGINTERNINLINE PyObject* 
+SWIG_From_unsigned_SS_long  (unsigned long value)
+{
+  return (value > LONG_MAX) ?
+    PyLong_FromUnsignedLong(value) : PyInt_FromLong(static_cast< long >(value)); 
+}
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_From_size_t  (size_t value)
+{    
+  return SWIG_From_unsigned_SS_long  (static_cast< unsigned long >(value));
+}
+
+
+SWIGINTERNINLINE PyObject*
+  SWIG_From_bool  (bool value)
+{
+  return PyBool_FromLong(value ? 1 : 0);
+}
+
+
+SWIGINTERN int
+SWIG_AsCharArray(PyObject * obj, char *val, size_t size)
+{ 
+  char* cptr = 0; size_t csize = 0; int alloc = SWIG_OLDOBJ;
+  int res = SWIG_AsCharPtrAndSize(obj, &cptr, &csize, &alloc);
+  if (SWIG_IsOK(res)) {
+    if ((csize == size + 1) && cptr && !(cptr[csize-1])) --csize;
+    if (csize <= size) {
+      if (val) {
+	if (csize) memcpy(val, cptr, csize*sizeof(char));
+	if (csize < size) memset(val + csize, 0, (size - csize)*sizeof(char));
+      }
+      if (alloc == SWIG_NEWOBJ) {
+	delete[] cptr;
+	res = SWIG_DelNewMask(res);
+      }      
+      return res;
+    }
+    if (alloc == SWIG_NEWOBJ) delete[] cptr;
+  }
+  return SWIG_TypeError;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_char (PyObject * obj, char *val)
+{    
+  int res = SWIG_AsCharArray(obj, val, 1);
+  if (!SWIG_IsOK(res)) {
+    long v;
+    res = SWIG_AddCast(SWIG_AsVal_long (obj, &v));
+    if (SWIG_IsOK(res)) {
+      if ((CHAR_MIN <= v) && (v <= CHAR_MAX)) {
+	if (val) *val = static_cast< char >(v);
+      } else {
+	res = SWIG_OverflowError;
+      }
+    }
+  }
+  return res;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_short (PyObject * obj, short *val)
+{
+  long v;
+  int res = SWIG_AsVal_long (obj, &v);
+  if (SWIG_IsOK(res)) {
+    if ((v < SHRT_MIN || v > SHRT_MAX)) {
+      return SWIG_OverflowError;
+    } else {
+      if (val) *val = static_cast< short >(v);
+    }
+  }  
+  return res;
+}
+
+
+SWIGINTERN int
+SWIG_AsVal_float (PyObject * obj, float *val)
+{
+  double v;
+  int res = SWIG_AsVal_double (obj, &v);
+  if (SWIG_IsOK(res)) {
+    if ((v < -FLT_MAX || v > FLT_MAX)) {
+      return SWIG_OverflowError;
+    } else {
+      if (val) *val = static_cast< float >(v);
+    }
+  }  
+  return res;
+}
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_From_short  (short value)
+{    
+  return SWIG_From_long  (value);
+}
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_From_float  (float value)
+{    
+  return SWIG_From_double  (value);
+}
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_From_char  (char c) 
+{ 
+  return SWIG_FromCharPtrAndSize(&c,1);
+}
+
+
+typedef struct {
+		wchar_t					*name;
+		TSG_PFNC_Formula_1		f;			
+		int						n_pars;		
+		int						varying;	                                                                                                                                
+	} CSG_Formula_TSG_Formula_Item;
+
+
+
+SWIGINTERNINLINE PyObject *
+SWIG_From_wchar_t  (wchar_t c) 
+{ 
+  return SWIG_FromWCharPtrAndSize(&c,1);
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+SWIGINTERN PyObject *_wrap_SG_Malloc(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  size_t arg1 ;
+  size_t val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Malloc",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_size_t(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Malloc" "', argument " "1"" of type '" "size_t""'");
+  } 
+  arg1 = static_cast< size_t >(val1);
+  result = (void *)SG_Malloc(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Calloc(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  size_t arg1 ;
+  size_t arg2 ;
+  size_t val1 ;
+  int ecode1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Calloc",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_size_t(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Calloc" "', argument " "1"" of type '" "size_t""'");
+  } 
+  arg1 = static_cast< size_t >(val1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Calloc" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (void *)SG_Calloc(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Realloc(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  void *arg1 = (void *) 0 ;
+  size_t arg2 ;
+  int res1 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Realloc",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Realloc" "', argument " "1"" of type '" "void *""'"); 
+  }
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Realloc" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (void *)SG_Realloc(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Free(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  void *arg1 = (void *) 0 ;
+  int res1 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Free",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Free" "', argument " "1"" of type '" "void *""'"); 
+  }
+  SG_Free(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Swap_Bytes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  void *arg1 = (void *) 0 ;
+  int arg2 ;
+  int res1 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Swap_Bytes",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Swap_Bytes" "', argument " "1"" of type '" "void *""'"); 
+  }
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Swap_Bytes" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  SG_Swap_Bytes(arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Mem_Get_Int(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  char *arg1 = (char *) 0 ;
+  bool arg2 ;
+  int res1 ;
+  char *buf1 = 0 ;
+  int alloc1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Mem_Get_Int",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Mem_Get_Int" "', argument " "1"" of type '" "char const *""'");
+  }
+  arg1 = reinterpret_cast< char * >(buf1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Mem_Get_Int" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (int)SG_Mem_Get_Int((char const *)arg1,arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Mem_Set_Int(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  char *arg1 = (char *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  int res1 ;
+  char *buf1 = 0 ;
+  int alloc1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_Mem_Set_Int",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Mem_Set_Int" "', argument " "1"" of type '" "char *""'");
+  }
+  arg1 = reinterpret_cast< char * >(buf1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Mem_Set_Int" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Mem_Set_Int" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  SG_Mem_Set_Int(arg1,arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Mem_Get_Double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  char *arg1 = (char *) 0 ;
+  bool arg2 ;
+  int res1 ;
+  char *buf1 = 0 ;
+  int alloc1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Mem_Get_Double",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Mem_Get_Double" "', argument " "1"" of type '" "char const *""'");
+  }
+  arg1 = reinterpret_cast< char * >(buf1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Mem_Get_Double" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)SG_Mem_Get_Double((char const *)arg1,arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Mem_Set_Double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  char *arg1 = (char *) 0 ;
+  double arg2 ;
+  bool arg3 ;
+  int res1 ;
+  char *buf1 = 0 ;
+  int alloc1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_Mem_Set_Double",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Mem_Set_Double" "', argument " "1"" of type '" "char *""'");
+  }
+  arg1 = reinterpret_cast< char * >(buf1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Mem_Set_Double" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Mem_Set_Double" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  SG_Mem_Set_Double(arg1,arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_String__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_String")) SWIG_fail;
+  result = (CSG_String *)new CSG_String();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_String__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_String",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_String" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_String" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_String *)new CSG_String((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_String__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_String",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_String" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = (CSG_String *)new CSG_String((wchar_t const *)arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, SWIG_POINTER_NEW |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_String__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  char *arg1 = (char *) 0 ;
+  int res1 ;
+  char *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_String",&obj0)) SWIG_fail;
+  res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_String" "', argument " "1"" of type '" "char const *""'");
+  }
+  arg1 = reinterpret_cast< char * >(buf1);
+  result = (CSG_String *)new CSG_String((char const *)arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, SWIG_POINTER_NEW |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_String__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t arg1 ;
+  wchar_t val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_String",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_wchar_t(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_String" "', argument " "1"" of type '" "wchar_t""'");
+  } 
+  arg1 = static_cast< wchar_t >(val1);
+  result = (CSG_String *)new CSG_String(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_String(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_String__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_String__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_wchar_t(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CSG_String__SWIG_4(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_AsWCharPtrAndSize(argv[0], 0, NULL, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_String__SWIG_2(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_AsCharPtrAndSize(argv[0], 0, NULL, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_String__SWIG_3(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_String'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_String()\n"
+    "    CSG_String(CSG_String const &)\n"
+    "    CSG_String(wchar_t const *)\n"
+    "    CSG_String(char const *)\n"
+    "    CSG_String(wchar_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_String(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_String",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_String" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_c_str(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_String_c_str",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_c_str" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (wchar_t *)((CSG_String const *)arg1)->c_str();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_b_str(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_String_b_str",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_b_str" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (char *)(arg1)->b_str();
+  resultobj = SWIG_FromCharPtr((const char *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_String_Length",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Length" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = ((CSG_String const *)arg1)->Length();
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_String_Clear",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Clear" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  (arg1)->Clear();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Format__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  void *arg2 = 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_String_Format",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Format" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = CSG_String::Format((wchar_t const *)arg1,arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Format(PyObject *self, PyObject *args) {
+  PyObject *resultobj;
+  PyObject *varargs;
+  PyObject *newargs;
+  
+  newargs = PyTuple_GetSlice(args,0,1);
+  varargs = PyTuple_GetSlice(args,1,PyTuple_Size(args)+1);
+  resultobj = _wrap_CSG_String_Format__varargs__(self,newargs,varargs);
+  Py_XDECREF(newargs);
+  Py_XDECREF(varargs);
+  return resultobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Printf__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Printf",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Printf" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String_Printf" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (int)(arg1)->Printf((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Printf(PyObject *self, PyObject *args) {
+  PyObject *resultobj;
+  PyObject *varargs;
+  PyObject *newargs;
+  
+  newargs = PyTuple_GetSlice(args,0,2);
+  varargs = PyTuple_GetSlice(args,2,PyTuple_Size(args)+1);
+  resultobj = _wrap_CSG_String_Printf__varargs__(self,newargs,varargs);
+  Py_XDECREF(newargs);
+  Py_XDECREF(varargs);
+  return resultobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Scanf__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Scanf",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Scanf" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String_Scanf" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (int)(arg1)->Scanf((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Scanf(PyObject *self, PyObject *args) {
+  PyObject *resultobj;
+  PyObject *varargs;
+  PyObject *newargs;
+  
+  newargs = PyTuple_GetSlice(args,0,2);
+  varargs = PyTuple_GetSlice(args,2,PyTuple_Size(args)+1);
+  resultobj = _wrap_CSG_String_Scanf__varargs__(self,newargs,varargs);
+  Py_XDECREF(newargs);
+  Py_XDECREF(varargs);
+  return resultobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Append__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Append",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Append" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String_Append" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (CSG_String *) &(arg1)->Append((wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Append__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  wchar_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Append",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Append" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_wchar_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_Append" "', argument " "2"" of type '" "wchar_t""'");
+  } 
+  arg2 = static_cast< wchar_t >(val2);
+  result = (CSG_String *) &(arg1)->Append(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Append(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_wchar_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_String_Append__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_String_Append__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_String_Append'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Append(CSG_String *,wchar_t const *)\n"
+    "    Append(CSG_String *,wchar_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String___add____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String___add__" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String___add__" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_String___add__" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = ((CSG_String const *)arg1)->operator +((CSG_String const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String___add____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String___add__" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String___add__" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = ((CSG_String const *)arg1)->operator +((wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String___add____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  wchar_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String___add__" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_wchar_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String___add__" "', argument " "2"" of type '" "wchar_t""'");
+  } 
+  arg2 = static_cast< wchar_t >(val2);
+  result = ((CSG_String const *)arg1)->operator +(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String___add__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_String___add____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_wchar_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_String___add____SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_String___add____SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  Py_INCREF(Py_NotImplemented);
+  return Py_NotImplemented;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String___iadd____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String___iadd__" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String___iadd__" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_String___iadd__" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  (arg1)->operator +=((CSG_String const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String___iadd____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String___iadd__" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String___iadd__" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->operator +=((wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String___iadd____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  wchar_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String___iadd__" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_wchar_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String___iadd__" "', argument " "2"" of type '" "wchar_t""'");
+  } 
+  arg2 = static_cast< wchar_t >(val2);
+  (arg1)->operator +=(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String___iadd__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_String___iadd____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_wchar_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_String___iadd____SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_String___iadd____SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_String___iadd__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator +=(CSG_String *,CSG_String const &)\n"
+    "    operator +=(CSG_String *,wchar_t const *)\n"
+    "    operator +=(CSG_String *,wchar_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Cmp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Cmp",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Cmp" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String_Cmp" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_String_Cmp" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (int)((CSG_String const *)arg1)->Cmp((CSG_String const &)*arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_CmpNoCase(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_CmpNoCase",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_CmpNoCase" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String_CmpNoCase" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_String_CmpNoCase" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (int)((CSG_String const *)arg1)->CmpNoCase((CSG_String const &)*arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Make_Lower(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_String_Make_Lower",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Make_Lower" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_String *) &(arg1)->Make_Lower();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Make_Upper(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_String_Make_Upper",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Make_Upper" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_String *) &(arg1)->Make_Upper();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Replace__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_String_Replace",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Replace" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String_Replace" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_String_Replace" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_String_Replace" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (arg1)->Replace((wchar_t const *)arg2,(wchar_t const *)arg3,arg4);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Replace__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_String_Replace",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Replace" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String_Replace" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_String_Replace" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (arg1)->Replace((wchar_t const *)arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Replace(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_String_Replace__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_String_Replace__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_String_Replace'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Replace(CSG_String *,wchar_t const *,wchar_t const *,bool)\n"
+    "    Replace(CSG_String *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Remove__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Remove",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Remove" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_Remove" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (CSG_String *) &(arg1)->Remove(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Remove__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  size_t arg2 ;
+  size_t arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_String_Remove",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Remove" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_Remove" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  ecode3 = SWIG_AsVal_size_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_String_Remove" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  result = (CSG_String *) &(arg1)->Remove(arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Remove(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_String_Remove__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_String_Remove__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_String_Remove'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Remove(CSG_String *,size_t)\n"
+    "    Remove(CSG_String *,size_t,size_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Trim__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Trim",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Trim" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_Trim" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (int)(arg1)->Trim(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Trim__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_String_Trim",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Trim" "', argument " "1"" of type '" "CSG_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (int)(arg1)->Trim();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Trim(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_String_Trim__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_String_Trim__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_String_Trim'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Trim(CSG_String *,bool)\n"
+    "    Trim(CSG_String *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Find__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  wchar_t val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_String_Find",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Find" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_wchar_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_Find" "', argument " "2"" of type '" "wchar_t""'");
+  } 
+  arg2 = static_cast< wchar_t >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_String_Find" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (int)((CSG_String const *)arg1)->Find(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Find__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  wchar_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Find",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Find" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_wchar_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_Find" "', argument " "2"" of type '" "wchar_t""'");
+  } 
+  arg2 = static_cast< wchar_t >(val2);
+  result = (int)((CSG_String const *)arg1)->Find(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Find__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Find",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Find" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String_Find" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (int)((CSG_String const *)arg1)->Find((wchar_t const *)arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Find(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_wchar_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_String_Find__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_String_Find__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_wchar_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_String_Find__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_String_Find'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Find(CSG_String const *,wchar_t,bool)\n"
+    "    Find(CSG_String const *,wchar_t)\n"
+    "    Find(CSG_String const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Contains(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Contains",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Contains" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String_Contains" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)((CSG_String const *)arg1)->Contains((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_AfterFirst(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  wchar_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_AfterFirst",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_AfterFirst" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_wchar_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_AfterFirst" "', argument " "2"" of type '" "wchar_t""'");
+  } 
+  arg2 = static_cast< wchar_t >(val2);
+  result = ((CSG_String const *)arg1)->AfterFirst(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_AfterLast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  wchar_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_AfterLast",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_AfterLast" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_wchar_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_AfterLast" "', argument " "2"" of type '" "wchar_t""'");
+  } 
+  arg2 = static_cast< wchar_t >(val2);
+  result = ((CSG_String const *)arg1)->AfterLast(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_BeforeFirst(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  wchar_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_BeforeFirst",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_BeforeFirst" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_wchar_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_BeforeFirst" "', argument " "2"" of type '" "wchar_t""'");
+  } 
+  arg2 = static_cast< wchar_t >(val2);
+  result = ((CSG_String const *)arg1)->BeforeFirst(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_BeforeLast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  wchar_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  wchar_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_BeforeLast",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_BeforeLast" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_wchar_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_BeforeLast" "', argument " "2"" of type '" "wchar_t""'");
+  } 
+  arg2 = static_cast< wchar_t >(val2);
+  result = ((CSG_String const *)arg1)->BeforeLast(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Right(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Right",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Right" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_Right" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = ((CSG_String const *)arg1)->Right(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Mid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  size_t arg2 ;
+  size_t arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_String_Mid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Mid" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_Mid" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  ecode3 = SWIG_AsVal_size_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_String_Mid" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  result = ((CSG_String const *)arg1)->Mid(arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Mid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Mid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Mid" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_Mid" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = ((CSG_String const *)arg1)->Mid(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Mid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_String_Mid__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_String_Mid__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_String_Mid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Mid(CSG_String const *,size_t,size_t)\n"
+    "    Mid(CSG_String const *,size_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_Left(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_Left",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_Left" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_String_Left" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = ((CSG_String const *)arg1)->Left(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_asInt__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_String_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_asInt" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (int)((CSG_String const *)arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_asInt__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  int *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_asInt",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_asInt" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String_asInt" "', argument " "2"" of type '" "int &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_String_asInt" "', argument " "2"" of type '" "int &""'"); 
+  }
+  arg2 = reinterpret_cast< int * >(argp2);
+  result = (bool)((CSG_String const *)arg1)->asInt(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_asInt(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_String_asInt__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_int, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_String_asInt__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_String_asInt'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asInt(CSG_String const *)\n"
+    "    asInt(CSG_String const *,int &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_asDouble__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_String_asDouble",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_asDouble" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (double)((CSG_String const *)arg1)->asDouble();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_asDouble__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = (CSG_String *) 0 ;
+  double *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_String_asDouble",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_String_asDouble" "', argument " "1"" of type '" "CSG_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_String_asDouble" "', argument " "2"" of type '" "double &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_String_asDouble" "', argument " "2"" of type '" "double &""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  result = (bool)((CSG_String const *)arg1)->asDouble(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_String_asDouble(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_String_asDouble__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_String_asDouble__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_String_asDouble'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asDouble(CSG_String const *)\n"
+    "    asDouble(CSG_String const *,double &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_String_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_String, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Strings__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Strings *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Strings")) SWIG_fail;
+  result = (CSG_Strings *)new CSG_Strings();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Strings, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Strings__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Strings *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Strings *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Strings",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Strings,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Strings" "', argument " "1"" of type '" "CSG_Strings const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Strings" "', argument " "1"" of type '" "CSG_Strings const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Strings * >(argp1);
+  result = (CSG_Strings *)new CSG_Strings((CSG_Strings const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Strings, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Strings__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  wchar_t **arg2 = (wchar_t **) 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Strings *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Strings",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Strings" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_p_wchar_t, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Strings" "', argument " "2"" of type '" "wchar_t const **""'"); 
+  }
+  arg2 = reinterpret_cast< wchar_t ** >(argp2);
+  result = (CSG_Strings *)new CSG_Strings(arg1,(wchar_t const **)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Strings, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Strings(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Strings__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Strings, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Strings__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_p_wchar_t, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_new_CSG_Strings__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Strings'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Strings()\n"
+    "    CSG_Strings(CSG_Strings const &)\n"
+    "    CSG_Strings(int,wchar_t const **)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Strings(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Strings *arg1 = (CSG_Strings *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Strings",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Strings, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Strings" "', argument " "1"" of type '" "CSG_Strings *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Strings * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Strings_Clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Strings *arg1 = (CSG_Strings *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Strings_Clear",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Strings, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Strings_Clear" "', argument " "1"" of type '" "CSG_Strings *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Strings * >(argp1);
+  (arg1)->Clear();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Strings_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Strings *arg1 = (CSG_Strings *) 0 ;
+  CSG_Strings *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Strings_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Strings, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Strings_Assign" "', argument " "1"" of type '" "CSG_Strings *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Strings * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Strings,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Strings_Assign" "', argument " "2"" of type '" "CSG_Strings const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Strings_Assign" "', argument " "2"" of type '" "CSG_Strings const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Strings * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_Strings const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Strings_Add(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Strings *arg1 = (CSG_Strings *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Strings_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Strings, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Strings_Add" "', argument " "1"" of type '" "CSG_Strings *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Strings * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Strings_Add" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Strings_Add" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Add((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Strings___iadd__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Strings *arg1 = (CSG_Strings *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Strings *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Strings___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Strings, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Strings___iadd__" "', argument " "1"" of type '" "CSG_Strings *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Strings * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Strings___iadd__" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Strings___iadd__" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (CSG_Strings *) &(arg1)->operator +=((CSG_String const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Strings, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Strings_Set_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Strings *arg1 = (CSG_Strings *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Strings_Set_Count",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Strings, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Strings_Set_Count" "', argument " "1"" of type '" "CSG_Strings *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Strings * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Strings_Set_Count" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Count(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Strings_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Strings *arg1 = (CSG_Strings *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Strings_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Strings, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Strings_Get_Count" "', argument " "1"" of type '" "CSG_Strings const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Strings * >(argp1);
+  result = (int)((CSG_Strings const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Strings_Get_String(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Strings *arg1 = (CSG_Strings *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Strings_Get_String",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Strings, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Strings_Get_String" "', argument " "1"" of type '" "CSG_Strings const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Strings * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Strings_Get_String" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_String *) &((CSG_Strings const *)arg1)->Get_String(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Strings_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Strings, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Printf__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  void *arg2 = 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Printf",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Printf" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = (int)SG_Printf((wchar_t const *)arg1,arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Printf(PyObject *self, PyObject *args) {
+  PyObject *resultobj;
+  PyObject *varargs;
+  PyObject *newargs;
+  
+  newargs = PyTuple_GetSlice(args,0,1);
+  varargs = PyTuple_GetSlice(args,1,PyTuple_Size(args)+1);
+  resultobj = _wrap_SG_Printf__varargs__(self,newargs,varargs);
+  Py_XDECREF(newargs);
+  Py_XDECREF(varargs);
+  return resultobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_FPrintf__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+  PyObject *resultobj = 0;
+  FILE *arg1 = (FILE *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_FPrintf",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FILE, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_FPrintf" "', argument " "1"" of type '" "FILE *""'"); 
+  }
+  arg1 = reinterpret_cast< FILE * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_FPrintf" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (int)SG_FPrintf(arg1,(wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_FPrintf(PyObject *self, PyObject *args) {
+  PyObject *resultobj;
+  PyObject *varargs;
+  PyObject *newargs;
+  
+  newargs = PyTuple_GetSlice(args,0,2);
+  varargs = PyTuple_GetSlice(args,2,PyTuple_Size(args)+1);
+  resultobj = _wrap_SG_FPrintf__varargs__(self,newargs,varargs);
+  Py_XDECREF(newargs);
+  Py_XDECREF(varargs);
+  return resultobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Sscanf__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *arg3 = 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Sscanf",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Sscanf" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Sscanf" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (int)SG_Sscanf((wchar_t const *)arg1,(wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Sscanf(PyObject *self, PyObject *args) {
+  PyObject *resultobj;
+  PyObject *varargs;
+  PyObject *newargs;
+  
+  newargs = PyTuple_GetSlice(args,0,2);
+  varargs = PyTuple_GetSlice(args,2,PyTuple_Size(args)+1);
+  resultobj = _wrap_SG_Sscanf__varargs__(self,newargs,varargs);
+  Py_XDECREF(newargs);
+  Py_XDECREF(varargs);
+  return resultobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_CurrentTimeStr__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool arg1 ;
+  bool val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Get_CurrentTimeStr",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_bool(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_CurrentTimeStr" "', argument " "1"" of type '" "bool""'");
+  } 
+  arg1 = static_cast< bool >(val1);
+  result = SG_Get_CurrentTimeStr(arg1);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_CurrentTimeStr__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Get_CurrentTimeStr")) SWIG_fail;
+  result = SG_Get_CurrentTimeStr();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_CurrentTimeStr(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_SG_Get_CurrentTimeStr__SWIG_1(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_bool(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_SG_Get_CurrentTimeStr__SWIG_0(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Get_CurrentTimeStr'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Get_CurrentTimeStr(bool)\n"
+    "    SG_Get_CurrentTimeStr()\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UTF8_To_String(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_UTF8_To_String",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UTF8_To_String" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = SG_UTF8_To_String((wchar_t const *)arg1);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_String_To_UTF8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_String_To_UTF8",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_String_To_UTF8" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = SG_String_To_UTF8((wchar_t const *)arg1);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Degree_To_Double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Degree_To_Double",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Degree_To_Double" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = (double)SG_Degree_To_Double((wchar_t const *)arg1);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Double_To_Degree(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Double_To_Degree",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Double_To_Degree" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = SG_Double_To_Degree(arg1);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Date_To_Number(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Date_To_Number",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Date_To_Number" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = (int)SG_Date_To_Number((wchar_t const *)arg1);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Number_To_Date__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Number_To_Date",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Number_To_Date" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  result = SG_Number_To_Date(arg1);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Number_To_Date__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Number_To_Date",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Number_To_Date" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = SG_Number_To_Date(arg1);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Number_To_Date(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_SG_Number_To_Date__SWIG_0(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_SG_Number_To_Date__SWIG_1(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Number_To_Date'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Number_To_Date(int)\n"
+    "    SG_Number_To_Date(double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Significant_Decimals__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  int arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Get_Significant_Decimals",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_Significant_Decimals" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Get_Significant_Decimals" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)SG_Get_Significant_Decimals(arg1,arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Significant_Decimals__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Get_Significant_Decimals",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_Significant_Decimals" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = (int)SG_Get_Significant_Decimals(arg1);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Significant_Decimals(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_SG_Get_Significant_Decimals__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_SG_Get_Significant_Decimals__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Get_Significant_Decimals'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Get_Significant_Decimals(double,int)\n"
+    "    SG_Get_Significant_Decimals(double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Flip_Decimal_Separators(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Flip_Decimal_Separators",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Flip_Decimal_Separators" "', argument " "1"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Flip_Decimal_Separators" "', argument " "1"" of type '" "CSG_String &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  SG_Flip_Decimal_Separators(*arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_String__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  int arg2 ;
+  bool arg3 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_Get_String",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_String" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Get_String" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Get_String" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = SG_Get_String(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_String__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  int arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Get_String",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_String" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Get_String" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = SG_Get_String(arg1,arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_String__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Get_String",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_String" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = SG_Get_String(arg1);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_String(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_SG_Get_String__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_SG_Get_String__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_SG_Get_String__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Get_String'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Get_String(double,int,bool)\n"
+    "    SG_Get_String(double,int)\n"
+    "    SG_Get_String(double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Array__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Array")) SWIG_fail;
+  result = (CSG_Array *)new CSG_Array();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Array, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Array",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Array__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  size_t arg1 ;
+  size_t arg2 ;
+  TSG_Array_Growth arg3 ;
+  size_t val1 ;
+  int ecode1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Array *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Array",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_size_t(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Array" "', argument " "1"" of type '" "size_t""'");
+  } 
+  arg1 = static_cast< size_t >(val1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Array" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Array" "', argument " "3"" of type '" "TSG_Array_Growth""'");
+  } 
+  arg3 = static_cast< TSG_Array_Growth >(val3);
+  result = (CSG_Array *)new CSG_Array(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Array, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Array__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  size_t arg1 ;
+  size_t arg2 ;
+  size_t val1 ;
+  int ecode1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Array *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Array",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_size_t(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Array" "', argument " "1"" of type '" "size_t""'");
+  } 
+  arg1 = static_cast< size_t >(val1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Array" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (CSG_Array *)new CSG_Array(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Array, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Array__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  size_t arg1 ;
+  size_t val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Array *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Array",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_size_t(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Array" "', argument " "1"" of type '" "size_t""'");
+  } 
+  arg1 = static_cast< size_t >(val1);
+  result = (CSG_Array *)new CSG_Array(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Array, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Array(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Array__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_size_t(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CSG_Array__SWIG_3(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_size_t(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Array__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_size_t(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Array__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Array'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Array()\n"
+    "    CSG_Array(size_t,size_t,TSG_Array_Growth)\n"
+    "    CSG_Array(size_t,size_t)\n"
+    "    CSG_Array(size_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  size_t arg2 ;
+  size_t arg3 ;
+  TSG_Array_Growth arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Array_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Create" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Array_Create" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  ecode3 = SWIG_AsVal_size_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Array_Create" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Array_Create" "', argument " "4"" of type '" "TSG_Array_Growth""'");
+  } 
+  arg4 = static_cast< TSG_Array_Growth >(val4);
+  result = (void *)(arg1)->Create(arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  size_t arg2 ;
+  size_t arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Array_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Create" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Array_Create" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  ecode3 = SWIG_AsVal_size_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Array_Create" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  result = (void *)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Array_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Create" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Array_Create" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (void *)(arg1)->Create(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Array_Create__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Array_Create__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Array_Create__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Array_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Array *,size_t,size_t,TSG_Array_Growth)\n"
+    "    Create(CSG_Array *,size_t,size_t)\n"
+    "    Create(CSG_Array *,size_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Array_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Destroy" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Set_Growth(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  TSG_Array_Growth arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Array_Set_Growth",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Set_Growth" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Array_Set_Growth" "', argument " "2"" of type '" "TSG_Array_Growth""'");
+  } 
+  arg2 = static_cast< TSG_Array_Growth >(val2);
+  result = (bool)(arg1)->Set_Growth(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Get_Growth(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Array_Get_Growth",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Get_Growth" "', argument " "1"" of type '" "CSG_Array const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  result = (int)((CSG_Array const *)arg1)->Get_Growth();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Get_Size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Array_Get_Size",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Get_Size" "', argument " "1"" of type '" "CSG_Array const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  result = ((CSG_Array const *)arg1)->Get_Size();
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Get_Entry(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Array_Get_Entry",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Get_Entry" "', argument " "1"" of type '" "CSG_Array const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Array_Get_Entry" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (void *)((CSG_Array const *)arg1)->Get_Entry(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Get_Array__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Array_Get_Array",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Get_Array" "', argument " "1"" of type '" "CSG_Array const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  result = (void *)((CSG_Array const *)arg1)->Get_Array();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Get_Array__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Array_Get_Array",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Get_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Array_Get_Array" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (void *)(arg1)->Get_Array(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Get_Array(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Array_Get_Array__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Array_Get_Array__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Array_Get_Array'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Array(CSG_Array const *)\n"
+    "    Get_Array(CSG_Array *,size_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Set_Array__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  size_t arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Array_Set_Array",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Set_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Array_Set_Array" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Array_Set_Array" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Set_Array(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Set_Array__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Array_Set_Array",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Set_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Array_Set_Array" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (bool)(arg1)->Set_Array(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Set_Array__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  size_t arg2 ;
+  void **arg3 = (void **) 0 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Array_Set_Array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Set_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Array_Set_Array" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_p_void, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Array_Set_Array" "', argument " "3"" of type '" "void **""'"); 
+  }
+  arg3 = reinterpret_cast< void ** >(argp3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Array_Set_Array" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Set_Array(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Set_Array__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  size_t arg2 ;
+  void **arg3 = (void **) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Array_Set_Array",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Set_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Array_Set_Array" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_p_void, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Array_Set_Array" "', argument " "3"" of type '" "void **""'"); 
+  }
+  arg3 = reinterpret_cast< void ** >(argp3);
+  result = (bool)(arg1)->Set_Array(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Set_Array(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Array_Set_Array__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_p_void, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Array_Set_Array__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Array_Set_Array__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_p_void, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Array_Set_Array__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Array_Set_Array'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Array(CSG_Array *,size_t,bool)\n"
+    "    Set_Array(CSG_Array *,size_t)\n"
+    "    Set_Array(CSG_Array *,size_t,void **,bool)\n"
+    "    Set_Array(CSG_Array *,size_t,void **)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Inc_Array__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Array_Inc_Array",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Inc_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  result = (bool)(arg1)->Inc_Array();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Inc_Array__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  void **arg2 = (void **) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Array_Inc_Array",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Inc_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_p_void, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Array_Inc_Array" "', argument " "2"" of type '" "void **""'"); 
+  }
+  arg2 = reinterpret_cast< void ** >(argp2);
+  result = (bool)(arg1)->Inc_Array(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Inc_Array(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Array_Inc_Array__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_p_void, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Array_Inc_Array__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Array_Inc_Array'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Inc_Array(CSG_Array *)\n"
+    "    Inc_Array(CSG_Array *,void **)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Dec_Array__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Array_Dec_Array",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Dec_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Array_Dec_Array" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (bool)(arg1)->Dec_Array(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Dec_Array__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Array_Dec_Array",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Dec_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  result = (bool)(arg1)->Dec_Array();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Dec_Array__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  void **arg2 = (void **) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Array_Dec_Array",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Dec_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_p_void, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Array_Dec_Array" "', argument " "2"" of type '" "void **""'"); 
+  }
+  arg2 = reinterpret_cast< void ** >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Array_Dec_Array" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Dec_Array(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Dec_Array__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Array *arg1 = (CSG_Array *) 0 ;
+  void **arg2 = (void **) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Array_Dec_Array",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Array_Dec_Array" "', argument " "1"" of type '" "CSG_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Array * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_p_void, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Array_Dec_Array" "', argument " "2"" of type '" "void **""'"); 
+  }
+  arg2 = reinterpret_cast< void ** >(argp2);
+  result = (bool)(arg1)->Dec_Array(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Array_Dec_Array(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Array_Dec_Array__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_p_void, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Array_Dec_Array__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Array_Dec_Array__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Array, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_p_void, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Array_Dec_Array__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Array_Dec_Array'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Dec_Array(CSG_Array *,bool)\n"
+    "    Dec_Array(CSG_Array *)\n"
+    "    Dec_Array(CSG_Array *,void **,bool)\n"
+    "    Dec_Array(CSG_Array *,void **)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Array_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Array, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Buffer__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Buffer")) SWIG_fail;
+  result = (CSG_Buffer *)new CSG_Buffer();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Buffer_Create",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Create" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  result = (bool)(arg1)->Create();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Buffer__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Buffer *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Buffer",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Buffer,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Buffer" "', argument " "1"" of type '" "CSG_Buffer const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Buffer" "', argument " "1"" of type '" "CSG_Buffer const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  result = (CSG_Buffer *)new CSG_Buffer((CSG_Buffer const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  CSG_Buffer *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Create" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Buffer,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Buffer_Create" "', argument " "2"" of type '" "CSG_Buffer const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Buffer_Create" "', argument " "2"" of type '" "CSG_Buffer const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Buffer * >(argp2);
+  result = (bool)(arg1)->Create((CSG_Buffer const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Buffer__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  size_t arg1 ;
+  size_t val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Buffer *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Buffer",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_size_t(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Buffer" "', argument " "1"" of type '" "size_t""'");
+  } 
+  arg1 = static_cast< size_t >(val1);
+  result = (CSG_Buffer *)new CSG_Buffer(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Buffer(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Buffer__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Buffer__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_size_t(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CSG_Buffer__SWIG_2(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Buffer'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Buffer()\n"
+    "    CSG_Buffer(CSG_Buffer const &)\n"
+    "    CSG_Buffer(size_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Create" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Create" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Buffer_Create__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Buffer, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Buffer_Create__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_Create__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Buffer_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Buffer *)\n"
+    "    Create(CSG_Buffer *,CSG_Buffer const &)\n"
+    "    Create(CSG_Buffer *,size_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Buffer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Buffer",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Buffer" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Buffer_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Destroy" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Size__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  size_t arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Set_Size",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Size" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Size" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Size" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Set_Size(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Size__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_Set_Size",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Size" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Size" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (bool)(arg1)->Set_Size(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Size(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_Set_Size__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Set_Size__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Buffer_Set_Size'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Size(CSG_Buffer *,size_t,bool)\n"
+    "    Set_Size(CSG_Buffer *,size_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Inc_Size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_Inc_Size",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Inc_Size" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Inc_Size" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (bool)(arg1)->Inc_Size(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Get_Size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Buffer_Get_Size",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Get_Size" "', argument " "1"" of type '" "CSG_Buffer const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  result = ((CSG_Buffer const *)arg1)->Get_Size();
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Data__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  char *arg2 = (char *) 0 ;
+  size_t arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Buffer_Set_Data",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Data" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Buffer_Set_Data" "', argument " "2"" of type '" "char const *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  ecode3 = SWIG_AsVal_size_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Data" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Buffer_Set_Data" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Set_Data((char const *)arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Data__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  char *arg2 = (char *) 0 ;
+  size_t arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Set_Data",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Data" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Buffer_Set_Data" "', argument " "2"" of type '" "char const *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  ecode3 = SWIG_AsVal_size_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Data" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  result = (bool)(arg1)->Set_Data((char const *)arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Data(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Set_Data__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Buffer_Set_Data__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Buffer_Set_Data'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Data(CSG_Buffer *,char const *,size_t,bool)\n"
+    "    Set_Data(CSG_Buffer *,char const *,size_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Get_Data__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_Get_Data",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Get_Data" "', argument " "1"" of type '" "CSG_Buffer const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Get_Data" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (char *)((CSG_Buffer const *)arg1)->Get_Data(arg2);
+  resultobj = SWIG_FromCharPtr((const char *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Get_Data__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Buffer_Get_Data",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Get_Data" "', argument " "1"" of type '" "CSG_Buffer const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  result = (char *)((CSG_Buffer const *)arg1)->Get_Data();
+  resultobj = SWIG_FromCharPtr((const char *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Get_Data(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Buffer_Get_Data__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_Get_Data__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Buffer_Get_Data'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Data(CSG_Buffer const *,int)\n"
+    "    Get_Data(CSG_Buffer const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Add_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  char arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Add_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Add_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_char(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Add_Value" "', argument " "2"" of type '" "char""'");
+  } 
+  arg2 = static_cast< char >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Add_Value" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  (arg1)->Add_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Add_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  char arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_Add_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Add_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_char(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Add_Value" "', argument " "2"" of type '" "char""'");
+  } 
+  arg2 = static_cast< char >(val2);
+  (arg1)->Add_Value(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Add_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  short arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  short val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Add_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Add_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_short(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Add_Value" "', argument " "2"" of type '" "short""'");
+  } 
+  arg2 = static_cast< short >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Add_Value" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  (arg1)->Add_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Add_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  short arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  short val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_Add_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Add_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_short(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Add_Value" "', argument " "2"" of type '" "short""'");
+  } 
+  arg2 = static_cast< short >(val2);
+  (arg1)->Add_Value(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Add_Value__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Add_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Add_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Add_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Add_Value" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  (arg1)->Add_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Add_Value__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_Add_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Add_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Add_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  (arg1)->Add_Value(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Add_Value__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  float arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Add_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Add_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Add_Value" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Add_Value" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  (arg1)->Add_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Add_Value__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_Add_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Add_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Add_Value" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  (arg1)->Add_Value(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Add_Value__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  double arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Add_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Add_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Add_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Add_Value" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  (arg1)->Add_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Add_Value__SWIG_9(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_Add_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Add_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Add_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Add_Value(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Add_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_short(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_Add_Value__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_Add_Value__SWIG_5(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_float(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_Add_Value__SWIG_7(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_Add_Value__SWIG_9(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_char(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_Add_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_short(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Add_Value__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Add_Value__SWIG_4(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_float(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Add_Value__SWIG_6(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Add_Value__SWIG_8(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_char(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Add_Value__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Buffer_Add_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Value(CSG_Buffer *,char,bool)\n"
+    "    Add_Value(CSG_Buffer *,char)\n"
+    "    Add_Value(CSG_Buffer *,short,bool)\n"
+    "    Add_Value(CSG_Buffer *,short)\n"
+    "    Add_Value(CSG_Buffer *,int,bool)\n"
+    "    Add_Value(CSG_Buffer *,int)\n"
+    "    Add_Value(CSG_Buffer *,float,bool)\n"
+    "    Add_Value(CSG_Buffer *,float)\n"
+    "    Add_Value(CSG_Buffer *,double,bool)\n"
+    "    Add_Value(CSG_Buffer *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer___iadd____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  char arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Buffer *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer___iadd__" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_char(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer___iadd__" "', argument " "2"" of type '" "char""'");
+  } 
+  arg2 = static_cast< char >(val2);
+  result = (CSG_Buffer *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer___iadd____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  short arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  short val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Buffer *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer___iadd__" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_short(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer___iadd__" "', argument " "2"" of type '" "short""'");
+  } 
+  arg2 = static_cast< short >(val2);
+  result = (CSG_Buffer *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer___iadd____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Buffer *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer___iadd__" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer___iadd__" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Buffer *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer___iadd____SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Buffer *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer___iadd__" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer___iadd__" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  result = (CSG_Buffer *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer___iadd____SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Buffer *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer___iadd__" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer___iadd__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Buffer *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Buffer, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer___iadd__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_short(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer___iadd____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer___iadd____SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_float(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer___iadd____SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer___iadd____SWIG_4(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_char(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer___iadd____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Buffer___iadd__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator +=(CSG_Buffer *,char)\n"
+    "    operator +=(CSG_Buffer *,short)\n"
+    "    operator +=(CSG_Buffer *,int)\n"
+    "    operator +=(CSG_Buffer *,float)\n"
+    "    operator +=(CSG_Buffer *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  char arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  char val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Buffer_Set_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_char(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Value" "', argument " "3"" of type '" "char""'");
+  } 
+  arg3 = static_cast< char >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Buffer_Set_Value" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  (arg1)->Set_Value(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  char arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  char val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_char(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Value" "', argument " "3"" of type '" "char""'");
+  } 
+  arg3 = static_cast< char >(val3);
+  (arg1)->Set_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  short arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  short val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Buffer_Set_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_short(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Value" "', argument " "3"" of type '" "short""'");
+  } 
+  arg3 = static_cast< short >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Buffer_Set_Value" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  (arg1)->Set_Value(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  short arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  short val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_short(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Value" "', argument " "3"" of type '" "short""'");
+  } 
+  arg3 = static_cast< short >(val3);
+  (arg1)->Set_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Value__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Buffer_Set_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Buffer_Set_Value" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  (arg1)->Set_Value(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Value__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Value__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  float arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  float val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Buffer_Set_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_float(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Value" "', argument " "3"" of type '" "float""'");
+  } 
+  arg3 = static_cast< float >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Buffer_Set_Value" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  (arg1)->Set_Value(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Value__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  float arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  float val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_float(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Value" "', argument " "3"" of type '" "float""'");
+  } 
+  arg3 = static_cast< float >(val3);
+  (arg1)->Set_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Value__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  double arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Buffer_Set_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Buffer_Set_Value" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  (arg1)->Set_Value(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Value__SWIG_9(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_Set_Value" "', argument " "1"" of type '" "CSG_Buffer *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_Set_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Set_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_short(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Set_Value__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Set_Value__SWIG_5(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_float(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Set_Value__SWIG_7(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Set_Value__SWIG_9(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_char(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_Set_Value__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_short(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Buffer_Set_Value__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Buffer_Set_Value__SWIG_4(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_float(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Buffer_Set_Value__SWIG_6(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Buffer_Set_Value__SWIG_8(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_char(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Buffer_Set_Value__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Buffer_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Buffer *,int,char,bool)\n"
+    "    Set_Value(CSG_Buffer *,int,char)\n"
+    "    Set_Value(CSG_Buffer *,int,short,bool)\n"
+    "    Set_Value(CSG_Buffer *,int,short)\n"
+    "    Set_Value(CSG_Buffer *,int,int,bool)\n"
+    "    Set_Value(CSG_Buffer *,int,int)\n"
+    "    Set_Value(CSG_Buffer *,int,float,bool)\n"
+    "    Set_Value(CSG_Buffer *,int,float)\n"
+    "    Set_Value(CSG_Buffer *,int,double,bool)\n"
+    "    Set_Value(CSG_Buffer *,int,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asShort__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_asShort",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_asShort" "', argument " "1"" of type '" "CSG_Buffer const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_asShort" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_asShort" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (short)((CSG_Buffer const *)arg1)->asShort(arg2,arg3);
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asShort__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_asShort",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_asShort" "', argument " "1"" of type '" "CSG_Buffer const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_asShort" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (short)((CSG_Buffer const *)arg1)->asShort(arg2);
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asShort(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_asShort__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_asShort__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Buffer_asShort'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asShort(CSG_Buffer const *,int,bool)\n"
+    "    asShort(CSG_Buffer const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asInt__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_asInt",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_asInt" "', argument " "1"" of type '" "CSG_Buffer const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_asInt" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_asInt" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (int)((CSG_Buffer const *)arg1)->asInt(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asInt__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_asInt",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_asInt" "', argument " "1"" of type '" "CSG_Buffer const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_asInt" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Buffer const *)arg1)->asInt(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asInt(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_asInt__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_asInt__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Buffer_asInt'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asInt(CSG_Buffer const *,int,bool)\n"
+    "    asInt(CSG_Buffer const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asFloat__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_asFloat",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_asFloat" "', argument " "1"" of type '" "CSG_Buffer const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_asFloat" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_asFloat" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (float)((CSG_Buffer const *)arg1)->asFloat(arg2,arg3);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asFloat__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_asFloat",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_asFloat" "', argument " "1"" of type '" "CSG_Buffer const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_asFloat" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (float)((CSG_Buffer const *)arg1)->asFloat(arg2);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asFloat(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_asFloat__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_asFloat__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Buffer_asFloat'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asFloat(CSG_Buffer const *,int,bool)\n"
+    "    asFloat(CSG_Buffer const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asDouble__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Buffer_asDouble",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_asDouble" "', argument " "1"" of type '" "CSG_Buffer const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_asDouble" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Buffer_asDouble" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (double)((CSG_Buffer const *)arg1)->asDouble(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asDouble__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Buffer *arg1 = (CSG_Buffer *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Buffer_asDouble",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Buffer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Buffer_asDouble" "', argument " "1"" of type '" "CSG_Buffer const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Buffer * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Buffer_asDouble" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Buffer const *)arg1)->asDouble(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Buffer_asDouble(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Buffer_asDouble__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Buffer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Buffer_asDouble__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Buffer_asDouble'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asDouble(CSG_Buffer const *,int,bool)\n"
+    "    asDouble(CSG_Buffer const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Buffer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Buffer, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Bytes__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Bytes")) SWIG_fail;
+  result = (CSG_Bytes *)new CSG_Bytes();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Create",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Create" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (bool)(arg1)->Create();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Bytes__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Bytes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Bytes" "', argument " "1"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Bytes" "', argument " "1"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (CSG_Bytes *)new CSG_Bytes((CSG_Bytes const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  CSG_Bytes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Create" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_Create" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes_Create" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Bytes * >(argp2);
+  result = (bool)(arg1)->Create((CSG_Bytes const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Bytes__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  BYTE *arg1 = (BYTE *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Bytes",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_BYTE, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Bytes" "', argument " "1"" of type '" "BYTE const *""'"); 
+  }
+  arg1 = reinterpret_cast< BYTE * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Bytes" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Bytes *)new CSG_Bytes((BYTE const *)arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  BYTE *arg2 = (BYTE *) 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Create" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_BYTE, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_Create" "', argument " "2"" of type '" "BYTE const *""'"); 
+  }
+  arg2 = reinterpret_cast< BYTE * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Create((BYTE const *)arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Bytes__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Bytes",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Bytes" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = (CSG_Bytes *)new CSG_Bytes((wchar_t const *)arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_NEW |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Bytes(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Bytes__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Bytes__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_AsWCharPtrAndSize(argv[0], 0, NULL, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Bytes__SWIG_3(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_BYTE, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Bytes__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Bytes'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Bytes()\n"
+    "    CSG_Bytes(CSG_Bytes const &)\n"
+    "    CSG_Bytes(BYTE const *,int)\n"
+    "    CSG_Bytes(wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Create__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Create" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_Create" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Create((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Bytes_Create__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Bytes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Bytes_Create__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Bytes_Create__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_BYTE, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_Create__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Bytes *)\n"
+    "    Create(CSG_Bytes *,CSG_Bytes const &)\n"
+    "    Create(CSG_Bytes *,BYTE const *,int)\n"
+    "    Create(CSG_Bytes *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Bytes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Bytes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Bytes" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Destroy" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Clear",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Clear" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (bool)(arg1)->Clear();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Rewind(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Rewind",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Rewind" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  (arg1)->Rewind();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_is_EOF(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_is_EOF",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_is_EOF" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (bool)(arg1)->is_EOF();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Get_Count" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (int)((CSG_Bytes const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Get_Bytes__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  BYTE *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Get_Bytes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Get_Bytes" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (BYTE *)((CSG_Bytes const *)arg1)->Get_Bytes();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BYTE, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Get_Bytes__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Get_Bytes",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Get_Bytes" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Get_Bytes" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = ((CSG_Bytes const *)arg1)->Get_Bytes(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Bytes(static_cast< const CSG_Bytes& >(result))), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Get_Bytes(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Bytes_Get_Bytes__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Get_Bytes__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_Get_Bytes'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Bytes(CSG_Bytes const *)\n"
+    "    Get_Bytes(CSG_Bytes const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes___add__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes___add__" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes___add__" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = ((CSG_Bytes const *)arg1)->operator +(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Bytes(static_cast< const CSG_Bytes& >(result))), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Get_Byte(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  BYTE result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Get_Byte",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Get_Byte" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Get_Byte" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = ((CSG_Bytes const *)arg1)->Get_Byte(arg2);
+  resultobj = SWIG_NewPointerObj((new BYTE(static_cast< const BYTE& >(result))), SWIGTYPE_p_BYTE, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  CSG_Bytes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Assign" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_Assign" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes_Assign" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Bytes * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_Bytes const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  CSG_Bytes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Bytes * >(argp2);
+  result = (bool)(arg1)->Add((CSG_Bytes const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes___iadd____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  CSG_Bytes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes___iadd__" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Bytes * >(argp2);
+  result = (CSG_Bytes *) &(arg1)->operator +=((CSG_Bytes const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *arg2 = (void *) 0 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Bytes_Add",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "void *""'"); 
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_Add" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Bytes_Add" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Add(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  BYTE arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_BYTE,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "BYTE""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "BYTE""'");
+    } else {
+      BYTE * temp = reinterpret_cast< BYTE * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (bool)(arg1)->Add(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes___iadd____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  BYTE arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes___iadd__" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_BYTE,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "BYTE""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "BYTE""'");
+    } else {
+      BYTE * temp = reinterpret_cast< BYTE * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (CSG_Bytes *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  char arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_char(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "char""'");
+  } 
+  arg2 = static_cast< char >(val2);
+  result = (bool)(arg1)->Add(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes___iadd____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  char arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  char val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes___iadd__" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_char(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "char""'");
+  } 
+  arg2 = static_cast< char >(val2);
+  result = (CSG_Bytes *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  short arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  short val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_Add",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_short(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "short""'");
+  } 
+  arg2 = static_cast< short >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_Add" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Add(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  short arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  short val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_short(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "short""'");
+  } 
+  arg2 = static_cast< short >(val2);
+  result = (bool)(arg1)->Add(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes___iadd____SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  short arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  short val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes___iadd__" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_short(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "short""'");
+  } 
+  arg2 = static_cast< short >(val2);
+  result = (CSG_Bytes *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  WORD arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_Add",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_WORD,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "WORD""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "WORD""'");
+    } else {
+      WORD * temp = reinterpret_cast< WORD * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_Add" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Add(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  WORD arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_WORD,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "WORD""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "WORD""'");
+    } else {
+      WORD * temp = reinterpret_cast< WORD * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (bool)(arg1)->Add(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes___iadd____SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  WORD arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes___iadd__" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_WORD,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "WORD""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "WORD""'");
+    } else {
+      WORD * temp = reinterpret_cast< WORD * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (CSG_Bytes *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_Add",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_Add" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Add(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_9(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Add(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes___iadd____SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes___iadd__" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Bytes *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_10(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  DWORD arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_Add",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_DWORD,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "DWORD""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "DWORD""'");
+    } else {
+      DWORD * temp = reinterpret_cast< DWORD * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_Add" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Add(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_11(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  DWORD arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_DWORD,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "DWORD""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "DWORD""'");
+    } else {
+      DWORD * temp = reinterpret_cast< DWORD * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (bool)(arg1)->Add(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes___iadd____SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  DWORD arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes___iadd__" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_DWORD,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "DWORD""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "DWORD""'");
+    } else {
+      DWORD * temp = reinterpret_cast< DWORD * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (CSG_Bytes *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_12(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  float arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_Add",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_Add" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Add(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_13(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  result = (bool)(arg1)->Add(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes___iadd____SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  float arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  float val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes___iadd__" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_float(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "float""'");
+  } 
+  arg2 = static_cast< float >(val2);
+  result = (CSG_Bytes *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_14(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  double arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_Add",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_Add" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Add(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add__SWIG_15(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Add" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Add" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Add(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Add(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Bytes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Bytes_Add__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_BYTE, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Bytes_Add__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_WORD, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Bytes_Add__SWIG_7(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_DWORD, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Bytes_Add__SWIG_11(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_short(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Add__SWIG_5(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Add__SWIG_9(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_float(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Add__SWIG_13(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Add__SWIG_15(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_char(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Add__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_DWORD, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_Add__SWIG_10(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_WORD, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_Add__SWIG_6(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_short(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_Add__SWIG_4(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_Add__SWIG_8(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_float(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_Add__SWIG_12(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_Add__SWIG_14(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Bytes_Add__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_Add'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add(CSG_Bytes *,CSG_Bytes const &)\n"
+    "    Add(CSG_Bytes *,void *,int,bool)\n"
+    "    Add(CSG_Bytes *,BYTE)\n"
+    "    Add(CSG_Bytes *,char)\n"
+    "    Add(CSG_Bytes *,short,bool)\n"
+    "    Add(CSG_Bytes *,short)\n"
+    "    Add(CSG_Bytes *,WORD,bool)\n"
+    "    Add(CSG_Bytes *,WORD)\n"
+    "    Add(CSG_Bytes *,int,bool)\n"
+    "    Add(CSG_Bytes *,int)\n"
+    "    Add(CSG_Bytes *,DWORD,bool)\n"
+    "    Add(CSG_Bytes *,DWORD)\n"
+    "    Add(CSG_Bytes *,float,bool)\n"
+    "    Add(CSG_Bytes *,float)\n"
+    "    Add(CSG_Bytes *,double,bool)\n"
+    "    Add(CSG_Bytes *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes___iadd____SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes___iadd__" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes___iadd__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Bytes *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes___iadd__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Bytes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Bytes___iadd____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_BYTE, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Bytes___iadd____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_WORD, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Bytes___iadd____SWIG_4(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_DWORD, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Bytes___iadd____SWIG_6(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_short(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes___iadd____SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes___iadd____SWIG_5(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_float(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes___iadd____SWIG_7(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes___iadd____SWIG_8(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_char(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes___iadd____SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes___iadd__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator +=(CSG_Bytes *,CSG_Bytes const &)\n"
+    "    operator +=(CSG_Bytes *,BYTE)\n"
+    "    operator +=(CSG_Bytes *,char)\n"
+    "    operator +=(CSG_Bytes *,short)\n"
+    "    operator +=(CSG_Bytes *,WORD)\n"
+    "    operator +=(CSG_Bytes *,int)\n"
+    "    operator +=(CSG_Bytes *,DWORD)\n"
+    "    operator +=(CSG_Bytes *,float)\n"
+    "    operator +=(CSG_Bytes *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asByte(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  BYTE result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_asByte",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asByte" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asByte" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = ((CSG_Bytes const *)arg1)->asByte(arg2);
+  resultobj = SWIG_NewPointerObj((new BYTE(static_cast< const BYTE& >(result))), SWIGTYPE_p_BYTE, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asChar(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  char result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_asChar",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asChar" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asChar" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (char)((CSG_Bytes const *)arg1)->asChar(arg2);
+  resultobj = SWIG_From_char(static_cast< char >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asShort__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_asShort",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asShort" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asShort" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_asShort" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (short)((CSG_Bytes const *)arg1)->asShort(arg2,arg3);
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asShort__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_asShort",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asShort" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asShort" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (short)((CSG_Bytes const *)arg1)->asShort(arg2);
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asShort(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_asShort__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_asShort__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_asShort'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asShort(CSG_Bytes const *,int,bool)\n"
+    "    asShort(CSG_Bytes const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asWord__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  WORD result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_asWord",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asWord" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asWord" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_asWord" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = ((CSG_Bytes const *)arg1)->asWord(arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new WORD(static_cast< const WORD& >(result))), SWIGTYPE_p_WORD, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asWord__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  WORD result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_asWord",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asWord" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asWord" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = ((CSG_Bytes const *)arg1)->asWord(arg2);
+  resultobj = SWIG_NewPointerObj((new WORD(static_cast< const WORD& >(result))), SWIGTYPE_p_WORD, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asWord(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_asWord__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_asWord__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_asWord'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asWord(CSG_Bytes const *,int,bool)\n"
+    "    asWord(CSG_Bytes const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asInt__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_asInt",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asInt" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asInt" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_asInt" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (int)((CSG_Bytes const *)arg1)->asInt(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asInt__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_asInt",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asInt" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asInt" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Bytes const *)arg1)->asInt(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asInt(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_asInt__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_asInt__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_asInt'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asInt(CSG_Bytes const *,int,bool)\n"
+    "    asInt(CSG_Bytes const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asDWord__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  DWORD result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_asDWord",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asDWord" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asDWord" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_asDWord" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = ((CSG_Bytes const *)arg1)->asDWord(arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new DWORD(static_cast< const DWORD& >(result))), SWIGTYPE_p_DWORD, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asDWord__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  DWORD result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_asDWord",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asDWord" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asDWord" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = ((CSG_Bytes const *)arg1)->asDWord(arg2);
+  resultobj = SWIG_NewPointerObj((new DWORD(static_cast< const DWORD& >(result))), SWIGTYPE_p_DWORD, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asDWord(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_asDWord__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_asDWord__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_asDWord'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asDWord(CSG_Bytes const *,int,bool)\n"
+    "    asDWord(CSG_Bytes const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asFloat__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_asFloat",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asFloat" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asFloat" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_asFloat" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (float)((CSG_Bytes const *)arg1)->asFloat(arg2,arg3);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asFloat__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_asFloat",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asFloat" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asFloat" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (float)((CSG_Bytes const *)arg1)->asFloat(arg2);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asFloat(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_asFloat__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_asFloat__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_asFloat'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asFloat(CSG_Bytes const *,int,bool)\n"
+    "    asFloat(CSG_Bytes const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asDouble__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Bytes_asDouble",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asDouble" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asDouble" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Bytes_asDouble" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (double)((CSG_Bytes const *)arg1)->asDouble(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asDouble__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_asDouble",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_asDouble" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_asDouble" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Bytes const *)arg1)->asDouble(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_asDouble(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_asDouble__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Bytes_asDouble__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_asDouble'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asDouble(CSG_Bytes const *,int,bool)\n"
+    "    asDouble(CSG_Bytes const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Byte(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  BYTE result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Read_Byte",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Byte" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (arg1)->Read_Byte();
+  resultobj = SWIG_NewPointerObj((new BYTE(static_cast< const BYTE& >(result))), SWIGTYPE_p_BYTE, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Char(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Read_Char",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Char" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (char)(arg1)->Read_Char();
+  resultobj = SWIG_From_char(static_cast< char >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Short__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Read_Short",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Short" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Read_Short" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (short)(arg1)->Read_Short(arg2);
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Short__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Read_Short",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Short" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (short)(arg1)->Read_Short();
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Short(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Bytes_Read_Short__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Read_Short__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_Read_Short'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Read_Short(CSG_Bytes *,bool)\n"
+    "    Read_Short(CSG_Bytes *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Word__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  WORD result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Read_Word",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Word" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Read_Word" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (arg1)->Read_Word(arg2);
+  resultobj = SWIG_NewPointerObj((new WORD(static_cast< const WORD& >(result))), SWIGTYPE_p_WORD, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Word__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  WORD result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Read_Word",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Word" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (arg1)->Read_Word();
+  resultobj = SWIG_NewPointerObj((new WORD(static_cast< const WORD& >(result))), SWIGTYPE_p_WORD, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Word(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Bytes_Read_Word__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Read_Word__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_Read_Word'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Read_Word(CSG_Bytes *,bool)\n"
+    "    Read_Word(CSG_Bytes *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Int__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Read_Int",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Int" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Read_Int" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (int)(arg1)->Read_Int(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Int__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Read_Int",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Int" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (int)(arg1)->Read_Int();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Int(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Bytes_Read_Int__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Read_Int__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_Read_Int'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Read_Int(CSG_Bytes *,bool)\n"
+    "    Read_Int(CSG_Bytes *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_DWord__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  DWORD result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Read_DWord",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_DWord" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Read_DWord" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (arg1)->Read_DWord(arg2);
+  resultobj = SWIG_NewPointerObj((new DWORD(static_cast< const DWORD& >(result))), SWIGTYPE_p_DWORD, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_DWord__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  DWORD result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Read_DWord",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_DWord" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (arg1)->Read_DWord();
+  resultobj = SWIG_NewPointerObj((new DWORD(static_cast< const DWORD& >(result))), SWIGTYPE_p_DWORD, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_DWord(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Bytes_Read_DWord__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Read_DWord__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_Read_DWord'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Read_DWord(CSG_Bytes *,bool)\n"
+    "    Read_DWord(CSG_Bytes *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Float__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Read_Float",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Float" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Read_Float" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (float)(arg1)->Read_Float(arg2);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Float__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Read_Float",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Float" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (float)(arg1)->Read_Float();
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Float(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Bytes_Read_Float__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Read_Float__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_Read_Float'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Read_Float(CSG_Bytes *,bool)\n"
+    "    Read_Float(CSG_Bytes *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Double__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Read_Double",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Double" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Read_Double" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)(arg1)->Read_Double(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Double__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Read_Double",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Read_Double" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = (double)(arg1)->Read_Double();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Read_Double(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Bytes_Read_Double__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Bytes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Bytes_Read_Double__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Bytes_Read_Double'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Read_Double(CSG_Bytes *,bool)\n"
+    "    Read_Double(CSG_Bytes *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_toHexString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_toHexString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_toHexString" "', argument " "1"" of type '" "CSG_Bytes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  result = ((CSG_Bytes const *)arg1)->toHexString();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_fromHexString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = (CSG_Bytes *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_fromHexString",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_fromHexString" "', argument " "1"" of type '" "CSG_Bytes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Bytes_fromHexString" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Bytes_fromHexString" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->fromHexString((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Bytes_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Bytes, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Bytes_Array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes_Array *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Bytes_Array")) SWIG_fail;
+  result = (CSG_Bytes_Array *)new CSG_Bytes_Array();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes_Array, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Bytes_Array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes_Array *arg1 = (CSG_Bytes_Array *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Bytes_Array",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes_Array, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Bytes_Array" "', argument " "1"" of type '" "CSG_Bytes_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes_Array * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Array_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes_Array *arg1 = (CSG_Bytes_Array *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Array_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Array_Destroy" "', argument " "1"" of type '" "CSG_Bytes_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes_Array * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Array_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes_Array *arg1 = (CSG_Bytes_Array *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Array_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Array_Get_Count" "', argument " "1"" of type '" "CSG_Bytes_Array const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes_Array * >(argp1);
+  result = (int)((CSG_Bytes_Array const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Array_Get_Bytes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes_Array *arg1 = (CSG_Bytes_Array *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Bytes_Array_Get_Bytes",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Array_Get_Bytes" "', argument " "1"" of type '" "CSG_Bytes_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes_Array * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Bytes_Array_Get_Bytes" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Bytes *)(arg1)->Get_Bytes(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Bytes_Array_Add(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes_Array *arg1 = (CSG_Bytes_Array *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Bytes_Array_Add",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Bytes_Array, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Bytes_Array_Add" "', argument " "1"" of type '" "CSG_Bytes_Array *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes_Array * >(argp1);
+  result = (CSG_Bytes *)(arg1)->Add();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Bytes_Array_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Bytes_Array, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Stack(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  size_t arg1 ;
+  size_t val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Stack *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Stack",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_size_t(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Stack" "', argument " "1"" of type '" "size_t""'");
+  } 
+  arg1 = static_cast< size_t >(val1);
+  result = (CSG_Stack *)new CSG_Stack(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Stack, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Stack(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Stack *arg1 = (CSG_Stack *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Stack",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Stack, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Stack" "', argument " "1"" of type '" "CSG_Stack *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Stack * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Stack_Get_RecordSize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Stack *arg1 = (CSG_Stack *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Stack_Get_RecordSize",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Stack, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Stack_Get_RecordSize" "', argument " "1"" of type '" "CSG_Stack *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Stack * >(argp1);
+  result = (arg1)->Get_RecordSize();
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Stack_Get_Size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Stack *arg1 = (CSG_Stack *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Stack_Get_Size",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Stack, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Stack_Get_Size" "', argument " "1"" of type '" "CSG_Stack *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Stack * >(argp1);
+  result = (arg1)->Get_Size();
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Stack_Clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Stack *arg1 = (CSG_Stack *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Stack_Clear",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Stack, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Stack_Clear" "', argument " "1"" of type '" "CSG_Stack *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Stack * >(argp1);
+  (arg1)->Clear();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Stack_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Stack *arg1 = (CSG_Stack *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Stack_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Stack, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Stack_Destroy" "', argument " "1"" of type '" "CSG_Stack *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Stack * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Stack_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Stack, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN int Swig_var_gSG_Data_Type_Identifier_set(PyObject *) {
+  SWIG_Error(SWIG_AttributeError,"Variable gSG_Data_Type_Identifier is read-only.");
+  return 1;
+}
+
+
+SWIGINTERN PyObject *Swig_var_gSG_Data_Type_Identifier_get(void) {
+  PyObject *pyobj = 0;
+  
+  pyobj = SWIG_NewPointerObj(SWIG_as_voidptr(gSG_Data_Type_Identifier), SWIGTYPE_p_a_32__wchar_t,  0 );
+  return pyobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Data_Type_Get_Size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Data_Type_Get_Size",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Data_Type_Get_Size" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  result = SG_Data_Type_Get_Size(arg1);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Data_Type_Get_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Data_Type_Get_Name",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Data_Type_Get_Name" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  result = (wchar_t *)SG_Data_Type_Get_Name(arg1);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Data_Type_is_Numeric(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Data_Type_is_Numeric",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Data_Type_is_Numeric" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  result = (bool)SG_Data_Type_is_Numeric(arg1);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_DataType_Range_Check(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  double *arg2 = 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_DataType_Range_Check",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_DataType_Range_Check" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_DataType_Range_Check" "', argument " "2"" of type '" "double &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_DataType_Range_Check" "', argument " "2"" of type '" "double &""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  result = (bool)SG_DataType_Range_Check(arg1,*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_File__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_File")) SWIG_fail;
+  result = (CSG_File *)new CSG_File();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_File, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_File__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  int arg2 ;
+  bool arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_File *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_CSG_File",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_File" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_File" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_File" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_File" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_File" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (CSG_File *)new CSG_File((CSG_String const &)*arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_File, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_File__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_File *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_File",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_File" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_File" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_File" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_File" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (CSG_File *)new CSG_File((CSG_String const &)*arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_File, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_File__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_File *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_File",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_File" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_File" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_File" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_File *)new CSG_File((CSG_String const &)*arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_File, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_File__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_File *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_File",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_File" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_File" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_File *)new CSG_File((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_File, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_File(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_File__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_File__SWIG_4(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_File__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_File__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_CSG_File__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_File'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_File()\n"
+    "    CSG_File(CSG_String const &,int,bool,bool)\n"
+    "    CSG_File(CSG_String const &,int,bool)\n"
+    "    CSG_File(CSG_String const &,int)\n"
+    "    CSG_File(CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_File(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_File",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_File" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Attach(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  FILE *arg2 = (FILE *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Attach",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Attach" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_FILE, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Attach" "', argument " "2"" of type '" "FILE *""'"); 
+  }
+  arg2 = reinterpret_cast< FILE * >(argp2);
+  result = (bool)(arg1)->Attach(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Detach(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Detach",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Detach" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (bool)(arg1)->Detach();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Get_Stream(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  FILE *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Get_Stream",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Get_Stream" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (FILE *)((CSG_File const *)arg1)->Get_Stream();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FILE, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Get_UnicodeFlag(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Get_UnicodeFlag",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Get_UnicodeFlag" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (bool)((CSG_File const *)arg1)->Get_UnicodeFlag();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Set_UnicodeFlag(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Set_UnicodeFlag",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Set_UnicodeFlag" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_File_Set_UnicodeFlag" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (bool)(arg1)->Set_UnicodeFlag(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Open__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  bool arg4 ;
+  bool arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_File_Open",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Open" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Open" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_File_Open" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Open" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_File_Open" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_File_Open" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  result = (bool)(arg1)->Open((CSG_String const &)*arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Open__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_File_Open",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Open" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Open" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_File_Open" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Open" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_File_Open" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Open((CSG_String const &)*arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Open__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_File_Open",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Open" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Open" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_File_Open" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Open" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Open((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Open__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Open",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Open" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Open" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_File_Open" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Open((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Open(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_File_Open__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_File_Open__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_File_Open__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_File_Open__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_File_Open'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Open(CSG_File *,CSG_String const &,int,bool,bool)\n"
+    "    Open(CSG_File *,CSG_String const &,int,bool)\n"
+    "    Open(CSG_File *,CSG_String const &,int)\n"
+    "    Open(CSG_File *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Close(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Close",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Close" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (bool)(arg1)->Close();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_is_Open(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_is_Open",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_is_Open" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (bool)((CSG_File const *)arg1)->is_Open();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_is_EOF(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_is_EOF",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_is_EOF" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (bool)((CSG_File const *)arg1)->is_EOF();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Length",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Length" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (int)((CSG_File const *)arg1)->Length();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Seek__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_File_Seek",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Seek" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_File_Seek" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Seek" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)((CSG_File const *)arg1)->Seek(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Seek__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Seek",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Seek" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_File_Seek" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)((CSG_File const *)arg1)->Seek(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Seek(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_File_Seek__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_File_Seek__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_File_Seek'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Seek(CSG_File const *,int,int)\n"
+    "    Seek(CSG_File const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Seek_Start(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Seek_Start",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Seek_Start" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (bool)((CSG_File const *)arg1)->Seek_Start();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Seek_End(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Seek_End",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Seek_End" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (bool)((CSG_File const *)arg1)->Seek_End();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Tell(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Tell",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Tell" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (int)((CSG_File const *)arg1)->Tell();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Flush(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Flush",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Flush" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (bool)((CSG_File const *)arg1)->Flush();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Printf__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Printf",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Printf" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Printf" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (int)(arg1)->Printf((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Printf(PyObject *self, PyObject *args) {
+  PyObject *resultobj;
+  PyObject *varargs;
+  PyObject *newargs;
+  
+  newargs = PyTuple_GetSlice(args,0,2);
+  varargs = PyTuple_GetSlice(args,2,PyTuple_Size(args)+1);
+  resultobj = _wrap_CSG_File_Printf__varargs__(self,newargs,varargs);
+  Py_XDECREF(newargs);
+  Py_XDECREF(varargs);
+  return resultobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Scanf__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Scanf",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Scanf" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Scanf" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (int)((CSG_File const *)arg1)->Scanf((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Scanf(PyObject *self, PyObject *args) {
+  PyObject *resultobj;
+  PyObject *varargs;
+  PyObject *newargs;
+  
+  newargs = PyTuple_GetSlice(args,0,2);
+  varargs = PyTuple_GetSlice(args,2,PyTuple_Size(args)+1);
+  resultobj = _wrap_CSG_File_Scanf__varargs__(self,newargs,varargs);
+  Py_XDECREF(newargs);
+  Py_XDECREF(varargs);
+  return resultobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Get_Character(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Get_Character",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Get_Character" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (int)((CSG_File const *)arg1)->Get_Character();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Read__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *arg2 = (void *) 0 ;
+  size_t arg3 ;
+  size_t arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  size_t val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_File_Read",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Read" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Read" "', argument " "2"" of type '" "void *""'"); 
+  }
+  ecode3 = SWIG_AsVal_size_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Read" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  ecode4 = SWIG_AsVal_size_t(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_File_Read" "', argument " "4"" of type '" "size_t""'");
+  } 
+  arg4 = static_cast< size_t >(val4);
+  result = ((CSG_File const *)arg1)->Read(arg2,arg3,arg4);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Read__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *arg2 = (void *) 0 ;
+  size_t arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_File_Read",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Read" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Read" "', argument " "2"" of type '" "void *""'"); 
+  }
+  ecode3 = SWIG_AsVal_size_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Read" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  result = ((CSG_File const *)arg1)->Read(arg2,arg3);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Write__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *arg2 = (void *) 0 ;
+  size_t arg3 ;
+  size_t arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  size_t val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_File_Write",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Write" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Write" "', argument " "2"" of type '" "void *""'"); 
+  }
+  ecode3 = SWIG_AsVal_size_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Write" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  ecode4 = SWIG_AsVal_size_t(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_File_Write" "', argument " "4"" of type '" "size_t""'");
+  } 
+  arg4 = static_cast< size_t >(val4);
+  result = ((CSG_File const *)arg1)->Write(arg2,arg3,arg4);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Write__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *arg2 = (void *) 0 ;
+  size_t arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_File_Write",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Write" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Write" "', argument " "2"" of type '" "void *""'"); 
+  }
+  ecode3 = SWIG_AsVal_size_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Write" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  result = ((CSG_File const *)arg1)->Write(arg2,arg3);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Read__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  CSG_String *arg2 = 0 ;
+  size_t arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_File_Read",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Read" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Read" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_File_Read" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_size_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Read" "', argument " "3"" of type '" "size_t""'");
+  } 
+  arg3 = static_cast< size_t >(val3);
+  result = ((CSG_File const *)arg1)->Read(*arg2,arg3);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Read(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_File_Read__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_File_Read__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_size_t(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_File_Read__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_File_Read'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Read(CSG_File const *,void *,size_t,size_t)\n"
+    "    Read(CSG_File const *,void *,size_t)\n"
+    "    Read(CSG_File const *,CSG_String &,size_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Write__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Write",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Write" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Write" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_File_Write" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = ((CSG_File const *)arg1)->Write(*arg2);
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Write(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_File_Write__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_File_Write__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_size_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_size_t(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_File_Write__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_File_Write'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Write(CSG_File const *,void *,size_t,size_t)\n"
+    "    Write(CSG_File const *,void *,size_t)\n"
+    "    Write(CSG_File const *,CSG_String &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Read_Line(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Read_Line",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Read_Line" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Read_Line" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_File_Read_Line" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)((CSG_File const *)arg1)->Read_Line(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Read_Int__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Read_Int",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Read_Int" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_File_Read_Int" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (int)((CSG_File const *)arg1)->Read_Int(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Read_Int__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Read_Int",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Read_Int" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (int)((CSG_File const *)arg1)->Read_Int();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Read_Int(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_File_Read_Int__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_File_Read_Int__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_File_Read_Int'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Read_Int(CSG_File const *,bool)\n"
+    "    Read_Int(CSG_File const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Write_Int__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_File_Write_Int",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Write_Int" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_File_Write_Int" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Write_Int" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Write_Int(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Write_Int__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Write_Int",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Write_Int" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_File_Write_Int" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Write_Int(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Write_Int(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_File_Write_Int__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_File_Write_Int__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_File_Write_Int'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Write_Int(CSG_File *,int,bool)\n"
+    "    Write_Int(CSG_File *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Read_Double__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Read_Double",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Read_Double" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_File_Read_Double" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_File const *)arg1)->Read_Double(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Read_Double__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Read_Double",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Read_Double" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (double)((CSG_File const *)arg1)->Read_Double();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Read_Double(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_File_Read_Double__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_File_Read_Double__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_File_Read_Double'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Read_Double(CSG_File const *,bool)\n"
+    "    Read_Double(CSG_File const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Write_Double__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  double arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_File_Write_Double",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Write_Double" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_File_Write_Double" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Write_Double" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Write_Double(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Write_Double__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Write_Double",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Write_Double" "', argument " "1"" of type '" "CSG_File *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_File_Write_Double" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Write_Double(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Write_Double(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_File_Write_Double__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_File_Write_Double__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_File_Write_Double'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Write_Double(CSG_File *,double,bool)\n"
+    "    Write_Double(CSG_File *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Scan__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  int *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Scan",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Scan" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Scan" "', argument " "2"" of type '" "int &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_File_Scan" "', argument " "2"" of type '" "int &""'"); 
+  }
+  arg2 = reinterpret_cast< int * >(argp2);
+  result = (bool)((CSG_File const *)arg1)->Scan(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Scan__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  double *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Scan",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Scan" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Scan" "', argument " "2"" of type '" "double &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_File_Scan" "', argument " "2"" of type '" "double &""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  result = (bool)((CSG_File const *)arg1)->Scan(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Scan__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  CSG_String *arg2 = 0 ;
+  wchar_t arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  wchar_t val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_File_Scan",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Scan" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_File_Scan" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_File_Scan" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_wchar_t(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_File_Scan" "', argument " "3"" of type '" "wchar_t""'");
+  } 
+  arg3 = static_cast< wchar_t >(val3);
+  result = (bool)((CSG_File const *)arg1)->Scan(*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Scan(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_int, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_File_Scan__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_File_Scan__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_wchar_t(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_File_Scan__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_File_Scan'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Scan(CSG_File const *,int &)\n"
+    "    Scan(CSG_File const *,double &)\n"
+    "    Scan(CSG_File const *,CSG_String &,wchar_t)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Scan_Int(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Scan_Int",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Scan_Int" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (int)((CSG_File const *)arg1)->Scan_Int();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Scan_Double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_File_Scan_Double",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Scan_Double" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (double)((CSG_File const *)arg1)->Scan_Double();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_File_Scan_String(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = (CSG_File *) 0 ;
+  wchar_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  wchar_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_File_Scan_String",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_File, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_File_Scan_String" "', argument " "1"" of type '" "CSG_File const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  ecode2 = SWIG_AsVal_wchar_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_File_Scan_String" "', argument " "2"" of type '" "wchar_t""'");
+  } 
+  arg2 = static_cast< wchar_t >(val2);
+  result = ((CSG_File const *)arg1)->Scan_String(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_File_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_File, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Dir_Exists(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Dir_Exists",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Dir_Exists" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = (bool)SG_Dir_Exists((wchar_t const *)arg1);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Dir_Create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Dir_Create",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Dir_Create" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = (bool)SG_Dir_Create((wchar_t const *)arg1);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Dir_Get_Current(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Dir_Get_Current")) SWIG_fail;
+  result = SG_Dir_Get_Current();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_File_Exists(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_File_Exists",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_File_Exists" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = (bool)SG_File_Exists((wchar_t const *)arg1);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_File_Delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_File_Delete",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_File_Delete" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = (bool)SG_File_Delete((wchar_t const *)arg1);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_File_Get_TmpName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_File_Get_TmpName",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_File_Get_TmpName" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_File_Get_TmpName" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = SG_File_Get_TmpName((wchar_t const *)arg1,(wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_File_Get_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  bool arg2 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_File_Get_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_File_Get_Name" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_File_Get_Name" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = SG_File_Get_Name((wchar_t const *)arg1,arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_File_Get_Path(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_File_Get_Path",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_File_Get_Path" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = SG_File_Get_Path((wchar_t const *)arg1);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_File_Make_Path__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_File_Make_Path",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_File_Make_Path" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_File_Make_Path" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SG_File_Make_Path" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = SG_File_Make_Path((wchar_t const *)arg1,(wchar_t const *)arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_File_Make_Path__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_File_Make_Path",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_File_Make_Path" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_File_Make_Path" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = SG_File_Make_Path((wchar_t const *)arg1,(wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_File_Make_Path(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_AsWCharPtrAndSize(argv[0], 0, NULL, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_SG_File_Make_Path__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_AsWCharPtrAndSize(argv[0], 0, NULL, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_SG_File_Make_Path__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_File_Make_Path'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_File_Make_Path(wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    SG_File_Make_Path(wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_File_Cmp_Extension(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_File_Cmp_Extension",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_File_Cmp_Extension" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_File_Cmp_Extension" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)SG_File_Cmp_Extension((wchar_t const *)arg1,(wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_File_Get_Extension(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_File_Get_Extension",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_File_Get_Extension" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = SG_File_Get_Extension((wchar_t const *)arg1);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_File_Set_Extension(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_File_Set_Extension",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_File_Set_Extension" "', argument " "1"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_File_Set_Extension" "', argument " "1"" of type '" "CSG_String &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_File_Set_Extension" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)SG_File_Set_Extension(*arg1,(wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Read_Line(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FILE *arg1 = (FILE *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Read_Line",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FILE, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Read_Line" "', argument " "1"" of type '" "FILE *""'"); 
+  }
+  arg1 = reinterpret_cast< FILE * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Read_Line" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Read_Line" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)SG_Read_Line(arg1,*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Colors__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Colors")) SWIG_fail;
+  result = (CSG_Colors *)new CSG_Colors();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Colors, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Colors__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Colors *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Colors",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Colors,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Colors" "', argument " "1"" of type '" "CSG_Colors const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Colors" "', argument " "1"" of type '" "CSG_Colors const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  result = (CSG_Colors *)new CSG_Colors((CSG_Colors const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Colors, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Colors__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  bool arg3 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Colors *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Colors",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Colors" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Colors" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Colors" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (CSG_Colors *)new CSG_Colors(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Colors, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Colors__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Colors *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Colors",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Colors" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Colors" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Colors *)new CSG_Colors(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Colors, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Colors__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Colors *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Colors",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Colors" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  result = (CSG_Colors *)new CSG_Colors(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Colors, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Colors(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Colors__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Colors__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CSG_Colors__SWIG_4(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Colors__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Colors__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Colors'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Colors()\n"
+    "    CSG_Colors(CSG_Colors const &)\n"
+    "    CSG_Colors(int,int,bool)\n"
+    "    CSG_Colors(int,int)\n"
+    "    CSG_Colors(int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Colors(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Colors",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Colors" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Colors_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Destroy" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Colors_Set_Count",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Count" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Count" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Count(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Colors_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Get_Count" "', argument " "1"" of type '" "CSG_Colors const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  result = (int)((CSG_Colors const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Color__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  long arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  long val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Colors_Set_Color",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Color" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Color" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_long(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Color" "', argument " "3"" of type '" "long""'");
+  } 
+  arg3 = static_cast< long >(val3);
+  result = (bool)(arg1)->Set_Color(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Color__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  int arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Colors_Set_Color",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Color" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Color" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Color" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Colors_Set_Color" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Colors_Set_Color" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (bool)(arg1)->Set_Color(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Color(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_long(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Colors_Set_Color__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Colors_Set_Color__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Colors_Set_Color'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Color(CSG_Colors *,int,long)\n"
+    "    Set_Color(CSG_Colors *,int,int,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Red(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Colors_Set_Red",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Red" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Red" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Red" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Set_Red(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Green(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Colors_Set_Green",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Green" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Green" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Green" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Set_Green(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Blue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Colors_Set_Blue",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Blue" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Blue" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Blue" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Set_Blue(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Brightness(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Colors_Set_Brightness",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Brightness" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Brightness" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Brightness" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Set_Brightness(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Get_Color(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Colors_Get_Color",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Get_Color" "', argument " "1"" of type '" "CSG_Colors const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Get_Color" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (long)((CSG_Colors const *)arg1)->Get_Color(arg2);
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Get_Red(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Colors_Get_Red",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Get_Red" "', argument " "1"" of type '" "CSG_Colors const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Get_Red" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (long)((CSG_Colors const *)arg1)->Get_Red(arg2);
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Get_Green(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Colors_Get_Green",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Get_Green" "', argument " "1"" of type '" "CSG_Colors const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Get_Green" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (long)((CSG_Colors const *)arg1)->Get_Green(arg2);
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Get_Blue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Colors_Get_Blue",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Get_Blue" "', argument " "1"" of type '" "CSG_Colors const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Get_Blue" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (long)((CSG_Colors const *)arg1)->Get_Blue(arg2);
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Get_Brightness(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Colors_Get_Brightness",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Get_Brightness" "', argument " "1"" of type '" "CSG_Colors const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Get_Brightness" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (long)((CSG_Colors const *)arg1)->Get_Brightness(arg2);
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Default__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Colors_Set_Default",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Default" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Default" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Default(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Default__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Colors_Set_Default",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Default" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  result = (bool)(arg1)->Set_Default();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Default(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Colors_Set_Default__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Colors_Set_Default__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Colors_Set_Default'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Default(CSG_Colors *,int)\n"
+    "    Set_Default(CSG_Colors *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Palette__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Colors_Set_Palette",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Palette" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Palette" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Palette" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Colors_Set_Palette" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Set_Palette(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Palette__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Colors_Set_Palette",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Palette" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Palette" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Palette" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Set_Palette(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Palette__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Colors_Set_Palette",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Palette" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Palette" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Palette(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Palette(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Colors_Set_Palette__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Colors_Set_Palette__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Colors_Set_Palette__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Colors_Set_Palette'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Palette(CSG_Colors *,int,bool,int)\n"
+    "    Set_Palette(CSG_Colors *,int,bool)\n"
+    "    Set_Palette(CSG_Colors *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Ramp__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  long arg2 ;
+  long arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  long val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Colors_Set_Ramp",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Ramp" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Ramp" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_long(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Ramp" "', argument " "3"" of type '" "long""'");
+  } 
+  arg3 = static_cast< long >(val3);
+  result = (bool)(arg1)->Set_Ramp(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Ramp__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  long arg2 ;
+  long arg3 ;
+  int arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  long val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Colors_Set_Ramp",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Ramp" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Ramp" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_long(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Ramp" "', argument " "3"" of type '" "long""'");
+  } 
+  arg3 = static_cast< long >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Colors_Set_Ramp" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Colors_Set_Ramp" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (bool)(arg1)->Set_Ramp(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Ramp(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_long(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Colors_Set_Ramp__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_long(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Colors_Set_Ramp__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Colors_Set_Ramp'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Ramp(CSG_Colors *,long,long)\n"
+    "    Set_Ramp(CSG_Colors *,long,long,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Ramp_Brighness__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Colors_Set_Ramp_Brighness",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Ramp_Brighness" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Ramp_Brighness" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Ramp_Brighness" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Set_Ramp_Brighness(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Ramp_Brighness__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  int arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Colors_Set_Ramp_Brighness",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Set_Ramp_Brighness" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Colors_Set_Ramp_Brighness" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Set_Ramp_Brighness" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Colors_Set_Ramp_Brighness" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Colors_Set_Ramp_Brighness" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (bool)(arg1)->Set_Ramp_Brighness(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Set_Ramp_Brighness(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Colors_Set_Ramp_Brighness__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Colors_Set_Ramp_Brighness__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Colors_Set_Ramp_Brighness'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Ramp_Brighness(CSG_Colors *,int,int)\n"
+    "    Set_Ramp_Brighness(CSG_Colors *,int,int,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Random(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Colors_Random",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Random" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  result = (bool)(arg1)->Random();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Invert(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Colors_Invert",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Invert" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  result = (bool)(arg1)->Invert();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Revert(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Colors_Revert",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Revert" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  result = (bool)(arg1)->Revert();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  CSG_Colors *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Colors_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Assign" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Colors,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Colors_Assign" "', argument " "2"" of type '" "CSG_Colors const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Colors_Assign" "', argument " "2"" of type '" "CSG_Colors const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Colors * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_Colors const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  CSG_Colors *arg2 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Colors_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Assign" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Colors_Assign" "', argument " "2"" of type '" "CSG_Colors *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Colors * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Colors, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Colors_Assign__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Colors_Assign__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Colors_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_Colors *,CSG_Colors const &)\n"
+    "    Assign(CSG_Colors *,CSG_Colors *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Load(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Colors_Load",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Load" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Colors_Load" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Colors_Load" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Load((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Save(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  CSG_String *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Colors_Save",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Save" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Colors_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Colors_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Save" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Colors_Serialize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Colors *arg1 = (CSG_Colors *) 0 ;
+  CSG_File *arg2 = 0 ;
+  bool arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Colors_Serialize",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Colors_Serialize" "', argument " "1"" of type '" "CSG_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Colors * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_File,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Colors_Serialize" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Colors_Serialize" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_File * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Colors_Serialize" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Colors_Serialize" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Serialize(*arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Colors_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Colors, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Translator__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Translator")) SWIG_fail;
+  result = (CSG_Translator *)new CSG_Translator();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Translator, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Translator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Translator",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Translator" "', argument " "1"" of type '" "CSG_Translator *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Translator__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  bool arg2 ;
+  int arg3 ;
+  int arg4 ;
+  bool arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Translator *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:new_CSG_Translator",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Translator" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Translator" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Translator" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_CSG_Translator" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  result = (CSG_Translator *)new CSG_Translator((CSG_String const &)*arg1,arg2,arg3,arg4,arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Translator, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Translator__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  bool arg2 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Translator *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_CSG_Translator",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Translator" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Translator" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Translator" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (CSG_Translator *)new CSG_Translator((CSG_String const &)*arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Translator, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Translator__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  bool arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Translator *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Translator",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Translator" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Translator" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (CSG_Translator *)new CSG_Translator((CSG_String const &)*arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Translator, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Translator__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Translator *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Translator",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Translator" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (CSG_Translator *)new CSG_Translator((CSG_String const &)*arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Translator, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Translator__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Translator *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Translator",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_Translator *)new CSG_Translator((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Translator, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  CSG_String *arg2 = 0 ;
+  bool arg3 ;
+  int arg4 ;
+  int arg5 ;
+  bool arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Translator_Create",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Create" "', argument " "1"" of type '" "CSG_Translator *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Translator_Create" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Translator_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Translator_Create" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Translator_Create" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  CSG_String *arg2 = 0 ;
+  bool arg3 ;
+  int arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Translator_Create",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Create" "', argument " "1"" of type '" "CSG_Translator *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Translator_Create" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Translator_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Translator_Create" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  CSG_String *arg2 = 0 ;
+  bool arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Translator_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Create" "', argument " "1"" of type '" "CSG_Translator *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Translator_Create" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Translator_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Create__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  CSG_String *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Translator_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Create" "', argument " "1"" of type '" "CSG_Translator *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Translator_Create" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Create__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Translator_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Create" "', argument " "1"" of type '" "CSG_Translator *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Translator__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Translator *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_CSG_Translator",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Translator" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Translator" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Translator" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (CSG_Translator *)new CSG_Translator(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Translator, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Translator__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Translator *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Translator",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Translator" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Translator" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (CSG_Translator *)new CSG_Translator(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Translator, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Translator__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Translator *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Translator",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Translator" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Translator *)new CSG_Translator(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Translator, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Translator__SWIG_9(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Translator *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Translator",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Translator" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (CSG_Translator *)new CSG_Translator(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Translator, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Translator(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Translator__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Translator__SWIG_5(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Translator__SWIG_9(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Translator__SWIG_8(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Translator__SWIG_4(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Translator__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Translator__SWIG_7(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_CSG_Translator__SWIG_6(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_CSG_Translator__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_new_CSG_Translator__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Translator'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Translator()\n"
+    "    CSG_Translator(CSG_String const &,bool,int,int,bool)\n"
+    "    CSG_Translator(CSG_String const &,bool,int,int)\n"
+    "    CSG_Translator(CSG_String const &,bool,int)\n"
+    "    CSG_Translator(CSG_String const &,bool)\n"
+    "    CSG_Translator(CSG_String const &)\n"
+    "    CSG_Translator(CSG_Table *,int,int,bool)\n"
+    "    CSG_Translator(CSG_Table *,int,int)\n"
+    "    CSG_Translator(CSG_Table *,int)\n"
+    "    CSG_Translator(CSG_Table *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Create__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  CSG_Table *arg2 = (CSG_Table *) 0 ;
+  int arg3 ;
+  int arg4 ;
+  bool arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Translator_Create",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Create" "', argument " "1"" of type '" "CSG_Translator *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_Table *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Translator_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Translator_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Translator_Create" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Create__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  CSG_Table *arg2 = (CSG_Table *) 0 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Translator_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Create" "', argument " "1"" of type '" "CSG_Translator *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_Table *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Translator_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Translator_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Create__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  CSG_Table *arg2 = (CSG_Table *) 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Translator_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Create" "', argument " "1"" of type '" "CSG_Translator *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_Table *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Translator_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Create__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  CSG_Table *arg2 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Translator_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Create" "', argument " "1"" of type '" "CSG_Translator *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Create" "', argument " "2"" of type '" "CSG_Table *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table * >(argp2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Translator_Create__SWIG_4(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Translator_Create__SWIG_8(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Translator_Create__SWIG_7(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Translator_Create__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Translator_Create__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Translator_Create__SWIG_6(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Translator_Create__SWIG_5(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Translator_Create__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Translator_Create__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Translator_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Translator *,CSG_String const &,bool,int,int,bool)\n"
+    "    Create(CSG_Translator *,CSG_String const &,bool,int,int)\n"
+    "    Create(CSG_Translator *,CSG_String const &,bool,int)\n"
+    "    Create(CSG_Translator *,CSG_String const &,bool)\n"
+    "    Create(CSG_Translator *,CSG_String const &)\n"
+    "    Create(CSG_Translator *,CSG_Table *,int,int,bool)\n"
+    "    Create(CSG_Translator *,CSG_Table *,int,int)\n"
+    "    Create(CSG_Translator *,CSG_Table *,int)\n"
+    "    Create(CSG_Translator *,CSG_Table *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Translator_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Destroy" "', argument " "1"" of type '" "CSG_Translator *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_is_CaseSensitive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Translator_is_CaseSensitive",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_is_CaseSensitive" "', argument " "1"" of type '" "CSG_Translator const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  result = (bool)((CSG_Translator const *)arg1)->is_CaseSensitive();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Translator_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Get_Count" "', argument " "1"" of type '" "CSG_Translator const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  result = (int)((CSG_Translator const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Get_Text(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Translator_Get_Text",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Get_Text" "', argument " "1"" of type '" "CSG_Translator const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Translator_Get_Text" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_Translator const *)arg1)->Get_Text(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Get_Translation__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Translator_Get_Translation",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Get_Translation" "', argument " "1"" of type '" "CSG_Translator const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Translator_Get_Translation" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_Translator const *)arg1)->Get_Translation(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Get_Translation__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Translator_Get_Translation",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Get_Translation" "', argument " "1"" of type '" "CSG_Translator const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Get_Translation" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Translator_Get_Translation" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (wchar_t *)((CSG_Translator const *)arg1)->Get_Translation((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Get_Translation__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Translator_Get_Translation",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Get_Translation" "', argument " "1"" of type '" "CSG_Translator const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Get_Translation" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (wchar_t *)((CSG_Translator const *)arg1)->Get_Translation((wchar_t const *)arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Get_Translation__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *arg1 = (CSG_Translator *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  CSG_String *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Translator_Get_Translation",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Translator_Get_Translation" "', argument " "1"" of type '" "CSG_Translator const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Translator * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Translator_Get_Translation" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Translator_Get_Translation" "', argument " "3"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Translator_Get_Translation" "', argument " "3"" of type '" "CSG_String &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  result = (bool)((CSG_Translator const *)arg1)->Get_Translation((wchar_t const *)arg2,*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Translator_Get_Translation(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Translator_Get_Translation__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Translator_Get_Translation__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_CSG_String, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Translator_Get_Translation__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Translator, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Translator_Get_Translation__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Translator_Get_Translation'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Translation(CSG_Translator const *,int)\n"
+    "    Get_Translation(CSG_Translator const *,wchar_t const *,bool)\n"
+    "    Get_Translation(CSG_Translator const *,wchar_t const *)\n"
+    "    Get_Translation(CSG_Translator const *,wchar_t const *,CSG_String &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Translator_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Translator, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Get_Translator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Translator *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Get_Translator")) SWIG_fail;
+  result = (CSG_Translator *) &SG_Get_Translator();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Translator, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Translate(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Translate",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Translate" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = (wchar_t *)SG_Translate((wchar_t const *)arg1);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_UI_Parameter__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_UI_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_UI_Parameter")) SWIG_fail;
+  result = (CSG_UI_Parameter *)new CSG_UI_Parameter();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_UI_Parameter, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_UI_Parameter__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool arg1 ;
+  bool val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_UI_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_UI_Parameter",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_bool(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_UI_Parameter" "', argument " "1"" of type '" "bool""'");
+  } 
+  arg1 = static_cast< bool >(val1);
+  result = (CSG_UI_Parameter *)new CSG_UI_Parameter(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_UI_Parameter, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_UI_Parameter__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_UI_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_UI_Parameter",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_UI_Parameter" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  result = (CSG_UI_Parameter *)new CSG_UI_Parameter(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_UI_Parameter, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_UI_Parameter__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_UI_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_UI_Parameter",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_UI_Parameter" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = (CSG_UI_Parameter *)new CSG_UI_Parameter(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_UI_Parameter, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_UI_Parameter__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_UI_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_UI_Parameter",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_UI_Parameter" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  result = (CSG_UI_Parameter *)new CSG_UI_Parameter((wchar_t const *)arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_UI_Parameter, SWIG_POINTER_NEW |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_UI_Parameter__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  void *arg1 = (void *) 0 ;
+  int res1 ;
+  PyObject * obj0 = 0 ;
+  CSG_UI_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_UI_Parameter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_UI_Parameter" "', argument " "1"" of type '" "void *""'"); 
+  }
+  result = (CSG_UI_Parameter *)new CSG_UI_Parameter(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_UI_Parameter, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_UI_Parameter__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_UI_Parameter *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_UI_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_UI_Parameter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_UI_Parameter,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_UI_Parameter" "', argument " "1"" of type '" "CSG_UI_Parameter const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_UI_Parameter" "', argument " "1"" of type '" "CSG_UI_Parameter const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_UI_Parameter * >(argp1);
+  result = (CSG_UI_Parameter *)new CSG_UI_Parameter((CSG_UI_Parameter const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_UI_Parameter, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_UI_Parameter(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_UI_Parameter__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_UI_Parameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_UI_Parameter__SWIG_6(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *ptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &ptr, 0, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_UI_Parameter__SWIG_5(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CSG_UI_Parameter__SWIG_2(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CSG_UI_Parameter__SWIG_3(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_AsWCharPtrAndSize(argv[0], 0, NULL, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_UI_Parameter__SWIG_4(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_bool(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CSG_UI_Parameter__SWIG_1(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_UI_Parameter'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_UI_Parameter()\n"
+    "    CSG_UI_Parameter(bool)\n"
+    "    CSG_UI_Parameter(int)\n"
+    "    CSG_UI_Parameter(double)\n"
+    "    CSG_UI_Parameter(wchar_t const *)\n"
+    "    CSG_UI_Parameter(void *)\n"
+    "    CSG_UI_Parameter(CSG_UI_Parameter const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_UI_Parameter_True_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_UI_Parameter *arg1 = (CSG_UI_Parameter *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_UI_Parameter_True_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_UI_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_UI_Parameter_True_set" "', argument " "1"" of type '" "CSG_UI_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_UI_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_UI_Parameter_True_set" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  if (arg1) (arg1)->True = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_UI_Parameter_True_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_UI_Parameter *arg1 = (CSG_UI_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_UI_Parameter_True_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_UI_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_UI_Parameter_True_get" "', argument " "1"" of type '" "CSG_UI_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_UI_Parameter * >(argp1);
+  result = (bool) ((arg1)->True);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_UI_Parameter_Number_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_UI_Parameter *arg1 = (CSG_UI_Parameter *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_UI_Parameter_Number_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_UI_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_UI_Parameter_Number_set" "', argument " "1"" of type '" "CSG_UI_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_UI_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_UI_Parameter_Number_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->Number = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_UI_Parameter_Number_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_UI_Parameter *arg1 = (CSG_UI_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_UI_Parameter_Number_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_UI_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_UI_Parameter_Number_get" "', argument " "1"" of type '" "CSG_UI_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_UI_Parameter * >(argp1);
+  result = (double) ((arg1)->Number);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_UI_Parameter_Pointer_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_UI_Parameter *arg1 = (CSG_UI_Parameter *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_UI_Parameter_Pointer_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_UI_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_UI_Parameter_Pointer_set" "', argument " "1"" of type '" "CSG_UI_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_UI_Parameter * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, SWIG_POINTER_DISOWN);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_UI_Parameter_Pointer_set" "', argument " "2"" of type '" "void *""'"); 
+  }
+  if (arg1) (arg1)->Pointer = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_UI_Parameter_Pointer_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_UI_Parameter *arg1 = (CSG_UI_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_UI_Parameter_Pointer_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_UI_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_UI_Parameter_Pointer_get" "', argument " "1"" of type '" "CSG_UI_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_UI_Parameter * >(argp1);
+  result = (void *) ((arg1)->Pointer);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_UI_Parameter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_UI_Parameter *arg1 = (CSG_UI_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_UI_Parameter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_UI_Parameter, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_UI_Parameter" "', argument " "1"" of type '" "CSG_UI_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_UI_Parameter * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_UI_Parameter_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_UI_Parameter, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Set_UI_Callback(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_PFNC_UI_Callback arg1 = (TSG_PFNC_UI_Callback) 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Set_UI_Callback",&obj0)) SWIG_fail;
+  {
+    int res = SWIG_ConvertFunctionPtr(obj0, (void**)(&arg1), SWIGTYPE_p_f_enum_ESG_UI_Callback_ID_r_CSG_UI_Parameter_r_CSG_UI_Parameter__int);
+    if (!SWIG_IsOK(res)) {
+      SWIG_exception_fail(SWIG_ArgError(res), "in method '" "SG_Set_UI_Callback" "', argument " "1"" of type '" "TSG_PFNC_UI_Callback""'"); 
+    }
+  }
+  result = (bool)SG_Set_UI_Callback(arg1);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_UI_Callback(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_PFNC_UI_Callback result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Get_UI_Callback")) SWIG_fail;
+  result = (TSG_PFNC_UI_Callback)SG_Get_UI_Callback();
+  resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_enum_ESG_UI_Callback_ID_r_CSG_UI_Parameter_r_CSG_UI_Parameter__int);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Progress_Lock(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool arg1 ;
+  bool val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_UI_Progress_Lock",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_bool(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_UI_Progress_Lock" "', argument " "1"" of type '" "bool""'");
+  } 
+  arg1 = static_cast< bool >(val1);
+  result = (int)SG_UI_Progress_Lock(arg1);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Process_Get_Okay__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool arg1 ;
+  bool val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_UI_Process_Get_Okay",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_bool(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_UI_Process_Get_Okay" "', argument " "1"" of type '" "bool""'");
+  } 
+  arg1 = static_cast< bool >(val1);
+  result = (bool)SG_UI_Process_Get_Okay(arg1);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Process_Get_Okay__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_UI_Process_Get_Okay")) SWIG_fail;
+  result = (bool)SG_UI_Process_Get_Okay();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Process_Get_Okay(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_SG_UI_Process_Get_Okay__SWIG_1(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_bool(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_SG_UI_Process_Get_Okay__SWIG_0(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_UI_Process_Get_Okay'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_UI_Process_Get_Okay(bool)\n"
+    "    SG_UI_Process_Get_Okay()\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Process_Set_Okay__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool arg1 ;
+  bool val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_UI_Process_Set_Okay",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_bool(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_UI_Process_Set_Okay" "', argument " "1"" of type '" "bool""'");
+  } 
+  arg1 = static_cast< bool >(val1);
+  result = (bool)SG_UI_Process_Set_Okay(arg1);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Process_Set_Okay__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_UI_Process_Set_Okay")) SWIG_fail;
+  result = (bool)SG_UI_Process_Set_Okay();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Process_Set_Okay(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_SG_UI_Process_Set_Okay__SWIG_1(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_bool(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_SG_UI_Process_Set_Okay__SWIG_0(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_UI_Process_Set_Okay'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_UI_Process_Set_Okay(bool)\n"
+    "    SG_UI_Process_Set_Okay()\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Process_Set_Progress(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_Process_Set_Progress",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_UI_Process_Set_Progress" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_UI_Process_Set_Progress" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)SG_UI_Process_Set_Progress(arg1,arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Process_Set_Ready(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_UI_Process_Set_Ready")) SWIG_fail;
+  result = (bool)SG_UI_Process_Set_Ready();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Process_Set_Text(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_UI_Process_Set_Text",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_Process_Set_Text" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  SG_UI_Process_Set_Text((wchar_t const *)arg1);
+  resultobj = SWIG_Py_Void();
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Stop_Execution(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool arg1 ;
+  bool val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_UI_Stop_Execution",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_bool(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_UI_Stop_Execution" "', argument " "1"" of type '" "bool""'");
+  } 
+  arg1 = static_cast< bool >(val1);
+  result = (bool)SG_UI_Stop_Execution(arg1);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Dlg_Message(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_Dlg_Message",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_Dlg_Message" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_UI_Dlg_Message" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  SG_UI_Dlg_Message((wchar_t const *)arg1,(wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Dlg_Continue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_Dlg_Continue",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_Dlg_Continue" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_UI_Dlg_Continue" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)SG_UI_Dlg_Continue((wchar_t const *)arg1,(wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Dlg_Error(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_Dlg_Error",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_Dlg_Error" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_UI_Dlg_Error" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (int)SG_UI_Dlg_Error((wchar_t const *)arg1,(wchar_t const *)arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Dlg_Parameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_Dlg_Parameters",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_Dlg_Parameters" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_UI_Dlg_Parameters" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)SG_UI_Dlg_Parameters(arg1,(wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Msg_Lock(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool arg1 ;
+  bool val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_UI_Msg_Lock",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_bool(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_UI_Msg_Lock" "', argument " "1"" of type '" "bool""'");
+  } 
+  arg1 = static_cast< bool >(val1);
+  result = (int)SG_UI_Msg_Lock(arg1);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Msg_Add__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  bool arg2 ;
+  TSG_UI_MSG_STYLE arg3 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_UI_Msg_Add",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_Msg_Add" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_UI_Msg_Add" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_UI_Msg_Add" "', argument " "3"" of type '" "TSG_UI_MSG_STYLE""'");
+  } 
+  arg3 = static_cast< TSG_UI_MSG_STYLE >(val3);
+  SG_UI_Msg_Add((wchar_t const *)arg1,arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Msg_Add__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  bool arg2 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_Msg_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_Msg_Add" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_UI_Msg_Add" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  SG_UI_Msg_Add((wchar_t const *)arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Msg_Add(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_AsWCharPtrAndSize(argv[0], 0, NULL, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_SG_UI_Msg_Add__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_AsWCharPtrAndSize(argv[0], 0, NULL, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_SG_UI_Msg_Add__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_UI_Msg_Add'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_UI_Msg_Add(wchar_t const *,bool,TSG_UI_MSG_STYLE)\n"
+    "    SG_UI_Msg_Add(wchar_t const *,bool)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Msg_Add_Error(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_UI_Msg_Add_Error",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_Msg_Add_Error" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  SG_UI_Msg_Add_Error((wchar_t const *)arg1);
+  resultobj = SWIG_Py_Void();
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Msg_Add_Execution__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  bool arg2 ;
+  TSG_UI_MSG_STYLE arg3 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_UI_Msg_Add_Execution",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_Msg_Add_Execution" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_UI_Msg_Add_Execution" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_UI_Msg_Add_Execution" "', argument " "3"" of type '" "TSG_UI_MSG_STYLE""'");
+  } 
+  arg3 = static_cast< TSG_UI_MSG_STYLE >(val3);
+  SG_UI_Msg_Add_Execution((wchar_t const *)arg1,arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Msg_Add_Execution__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  bool arg2 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_Msg_Add_Execution",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_Msg_Add_Execution" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_UI_Msg_Add_Execution" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  SG_UI_Msg_Add_Execution((wchar_t const *)arg1,arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Msg_Add_Execution(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_AsWCharPtrAndSize(argv[0], 0, NULL, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_SG_UI_Msg_Add_Execution__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_AsWCharPtrAndSize(argv[0], 0, NULL, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_SG_UI_Msg_Add_Execution__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_UI_Msg_Add_Execution'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_UI_Msg_Add_Execution(wchar_t const *,bool,TSG_UI_MSG_STYLE)\n"
+    "    SG_UI_Msg_Add_Execution(wchar_t const *,bool)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_DataObject_Find(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int arg2 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Data_Object *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_DataObject_Find",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_DataObject_Find" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_UI_DataObject_Find" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Data_Object *)SG_UI_DataObject_Find((wchar_t const *)arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_DataObject_Check(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_DataObject_Check",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_DataObject_Check" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_UI_DataObject_Check" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)SG_UI_DataObject_Check(arg1,arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_DataObject_Add(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_DataObject_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_DataObject_Add" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_UI_DataObject_Add" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)SG_UI_DataObject_Add(arg1,arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_DataObject_Update(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  int arg2 ;
+  CSG_Parameters *arg3 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_UI_DataObject_Update",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_DataObject_Update" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_UI_DataObject_Update" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SG_UI_DataObject_Update" "', argument " "3"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Parameters * >(argp3);
+  result = (bool)SG_UI_DataObject_Update(arg1,arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_DataObject_Show(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_DataObject_Show",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_DataObject_Show" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_UI_DataObject_Show" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)SG_UI_DataObject_Show(arg1,arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_DataObject_asImage(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_DataObject_asImage",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_DataObject_asImage" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_UI_DataObject_asImage" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (bool)SG_UI_DataObject_asImage(arg1,arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_DataObject_Colors_Get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  CSG_Colors *arg2 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_DataObject_Colors_Get",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_DataObject_Colors_Get" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_UI_DataObject_Colors_Get" "', argument " "2"" of type '" "CSG_Colors *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Colors * >(argp2);
+  result = (bool)SG_UI_DataObject_Colors_Get(arg1,arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_DataObject_Colors_Set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  CSG_Colors *arg2 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_DataObject_Colors_Set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_DataObject_Colors_Set" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_UI_DataObject_Colors_Set" "', argument " "2"" of type '" "CSG_Colors *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Colors * >(argp2);
+  result = (bool)SG_UI_DataObject_Colors_Set(arg1,arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_DataObject_Params_Get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  CSG_Parameters *arg2 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_DataObject_Params_Get",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_DataObject_Params_Get" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_UI_DataObject_Params_Get" "', argument " "2"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameters * >(argp2);
+  result = (bool)SG_UI_DataObject_Params_Get(arg1,arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_DataObject_Params_Set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  CSG_Parameters *arg2 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_UI_DataObject_Params_Set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_DataObject_Params_Set" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_UI_DataObject_Params_Set" "', argument " "2"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameters * >(argp2);
+  result = (bool)SG_UI_DataObject_Params_Set(arg1,arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_DataObject_Get_All(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_UI_DataObject_Get_All",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_UI_DataObject_Get_All" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  result = (bool)SG_UI_DataObject_Get_All(arg1);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Get_Window_Main(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_UI_Get_Window_Main")) SWIG_fail;
+  result = (void *)SG_UI_Get_Window_Main();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_UI_Get_Application_Path(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_UI_Get_Application_Path")) SWIG_fail;
+  result = SG_UI_Get_Application_Path();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_MetaData__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_MetaData")) SWIG_fail;
+  result = (CSG_MetaData *)new CSG_MetaData();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_MetaData_Create",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Create" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  result = (bool)(arg1)->Create();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_MetaData__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_MetaData",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_MetaData,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_MetaData" "', argument " "1"" of type '" "CSG_MetaData const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_MetaData" "', argument " "1"" of type '" "CSG_MetaData const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  result = (CSG_MetaData *)new CSG_MetaData((CSG_MetaData const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Create" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Create" "', argument " "2"" of type '" "CSG_MetaData const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Create" "', argument " "2"" of type '" "CSG_MetaData const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  result = (bool)(arg1)->Create((CSG_MetaData const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_MetaData__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_MetaData",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_MetaData" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_MetaData" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_MetaData" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (CSG_MetaData *)new CSG_MetaData((CSG_String const &)*arg1,(wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, SWIG_POINTER_NEW |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_MetaData__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_MetaData",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_MetaData" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_MetaData" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_MetaData *)new CSG_MetaData((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Create" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Create" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Create__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Create" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_MetaData__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_File *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_MetaData",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_File,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_MetaData" "', argument " "1"" of type '" "CSG_File &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_MetaData" "', argument " "1"" of type '" "CSG_File &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_File * >(argp1);
+  result = (CSG_MetaData *)new CSG_MetaData(*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_MetaData(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_MetaData__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_MetaData__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_MetaData__SWIG_3(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_File, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_MetaData__SWIG_4(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_new_CSG_MetaData__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_MetaData'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_MetaData()\n"
+    "    CSG_MetaData(CSG_MetaData const &)\n"
+    "    CSG_MetaData(CSG_String const &,wchar_t const *)\n"
+    "    CSG_MetaData(CSG_String const &)\n"
+    "    CSG_MetaData(CSG_File &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Create__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_File *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Create" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_File,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Create" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Create" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_File * >(argp2);
+  result = (bool)(arg1)->Create(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_MetaData_Create__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_MetaData, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Create__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Create__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_File, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Create__SWIG_4(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_MetaData_Create__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_MetaData *)\n"
+    "    Create(CSG_MetaData *,CSG_MetaData const &)\n"
+    "    Create(CSG_MetaData *,CSG_String const &,wchar_t const *)\n"
+    "    Create(CSG_MetaData *,CSG_String const &)\n"
+    "    Create(CSG_MetaData *,CSG_File &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_MetaData(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_MetaData",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_MetaData" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_MetaData_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Destroy" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Load__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Load",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Load" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Load" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Load" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Load" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (bool)(arg1)->Load((CSG_String const &)*arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Load__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Load",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Load" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Load" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Load" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Load((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Save__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Save",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Save" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Save" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (bool)((CSG_MetaData const *)arg1)->Save((CSG_String const &)*arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Save__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Save",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Save" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)((CSG_MetaData const *)arg1)->Save((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Load__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_File *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Load",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Load" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_File,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Load" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Load" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_File * >(argp2);
+  result = (bool)(arg1)->Load(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Load(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Load__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_File, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Load__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_MetaData_Load__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Load'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Load(CSG_MetaData *,CSG_String const &,wchar_t const *)\n"
+    "    Load(CSG_MetaData *,CSG_String const &)\n"
+    "    Load(CSG_MetaData *,CSG_File &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Save__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_File *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Save",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Save" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_File,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Save" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Save" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_File * >(argp2);
+  result = (bool)((CSG_MetaData const *)arg1)->Save(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Save(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Save__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_File, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Save__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_MetaData_Save__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Save'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Save(CSG_MetaData const *,CSG_String const &,wchar_t const *)\n"
+    "    Save(CSG_MetaData const *,CSG_String const &)\n"
+    "    Save(CSG_MetaData const *,CSG_File &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Load_WKT(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Load_WKT",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Load_WKT" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Load_WKT" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Load_WKT" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Load_WKT((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Save_WKT(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Save_WKT",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Save_WKT" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Save_WKT" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Save_WKT" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)((CSG_MetaData const *)arg1)->Save_WKT(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Assign",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Assign" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Assign" "', argument " "2"" of type '" "CSG_MetaData const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Assign" "', argument " "2"" of type '" "CSG_MetaData const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_MetaData_Assign" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Assign((CSG_MetaData const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Assign" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Assign" "', argument " "2"" of type '" "CSG_MetaData const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Assign" "', argument " "2"" of type '" "CSG_MetaData const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_MetaData const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_MetaData, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Assign__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_MetaData, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_MetaData_Assign__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_MetaData *,CSG_MetaData const &,bool)\n"
+    "    Assign(CSG_MetaData *,CSG_MetaData const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData___iadd__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData___iadd__" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData___iadd__" "', argument " "2"" of type '" "CSG_MetaData const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData___iadd__" "', argument " "2"" of type '" "CSG_MetaData const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  result = (CSG_MetaData *) &(arg1)->operator +=((CSG_MetaData const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_MetaData_Get_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Name" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  result = (CSG_String *) &((CSG_MetaData const *)arg1)->Get_Name();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Set_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Set_Name" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Set_Name" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Set_Name" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  (arg1)->Set_Name((CSG_String const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Content(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_MetaData_Get_Content",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Content" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  result = (CSG_String *) &((CSG_MetaData const *)arg1)->Get_Content();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Content__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Set_Content",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Set_Content" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Set_Content" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Set_Content" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  (arg1)->Set_Content((CSG_String const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Content__SWIG_1__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Set_Content",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Set_Content" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Set_Content" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->Set_Content((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Content__SWIG_1(PyObject *self, PyObject *args) {
+  PyObject *resultobj;
+  PyObject *varargs;
+  PyObject *newargs;
+  
+  newargs = PyTuple_GetSlice(args,0,2);
+  varargs = PyTuple_GetSlice(args,2,PyTuple_Size(args)+1);
+  resultobj = _wrap_CSG_MetaData_Set_Content__SWIG_1__varargs__(self,newargs,varargs);
+  Py_XDECREF(newargs);
+  Py_XDECREF(varargs);
+  return resultobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Content(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Set_Content__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc >= 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        if (argc <= 2) {
+          return _wrap_CSG_MetaData_Set_Content__SWIG_1(self, args);
+        }
+        return _wrap_CSG_MetaData_Set_Content__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Set_Content'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Content(CSG_MetaData *,CSG_String const &)\n"
+    "    Set_Content(CSG_MetaData *,wchar_t const *,...)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Cmp_Content__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Cmp_Content",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Cmp_Content" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Cmp_Content" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Cmp_Content" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_MetaData_Cmp_Content" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)((CSG_MetaData const *)arg1)->Cmp_Content((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Cmp_Content__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Cmp_Content",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Cmp_Content" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Cmp_Content" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Cmp_Content" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)((CSG_MetaData const *)arg1)->Cmp_Content((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Cmp_Content(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Cmp_Content__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_MetaData_Cmp_Content__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Cmp_Content'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Cmp_Content(CSG_MetaData const *,CSG_String const &,bool)\n"
+    "    Cmp_Content(CSG_MetaData const *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Children_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_MetaData_Get_Children_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Children_Count" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  result = (int)((CSG_MetaData const *)arg1)->Get_Children_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Child__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Get_Child",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Child" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_MetaData_Get_Child" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_MetaData *)((CSG_MetaData const *)arg1)->Get_Child(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Child__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Get_Child",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Child" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Get_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Get_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (CSG_MetaData *)((CSG_MetaData const *)arg1)->Get_Child((CSG_String const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Child(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Get_Child__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_MetaData_Get_Child__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Get_Child'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Child(CSG_MetaData const *,int)\n"
+    "    Get_Child(CSG_MetaData const *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Add_Child__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_MetaData_Add_Child",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Add_Child" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  result = (CSG_MetaData *)(arg1)->Add_Child();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Add_Child__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Add_Child",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Add_Child" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Add_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Add_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Add_Child" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (CSG_MetaData *)(arg1)->Add_Child((CSG_String const &)*arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Add_Child__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Add_Child",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Add_Child" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Add_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Add_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (CSG_MetaData *)(arg1)->Add_Child((CSG_String const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Add_Child__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Add_Child",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Add_Child" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Add_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Add_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_MetaData_Add_Child" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (CSG_MetaData *)(arg1)->Add_Child((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Add_Child__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Add_Child",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Add_Child" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Add_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Add_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_MetaData_Add_Child" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (CSG_MetaData *)(arg1)->Add_Child((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Add_Child(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_MetaData_Add_Child__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Add_Child__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_MetaData_Add_Child__SWIG_4(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_MetaData_Add_Child__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_MetaData_Add_Child__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Add_Child'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Child(CSG_MetaData *)\n"
+    "    Add_Child(CSG_MetaData *,CSG_String const &,wchar_t const *)\n"
+    "    Add_Child(CSG_MetaData *,CSG_String const &)\n"
+    "    Add_Child(CSG_MetaData *,CSG_String const &,double)\n"
+    "    Add_Child(CSG_MetaData *,CSG_String const &,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Del_Child__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Del_Child",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Del_Child" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_MetaData_Del_Child" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del_Child(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Del_Child__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Del_Child",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Del_Child" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Del_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Del_Child" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Del_Child((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Del_Child(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Del_Child__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_MetaData_Del_Child__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Del_Child'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Del_Child(CSG_MetaData *,int)\n"
+    "    Del_Child(CSG_MetaData *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_MetaData_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_is_Valid" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  result = (bool)((CSG_MetaData const *)arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Property_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_MetaData_Get_Property_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Property_Count" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  result = (int)((CSG_MetaData const *)arg1)->Get_Property_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Property_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Get_Property_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Property_Name" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_MetaData_Get_Property_Name" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_String *) &((CSG_MetaData const *)arg1)->Get_Property_Name(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Property__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Get_Property",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Property" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_MetaData_Get_Property" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_MetaData const *)arg1)->Get_Property(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Property__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_MetaData_Get_Property",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Property" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Get_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Get_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (wchar_t *)((CSG_MetaData const *)arg1)->Get_Property((CSG_String const &)*arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Property__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  CSG_String *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Get_Property",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Property" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Get_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Get_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Get_Property" "', argument " "3"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Get_Property" "', argument " "3"" of type '" "CSG_String &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  result = (bool)((CSG_MetaData const *)arg1)->Get_Property((CSG_String const &)*arg2,*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Property__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  double *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Get_Property",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Property" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Get_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Get_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Get_Property" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Get_Property" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  result = (bool)((CSG_MetaData const *)arg1)->Get_Property((CSG_String const &)*arg2,*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Property__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Get_Property",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Get_Property" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Get_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Get_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Get_Property" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Get_Property" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  result = (bool)((CSG_MetaData const *)arg1)->Get_Property((CSG_String const &)*arg2,*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Get_Property(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_MetaData_Get_Property__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_MetaData_Get_Property__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_CSG_String, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_MetaData_Get_Property__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_MetaData_Get_Property__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_MetaData_Get_Property__SWIG_4(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Get_Property'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Property(CSG_MetaData const *,int)\n"
+    "    Get_Property(CSG_MetaData const *,CSG_String const &)\n"
+    "    Get_Property(CSG_MetaData const *,CSG_String const &,CSG_String &)\n"
+    "    Get_Property(CSG_MetaData const *,CSG_String const &,double &)\n"
+    "    Get_Property(CSG_MetaData const *,CSG_String const &,int &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Add_Property__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  CSG_String *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Add_Property",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Add_Property" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Add_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Add_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Add_Property" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Add_Property" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  result = (bool)(arg1)->Add_Property((CSG_String const &)*arg2,(CSG_String const &)*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Add_Property__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Add_Property",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Add_Property" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Add_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Add_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_MetaData_Add_Property" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Add_Property((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Add_Property__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Add_Property",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Add_Property" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Add_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Add_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_MetaData_Add_Property" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Add_Property((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Add_Property(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_CSG_String, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_MetaData_Add_Property__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_MetaData_Add_Property__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_MetaData_Add_Property__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Add_Property'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Property(CSG_MetaData *,CSG_String const &,CSG_String const &)\n"
+    "    Add_Property(CSG_MetaData *,CSG_String const &,double)\n"
+    "    Add_Property(CSG_MetaData *,CSG_String const &,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Property__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  CSG_String *arg3 = 0 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_MetaData_Set_Property",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Set_Property" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Set_Property" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Set_Property" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_MetaData_Set_Property" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Set_Property((CSG_String const &)*arg2,(CSG_String const &)*arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Property__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  CSG_String *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Set_Property",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Set_Property" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Set_Property" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Set_Property" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  result = (bool)(arg1)->Set_Property((CSG_String const &)*arg2,(CSG_String const &)*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Property__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  double arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_MetaData_Set_Property",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Set_Property" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_MetaData_Set_Property" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_MetaData_Set_Property" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Set_Property((CSG_String const &)*arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Property__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Set_Property",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Set_Property" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_MetaData_Set_Property" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Set_Property((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Property__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_MetaData_Set_Property",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Set_Property" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_MetaData_Set_Property" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_MetaData_Set_Property" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Set_Property((CSG_String const &)*arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Property__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Set_Property",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Set_Property" "', argument " "1"" of type '" "CSG_MetaData *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Set_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_MetaData_Set_Property" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Set_Property((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Set_Property(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_CSG_String, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_MetaData_Set_Property__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_MetaData_Set_Property__SWIG_5(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_MetaData_Set_Property__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_CSG_String, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_MetaData_Set_Property__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_MetaData_Set_Property__SWIG_4(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_MetaData_Set_Property__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Set_Property'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Property(CSG_MetaData *,CSG_String const &,CSG_String const &,bool)\n"
+    "    Set_Property(CSG_MetaData *,CSG_String const &,CSG_String const &)\n"
+    "    Set_Property(CSG_MetaData *,CSG_String const &,double,bool)\n"
+    "    Set_Property(CSG_MetaData *,CSG_String const &,double)\n"
+    "    Set_Property(CSG_MetaData *,CSG_String const &,int,bool)\n"
+    "    Set_Property(CSG_MetaData *,CSG_String const &,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Cmp_Property__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  CSG_String *arg3 = 0 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_MetaData_Cmp_Property",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Cmp_Property" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Cmp_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Cmp_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Cmp_Property" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Cmp_Property" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_MetaData_Cmp_Property" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)((CSG_MetaData const *)arg1)->Cmp_Property((CSG_String const &)*arg2,(CSG_String const &)*arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Cmp_Property__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_MetaData *arg1 = (CSG_MetaData *) 0 ;
+  CSG_String *arg2 = 0 ;
+  CSG_String *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_MetaData_Cmp_Property",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_MetaData_Cmp_Property" "', argument " "1"" of type '" "CSG_MetaData const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_MetaData * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_MetaData_Cmp_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Cmp_Property" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_MetaData_Cmp_Property" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_MetaData_Cmp_Property" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  result = (bool)((CSG_MetaData const *)arg1)->Cmp_Property((CSG_String const &)*arg2,(CSG_String const &)*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_MetaData_Cmp_Property(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_CSG_String, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_MetaData_Cmp_Property__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_CSG_String, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_MetaData_Cmp_Property__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_MetaData_Cmp_Property'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Cmp_Property(CSG_MetaData const *,CSG_String const &,CSG_String const &,bool)\n"
+    "    Cmp_Property(CSG_MetaData const *,CSG_String const &,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_MetaData_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_MetaData, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_TSG_Point_x_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = (TSG_Point *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Point_x_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_x_set" "', argument " "1"" of type '" "TSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Point_x_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->x = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_x_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = (TSG_Point *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Point_x_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_x_get" "', argument " "1"" of type '" "TSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  result = (double) ((arg1)->x);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_y_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = (TSG_Point *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Point_y_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_y_set" "', argument " "1"" of type '" "TSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Point_y_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->y = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_y_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = (TSG_Point *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Point_y_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_y_get" "', argument " "1"" of type '" "TSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  result = (double) ((arg1)->y);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_TSG_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_TSG_Point")) SWIG_fail;
+  result = (TSG_Point *)new TSG_Point();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Point, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_TSG_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = (TSG_Point *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_TSG_Point",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TSG_Point" "', argument " "1"" of type '" "TSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *TSG_Point_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_SSG_Point, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_TSG_Point_Z_x_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Z *arg1 = (TSG_Point_Z *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Point_Z_x_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_Z_x_set" "', argument " "1"" of type '" "TSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Z * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Point_Z_x_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->x = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_Z_x_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Z *arg1 = (TSG_Point_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Point_Z_x_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_Z_x_get" "', argument " "1"" of type '" "TSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Z * >(argp1);
+  result = (double) ((arg1)->x);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_Z_y_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Z *arg1 = (TSG_Point_Z *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Point_Z_y_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_Z_y_set" "', argument " "1"" of type '" "TSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Z * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Point_Z_y_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->y = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_Z_y_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Z *arg1 = (TSG_Point_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Point_Z_y_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_Z_y_get" "', argument " "1"" of type '" "TSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Z * >(argp1);
+  result = (double) ((arg1)->y);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_Z_z_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Z *arg1 = (TSG_Point_Z *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Point_Z_z_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_Z_z_set" "', argument " "1"" of type '" "TSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Z * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Point_Z_z_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->z = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_Z_z_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Z *arg1 = (TSG_Point_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Point_Z_z_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_Z_z_get" "', argument " "1"" of type '" "TSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Z * >(argp1);
+  result = (double) ((arg1)->z);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_TSG_Point_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Z *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_TSG_Point_Z")) SWIG_fail;
+  result = (TSG_Point_Z *)new TSG_Point_Z();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Point_Z, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_TSG_Point_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Z *arg1 = (TSG_Point_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_TSG_Point_Z",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Z, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TSG_Point_Z" "', argument " "1"" of type '" "TSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Z * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *TSG_Point_Z_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_SSG_Point_Z, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_TSG_Point_ZM_x_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_ZM *arg1 = (TSG_Point_ZM *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Point_ZM_x_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_ZM_x_set" "', argument " "1"" of type '" "TSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Point_ZM_x_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->x = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_ZM_x_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_ZM *arg1 = (TSG_Point_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Point_ZM_x_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_ZM_x_get" "', argument " "1"" of type '" "TSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_ZM * >(argp1);
+  result = (double) ((arg1)->x);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_ZM_y_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_ZM *arg1 = (TSG_Point_ZM *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Point_ZM_y_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_ZM_y_set" "', argument " "1"" of type '" "TSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Point_ZM_y_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->y = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_ZM_y_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_ZM *arg1 = (TSG_Point_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Point_ZM_y_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_ZM_y_get" "', argument " "1"" of type '" "TSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_ZM * >(argp1);
+  result = (double) ((arg1)->y);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_ZM_z_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_ZM *arg1 = (TSG_Point_ZM *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Point_ZM_z_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_ZM_z_set" "', argument " "1"" of type '" "TSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Point_ZM_z_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->z = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_ZM_z_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_ZM *arg1 = (TSG_Point_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Point_ZM_z_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_ZM_z_get" "', argument " "1"" of type '" "TSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_ZM * >(argp1);
+  result = (double) ((arg1)->z);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_ZM_m_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_ZM *arg1 = (TSG_Point_ZM *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Point_ZM_m_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_ZM_m_set" "', argument " "1"" of type '" "TSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Point_ZM_m_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->m = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_ZM_m_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_ZM *arg1 = (TSG_Point_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Point_ZM_m_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_ZM_m_get" "', argument " "1"" of type '" "TSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_ZM * >(argp1);
+  result = (double) ((arg1)->m);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_TSG_Point_ZM(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_ZM *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_TSG_Point_ZM")) SWIG_fail;
+  result = (TSG_Point_ZM *)new TSG_Point_ZM();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Point_ZM, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_TSG_Point_ZM(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_ZM *arg1 = (TSG_Point_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_TSG_Point_ZM",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_ZM, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TSG_Point_ZM" "', argument " "1"" of type '" "TSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_ZM * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *TSG_Point_ZM_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_SSG_Point_ZM, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_TSG_Point_Int_x_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Int *arg1 = (TSG_Point_Int *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Point_Int_x_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_Int_x_set" "', argument " "1"" of type '" "TSG_Point_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Int * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Point_Int_x_set" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  if (arg1) (arg1)->x = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_Int_x_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Int *arg1 = (TSG_Point_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Point_Int_x_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_Int_x_get" "', argument " "1"" of type '" "TSG_Point_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Int * >(argp1);
+  result = (int) ((arg1)->x);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_Int_y_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Int *arg1 = (TSG_Point_Int *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Point_Int_y_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_Int_y_set" "', argument " "1"" of type '" "TSG_Point_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Int * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Point_Int_y_set" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  if (arg1) (arg1)->y = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Point_Int_y_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Int *arg1 = (TSG_Point_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Point_Int_y_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Point_Int_y_get" "', argument " "1"" of type '" "TSG_Point_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Int * >(argp1);
+  result = (int) ((arg1)->y);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_TSG_Point_Int(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Int *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_TSG_Point_Int")) SWIG_fail;
+  result = (TSG_Point_Int *)new TSG_Point_Int();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Point_Int, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_TSG_Point_Int(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Int *arg1 = (TSG_Point_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_TSG_Point_Int",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point_Int, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TSG_Point_Int" "', argument " "1"" of type '" "TSG_Point_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Int * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *TSG_Point_Int_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_SSG_Point_Int, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_TSG_Rect_xMin_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *arg1 = (TSG_Rect *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Rect_xMin_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Rect_xMin_set" "', argument " "1"" of type '" "TSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Rect_xMin_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->xMin = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Rect_xMin_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *arg1 = (TSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Rect_xMin_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Rect_xMin_get" "', argument " "1"" of type '" "TSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Rect * >(argp1);
+  result = (double) ((arg1)->xMin);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Rect_yMin_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *arg1 = (TSG_Rect *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Rect_yMin_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Rect_yMin_set" "', argument " "1"" of type '" "TSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Rect_yMin_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->yMin = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Rect_yMin_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *arg1 = (TSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Rect_yMin_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Rect_yMin_get" "', argument " "1"" of type '" "TSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Rect * >(argp1);
+  result = (double) ((arg1)->yMin);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Rect_xMax_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *arg1 = (TSG_Rect *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Rect_xMax_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Rect_xMax_set" "', argument " "1"" of type '" "TSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Rect_xMax_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->xMax = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Rect_xMax_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *arg1 = (TSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Rect_xMax_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Rect_xMax_get" "', argument " "1"" of type '" "TSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Rect * >(argp1);
+  result = (double) ((arg1)->xMax);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Rect_yMax_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *arg1 = (TSG_Rect *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:TSG_Rect_yMax_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Rect_yMax_set" "', argument " "1"" of type '" "TSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TSG_Rect_yMax_set" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  if (arg1) (arg1)->yMax = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TSG_Rect_yMax_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *arg1 = (TSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:TSG_Rect_yMax_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TSG_Rect_yMax_get" "', argument " "1"" of type '" "TSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Rect * >(argp1);
+  result = (double) ((arg1)->yMax);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_TSG_Rect(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_TSG_Rect")) SWIG_fail;
+  result = (TSG_Rect *)new TSG_Rect();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Rect, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_TSG_Rect(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *arg1 = (TSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_TSG_Rect",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Rect, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TSG_Rect" "', argument " "1"" of type '" "TSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Rect * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *TSG_Rect_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_SSG_Rect, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Point")) SWIG_fail;
+  result = (CSG_Point *)new CSG_Point();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Point *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Point",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Point" "', argument " "1"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Point" "', argument " "1"" of type '" "CSG_Point const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  result = (CSG_Point *)new CSG_Point((CSG_Point const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Point *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Point",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Point" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Point" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  result = (CSG_Point *)new CSG_Point((TSG_Point const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Point",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Point" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Point *)new CSG_Point(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Point__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Point__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_SSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Point__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Point__SWIG_3(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Point()\n"
+    "    CSG_Point(CSG_Point const &)\n"
+    "    CSG_Point(TSG_Point const &)\n"
+    "    CSG_Point(double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Point",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Point" "', argument " "1"" of type '" "CSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Point_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Point_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Get_Type" "', argument " "1"" of type '" "CSG_Point const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  result = (TSG_Point_Type)((CSG_Point const *)arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Get_X(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Point_Get_X",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Get_X" "', argument " "1"" of type '" "CSG_Point const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  result = (double)((CSG_Point const *)arg1)->Get_X();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Set_X(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Set_X",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Set_X" "', argument " "1"" of type '" "CSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Point_Set_X" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Set_X(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Get_Y(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Point_Get_Y",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Get_Y" "', argument " "1"" of type '" "CSG_Point const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  result = (double)((CSG_Point const *)arg1)->Get_Y();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Set_Y(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Set_Y",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Set_Y" "', argument " "1"" of type '" "CSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Point_Set_Y" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Set_Y(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point___eq__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point___eq__" "', argument " "1"" of type '" "CSG_Point const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point___eq__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point___eq__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  result = (bool)((CSG_Point const *)arg1)->operator ==((CSG_Point const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point___ne__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point___ne__" "', argument " "1"" of type '" "CSG_Point const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point___ne__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point___ne__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  result = (bool)((CSG_Point const *)arg1)->operator !=((CSG_Point const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point___add__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point___add__" "', argument " "1"" of type '" "CSG_Point const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point___add__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point___add__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  result = ((CSG_Point const *)arg1)->operator +((CSG_Point const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Point(static_cast< const CSG_Point& >(result))), SWIGTYPE_p_CSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point___sub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point___sub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point___sub__" "', argument " "1"" of type '" "CSG_Point const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point___sub__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point___sub__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  result = ((CSG_Point const *)arg1)->operator -((CSG_Point const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Point(static_cast< const CSG_Point& >(result))), SWIGTYPE_p_CSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point___iadd__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point___iadd__" "', argument " "1"" of type '" "CSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point___iadd__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point___iadd__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  result = (CSG_Point *) &(arg1)->operator +=((CSG_Point const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point___isub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point___isub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point___isub__" "', argument " "1"" of type '" "CSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point___isub__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point___isub__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  result = (CSG_Point *) &(arg1)->operator -=((CSG_Point const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Point_Assign",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Assign" "', argument " "1"" of type '" "CSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Point_Assign" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Point_Assign" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Assign(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Assign" "', argument " "1"" of type '" "CSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Assign" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Assign" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  (arg1)->Assign((CSG_Point const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Point_Assign__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Point_Assign__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Point_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_Point *,double,double)\n"
+    "    Assign(CSG_Point *,CSG_Point const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Add(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Add" "', argument " "1"" of type '" "CSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Add" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Add" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  (arg1)->Add((CSG_Point const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Subtract(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Subtract",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Subtract" "', argument " "1"" of type '" "CSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Subtract" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Subtract" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  (arg1)->Subtract((CSG_Point const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_is_Equal__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Point_is_Equal",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_is_Equal" "', argument " "1"" of type '" "CSG_Point const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Point_is_Equal" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Point_is_Equal" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)((CSG_Point const *)arg1)->is_Equal(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_is_Equal__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = (CSG_Point *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_is_Equal",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_is_Equal" "', argument " "1"" of type '" "CSG_Point const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_is_Equal" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_is_Equal" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  result = (bool)((CSG_Point const *)arg1)->is_Equal((CSG_Point const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_is_Equal(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Point_is_Equal__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Point_is_Equal__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Point_is_Equal'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_Equal(CSG_Point const *,double,double)\n"
+    "    is_Equal(CSG_Point const *,CSG_Point const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Point_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Point, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point_Z__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Point_Z")) SWIG_fail;
+  result = (CSG_Point_Z *)new CSG_Point_Z();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_Z, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point_Z__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Point_Z *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Point_Z",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Point_Z" "', argument " "1"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Point_Z" "', argument " "1"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  result = (CSG_Point_Z *)new CSG_Point_Z((CSG_Point_Z const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_Z, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point_Z__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_Z *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Point_Z *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Point_Z",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Point_Z" "', argument " "1"" of type '" "TSG_Point_Z const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Point_Z" "', argument " "1"" of type '" "TSG_Point_Z const &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_Z * >(argp1);
+  result = (CSG_Point_Z *)new CSG_Point_Z((TSG_Point_Z const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_Z, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point_Z__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Point_Z *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Point_Z",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Point_Z" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Point_Z" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Point_Z" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (CSG_Point_Z *)new CSG_Point_Z(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_Z, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point_Z(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Point_Z__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Point_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Point_Z__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_SSG_Point_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Point_Z__SWIG_2(self, args);
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Point_Z__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Point_Z'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Point_Z()\n"
+    "    CSG_Point_Z(CSG_Point_Z const &)\n"
+    "    CSG_Point_Z(TSG_Point_Z const &)\n"
+    "    CSG_Point_Z(double,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Point_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Point_Z",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Point_Z" "', argument " "1"" of type '" "CSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Point_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Point_Z_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z_Get_Type" "', argument " "1"" of type '" "CSG_Point_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  result = (TSG_Point_Type)((CSG_Point_Z const *)arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z_Get_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Point_Z_Get_Z",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z_Get_Z" "', argument " "1"" of type '" "CSG_Point_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  result = (double)((CSG_Point_Z const *)arg1)->Get_Z();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z_Set_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Z_Set_Z",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z_Set_Z" "', argument " "1"" of type '" "CSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Point_Z_Set_Z" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Set_Z(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  CSG_Point_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Z___eq__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z___eq__" "', argument " "1"" of type '" "CSG_Point_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Z___eq__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Z___eq__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_Z * >(argp2);
+  result = (bool)((CSG_Point_Z const *)arg1)->operator ==((CSG_Point_Z const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  CSG_Point_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Z___ne__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z___ne__" "', argument " "1"" of type '" "CSG_Point_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Z___ne__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Z___ne__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_Z * >(argp2);
+  result = (bool)((CSG_Point_Z const *)arg1)->operator !=((CSG_Point_Z const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z___add__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  CSG_Point_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point_Z result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Z___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z___add__" "', argument " "1"" of type '" "CSG_Point_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Z___add__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Z___add__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_Z * >(argp2);
+  result = ((CSG_Point_Z const *)arg1)->operator +((CSG_Point_Z const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Point_Z(static_cast< const CSG_Point_Z& >(result))), SWIGTYPE_p_CSG_Point_Z, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z___sub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  CSG_Point_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point_Z result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Z___sub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z___sub__" "', argument " "1"" of type '" "CSG_Point_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Z___sub__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Z___sub__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_Z * >(argp2);
+  result = ((CSG_Point_Z const *)arg1)->operator -((CSG_Point_Z const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Point_Z(static_cast< const CSG_Point_Z& >(result))), SWIGTYPE_p_CSG_Point_Z, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z___iadd__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  CSG_Point_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point_Z *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Z___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z___iadd__" "', argument " "1"" of type '" "CSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Z___iadd__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Z___iadd__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_Z * >(argp2);
+  result = (CSG_Point_Z *) &(arg1)->operator +=((CSG_Point_Z const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_Z, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z___isub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  CSG_Point_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point_Z *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Z___isub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z___isub__" "', argument " "1"" of type '" "CSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Z___isub__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Z___isub__" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_Z * >(argp2);
+  result = (CSG_Point_Z *) &(arg1)->operator -=((CSG_Point_Z const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_Z, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Point_Z_Assign",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z_Assign" "', argument " "1"" of type '" "CSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Point_Z_Assign" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Point_Z_Assign" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Point_Z_Assign" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  (arg1)->Assign(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  CSG_Point_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Z_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z_Assign" "', argument " "1"" of type '" "CSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Z_Assign" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Z_Assign" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_Z * >(argp2);
+  (arg1)->Assign((CSG_Point_Z const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point_Z, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Point_Z_Assign__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Point_Z_Assign__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Point_Z_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_Point_Z *,double,double,double)\n"
+    "    Assign(CSG_Point_Z *,CSG_Point_Z const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z_Add(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  CSG_Point_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Z_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z_Add" "', argument " "1"" of type '" "CSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Z_Add" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Z_Add" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_Z * >(argp2);
+  (arg1)->Add((CSG_Point_Z const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z_Subtract(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  CSG_Point_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Z_Subtract",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z_Subtract" "', argument " "1"" of type '" "CSG_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Z_Subtract" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Z_Subtract" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_Z * >(argp2);
+  (arg1)->Subtract((CSG_Point_Z const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z_is_Equal__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Point_Z_is_Equal",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z_is_Equal" "', argument " "1"" of type '" "CSG_Point_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Point_Z_is_Equal" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Point_Z_is_Equal" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Point_Z_is_Equal" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)((CSG_Point_Z const *)arg1)->is_Equal(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z_is_Equal__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_Z *arg1 = (CSG_Point_Z *) 0 ;
+  CSG_Point_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_Z_is_Equal",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_Z_is_Equal" "', argument " "1"" of type '" "CSG_Point_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_Z_is_Equal" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_Z_is_Equal" "', argument " "2"" of type '" "CSG_Point_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_Z * >(argp2);
+  result = (bool)((CSG_Point_Z const *)arg1)->is_Equal((CSG_Point_Z const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_Z_is_Equal(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point_Z, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Point_Z_is_Equal__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Point_Z_is_Equal__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Point_Z_is_Equal'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_Equal(CSG_Point_Z const *,double,double,double)\n"
+    "    is_Equal(CSG_Point_Z const *,CSG_Point_Z const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Point_Z_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Point_Z, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point_ZM__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Point_ZM")) SWIG_fail;
+  result = (CSG_Point_ZM *)new CSG_Point_ZM();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_ZM, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point_ZM__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Point_ZM *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Point_ZM",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Point_ZM" "', argument " "1"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Point_ZM" "', argument " "1"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  result = (CSG_Point_ZM *)new CSG_Point_ZM((CSG_Point_ZM const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_ZM, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point_ZM__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point_ZM *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Point_ZM *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Point_ZM",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Point_ZM" "', argument " "1"" of type '" "TSG_Point_ZM const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Point_ZM" "', argument " "1"" of type '" "TSG_Point_ZM const &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point_ZM * >(argp1);
+  result = (CSG_Point_ZM *)new CSG_Point_ZM((TSG_Point_ZM const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_ZM, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point_ZM__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Point_ZM *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_CSG_Point_ZM",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Point_ZM" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Point_ZM" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Point_ZM" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Point_ZM" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (CSG_Point_ZM *)new CSG_Point_ZM(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_ZM, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Point_ZM(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Point_ZM__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Point_ZM, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Point_ZM__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_SSG_Point_ZM, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Point_ZM__SWIG_2(self, args);
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_CSG_Point_ZM__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Point_ZM'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Point_ZM()\n"
+    "    CSG_Point_ZM(CSG_Point_ZM const &)\n"
+    "    CSG_Point_ZM(TSG_Point_ZM const &)\n"
+    "    CSG_Point_ZM(double,double,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Point_ZM(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Point_ZM",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Point_ZM" "', argument " "1"" of type '" "CSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Point_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Point_ZM_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM_Get_Type" "', argument " "1"" of type '" "CSG_Point_ZM const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  result = (TSG_Point_Type)((CSG_Point_ZM const *)arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM_Get_M(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Point_ZM_Get_M",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM_Get_M" "', argument " "1"" of type '" "CSG_Point_ZM const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  result = (double)((CSG_Point_ZM const *)arg1)->Get_M();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM_Set_M(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_ZM_Set_M",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM_Set_M" "', argument " "1"" of type '" "CSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Point_ZM_Set_M" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Set_M(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  CSG_Point_ZM *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_ZM___eq__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM___eq__" "', argument " "1"" of type '" "CSG_Point_ZM const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_ZM___eq__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_ZM___eq__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_ZM * >(argp2);
+  result = (bool)((CSG_Point_ZM const *)arg1)->operator ==((CSG_Point_ZM const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  CSG_Point_ZM *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_ZM___ne__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM___ne__" "', argument " "1"" of type '" "CSG_Point_ZM const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_ZM___ne__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_ZM___ne__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_ZM * >(argp2);
+  result = (bool)((CSG_Point_ZM const *)arg1)->operator !=((CSG_Point_ZM const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM___add__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  CSG_Point_ZM *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point_ZM result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_ZM___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM___add__" "', argument " "1"" of type '" "CSG_Point_ZM const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_ZM___add__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_ZM___add__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_ZM * >(argp2);
+  result = ((CSG_Point_ZM const *)arg1)->operator +((CSG_Point_ZM const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Point_ZM(static_cast< const CSG_Point_ZM& >(result))), SWIGTYPE_p_CSG_Point_ZM, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM___sub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  CSG_Point_ZM *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point_ZM result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_ZM___sub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM___sub__" "', argument " "1"" of type '" "CSG_Point_ZM const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_ZM___sub__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_ZM___sub__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_ZM * >(argp2);
+  result = ((CSG_Point_ZM const *)arg1)->operator -((CSG_Point_ZM const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Point_ZM(static_cast< const CSG_Point_ZM& >(result))), SWIGTYPE_p_CSG_Point_ZM, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM___iadd__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  CSG_Point_ZM *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point_ZM *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_ZM___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM___iadd__" "', argument " "1"" of type '" "CSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_ZM___iadd__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_ZM___iadd__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_ZM * >(argp2);
+  result = (CSG_Point_ZM *) &(arg1)->operator +=((CSG_Point_ZM const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_ZM, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM___isub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  CSG_Point_ZM *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Point_ZM *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_ZM___isub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM___isub__" "', argument " "1"" of type '" "CSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_ZM___isub__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_ZM___isub__" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_ZM * >(argp2);
+  result = (CSG_Point_ZM *) &(arg1)->operator -=((CSG_Point_ZM const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Point_ZM, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Point_ZM_Assign",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM_Assign" "', argument " "1"" of type '" "CSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Point_ZM_Assign" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Point_ZM_Assign" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Point_ZM_Assign" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Point_ZM_Assign" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  (arg1)->Assign(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  CSG_Point_ZM *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_ZM_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM_Assign" "', argument " "1"" of type '" "CSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_ZM_Assign" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_ZM_Assign" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_ZM * >(argp2);
+  (arg1)->Assign((CSG_Point_ZM const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point_ZM, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point_ZM, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Point_ZM_Assign__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point_ZM, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Point_ZM_Assign__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Point_ZM_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_Point_ZM *,double,double,double,double)\n"
+    "    Assign(CSG_Point_ZM *,CSG_Point_ZM const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM_Add(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  CSG_Point_ZM *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_ZM_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM_Add" "', argument " "1"" of type '" "CSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_ZM_Add" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_ZM_Add" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_ZM * >(argp2);
+  (arg1)->Add((CSG_Point_ZM const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM_Subtract(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  CSG_Point_ZM *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_ZM_Subtract",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM_Subtract" "', argument " "1"" of type '" "CSG_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_ZM_Subtract" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_ZM_Subtract" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_ZM * >(argp2);
+  (arg1)->Subtract((CSG_Point_ZM const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM_is_Equal__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Point_ZM_is_Equal",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM_is_Equal" "', argument " "1"" of type '" "CSG_Point_ZM const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Point_ZM_is_Equal" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Point_ZM_is_Equal" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Point_ZM_is_Equal" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Point_ZM_is_Equal" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (bool)((CSG_Point_ZM const *)arg1)->is_Equal(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM_is_Equal__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point_ZM *arg1 = (CSG_Point_ZM *) 0 ;
+  CSG_Point_ZM *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Point_ZM_is_Equal",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Point_ZM_is_Equal" "', argument " "1"" of type '" "CSG_Point_ZM const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point_ZM * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point_ZM,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Point_ZM_is_Equal" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Point_ZM_is_Equal" "', argument " "2"" of type '" "CSG_Point_ZM const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point_ZM * >(argp2);
+  result = (bool)((CSG_Point_ZM const *)arg1)->is_Equal((CSG_Point_ZM const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Point_ZM_is_Equal(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point_ZM, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point_ZM, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Point_ZM_is_Equal__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Point_ZM, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Point_ZM_is_Equal__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Point_ZM_is_Equal'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_Equal(CSG_Point_ZM const *,double,double,double,double)\n"
+    "    is_Equal(CSG_Point_ZM const *,CSG_Point_ZM const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Point_ZM_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Point_ZM, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Points(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Points")) SWIG_fail;
+  result = (CSG_Points *)new CSG_Points();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Points, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Points(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = (CSG_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Points",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Points" "', argument " "1"" of type '" "CSG_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = (CSG_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Points_Clear",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Clear" "', argument " "1"" of type '" "CSG_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  (arg1)->Clear();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = (CSG_Points *) 0 ;
+  CSG_Points *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Assign" "', argument " "1"" of type '" "CSG_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Points,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Points_Assign" "', argument " "2"" of type '" "CSG_Points const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Points_Assign" "', argument " "2"" of type '" "CSG_Points const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Points * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_Points const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Add__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = (CSG_Points *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Points_Add",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Add" "', argument " "1"" of type '" "CSG_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Add" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Points_Add" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Add(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Add__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = (CSG_Points *) 0 ;
+  TSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Add" "', argument " "1"" of type '" "CSG_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Points_Add" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Points_Add" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  result = (bool)(arg1)->Add((TSG_Point const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Add(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Points_Add__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Points_Add__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Points_Add'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add(CSG_Points *,double,double)\n"
+    "    Add(CSG_Points *,TSG_Point const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Del(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = (CSG_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Del",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Del" "', argument " "1"" of type '" "CSG_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Del" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Set_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = (CSG_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Set_Count",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Set_Count" "', argument " "1"" of type '" "CSG_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Set_Count" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Count(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = (CSG_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Points_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Get_Count" "', argument " "1"" of type '" "CSG_Points const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  result = (int)((CSG_Points const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Get_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = (CSG_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Point *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Get_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Get_Point" "', argument " "1"" of type '" "CSG_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (TSG_Point *) &(arg1)->Get_Point(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Point, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Get_X(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = (CSG_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Get_X",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Get_X" "', argument " "1"" of type '" "CSG_Points const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Get_X" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Points const *)arg1)->Get_X(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Get_Y(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = (CSG_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Get_Y",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Get_Y" "', argument " "1"" of type '" "CSG_Points const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Get_Y" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Points const *)arg1)->Get_Y(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Points_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Points, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Points_Int(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Points_Int")) SWIG_fail;
+  result = (CSG_Points_Int *)new CSG_Points_Int();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Points_Int, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Points_Int(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *arg1 = (CSG_Points_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Points_Int",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Int, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Points_Int" "', argument " "1"" of type '" "CSG_Points_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Int * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Int_Clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *arg1 = (CSG_Points_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Points_Int_Clear",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Int_Clear" "', argument " "1"" of type '" "CSG_Points_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Int * >(argp1);
+  (arg1)->Clear();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Int_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *arg1 = (CSG_Points_Int *) 0 ;
+  CSG_Points_Int *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Int_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Int_Assign" "', argument " "1"" of type '" "CSG_Points_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Int * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Points_Int,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Points_Int_Assign" "', argument " "2"" of type '" "CSG_Points_Int const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Points_Int_Assign" "', argument " "2"" of type '" "CSG_Points_Int const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Points_Int * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_Points_Int const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Int_Add__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *arg1 = (CSG_Points_Int *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Points_Int_Add",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Int_Add" "', argument " "1"" of type '" "CSG_Points_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Int * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Int_Add" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Points_Int_Add" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Add(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Int_Add__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *arg1 = (CSG_Points_Int *) 0 ;
+  TSG_Point_Int *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Int_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Int_Add" "', argument " "1"" of type '" "CSG_Points_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Int * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point_Int,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Points_Int_Add" "', argument " "2"" of type '" "TSG_Point_Int const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Points_Int_Add" "', argument " "2"" of type '" "TSG_Point_Int const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point_Int * >(argp2);
+  result = (bool)(arg1)->Add((TSG_Point_Int const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Int_Add(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Points_Int, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point_Int, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Points_Int_Add__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Points_Int, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Points_Int_Add__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Points_Int_Add'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add(CSG_Points_Int *,int,int)\n"
+    "    Add(CSG_Points_Int *,TSG_Point_Int const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Int_Del(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *arg1 = (CSG_Points_Int *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Int_Del",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Int_Del" "', argument " "1"" of type '" "CSG_Points_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Int * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Int_Del" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Int_Set_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *arg1 = (CSG_Points_Int *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Int_Set_Count",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Int_Set_Count" "', argument " "1"" of type '" "CSG_Points_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Int * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Int_Set_Count" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Count(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Int_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *arg1 = (CSG_Points_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Points_Int_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Int_Get_Count" "', argument " "1"" of type '" "CSG_Points_Int const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Int * >(argp1);
+  result = (int)((CSG_Points_Int const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Int_Get_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *arg1 = (CSG_Points_Int *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Point_Int *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Int_Get_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Int_Get_Point" "', argument " "1"" of type '" "CSG_Points_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Int * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Int_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (TSG_Point_Int *) &(arg1)->Get_Point(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Point_Int, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Int_Get_X(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *arg1 = (CSG_Points_Int *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Int_Get_X",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Int_Get_X" "', argument " "1"" of type '" "CSG_Points_Int const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Int * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Int_Get_X" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Points_Int const *)arg1)->Get_X(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Int_Get_Y(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Int *arg1 = (CSG_Points_Int *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Int_Get_Y",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Int_Get_Y" "', argument " "1"" of type '" "CSG_Points_Int const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Int * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Int_Get_Y" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Points_Int const *)arg1)->Get_Y(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Points_Int_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Points_Int, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Points_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Points_Z")) SWIG_fail;
+  result = (CSG_Points_Z *)new CSG_Points_Z();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Points_Z, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Points_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Points_Z",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Points_Z" "', argument " "1"" of type '" "CSG_Points_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Points_Z_Clear",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Z_Clear" "', argument " "1"" of type '" "CSG_Points_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  (arg1)->Clear();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  CSG_Points_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Z_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Z_Assign" "', argument " "1"" of type '" "CSG_Points_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Points_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Points_Z_Assign" "', argument " "2"" of type '" "CSG_Points_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Points_Z_Assign" "', argument " "2"" of type '" "CSG_Points_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Points_Z * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_Points_Z const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Add__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Points_Z_Add",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Z_Add" "', argument " "1"" of type '" "CSG_Points_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Z_Add" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Points_Z_Add" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Points_Z_Add" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Add(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Add__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  TSG_Point_Z *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Z_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Z_Add" "', argument " "1"" of type '" "CSG_Points_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point_Z,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Points_Z_Add" "', argument " "2"" of type '" "TSG_Point_Z const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Points_Z_Add" "', argument " "2"" of type '" "TSG_Point_Z const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point_Z * >(argp2);
+  result = (bool)(arg1)->Add((TSG_Point_Z const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Add(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Points_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point_Z, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Points_Z_Add__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Points_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Points_Z_Add__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Points_Z_Add'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add(CSG_Points_Z *,double,double,double)\n"
+    "    Add(CSG_Points_Z *,TSG_Point_Z const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Del(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Z_Del",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Z_Del" "', argument " "1"" of type '" "CSG_Points_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Z_Del" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Set_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Z_Set_Count",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Z_Set_Count" "', argument " "1"" of type '" "CSG_Points_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Z_Set_Count" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Count(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Points_Z_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Z_Get_Count" "', argument " "1"" of type '" "CSG_Points_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  result = (int)((CSG_Points_Z const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Get_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Point_Z *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Z_Get_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Z_Get_Point" "', argument " "1"" of type '" "CSG_Points_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Z_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (TSG_Point_Z *) &(arg1)->Get_Point(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Point_Z, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Get_X(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Z_Get_X",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Z_Get_X" "', argument " "1"" of type '" "CSG_Points_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Z_Get_X" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Points_Z const *)arg1)->Get_X(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Get_Y(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Z_Get_Y",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Z_Get_Y" "', argument " "1"" of type '" "CSG_Points_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Z_Get_Y" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Points_Z const *)arg1)->Get_Y(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Points_Z_Get_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points_Z *arg1 = (CSG_Points_Z *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Points_Z_Get_Z",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Points_Z_Get_Z" "', argument " "1"" of type '" "CSG_Points_Z const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points_Z * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Points_Z_Get_Z" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Points_Z const *)arg1)->Get_Z(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Points_Z_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Points_Z, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Rect__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Rect")) SWIG_fail;
+  result = (CSG_Rect *)new CSG_Rect();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Rect__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Rect",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Rect" "', argument " "1"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Rect" "', argument " "1"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (CSG_Rect *)new CSG_Rect((CSG_Rect const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Rect__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Rect",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Rect" "', argument " "1"" of type '" "TSG_Rect const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Rect" "', argument " "1"" of type '" "TSG_Rect const &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Rect * >(argp1);
+  result = (CSG_Rect *)new CSG_Rect((TSG_Rect const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Rect__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Point *arg1 = 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Rect",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Rect" "', argument " "1"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Rect" "', argument " "1"" of type '" "CSG_Point const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Rect" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Rect" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  result = (CSG_Rect *)new CSG_Rect((CSG_Point const &)*arg1,(CSG_Point const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Rect__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_CSG_Rect",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Rect" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Rect" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Rect" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Rect" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (CSG_Rect *)new CSG_Rect(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Rect(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Rect__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Rect__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_SSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Rect__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_new_CSG_Rect__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_CSG_Rect__SWIG_4(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Rect'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Rect()\n"
+    "    CSG_Rect(CSG_Rect const &)\n"
+    "    CSG_Rect(TSG_Rect const &)\n"
+    "    CSG_Rect(CSG_Point const &,CSG_Point const &)\n"
+    "    CSG_Rect(double,double,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Rect(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Rect",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Rect" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect___eq__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect___eq__" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect___eq__" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect___eq__" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rect * >(argp2);
+  result = (bool)((CSG_Rect const *)arg1)->operator ==((CSG_Rect const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect___ne__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect___ne__" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect___ne__" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect___ne__" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rect * >(argp2);
+  result = (bool)((CSG_Rect const *)arg1)->operator !=((CSG_Rect const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect___iadd__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect___iadd__" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect___iadd__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect___iadd__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  (arg1)->operator +=((CSG_Point const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect___isub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect___isub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect___isub__" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect___isub__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect___isub__" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  (arg1)->operator -=((CSG_Point const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Rect_Assign",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Assign" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Assign" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_Assign" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Rect_Assign" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Rect_Assign" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  (arg1)->Assign(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  CSG_Point *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Rect_Assign",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Assign" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect_Assign" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect_Assign" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Rect_Assign" "', argument " "3"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect_Assign" "', argument " "3"" of type '" "CSG_Point const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Point * >(argp3);
+  (arg1)->Assign((CSG_Point const &)*arg2,(CSG_Point const &)*arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Assign__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Assign" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect_Assign" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect_Assign" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rect * >(argp2);
+  (arg1)->Assign((CSG_Rect const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Rect_Assign__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_CSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Rect_Assign__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Rect_Assign__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Rect_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_Rect *,double,double,double,double)\n"
+    "    Assign(CSG_Rect *,CSG_Point const &,CSG_Point const &)\n"
+    "    Assign(CSG_Rect *,CSG_Rect const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Set_BottomLeft__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Rect_Set_BottomLeft",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Set_BottomLeft" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Set_BottomLeft" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_Set_BottomLeft" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Set_BottomLeft(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Set_BottomLeft__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_Set_BottomLeft",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Set_BottomLeft" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect_Set_BottomLeft" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect_Set_BottomLeft" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  (arg1)->Set_BottomLeft((CSG_Point const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Set_BottomLeft(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Rect_Set_BottomLeft__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Rect_Set_BottomLeft__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Rect_Set_BottomLeft'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_BottomLeft(CSG_Rect *,double,double)\n"
+    "    Set_BottomLeft(CSG_Rect *,CSG_Point const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Set_TopRight__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Rect_Set_TopRight",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Set_TopRight" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Set_TopRight" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_Set_TopRight" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Set_TopRight(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Set_TopRight__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_Set_TopRight",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Set_TopRight" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect_Set_TopRight" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect_Set_TopRight" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  (arg1)->Set_TopRight((CSG_Point const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Set_TopRight(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Rect_Set_TopRight__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Rect_Set_TopRight__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Rect_Set_TopRight'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_TopRight(CSG_Rect *,double,double)\n"
+    "    Set_TopRight(CSG_Rect *,CSG_Point const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_is_Equal__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Rect_is_Equal",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_is_Equal" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_is_Equal" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_is_Equal" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Rect_is_Equal" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Rect_is_Equal" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (bool)((CSG_Rect const *)arg1)->is_Equal(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_is_Equal__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_is_Equal",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_is_Equal" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect_is_Equal" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect_is_Equal" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rect * >(argp2);
+  result = (bool)((CSG_Rect const *)arg1)->is_Equal((CSG_Rect const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_is_Equal(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Rect_is_Equal__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Rect_is_Equal__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Rect_is_Equal'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_Equal(CSG_Rect const *,double,double,double,double)\n"
+    "    is_Equal(CSG_Rect const *,CSG_Rect const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Get_XMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_Get_XMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Get_XMin" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (double)((CSG_Rect const *)arg1)->Get_XMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Get_XMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_Get_XMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Get_XMax" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (double)((CSG_Rect const *)arg1)->Get_XMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Get_YMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_Get_YMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Get_YMin" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (double)((CSG_Rect const *)arg1)->Get_YMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Get_YMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_Get_YMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Get_YMax" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (double)((CSG_Rect const *)arg1)->Get_YMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Get_XRange(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_Get_XRange",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Get_XRange" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (double)((CSG_Rect const *)arg1)->Get_XRange();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Get_YRange(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_Get_YRange",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Get_YRange" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (double)((CSG_Rect const *)arg1)->Get_YRange();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Get_TopLeft(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_Get_TopLeft",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Get_TopLeft" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (arg1)->Get_TopLeft();
+  resultobj = SWIG_NewPointerObj((new CSG_Point(static_cast< const CSG_Point& >(result))), SWIGTYPE_p_CSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Get_BottomRight(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_Get_BottomRight",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Get_BottomRight" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (arg1)->Get_BottomRight();
+  resultobj = SWIG_NewPointerObj((new CSG_Point(static_cast< const CSG_Point& >(result))), SWIGTYPE_p_CSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Get_Center(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_Get_Center",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Get_Center" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = ((CSG_Rect const *)arg1)->Get_Center();
+  resultobj = SWIG_NewPointerObj((new CSG_Point(static_cast< const CSG_Point& >(result))), SWIGTYPE_p_CSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Get_XCenter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_Get_XCenter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Get_XCenter" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (double)((CSG_Rect const *)arg1)->Get_XCenter();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Get_YCenter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_Get_YCenter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Get_YCenter" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (double)((CSG_Rect const *)arg1)->Get_YCenter();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Move__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Rect_Move",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Move" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Move" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_Move" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Move(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Move__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_Move",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Move" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect_Move" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect_Move" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  (arg1)->Move((CSG_Point const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Move(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Rect_Move__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Rect_Move__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Rect_Move'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Move(CSG_Rect *,double,double)\n"
+    "    Move(CSG_Rect *,CSG_Point const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Inflate__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Rect_Inflate",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Inflate" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Inflate" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_Inflate" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  (arg1)->Inflate(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Inflate__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_Inflate",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Inflate" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Inflate" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Inflate(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Deflate__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Rect_Deflate",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Deflate" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Deflate" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_Deflate" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  (arg1)->Deflate(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Deflate__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_Deflate",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Deflate" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Deflate" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Deflate(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Inflate__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Rect_Inflate",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Inflate" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Inflate" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_Inflate" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Rect_Inflate" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  (arg1)->Inflate(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Inflate__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Rect_Inflate",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Inflate" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Inflate" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_Inflate" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Inflate(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Inflate(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Rect_Inflate__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Rect_Inflate__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Rect_Inflate__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Rect_Inflate__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Rect_Inflate'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Inflate(CSG_Rect *,double,bool)\n"
+    "    Inflate(CSG_Rect *,double)\n"
+    "    Inflate(CSG_Rect *,double,double,bool)\n"
+    "    Inflate(CSG_Rect *,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Deflate__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Rect_Deflate",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Deflate" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Deflate" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_Deflate" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Rect_Deflate" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  (arg1)->Deflate(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Deflate__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Rect_Deflate",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Deflate" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Deflate" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_Deflate" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Deflate(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Deflate(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Rect_Deflate__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Rect_Deflate__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Rect_Deflate__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Rect_Deflate__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Rect_Deflate'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Deflate(CSG_Rect *,double,bool)\n"
+    "    Deflate(CSG_Rect *,double)\n"
+    "    Deflate(CSG_Rect *,double,double,bool)\n"
+    "    Deflate(CSG_Rect *,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Union(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_Union",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Union" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect_Union" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect_Union" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rect * >(argp2);
+  (arg1)->Union((CSG_Rect const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Intersect(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_Intersect",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Intersect" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect_Intersect" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect_Intersect" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rect * >(argp2);
+  result = (bool)(arg1)->Intersect((CSG_Rect const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Intersects(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Intersection result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_Intersects",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Intersects" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect_Intersects" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect_Intersects" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rect * >(argp2);
+  result = (TSG_Intersection)((CSG_Rect const *)arg1)->Intersects((CSG_Rect const &)*arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Contains__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Rect_Contains",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Contains" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rect_Contains" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rect_Contains" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)((CSG_Rect const *)arg1)->Contains(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Contains__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  CSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_Contains",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_Contains" "', argument " "1"" of type '" "CSG_Rect const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect_Contains" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rect_Contains" "', argument " "2"" of type '" "CSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Point * >(argp2);
+  result = (bool)((CSG_Rect const *)arg1)->Contains((CSG_Point const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_Contains(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Rect_Contains__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Rect_Contains__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Rect_Contains'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Contains(CSG_Rect const *,double,double)\n"
+    "    Contains(CSG_Rect const *,CSG_Point const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_m_rect_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  TSG_Rect *arg2 = (TSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rect_m_rect_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_m_rect_set" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_SSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rect_m_rect_set" "', argument " "2"" of type '" "TSG_Rect *""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Rect * >(argp2);
+  if (arg1) (arg1)->m_rect = *arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rect_m_rect_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rect *arg1 = (CSG_Rect *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rect_m_rect_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rect_m_rect_get" "', argument " "1"" of type '" "CSG_Rect *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rect * >(argp1);
+  result = (TSG_Rect *)& ((arg1)->m_rect);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Rect_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Rect, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Rects(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rects *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Rects")) SWIG_fail;
+  result = (CSG_Rects *)new CSG_Rects();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rects, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Rects(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rects *arg1 = (CSG_Rects *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Rects",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rects, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Rects" "', argument " "1"" of type '" "CSG_Rects *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rects * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rects_Clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rects *arg1 = (CSG_Rects *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rects_Clear",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rects, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rects_Clear" "', argument " "1"" of type '" "CSG_Rects *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rects * >(argp1);
+  (arg1)->Clear();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rects_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rects *arg1 = (CSG_Rects *) 0 ;
+  CSG_Rects *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rects_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rects, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rects_Assign" "', argument " "1"" of type '" "CSG_Rects *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rects * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rects,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rects_Assign" "', argument " "2"" of type '" "CSG_Rects const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rects_Assign" "', argument " "2"" of type '" "CSG_Rects const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rects * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_Rects const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rects_Add__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rects *arg1 = (CSG_Rects *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rects_Add",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rects, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rects_Add" "', argument " "1"" of type '" "CSG_Rects *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rects * >(argp1);
+  result = (bool)(arg1)->Add();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rects_Add__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rects *arg1 = (CSG_Rects *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Rects_Add",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rects, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rects_Add" "', argument " "1"" of type '" "CSG_Rects *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rects * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rects_Add" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Rects_Add" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Rects_Add" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Rects_Add" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (bool)(arg1)->Add(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rects_Add__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rects *arg1 = (CSG_Rects *) 0 ;
+  CSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rects_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rects, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rects_Add" "', argument " "1"" of type '" "CSG_Rects *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rects * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Rects_Add" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Rects_Add" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rect * >(argp2);
+  result = (bool)(arg1)->Add((CSG_Rect const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rects_Add(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rects, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Rects_Add__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rects, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Rects_Add__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Rects, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Rects_Add__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Rects_Add'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add(CSG_Rects *)\n"
+    "    Add(CSG_Rects *,double,double,double,double)\n"
+    "    Add(CSG_Rects *,CSG_Rect const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rects_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rects *arg1 = (CSG_Rects *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Rects_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rects, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rects_Get_Count" "', argument " "1"" of type '" "CSG_Rects const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rects * >(argp1);
+  result = (int)((CSG_Rects const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Rects_Get_Rect(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Rects *arg1 = (CSG_Rects *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Rects_Get_Rect",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Rects, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Rects_Get_Rect" "', argument " "1"" of type '" "CSG_Rects *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Rects * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Rects_Get_Rect" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Rect *) &(arg1)->Get_Rect(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Rects_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Rects, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Distance_Weighting(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Distance_Weighting")) SWIG_fail;
+  result = (CSG_Distance_Weighting *)new CSG_Distance_Weighting();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Distance_Weighting, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Distance_Weighting(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Distance_Weighting",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Distance_Weighting" "', argument " "1"" of type '" "CSG_Distance_Weighting *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Get_Parameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Distance_Weighting_Get_Parameters",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Get_Parameters" "', argument " "1"" of type '" "CSG_Distance_Weighting const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  result = (CSG_Parameters *)((CSG_Distance_Weighting const *)arg1)->Get_Parameters();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Set_Parameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  CSG_Parameters *arg2 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Distance_Weighting_Set_Parameters",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Set_Parameters" "', argument " "1"" of type '" "CSG_Distance_Weighting *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Distance_Weighting_Set_Parameters" "', argument " "2"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameters * >(argp2);
+  result = (bool)(arg1)->Set_Parameters(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Get_Weighting(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Distance_Weighting result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Distance_Weighting_Get_Weighting",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Get_Weighting" "', argument " "1"" of type '" "CSG_Distance_Weighting const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  result = (TSG_Distance_Weighting)((CSG_Distance_Weighting const *)arg1)->Get_Weighting();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Set_Weighting(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  TSG_Distance_Weighting arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Distance_Weighting_Set_Weighting",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Set_Weighting" "', argument " "1"" of type '" "CSG_Distance_Weighting *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Distance_Weighting_Set_Weighting" "', argument " "2"" of type '" "TSG_Distance_Weighting""'");
+  } 
+  arg2 = static_cast< TSG_Distance_Weighting >(val2);
+  result = (bool)(arg1)->Set_Weighting(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Get_IDW_Power(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Distance_Weighting_Get_IDW_Power",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Get_IDW_Power" "', argument " "1"" of type '" "CSG_Distance_Weighting const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  result = (double)((CSG_Distance_Weighting const *)arg1)->Get_IDW_Power();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Set_IDW_Power(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Distance_Weighting_Set_IDW_Power",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Set_IDW_Power" "', argument " "1"" of type '" "CSG_Distance_Weighting *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Distance_Weighting_Set_IDW_Power" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_IDW_Power(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Get_IDW_Offset(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Distance_Weighting_Get_IDW_Offset",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Get_IDW_Offset" "', argument " "1"" of type '" "CSG_Distance_Weighting const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  result = (bool)((CSG_Distance_Weighting const *)arg1)->Get_IDW_Offset();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Set_IDW_Offset__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Distance_Weighting_Set_IDW_Offset",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Set_IDW_Offset" "', argument " "1"" of type '" "CSG_Distance_Weighting *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Distance_Weighting_Set_IDW_Offset" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (bool)(arg1)->Set_IDW_Offset(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Set_IDW_Offset__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Distance_Weighting_Set_IDW_Offset",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Set_IDW_Offset" "', argument " "1"" of type '" "CSG_Distance_Weighting *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  result = (bool)(arg1)->Set_IDW_Offset();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Set_IDW_Offset(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Distance_Weighting, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Distance_Weighting_Set_IDW_Offset__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Distance_Weighting, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Distance_Weighting_Set_IDW_Offset__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Distance_Weighting_Set_IDW_Offset'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_IDW_Offset(CSG_Distance_Weighting *,bool)\n"
+    "    Set_IDW_Offset(CSG_Distance_Weighting *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Get_BandWidth(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Distance_Weighting_Get_BandWidth",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Get_BandWidth" "', argument " "1"" of type '" "CSG_Distance_Weighting const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  result = (double)((CSG_Distance_Weighting const *)arg1)->Get_BandWidth();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Set_BandWidth(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Distance_Weighting_Set_BandWidth",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Set_BandWidth" "', argument " "1"" of type '" "CSG_Distance_Weighting *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Distance_Weighting_Set_BandWidth" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_BandWidth(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Distance_Weighting_Get_Weight(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Distance_Weighting *arg1 = (CSG_Distance_Weighting *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Distance_Weighting_Get_Weight",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Distance_Weighting_Get_Weight" "', argument " "1"" of type '" "CSG_Distance_Weighting const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Distance_Weighting * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Distance_Weighting_Get_Weight" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (double)((CSG_Distance_Weighting const *)arg1)->Get_Weight(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Distance_Weighting_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Distance_Weighting, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN int Swig_var_gSG_Projection_Type_Identifier_set(PyObject *) {
+  SWIG_Error(SWIG_AttributeError,"Variable gSG_Projection_Type_Identifier is read-only.");
+  return 1;
+}
+
+
+SWIGINTERN PyObject *Swig_var_gSG_Projection_Type_Identifier_get(void) {
+  PyObject *pyobj = 0;
+  
+  pyobj = SWIG_NewPointerObj(SWIG_as_voidptr(gSG_Projection_Type_Identifier), SWIGTYPE_p_a_32__wchar_t,  0 );
+  return pyobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Projection_Type_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Projection_Type arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Get_Projection_Type_Name",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_Projection_Type_Name" "', argument " "1"" of type '" "TSG_Projection_Type""'");
+  } 
+  arg1 = static_cast< TSG_Projection_Type >(val1);
+  result = SG_Get_Projection_Type_Name(arg1);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Projection__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Projection")) SWIG_fail;
+  result = (CSG_Projection *)new CSG_Projection();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Projection, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Projection(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Projection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Projection" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Destroy" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Projection__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Projection *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Projection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Projection,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Projection" "', argument " "1"" of type '" "CSG_Projection const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Projection" "', argument " "1"" of type '" "CSG_Projection const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = (CSG_Projection *)new CSG_Projection((CSG_Projection const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Projection, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_Projection *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Create" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Projection,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Create" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Create" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Projection * >(argp2);
+  result = (bool)(arg1)->Create((CSG_Projection const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_Projection *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Assign" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Projection,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Assign" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Assign" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Projection * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_Projection const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Projection__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Projection *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Projection",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Projection" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  result = (CSG_Projection *)new CSG_Projection(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Projection, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Create" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Projection_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Assign" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Projection_Assign" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Projection__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  TSG_Projection_Format arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Projection *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Projection",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Projection" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Projection" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Projection" "', argument " "2"" of type '" "TSG_Projection_Format""'");
+  } 
+  arg2 = static_cast< TSG_Projection_Format >(val2);
+  result = (CSG_Projection *)new CSG_Projection((CSG_String const &)*arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Projection, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Projection__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Projection *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Projection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Projection" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Projection" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_Projection *)new CSG_Projection((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Projection, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Projection(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Projection__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Projection__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Projection__SWIG_4(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CSG_Projection__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Projection__SWIG_3(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Projection'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Projection()\n"
+    "    CSG_Projection(CSG_Projection const &)\n"
+    "    CSG_Projection(int)\n"
+    "    CSG_Projection(CSG_String const &,TSG_Projection_Format)\n"
+    "    CSG_Projection(CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_String *arg2 = 0 ;
+  TSG_Projection_Format arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Projection_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Create" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Projection_Create" "', argument " "3"" of type '" "TSG_Projection_Format""'");
+  } 
+  arg3 = static_cast< TSG_Projection_Format >(val3);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Create__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Create" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Projection, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Projection_Create__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Projection_Create__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Projection_Create__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Projection_Create__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Projection_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Projection *,CSG_Projection const &)\n"
+    "    Create(CSG_Projection *,int)\n"
+    "    Create(CSG_Projection *,CSG_String const &,TSG_Projection_Format)\n"
+    "    Create(CSG_Projection *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Assign__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_String *arg2 = 0 ;
+  TSG_Projection_Format arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Projection_Assign",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Assign" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Assign" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Assign" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Projection_Assign" "', argument " "3"" of type '" "TSG_Projection_Format""'");
+  } 
+  arg3 = static_cast< TSG_Projection_Format >(val3);
+  result = (bool)(arg1)->Assign((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Assign__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Assign" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Assign" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Assign" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Projection, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Projection_Assign__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Projection_Assign__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Projection_Assign__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Projection_Assign__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Projection_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_Projection *,CSG_Projection const &)\n"
+    "    Assign(CSG_Projection *,int)\n"
+    "    Assign(CSG_Projection *,CSG_String const &,TSG_Projection_Format)\n"
+    "    Assign(CSG_Projection *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_is_Okay(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_is_Okay",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_is_Okay" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = (bool)((CSG_Projection const *)arg1)->is_Okay();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_is_Equal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_Projection *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection_is_Equal",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_is_Equal" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Projection,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_is_Equal" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_is_Equal" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Projection * >(argp2);
+  result = (bool)((CSG_Projection const *)arg1)->is_Equal((CSG_Projection const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_Projection *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection___eq__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection___eq__" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Projection,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection___eq__" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection___eq__" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Projection * >(argp2);
+  result = (bool)((CSG_Projection const *)arg1)->operator ==((CSG_Projection const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_Projection *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection___ne__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection___ne__" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Projection,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection___ne__" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection___ne__" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Projection * >(argp2);
+  result = (bool)((CSG_Projection const *)arg1)->operator !=((CSG_Projection const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Load__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_String *arg2 = 0 ;
+  TSG_Projection_Format arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Projection_Load",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Load" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Load" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Load" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Projection_Load" "', argument " "3"" of type '" "TSG_Projection_Format""'");
+  } 
+  arg3 = static_cast< TSG_Projection_Format >(val3);
+  result = (bool)(arg1)->Load((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Load__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection_Load",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Load" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Load" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Load" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Load((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Save__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_String *arg2 = 0 ;
+  TSG_Projection_Format arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Projection_Save",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Save" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Projection_Save" "', argument " "3"" of type '" "TSG_Projection_Format""'");
+  } 
+  arg3 = static_cast< TSG_Projection_Format >(val3);
+  result = (bool)((CSG_Projection const *)arg1)->Save((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Save__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection_Save",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Save" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)((CSG_Projection const *)arg1)->Save((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Load__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection_Load",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Load" "', argument " "1"" of type '" "CSG_Projection *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Load" "', argument " "2"" of type '" "CSG_MetaData const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Load" "', argument " "2"" of type '" "CSG_MetaData const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  result = (bool)(arg1)->Load((CSG_MetaData const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Load(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Projection_Load__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_MetaData, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Projection_Load__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Projection_Load__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Projection_Load'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Load(CSG_Projection *,CSG_String const &,TSG_Projection_Format)\n"
+    "    Load(CSG_Projection *,CSG_String const &)\n"
+    "    Load(CSG_Projection *,CSG_MetaData const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Save__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projection_Save",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Save" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projection_Save" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projection_Save" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  result = (bool)((CSG_Projection const *)arg1)->Save(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Save(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Projection_Save__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Projection_Save__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Projection_Save__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Projection_Save'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Save(CSG_Projection const *,CSG_String const &,TSG_Projection_Format)\n"
+    "    Save(CSG_Projection const *,CSG_String const &)\n"
+    "    Save(CSG_Projection const *,CSG_MetaData &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Get_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_Get_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Get_Name" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = (CSG_String *) &((CSG_Projection const *)arg1)->Get_Name();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Get_WKT(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_Get_WKT",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Get_WKT" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = (CSG_String *) &((CSG_Projection const *)arg1)->Get_WKT();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Get_Proj4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_Get_Proj4",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Get_Proj4" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = (CSG_String *) &((CSG_Projection const *)arg1)->Get_Proj4();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Get_Authority(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_Get_Authority",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Get_Authority" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = (CSG_String *) &((CSG_Projection const *)arg1)->Get_Authority();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Get_Authority_ID(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_Get_Authority_ID",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Get_Authority_ID" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = (int)((CSG_Projection const *)arg1)->Get_Authority_ID();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Get_EPSG(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_Get_EPSG",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Get_EPSG" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = (int)((CSG_Projection const *)arg1)->Get_EPSG();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Get_Description(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_Get_Description",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Get_Description" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = ((CSG_Projection const *)arg1)->Get_Description();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Projection_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Get_Type" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = (TSG_Projection_Type)((CSG_Projection const *)arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Get_Type_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_Get_Type_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Get_Type_Name" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = ((CSG_Projection const *)arg1)->Get_Type_Name();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projection_Get_Type_Identifier(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projection *arg1 = (CSG_Projection *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projection_Get_Type_Identifier",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projection_Get_Type_Identifier" "', argument " "1"" of type '" "CSG_Projection const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projection * >(argp1);
+  result = ((CSG_Projection const *)arg1)->Get_Type_Identifier();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Projection_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Projection, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Projections__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Projections")) SWIG_fail;
+  result = (CSG_Projections *)new CSG_Projections();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Projections, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Projections(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Projections",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Projections" "', argument " "1"" of type '" "CSG_Projections *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Projections__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Projections *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Projections",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Projections" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Projections" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_Projections *)new CSG_Projections((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Projections, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Projections(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Projections__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Projections__SWIG_1(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Projections'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Projections()\n"
+    "    CSG_Projections(CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projections_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Create" "', argument " "1"" of type '" "CSG_Projections *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projections_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Destroy" "', argument " "1"" of type '" "CSG_Projections *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Reset_Dictionary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projections_Reset_Dictionary",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Reset_Dictionary" "', argument " "1"" of type '" "CSG_Projections *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  result = (bool)(arg1)->Reset_Dictionary();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Load_Dictionary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projections_Load_Dictionary",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Load_Dictionary" "', argument " "1"" of type '" "CSG_Projections *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_Load_Dictionary" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_Load_Dictionary" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Load_Dictionary((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Save_Dictionary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projections_Save_Dictionary",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Save_Dictionary" "', argument " "1"" of type '" "CSG_Projections *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_Save_Dictionary" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_Save_Dictionary" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Save_Dictionary((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Load_DB__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_String *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Projections_Load_DB",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Load_DB" "', argument " "1"" of type '" "CSG_Projections *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_Load_DB" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_Load_DB" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Projections_Load_DB" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Load_DB((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Load_DB__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projections_Load_DB",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Load_DB" "', argument " "1"" of type '" "CSG_Projections *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_Load_DB" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_Load_DB" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Load_DB((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Load_DB(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projections, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Projections_Load_DB__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projections, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Projections_Load_DB__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Projections_Load_DB'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Load_DB(CSG_Projections *,CSG_String const &,bool)\n"
+    "    Load_DB(CSG_Projections *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Save_DB(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projections_Save_DB",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Save_DB" "', argument " "1"" of type '" "CSG_Projections *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_Save_DB" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_Save_DB" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Save_DB((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projections_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Get_Count" "', argument " "1"" of type '" "CSG_Projections const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  result = (int)((CSG_Projections const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Add__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_Projection *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projections_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Add" "', argument " "1"" of type '" "CSG_Projections *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Projection,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_Add" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_Add" "', argument " "2"" of type '" "CSG_Projection const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Projection * >(argp2);
+  result = (bool)(arg1)->Add((CSG_Projection const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Add__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Projections_Add",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Add" "', argument " "1"" of type '" "CSG_Projections *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_Add" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Projections_Add" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Projections_Add" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Projections_Add" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (bool)(arg1)->Add((wchar_t const *)arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Add(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projections, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Projection, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Projections_Add__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projections, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Projections_Add__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Projections_Add'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add(CSG_Projections *,CSG_Projection const &)\n"
+    "    Add(CSG_Projections *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Get_Projection__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Projection result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projections_Get_Projection",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Get_Projection" "', argument " "1"" of type '" "CSG_Projections const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Projections_Get_Projection" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = ((CSG_Projections const *)arg1)->Get_Projection(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Projection(static_cast< const CSG_Projection& >(result))), SWIGTYPE_p_CSG_Projection, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Get_Projection__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_Projection *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Projections_Get_Projection",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Get_Projection" "', argument " "1"" of type '" "CSG_Projections const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Projection,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_Get_Projection" "', argument " "2"" of type '" "CSG_Projection &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_Get_Projection" "', argument " "2"" of type '" "CSG_Projection &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Projection * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Projections_Get_Projection" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)((CSG_Projections const *)arg1)->Get_Projection(*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Get_Projection__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_Projection *arg2 = 0 ;
+  CSG_String *arg3 = 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Projections_Get_Projection",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Get_Projection" "', argument " "1"" of type '" "CSG_Projections const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Projection,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_Get_Projection" "', argument " "2"" of type '" "CSG_Projection &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_Get_Projection" "', argument " "2"" of type '" "CSG_Projection &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Projection * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Projections_Get_Projection" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_Get_Projection" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Projections_Get_Projection" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)((CSG_Projections const *)arg1)->Get_Projection(*arg2,(CSG_String const &)*arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Get_Projection(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projections, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Projections_Get_Projection__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projections, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Projections_Get_Projection__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projections, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Projection, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_CSG_String, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Projections_Get_Projection__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Projections_Get_Projection'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Projection(CSG_Projections const *,int)\n"
+    "    Get_Projection(CSG_Projections const *,CSG_Projection &,int)\n"
+    "    Get_Projection(CSG_Projections const *,CSG_Projection &,CSG_String const &,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Get_Names_List__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  TSG_Projection_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Projections_Get_Names_List",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Get_Names_List" "', argument " "1"" of type '" "CSG_Projections const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Projections_Get_Names_List" "', argument " "2"" of type '" "TSG_Projection_Type""'");
+  } 
+  arg2 = static_cast< TSG_Projection_Type >(val2);
+  result = ((CSG_Projections const *)arg1)->Get_Names_List(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Get_Names_List__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projections_Get_Names_List",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_Get_Names_List" "', argument " "1"" of type '" "CSG_Projections const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  result = ((CSG_Projections const *)arg1)->Get_Names_List();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_Get_Names_List(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projections, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Projections_Get_Names_List__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Projections, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Projections_Get_Names_List__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Projections_Get_Names_List'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Names_List(CSG_Projections const *,TSG_Projection_Type)\n"
+    "    Get_Names_List(CSG_Projections const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_WKT_to_MetaData(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_MetaData result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Projections_WKT_to_MetaData",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_WKT_to_MetaData" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_WKT_to_MetaData" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = CSG_Projections::WKT_to_MetaData((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj((new CSG_MetaData(static_cast< const CSG_MetaData& >(result))), SWIGTYPE_p_CSG_MetaData, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_WKT_to_Proj4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_String *arg2 = 0 ;
+  CSG_String *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Projections_WKT_to_Proj4",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_WKT_to_Proj4" "', argument " "1"" of type '" "CSG_Projections const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_WKT_to_Proj4" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_WKT_to_Proj4" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Projections_WKT_to_Proj4" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_WKT_to_Proj4" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  result = (bool)((CSG_Projections const *)arg1)->WKT_to_Proj4(*arg2,(CSG_String const &)*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_WKT_from_Proj4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_String *arg2 = 0 ;
+  CSG_String *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Projections_WKT_from_Proj4",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_WKT_from_Proj4" "', argument " "1"" of type '" "CSG_Projections const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_WKT_from_Proj4" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_WKT_from_Proj4" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Projections_WKT_from_Proj4" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_WKT_from_Proj4" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  result = (bool)((CSG_Projections const *)arg1)->WKT_from_Proj4(*arg2,(CSG_String const &)*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_EPSG_to_Proj4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Projections_EPSG_to_Proj4",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_EPSG_to_Proj4" "', argument " "1"" of type '" "CSG_Projections const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_EPSG_to_Proj4" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_EPSG_to_Proj4" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Projections_EPSG_to_Proj4" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)((CSG_Projections const *)arg1)->EPSG_to_Proj4(*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Projections_EPSG_to_WKT(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *arg1 = (CSG_Projections *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Projections_EPSG_to_WKT",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Projections_EPSG_to_WKT" "', argument " "1"" of type '" "CSG_Projections const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Projections * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Projections_EPSG_to_WKT" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Projections_EPSG_to_WKT" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Projections_EPSG_to_WKT" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)((CSG_Projections const *)arg1)->EPSG_to_WKT(*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Projections_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Projections, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Get_Projections(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Projections *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Get_Projections")) SWIG_fail;
+  result = (CSG_Projections *) &SG_Get_Projections();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Projections, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Get_Length",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_Length" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Get_Length" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (double)SG_Get_Length(arg1,arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Distance__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:SG_Get_Distance",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_Distance" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Get_Distance" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Get_Distance" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "SG_Get_Distance" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (double)SG_Get_Distance(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Distance__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = 0 ;
+  TSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Get_Distance",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Get_Distance" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Distance" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Get_Distance" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Distance" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  result = (double)SG_Get_Distance((SSG_Point const &)*arg1,(SSG_Point const &)*arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Distance(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_SSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_SG_Get_Distance__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_SG_Get_Distance__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Get_Distance'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Get_Distance(double,double,double,double)\n"
+    "    SG_Get_Distance(TSG_Point const &,TSG_Point const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Angle_Of_Direction__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Get_Angle_Of_Direction",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_Angle_Of_Direction" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Get_Angle_Of_Direction" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (double)SG_Get_Angle_Of_Direction(arg1,arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Angle_Of_Direction__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:SG_Get_Angle_Of_Direction",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_Angle_Of_Direction" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Get_Angle_Of_Direction" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Get_Angle_Of_Direction" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "SG_Get_Angle_Of_Direction" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (double)SG_Get_Angle_Of_Direction(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Angle_Of_Direction__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Get_Angle_Of_Direction",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Get_Angle_Of_Direction" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Angle_Of_Direction" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  result = (double)SG_Get_Angle_Of_Direction((SSG_Point const &)*arg1);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Angle_Of_Direction__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = 0 ;
+  TSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Get_Angle_Of_Direction",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Get_Angle_Of_Direction" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Angle_Of_Direction" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Get_Angle_Of_Direction" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Angle_Of_Direction" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  result = (double)SG_Get_Angle_Of_Direction((SSG_Point const &)*arg1,(SSG_Point const &)*arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Angle_Of_Direction(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_SSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Get_Angle_Of_Direction__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_SSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_SG_Get_Angle_Of_Direction__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_SG_Get_Angle_Of_Direction__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_SG_Get_Angle_Of_Direction__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Get_Angle_Of_Direction'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Get_Angle_Of_Direction(double,double)\n"
+    "    SG_Get_Angle_Of_Direction(double,double,double,double)\n"
+    "    SG_Get_Angle_Of_Direction(TSG_Point const &)\n"
+    "    SG_Get_Angle_Of_Direction(TSG_Point const &,TSG_Point const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Crossing__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = 0 ;
+  TSG_Point *arg2 = 0 ;
+  TSG_Point *arg3 = 0 ;
+  TSG_Point *arg4 = 0 ;
+  TSG_Point *arg5 = 0 ;
+  bool arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:SG_Get_Crossing",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Get_Crossing" "', argument " "1"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing" "', argument " "1"" of type '" "TSG_Point &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Get_Crossing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SG_Get_Crossing" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "SG_Get_Crossing" "', argument " "4"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing" "', argument " "4"" of type '" "TSG_Point const &""'"); 
+  }
+  arg4 = reinterpret_cast< TSG_Point * >(argp4);
+  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "SG_Get_Crossing" "', argument " "5"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp5) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing" "', argument " "5"" of type '" "TSG_Point const &""'"); 
+  }
+  arg5 = reinterpret_cast< TSG_Point * >(argp5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "SG_Get_Crossing" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  result = (bool)SG_Get_Crossing(*arg1,(SSG_Point const &)*arg2,(SSG_Point const &)*arg3,(SSG_Point const &)*arg4,(SSG_Point const &)*arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Crossing__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = 0 ;
+  TSG_Point *arg2 = 0 ;
+  TSG_Point *arg3 = 0 ;
+  TSG_Point *arg4 = 0 ;
+  TSG_Point *arg5 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:SG_Get_Crossing",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Get_Crossing" "', argument " "1"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing" "', argument " "1"" of type '" "TSG_Point &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Get_Crossing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SG_Get_Crossing" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "SG_Get_Crossing" "', argument " "4"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing" "', argument " "4"" of type '" "TSG_Point const &""'"); 
+  }
+  arg4 = reinterpret_cast< TSG_Point * >(argp4);
+  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "SG_Get_Crossing" "', argument " "5"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp5) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing" "', argument " "5"" of type '" "TSG_Point const &""'"); 
+  }
+  arg5 = reinterpret_cast< TSG_Point * >(argp5);
+  result = (bool)SG_Get_Crossing(*arg1,(SSG_Point const &)*arg2,(SSG_Point const &)*arg3,(SSG_Point const &)*arg4,(SSG_Point const &)*arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Crossing(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_SSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_SSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_SSG_Point, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_ConvertPtr(argv[4], 0, SWIGTYPE_p_SSG_Point, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_SG_Get_Crossing__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_SSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_SSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_SSG_Point, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_ConvertPtr(argv[4], 0, SWIGTYPE_p_SSG_Point, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_SG_Get_Crossing__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Get_Crossing'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Get_Crossing(TSG_Point &,TSG_Point const &,TSG_Point const &,TSG_Point const &,TSG_Point const &,bool)\n"
+    "    SG_Get_Crossing(TSG_Point &,TSG_Point const &,TSG_Point const &,TSG_Point const &,TSG_Point const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Crossing_InRegion(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = 0 ;
+  TSG_Point *arg2 = 0 ;
+  TSG_Point *arg3 = 0 ;
+  TSG_Rect *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:SG_Get_Crossing_InRegion",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Get_Crossing_InRegion" "', argument " "1"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing_InRegion" "', argument " "1"" of type '" "TSG_Point &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Get_Crossing_InRegion" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing_InRegion" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SG_Get_Crossing_InRegion" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing_InRegion" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_SSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "SG_Get_Crossing_InRegion" "', argument " "4"" of type '" "TSG_Rect const &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Crossing_InRegion" "', argument " "4"" of type '" "TSG_Rect const &""'"); 
+  }
+  arg4 = reinterpret_cast< TSG_Rect * >(argp4);
+  result = (bool)SG_Get_Crossing_InRegion(*arg1,(SSG_Point const &)*arg2,(SSG_Point const &)*arg3,(SSG_Rect const &)*arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Nearest_Point_On_Line__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = 0 ;
+  TSG_Point *arg2 = 0 ;
+  TSG_Point *arg3 = 0 ;
+  TSG_Point *arg4 = 0 ;
+  bool arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:SG_Get_Nearest_Point_On_Line",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "4"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "4"" of type '" "TSG_Point &""'"); 
+  }
+  arg4 = reinterpret_cast< TSG_Point * >(argp4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  result = (double)SG_Get_Nearest_Point_On_Line((SSG_Point const &)*arg1,(SSG_Point const &)*arg2,(SSG_Point const &)*arg3,*arg4,arg5);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Nearest_Point_On_Line__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = 0 ;
+  TSG_Point *arg2 = 0 ;
+  TSG_Point *arg3 = 0 ;
+  TSG_Point *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:SG_Get_Nearest_Point_On_Line",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "1"" of type '" "TSG_Point const &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "4"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Nearest_Point_On_Line" "', argument " "4"" of type '" "TSG_Point &""'"); 
+  }
+  arg4 = reinterpret_cast< TSG_Point * >(argp4);
+  result = (double)SG_Get_Nearest_Point_On_Line((SSG_Point const &)*arg1,(SSG_Point const &)*arg2,(SSG_Point const &)*arg3,*arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Nearest_Point_On_Line(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_SSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_SSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_SSG_Point, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_SG_Get_Nearest_Point_On_Line__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_SSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_SSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_SSG_Point, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_SG_Get_Nearest_Point_On_Line__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Get_Nearest_Point_On_Line'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Get_Nearest_Point_On_Line(TSG_Point const &,TSG_Point const &,TSG_Point const &,TSG_Point &,bool)\n"
+    "    SG_Get_Nearest_Point_On_Line(TSG_Point const &,TSG_Point const &,TSG_Point const &,TSG_Point &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Triangle_CircumCircle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 ;
+  TSG_Point *arg2 = 0 ;
+  double *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_Get_Triangle_CircumCircle",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Get_Triangle_CircumCircle" "', argument " "1"" of type '" "TSG_Point [3]""'"); 
+  } 
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Get_Triangle_CircumCircle" "', argument " "2"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Triangle_CircumCircle" "', argument " "2"" of type '" "TSG_Point &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SG_Get_Triangle_CircumCircle" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Triangle_CircumCircle" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  result = (bool)SG_Get_Triangle_CircumCircle(arg1,*arg2,*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Polygon_Area__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Point *arg1 = (TSG_Point *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Get_Polygon_Area",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SSG_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Get_Polygon_Area" "', argument " "1"" of type '" "TSG_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Point * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Get_Polygon_Area" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)SG_Get_Polygon_Area(arg1,arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Polygon_Area__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Points *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Get_Polygon_Area",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Points,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Get_Polygon_Area" "', argument " "1"" of type '" "CSG_Points const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Get_Polygon_Area" "', argument " "1"" of type '" "CSG_Points const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Points * >(argp1);
+  result = (double)SG_Get_Polygon_Area((CSG_Points const &)*arg1);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Polygon_Area(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Get_Polygon_Area__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_SSG_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_SG_Get_Polygon_Area__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Get_Polygon_Area'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Get_Polygon_Area(TSG_Point *,int)\n"
+    "    SG_Get_Polygon_Area(CSG_Points const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_Square(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Get_Square",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_Square" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = (double)SG_Get_Square(arg1);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Index__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Index")) SWIG_fail;
+  result = (CSG_Index *)new CSG_Index();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Index, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Index(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Index",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Index" "', argument " "1"" of type '" "CSG_Index *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Index__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int *arg2 = (int *) 0 ;
+  bool arg3 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Index *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Index",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Index" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_int, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Index" "', argument " "2"" of type '" "int *""'"); 
+  }
+  arg2 = reinterpret_cast< int * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Index" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (CSG_Index *)new CSG_Index(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Index, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Index__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int *arg2 = (int *) 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Index *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Index",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Index" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_int, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Index" "', argument " "2"" of type '" "int *""'"); 
+  }
+  arg2 = reinterpret_cast< int * >(argp2);
+  result = (CSG_Index *)new CSG_Index(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Index, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  int arg2 ;
+  int *arg3 = (int *) 0 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Index_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Index_Create" "', argument " "1"" of type '" "CSG_Index *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Index_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_int, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Index_Create" "', argument " "3"" of type '" "int *""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Index_Create" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  int arg2 ;
+  int *arg3 = (int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Index_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Index_Create" "', argument " "1"" of type '" "CSG_Index *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Index_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_int, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Index_Create" "', argument " "3"" of type '" "int *""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  result = (bool)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Index__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  double *arg2 = (double *) 0 ;
+  bool arg3 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Index *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Index",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Index" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Index" "', argument " "2"" of type '" "double *""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Index" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (CSG_Index *)new CSG_Index(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Index, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Index__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  double *arg2 = (double *) 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Index *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Index",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Index" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Index" "', argument " "2"" of type '" "double *""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  result = (CSG_Index *)new CSG_Index(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Index, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  int arg2 ;
+  double *arg3 = (double *) 0 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Index_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Index_Create" "', argument " "1"" of type '" "CSG_Index *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Index_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Index_Create" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Index_Create" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Create__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  int arg2 ;
+  double *arg3 = (double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Index_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Index_Create" "', argument " "1"" of type '" "CSG_Index *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Index_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Index_Create" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  result = (bool)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Index__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  TSG_PFNC_Compare arg2 = (TSG_PFNC_Compare) 0 ;
+  bool arg3 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Index *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Index",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Index" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  {
+    int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_q_const__int_q_const__int__int);
+    if (!SWIG_IsOK(res)) {
+      SWIG_exception_fail(SWIG_ArgError(res), "in method '" "new_CSG_Index" "', argument " "2"" of type '" "TSG_PFNC_Compare""'"); 
+    }
+  }
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Index" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (CSG_Index *)new CSG_Index(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Index, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Index__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  TSG_PFNC_Compare arg2 = (TSG_PFNC_Compare) 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Index *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Index",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Index" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  {
+    int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_q_const__int_q_const__int__int);
+    if (!SWIG_IsOK(res)) {
+      SWIG_exception_fail(SWIG_ArgError(res), "in method '" "new_CSG_Index" "', argument " "2"" of type '" "TSG_PFNC_Compare""'"); 
+    }
+  }
+  result = (CSG_Index *)new CSG_Index(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Index, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Index(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Index__SWIG_0(self, args);
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_int, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_new_CSG_Index__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_new_CSG_Index__SWIG_4(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertFunctionPtr(argv[1], &ptr, SWIGTYPE_p_f_q_const__int_q_const__int__int);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_new_CSG_Index__SWIG_6(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_int, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Index__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertFunctionPtr(argv[1], &ptr, SWIGTYPE_p_f_q_const__int_q_const__int__int);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Index__SWIG_5(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Index__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Index'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Index()\n"
+    "    CSG_Index(int,int *,bool)\n"
+    "    CSG_Index(int,int *)\n"
+    "    CSG_Index(int,double *,bool)\n"
+    "    CSG_Index(int,double *)\n"
+    "    CSG_Index(int,TSG_PFNC_Compare,bool)\n"
+    "    CSG_Index(int,TSG_PFNC_Compare)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Create__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  int arg2 ;
+  TSG_PFNC_Compare arg3 = (TSG_PFNC_Compare) 0 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Index_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Index_Create" "', argument " "1"" of type '" "CSG_Index *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Index_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  {
+    int res = SWIG_ConvertFunctionPtr(obj2, (void**)(&arg3), SWIGTYPE_p_f_q_const__int_q_const__int__int);
+    if (!SWIG_IsOK(res)) {
+      SWIG_exception_fail(SWIG_ArgError(res), "in method '" "CSG_Index_Create" "', argument " "3"" of type '" "TSG_PFNC_Compare""'"); 
+    }
+  }
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Index_Create" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Create__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  int arg2 ;
+  TSG_PFNC_Compare arg3 = (TSG_PFNC_Compare) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Index_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Index_Create" "', argument " "1"" of type '" "CSG_Index *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Index_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  {
+    int res = SWIG_ConvertFunctionPtr(obj2, (void**)(&arg3), SWIGTYPE_p_f_q_const__int_q_const__int__int);
+    if (!SWIG_IsOK(res)) {
+      SWIG_exception_fail(SWIG_ArgError(res), "in method '" "CSG_Index_Create" "', argument " "3"" of type '" "TSG_PFNC_Compare""'"); 
+    }
+  }
+  result = (bool)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Index, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Index_Create__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Index, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Index_Create__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Index, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *ptr = 0;
+        int res = SWIG_ConvertFunctionPtr(argv[2], &ptr, SWIGTYPE_p_f_q_const__int_q_const__int__int);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Index_Create__SWIG_5(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Index, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Index_Create__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Index, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *ptr = 0;
+        int res = SWIG_ConvertFunctionPtr(argv[2], &ptr, SWIGTYPE_p_f_q_const__int_q_const__int__int);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Index_Create__SWIG_4(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Index, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Index_Create__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Index_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Index *,int,int *,bool)\n"
+    "    Create(CSG_Index *,int,int *)\n"
+    "    Create(CSG_Index *,int,double *,bool)\n"
+    "    Create(CSG_Index *,int,double *)\n"
+    "    Create(CSG_Index *,int,TSG_PFNC_Compare,bool)\n"
+    "    Create(CSG_Index *,int,TSG_PFNC_Compare)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Index_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Index_Destroy" "', argument " "1"" of type '" "CSG_Index *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_is_Okay(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Index_is_Okay",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Index_is_Okay" "', argument " "1"" of type '" "CSG_Index const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  result = (bool)((CSG_Index const *)arg1)->is_Okay();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Index_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Index_Get_Count" "', argument " "1"" of type '" "CSG_Index const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  result = (int)((CSG_Index const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Get_Index__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Index_Get_Index",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Index_Get_Index" "', argument " "1"" of type '" "CSG_Index const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Index_Get_Index" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Index_Get_Index" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (int)((CSG_Index const *)arg1)->Get_Index(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Get_Index__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Index *arg1 = (CSG_Index *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Index_Get_Index",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Index, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Index_Get_Index" "', argument " "1"" of type '" "CSG_Index const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Index * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Index_Get_Index" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Index const *)arg1)->Get_Index(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Index_Get_Index(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Index, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Index_Get_Index__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Index, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Index_Get_Index__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Index_Get_Index'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Index(CSG_Index const *,int,bool)\n"
+    "    Get_Index(CSG_Index const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Index_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Index, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Vector__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Vector")) SWIG_fail;
+  result = (CSG_Vector *)new CSG_Vector();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Vector(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Vector",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Vector" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Vector__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Vector *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Vector",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Vector" "', argument " "1"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Vector" "', argument " "1"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  result = (CSG_Vector *)new CSG_Vector((CSG_Vector const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Create" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector_Create" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector_Create" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (bool)(arg1)->Create((CSG_Vector const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Vector__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  double *arg2 = (double *) 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Vector",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Vector" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Vector" "', argument " "2"" of type '" "double *""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  result = (CSG_Vector *)new CSG_Vector(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Vector__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Vector *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Vector",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Vector" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  result = (CSG_Vector *)new CSG_Vector(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Vector(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Vector__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Vector__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CSG_Vector__SWIG_3(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_new_CSG_Vector__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Vector'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Vector()\n"
+    "    CSG_Vector(CSG_Vector const &)\n"
+    "    CSG_Vector(int,double *)\n"
+    "    CSG_Vector(int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  int arg2 ;
+  double *arg3 = (double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Vector_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Create" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Vector_Create" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  result = (bool)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Create" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector_Create__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Vector_Create__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Vector_Create__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Vector_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Vector *,CSG_Vector const &)\n"
+    "    Create(CSG_Vector *,int,double *)\n"
+    "    Create(CSG_Vector *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Vector_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Destroy" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Get_N(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Vector_Get_N",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Get_N" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  result = (int)((CSG_Vector const *)arg1)->Get_N();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Get_Data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Vector_Get_Data",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Get_Data" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  result = (double *)((CSG_Vector const *)arg1)->Get_Data();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_double, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___call__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___call__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___call__" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector___call__" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Vector const *)arg1)->operator ()(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Vector_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_asString" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  result = (arg1)->asString();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_is_Equal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_is_Equal",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_is_Equal" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector_is_Equal" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector_is_Equal" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (bool)((CSG_Vector const *)arg1)->is_Equal((CSG_Vector const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Assign" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector_Assign" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Assign" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector_Assign" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector_Assign" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_Vector const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector_Assign__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Vector_Assign__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Vector_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_Vector *,double)\n"
+    "    Assign(CSG_Vector *,CSG_Vector const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Add__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Add" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector_Add" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Add(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Add__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Add" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector_Add" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector_Add" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (bool)(arg1)->Add((CSG_Vector const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Add(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector_Add__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Vector_Add__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Vector_Add'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add(CSG_Vector *,double)\n"
+    "    Add(CSG_Vector *,CSG_Vector const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Subtract(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Subtract",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Subtract" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector_Subtract" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector_Subtract" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (bool)(arg1)->Subtract((CSG_Vector const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Multiply__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Multiply",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Multiply" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector_Multiply" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Multiply(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Multiply__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Multiply",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Multiply" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector_Multiply" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector_Multiply" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (bool)(arg1)->Multiply((CSG_Vector const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Multiply_Scalar(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Multiply_Scalar",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Multiply_Scalar" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector_Multiply_Scalar" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector_Multiply_Scalar" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (double)((CSG_Vector const *)arg1)->Multiply_Scalar((CSG_Vector const &)*arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Multiply__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Multiply",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Multiply" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector_Multiply" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector_Multiply" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = (bool)(arg1)->Multiply((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Multiply(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector_Multiply__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector_Multiply__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Vector_Multiply__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Vector_Multiply'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Multiply(CSG_Vector *,double)\n"
+    "    Multiply(CSG_Vector *,CSG_Vector const &)\n"
+    "    Multiply(CSG_Vector *,CSG_Matrix const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___eq__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___eq__" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector___eq__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector___eq__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (bool)((CSG_Vector const *)arg1)->operator ==((CSG_Vector const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___iadd____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___iadd__" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector___iadd__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Vector *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___iadd____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___iadd__" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector___iadd__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector___iadd__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (CSG_Vector *) &(arg1)->operator +=((CSG_Vector const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___iadd__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector___iadd____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Vector___iadd____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Vector___iadd__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator +=(CSG_Vector *,double)\n"
+    "    operator +=(CSG_Vector *,CSG_Vector const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___isub____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___isub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___isub__" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector___isub__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Vector *) &(arg1)->operator -=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___isub____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___isub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___isub__" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector___isub__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector___isub__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (CSG_Vector *) &(arg1)->operator -=((CSG_Vector const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___isub__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector___isub____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Vector___isub____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Vector___isub__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator -=(CSG_Vector *,double)\n"
+    "    operator -=(CSG_Vector *,CSG_Vector const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___imul____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___imul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___imul__" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector___imul__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Vector *) &(arg1)->operator *=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___imul____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___imul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___imul__" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector___imul__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector___imul__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (CSG_Vector *) &(arg1)->operator *=((CSG_Vector const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___imul____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___imul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___imul__" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector___imul__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector___imul__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = (CSG_Vector *) &(arg1)->operator *=((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___imul__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector___imul____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector___imul____SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Vector___imul____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Vector___imul__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator *=(CSG_Vector *,double)\n"
+    "    operator *=(CSG_Vector *,CSG_Vector const &)\n"
+    "    operator *=(CSG_Vector *,CSG_Matrix const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___add____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___add__" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector___add__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((CSG_Vector const *)arg1)->operator +(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Vector(static_cast< const CSG_Vector& >(result))), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___add____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___add__" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector___add__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector___add__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = ((CSG_Vector const *)arg1)->operator +((CSG_Vector const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Vector(static_cast< const CSG_Vector& >(result))), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___add__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector___add____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Vector___add____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  Py_INCREF(Py_NotImplemented);
+  return Py_NotImplemented;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___sub____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___sub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___sub__" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector___sub__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((CSG_Vector const *)arg1)->operator -(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Vector(static_cast< const CSG_Vector& >(result))), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___sub____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___sub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___sub__" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector___sub__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector___sub__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = ((CSG_Vector const *)arg1)->operator -((CSG_Vector const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Vector(static_cast< const CSG_Vector& >(result))), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___sub__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector___sub____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Vector___sub____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  Py_INCREF(Py_NotImplemented);
+  return Py_NotImplemented;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___mul____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___mul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___mul__" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Vector___mul__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((CSG_Vector const *)arg1)->operator *(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Vector(static_cast< const CSG_Vector& >(result))), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___mul____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector___mul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector___mul__" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector___mul__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector___mul__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (double)((CSG_Vector const *)arg1)->operator *((CSG_Vector const &)*arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector___mul__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Vector___mul____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Vector___mul____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  Py_INCREF(Py_NotImplemented);
+  return Py_NotImplemented;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Set_Zero(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Vector_Set_Zero",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Set_Zero" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  result = (bool)(arg1)->Set_Zero();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Set_Unity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Vector_Set_Unity",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Set_Unity" "', argument " "1"" of type '" "CSG_Vector *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  result = (bool)(arg1)->Set_Unity();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Get_Length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Vector_Get_Length",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Get_Length" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  result = (double)((CSG_Vector const *)arg1)->Get_Length();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Get_Angle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Vector_Get_Angle",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Get_Angle" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Vector_Get_Angle" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Vector_Get_Angle" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (double)((CSG_Vector const *)arg1)->Get_Angle((CSG_Vector const &)*arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Vector_Get_Unity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Vector *arg1 = (CSG_Vector *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Vector result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Vector_Get_Unity",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Vector, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Vector_Get_Unity" "', argument " "1"" of type '" "CSG_Vector const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Vector * >(argp1);
+  result = ((CSG_Vector const *)arg1)->Get_Unity();
+  resultobj = SWIG_NewPointerObj((new CSG_Vector(static_cast< const CSG_Vector& >(result))), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Vector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Vector, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Matrix__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Matrix")) SWIG_fail;
+  result = (CSG_Matrix *)new CSG_Matrix();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Matrix(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Matrix",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Matrix" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Matrix__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Matrix *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Matrix",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Matrix" "', argument " "1"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Matrix" "', argument " "1"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (CSG_Matrix *)new CSG_Matrix((CSG_Matrix const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Create" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix_Create" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix_Create" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = (bool)(arg1)->Create((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Matrix__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  double *arg3 = (double *) 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Matrix *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Matrix",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Matrix" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Matrix" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_CSG_Matrix" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  result = (CSG_Matrix *)new CSG_Matrix(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Matrix__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int arg2 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Matrix",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Matrix" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Matrix" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Matrix *)new CSG_Matrix(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Matrix(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Matrix__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Matrix__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Matrix__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_new_CSG_Matrix__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Matrix'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Matrix()\n"
+    "    CSG_Matrix(CSG_Matrix const &)\n"
+    "    CSG_Matrix(int,int,double *)\n"
+    "    CSG_Matrix(int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double *arg4 = (double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Matrix_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Create" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Matrix_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Matrix_Create" "', argument " "4"" of type '" "double *""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Matrix_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Create" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Matrix_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix_Create__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Matrix_Create__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_double, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Matrix_Create__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Matrix_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Matrix *,CSG_Matrix const &)\n"
+    "    Create(CSG_Matrix *,int,int,double *)\n"
+    "    Create(CSG_Matrix *,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Destroy" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Add_Cols(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Add_Cols",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Add_Cols" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix_Add_Cols" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Add_Cols(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Add_Rows(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Add_Rows",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Add_Rows" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix_Add_Rows" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Add_Rows(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Get_NX(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_Get_NX",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Get_NX" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (int)((CSG_Matrix const *)arg1)->Get_NX();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Get_NY(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_Get_NY",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Get_NY" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (int)((CSG_Matrix const *)arg1)->Get_NY();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Get_Data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double **result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_Get_Data",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Get_Data" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (double **)((CSG_Matrix const *)arg1)->Get_Data();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_double, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___call__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Matrix___call__",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___call__" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix___call__" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Matrix___call__" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)((CSG_Matrix const *)arg1)->operator ()(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_asString" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (arg1)->asString();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_is_Square(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_is_Square",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_is_Square" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (bool)((CSG_Matrix const *)arg1)->is_Square();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_is_Equal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_is_Equal",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_is_Equal" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix_is_Equal" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix_is_Equal" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = (bool)((CSG_Matrix const *)arg1)->is_Equal((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Assign" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix_Assign" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Assign" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix_Assign" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix_Assign" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix_Assign__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Matrix_Assign__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Matrix_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_Matrix *,double)\n"
+    "    Assign(CSG_Matrix *,CSG_Matrix const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Add__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Add" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix_Add" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Add(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Add__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Add" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix_Add" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix_Add" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = (bool)(arg1)->Add((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Add(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix_Add__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Matrix_Add__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Matrix_Add'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add(CSG_Matrix *,double)\n"
+    "    Add(CSG_Matrix *,CSG_Matrix const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Subtract(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Subtract",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Subtract" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix_Subtract" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix_Subtract" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = (bool)(arg1)->Subtract((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Multiply__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Multiply",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Multiply" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix_Multiply" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Multiply(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Multiply__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Multiply",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Multiply" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix_Multiply" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix_Multiply" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = ((CSG_Matrix const *)arg1)->Multiply((CSG_Vector const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Vector(static_cast< const CSG_Vector& >(result))), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Multiply__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Multiply",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Multiply" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix_Multiply" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix_Multiply" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = ((CSG_Matrix const *)arg1)->Multiply((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Matrix(static_cast< const CSG_Matrix& >(result))), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Multiply(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix_Multiply__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix_Multiply__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Matrix_Multiply__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Matrix_Multiply'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Multiply(CSG_Matrix *,double)\n"
+    "    Multiply(CSG_Matrix const *,CSG_Vector const &)\n"
+    "    Multiply(CSG_Matrix const *,CSG_Matrix const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___eq__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___eq__" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix___eq__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix___eq__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = (bool)((CSG_Matrix const *)arg1)->operator ==((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___iadd____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___iadd__" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix___iadd__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Matrix *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___iadd____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___iadd__" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix___iadd__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix___iadd__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = (CSG_Matrix *) &(arg1)->operator +=((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___iadd__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix___iadd____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Matrix___iadd____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Matrix___iadd__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator +=(CSG_Matrix *,double)\n"
+    "    operator +=(CSG_Matrix *,CSG_Matrix const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___isub____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___isub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___isub__" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix___isub__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Matrix *) &(arg1)->operator -=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___isub____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___isub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___isub__" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix___isub__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix___isub__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = (CSG_Matrix *) &(arg1)->operator -=((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___isub__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix___isub____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Matrix___isub____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Matrix___isub__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator -=(CSG_Matrix *,double)\n"
+    "    operator -=(CSG_Matrix *,CSG_Matrix const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___imul____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___imul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___imul__" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix___imul__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Matrix *) &(arg1)->operator *=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___imul____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___imul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___imul__" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix___imul__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix___imul__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = (CSG_Matrix *) &(arg1)->operator *=((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___imul__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix___imul____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Matrix___imul____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Matrix___imul__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator *=(CSG_Matrix *,double)\n"
+    "    operator *=(CSG_Matrix *,CSG_Matrix const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___add____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___add__" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix___add__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((CSG_Matrix const *)arg1)->operator +(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Matrix(static_cast< const CSG_Matrix& >(result))), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___add____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___add__" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix___add__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix___add__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = ((CSG_Matrix const *)arg1)->operator +((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Matrix(static_cast< const CSG_Matrix& >(result))), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___add__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix___add____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Matrix___add____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  Py_INCREF(Py_NotImplemented);
+  return Py_NotImplemented;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___sub____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___sub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___sub__" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix___sub__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((CSG_Matrix const *)arg1)->operator -(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Matrix(static_cast< const CSG_Matrix& >(result))), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___sub____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___sub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___sub__" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix___sub__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix___sub__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = ((CSG_Matrix const *)arg1)->operator -((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Matrix(static_cast< const CSG_Matrix& >(result))), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___sub__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix___sub____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Matrix___sub____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  Py_INCREF(Py_NotImplemented);
+  return Py_NotImplemented;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___mul____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___mul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___mul__" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix___mul__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((CSG_Matrix const *)arg1)->operator *(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Matrix(static_cast< const CSG_Matrix& >(result))), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___mul____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Vector result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___mul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___mul__" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix___mul__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix___mul__" "', argument " "2"" of type '" "CSG_Vector const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = ((CSG_Matrix const *)arg1)->operator *((CSG_Vector const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Vector(static_cast< const CSG_Vector& >(result))), SWIGTYPE_p_CSG_Vector, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___mul____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  CSG_Matrix *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix___mul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix___mul__" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Matrix,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Matrix___mul__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Matrix___mul__" "', argument " "2"" of type '" "CSG_Matrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Matrix * >(argp2);
+  result = ((CSG_Matrix const *)arg1)->operator *((CSG_Matrix const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Matrix(static_cast< const CSG_Matrix& >(result))), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix___mul__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix___mul____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Matrix, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Matrix___mul____SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Matrix___mul____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  Py_INCREF(Py_NotImplemented);
+  return Py_NotImplemented;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Set_Zero(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_Set_Zero",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Set_Zero" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (bool)(arg1)->Set_Zero();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Set_Identity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_Set_Identity",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Set_Identity" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (bool)(arg1)->Set_Identity();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Set_Transpose(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_Set_Transpose",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Set_Transpose" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (bool)(arg1)->Set_Transpose();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Set_Inverse__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  bool arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Matrix_Set_Inverse",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Set_Inverse" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix_Set_Inverse" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Matrix_Set_Inverse" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Set_Inverse(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Set_Inverse__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Set_Inverse",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Set_Inverse" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix_Set_Inverse" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (bool)(arg1)->Set_Inverse(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Set_Inverse__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_Set_Inverse",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Set_Inverse" "', argument " "1"" of type '" "CSG_Matrix *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (bool)(arg1)->Set_Inverse();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Set_Inverse(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Matrix_Set_Inverse__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Matrix_Set_Inverse__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Matrix_Set_Inverse__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Matrix_Set_Inverse'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Inverse(CSG_Matrix *,bool,int)\n"
+    "    Set_Inverse(CSG_Matrix *,bool)\n"
+    "    Set_Inverse(CSG_Matrix *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Get_Determinant(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_Get_Determinant",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Get_Determinant" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = (double)((CSG_Matrix const *)arg1)->Get_Determinant();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Get_Transpose(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Matrix result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_Get_Transpose",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Get_Transpose" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = ((CSG_Matrix const *)arg1)->Get_Transpose();
+  resultobj = SWIG_NewPointerObj((new CSG_Matrix(static_cast< const CSG_Matrix& >(result))), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Get_Inverse__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  bool arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Matrix result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Matrix_Get_Inverse",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Get_Inverse" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix_Get_Inverse" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Matrix_Get_Inverse" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = ((CSG_Matrix const *)arg1)->Get_Inverse(arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new CSG_Matrix(static_cast< const CSG_Matrix& >(result))), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Get_Inverse__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Matrix result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Matrix_Get_Inverse",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Get_Inverse" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Matrix_Get_Inverse" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = ((CSG_Matrix const *)arg1)->Get_Inverse(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Matrix(static_cast< const CSG_Matrix& >(result))), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Get_Inverse__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = (CSG_Matrix *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Matrix result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Matrix_Get_Inverse",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Matrix, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Matrix_Get_Inverse" "', argument " "1"" of type '" "CSG_Matrix const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  result = ((CSG_Matrix const *)arg1)->Get_Inverse();
+  resultobj = SWIG_NewPointerObj((new CSG_Matrix(static_cast< const CSG_Matrix& >(result))), SWIGTYPE_p_CSG_Matrix, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Matrix_Get_Inverse(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Matrix_Get_Inverse__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Matrix_Get_Inverse__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Matrix_Get_Inverse__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Matrix_Get_Inverse'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Inverse(CSG_Matrix const *,bool,int)\n"
+    "    Get_Inverse(CSG_Matrix const *,bool)\n"
+    "    Get_Inverse(CSG_Matrix const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Matrix_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Matrix, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Matrix_Solve__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = 0 ;
+  CSG_Vector *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_Matrix_Solve",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Matrix,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Matrix_Solve" "', argument " "1"" of type '" "CSG_Matrix &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Matrix_Solve" "', argument " "1"" of type '" "CSG_Matrix &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Matrix_Solve" "', argument " "2"" of type '" "CSG_Vector &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Matrix_Solve" "', argument " "2"" of type '" "CSG_Vector &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Matrix_Solve" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)SG_Matrix_Solve(*arg1,*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Matrix_Solve__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Matrix *arg1 = 0 ;
+  CSG_Vector *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Matrix_Solve",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Matrix,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Matrix_Solve" "', argument " "1"" of type '" "CSG_Matrix &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Matrix_Solve" "', argument " "1"" of type '" "CSG_Matrix &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Matrix * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Vector,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Matrix_Solve" "', argument " "2"" of type '" "CSG_Vector &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Matrix_Solve" "', argument " "2"" of type '" "CSG_Vector &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Vector * >(argp2);
+  result = (bool)SG_Matrix_Solve(*arg1,*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Matrix_Solve(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_SG_Matrix_Solve__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Matrix, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Vector, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_SG_Matrix_Solve__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Matrix_Solve'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Matrix_Solve(CSG_Matrix &,CSG_Vector &,bool)\n"
+    "    SG_Matrix_Solve(CSG_Matrix &,CSG_Vector &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Radius__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid_Radius *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Grid_Radius",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Grid_Radius" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  result = (CSG_Grid_Radius *)new CSG_Grid_Radius(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Radius, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Radius__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Radius *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Grid_Radius")) SWIG_fail;
+  result = (CSG_Grid_Radius *)new CSG_Grid_Radius();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Radius, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Radius(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Grid_Radius__SWIG_1(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CSG_Grid_Radius__SWIG_0(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Grid_Radius'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Grid_Radius(int)\n"
+    "    CSG_Grid_Radius()\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Grid_Radius(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Radius *arg1 = (CSG_Grid_Radius *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Grid_Radius",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Radius, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Grid_Radius" "', argument " "1"" of type '" "CSG_Grid_Radius *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Radius * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Radius_Create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Radius *arg1 = (CSG_Grid_Radius *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Radius_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Radius, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Radius_Create" "', argument " "1"" of type '" "CSG_Grid_Radius *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Radius * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Radius_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Radius_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Radius *arg1 = (CSG_Grid_Radius *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Radius_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Radius, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Radius_Destroy" "', argument " "1"" of type '" "CSG_Grid_Radius *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Radius * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Radius_Get_Maximum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Radius *arg1 = (CSG_Grid_Radius *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Radius_Get_Maximum",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Radius, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Radius_Get_Maximum" "', argument " "1"" of type '" "CSG_Grid_Radius *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Radius * >(argp1);
+  result = (int)(arg1)->Get_Maximum();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Radius_Get_nPoints__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Radius *arg1 = (CSG_Grid_Radius *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Radius_Get_nPoints",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Radius, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Radius_Get_nPoints" "', argument " "1"" of type '" "CSG_Grid_Radius *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Radius * >(argp1);
+  result = (int)(arg1)->Get_nPoints();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Radius_Get_nPoints__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Radius *arg1 = (CSG_Grid_Radius *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Radius_Get_nPoints",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Radius, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Radius_Get_nPoints" "', argument " "1"" of type '" "CSG_Grid_Radius *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Radius * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Radius_Get_nPoints" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Get_nPoints(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Radius_Get_nPoints(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Radius, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Radius_Get_nPoints__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Radius, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Radius_Get_nPoints__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Radius_Get_nPoints'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_nPoints(CSG_Grid_Radius *)\n"
+    "    Get_nPoints(CSG_Grid_Radius *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Radius_Get_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Radius *arg1 = (CSG_Grid_Radius *) 0 ;
+  int arg2 ;
+  int *arg3 = 0 ;
+  int *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Radius_Get_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Radius, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "1"" of type '" "CSG_Grid_Radius *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Radius * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "4"" of type '" "int &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "4"" of type '" "int &""'"); 
+  }
+  arg4 = reinterpret_cast< int * >(argp4);
+  result = (double)(arg1)->Get_Point(arg2,*arg3,*arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Radius_Get_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Radius *arg1 = (CSG_Grid_Radius *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  int arg4 ;
+  int *arg5 = 0 ;
+  int *arg6 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_Radius_Get_Point",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Radius, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "1"" of type '" "CSG_Grid_Radius *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Radius * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "5"" of type '" "int &""'"); 
+  }
+  if (!argp5) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "5"" of type '" "int &""'"); 
+  }
+  arg5 = reinterpret_cast< int * >(argp5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "6"" of type '" "int &""'"); 
+  }
+  if (!argp6) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "6"" of type '" "int &""'"); 
+  }
+  arg6 = reinterpret_cast< int * >(argp6);
+  result = (double)(arg1)->Get_Point(arg2,arg3,arg4,*arg5,*arg6);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Radius_Get_Point__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Radius *arg1 = (CSG_Grid_Radius *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  int *arg4 = 0 ;
+  int *arg5 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_Radius_Get_Point",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Radius, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "1"" of type '" "CSG_Grid_Radius *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Radius * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "4"" of type '" "int &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "4"" of type '" "int &""'"); 
+  }
+  arg4 = reinterpret_cast< int * >(argp4);
+  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "5"" of type '" "int &""'"); 
+  }
+  if (!argp5) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "5"" of type '" "int &""'"); 
+  }
+  arg5 = reinterpret_cast< int * >(argp5);
+  result = (double)(arg1)->Get_Point(arg2,arg3,*arg4,*arg5);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Radius_Get_Point__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Radius *arg1 = (CSG_Grid_Radius *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  int arg4 ;
+  int arg5 ;
+  int *arg6 = 0 ;
+  int *arg7 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  void *argp7 = 0 ;
+  int res7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Grid_Radius_Get_Point",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Radius, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "1"" of type '" "CSG_Grid_Radius *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Radius * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "6"" of type '" "int &""'"); 
+  }
+  if (!argp6) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "6"" of type '" "int &""'"); 
+  }
+  arg6 = reinterpret_cast< int * >(argp6);
+  res7 = SWIG_ConvertPtr(obj6, &argp7, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res7)) {
+    SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "7"" of type '" "int &""'"); 
+  }
+  if (!argp7) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Radius_Get_Point" "', argument " "7"" of type '" "int &""'"); 
+  }
+  arg7 = reinterpret_cast< int * >(argp7);
+  result = (double)(arg1)->Get_Point(arg2,arg3,arg4,arg5,*arg6,*arg7);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Radius_Get_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Radius, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_int, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Grid_Radius_Get_Point__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Radius, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_int, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            void *vptr = 0;
+            int res = SWIG_ConvertPtr(argv[4], &vptr, SWIGTYPE_p_int, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Grid_Radius_Get_Point__SWIG_2(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Radius, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            void *vptr = 0;
+            int res = SWIG_ConvertPtr(argv[4], &vptr, SWIGTYPE_p_int, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_int, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Grid_Radius_Get_Point__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Radius, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_int, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                void *vptr = 0;
+                int res = SWIG_ConvertPtr(argv[6], &vptr, SWIGTYPE_p_int, 0);
+                _v = SWIG_CheckState(res);
+                if (_v) {
+                  return _wrap_CSG_Grid_Radius_Get_Point__SWIG_3(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Radius_Get_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Point(CSG_Grid_Radius *,int,int &,int &)\n"
+    "    Get_Point(CSG_Grid_Radius *,int,int,int,int &,int &)\n"
+    "    Get_Point(CSG_Grid_Radius *,int,int,int &,int &)\n"
+    "    Get_Point(CSG_Grid_Radius *,int,int,int,int,int &,int &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Grid_Radius_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Grid_Radius, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Simple_Statistics(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Simple_Statistics")) SWIG_fail;
+  result = (CSG_Simple_Statistics *)new CSG_Simple_Statistics();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Simple_Statistics, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Invalidate(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Simple_Statistics_Invalidate",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Invalidate" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  (arg1)->Invalidate();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_is_Evaluated(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Simple_Statistics_is_Evaluated",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_is_Evaluated" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  result = (bool)(arg1)->is_Evaluated();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Simple_Statistics_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Get_Count" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  result = (int)(arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Get_Weights(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Simple_Statistics_Get_Weights",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Get_Weights" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  result = (double)(arg1)->Get_Weights();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Get_Minimum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Simple_Statistics_Get_Minimum",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Get_Minimum" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  result = (double)(arg1)->Get_Minimum();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Get_Maximum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Simple_Statistics_Get_Maximum",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Get_Maximum" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  result = (double)(arg1)->Get_Maximum();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Get_Range(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Simple_Statistics_Get_Range",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Get_Range" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  result = (double)(arg1)->Get_Range();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Get_Sum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Simple_Statistics_Get_Sum",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Get_Sum" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  result = (double)(arg1)->Get_Sum();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Get_Mean(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Simple_Statistics_Get_Mean",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Get_Mean" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  result = (double)(arg1)->Get_Mean();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Get_Variance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Simple_Statistics_Get_Variance",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Get_Variance" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  result = (double)(arg1)->Get_Variance();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Get_StdDev(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Simple_Statistics_Get_StdDev",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Get_StdDev" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  result = (double)(arg1)->Get_StdDev();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Add_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Simple_Statistics_Add_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Add_Value" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Simple_Statistics_Add_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Simple_Statistics_Add_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Add_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Add_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Simple_Statistics_Add_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Simple_Statistics_Add_Value" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Simple_Statistics_Add_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Add_Value(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Simple_Statistics_Add_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Simple_Statistics, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Simple_Statistics_Add_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Simple_Statistics, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Simple_Statistics_Add_Value__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Simple_Statistics_Add_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Value(CSG_Simple_Statistics *,double,double)\n"
+    "    Add_Value(CSG_Simple_Statistics *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Simple_Statistics(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Simple_Statistics *arg1 = (CSG_Simple_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Simple_Statistics",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Simple_Statistics, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Simple_Statistics" "', argument " "1"" of type '" "CSG_Simple_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Simple_Statistics * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Simple_Statistics_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Simple_Statistics, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Class_Statistics(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Class_Statistics")) SWIG_fail;
+  result = (CSG_Class_Statistics *)new CSG_Class_Statistics();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Class_Statistics, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Class_Statistics(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Class_Statistics",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Class_Statistics" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Class_Statistics_Create",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Create" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  (arg1)->Create();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Class_Statistics_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Destroy" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Reset(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Class_Statistics_Reset",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Reset" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  (arg1)->Reset();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Class_Statistics_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Get_Count" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  result = (int)(arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Class_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Class_Statistics_Get_Class_Count",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Get_Class_Count" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Class_Statistics_Get_Class_Count" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Get_Class_Count(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Class_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Class_Statistics_Get_Class_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Get_Class_Value" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Class_Statistics_Get_Class_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_Class_Value(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Class__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  int arg2 ;
+  double *arg3 = 0 ;
+  int *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Class_Statistics_Get_Class",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "4"" of type '" "int &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "4"" of type '" "int &""'"); 
+  }
+  arg4 = reinterpret_cast< int * >(argp4);
+  result = (bool)(arg1)->Get_Class(arg2,*arg3,*arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Class__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  int arg2 ;
+  int *arg3 = 0 ;
+  int *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Class_Statistics_Get_Class",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "4"" of type '" "int &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Class_Statistics_Get_Class" "', argument " "4"" of type '" "int &""'"); 
+  }
+  arg4 = reinterpret_cast< int * >(argp4);
+  result = (bool)(arg1)->Get_Class(arg2,*arg3,*arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Class(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Class_Statistics, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_int, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Class_Statistics_Get_Class__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Class_Statistics, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_int, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Class_Statistics_Get_Class__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Class_Statistics_Get_Class'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Class(CSG_Class_Statistics *,int,double &,int &)\n"
+    "    Get_Class(CSG_Class_Statistics *,int,int &,int &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Add_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Class_Statistics_Add_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Add_Value" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Class_Statistics_Add_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Add_Value(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Majority__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Class_Statistics_Get_Majority",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Get_Majority" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  result = (int)(arg1)->Get_Majority();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Majority__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  double *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Class_Statistics_Get_Majority",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Get_Majority" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Class_Statistics_Get_Majority" "', argument " "2"" of type '" "double &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Class_Statistics_Get_Majority" "', argument " "2"" of type '" "double &""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  result = (bool)(arg1)->Get_Majority(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Majority__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  double *arg2 = 0 ;
+  int *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Class_Statistics_Get_Majority",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Get_Majority" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Class_Statistics_Get_Majority" "', argument " "2"" of type '" "double &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Class_Statistics_Get_Majority" "', argument " "2"" of type '" "double &""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Class_Statistics_Get_Majority" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Class_Statistics_Get_Majority" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  result = (bool)(arg1)->Get_Majority(*arg2,*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Majority(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Class_Statistics, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Class_Statistics_Get_Majority__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Class_Statistics, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Class_Statistics_Get_Majority__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Class_Statistics, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Class_Statistics_Get_Majority__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Class_Statistics_Get_Majority'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Majority(CSG_Class_Statistics *)\n"
+    "    Get_Majority(CSG_Class_Statistics *,double &)\n"
+    "    Get_Majority(CSG_Class_Statistics *,double &,int &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Minority__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Class_Statistics_Get_Minority",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Get_Minority" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  result = (int)(arg1)->Get_Minority();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Minority__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  double *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Class_Statistics_Get_Minority",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Get_Minority" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Class_Statistics_Get_Minority" "', argument " "2"" of type '" "double &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Class_Statistics_Get_Minority" "', argument " "2"" of type '" "double &""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  result = (bool)(arg1)->Get_Minority(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Minority__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Class_Statistics *arg1 = (CSG_Class_Statistics *) 0 ;
+  double *arg2 = 0 ;
+  int *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Class_Statistics_Get_Minority",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Class_Statistics, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Class_Statistics_Get_Minority" "', argument " "1"" of type '" "CSG_Class_Statistics *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Class_Statistics * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Class_Statistics_Get_Minority" "', argument " "2"" of type '" "double &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Class_Statistics_Get_Minority" "', argument " "2"" of type '" "double &""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Class_Statistics_Get_Minority" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Class_Statistics_Get_Minority" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  result = (bool)(arg1)->Get_Minority(*arg2,*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Class_Statistics_Get_Minority(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Class_Statistics, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Class_Statistics_Get_Minority__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Class_Statistics, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Class_Statistics_Get_Minority__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Class_Statistics, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Class_Statistics_Get_Minority__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Class_Statistics_Get_Minority'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Minority(CSG_Class_Statistics *)\n"
+    "    Get_Minority(CSG_Class_Statistics *,double &)\n"
+    "    Get_Minority(CSG_Class_Statistics *,double &,int &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Class_Statistics_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Class_Statistics, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Cluster_Analysis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Cluster_Analysis")) SWIG_fail;
+  result = (CSG_Cluster_Analysis *)new CSG_Cluster_Analysis();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Cluster_Analysis, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Cluster_Analysis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Cluster_Analysis",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Cluster_Analysis" "', argument " "1"" of type '" "CSG_Cluster_Analysis *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Cluster_Analysis_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Create" "', argument " "1"" of type '" "CSG_Cluster_Analysis *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Cluster_Analysis_Create" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Cluster_Analysis_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Destroy" "', argument " "1"" of type '" "CSG_Cluster_Analysis *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Add_Element(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Cluster_Analysis_Add_Element",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Add_Element" "', argument " "1"" of type '" "CSG_Cluster_Analysis *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  result = (bool)(arg1)->Add_Element();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Set_Feature(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Cluster_Analysis_Set_Feature",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Set_Feature" "', argument " "1"" of type '" "CSG_Cluster_Analysis *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Cluster_Analysis_Set_Feature" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Cluster_Analysis_Set_Feature" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Cluster_Analysis_Set_Feature" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Set_Feature(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Get_Cluster(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Cluster_Analysis_Get_Cluster",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Get_Cluster" "', argument " "1"" of type '" "CSG_Cluster_Analysis const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Cluster_Analysis_Get_Cluster" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Cluster_Analysis const *)arg1)->Get_Cluster(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Execute(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Cluster_Analysis_Execute",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Execute" "', argument " "1"" of type '" "CSG_Cluster_Analysis *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Cluster_Analysis_Execute" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Cluster_Analysis_Execute" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Execute(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Get_nElements(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Cluster_Analysis_Get_nElements",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Get_nElements" "', argument " "1"" of type '" "CSG_Cluster_Analysis const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  result = (int)((CSG_Cluster_Analysis const *)arg1)->Get_nElements();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Get_nFeatures(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Cluster_Analysis_Get_nFeatures",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Get_nFeatures" "', argument " "1"" of type '" "CSG_Cluster_Analysis const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  result = (int)((CSG_Cluster_Analysis const *)arg1)->Get_nFeatures();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Get_nClusters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Cluster_Analysis_Get_nClusters",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Get_nClusters" "', argument " "1"" of type '" "CSG_Cluster_Analysis const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  result = (int)((CSG_Cluster_Analysis const *)arg1)->Get_nClusters();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Get_Iteration(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Cluster_Analysis_Get_Iteration",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Get_Iteration" "', argument " "1"" of type '" "CSG_Cluster_Analysis const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  result = (int)((CSG_Cluster_Analysis const *)arg1)->Get_Iteration();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Get_SP(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Cluster_Analysis_Get_SP",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Get_SP" "', argument " "1"" of type '" "CSG_Cluster_Analysis const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  result = (double)((CSG_Cluster_Analysis const *)arg1)->Get_SP();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Get_nMembers(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Cluster_Analysis_Get_nMembers",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Get_nMembers" "', argument " "1"" of type '" "CSG_Cluster_Analysis const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Cluster_Analysis_Get_nMembers" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Cluster_Analysis const *)arg1)->Get_nMembers(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Get_Variance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Cluster_Analysis_Get_Variance",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Get_Variance" "', argument " "1"" of type '" "CSG_Cluster_Analysis const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Cluster_Analysis_Get_Variance" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Cluster_Analysis const *)arg1)->Get_Variance(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Cluster_Analysis_Get_Centroid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Cluster_Analysis *arg1 = (CSG_Cluster_Analysis *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Cluster_Analysis_Get_Centroid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Cluster_Analysis, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Cluster_Analysis_Get_Centroid" "', argument " "1"" of type '" "CSG_Cluster_Analysis const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Cluster_Analysis * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Cluster_Analysis_Get_Centroid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Cluster_Analysis_Get_Centroid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)((CSG_Cluster_Analysis const *)arg1)->Get_Centroid(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Cluster_Analysis_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Cluster_Analysis, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Spline(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Spline")) SWIG_fail;
+  result = (CSG_Spline *)new CSG_Spline();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Spline, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Spline(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Spline",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Spline" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Spline_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Destroy" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  double *arg2 = (double *) 0 ;
+  double *arg3 = (double *) 0 ;
+  int arg4 ;
+  double arg5 ;
+  double arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Spline_Create",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Create" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Spline_Create" "', argument " "2"" of type '" "double *""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Spline_Create" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Spline_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Spline_Create" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Spline_Create" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  double *arg2 = (double *) 0 ;
+  double *arg3 = (double *) 0 ;
+  int arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Spline_Create",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Create" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Spline_Create" "', argument " "2"" of type '" "double *""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Spline_Create" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Spline_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Spline_Create" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  double *arg2 = (double *) 0 ;
+  double *arg3 = (double *) 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Spline_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Create" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Spline_Create" "', argument " "2"" of type '" "double *""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Spline_Create" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Spline_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Create__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Spline_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Create" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Spline_Create" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Spline_Create" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Create__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Spline_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Create" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Spline_Create" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Create__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Spline_Create",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Create" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  result = (bool)(arg1)->Create();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Spline_Create__SWIG_5(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Spline_Create__SWIG_4(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Spline_Create__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Spline_Create__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Spline_Create__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Spline_Create__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Spline_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Spline *,double *,double *,int,double,double)\n"
+    "    Create(CSG_Spline *,double *,double *,int,double)\n"
+    "    Create(CSG_Spline *,double *,double *,int)\n"
+    "    Create(CSG_Spline *,double,double)\n"
+    "    Create(CSG_Spline *,double)\n"
+    "    Create(CSG_Spline *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Add(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Spline_Add",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Add" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Spline_Add" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Spline_Add" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Add(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Get_xMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Spline_Get_xMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Get_xMin" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  result = (double)(arg1)->Get_xMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Get_xMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Spline_Get_xMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Get_xMax" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  result = (double)(arg1)->Get_xMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Get_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  double arg2 ;
+  double *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Spline_Get_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Get_Value" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Spline_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Spline_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Spline_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  result = (bool)(arg1)->Get_Value(arg2,*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Get_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Spline *arg1 = (CSG_Spline *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Spline_Get_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Spline_Get_Value" "', argument " "1"" of type '" "CSG_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Spline_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (double)(arg1)->Get_Value(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Spline_Get_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Spline_Get_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Spline_Get_Value__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Spline_Get_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Value(CSG_Spline *,double,double &)\n"
+    "    Get_Value(CSG_Spline *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Spline_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Spline, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Thin_Plate_Spline(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Thin_Plate_Spline")) SWIG_fail;
+  result = (CSG_Thin_Plate_Spline *)new CSG_Thin_Plate_Spline();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Thin_Plate_Spline, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Thin_Plate_Spline(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Thin_Plate_Spline",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Thin_Plate_Spline" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Thin_Plate_Spline_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Destroy" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Set_Point_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Thin_Plate_Spline_Set_Point_Count",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Set_Point_Count" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Thin_Plate_Spline_Set_Point_Count" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Point_Count(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Get_Point_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Thin_Plate_Spline_Get_Point_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Get_Point_Count" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  result = (int)(arg1)->Get_Point_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Get_Points(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Points_Z *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Thin_Plate_Spline_Get_Points",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Get_Points" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  result = (CSG_Points_Z *) &(arg1)->Get_Points();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Points_Z, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Add_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Thin_Plate_Spline_Add_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Add_Point" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Thin_Plate_Spline_Add_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Thin_Plate_Spline_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Thin_Plate_Spline_Add_Point" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Add_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Add_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  TSG_Point *arg2 = 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Thin_Plate_Spline_Add_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Add_Point" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Thin_Plate_Spline_Add_Point" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Thin_Plate_Spline_Add_Point" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Thin_Plate_Spline_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Add_Point((TSG_Point const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Add_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Thin_Plate_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Thin_Plate_Spline_Add_Point__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Thin_Plate_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Thin_Plate_Spline_Add_Point__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Thin_Plate_Spline_Add_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Point(CSG_Thin_Plate_Spline *,double,double,double)\n"
+    "    Add_Point(CSG_Thin_Plate_Spline *,TSG_Point const &,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Set_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  int arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Thin_Plate_Spline_Set_Point",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Set_Point" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Thin_Plate_Spline_Set_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Thin_Plate_Spline_Set_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Thin_Plate_Spline_Set_Point" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Thin_Plate_Spline_Set_Point" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (bool)(arg1)->Set_Point(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Set_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  int arg2 ;
+  TSG_Point *arg3 = 0 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Thin_Plate_Spline_Set_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Set_Point" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Thin_Plate_Spline_Set_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Thin_Plate_Spline_Set_Point" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Thin_Plate_Spline_Set_Point" "', argument " "3"" of type '" "TSG_Point const &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Thin_Plate_Spline_Set_Point" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Set_Point(arg2,(TSG_Point const &)*arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Set_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Thin_Plate_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_SSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Thin_Plate_Spline_Set_Point__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Thin_Plate_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Thin_Plate_Spline_Set_Point__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Thin_Plate_Spline_Set_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Point(CSG_Thin_Plate_Spline *,int,double,double,double)\n"
+    "    Set_Point(CSG_Thin_Plate_Spline *,int,TSG_Point const &,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  double arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Thin_Plate_Spline_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Create" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Thin_Plate_Spline_Create" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Thin_Plate_Spline_Create" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Thin_Plate_Spline_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Create" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Thin_Plate_Spline_Create" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Thin_Plate_Spline_Create",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Create" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  result = (bool)(arg1)->Create();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Thin_Plate_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Thin_Plate_Spline_Create__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Thin_Plate_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Thin_Plate_Spline_Create__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Thin_Plate_Spline, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Thin_Plate_Spline_Create__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Thin_Plate_Spline_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Thin_Plate_Spline *,double,bool)\n"
+    "    Create(CSG_Thin_Plate_Spline *,double)\n"
+    "    Create(CSG_Thin_Plate_Spline *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_is_Okay(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Thin_Plate_Spline_is_Okay",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_is_Okay" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  result = (bool)(arg1)->is_Okay();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Thin_Plate_Spline_Get_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Thin_Plate_Spline *arg1 = (CSG_Thin_Plate_Spline *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Thin_Plate_Spline_Get_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Thin_Plate_Spline, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Thin_Plate_Spline_Get_Value" "', argument " "1"" of type '" "CSG_Thin_Plate_Spline *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Thin_Plate_Spline * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Thin_Plate_Spline_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Thin_Plate_Spline_Get_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (double)(arg1)->Get_Value(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Thin_Plate_Spline_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Thin_Plate_Spline, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Regression(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Regression")) SWIG_fail;
+  result = (CSG_Regression *)new CSG_Regression();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Regression, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Regression(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Regression",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Regression" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Destroy" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Set_Values(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  int arg2 ;
+  double *arg3 = (double *) 0 ;
+  double *arg4 = (double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Regression_Set_Values",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Set_Values" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Set_Values" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Regression_Set_Values" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Regression_Set_Values" "', argument " "4"" of type '" "double *""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  (arg1)->Set_Values(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Add_Values(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Regression_Add_Values",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Add_Values" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Add_Values" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Regression_Add_Values" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Add_Values(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_Count" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (int)(arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_xValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Get_xValue",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_xValue" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Get_xValue" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_xValue(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_yValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Get_yValue",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_yValue" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Get_yValue" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_yValue(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_Values(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  int arg2 ;
+  double *arg3 = 0 ;
+  double *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Regression_Get_Values",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_Values" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Get_Values" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Regression_Get_Values" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Regression_Get_Values" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Regression_Get_Values" "', argument " "4"" of type '" "double &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Regression_Get_Values" "', argument " "4"" of type '" "double &""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  result = (bool)(arg1)->Get_Values(arg2,*arg3,*arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_xMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_xMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_xMin" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_xMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_xMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_xMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_xMax" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_xMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_xMean(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_xMean",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_xMean" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_xMean();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_xVariance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_xVariance",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_xVariance" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_xVariance();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_x(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Get_x",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_x" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Get_x" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (double)(arg1)->Get_x(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_yMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_yMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_yMin" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_yMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_yMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_yMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_yMax" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_yMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_yMean(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_yMean",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_yMean" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_yMean();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_yVariance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_yVariance",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_yVariance" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_yVariance();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_y(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Get_y",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_y" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Get_y" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (double)(arg1)->Get_y(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_Constant(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_Constant",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_Constant" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_Constant();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_Coefficient(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_Coefficient",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_Coefficient" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_Coefficient();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_R(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_R",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_R" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_R();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_R2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_R2",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_R2" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (double)(arg1)->Get_R2();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_asString" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Regression_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Get_Type" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (TSG_Regression_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Calculate__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  TSG_Regression_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Calculate",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Calculate" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Calculate" "', argument " "2"" of type '" "TSG_Regression_Type""'");
+  } 
+  arg2 = static_cast< TSG_Regression_Type >(val2);
+  result = (bool)(arg1)->Calculate(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Calculate__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Calculate",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Calculate" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  result = (bool)(arg1)->Calculate();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Calculate__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  int arg2 ;
+  double *arg3 = (double *) 0 ;
+  double *arg4 = (double *) 0 ;
+  TSG_Regression_Type arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Regression_Calculate",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Calculate" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Calculate" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Regression_Calculate" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Regression_Calculate" "', argument " "4"" of type '" "double *""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Regression_Calculate" "', argument " "5"" of type '" "TSG_Regression_Type""'");
+  } 
+  arg5 = static_cast< TSG_Regression_Type >(val5);
+  result = (bool)(arg1)->Calculate(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Calculate__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression *arg1 = (CSG_Regression *) 0 ;
+  int arg2 ;
+  double *arg3 = (double *) 0 ;
+  double *arg4 = (double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Regression_Calculate",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Calculate" "', argument " "1"" of type '" "CSG_Regression *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Calculate" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Regression_Calculate" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Regression_Calculate" "', argument " "4"" of type '" "double *""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  result = (bool)(arg1)->Calculate(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Calculate(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Regression_Calculate__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Regression_Calculate__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_double, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Regression_Calculate__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_double, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Regression_Calculate__SWIG_2(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Regression_Calculate'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Calculate(CSG_Regression *,TSG_Regression_Type)\n"
+    "    Calculate(CSG_Regression *)\n"
+    "    Calculate(CSG_Regression *,int,double *,double *,TSG_Regression_Type)\n"
+    "    Calculate(CSG_Regression *,int,double *,double *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Regression_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Regression, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Regression_Multiple(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Regression_Multiple")) SWIG_fail;
+  result = (CSG_Regression_Multiple *)new CSG_Regression_Multiple();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Regression_Multiple, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Regression_Multiple(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Regression_Multiple",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Regression_Multiple" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Multiple_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Destroy" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Calculate(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  CSG_Table *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Multiple_Calculate",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Calculate" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Table,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Regression_Multiple_Calculate" "', argument " "2"" of type '" "CSG_Table const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Regression_Multiple_Calculate" "', argument " "2"" of type '" "CSG_Table const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table * >(argp2);
+  result = (bool)(arg1)->Calculate((CSG_Table const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_Result(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Multiple_Get_Result",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_Result" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  result = (CSG_Table *)(arg1)->Get_Result();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Multiple_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_Count" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  result = (int)(arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_Index(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Multiple_Get_Index",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_Index" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Multiple_Get_Index" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Get_Index(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_Order(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Multiple_Get_Order",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_Order" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Multiple_Get_Order" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Get_Order(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_RConst(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Regression_Multiple_Get_RConst",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_RConst" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  result = (double)(arg1)->Get_RConst();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_RCoeff__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Regression_Multiple_Get_RCoeff",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_RCoeff" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Multiple_Get_RCoeff" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Regression_Multiple_Get_RCoeff" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (double)(arg1)->Get_RCoeff(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_RCoeff__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Multiple_Get_RCoeff",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_RCoeff" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Multiple_Get_RCoeff" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_RCoeff(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_RCoeff(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression_Multiple, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Regression_Multiple_Get_RCoeff__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression_Multiple, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Regression_Multiple_Get_RCoeff__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Regression_Multiple_Get_RCoeff'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_RCoeff(CSG_Regression_Multiple *,int,bool)\n"
+    "    Get_RCoeff(CSG_Regression_Multiple *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_R2__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Regression_Multiple_Get_R2",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_R2" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Multiple_Get_R2" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Regression_Multiple_Get_R2" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (double)(arg1)->Get_R2(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_R2__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Multiple_Get_R2",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_R2" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Multiple_Get_R2" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_R2(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_R2(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression_Multiple, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Regression_Multiple_Get_R2__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression_Multiple, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Regression_Multiple_Get_R2__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Regression_Multiple_Get_R2'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_R2(CSG_Regression_Multiple *,int,bool)\n"
+    "    Get_R2(CSG_Regression_Multiple *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_R2_Change__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Regression_Multiple_Get_R2_Change",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_R2_Change" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Multiple_Get_R2_Change" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Regression_Multiple_Get_R2_Change" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (double)(arg1)->Get_R2_Change(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_R2_Change__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Multiple_Get_R2_Change",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_R2_Change" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Multiple_Get_R2_Change" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_R2_Change(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_R2_Change(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression_Multiple, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Regression_Multiple_Get_R2_Change__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression_Multiple, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Regression_Multiple_Get_R2_Change__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Regression_Multiple_Get_R2_Change'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_R2_Change(CSG_Regression_Multiple *,int,bool)\n"
+    "    Get_R2_Change(CSG_Regression_Multiple *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_Name__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Regression_Multiple_Get_Name",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_Name" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Multiple_Get_Name" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Regression_Multiple_Get_Name" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (wchar_t *)(arg1)->Get_Name(arg2,arg3);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_Name__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Regression_Multiple *arg1 = (CSG_Regression_Multiple *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Regression_Multiple_Get_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Regression_Multiple, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Regression_Multiple_Get_Name" "', argument " "1"" of type '" "CSG_Regression_Multiple *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Regression_Multiple * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Regression_Multiple_Get_Name" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)(arg1)->Get_Name(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Regression_Multiple_Get_Name(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression_Multiple, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Regression_Multiple_Get_Name__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Regression_Multiple, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Regression_Multiple_Get_Name__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Regression_Multiple_Get_Name'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Name(CSG_Regression_Multiple *,int,bool)\n"
+    "    Get_Name(CSG_Regression_Multiple *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Regression_Multiple_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Regression_Multiple, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Formula(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Formula")) SWIG_fail;
+  result = (CSG_Formula *)new CSG_Formula();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Formula, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Formula(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Formula",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Formula" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Help_Operators(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":CSG_Formula_Get_Help_Operators")) SWIG_fail;
+  result = CSG_Formula::Get_Help_Operators();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Help_Usage(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":CSG_Formula_Get_Help_Usage")) SWIG_fail;
+  result = CSG_Formula::Get_Help_Usage();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Error__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  int *arg2 = (int *) 0 ;
+  CSG_String *arg3 = (CSG_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Formula_Get_Error",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Get_Error" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_int, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Formula_Get_Error" "', argument " "2"" of type '" "int *""'"); 
+  }
+  arg2 = reinterpret_cast< int * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_CSG_String, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Formula_Get_Error" "', argument " "3"" of type '" "CSG_String *""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  result = (bool)(arg1)->Get_Error(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Error__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  int *arg2 = (int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Formula_Get_Error",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Get_Error" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_int, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Formula_Get_Error" "', argument " "2"" of type '" "int *""'"); 
+  }
+  arg2 = reinterpret_cast< int * >(argp2);
+  result = (bool)(arg1)->Get_Error(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Error__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Formula_Get_Error",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Get_Error" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  result = (bool)(arg1)->Get_Error();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Error(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Formula, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Formula_Get_Error__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Formula, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_int, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Formula_Get_Error__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Formula, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_int, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_CSG_String, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Formula_Get_Error__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Formula_Get_Error'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Error(CSG_Formula *,int *,CSG_String *)\n"
+    "    Get_Error(CSG_Formula *,int *)\n"
+    "    Get_Error(CSG_Formula *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Add_Function(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  TSG_PFNC_Formula_1 arg3 = (TSG_PFNC_Formula_1) 0 ;
+  int arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Formula_Add_Function",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Add_Function" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Formula_Add_Function" "', argument " "2"" of type '" "wchar_t *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  {
+    int res = SWIG_ConvertFunctionPtr(obj2, (void**)(&arg3), SWIGTYPE_p_f_double__double);
+    if (!SWIG_IsOK(res)) {
+      SWIG_exception_fail(SWIG_ArgError(res), "in method '" "CSG_Formula_Add_Function" "', argument " "3"" of type '" "TSG_PFNC_Formula_1""'"); 
+    }
+  }
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Formula_Add_Function" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Formula_Add_Function" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (int)(arg1)->Add_Function(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Del_Function(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Formula_Del_Function",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Del_Function" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Formula_Del_Function" "', argument " "2"" of type '" "wchar_t *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (int)(arg1)->Del_Function(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Set_Formula(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Formula_Set_Formula",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Set_Formula" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Formula_Set_Formula" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Set_Formula((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Formula(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Formula_Get_Formula",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Get_Formula" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  result = (arg1)->Get_Formula();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Set_Variable(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  wchar_t arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  wchar_t val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Formula_Set_Variable",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Set_Variable" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  ecode2 = SWIG_AsVal_wchar_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Formula_Set_Variable" "', argument " "2"" of type '" "wchar_t""'");
+  } 
+  arg2 = static_cast< wchar_t >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Formula_Set_Variable" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Set_Variable(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Formula_Get_Value",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Get_Value" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  result = (double)(arg1)->Get_Value();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Formula_Get_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Get_Value" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Formula_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (double)(arg1)->Get_Value(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  double *arg2 = (double *) 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Formula_Get_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Get_Value" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Formula_Get_Value" "', argument " "2"" of type '" "double *""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Formula_Get_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)(arg1)->Get_Value(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Value__SWIG_3__varargs__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *varargs) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Formula_Get_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Get_Value" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Formula_Get_Value" "', argument " "2"" of type '" "wchar_t *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (double)(arg1)->Get_Value(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Value__SWIG_3(PyObject *self, PyObject *args) {
+  PyObject *resultobj;
+  PyObject *varargs;
+  PyObject *newargs;
+  
+  newargs = PyTuple_GetSlice(args,0,2);
+  varargs = PyTuple_GetSlice(args,2,PyTuple_Size(args)+1);
+  resultobj = _wrap_CSG_Formula_Get_Value__SWIG_3__varargs__(self,newargs,varargs);
+  Py_XDECREF(newargs);
+  Py_XDECREF(varargs);
+  return resultobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Formula, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Formula_Get_Value__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Formula, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Formula_Get_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc >= 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Formula, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        if (argc <= 2) {
+          return _wrap_CSG_Formula_Get_Value__SWIG_3(self, args);
+        }
+        return _wrap_CSG_Formula_Get_Value__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Formula, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Formula_Get_Value__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Formula_Get_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Value(CSG_Formula *)\n"
+    "    Get_Value(CSG_Formula *,double)\n"
+    "    Get_Value(CSG_Formula *,double *,int)\n"
+    "    Get_Value(CSG_Formula *,wchar_t *,...)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_Get_Used_Variables(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula *arg1 = (CSG_Formula *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Formula_Get_Used_Variables",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_Get_Used_Variables" "', argument " "1"" of type '" "CSG_Formula *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Used_Variables();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Formula_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Formula, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_TSG_Formula_Item_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula_TSG_Formula_Item *arg1 = (CSG_Formula_TSG_Formula_Item *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Formula_TSG_Formula_Item_name_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula_TSG_Formula_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_TSG_Formula_Item_name_set" "', argument " "1"" of type '" "CSG_Formula_TSG_Formula_Item *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula_TSG_Formula_Item * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Formula_TSG_Formula_Item_name_set" "', argument " "2"" of type '" "wchar_t *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  if (arg1->name) delete[] arg1->name;
+  if (arg2) {
+    size_t size = wcslen(reinterpret_cast< const wchar_t * >(arg2)) + 1;
+    arg1->name = (wchar_t *)reinterpret_cast< wchar_t* >(memcpy((new wchar_t[size]), reinterpret_cast< const wchar_t * >(arg2), sizeof(wchar_t)*(size)));
+  } else {
+    arg1->name = 0;
+  }
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_TSG_Formula_Item_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula_TSG_Formula_Item *arg1 = (CSG_Formula_TSG_Formula_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Formula_TSG_Formula_Item_name_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula_TSG_Formula_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_TSG_Formula_Item_name_get" "', argument " "1"" of type '" "CSG_Formula_TSG_Formula_Item *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula_TSG_Formula_Item * >(argp1);
+  result = (wchar_t *) ((arg1)->name);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_TSG_Formula_Item_f_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula_TSG_Formula_Item *arg1 = (CSG_Formula_TSG_Formula_Item *) 0 ;
+  TSG_PFNC_Formula_1 arg2 = (TSG_PFNC_Formula_1) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Formula_TSG_Formula_Item_f_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula_TSG_Formula_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_TSG_Formula_Item_f_set" "', argument " "1"" of type '" "CSG_Formula_TSG_Formula_Item *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula_TSG_Formula_Item * >(argp1);
+  {
+    int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_double__double);
+    if (!SWIG_IsOK(res)) {
+      SWIG_exception_fail(SWIG_ArgError(res), "in method '" "CSG_Formula_TSG_Formula_Item_f_set" "', argument " "2"" of type '" "TSG_PFNC_Formula_1""'"); 
+    }
+  }
+  if (arg1) (arg1)->f = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_TSG_Formula_Item_f_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula_TSG_Formula_Item *arg1 = (CSG_Formula_TSG_Formula_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_PFNC_Formula_1 result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Formula_TSG_Formula_Item_f_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula_TSG_Formula_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_TSG_Formula_Item_f_get" "', argument " "1"" of type '" "CSG_Formula_TSG_Formula_Item *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula_TSG_Formula_Item * >(argp1);
+  result = (TSG_PFNC_Formula_1) ((arg1)->f);
+  resultobj = SWIG_NewFunctionPtrObj((void *)(result), SWIGTYPE_p_f_double__double);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_TSG_Formula_Item_n_pars_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula_TSG_Formula_Item *arg1 = (CSG_Formula_TSG_Formula_Item *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Formula_TSG_Formula_Item_n_pars_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula_TSG_Formula_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_TSG_Formula_Item_n_pars_set" "', argument " "1"" of type '" "CSG_Formula_TSG_Formula_Item *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula_TSG_Formula_Item * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Formula_TSG_Formula_Item_n_pars_set" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  if (arg1) (arg1)->n_pars = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_TSG_Formula_Item_n_pars_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula_TSG_Formula_Item *arg1 = (CSG_Formula_TSG_Formula_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Formula_TSG_Formula_Item_n_pars_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula_TSG_Formula_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_TSG_Formula_Item_n_pars_get" "', argument " "1"" of type '" "CSG_Formula_TSG_Formula_Item *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula_TSG_Formula_Item * >(argp1);
+  result = (int) ((arg1)->n_pars);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_TSG_Formula_Item_varying_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula_TSG_Formula_Item *arg1 = (CSG_Formula_TSG_Formula_Item *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Formula_TSG_Formula_Item_varying_set",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula_TSG_Formula_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_TSG_Formula_Item_varying_set" "', argument " "1"" of type '" "CSG_Formula_TSG_Formula_Item *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula_TSG_Formula_Item * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Formula_TSG_Formula_Item_varying_set" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  if (arg1) (arg1)->varying = arg2;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Formula_TSG_Formula_Item_varying_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula_TSG_Formula_Item *arg1 = (CSG_Formula_TSG_Formula_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Formula_TSG_Formula_Item_varying_get",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula_TSG_Formula_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Formula_TSG_Formula_Item_varying_get" "', argument " "1"" of type '" "CSG_Formula_TSG_Formula_Item *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula_TSG_Formula_Item * >(argp1);
+  result = (int) ((arg1)->varying);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Formula_TSG_Formula_Item(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula_TSG_Formula_Item *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Formula_TSG_Formula_Item")) SWIG_fail;
+  result = (CSG_Formula_TSG_Formula_Item *)new CSG_Formula_TSG_Formula_Item();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Formula_TSG_Formula_Item, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Formula_TSG_Formula_Item(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Formula_TSG_Formula_Item *arg1 = (CSG_Formula_TSG_Formula_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Formula_TSG_Formula_Item",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Formula_TSG_Formula_Item, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Formula_TSG_Formula_Item" "', argument " "1"" of type '" "CSG_Formula_TSG_Formula_Item *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Formula_TSG_Formula_Item * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Formula_TSG_Formula_Item_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Formula_TSG_Formula_Item, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Trend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Trend")) SWIG_fail;
+  result = (CSG_Trend *)new CSG_Trend();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Trend, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Trend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Trend",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Trend" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Set_Formula__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Trend_Set_Formula",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Set_Formula" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Trend_Set_Formula" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Set_Formula((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Set_Formula__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Set_Formula",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Set_Formula" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (bool)(arg1)->Set_Formula();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Set_Formula(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Trend_Set_Formula__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Trend_Set_Formula__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Trend_Set_Formula'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Formula(CSG_Trend *,wchar_t const *)\n"
+    "    Set_Formula(CSG_Trend *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Formula__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Trend_Get_Formula",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Formula" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Trend_Get_Formula" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (arg1)->Get_Formula(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Formula__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Formula",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Formula" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (arg1)->Get_Formula();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Formula(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Trend_Get_Formula__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Trend_Get_Formula__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Trend_Get_Formula'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Formula(CSG_Trend *,int)\n"
+    "    Get_Formula(CSG_Trend *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Parameter_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Parameter_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Parameter_Count" "', argument " "1"" of type '" "CSG_Trend const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (int)((CSG_Trend const *)arg1)->Get_Parameter_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Parameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Parameters",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Parameters" "', argument " "1"" of type '" "CSG_Trend const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (double *)((CSG_Trend const *)arg1)->Get_Parameters();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_double, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Clr_Data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Clr_Data",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Clr_Data" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  (arg1)->Clr_Data();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Set_Data__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  double *arg2 = (double *) 0 ;
+  double *arg3 = (double *) 0 ;
+  int arg4 ;
+  bool arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Trend_Set_Data",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Set_Data" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Trend_Set_Data" "', argument " "2"" of type '" "double *""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Trend_Set_Data" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Trend_Set_Data" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Trend_Set_Data" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  (arg1)->Set_Data(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Set_Data__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  double *arg2 = (double *) 0 ;
+  double *arg3 = (double *) 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Trend_Set_Data",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Set_Data" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Trend_Set_Data" "', argument " "2"" of type '" "double *""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Trend_Set_Data" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Trend_Set_Data" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  (arg1)->Set_Data(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Set_Data__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  CSG_Points *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Trend_Set_Data",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Set_Data" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Points,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Trend_Set_Data" "', argument " "2"" of type '" "CSG_Points const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Trend_Set_Data" "', argument " "2"" of type '" "CSG_Points const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Points * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Trend_Set_Data" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  (arg1)->Set_Data((CSG_Points const &)*arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Set_Data__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  CSG_Points *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Trend_Set_Data",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Set_Data" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Points,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Trend_Set_Data" "', argument " "2"" of type '" "CSG_Points const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Trend_Set_Data" "', argument " "2"" of type '" "CSG_Points const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Points * >(argp2);
+  (arg1)->Set_Data((CSG_Points const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Set_Data(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Points, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Trend_Set_Data__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Points, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Trend_Set_Data__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Trend_Set_Data__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Trend_Set_Data__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Trend_Set_Data'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Data(CSG_Trend *,double *,double *,int,bool)\n"
+    "    Set_Data(CSG_Trend *,double *,double *,int)\n"
+    "    Set_Data(CSG_Trend *,CSG_Points const &,bool)\n"
+    "    Set_Data(CSG_Trend *,CSG_Points const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Add_Data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Trend_Add_Data",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Add_Data" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Trend_Add_Data" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Trend_Add_Data" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Add_Data(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Data_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Data_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Data_Count" "', argument " "1"" of type '" "CSG_Trend const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (int)((CSG_Trend const *)arg1)->Get_Data_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Data_X(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Trend_Get_Data_X",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Data_X" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Trend_Get_Data_X" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_Data_X(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Data_Y(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Trend_Get_Data_Y",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Data_Y" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Trend_Get_Data_Y" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_Data_Y(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Data_XMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Data_XMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Data_XMin" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (double)(arg1)->Get_Data_XMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Data_XMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Data_XMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Data_XMax" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (double)(arg1)->Get_Data_XMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Data_YMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Data_YMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Data_YMin" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (double)(arg1)->Get_Data_YMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Data_YMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Data_YMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Data_YMax" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (double)(arg1)->Get_Data_YMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Set_Max_Iterations(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Trend_Set_Max_Iterations",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Set_Max_Iterations" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Trend_Set_Max_Iterations" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Max_Iterations(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Max_Iterations(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Max_Iterations",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Max_Iterations" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (int)(arg1)->Get_Max_Iterations();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Set_Max_Lambda(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Trend_Set_Max_Lambda",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Set_Max_Lambda" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Trend_Set_Max_Lambda" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Max_Lambda(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Max_Lambda(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Max_Lambda",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Max_Lambda" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (double)(arg1)->Get_Max_Lambda();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Trend__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  double *arg2 = (double *) 0 ;
+  double *arg3 = (double *) 0 ;
+  int arg4 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Trend_Get_Trend",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Trend" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Trend_Get_Trend" "', argument " "2"" of type '" "double *""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Trend_Get_Trend" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Trend_Get_Trend" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Trend_Get_Trend" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (bool)(arg1)->Get_Trend(arg2,arg3,arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Trend__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  double *arg2 = (double *) 0 ;
+  double *arg3 = (double *) 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Trend_Get_Trend",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Trend" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Trend_Get_Trend" "', argument " "2"" of type '" "double *""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Trend_Get_Trend" "', argument " "3"" of type '" "double *""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Trend_Get_Trend" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Get_Trend(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Trend__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  CSG_Points *arg2 = 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Trend_Get_Trend",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Trend" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Points,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Trend_Get_Trend" "', argument " "2"" of type '" "CSG_Points const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Trend_Get_Trend" "', argument " "2"" of type '" "CSG_Points const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Points * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Trend_Get_Trend" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (bool)(arg1)->Get_Trend((CSG_Points const &)*arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Trend__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  CSG_Points *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Trend_Get_Trend",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Trend" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Points,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Trend_Get_Trend" "', argument " "2"" of type '" "CSG_Points const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Trend_Get_Trend" "', argument " "2"" of type '" "CSG_Points const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Points * >(argp2);
+  result = (bool)(arg1)->Get_Trend((CSG_Points const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Trend__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Trend",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Trend" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (bool)(arg1)->Get_Trend();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Trend(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Trend_Get_Trend__SWIG_4(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Points, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Trend_Get_Trend__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Points, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Trend_Get_Trend__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Trend_Get_Trend__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Trend, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Trend_Get_Trend__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Trend_Get_Trend'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Trend(CSG_Trend *,double *,double *,int,wchar_t const *)\n"
+    "    Get_Trend(CSG_Trend *,double *,double *,int)\n"
+    "    Get_Trend(CSG_Trend *,CSG_Points const &,wchar_t const *)\n"
+    "    Get_Trend(CSG_Trend *,CSG_Points const &)\n"
+    "    Get_Trend(CSG_Trend *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_is_Okay(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_is_Okay",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_is_Okay" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (bool)(arg1)->is_Okay();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Error(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_Error",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Error" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (arg1)->Get_Error();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_ChiSquare(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_ChiSquare",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_ChiSquare" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (double)(arg1)->Get_ChiSquare();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_R2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Trend_Get_R2",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_R2" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  result = (double)(arg1)->Get_R2();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Trend_Get_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Trend *arg1 = (CSG_Trend *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Trend_Get_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Trend, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Trend_Get_Value" "', argument " "1"" of type '" "CSG_Trend *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Trend * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Trend_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (double)(arg1)->Get_Value(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Trend_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Trend, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Get_DataObject_Identifier(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Object_Type arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Get_DataObject_Identifier",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_DataObject_Identifier" "', argument " "1"" of type '" "TSG_Data_Object_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Object_Type >(val1);
+  result = (wchar_t *)SG_Get_DataObject_Identifier(arg1);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Get_DataObject_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Object_Type arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Get_DataObject_Name",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_DataObject_Name" "', argument " "1"" of type '" "TSG_Data_Object_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Object_Type >(val1);
+  result = (wchar_t *)SG_Get_DataObject_Name(arg1);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Data_Object(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Data_Object",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Data_Object" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Destroy" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_ObjectType(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Data_Object_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Get_ObjectType",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Get_ObjectType" "', argument " "1"" of type '" "CSG_Data_Object const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (TSG_Data_Object_Type)((CSG_Data_Object const *)arg1)->Get_ObjectType();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_is_Valid" "', argument " "1"" of type '" "CSG_Data_Object const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (bool)((CSG_Data_Object const *)arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Save__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Data_Object_Save",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Save" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Data_Object_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Data_Object_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Data_Object_Save" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Save__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Data_Object_Save",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Save" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Data_Object_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Data_Object_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Save(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Data_Object, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Data_Object_Save__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Data_Object, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Data_Object_Save__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Data_Object_Save'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Save(CSG_Data_Object *,CSG_String const &,int)\n"
+    "    Save(CSG_Data_Object *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_File_Name__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Data_Object_Get_File_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Get_File_Name" "', argument " "1"" of type '" "CSG_Data_Object const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Data_Object_Get_File_Name" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (wchar_t *)((CSG_Data_Object const *)arg1)->Get_File_Name(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_File_Name__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Get_File_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Get_File_Name" "', argument " "1"" of type '" "CSG_Data_Object const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (wchar_t *)((CSG_Data_Object const *)arg1)->Get_File_Name();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_File_Name(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Data_Object, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Data_Object_Get_File_Name__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Data_Object, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Data_Object_Get_File_Name__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Data_Object_Get_File_Name'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_File_Name(CSG_Data_Object const *,bool)\n"
+    "    Get_File_Name(CSG_Data_Object const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_File_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Get_File_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Get_File_Type" "', argument " "1"" of type '" "CSG_Data_Object const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (int)((CSG_Data_Object const *)arg1)->Get_File_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  CSG_Data_Object *arg2 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Data_Object_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Assign" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Data_Object_Assign" "', argument " "2"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Data_Object * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Set_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Data_Object_Set_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Set_Name" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Data_Object_Set_Name" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->Set_Name((wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Get_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Get_Name" "', argument " "1"" of type '" "CSG_Data_Object const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (wchar_t *)((CSG_Data_Object const *)arg1)->Get_Name();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Set_Modified__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Data_Object_Set_Modified",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Set_Modified" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Data_Object_Set_Modified" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Modified(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Set_Modified__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Set_Modified",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Set_Modified" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  (arg1)->Set_Modified();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Set_Modified(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Data_Object, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Data_Object_Set_Modified__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Data_Object, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Data_Object_Set_Modified__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Data_Object_Set_Modified'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Modified(CSG_Data_Object *,bool)\n"
+    "    Set_Modified(CSG_Data_Object *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_is_Modified(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_is_Modified",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_is_Modified" "', argument " "1"" of type '" "CSG_Data_Object const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (bool)((CSG_Data_Object const *)arg1)->is_Modified();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Update(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Update",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Update" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (bool)(arg1)->Update();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_MetaData(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Get_MetaData",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Get_MetaData" "', argument " "1"" of type '" "CSG_Data_Object const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (CSG_MetaData *) &((CSG_Data_Object const *)arg1)->Get_MetaData();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_MetaData_DB(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Get_MetaData_DB",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Get_MetaData_DB" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (CSG_MetaData *) &(arg1)->Get_MetaData_DB();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_History(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Get_History",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Get_History" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (CSG_MetaData *) &(arg1)->Get_History();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_Projection(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Projection *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Get_Projection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Get_Projection" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (CSG_Projection *) &(arg1)->Get_Projection();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Projection, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_asTable(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_asTable",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_asTable" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (CSG_Table *)(arg1)->asTable();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_asShapes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_asShapes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_asShapes" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (CSG_Shapes *)(arg1)->asShapes();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_asTIN(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_asTIN",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_asTIN" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (CSG_TIN *)(arg1)->asTIN();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_asPointCloud(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_asPointCloud",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_asPointCloud" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (CSG_PointCloud *)(arg1)->asPointCloud();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_asGrid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_asGrid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_asGrid" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (CSG_Grid *)(arg1)->asGrid();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Set_NoData_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Data_Object_Set_NoData_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Set_NoData_Value" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Data_Object_Set_NoData_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_NoData_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Set_NoData_Value_Range(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Data_Object_Set_NoData_Value_Range",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Set_NoData_Value_Range" "', argument " "1"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Data_Object_Set_NoData_Value_Range" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Data_Object_Set_NoData_Value_Range" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Set_NoData_Value_Range(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_NoData_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Get_NoData_Value",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Get_NoData_Value" "', argument " "1"" of type '" "CSG_Data_Object const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (double)((CSG_Data_Object const *)arg1)->Get_NoData_Value();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_Get_NoData_hiValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Data_Object_Get_NoData_hiValue",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_Get_NoData_hiValue" "', argument " "1"" of type '" "CSG_Data_Object const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  result = (double)((CSG_Data_Object const *)arg1)->Get_NoData_hiValue();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Data_Object_is_NoData_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Data_Object *arg1 = (CSG_Data_Object *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Data_Object_is_NoData_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Data_Object_is_NoData_Value" "', argument " "1"" of type '" "CSG_Data_Object const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Data_Object * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Data_Object_is_NoData_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)((CSG_Data_Object const *)arg1)->is_NoData_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Data_Object_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Data_Object, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Table_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value *arg1 = (CSG_Table_Value *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Table_Value",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Table_Value" "', argument " "1"" of type '" "CSG_Table_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value *arg1 = (CSG_Table_Value *) 0 ;
+  CSG_Bytes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Value_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Bytes * >(argp2);
+  result = (bool)(arg1)->Set_Value((CSG_Bytes const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value *arg1 = (CSG_Table_Value *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_Set_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Set_Value((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value *arg1 = (CSG_Table_Value *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Set_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value *arg1 = (CSG_Table_Value *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Set_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Bytes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Set_Value__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Set_Value__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Table_Value *,CSG_Bytes const &)\n"
+    "    Set_Value(CSG_Table_Value *,wchar_t const *)\n"
+    "    Set_Value(CSG_Table_Value *,int)\n"
+    "    Set_Value(CSG_Table_Value *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_asBinary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value *arg1 = (CSG_Table_Value *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Bytes result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_asBinary",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_asBinary" "', argument " "1"" of type '" "CSG_Table_Value const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value * >(argp1);
+  result = ((CSG_Table_Value const *)arg1)->asBinary();
+  resultobj = SWIG_NewPointerObj((new CSG_Bytes(static_cast< const CSG_Bytes& >(result))), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_asString__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value *arg1 = (CSG_Table_Value *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_asString",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_asString" "', argument " "1"" of type '" "CSG_Table_Value const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_asString" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_Table_Value const *)arg1)->asString(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_asString__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value *arg1 = (CSG_Table_Value *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_asString" "', argument " "1"" of type '" "CSG_Table_Value const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value * >(argp1);
+  result = (wchar_t *)((CSG_Table_Value const *)arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_asString(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Table_Value_asString__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_asString__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_asString'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asString(CSG_Table_Value const *,int)\n"
+    "    asString(CSG_Table_Value const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value *arg1 = (CSG_Table_Value *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_asInt" "', argument " "1"" of type '" "CSG_Table_Value const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value * >(argp1);
+  result = (int)((CSG_Table_Value const *)arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_asDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value *arg1 = (CSG_Table_Value *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_asDouble",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_asDouble" "', argument " "1"" of type '" "CSG_Table_Value const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value * >(argp1);
+  result = (double)((CSG_Table_Value const *)arg1)->asDouble();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Table_Value_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Table_Value, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table_Value_Binary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Table_Value_Binary")) SWIG_fail;
+  result = (CSG_Table_Value_Binary *)new CSG_Table_Value_Binary();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Value_Binary, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Table_Value_Binary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Table_Value_Binary",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Table_Value_Binary" "', argument " "1"" of type '" "CSG_Table_Value_Binary *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  CSG_Bytes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Binary_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Binary *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_Binary_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Value_Binary_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Bytes * >(argp2);
+  result = (bool)(arg1)->Set_Value((CSG_Bytes const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Binary_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Binary *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_Binary_Set_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Set_Value((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Binary_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Binary *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Binary_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_Set_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Binary_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Binary *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Binary_Set_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Binary, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Bytes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_Binary_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Binary, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Binary_Set_Value__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Binary, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Binary_Set_Value__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Binary, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_Binary_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_Binary_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Table_Value_Binary *,CSG_Bytes const &)\n"
+    "    Set_Value(CSG_Table_Value_Binary *,wchar_t const *)\n"
+    "    Set_Value(CSG_Table_Value_Binary *,int)\n"
+    "    Set_Value(CSG_Table_Value_Binary *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_Set_NoData(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Binary_Set_NoData",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_Set_NoData" "', argument " "1"" of type '" "CSG_Table_Value_Binary *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  result = (bool)(arg1)->Set_NoData();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_is_NoData(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Binary_is_NoData",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_is_NoData" "', argument " "1"" of type '" "CSG_Table_Value_Binary const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  result = (bool)((CSG_Table_Value_Binary const *)arg1)->is_NoData();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_asBinary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Bytes result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Binary_asBinary",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_asBinary" "', argument " "1"" of type '" "CSG_Table_Value_Binary const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  result = ((CSG_Table_Value_Binary const *)arg1)->asBinary();
+  resultobj = SWIG_NewPointerObj((new CSG_Bytes(static_cast< const CSG_Bytes& >(result))), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_asString__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Binary_asString",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_asString" "', argument " "1"" of type '" "CSG_Table_Value_Binary const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Binary_asString" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_Table_Value_Binary const *)arg1)->asString(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_asString__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Binary_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_asString" "', argument " "1"" of type '" "CSG_Table_Value_Binary const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  result = (wchar_t *)((CSG_Table_Value_Binary const *)arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_asString(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Binary, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Table_Value_Binary_asString__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Binary, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Binary_asString__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_Binary_asString'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asString(CSG_Table_Value_Binary const *,int)\n"
+    "    asString(CSG_Table_Value_Binary const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Binary_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_asInt" "', argument " "1"" of type '" "CSG_Table_Value_Binary const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  result = (int)((CSG_Table_Value_Binary const *)arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_asDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Binary_asDouble",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_asDouble" "', argument " "1"" of type '" "CSG_Table_Value_Binary const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  result = (double)((CSG_Table_Value_Binary const *)arg1)->asDouble();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Binary_Get_Binary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Binary *arg1 = (CSG_Table_Value_Binary *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Bytes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Binary_Get_Binary",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Binary, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Binary_Get_Binary" "', argument " "1"" of type '" "CSG_Table_Value_Binary *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Binary * >(argp1);
+  result = (CSG_Bytes *) &(arg1)->Get_Binary();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Bytes, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Table_Value_Binary_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Table_Value_Binary, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table_Value_String(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Table_Value_String")) SWIG_fail;
+  result = (CSG_Table_Value_String *)new CSG_Table_Value_String();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Value_String, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Table_Value_String(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_String *arg1 = (CSG_Table_Value_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Table_Value_String",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_String, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Table_Value_String" "', argument " "1"" of type '" "CSG_Table_Value_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_String * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_String_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_String *arg1 = (CSG_Table_Value_String *) 0 ;
+  CSG_Bytes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_String_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_String_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_String * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_String_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Value_String_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Bytes * >(argp2);
+  result = (bool)(arg1)->Set_Value((CSG_Bytes const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_String_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_String *arg1 = (CSG_Table_Value_String *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_String_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_String_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_String * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_String_Set_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Set_Value((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_String_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_String *arg1 = (CSG_Table_Value_String *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_String_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_String_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_String_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_String_Set_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_String *arg1 = (CSG_Table_Value_String *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_String_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_String_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_String * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_String_Set_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_String_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Bytes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_String_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_String_Set_Value__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_String_Set_Value__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_String_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_String_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Table_Value_String *,CSG_Bytes const &)\n"
+    "    Set_Value(CSG_Table_Value_String *,wchar_t const *)\n"
+    "    Set_Value(CSG_Table_Value_String *,int)\n"
+    "    Set_Value(CSG_Table_Value_String *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_String_asBinary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_String *arg1 = (CSG_Table_Value_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Bytes result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_String_asBinary",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_String_asBinary" "', argument " "1"" of type '" "CSG_Table_Value_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_String * >(argp1);
+  result = ((CSG_Table_Value_String const *)arg1)->asBinary();
+  resultobj = SWIG_NewPointerObj((new CSG_Bytes(static_cast< const CSG_Bytes& >(result))), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_String_asString__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_String *arg1 = (CSG_Table_Value_String *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_String_asString",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_String_asString" "', argument " "1"" of type '" "CSG_Table_Value_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_String_asString" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_Table_Value_String const *)arg1)->asString(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_String_asString__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_String *arg1 = (CSG_Table_Value_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_String_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_String_asString" "', argument " "1"" of type '" "CSG_Table_Value_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_String * >(argp1);
+  result = (wchar_t *)((CSG_Table_Value_String const *)arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_String_asString(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Table_Value_String_asString__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_String_asString__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_String_asString'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asString(CSG_Table_Value_String const *,int)\n"
+    "    asString(CSG_Table_Value_String const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_String_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_String *arg1 = (CSG_Table_Value_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_String_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_String_asInt" "', argument " "1"" of type '" "CSG_Table_Value_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_String * >(argp1);
+  result = (int)((CSG_Table_Value_String const *)arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_String_asDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_String *arg1 = (CSG_Table_Value_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_String_asDouble",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_String_asDouble" "', argument " "1"" of type '" "CSG_Table_Value_String const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_String * >(argp1);
+  result = (double)((CSG_Table_Value_String const *)arg1)->asDouble();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Table_Value_String_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Table_Value_String, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table_Value_Date(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Date *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Table_Value_Date")) SWIG_fail;
+  result = (CSG_Table_Value_Date *)new CSG_Table_Value_Date();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Value_Date, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Table_Value_Date(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Date *arg1 = (CSG_Table_Value_Date *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Table_Value_Date",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Date, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Table_Value_Date" "', argument " "1"" of type '" "CSG_Table_Value_Date *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Date * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Date_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Date *arg1 = (CSG_Table_Value_Date *) 0 ;
+  CSG_Bytes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Date_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Date, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Date_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Date *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Date * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_Date_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Value_Date_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Bytes * >(argp2);
+  result = (bool)(arg1)->Set_Value((CSG_Bytes const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Date_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Date *arg1 = (CSG_Table_Value_Date *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Date_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Date, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Date_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Date *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Date * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_Date_Set_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Set_Value((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Date_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Date *arg1 = (CSG_Table_Value_Date *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Date_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Date, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Date_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Date *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Date * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Date_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Date_Set_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Date *arg1 = (CSG_Table_Value_Date *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Date_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Date, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Date_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Date *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Date * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Date_Set_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Date_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Date, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Bytes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_Date_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Date, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Date_Set_Value__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Date, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Date_Set_Value__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Date, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_Date_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_Date_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Table_Value_Date *,CSG_Bytes const &)\n"
+    "    Set_Value(CSG_Table_Value_Date *,wchar_t const *)\n"
+    "    Set_Value(CSG_Table_Value_Date *,int)\n"
+    "    Set_Value(CSG_Table_Value_Date *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Date_asBinary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Date *arg1 = (CSG_Table_Value_Date *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Bytes result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Date_asBinary",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Date, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Date_asBinary" "', argument " "1"" of type '" "CSG_Table_Value_Date const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Date * >(argp1);
+  result = ((CSG_Table_Value_Date const *)arg1)->asBinary();
+  resultobj = SWIG_NewPointerObj((new CSG_Bytes(static_cast< const CSG_Bytes& >(result))), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Date_asString__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Date *arg1 = (CSG_Table_Value_Date *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Date_asString",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Date, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Date_asString" "', argument " "1"" of type '" "CSG_Table_Value_Date const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Date * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Date_asString" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_Table_Value_Date const *)arg1)->asString(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Date_asString__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Date *arg1 = (CSG_Table_Value_Date *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Date_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Date, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Date_asString" "', argument " "1"" of type '" "CSG_Table_Value_Date const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Date * >(argp1);
+  result = (wchar_t *)((CSG_Table_Value_Date const *)arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Date_asString(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Date, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Table_Value_Date_asString__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Date, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Date_asString__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_Date_asString'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asString(CSG_Table_Value_Date const *,int)\n"
+    "    asString(CSG_Table_Value_Date const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Date_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Date *arg1 = (CSG_Table_Value_Date *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Date_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Date, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Date_asInt" "', argument " "1"" of type '" "CSG_Table_Value_Date const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Date * >(argp1);
+  result = (int)((CSG_Table_Value_Date const *)arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Date_asDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Date *arg1 = (CSG_Table_Value_Date *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Date_asDouble",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Date, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Date_asDouble" "', argument " "1"" of type '" "CSG_Table_Value_Date const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Date * >(argp1);
+  result = (double)((CSG_Table_Value_Date const *)arg1)->asDouble();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Table_Value_Date_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Table_Value_Date, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table_Value_Int(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Int *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Table_Value_Int")) SWIG_fail;
+  result = (CSG_Table_Value_Int *)new CSG_Table_Value_Int();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Value_Int, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Table_Value_Int(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Int *arg1 = (CSG_Table_Value_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Table_Value_Int",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Int, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Table_Value_Int" "', argument " "1"" of type '" "CSG_Table_Value_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Int * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Int_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Int *arg1 = (CSG_Table_Value_Int *) 0 ;
+  CSG_Bytes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Int_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Int_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Int * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_Int_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Value_Int_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Bytes * >(argp2);
+  result = (bool)(arg1)->Set_Value((CSG_Bytes const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Int_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Int *arg1 = (CSG_Table_Value_Int *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Int_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Int_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Int * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_Int_Set_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Set_Value((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Int_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Int *arg1 = (CSG_Table_Value_Int *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Int_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Int_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Int * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Int_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Int_Set_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Int *arg1 = (CSG_Table_Value_Int *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Int_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Int_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Int * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Int_Set_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Int_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Int, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Bytes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_Int_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Int, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Int_Set_Value__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Int, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Int_Set_Value__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Int, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_Int_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_Int_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Table_Value_Int *,CSG_Bytes const &)\n"
+    "    Set_Value(CSG_Table_Value_Int *,wchar_t const *)\n"
+    "    Set_Value(CSG_Table_Value_Int *,int)\n"
+    "    Set_Value(CSG_Table_Value_Int *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Int_asString__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Int *arg1 = (CSG_Table_Value_Int *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Int_asString",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Int_asString" "', argument " "1"" of type '" "CSG_Table_Value_Int const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Int * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Int_asString" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_Table_Value_Int const *)arg1)->asString(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Int_asString__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Int *arg1 = (CSG_Table_Value_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Int_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Int_asString" "', argument " "1"" of type '" "CSG_Table_Value_Int const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Int * >(argp1);
+  result = (wchar_t *)((CSG_Table_Value_Int const *)arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Int_asString(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Int, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Table_Value_Int_asString__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Int, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Int_asString__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_Int_asString'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asString(CSG_Table_Value_Int const *,int)\n"
+    "    asString(CSG_Table_Value_Int const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Int_asBinary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Int *arg1 = (CSG_Table_Value_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Bytes result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Int_asBinary",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Int_asBinary" "', argument " "1"" of type '" "CSG_Table_Value_Int const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Int * >(argp1);
+  result = ((CSG_Table_Value_Int const *)arg1)->asBinary();
+  resultobj = SWIG_NewPointerObj((new CSG_Bytes(static_cast< const CSG_Bytes& >(result))), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Int_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Int *arg1 = (CSG_Table_Value_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Int_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Int_asInt" "', argument " "1"" of type '" "CSG_Table_Value_Int const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Int * >(argp1);
+  result = (int)((CSG_Table_Value_Int const *)arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Int_asDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Int *arg1 = (CSG_Table_Value_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Int_asDouble",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Int_asDouble" "', argument " "1"" of type '" "CSG_Table_Value_Int const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Int * >(argp1);
+  result = (double)((CSG_Table_Value_Int const *)arg1)->asDouble();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Table_Value_Int_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Table_Value_Int, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table_Value_Double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Double *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Table_Value_Double")) SWIG_fail;
+  result = (CSG_Table_Value_Double *)new CSG_Table_Value_Double();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Value_Double, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Table_Value_Double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Double *arg1 = (CSG_Table_Value_Double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Table_Value_Double",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Double, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Table_Value_Double" "', argument " "1"" of type '" "CSG_Table_Value_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Double * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Double_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Double *arg1 = (CSG_Table_Value_Double *) 0 ;
+  CSG_Bytes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Double_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Double_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Double * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_Double_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Value_Double_Set_Value" "', argument " "2"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Bytes * >(argp2);
+  result = (bool)(arg1)->Set_Value((CSG_Bytes const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Double_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Double *arg1 = (CSG_Table_Value_Double *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Double_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Double_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Double * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Value_Double_Set_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Set_Value((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Double_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Double *arg1 = (CSG_Table_Value_Double *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Double_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Double_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Double * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Double_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Double_Set_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Double *arg1 = (CSG_Table_Value_Double *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Double_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Double_Set_Value" "', argument " "1"" of type '" "CSG_Table_Value_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Double * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Double_Set_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Double_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Double, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Bytes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_Double_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Double, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Double_Set_Value__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Double, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Double_Set_Value__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Double, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Value_Double_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_Double_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Table_Value_Double *,CSG_Bytes const &)\n"
+    "    Set_Value(CSG_Table_Value_Double *,wchar_t const *)\n"
+    "    Set_Value(CSG_Table_Value_Double *,int)\n"
+    "    Set_Value(CSG_Table_Value_Double *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Double_asString__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Double *arg1 = (CSG_Table_Value_Double *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Value_Double_asString",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Double_asString" "', argument " "1"" of type '" "CSG_Table_Value_Double const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Double * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Value_Double_asString" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_Table_Value_Double const *)arg1)->asString(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Double_asString__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Double *arg1 = (CSG_Table_Value_Double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Double_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Double_asString" "', argument " "1"" of type '" "CSG_Table_Value_Double const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Double * >(argp1);
+  result = (wchar_t *)((CSG_Table_Value_Double const *)arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Double_asString(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Double, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Table_Value_Double_asString__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Value_Double, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Value_Double_asString__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Value_Double_asString'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asString(CSG_Table_Value_Double const *,int)\n"
+    "    asString(CSG_Table_Value_Double const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Double_asBinary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Double *arg1 = (CSG_Table_Value_Double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Bytes result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Double_asBinary",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Double_asBinary" "', argument " "1"" of type '" "CSG_Table_Value_Double const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Double * >(argp1);
+  result = ((CSG_Table_Value_Double const *)arg1)->asBinary();
+  resultobj = SWIG_NewPointerObj((new CSG_Bytes(static_cast< const CSG_Bytes& >(result))), SWIGTYPE_p_CSG_Bytes, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Double_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Double *arg1 = (CSG_Table_Value_Double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Double_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Double_asInt" "', argument " "1"" of type '" "CSG_Table_Value_Double const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Double * >(argp1);
+  result = (int)((CSG_Table_Value_Double const *)arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Value_Double_asDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Value_Double *arg1 = (CSG_Table_Value_Double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Value_Double_asDouble",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Value_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Value_Double_asDouble" "', argument " "1"" of type '" "CSG_Table_Value_Double const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Value_Double * >(argp1);
+  result = (double)((CSG_Table_Value_Double const *)arg1)->asDouble();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Table_Value_Double_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Table_Value_Double, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Get_Table(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Record_Get_Table",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Get_Table" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  result = (CSG_Table *)(arg1)->Get_Table();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Get_Index(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Record_Get_Index",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Get_Index" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  result = (int)((CSG_Table_Record const *)arg1)->Get_Index();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  CSG_Bytes *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Set_Value" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Table_Record_Set_Value" "', argument " "3"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Record_Set_Value" "', argument " "3"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Bytes * >(argp3);
+  result = (bool)(arg1)->Set_Value(arg2,(CSG_Bytes const &)*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  CSG_Bytes *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Set_Value" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_Set_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_Bytes,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Table_Record_Set_Value" "', argument " "3"" of type '" "CSG_Bytes const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Record_Set_Value" "', argument " "3"" of type '" "CSG_Bytes const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Bytes * >(argp3);
+  result = (bool)(arg1)->Set_Value((wchar_t const *)arg2,(CSG_Bytes const &)*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Set_Value" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Table_Record_Set_Value" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (bool)(arg1)->Set_Value(arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Set_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Set_Value" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_Set_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Table_Record_Set_Value" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (bool)(arg1)->Set_Value((wchar_t const *)arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Set_Value__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Set_Value" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Record_Set_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Set_Value(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Set_Value__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Set_Value" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_Set_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Record_Set_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Set_Value((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_CSG_Bytes, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Table_Record_Set_Value__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Record_Set_Value__SWIG_4(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Table_Record_Set_Value__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_CSG_Bytes, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Table_Record_Set_Value__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Record_Set_Value__SWIG_5(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Table_Record_Set_Value__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Record_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Table_Record *,int,CSG_Bytes const &)\n"
+    "    Set_Value(CSG_Table_Record *,wchar_t const *,CSG_Bytes const &)\n"
+    "    Set_Value(CSG_Table_Record *,int,wchar_t const *)\n"
+    "    Set_Value(CSG_Table_Record *,wchar_t const *,wchar_t const *)\n"
+    "    Set_Value(CSG_Table_Record *,int,double)\n"
+    "    Set_Value(CSG_Table_Record *,wchar_t const *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Add_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_Add_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Add_Value" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_Add_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Record_Add_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Add_Value(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Add_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_Add_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Add_Value" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_Add_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Record_Add_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Add_Value((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Add_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Record_Add_Value__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Record_Add_Value__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Record_Add_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Value(CSG_Table_Record *,int,double)\n"
+    "    Add_Value(CSG_Table_Record *,wchar_t const *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Mul_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_Mul_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Mul_Value" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_Mul_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Record_Mul_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Mul_Value(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Mul_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_Mul_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Mul_Value" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_Mul_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Record_Mul_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Mul_Value((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Mul_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Record_Mul_Value__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Record_Mul_Value__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Record_Mul_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Mul_Value(CSG_Table_Record *,int,double)\n"
+    "    Mul_Value(CSG_Table_Record *,wchar_t const *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Set_NoData__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_Set_NoData",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Set_NoData" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_Set_NoData" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_NoData(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Set_NoData__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_Set_NoData",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Set_NoData" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_Set_NoData" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Set_NoData((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Set_NoData(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Record_Set_NoData__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Record_Set_NoData__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Record_Set_NoData'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_NoData(CSG_Table_Record *,int)\n"
+    "    Set_NoData(CSG_Table_Record *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_is_NoData__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_is_NoData",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_is_NoData" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_is_NoData" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)((CSG_Table_Record const *)arg1)->is_NoData(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_is_NoData__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_is_NoData",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_is_NoData" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_is_NoData" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)((CSG_Table_Record const *)arg1)->is_NoData((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_is_NoData(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Record_is_NoData__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Record_is_NoData__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Record_is_NoData'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_NoData(CSG_Table_Record const *,int)\n"
+    "    is_NoData(CSG_Table_Record const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asString__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_asString",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asString" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_asString" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Record_asString" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (wchar_t *)((CSG_Table_Record const *)arg1)->asString(arg2,arg3);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asString__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asString",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asString" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_asString" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_Table_Record const *)arg1)->asString(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asString__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Record_asString",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asString" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_asString" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Record_asString" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (wchar_t *)((CSG_Table_Record const *)arg1)->asString((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asString__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asString",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asString" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_asString" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (wchar_t *)((CSG_Table_Record const *)arg1)->asString((wchar_t const *)arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asString(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Record_asString__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Record_asString__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Record_asString__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Record_asString__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Record_asString'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asString(CSG_Table_Record const *,int,int)\n"
+    "    asString(CSG_Table_Record const *,int)\n"
+    "    asString(CSG_Table_Record const *,wchar_t const *,int)\n"
+    "    asString(CSG_Table_Record const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asChar__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asChar",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asChar" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_asChar" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = ((CSG_Table_Record const *)arg1)->asChar(arg2);
+  resultobj = SWIG_From_wchar_t(static_cast< wchar_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asChar__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asChar",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asChar" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_asChar" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = ((CSG_Table_Record const *)arg1)->asChar((wchar_t const *)arg2);
+  resultobj = SWIG_From_wchar_t(static_cast< wchar_t >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asChar(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Record_asChar__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Record_asChar__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Record_asChar'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asChar(CSG_Table_Record const *,int)\n"
+    "    asChar(CSG_Table_Record const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asShort__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asShort",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asShort" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_asShort" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (short)((CSG_Table_Record const *)arg1)->asShort(arg2);
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asShort__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asShort",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asShort" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_asShort" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (short)((CSG_Table_Record const *)arg1)->asShort((wchar_t const *)arg2);
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asShort(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Record_asShort__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Record_asShort__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Record_asShort'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asShort(CSG_Table_Record const *,int)\n"
+    "    asShort(CSG_Table_Record const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asInt__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asInt",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asInt" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_asInt" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Table_Record const *)arg1)->asInt(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asInt__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asInt",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asInt" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_asInt" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (int)((CSG_Table_Record const *)arg1)->asInt((wchar_t const *)arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asInt(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Record_asInt__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Record_asInt__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Record_asInt'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asInt(CSG_Table_Record const *,int)\n"
+    "    asInt(CSG_Table_Record const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asFloat__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asFloat",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asFloat" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_asFloat" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (float)((CSG_Table_Record const *)arg1)->asFloat(arg2);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asFloat__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asFloat",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asFloat" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_asFloat" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (float)((CSG_Table_Record const *)arg1)->asFloat((wchar_t const *)arg2);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asFloat(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Record_asFloat__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Record_asFloat__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Record_asFloat'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asFloat(CSG_Table_Record const *,int)\n"
+    "    asFloat(CSG_Table_Record const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asDouble__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asDouble",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asDouble" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_asDouble" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Table_Record const *)arg1)->asDouble(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asDouble__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_asDouble",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_asDouble" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_asDouble" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (double)((CSG_Table_Record const *)arg1)->asDouble((wchar_t const *)arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_asDouble(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Record_asDouble__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Record_asDouble__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Record_asDouble'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asDouble(CSG_Table_Record const *,int)\n"
+    "    asDouble(CSG_Table_Record const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Get_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Table_Value *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_Get_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Get_Value" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Record_Get_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Table_Value *)(arg1)->Get_Value(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Value, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  CSG_Table_Record *arg2 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Record_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_Assign" "', argument " "1"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Record_Assign" "', argument " "2"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table_Record * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_is_Selected(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Record_is_Selected",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_is_Selected" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  result = (bool)((CSG_Table_Record const *)arg1)->is_Selected();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Record_is_Modified(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table_Record *arg1 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Record_is_Modified",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Record_is_Modified" "', argument " "1"" of type '" "CSG_Table_Record const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table_Record * >(argp1);
+  result = (bool)((CSG_Table_Record const *)arg1)->is_Modified();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Table_Record_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Table_Record, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Table")) SWIG_fail;
+  result = (CSG_Table *)new CSG_Table();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Table",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Table,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Table" "', argument " "1"" of type '" "CSG_Table const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Table" "', argument " "1"" of type '" "CSG_Table const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (CSG_Table *)new CSG_Table((CSG_Table const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_Table *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Create" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Table,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Create" "', argument " "2"" of type '" "CSG_Table const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Create" "', argument " "2"" of type '" "CSG_Table const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table * >(argp2);
+  result = (bool)(arg1)->Create((CSG_Table const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  TSG_Table_File_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Table",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Table" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Table" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Table" "', argument " "2"" of type '" "TSG_Table_File_Type""'");
+  } 
+  arg2 = static_cast< TSG_Table_File_Type >(val2);
+  result = (CSG_Table *)new CSG_Table((CSG_String const &)*arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Table",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Table" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Table" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_Table *)new CSG_Table((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_String *arg2 = 0 ;
+  TSG_Table_File_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Create" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Create" "', argument " "3"" of type '" "TSG_Table_File_Type""'");
+  } 
+  arg3 = static_cast< TSG_Table_File_Type >(val3);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Create" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  TSG_Table_File_Type arg2 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Table",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Table" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Table" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Table" "', argument " "2"" of type '" "TSG_Table_File_Type""'");
+  } 
+  arg2 = static_cast< TSG_Table_File_Type >(val2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_CSG_Table" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (CSG_Table *)new CSG_Table((CSG_String const &)*arg1,arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, SWIG_POINTER_NEW |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Create__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_String *arg2 = 0 ;
+  TSG_Table_File_Type arg3 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Table_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Create" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Create" "', argument " "3"" of type '" "TSG_Table_File_Type""'");
+  } 
+  arg3 = static_cast< TSG_Table_File_Type >(val3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Table_Create" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2,arg3,(wchar_t const *)arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return resultobj;
+fail:
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Table",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Table" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (CSG_Table *)new CSG_Table(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Table(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Table__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Table__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Table__SWIG_3(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Table__SWIG_5(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Table__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_new_CSG_Table__SWIG_4(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Table'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Table()\n"
+    "    CSG_Table(CSG_Table const &)\n"
+    "    CSG_Table(CSG_String const &,TSG_Table_File_Type)\n"
+    "    CSG_Table(CSG_String const &)\n"
+    "    CSG_Table(CSG_String const &,TSG_Table_File_Type,wchar_t const *)\n"
+    "    CSG_Table(CSG_Table *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Create__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_Table *arg2 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Create" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Create" "', argument " "2"" of type '" "CSG_Table *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table * >(argp2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Table, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Create__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Create__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Create__SWIG_4(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Create__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Table_Create__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Table *,CSG_Table const &)\n"
+    "    Create(CSG_Table *,CSG_String const &,TSG_Table_File_Type)\n"
+    "    Create(CSG_Table *,CSG_String const &)\n"
+    "    Create(CSG_Table *,CSG_String const &,TSG_Table_File_Type,wchar_t const *)\n"
+    "    Create(CSG_Table *,CSG_Table *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Table(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Table",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Table" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Destroy" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_ObjectType(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Data_Object_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Get_ObjectType",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_ObjectType" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (TSG_Data_Object_Type)((CSG_Table const *)arg1)->Get_ObjectType();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_Data_Object *arg2 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Assign" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Assign" "', argument " "2"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Data_Object * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Assign_Values(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_Table *arg2 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Assign_Values",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Assign_Values" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Assign_Values" "', argument " "2"" of type '" "CSG_Table *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table * >(argp2);
+  result = (bool)(arg1)->Assign_Values(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Save__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Save",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Save" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Save" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Save__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Save",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Save" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Save__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Table_Save",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Save" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Save" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Table_Save" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2,arg3,(wchar_t const *)arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return resultobj;
+fail:
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Save(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Save__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Save__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Table_Save__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Save'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Save(CSG_Table *,CSG_String const &,int)\n"
+    "    Save(CSG_Table *,CSG_String const &)\n"
+    "    Save(CSG_Table *,CSG_String const &,int,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Serialize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_File *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Serialize",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Serialize" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_File,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Serialize" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Serialize" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_File * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Serialize" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Serialize(*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Owner(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Data_Object *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Get_Owner",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Owner" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (CSG_Data_Object *)(arg1)->Get_Owner();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_is_Private(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_is_Private",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_is_Private" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (bool)((CSG_Table const *)arg1)->is_Private();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_is_Valid" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (bool)((CSG_Table const *)arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_is_Compatible__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_Table *arg2 = (CSG_Table *) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_is_Compatible",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_is_Compatible" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_is_Compatible" "', argument " "2"" of type '" "CSG_Table *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_is_Compatible" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)((CSG_Table const *)arg1)->is_Compatible(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_is_Compatible__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_Table *arg2 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_is_Compatible",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_is_Compatible" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_is_Compatible" "', argument " "2"" of type '" "CSG_Table *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table * >(argp2);
+  result = (bool)((CSG_Table const *)arg1)->is_Compatible(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_is_Compatible(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_is_Compatible__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_is_Compatible__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_is_Compatible'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_Compatible(CSG_Table const *,CSG_Table *,bool)\n"
+    "    is_Compatible(CSG_Table const *,CSG_Table *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Add_Field__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  TSG_Data_Type arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Table_Add_Field",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Add_Field" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Add_Field" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Add_Field" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Table_Add_Field" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Add_Field((wchar_t const *)arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Add_Field__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  TSG_Data_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Add_Field",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Add_Field" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Add_Field" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Add_Field" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  result = (bool)(arg1)->Add_Field((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Add_Field__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  char *arg2 = (char *) 0 ;
+  TSG_Data_Type arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Table_Add_Field",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Add_Field" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Add_Field" "', argument " "2"" of type '" "char const *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Add_Field" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Table_Add_Field" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Add_Field((char const *)arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Add_Field__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  char *arg2 = (char *) 0 ;
+  TSG_Data_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Add_Field",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Add_Field" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Add_Field" "', argument " "2"" of type '" "char const *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Add_Field" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  result = (bool)(arg1)->Add_Field((char const *)arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Add_Field(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Add_Field__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Add_Field__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Table_Add_Field__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Table_Add_Field__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Add_Field'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Field(CSG_Table *,wchar_t const *,TSG_Data_Type,int)\n"
+    "    Add_Field(CSG_Table *,wchar_t const *,TSG_Data_Type)\n"
+    "    Add_Field(CSG_Table *,char const *,TSG_Data_Type,int)\n"
+    "    Add_Field(CSG_Table *,char const *,TSG_Data_Type)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Del_Field(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Del_Field",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Del_Field" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Del_Field" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del_Field(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Field_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Get_Field_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Field_Count" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (int)((CSG_Table const *)arg1)->Get_Field_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Field_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Field_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Field_Name" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Field_Name" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_Table const *)arg1)->Get_Field_Name(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Field_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Data_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Field_Type",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Field_Type" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Field_Type" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (TSG_Data_Type)((CSG_Table const *)arg1)->Get_Field_Type(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Field_Length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Field_Length",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Field_Length" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Field_Length" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Table const *)arg1)->Get_Field_Length(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Field_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Set_Field_Name",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Set_Field_Name" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Set_Field_Name" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Table_Set_Field_Name" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (bool)(arg1)->Set_Field_Name(arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Minimum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Minimum",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Minimum" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Minimum" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Table const *)arg1)->Get_Minimum(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Maximum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Maximum",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Maximum" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Maximum" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Table const *)arg1)->Get_Maximum(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Range(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Range",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Range" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Range" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Table const *)arg1)->Get_Range(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Mean(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Mean",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Mean" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Mean" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Table const *)arg1)->Get_Mean(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_StdDev(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_StdDev",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_StdDev" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_StdDev" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Table const *)arg1)->Get_StdDev(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Variance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Variance",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Variance" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Variance" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Table const *)arg1)->Get_Variance(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Add_Record__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_Table_Record *arg2 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Add_Record",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Add_Record" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Add_Record" "', argument " "2"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table_Record * >(argp2);
+  result = (CSG_Table_Record *)(arg1)->Add_Record(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Add_Record__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Add_Record",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Add_Record" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (CSG_Table_Record *)(arg1)->Add_Record();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Add_Record(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Table_Add_Record__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Add_Record__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Add_Record'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Record(CSG_Table *,CSG_Table_Record *)\n"
+    "    Add_Record(CSG_Table *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Ins_Record__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  CSG_Table_Record *arg3 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Ins_Record",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Ins_Record" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Ins_Record" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Table_Ins_Record" "', argument " "3"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Table_Record * >(argp3);
+  result = (CSG_Table_Record *)(arg1)->Ins_Record(arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Ins_Record__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Ins_Record",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Ins_Record" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Ins_Record" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Table_Record *)(arg1)->Ins_Record(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Ins_Record(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Ins_Record__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Table_Ins_Record__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Ins_Record'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Ins_Record(CSG_Table *,int,CSG_Table_Record *)\n"
+    "    Ins_Record(CSG_Table *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Del_Record(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Del_Record",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Del_Record" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Del_Record" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del_Record(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Del_Records(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Del_Records",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Del_Records" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (bool)(arg1)->Del_Records();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Count" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (int)((CSG_Table const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Record_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Get_Record_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Record_Count" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (int)((CSG_Table const *)arg1)->Get_Record_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Record(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Record",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Record" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Record" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Table_Record *)((CSG_Table const *)arg1)->Get_Record(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Index(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Index",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Index" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Index" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Table const *)arg1)->Get_Index(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Record_byIndex(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Record_byIndex",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Record_byIndex" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Record_byIndex" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Table_Record *)((CSG_Table const *)arg1)->Get_Record_byIndex(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Table_Set_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Set_Value" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Set_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Table_Set_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  result = (bool)(arg1)->Set_Value(arg2,arg3,(wchar_t const *)arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return resultobj;
+fail:
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Table_Set_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Set_Value" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Set_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Table_Set_Value" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Set_Value(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Table_Set_Value__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Table_Set_Value__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Table *,int,int,wchar_t const *)\n"
+    "    Set_Value(CSG_Table *,int,int,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  CSG_String *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Table_Get_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Value" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Get_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Table_Get_Value" "', argument " "4"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Get_Value" "', argument " "4"" of type '" "CSG_String &""'"); 
+  }
+  arg4 = reinterpret_cast< CSG_String * >(argp4);
+  result = (bool)((CSG_Table const *)arg1)->Get_Value(arg2,arg3,*arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Table_Get_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Value" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Get_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Table_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Table_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  result = (bool)((CSG_Table const *)arg1)->Get_Value(arg2,arg3,*arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_CSG_String, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Table_Get_Value__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_double, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Table_Get_Value__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Get_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Value(CSG_Table const *,int,int,CSG_String &)\n"
+    "    Get_Value(CSG_Table const *,int,int,double &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Modified__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Set_Modified",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Set_Modified" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Set_Modified" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Modified(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Modified__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Set_Modified",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Set_Modified" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  (arg1)->Set_Modified();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Modified(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Table_Set_Modified__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Set_Modified__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Set_Modified'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Modified(CSG_Table *,bool)\n"
+    "    Set_Modified(CSG_Table *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Selection_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Get_Selection_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Selection_Count" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (int)((CSG_Table const *)arg1)->Get_Selection_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Selection__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Selection",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Selection" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Selection" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Table_Record *)((CSG_Table const *)arg1)->Get_Selection(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Selection__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Get_Selection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Selection" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (CSG_Table_Record *)((CSG_Table const *)arg1)->Get_Selection();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Selection(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Table_Get_Selection__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Get_Selection__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Get_Selection'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Selection(CSG_Table const *,int)\n"
+    "    Get_Selection(CSG_Table const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_is_Selected(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_is_Selected",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_is_Selected" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_is_Selected" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)((CSG_Table const *)arg1)->is_Selected(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Select__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Select",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Select" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Select" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Select" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Select(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Select__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Select",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Select" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Select" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Select(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Select__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_Table_Record *arg2 = (CSG_Table_Record *) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Select",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Select" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Select" "', argument " "2"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table_Record * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Select" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Select(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Select__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  CSG_Table_Record *arg2 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Select",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Select" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Table_Select" "', argument " "2"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table_Record * >(argp2);
+  result = (bool)(arg1)->Select(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Select__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Select",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Select" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (bool)(arg1)->Select();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Select(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Table_Select__SWIG_4(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Table_Select__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Table_Select__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Select__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Select__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Select'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Select(CSG_Table *,int,bool)\n"
+    "    Select(CSG_Table *,int)\n"
+    "    Select(CSG_Table *,CSG_Table_Record *,bool)\n"
+    "    Select(CSG_Table *,CSG_Table_Record *)\n"
+    "    Select(CSG_Table *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Del_Selection(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Del_Selection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Del_Selection" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (int)(arg1)->Del_Selection();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Inv_Selection(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Inv_Selection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Inv_Selection" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (int)(arg1)->Inv_Selection();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Index__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  TSG_Table_Index_Order arg3 ;
+  int arg4 ;
+  TSG_Table_Index_Order arg5 ;
+  int arg6 ;
+  TSG_Table_Index_Order arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Table_Set_Index",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Set_Index" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Set_Index" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Set_Index" "', argument " "3"" of type '" "TSG_Table_Index_Order""'");
+  } 
+  arg3 = static_cast< TSG_Table_Index_Order >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Table_Set_Index" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Table_Set_Index" "', argument " "5"" of type '" "TSG_Table_Index_Order""'");
+  } 
+  arg5 = static_cast< TSG_Table_Index_Order >(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Table_Set_Index" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Table_Set_Index" "', argument " "7"" of type '" "TSG_Table_Index_Order""'");
+  } 
+  arg7 = static_cast< TSG_Table_Index_Order >(val7);
+  result = (bool)(arg1)->Set_Index(arg2,arg3,arg4,arg5,arg6,arg7);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Index__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  TSG_Table_Index_Order arg3 ;
+  int arg4 ;
+  TSG_Table_Index_Order arg5 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Table_Set_Index",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Set_Index" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Set_Index" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Set_Index" "', argument " "3"" of type '" "TSG_Table_Index_Order""'");
+  } 
+  arg3 = static_cast< TSG_Table_Index_Order >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Table_Set_Index" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Table_Set_Index" "', argument " "5"" of type '" "TSG_Table_Index_Order""'");
+  } 
+  arg5 = static_cast< TSG_Table_Index_Order >(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Table_Set_Index" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (bool)(arg1)->Set_Index(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Index__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  TSG_Table_Index_Order arg3 ;
+  int arg4 ;
+  TSG_Table_Index_Order arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Table_Set_Index",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Set_Index" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Set_Index" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Set_Index" "', argument " "3"" of type '" "TSG_Table_Index_Order""'");
+  } 
+  arg3 = static_cast< TSG_Table_Index_Order >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Table_Set_Index" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Table_Set_Index" "', argument " "5"" of type '" "TSG_Table_Index_Order""'");
+  } 
+  arg5 = static_cast< TSG_Table_Index_Order >(val5);
+  result = (bool)(arg1)->Set_Index(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Index__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  TSG_Table_Index_Order arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Table_Set_Index",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Set_Index" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Set_Index" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Set_Index" "', argument " "3"" of type '" "TSG_Table_Index_Order""'");
+  } 
+  arg3 = static_cast< TSG_Table_Index_Order >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Table_Set_Index" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Set_Index(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Index__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  TSG_Table_Index_Order arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Table_Set_Index",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Set_Index" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Set_Index" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Table_Set_Index" "', argument " "3"" of type '" "TSG_Table_Index_Order""'");
+  } 
+  arg3 = static_cast< TSG_Table_Index_Order >(val3);
+  result = (bool)(arg1)->Set_Index(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Set_Index(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Table_Set_Index__SWIG_4(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Table_Set_Index__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Table_Set_Index__SWIG_2(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Table_Set_Index__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Table_Set_Index__SWIG_0(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Table_Set_Index'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Index(CSG_Table *,int,TSG_Table_Index_Order,int,TSG_Table_Index_Order,int,TSG_Table_Index_Order)\n"
+    "    Set_Index(CSG_Table *,int,TSG_Table_Index_Order,int,TSG_Table_Index_Order,int)\n"
+    "    Set_Index(CSG_Table *,int,TSG_Table_Index_Order,int,TSG_Table_Index_Order)\n"
+    "    Set_Index(CSG_Table *,int,TSG_Table_Index_Order,int)\n"
+    "    Set_Index(CSG_Table *,int,TSG_Table_Index_Order)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Del_Index(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_Del_Index",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Del_Index" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (bool)(arg1)->Del_Index();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Toggle_Index(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Toggle_Index",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Toggle_Index" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Toggle_Index" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Toggle_Index(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_is_Indexed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Table_is_Indexed",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_is_Indexed" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (bool)((CSG_Table const *)arg1)->is_Indexed();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Index_Field(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Index_Field",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Index_Field" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Index_Field" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Table const *)arg1)->Get_Index_Field(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Table_Get_Index_Order(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Table_Index_Order result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Table_Get_Index_Order",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Table_Get_Index_Order" "', argument " "1"" of type '" "CSG_Table const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Table_Get_Index_Order" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (TSG_Table_Index_Order)((CSG_Table const *)arg1)->Get_Index_Order(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Table_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Table, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Create_Table__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Create_Table")) SWIG_fail;
+  result = (CSG_Table *)SG_Create_Table();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Table__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_Table",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Table,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Table" "', argument " "1"" of type '" "CSG_Table const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_Table" "', argument " "1"" of type '" "CSG_Table const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (CSG_Table *)SG_Create_Table((CSG_Table const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Table__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_Table",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Table" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_Table" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_Table *)SG_Create_Table((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Table__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Table *arg1 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_Table",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Table" "', argument " "1"" of type '" "CSG_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Table * >(argp1);
+  result = (CSG_Table *)SG_Create_Table(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Table(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_SG_Create_Table__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_Table__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_Table__SWIG_2(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Table, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_Table__SWIG_3(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Create_Table'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Create_Table()\n"
+    "    SG_Create_Table(CSG_Table const &)\n"
+    "    SG_Create_Table(CSG_String const &)\n"
+    "    SG_Create_Table(CSG_Table *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Pyramid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Grid_Pyramid")) SWIG_fail;
+  result = (CSG_Grid_Pyramid *)new CSG_Grid_Pyramid();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Pyramid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Pyramid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  TSG_Grid_Pyramid_Generalisation arg3 ;
+  TSG_Grid_Pyramid_Grow_Type arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Grid_Pyramid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_CSG_Grid_Pyramid",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid_Pyramid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid_Pyramid" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid_Pyramid" "', argument " "3"" of type '" "TSG_Grid_Pyramid_Generalisation""'");
+  } 
+  arg3 = static_cast< TSG_Grid_Pyramid_Generalisation >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Grid_Pyramid" "', argument " "4"" of type '" "TSG_Grid_Pyramid_Grow_Type""'");
+  } 
+  arg4 = static_cast< TSG_Grid_Pyramid_Grow_Type >(val4);
+  result = (CSG_Grid_Pyramid *)new CSG_Grid_Pyramid(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Pyramid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Pyramid__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  TSG_Grid_Pyramid_Generalisation arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Grid_Pyramid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Grid_Pyramid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid_Pyramid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid_Pyramid" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid_Pyramid" "', argument " "3"" of type '" "TSG_Grid_Pyramid_Generalisation""'");
+  } 
+  arg3 = static_cast< TSG_Grid_Pyramid_Generalisation >(val3);
+  result = (CSG_Grid_Pyramid *)new CSG_Grid_Pyramid(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Pyramid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Pyramid__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid_Pyramid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Grid_Pyramid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid_Pyramid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid_Pyramid" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Grid_Pyramid *)new CSG_Grid_Pyramid(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Pyramid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Pyramid__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid_Pyramid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Grid_Pyramid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid_Pyramid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (CSG_Grid_Pyramid *)new CSG_Grid_Pyramid(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Pyramid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Pyramid_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *arg1 = (CSG_Grid_Pyramid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  double arg3 ;
+  TSG_Grid_Pyramid_Generalisation arg4 ;
+  TSG_Grid_Pyramid_Grow_Type arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_Pyramid_Create",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Pyramid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "1"" of type '" "CSG_Grid_Pyramid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Pyramid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "4"" of type '" "TSG_Grid_Pyramid_Generalisation""'");
+  } 
+  arg4 = static_cast< TSG_Grid_Pyramid_Generalisation >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "5"" of type '" "TSG_Grid_Pyramid_Grow_Type""'");
+  } 
+  arg5 = static_cast< TSG_Grid_Pyramid_Grow_Type >(val5);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Pyramid_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *arg1 = (CSG_Grid_Pyramid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  double arg3 ;
+  TSG_Grid_Pyramid_Generalisation arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Pyramid_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Pyramid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "1"" of type '" "CSG_Grid_Pyramid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Pyramid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "4"" of type '" "TSG_Grid_Pyramid_Generalisation""'");
+  } 
+  arg4 = static_cast< TSG_Grid_Pyramid_Generalisation >(val4);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Pyramid_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *arg1 = (CSG_Grid_Pyramid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Pyramid_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Pyramid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "1"" of type '" "CSG_Grid_Pyramid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Pyramid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Pyramid_Create__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *arg1 = (CSG_Grid_Pyramid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Pyramid_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Pyramid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "1"" of type '" "CSG_Grid_Pyramid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Pyramid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Pyramid__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  TSG_Grid_Pyramid_Generalisation arg5 ;
+  TSG_Grid_Pyramid_Grow_Type arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Grid_Pyramid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:new_CSG_Grid_Pyramid",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid_Pyramid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid_Pyramid" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid_Pyramid" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Grid_Pyramid" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_CSG_Grid_Pyramid" "', argument " "5"" of type '" "TSG_Grid_Pyramid_Generalisation""'");
+  } 
+  arg5 = static_cast< TSG_Grid_Pyramid_Generalisation >(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "new_CSG_Grid_Pyramid" "', argument " "6"" of type '" "TSG_Grid_Pyramid_Grow_Type""'");
+  } 
+  arg6 = static_cast< TSG_Grid_Pyramid_Grow_Type >(val6);
+  result = (CSG_Grid_Pyramid *)new CSG_Grid_Pyramid(arg1,arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Pyramid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Pyramid__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  TSG_Grid_Pyramid_Generalisation arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Grid_Pyramid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:new_CSG_Grid_Pyramid",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid_Pyramid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid_Pyramid" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid_Pyramid" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Grid_Pyramid" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_CSG_Grid_Pyramid" "', argument " "5"" of type '" "TSG_Grid_Pyramid_Generalisation""'");
+  } 
+  arg5 = static_cast< TSG_Grid_Pyramid_Generalisation >(val5);
+  result = (CSG_Grid_Pyramid *)new CSG_Grid_Pyramid(arg1,arg2,arg3,arg4,arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Pyramid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Pyramid__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Grid_Pyramid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_CSG_Grid_Pyramid",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid_Pyramid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid_Pyramid" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid_Pyramid" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Grid_Pyramid" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (CSG_Grid_Pyramid *)new CSG_Grid_Pyramid(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Pyramid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Pyramid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Grid_Pyramid__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Grid_Pyramid__SWIG_4(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Grid_Pyramid__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Grid_Pyramid__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_CSG_Grid_Pyramid__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_CSG_Grid_Pyramid__SWIG_7(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_new_CSG_Grid_Pyramid__SWIG_6(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_new_CSG_Grid_Pyramid__SWIG_5(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Grid_Pyramid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Grid_Pyramid()\n"
+    "    CSG_Grid_Pyramid(CSG_Grid *,double,TSG_Grid_Pyramid_Generalisation,TSG_Grid_Pyramid_Grow_Type)\n"
+    "    CSG_Grid_Pyramid(CSG_Grid *,double,TSG_Grid_Pyramid_Generalisation)\n"
+    "    CSG_Grid_Pyramid(CSG_Grid *,double)\n"
+    "    CSG_Grid_Pyramid(CSG_Grid *)\n"
+    "    CSG_Grid_Pyramid(CSG_Grid *,double,double,int,TSG_Grid_Pyramid_Generalisation,TSG_Grid_Pyramid_Grow_Type)\n"
+    "    CSG_Grid_Pyramid(CSG_Grid *,double,double,int,TSG_Grid_Pyramid_Generalisation)\n"
+    "    CSG_Grid_Pyramid(CSG_Grid *,double,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Pyramid_Create__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *arg1 = (CSG_Grid_Pyramid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  double arg3 ;
+  double arg4 ;
+  int arg5 ;
+  TSG_Grid_Pyramid_Generalisation arg6 ;
+  TSG_Grid_Pyramid_Grow_Type arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Grid_Pyramid_Create",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Pyramid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "1"" of type '" "CSG_Grid_Pyramid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Pyramid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "6"" of type '" "TSG_Grid_Pyramid_Generalisation""'");
+  } 
+  arg6 = static_cast< TSG_Grid_Pyramid_Generalisation >(val6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "7"" of type '" "TSG_Grid_Pyramid_Grow_Type""'");
+  } 
+  arg7 = static_cast< TSG_Grid_Pyramid_Grow_Type >(val7);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4,arg5,arg6,arg7);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Pyramid_Create__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *arg1 = (CSG_Grid_Pyramid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  double arg3 ;
+  double arg4 ;
+  int arg5 ;
+  TSG_Grid_Pyramid_Generalisation arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_Pyramid_Create",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Pyramid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "1"" of type '" "CSG_Grid_Pyramid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Pyramid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "6"" of type '" "TSG_Grid_Pyramid_Generalisation""'");
+  } 
+  arg6 = static_cast< TSG_Grid_Pyramid_Generalisation >(val6);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Pyramid_Create__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *arg1 = (CSG_Grid_Pyramid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  double arg3 ;
+  double arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_Pyramid_Create",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Pyramid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "1"" of type '" "CSG_Grid_Pyramid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Pyramid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Pyramid_Create" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Pyramid_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Pyramid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Pyramid_Create__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Pyramid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Pyramid_Create__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Pyramid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Pyramid_Create__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Pyramid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Grid_Pyramid_Create__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Pyramid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Grid_Pyramid_Create__SWIG_6(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Pyramid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Grid_Pyramid_Create__SWIG_5(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Pyramid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Grid_Pyramid_Create__SWIG_4(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Pyramid_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Grid_Pyramid *,CSG_Grid *,double,TSG_Grid_Pyramid_Generalisation,TSG_Grid_Pyramid_Grow_Type)\n"
+    "    Create(CSG_Grid_Pyramid *,CSG_Grid *,double,TSG_Grid_Pyramid_Generalisation)\n"
+    "    Create(CSG_Grid_Pyramid *,CSG_Grid *,double)\n"
+    "    Create(CSG_Grid_Pyramid *,CSG_Grid *)\n"
+    "    Create(CSG_Grid_Pyramid *,CSG_Grid *,double,double,int,TSG_Grid_Pyramid_Generalisation,TSG_Grid_Pyramid_Grow_Type)\n"
+    "    Create(CSG_Grid_Pyramid *,CSG_Grid *,double,double,int,TSG_Grid_Pyramid_Generalisation)\n"
+    "    Create(CSG_Grid_Pyramid *,CSG_Grid *,double,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Grid_Pyramid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *arg1 = (CSG_Grid_Pyramid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Grid_Pyramid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Pyramid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Grid_Pyramid" "', argument " "1"" of type '" "CSG_Grid_Pyramid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Pyramid * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Pyramid_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *arg1 = (CSG_Grid_Pyramid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Pyramid_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Pyramid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Pyramid_Destroy" "', argument " "1"" of type '" "CSG_Grid_Pyramid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Pyramid * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Pyramid_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *arg1 = (CSG_Grid_Pyramid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Pyramid_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Pyramid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Pyramid_Get_Count" "', argument " "1"" of type '" "CSG_Grid_Pyramid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Pyramid * >(argp1);
+  result = (int)(arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Pyramid_Get_Grid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Pyramid *arg1 = (CSG_Grid_Pyramid *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Pyramid_Get_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Pyramid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Pyramid_Get_Grid" "', argument " "1"" of type '" "CSG_Grid_Pyramid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Pyramid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Pyramid_Get_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Grid *)(arg1)->Get_Grid(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Grid_Pyramid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Grid_Pyramid, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN int Swig_var_gSG_Grid_File_Key_Names_set(PyObject *) {
+  SWIG_Error(SWIG_AttributeError,"Variable gSG_Grid_File_Key_Names is read-only.");
+  return 1;
+}
+
+
+SWIGINTERN PyObject *Swig_var_gSG_Grid_File_Key_Names_get(void) {
+  PyObject *pyobj = 0;
+  
+  pyobj = SWIG_NewPointerObj(SWIG_as_voidptr(gSG_Grid_File_Key_Names), SWIGTYPE_p_a_32__wchar_t,  0 );
+  return pyobj;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_System__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Grid_System")) SWIG_fail;
+  result = (CSG_Grid_System *)new CSG_Grid_System();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_System, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_System__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Grid_System",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid_System" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Grid_System" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (CSG_Grid_System *)new CSG_Grid_System((CSG_Grid_System const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_System, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_System__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  CSG_Rect *arg2 = 0 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Grid_System",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Grid_System" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Grid_System" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Grid_System" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rect * >(argp2);
+  result = (CSG_Grid_System *)new CSG_Grid_System(arg1,(CSG_Rect const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_System, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_System__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double arg5 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:new_CSG_Grid_System",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Grid_System" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid_System" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid_System" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Grid_System" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_CSG_Grid_System" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (CSG_Grid_System *)new CSG_Grid_System(arg1,arg2,arg3,arg4,arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_System, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_System__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  int arg5 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:new_CSG_Grid_System",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Grid_System" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid_System" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid_System" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Grid_System" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_CSG_Grid_System" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (CSG_Grid_System *)new CSG_Grid_System(arg1,arg2,arg3,arg4,arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_System, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_System(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Grid_System__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Grid_System__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_new_CSG_Grid_System__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_new_CSG_Grid_System__SWIG_4(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_new_CSG_Grid_System__SWIG_3(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Grid_System'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Grid_System()\n"
+    "    CSG_Grid_System(CSG_Grid_System const &)\n"
+    "    CSG_Grid_System(double,CSG_Rect const &)\n"
+    "    CSG_Grid_System(double,double,double,double,double)\n"
+    "    CSG_Grid_System(double,double,double,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Grid_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Grid_System",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Grid_System" "', argument " "1"" of type '" "CSG_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_is_Valid" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (bool)((CSG_Grid_System const *)arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_Name__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_Name" "', argument " "1"" of type '" "CSG_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_Name" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (wchar_t *)(arg1)->Get_Name(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_Name__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_Name" "', argument " "1"" of type '" "CSG_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Name();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_Name(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_System_Get_Name__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_Name__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_Name'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Name(CSG_Grid_System *,bool)\n"
+    "    Get_Name(CSG_Grid_System *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_Cellsize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_Cellsize",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_Cellsize" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_Cellsize();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_Cellarea(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_Cellarea",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_Cellarea" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_Cellarea();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_NX(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_NX",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_NX" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_NX();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_NY(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_NY",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_NY" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_NY();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_NCells(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_NCells",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_NCells" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (long)((CSG_Grid_System const *)arg1)->Get_NCells();
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_Extent__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_Extent",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_Extent" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_Extent" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (CSG_Rect *) &((CSG_Grid_System const *)arg1)->Get_Extent(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_Extent__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_Extent" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (CSG_Rect *) &((CSG_Grid_System const *)arg1)->Get_Extent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_Extent(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_System_Get_Extent__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_Extent__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_Extent'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Extent(CSG_Grid_System const *,bool)\n"
+    "    Get_Extent(CSG_Grid_System const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_XMin__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_XMin",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_XMin" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_XMin" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_XMin(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_XMin__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_XMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_XMin" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_XMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_XMin(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_System_Get_XMin__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_XMin__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_XMin'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_XMin(CSG_Grid_System const *,bool)\n"
+    "    Get_XMin(CSG_Grid_System const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_XMax__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_XMax",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_XMax" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_XMax" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_XMax(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_XMax__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_XMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_XMax" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_XMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_XMax(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_System_Get_XMax__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_XMax__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_XMax'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_XMax(CSG_Grid_System const *,bool)\n"
+    "    Get_XMax(CSG_Grid_System const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_XRange__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_XRange",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_XRange" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_XRange" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_XRange(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_XRange__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_XRange",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_XRange" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_XRange();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_XRange(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_System_Get_XRange__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_XRange__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_XRange'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_XRange(CSG_Grid_System const *,bool)\n"
+    "    Get_XRange(CSG_Grid_System const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_YMin__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_YMin",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_YMin" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_YMin" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_YMin(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_YMin__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_YMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_YMin" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_YMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_YMin(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_System_Get_YMin__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_YMin__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_YMin'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_YMin(CSG_Grid_System const *,bool)\n"
+    "    Get_YMin(CSG_Grid_System const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_YMax__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_YMax",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_YMax" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_YMax" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_YMax(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_YMax__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_YMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_YMax" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_YMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_YMax(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_System_Get_YMax__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_YMax__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_YMax'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_YMax(CSG_Grid_System const *,bool)\n"
+    "    Get_YMax(CSG_Grid_System const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_YRange__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_YRange",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_YRange" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_YRange" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_YRange(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_YRange__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_System_Get_YRange",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_YRange" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_YRange();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_YRange(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_System_Get_YRange__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_YRange__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_YRange'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_YRange(CSG_Grid_System const *,bool)\n"
+    "    Get_YRange(CSG_Grid_System const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  CSG_Grid_System *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System___eq__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System___eq__" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_System___eq__" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System___eq__" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid_System * >(argp2);
+  result = (bool)((CSG_Grid_System const *)arg1)->operator ==((CSG_Grid_System const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  CSG_Grid_System *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Assign" "', argument " "1"" of type '" "CSG_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_System_Assign" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_Assign" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid_System * >(argp2);
+  result = (bool)(arg1)->Assign((CSG_Grid_System const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  double arg2 ;
+  CSG_Rect *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_Assign",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Assign" "', argument " "1"" of type '" "CSG_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Assign" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_System_Assign" "', argument " "3"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_Assign" "', argument " "3"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Rect * >(argp3);
+  result = (bool)(arg1)->Assign(arg2,(CSG_Rect const &)*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Assign__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double arg5 ;
+  double arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_System_Assign",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Assign" "', argument " "1"" of type '" "CSG_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Assign" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Assign" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_System_Assign" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_System_Assign" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_System_Assign" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  result = (bool)(arg1)->Assign(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Assign__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  int arg5 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_System_Assign",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Assign" "', argument " "1"" of type '" "CSG_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Assign" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Assign" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_System_Assign" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_System_Assign" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_System_Assign" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (bool)(arg1)->Assign(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_System_Assign__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_CSG_Rect, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Grid_System_Assign__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Grid_System_Assign__SWIG_3(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Grid_System_Assign__SWIG_2(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_Grid_System *,CSG_Grid_System const &)\n"
+    "    Assign(CSG_Grid_System *,double,CSG_Rect const &)\n"
+    "    Assign(CSG_Grid_System *,double,double,double,double,double)\n"
+    "    Assign(CSG_Grid_System *,double,double,double,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_is_Equal__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  CSG_Grid_System *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_is_Equal",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_is_Equal" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_System_is_Equal" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_is_Equal" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid_System * >(argp2);
+  result = (bool)((CSG_Grid_System const *)arg1)->is_Equal((CSG_Grid_System const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_is_Equal__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  double arg2 ;
+  TSG_Rect *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_is_Equal",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_is_Equal" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_is_Equal" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_System_is_Equal" "', argument " "3"" of type '" "TSG_Rect const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_is_Equal" "', argument " "3"" of type '" "TSG_Rect const &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Rect * >(argp3);
+  result = (bool)((CSG_Grid_System const *)arg1)->is_Equal(arg2,(TSG_Rect const &)*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_is_Equal(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_System_is_Equal__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_SSG_Rect, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Grid_System_is_Equal__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_is_Equal'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_Equal(CSG_Grid_System const *,CSG_Grid_System const &)\n"
+    "    is_Equal(CSG_Grid_System const *,double,TSG_Rect const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Fit_xto_Grid_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Fit_xto_Grid_System",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Fit_xto_Grid_System" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Fit_xto_Grid_System" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Fit_xto_Grid_System(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Fit_yto_Grid_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Fit_yto_Grid_System",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Fit_yto_Grid_System" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Fit_yto_Grid_System" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Fit_yto_Grid_System(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Fit_to_Grid_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Fit_to_Grid_System",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Fit_to_Grid_System" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_System_Fit_to_Grid_System" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_Fit_to_Grid_System" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = ((CSG_Grid_System const *)arg1)->Fit_to_Grid_System(arg2);
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_xGrid_to_World(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_xGrid_to_World",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_xGrid_to_World" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_xGrid_to_World" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_xGrid_to_World(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_yGrid_to_World(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_yGrid_to_World",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_yGrid_to_World" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_yGrid_to_World" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_yGrid_to_World(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_Grid_to_World(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_Get_Grid_to_World",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_Grid_to_World" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_Grid_to_World" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Get_Grid_to_World" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = ((CSG_Grid_System const *)arg1)->Get_Grid_to_World(arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_xWorld_to_Grid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_xWorld_to_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_xWorld_to_Grid" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_xWorld_to_Grid" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_xWorld_to_Grid(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_yWorld_to_Grid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_yWorld_to_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_yWorld_to_Grid" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_yWorld_to_Grid" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_yWorld_to_Grid(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_World_to_Grid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int *arg2 = 0 ;
+  int *arg3 = 0 ;
+  double arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_System_Get_World_to_Grid",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "2"" of type '" "int &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "2"" of type '" "int &""'"); 
+  }
+  arg2 = reinterpret_cast< int * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (bool)((CSG_Grid_System const *)arg1)->Get_World_to_Grid(*arg2,*arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_World_to_Grid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int *arg2 = 0 ;
+  int *arg3 = 0 ;
+  TSG_Point arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_System_Get_World_to_Grid",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "2"" of type '" "int &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "2"" of type '" "int &""'"); 
+  }
+  arg2 = reinterpret_cast< int * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  {
+    res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res4)) {
+      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "4"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp4) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_Get_World_to_Grid" "', argument " "4"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp4);
+      arg4 = *temp;
+      if (SWIG_IsNewObj(res4)) delete temp;
+    }
+  }
+  result = (bool)((CSG_Grid_System const *)arg1)->Get_World_to_Grid(*arg2,*arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_World_to_Grid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_int, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_SSG_Point, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Grid_System_Get_World_to_Grid__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_int, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Grid_System_Get_World_to_Grid__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_World_to_Grid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_World_to_Grid(CSG_Grid_System const *,int &,int &,double,double)\n"
+    "    Get_World_to_Grid(CSG_Grid_System const *,int &,int &,TSG_Point)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_Neighbor_Pos(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  int arg4 ;
+  int *arg5 = 0 ;
+  int *arg6 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_System_Get_Neighbor_Pos",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_Neighbor_Pos" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_Neighbor_Pos" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Get_Neighbor_Pos" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_System_Get_Neighbor_Pos" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Grid_System_Get_Neighbor_Pos" "', argument " "5"" of type '" "int &""'"); 
+  }
+  if (!argp5) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_Get_Neighbor_Pos" "', argument " "5"" of type '" "int &""'"); 
+  }
+  arg5 = reinterpret_cast< int * >(argp5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Grid_System_Get_Neighbor_Pos" "', argument " "6"" of type '" "int &""'"); 
+  }
+  if (!argp6) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_System_Get_Neighbor_Pos" "', argument " "6"" of type '" "int &""'"); 
+  }
+  arg6 = reinterpret_cast< int * >(argp6);
+  result = (bool)((CSG_Grid_System const *)arg1)->Get_Neighbor_Pos(arg2,arg3,arg4,*arg5,*arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_xTo__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_Get_xTo",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_xTo" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_xTo" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Get_xTo" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_xTo(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_xTo__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_xTo",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_xTo" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_xTo" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_xTo(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_xTo(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_xTo__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_System_Get_xTo__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_xTo'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_xTo(CSG_Grid_System const *,int,int)\n"
+    "    Get_xTo(CSG_Grid_System const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_yTo__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_Get_yTo",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_yTo" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_yTo" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Get_yTo" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_yTo(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_yTo__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_yTo",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_yTo" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_yTo" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_yTo(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_yTo(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_yTo__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_System_Get_yTo__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_yTo'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_yTo(CSG_Grid_System const *,int,int)\n"
+    "    Get_yTo(CSG_Grid_System const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_xFrom__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_Get_xFrom",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_xFrom" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_xFrom" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Get_xFrom" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_xFrom(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_xFrom__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_xFrom",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_xFrom" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_xFrom" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_xFrom(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_xFrom(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_xFrom__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_System_Get_xFrom__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_xFrom'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_xFrom(CSG_Grid_System const *,int,int)\n"
+    "    Get_xFrom(CSG_Grid_System const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_yFrom__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_Get_yFrom",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_yFrom" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_yFrom" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Get_yFrom" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_yFrom(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_yFrom__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_yFrom",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_yFrom" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_yFrom" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_yFrom(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_yFrom(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_System_Get_yFrom__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_System_Get_yFrom__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_Get_yFrom'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_yFrom(CSG_Grid_System const *,int,int)\n"
+    "    Get_yFrom(CSG_Grid_System const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_xToSave(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_Get_xToSave",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_xToSave" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_xToSave" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Get_xToSave" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_xToSave(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_yToSave(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_Get_yToSave",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_yToSave" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_yToSave" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Get_yToSave" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_yToSave(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_xFromSave(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_Get_xFromSave",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_xFromSave" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_xFromSave" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Get_xFromSave" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_xFromSave(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_yFromSave(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_Get_yFromSave",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_yFromSave" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_yFromSave" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_Get_yFromSave" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid_System const *)arg1)->Get_yFromSave(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_is_InGrid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_System_is_InGrid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_is_InGrid" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_is_InGrid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_is_InGrid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)((CSG_Grid_System const *)arg1)->is_InGrid(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_is_InGrid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_System_is_InGrid",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_is_InGrid" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_is_InGrid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_System_is_InGrid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_System_is_InGrid" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)((CSG_Grid_System const *)arg1)->is_InGrid(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_is_InGrid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_System_is_InGrid__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_System_is_InGrid__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_System_is_InGrid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_InGrid(CSG_Grid_System const *,int,int)\n"
+    "    is_InGrid(CSG_Grid_System const *,int,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_Length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_Length",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_Length" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_Length" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_Length(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_System_Get_UnitLength(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = (CSG_Grid_System *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_System_Get_UnitLength",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_System_Get_UnitLength" "', argument " "1"" of type '" "CSG_Grid_System const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_System_Get_UnitLength" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Grid_System const *)arg1)->Get_UnitLength(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Grid_System_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Grid_System, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Grid")) SWIG_fail;
+  result = (CSG_Grid *)new CSG_Grid();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (CSG_Grid *)new CSG_Grid((CSG_Grid const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (bool)(arg1)->Create((CSG_Grid const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  TSG_Data_Type arg2 ;
+  TSG_Grid_Memory_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Grid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid" "', argument " "3"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg3 = static_cast< TSG_Grid_Memory_Type >(val3);
+  result = (CSG_Grid *)new CSG_Grid((CSG_String const &)*arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  TSG_Data_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  result = (CSG_Grid *)new CSG_Grid((CSG_String const &)*arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_Grid *)new CSG_Grid((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_String *arg2 = 0 ;
+  TSG_Data_Type arg3 ;
+  TSG_Grid_Memory_Type arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Create" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Create" "', argument " "4"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg4 = static_cast< TSG_Grid_Memory_Type >(val4);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_String *arg2 = 0 ;
+  TSG_Data_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Create" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Data_Type arg2 ;
+  TSG_Grid_Memory_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Grid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid" "', argument " "3"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg3 = static_cast< TSG_Grid_Memory_Type >(val3);
+  result = (CSG_Grid *)new CSG_Grid(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Data_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  result = (CSG_Grid *)new CSG_Grid(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (CSG_Grid *)new CSG_Grid(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  TSG_Data_Type arg3 ;
+  TSG_Grid_Memory_Type arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Create" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Create" "', argument " "4"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg4 = static_cast< TSG_Grid_Memory_Type >(val4);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  TSG_Data_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Create" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  result = (bool)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = 0 ;
+  TSG_Data_Type arg2 ;
+  TSG_Grid_Memory_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Grid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid" "', argument " "3"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg3 = static_cast< TSG_Grid_Memory_Type >(val3);
+  result = (CSG_Grid *)new CSG_Grid((CSG_Grid_System const &)*arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_9(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = 0 ;
+  TSG_Data_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  result = (CSG_Grid *)new CSG_Grid((CSG_Grid_System const &)*arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_10(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (CSG_Grid *)new CSG_Grid((CSG_Grid_System const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid_System *arg2 = 0 ;
+  TSG_Data_Type arg3 ;
+  TSG_Grid_Memory_Type arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid_System * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Create" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Create" "', argument " "4"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg4 = static_cast< TSG_Grid_Memory_Type >(val4);
+  result = (bool)(arg1)->Create((CSG_Grid_System const &)*arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid_System *arg2 = 0 ;
+  TSG_Data_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid_System * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Create" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  result = (bool)(arg1)->Create((CSG_Grid_System const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_9(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid_System *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid_System * >(argp2);
+  result = (bool)(arg1)->Create((CSG_Grid_System const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_11(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  double arg5 ;
+  double arg6 ;
+  TSG_Grid_Memory_Type arg7 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:new_CSG_Grid",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Grid" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_CSG_Grid" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "new_CSG_Grid" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "new_CSG_Grid" "', argument " "7"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg7 = static_cast< TSG_Grid_Memory_Type >(val7);
+  result = (CSG_Grid *)new CSG_Grid(arg1,arg2,arg3,arg4,arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_12(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  double arg5 ;
+  double arg6 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:new_CSG_Grid",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Grid" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_CSG_Grid" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "new_CSG_Grid" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  result = (CSG_Grid *)new CSG_Grid(arg1,arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_13(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  double arg5 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:new_CSG_Grid",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Grid" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_CSG_Grid" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (CSG_Grid *)new CSG_Grid(arg1,arg2,arg3,arg4,arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_14(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_CSG_Grid",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Grid" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (CSG_Grid *)new CSG_Grid(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid__SWIG_15(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int arg2 ;
+  int arg3 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Grid",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Grid" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CSG_Grid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (CSG_Grid *)new CSG_Grid(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Grid__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Grid__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Grid__SWIG_4(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Grid__SWIG_7(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Grid__SWIG_10(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Grid__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Grid__SWIG_9(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_Grid__SWIG_6(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Grid__SWIG_8(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Grid__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Grid__SWIG_5(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_CSG_Grid__SWIG_15(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_CSG_Grid__SWIG_14(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_new_CSG_Grid__SWIG_13(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_new_CSG_Grid__SWIG_12(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_new_CSG_Grid__SWIG_11(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Grid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Grid()\n"
+    "    CSG_Grid(CSG_Grid const &)\n"
+    "    CSG_Grid(CSG_String const &,TSG_Data_Type,TSG_Grid_Memory_Type)\n"
+    "    CSG_Grid(CSG_String const &,TSG_Data_Type)\n"
+    "    CSG_Grid(CSG_String const &)\n"
+    "    CSG_Grid(CSG_Grid *,TSG_Data_Type,TSG_Grid_Memory_Type)\n"
+    "    CSG_Grid(CSG_Grid *,TSG_Data_Type)\n"
+    "    CSG_Grid(CSG_Grid *)\n"
+    "    CSG_Grid(CSG_Grid_System const &,TSG_Data_Type,TSG_Grid_Memory_Type)\n"
+    "    CSG_Grid(CSG_Grid_System const &,TSG_Data_Type)\n"
+    "    CSG_Grid(CSG_Grid_System const &)\n"
+    "    CSG_Grid(TSG_Data_Type,int,int,double,double,double,TSG_Grid_Memory_Type)\n"
+    "    CSG_Grid(TSG_Data_Type,int,int,double,double,double)\n"
+    "    CSG_Grid(TSG_Data_Type,int,int,double,double)\n"
+    "    CSG_Grid(TSG_Data_Type,int,int,double)\n"
+    "    CSG_Grid(TSG_Data_Type,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_10(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Data_Type arg2 ;
+  int arg3 ;
+  int arg4 ;
+  double arg5 ;
+  double arg6 ;
+  double arg7 ;
+  TSG_Grid_Memory_Type arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  int val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Grid_Create",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Create" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Create" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Grid_Create" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_int(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Grid_Create" "', argument " "8"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg8 = static_cast< TSG_Grid_Memory_Type >(val8);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4,arg5,arg6,arg7,arg8);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_11(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Data_Type arg2 ;
+  int arg3 ;
+  int arg4 ;
+  double arg5 ;
+  double arg6 ;
+  double arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Grid_Create",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Create" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Create" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Grid_Create" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4,arg5,arg6,arg7);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_12(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Data_Type arg2 ;
+  int arg3 ;
+  int arg4 ;
+  double arg5 ;
+  double arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_Create",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Create" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Create" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_13(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Data_Type arg2 ;
+  int arg3 ;
+  int arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_Create",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Create" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create__SWIG_14(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Data_Type arg2 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Create" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Create" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Create" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Create(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[9];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 8); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Create__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Create__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Create__SWIG_6(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Create__SWIG_9(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Create__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Create__SWIG_8(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Create__SWIG_5(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Create__SWIG_7(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Create__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Create__SWIG_4(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Create__SWIG_14(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Grid_Create__SWIG_13(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Grid_Create__SWIG_12(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Grid_Create__SWIG_11(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_int(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Grid_Create__SWIG_10(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Grid *,CSG_Grid const &)\n"
+    "    Create(CSG_Grid *,CSG_String const &,TSG_Data_Type,TSG_Grid_Memory_Type)\n"
+    "    Create(CSG_Grid *,CSG_String const &,TSG_Data_Type)\n"
+    "    Create(CSG_Grid *,CSG_String const &)\n"
+    "    Create(CSG_Grid *,CSG_Grid *,TSG_Data_Type,TSG_Grid_Memory_Type)\n"
+    "    Create(CSG_Grid *,CSG_Grid *,TSG_Data_Type)\n"
+    "    Create(CSG_Grid *,CSG_Grid *)\n"
+    "    Create(CSG_Grid *,CSG_Grid_System const &,TSG_Data_Type,TSG_Grid_Memory_Type)\n"
+    "    Create(CSG_Grid *,CSG_Grid_System const &,TSG_Data_Type)\n"
+    "    Create(CSG_Grid *,CSG_Grid_System const &)\n"
+    "    Create(CSG_Grid *,TSG_Data_Type,int,int,double,double,double,TSG_Grid_Memory_Type)\n"
+    "    Create(CSG_Grid *,TSG_Data_Type,int,int,double,double,double)\n"
+    "    Create(CSG_Grid *,TSG_Data_Type,int,int,double,double)\n"
+    "    Create(CSG_Grid *,TSG_Data_Type,int,int,double)\n"
+    "    Create(CSG_Grid *,TSG_Data_Type,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Grid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Grid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Destroy" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ObjectType(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Data_Object_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_ObjectType",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_ObjectType" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (TSG_Data_Object_Type)((CSG_Grid const *)arg1)->Get_ObjectType();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Data_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Type" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (TSG_Data_Type)((CSG_Grid const *)arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_nValueBytes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_nValueBytes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_nValueBytes" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (int)((CSG_Grid const *)arg1)->Get_nValueBytes();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_nLineBytes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_nLineBytes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_nLineBytes" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (int)((CSG_Grid const *)arg1)->Get_nLineBytes();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Description(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Set_Description",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Description" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Set_Description" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->Set_Description((wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Description(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_Description",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Description" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (wchar_t *)((CSG_Grid const *)arg1)->Get_Description();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Unit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Set_Unit",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Unit" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Set_Unit" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->Set_Unit((wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Unit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_Unit",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Unit" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (wchar_t *)((CSG_Grid const *)arg1)->Get_Unit();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_System",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_System" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (CSG_Grid_System *) &((CSG_Grid const *)arg1)->Get_System();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_NX(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_NX",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_NX" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (int)((CSG_Grid const *)arg1)->Get_NX();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_NY(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_NY",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_NY" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (int)((CSG_Grid const *)arg1)->Get_NY();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_NCells(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_NCells",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_NCells" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (long)((CSG_Grid const *)arg1)->Get_NCells();
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Cellsize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_Cellsize",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Cellsize" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)((CSG_Grid const *)arg1)->Get_Cellsize();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Cellarea(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_Cellarea",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Cellarea" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)((CSG_Grid const *)arg1)->Get_Cellarea();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Extent__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_Extent",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Extent" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Extent" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (CSG_Rect *) &((CSG_Grid const *)arg1)->Get_Extent(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Extent__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Extent" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (CSG_Rect *) &((CSG_Grid const *)arg1)->Get_Extent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Extent(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_Extent__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_Extent__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_Extent'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Extent(CSG_Grid const *,bool)\n"
+    "    Get_Extent(CSG_Grid const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_XMin__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_XMin",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_XMin" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_XMin" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid const *)arg1)->Get_XMin(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_XMin__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_XMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_XMin" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)((CSG_Grid const *)arg1)->Get_XMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_XMin(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_XMin__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_XMin__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_XMin'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_XMin(CSG_Grid const *,bool)\n"
+    "    Get_XMin(CSG_Grid const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_XMax__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_XMax",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_XMax" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_XMax" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid const *)arg1)->Get_XMax(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_XMax__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_XMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_XMax" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)((CSG_Grid const *)arg1)->Get_XMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_XMax(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_XMax__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_XMax__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_XMax'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_XMax(CSG_Grid const *,bool)\n"
+    "    Get_XMax(CSG_Grid const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_XRange__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_XRange",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_XRange" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_XRange" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid const *)arg1)->Get_XRange(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_XRange__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_XRange",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_XRange" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)((CSG_Grid const *)arg1)->Get_XRange();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_XRange(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_XRange__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_XRange__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_XRange'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_XRange(CSG_Grid const *,bool)\n"
+    "    Get_XRange(CSG_Grid const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_YMin__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_YMin",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_YMin" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_YMin" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid const *)arg1)->Get_YMin(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_YMin__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_YMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_YMin" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)((CSG_Grid const *)arg1)->Get_YMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_YMin(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_YMin__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_YMin__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_YMin'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_YMin(CSG_Grid const *,bool)\n"
+    "    Get_YMin(CSG_Grid const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_YMax__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_YMax",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_YMax" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_YMax" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid const *)arg1)->Get_YMax(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_YMax__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_YMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_YMax" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)((CSG_Grid const *)arg1)->Get_YMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_YMax(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_YMax__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_YMax__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_YMax'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_YMax(CSG_Grid const *,bool)\n"
+    "    Get_YMax(CSG_Grid const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_YRange__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_YRange",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_YRange" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_YRange" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)((CSG_Grid const *)arg1)->Get_YRange(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_YRange__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_YRange",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_YRange" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)((CSG_Grid const *)arg1)->Get_YRange();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_YRange(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_YRange__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_YRange__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_YRange'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_YRange(CSG_Grid const *,bool)\n"
+    "    Get_YRange(CSG_Grid const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ZMin__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_ZMin",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_ZMin" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_ZMin" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)(arg1)->Get_ZMin(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ZMin__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_ZMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_ZMin" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)(arg1)->Get_ZMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ZMin(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_ZMin__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_ZMin__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_ZMin'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_ZMin(CSG_Grid *,bool)\n"
+    "    Get_ZMin(CSG_Grid *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ZMax__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_ZMax",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_ZMax" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_ZMax" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)(arg1)->Get_ZMax(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ZMax__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_ZMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_ZMax" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)(arg1)->Get_ZMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ZMax(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_ZMax__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_ZMax__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_ZMax'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_ZMax(CSG_Grid *,bool)\n"
+    "    Get_ZMax(CSG_Grid *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ZRange__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_ZRange",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_ZRange" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_ZRange" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)(arg1)->Get_ZRange(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ZRange__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_ZRange",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_ZRange" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)(arg1)->Get_ZRange();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ZRange(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_ZRange__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_ZRange__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_ZRange'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_ZRange(CSG_Grid *,bool)\n"
+    "    Get_ZRange(CSG_Grid *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_ZFactor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Set_ZFactor",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_ZFactor" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_ZFactor" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Set_ZFactor(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ZFactor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_ZFactor",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_ZFactor" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)((CSG_Grid const *)arg1)->Get_ZFactor();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ArithMean__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_ArithMean",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_ArithMean" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_ArithMean" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)(arg1)->Get_ArithMean(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ArithMean__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_ArithMean",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_ArithMean" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)(arg1)->Get_ArithMean();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_ArithMean(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_ArithMean__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_ArithMean__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_ArithMean'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_ArithMean(CSG_Grid *,bool)\n"
+    "    Get_ArithMean(CSG_Grid *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_StdDev__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_StdDev",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_StdDev" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_StdDev" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (double)(arg1)->Get_StdDev(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_StdDev__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_StdDev",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_StdDev" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)(arg1)->Get_StdDev();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_StdDev(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Get_StdDev__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_StdDev__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_StdDev'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_StdDev(CSG_Grid *,bool)\n"
+    "    Get_StdDev(CSG_Grid *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Variance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_Variance",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Variance" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)(arg1)->Get_Variance();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_NoData_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_NoData_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_NoData_Count" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (int)(arg1)->Get_NoData_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Save__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Save",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Save" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Save" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Save__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Save",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Save" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Save__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  int arg4 ;
+  int arg5 ;
+  int arg6 ;
+  int arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Grid_Save",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Save" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Save" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Save" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Save" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Save" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Grid_Save" "', argument " "7"" of type '" "int""'");
+  } 
+  arg7 = static_cast< int >(val7);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2,arg3,arg4,arg5,arg6,arg7);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Save(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Save__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Save__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Grid_Save__SWIG_2(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Save'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Save(CSG_Grid *,CSG_String const &,int)\n"
+    "    Save(CSG_Grid *,CSG_String const &)\n"
+    "    Save(CSG_Grid *,CSG_String const &,int,int,int,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_Valid" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (bool)((CSG_Grid const *)arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_Intersecting__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Intersection result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_is_Intersecting",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_Intersecting" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_is_Intersecting" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_is_Intersecting" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rect * >(argp2);
+  result = (TSG_Intersection)((CSG_Grid const *)arg1)->is_Intersecting((CSG_Rect const &)*arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_Intersecting__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Intersection result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_is_Intersecting",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_Intersecting" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_is_Intersecting" "', argument " "2"" of type '" "TSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_is_Intersecting" "', argument " "2"" of type '" "TSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Rect * >(argp2);
+  result = (TSG_Intersection)((CSG_Grid const *)arg1)->is_Intersecting((TSG_Rect const &)*arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_Intersecting__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  TSG_Intersection result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_is_Intersecting",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_Intersecting" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_is_Intersecting" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_is_Intersecting" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_is_Intersecting" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_is_Intersecting" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (TSG_Intersection)((CSG_Grid const *)arg1)->is_Intersecting(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_Intersecting(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_is_Intersecting__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_is_Intersecting__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Grid_is_Intersecting__SWIG_2(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_is_Intersecting'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_Intersecting(CSG_Grid const *,CSG_Rect const &)\n"
+    "    is_Intersecting(CSG_Grid const *,TSG_Rect const &)\n"
+    "    is_Intersecting(CSG_Grid const *,double,double,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_Compatible__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_is_Compatible",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_Compatible" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_is_Compatible" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (bool)((CSG_Grid const *)arg1)->is_Compatible(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_Compatible__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid_System *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_is_Compatible",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_Compatible" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_is_Compatible" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_is_Compatible" "', argument " "2"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid_System * >(argp2);
+  result = (bool)((CSG_Grid const *)arg1)->is_Compatible((CSG_Grid_System const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_Compatible__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  double arg5 ;
+  double arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_is_Compatible",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_Compatible" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_is_Compatible" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_is_Compatible" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_is_Compatible" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_is_Compatible" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_is_Compatible" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  result = (bool)((CSG_Grid const *)arg1)->is_Compatible(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_Compatible(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_is_Compatible__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_is_Compatible__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Grid_is_Compatible__SWIG_2(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_is_Compatible'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_Compatible(CSG_Grid const *,CSG_Grid *)\n"
+    "    is_Compatible(CSG_Grid const *,CSG_Grid_System const &)\n"
+    "    is_Compatible(CSG_Grid const *,int,int,double,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_InGrid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_is_InGrid",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_InGrid" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_is_InGrid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_is_InGrid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_is_InGrid" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)((CSG_Grid const *)arg1)->is_InGrid(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_InGrid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_is_InGrid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_InGrid" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_is_InGrid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_is_InGrid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)((CSG_Grid const *)arg1)->is_InGrid(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_InGrid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_is_InGrid__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_is_InGrid__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_is_InGrid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_InGrid(CSG_Grid const *,int,int,bool)\n"
+    "    is_InGrid(CSG_Grid const *,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_InGrid_byPos__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_is_InGrid_byPos",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_InGrid_byPos" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_is_InGrid_byPos" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_is_InGrid_byPos" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)((CSG_Grid const *)arg1)->is_InGrid_byPos(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_InGrid_byPos__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_is_InGrid_byPos",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_InGrid_byPos" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_is_InGrid_byPos" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_is_InGrid_byPos" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (bool)((CSG_Grid const *)arg1)->is_InGrid_byPos(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_InGrid_byPos(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_is_InGrid_byPos__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_is_InGrid_byPos__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_is_InGrid_byPos'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_InGrid_byPos(CSG_Grid const *,double,double)\n"
+    "    is_InGrid_byPos(CSG_Grid const *,TSG_Point)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Buffer_Size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_Buffer_Size",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Buffer_Size" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (int)(arg1)->Get_Buffer_Size();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Buffer_Size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Set_Buffer_Size",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Buffer_Size" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_Buffer_Size" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Buffer_Size(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Cache(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Set_Cache",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Cache" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_Cache" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (bool)(arg1)->Set_Cache(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_Cached(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_is_Cached",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_Cached" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (bool)(arg1)->is_Cached();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Compression(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Set_Compression",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Compression" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_Compression" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (bool)(arg1)->Set_Compression(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_Compressed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_is_Compressed",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_Compressed" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (bool)(arg1)->is_Compressed();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Compression_Ratio(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Get_Compression_Ratio",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Compression_Ratio" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (double)(arg1)->Get_Compression_Ratio();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Assign_NoData(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Assign_NoData",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Assign_NoData" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  (arg1)->Assign_NoData();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Assign" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Assign" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Assign",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Assign" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (bool)(arg1)->Assign();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Assign__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Data_Object *arg2 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Assign" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Assign" "', argument " "2"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Data_Object * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Assign__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = (CSG_Grid *) 0 ;
+  TSG_Grid_Interpolation arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Assign",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Assign" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Assign" "', argument " "2"" of type '" "CSG_Grid *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Assign" "', argument " "3"" of type '" "TSG_Grid_Interpolation""'");
+  } 
+  arg3 = static_cast< TSG_Grid_Interpolation >(val3);
+  result = (bool)(arg1)->Assign(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Assign__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Data_Object, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Assign__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Assign__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Assign__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_Grid *,double)\n"
+    "    Assign(CSG_Grid *)\n"
+    "    Assign(CSG_Grid *,CSG_Data_Object *)\n"
+    "    Assign(CSG_Grid *,CSG_Grid *,TSG_Grid_Interpolation)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Flip(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Flip",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Flip" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  (arg1)->Flip();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Mirror(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Mirror",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Mirror" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  (arg1)->Mirror();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Invert(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Invert",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Invert" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  (arg1)->Invert();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Normalise(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Normalise",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Normalise" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  (arg1)->Normalise();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_DeNormalise(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_DeNormalise",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_DeNormalise" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_DeNormalise" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_DeNormalise" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->DeNormalise(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Gradient_NeighborDir__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Get_Gradient_NeighborDir",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Gradient_NeighborDir" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Gradient_NeighborDir" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Gradient_NeighborDir" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Gradient_NeighborDir" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (int)((CSG_Grid const *)arg1)->Get_Gradient_NeighborDir(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Gradient_NeighborDir__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Get_Gradient_NeighborDir",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Gradient_NeighborDir" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Gradient_NeighborDir" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Gradient_NeighborDir" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid const *)arg1)->Get_Gradient_NeighborDir(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Gradient_NeighborDir(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Get_Gradient_NeighborDir__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Get_Gradient_NeighborDir__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_Gradient_NeighborDir'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Gradient_NeighborDir(CSG_Grid const *,int,int,bool)\n"
+    "    Get_Gradient_NeighborDir(CSG_Grid const *,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Gradient(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double *arg4 = 0 ;
+  double *arg5 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_Get_Gradient",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Gradient" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Gradient" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Gradient" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Get_Gradient" "', argument " "4"" of type '" "double &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Gradient" "', argument " "4"" of type '" "double &""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Grid_Get_Gradient" "', argument " "5"" of type '" "double &""'"); 
+  }
+  if (!argp5) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Gradient" "', argument " "5"" of type '" "double &""'"); 
+  }
+  arg5 = reinterpret_cast< double * >(argp5);
+  result = (bool)((CSG_Grid const *)arg1)->Get_Gradient(arg2,arg3,*arg4,*arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Modified__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Set_Modified",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Modified" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_Modified" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Modified(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Modified__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Set_Modified",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Modified" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  (arg1)->Set_Modified();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Modified(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Set_Modified__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Set_Modified__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Set_Modified'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Modified(CSG_Grid *,bool)\n"
+    "    Set_Modified(CSG_Grid *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Index__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Set_Index",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Index" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_Index" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (bool)(arg1)->Set_Index(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Index__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Set_Index",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Index" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (bool)(arg1)->Set_Index();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Index(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Grid_Set_Index__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Set_Index__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Set_Index'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Index(CSG_Grid *,bool)\n"
+    "    Set_Index(CSG_Grid *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Sorted__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  bool arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Get_Sorted",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Sorted" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Sorted" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Sorted" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (long)(arg1)->Get_Sorted(arg2,arg3,arg4);
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Sorted__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Get_Sorted",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Sorted" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Sorted" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (long)(arg1)->Get_Sorted(arg2,arg3);
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Sorted__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_Sorted",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Sorted" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Sorted" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (long)(arg1)->Get_Sorted(arg2);
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Sorted__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  long *arg3 = 0 ;
+  bool arg4 ;
+  bool arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_Get_Sorted",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Sorted" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Sorted" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_long,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "long &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "long &""'"); 
+  }
+  arg3 = reinterpret_cast< long * >(argp3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Sorted" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Sorted" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  result = (bool)(arg1)->Get_Sorted(arg2,*arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Sorted__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  long *arg3 = 0 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Get_Sorted",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Sorted" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Sorted" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_long,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "long &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "long &""'"); 
+  }
+  arg3 = reinterpret_cast< long * >(argp3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Sorted" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Get_Sorted(arg2,*arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Sorted__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  long *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Get_Sorted",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Sorted" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Sorted" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_long,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "long &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "long &""'"); 
+  }
+  arg3 = reinterpret_cast< long * >(argp3);
+  result = (bool)(arg1)->Get_Sorted(arg2,*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Sorted__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  int *arg3 = 0 ;
+  int *arg4 = 0 ;
+  bool arg5 ;
+  bool arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_Get_Sorted",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Sorted" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Sorted" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Get_Sorted" "', argument " "4"" of type '" "int &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Sorted" "', argument " "4"" of type '" "int &""'"); 
+  }
+  arg4 = reinterpret_cast< int * >(argp4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Sorted" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Get_Sorted" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  result = (bool)(arg1)->Get_Sorted(arg2,*arg3,*arg4,arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Sorted__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  int *arg3 = 0 ;
+  int *arg4 = 0 ;
+  bool arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_Get_Sorted",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Sorted" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Sorted" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Get_Sorted" "', argument " "4"" of type '" "int &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Sorted" "', argument " "4"" of type '" "int &""'"); 
+  }
+  arg4 = reinterpret_cast< int * >(argp4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Sorted" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  result = (bool)(arg1)->Get_Sorted(arg2,*arg3,*arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Sorted__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  int *arg3 = 0 ;
+  int *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Get_Sorted",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Sorted" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Sorted" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Sorted" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Get_Sorted" "', argument " "4"" of type '" "int &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Sorted" "', argument " "4"" of type '" "int &""'"); 
+  }
+  arg4 = reinterpret_cast< int * >(argp4);
+  result = (bool)(arg1)->Get_Sorted(arg2,*arg3,*arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Sorted(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_Sorted__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_long, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Grid_Get_Sorted__SWIG_5(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Get_Sorted__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_long, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Get_Sorted__SWIG_4(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_int, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Grid_Get_Sorted__SWIG_8(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Get_Sorted__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_int, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Grid_Get_Sorted__SWIG_7(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_long, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Grid_Get_Sorted__SWIG_3(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_int, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Grid_Get_Sorted__SWIG_6(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_Sorted'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Sorted(CSG_Grid *,long,bool,bool)\n"
+    "    Get_Sorted(CSG_Grid *,long,bool)\n"
+    "    Get_Sorted(CSG_Grid *,long)\n"
+    "    Get_Sorted(CSG_Grid *,long,long &,bool,bool)\n"
+    "    Get_Sorted(CSG_Grid *,long,long &,bool)\n"
+    "    Get_Sorted(CSG_Grid *,long,long &)\n"
+    "    Get_Sorted(CSG_Grid *,long,int &,int &,bool,bool)\n"
+    "    Get_Sorted(CSG_Grid *,long,int &,int &,bool)\n"
+    "    Get_Sorted(CSG_Grid *,long,int &,int &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Percentile__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Get_Percentile",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Percentile" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Percentile" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Percentile" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (double)(arg1)->Get_Percentile(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Percentile__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_Percentile",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Percentile" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Percentile" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (double)(arg1)->Get_Percentile(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Percentile(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Get_Percentile__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Get_Percentile__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_Percentile'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Percentile(CSG_Grid *,double,bool)\n"
+    "    Get_Percentile(CSG_Grid *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_NoData__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_is_NoData",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_NoData" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_is_NoData" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_is_NoData" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)((CSG_Grid const *)arg1)->is_NoData(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_NoData__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_is_NoData",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_is_NoData" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_is_NoData" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (bool)((CSG_Grid const *)arg1)->is_NoData(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_is_NoData(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_is_NoData__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_is_NoData__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_is_NoData'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_NoData(CSG_Grid const *,int,int)\n"
+    "    is_NoData(CSG_Grid const *,long)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_NoData__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Set_NoData",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_NoData" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_NoData" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Set_NoData" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_NoData(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_NoData__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Set_NoData",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_NoData" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_NoData" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  (arg1)->Set_NoData(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_NoData(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Set_NoData__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Set_NoData__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Set_NoData'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_NoData(CSG_Grid *,int,int)\n"
+    "    Set_NoData(CSG_Grid *,long)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___add____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___add__" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid___add__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid___add__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = ((CSG_Grid const *)arg1)->operator +((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Grid(static_cast< const CSG_Grid& >(result))), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___add____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___add__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___add__" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid___add__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((CSG_Grid const *)arg1)->operator +(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Grid(static_cast< const CSG_Grid& >(result))), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___add__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid___add____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid___add____SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  Py_INCREF(Py_NotImplemented);
+  return Py_NotImplemented;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___iadd____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___iadd__" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid___iadd__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid___iadd__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (CSG_Grid *) &(arg1)->operator +=((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___iadd____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___iadd__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___iadd__" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid___iadd__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Grid *) &(arg1)->operator +=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___iadd__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid___iadd____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid___iadd____SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid___iadd__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator +=(CSG_Grid *,CSG_Grid const &)\n"
+    "    operator +=(CSG_Grid *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Add__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Add" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Add" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Add" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (CSG_Grid *) &(arg1)->Add((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Add__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Add",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Add" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Add" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Grid *) &(arg1)->Add(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Add(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Add__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Add__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Add'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add(CSG_Grid *,CSG_Grid const &)\n"
+    "    Add(CSG_Grid *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___sub____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___sub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___sub__" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid___sub__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid___sub__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = ((CSG_Grid const *)arg1)->operator -((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Grid(static_cast< const CSG_Grid& >(result))), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___sub____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___sub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___sub__" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid___sub__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((CSG_Grid const *)arg1)->operator -(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Grid(static_cast< const CSG_Grid& >(result))), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___sub__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid___sub____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid___sub____SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  Py_INCREF(Py_NotImplemented);
+  return Py_NotImplemented;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___isub____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___isub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___isub__" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid___isub__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid___isub__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (CSG_Grid *) &(arg1)->operator -=((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___isub____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___isub__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___isub__" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid___isub__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Grid *) &(arg1)->operator -=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___isub__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid___isub____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid___isub____SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid___isub__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator -=(CSG_Grid *,CSG_Grid const &)\n"
+    "    operator -=(CSG_Grid *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Subtract__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Subtract",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Subtract" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Subtract" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Subtract" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (CSG_Grid *) &(arg1)->Subtract((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Subtract__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Subtract",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Subtract" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Subtract" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Grid *) &(arg1)->Subtract(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Subtract(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Subtract__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Subtract__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Subtract'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Subtract(CSG_Grid *,CSG_Grid const &)\n"
+    "    Subtract(CSG_Grid *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___mul____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___mul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___mul__" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid___mul__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid___mul__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = ((CSG_Grid const *)arg1)->operator *((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Grid(static_cast< const CSG_Grid& >(result))), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___mul____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___mul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___mul__" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid___mul__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((CSG_Grid const *)arg1)->operator *(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Grid(static_cast< const CSG_Grid& >(result))), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___mul__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid___mul____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid___mul____SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  Py_INCREF(Py_NotImplemented);
+  return Py_NotImplemented;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___imul____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___imul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___imul__" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid___imul__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid___imul__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (CSG_Grid *) &(arg1)->operator *=((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___imul____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___imul__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___imul__" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid___imul__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Grid *) &(arg1)->operator *=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___imul__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid___imul____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid___imul____SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid___imul__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator *=(CSG_Grid *,CSG_Grid const &)\n"
+    "    operator *=(CSG_Grid *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Multiply__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Multiply",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Multiply" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Multiply" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Multiply" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (CSG_Grid *) &(arg1)->Multiply((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Multiply__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Multiply",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Multiply" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Multiply" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Grid *) &(arg1)->Multiply(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Multiply(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Multiply__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Multiply__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Multiply'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Multiply(CSG_Grid *,CSG_Grid const &)\n"
+    "    Multiply(CSG_Grid *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___div____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___div__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___div__" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid___div__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid___div__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = ((CSG_Grid const *)arg1)->operator /((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Grid(static_cast< const CSG_Grid& >(result))), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___div____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___div__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___div__" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid___div__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((CSG_Grid const *)arg1)->operator /(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_Grid(static_cast< const CSG_Grid& >(result))), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___div__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid___div____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid___div____SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  Py_INCREF(Py_NotImplemented);
+  return Py_NotImplemented;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___idiv____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___idiv__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___idiv__" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid___idiv__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid___idiv__" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (CSG_Grid *) &(arg1)->operator /=((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___idiv____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid___idiv__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___idiv__" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid___idiv__" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Grid *) &(arg1)->operator /=(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___idiv__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid___idiv____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid___idiv____SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid___idiv__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator /=(CSG_Grid *,CSG_Grid const &)\n"
+    "    operator /=(CSG_Grid *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Divide__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  CSG_Grid *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Divide",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Divide" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Divide" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Divide" "', argument " "2"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid * >(argp2);
+  result = (CSG_Grid *) &(arg1)->Divide((CSG_Grid const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Divide__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Divide",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Divide" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Divide" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (CSG_Grid *) &(arg1)->Divide(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Divide(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Grid, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Divide__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Divide__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Divide'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Divide(CSG_Grid *,CSG_Grid const &)\n"
+    "    Divide(CSG_Grid *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid___call__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid___call__",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid___call__" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid___call__" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid___call__" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)((CSG_Grid const *)arg1)->operator ()(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  bool arg5 ;
+  bool arg6 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Get_Value" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Grid_Get_Value" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (double)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,arg4,arg5,arg6,arg7);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  bool arg5 ;
+  bool arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Get_Value" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  result = (double)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  bool arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  result = (double)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (double)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (double)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  bool arg5 ;
+  bool arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Get_Value" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  result = (double)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  bool arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  result = (double)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (double)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_9(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Get_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (double)((CSG_Grid const *)arg1)->Get_Value(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_10(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double *arg4 = 0 ;
+  int arg5 ;
+  bool arg6 ;
+  bool arg7 ;
+  bool arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  bool val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Get_Value" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Grid_Get_Value" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  ecode8 = SWIG_AsVal_bool(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Grid_Get_Value" "', argument " "8"" of type '" "bool""'");
+  } 
+  arg8 = static_cast< bool >(val8);
+  result = (bool)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,*arg4,arg5,arg6,arg7,arg8);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_11(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double *arg4 = 0 ;
+  int arg5 ;
+  bool arg6 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Get_Value" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Grid_Get_Value" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (bool)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,*arg4,arg5,arg6,arg7);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_12(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double *arg4 = 0 ;
+  int arg5 ;
+  bool arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Get_Value" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  result = (bool)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,*arg4,arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_13(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double *arg4 = 0 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (bool)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,*arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_14(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "double &""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  result = (bool)((CSG_Grid const *)arg1)->Get_Value(arg2,arg3,*arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_15(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Point arg2 ;
+  double *arg3 = 0 ;
+  int arg4 ;
+  bool arg5 ;
+  bool arg6 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Get_Value" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Grid_Get_Value" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (bool)((CSG_Grid const *)arg1)->Get_Value(arg2,*arg3,arg4,arg5,arg6,arg7);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_16(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Point arg2 ;
+  double *arg3 = 0 ;
+  int arg4 ;
+  bool arg5 ;
+  bool arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Grid_Get_Value" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  result = (bool)((CSG_Grid const *)arg1)->Get_Value(arg2,*arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_17(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Point arg2 ;
+  double *arg3 = 0 ;
+  int arg4 ;
+  bool arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Grid_Get_Value" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  result = (bool)((CSG_Grid const *)arg1)->Get_Value(arg2,*arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_18(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Point arg2 ;
+  double *arg3 = 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Get_Value" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)((CSG_Grid const *)arg1)->Get_Value(arg2,*arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value__SWIG_19(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Point arg2 ;
+  double *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Get_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Get_Value" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Get_Value" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  result = (bool)((CSG_Grid const *)arg1)->Get_Value(arg2,*arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Get_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[9];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 8); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Grid_Get_Value__SWIG_9(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Grid_Get_Value__SWIG_19(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Get_Value__SWIG_8(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Get_Value__SWIG_4(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Get_Value__SWIG_18(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Get_Value__SWIG_7(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_double, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Grid_Get_Value__SWIG_14(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Get_Value__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Grid_Get_Value__SWIG_17(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Grid_Get_Value__SWIG_6(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_double, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Grid_Get_Value__SWIG_13(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Grid_Get_Value__SWIG_2(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Grid_Get_Value__SWIG_16(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Grid_Get_Value__SWIG_5(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_double, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Grid_Get_Value__SWIG_12(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Grid_Get_Value__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_double, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Grid_Get_Value__SWIG_15(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_double, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Grid_Get_Value__SWIG_11(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Grid_Get_Value__SWIG_0(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_double, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_bool(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Grid_Get_Value__SWIG_10(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Get_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Value(CSG_Grid const *,double,double,int,bool,bool,bool)\n"
+    "    Get_Value(CSG_Grid const *,double,double,int,bool,bool)\n"
+    "    Get_Value(CSG_Grid const *,double,double,int,bool)\n"
+    "    Get_Value(CSG_Grid const *,double,double,int)\n"
+    "    Get_Value(CSG_Grid const *,double,double)\n"
+    "    Get_Value(CSG_Grid const *,TSG_Point,int,bool,bool,bool)\n"
+    "    Get_Value(CSG_Grid const *,TSG_Point,int,bool,bool)\n"
+    "    Get_Value(CSG_Grid const *,TSG_Point,int,bool)\n"
+    "    Get_Value(CSG_Grid const *,TSG_Point,int)\n"
+    "    Get_Value(CSG_Grid const *,TSG_Point)\n"
+    "    Get_Value(CSG_Grid const *,double,double,double &,int,bool,bool,bool)\n"
+    "    Get_Value(CSG_Grid const *,double,double,double &,int,bool,bool)\n"
+    "    Get_Value(CSG_Grid const *,double,double,double &,int,bool)\n"
+    "    Get_Value(CSG_Grid const *,double,double,double &,int)\n"
+    "    Get_Value(CSG_Grid const *,double,double,double &)\n"
+    "    Get_Value(CSG_Grid const *,TSG_Point,double &,int,bool,bool,bool)\n"
+    "    Get_Value(CSG_Grid const *,TSG_Point,double &,int,bool,bool)\n"
+    "    Get_Value(CSG_Grid const *,TSG_Point,double &,int,bool)\n"
+    "    Get_Value(CSG_Grid const *,TSG_Point,double &,int)\n"
+    "    Get_Value(CSG_Grid const *,TSG_Point,double &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asByte__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  BYTE result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_asByte",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asByte" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asByte" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asByte" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_asByte" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = ((CSG_Grid const *)arg1)->asByte(arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj((new BYTE(static_cast< const BYTE& >(result))), SWIGTYPE_p_BYTE, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asByte__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  BYTE result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asByte",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asByte" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asByte" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asByte" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = ((CSG_Grid const *)arg1)->asByte(arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new BYTE(static_cast< const BYTE& >(result))), SWIGTYPE_p_BYTE, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asByte__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  BYTE result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asByte",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asByte" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asByte" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asByte" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = ((CSG_Grid const *)arg1)->asByte(arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new BYTE(static_cast< const BYTE& >(result))), SWIGTYPE_p_BYTE, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asByte__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  BYTE result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_asByte",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asByte" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asByte" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = ((CSG_Grid const *)arg1)->asByte(arg2);
+  resultobj = SWIG_NewPointerObj((new BYTE(static_cast< const BYTE& >(result))), SWIGTYPE_p_BYTE, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asByte(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_asByte__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asByte__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asByte__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_asByte__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_asByte'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asByte(CSG_Grid const *,int,int,bool)\n"
+    "    asByte(CSG_Grid const *,int,int)\n"
+    "    asByte(CSG_Grid const *,long,bool)\n"
+    "    asByte(CSG_Grid const *,long)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asChar__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  char result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_asChar",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asChar" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asChar" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asChar" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_asChar" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (char)((CSG_Grid const *)arg1)->asChar(arg2,arg3,arg4);
+  resultobj = SWIG_From_char(static_cast< char >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asChar__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  char result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asChar",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asChar" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asChar" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asChar" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (char)((CSG_Grid const *)arg1)->asChar(arg2,arg3);
+  resultobj = SWIG_From_char(static_cast< char >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asChar__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  char result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asChar",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asChar" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asChar" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asChar" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (char)((CSG_Grid const *)arg1)->asChar(arg2,arg3);
+  resultobj = SWIG_From_char(static_cast< char >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asChar__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  char result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_asChar",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asChar" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asChar" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (char)((CSG_Grid const *)arg1)->asChar(arg2);
+  resultobj = SWIG_From_char(static_cast< char >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asChar(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_asChar__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asChar__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asChar__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_asChar__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_asChar'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asChar(CSG_Grid const *,int,int,bool)\n"
+    "    asChar(CSG_Grid const *,int,int)\n"
+    "    asChar(CSG_Grid const *,long,bool)\n"
+    "    asChar(CSG_Grid const *,long)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asShort__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_asShort",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asShort" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asShort" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asShort" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_asShort" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (short)((CSG_Grid const *)arg1)->asShort(arg2,arg3,arg4);
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asShort__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asShort",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asShort" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asShort" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asShort" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (short)((CSG_Grid const *)arg1)->asShort(arg2,arg3);
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asShort__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asShort",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asShort" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asShort" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asShort" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (short)((CSG_Grid const *)arg1)->asShort(arg2,arg3);
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asShort__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  short result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_asShort",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asShort" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asShort" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (short)((CSG_Grid const *)arg1)->asShort(arg2);
+  resultobj = SWIG_From_short(static_cast< short >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asShort(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_asShort__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asShort__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asShort__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_asShort__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_asShort'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asShort(CSG_Grid const *,int,int,bool)\n"
+    "    asShort(CSG_Grid const *,int,int)\n"
+    "    asShort(CSG_Grid const *,long,bool)\n"
+    "    asShort(CSG_Grid const *,long)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asInt__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_asInt",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asInt" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asInt" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asInt" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_asInt" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (int)((CSG_Grid const *)arg1)->asInt(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asInt__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asInt",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asInt" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asInt" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asInt" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid const *)arg1)->asInt(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asInt__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asInt",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asInt" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asInt" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asInt" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (int)((CSG_Grid const *)arg1)->asInt(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asInt__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_asInt",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asInt" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asInt" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (int)((CSG_Grid const *)arg1)->asInt(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asInt(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_asInt__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asInt__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asInt__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_asInt__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_asInt'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asInt(CSG_Grid const *,int,int,bool)\n"
+    "    asInt(CSG_Grid const *,int,int)\n"
+    "    asInt(CSG_Grid const *,long,bool)\n"
+    "    asInt(CSG_Grid const *,long)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asFloat__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_asFloat",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asFloat" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asFloat" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asFloat" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_asFloat" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (float)((CSG_Grid const *)arg1)->asFloat(arg2,arg3,arg4);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asFloat__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asFloat",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asFloat" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asFloat" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asFloat" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (float)((CSG_Grid const *)arg1)->asFloat(arg2,arg3);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asFloat__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asFloat",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asFloat" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asFloat" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asFloat" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (float)((CSG_Grid const *)arg1)->asFloat(arg2,arg3);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asFloat__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  float result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_asFloat",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asFloat" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asFloat" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (float)((CSG_Grid const *)arg1)->asFloat(arg2);
+  resultobj = SWIG_From_float(static_cast< float >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asFloat(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_asFloat__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asFloat__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asFloat__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_asFloat__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_asFloat'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asFloat(CSG_Grid const *,int,int,bool)\n"
+    "    asFloat(CSG_Grid const *,int,int)\n"
+    "    asFloat(CSG_Grid const *,long,bool)\n"
+    "    asFloat(CSG_Grid const *,long)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asDouble__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asDouble",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asDouble" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asDouble" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asDouble" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (double)((CSG_Grid const *)arg1)->asDouble(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asDouble__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_asDouble",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asDouble" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asDouble" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (double)((CSG_Grid const *)arg1)->asDouble(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asDouble__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_asDouble",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asDouble" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asDouble" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asDouble" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_asDouble" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (double)((CSG_Grid const *)arg1)->asDouble(arg2,arg3,arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asDouble__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_asDouble",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_asDouble" "', argument " "1"" of type '" "CSG_Grid const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_asDouble" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_asDouble" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)((CSG_Grid const *)arg1)->asDouble(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_asDouble(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_asDouble__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asDouble__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_asDouble__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_asDouble__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_asDouble'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    asDouble(CSG_Grid const *,long,bool)\n"
+    "    asDouble(CSG_Grid const *,long)\n"
+    "    asDouble(CSG_Grid const *,int,int,bool)\n"
+    "    asDouble(CSG_Grid const *,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Add_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Add_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Add_Value" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Add_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Add_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Add_Value" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  (arg1)->Add_Value(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Add_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Add_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Add_Value" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Add_Value" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Add_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Add_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Add_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Add_Value__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Add_Value__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Add_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Value(CSG_Grid *,int,int,double)\n"
+    "    Add_Value(CSG_Grid *,long,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Mul_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Mul_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Mul_Value" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Mul_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Mul_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Mul_Value" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  (arg1)->Mul_Value(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Mul_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Mul_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Mul_Value" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Mul_Value" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Mul_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Mul_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Mul_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Mul_Value__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Mul_Value__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Mul_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Mul_Value(CSG_Grid *,int,int,double)\n"
+    "    Mul_Value(CSG_Grid *,long,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Value" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_Value" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Set_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Set_Value(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Set_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Value" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Set_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Set_Value" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  (arg1)->Set_Value(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Set_Value__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Set_Value__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Grid *,long,double)\n"
+    "    Set_Value(CSG_Grid *,int,int,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Value_And_Sort__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  long arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Set_Value_And_Sort",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Value_And_Sort" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_Value_And_Sort" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Set_Value_And_Sort" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  (arg1)->Set_Value_And_Sort(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Value_And_Sort__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Set_Value_And_Sort",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Set_Value_And_Sort" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Set_Value_And_Sort" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Set_Value_And_Sort" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Set_Value_And_Sort" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  (arg1)->Set_Value_And_Sort(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Set_Value_And_Sort(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_long(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Set_Value_And_Sort__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Grid_Set_Value_And_Sort__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Set_Value_And_Sort'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value_And_Sort(CSG_Grid *,long,double)\n"
+    "    Set_Value_And_Sort(CSG_Grid *,int,int,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Grid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Grid, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Create_Grid")) SWIG_fail;
+  result = (CSG_Grid *)SG_Create_Grid();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Grid,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_Grid const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_Grid const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (CSG_Grid *)SG_Create_Grid((CSG_Grid const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  TSG_Data_Type arg2 ;
+  TSG_Grid_Memory_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_Create_Grid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Create_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Create_Grid" "', argument " "3"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg3 = static_cast< TSG_Grid_Memory_Type >(val3);
+  result = (CSG_Grid *)SG_Create_Grid((CSG_String const &)*arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  TSG_Data_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Create_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Create_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  result = (CSG_Grid *)SG_Create_Grid((CSG_String const &)*arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_Grid *)SG_Create_Grid((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Data_Type arg2 ;
+  TSG_Grid_Memory_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_Create_Grid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Create_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Create_Grid" "', argument " "3"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg3 = static_cast< TSG_Grid_Memory_Type >(val3);
+  result = (CSG_Grid *)SG_Create_Grid(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  TSG_Data_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Create_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Create_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  result = (CSG_Grid *)SG_Create_Grid(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid *arg1 = (CSG_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid * >(argp1);
+  result = (CSG_Grid *)SG_Create_Grid(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = 0 ;
+  TSG_Data_Type arg2 ;
+  TSG_Grid_Memory_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_Create_Grid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Create_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Create_Grid" "', argument " "3"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg3 = static_cast< TSG_Grid_Memory_Type >(val3);
+  result = (CSG_Grid *)SG_Create_Grid((CSG_Grid_System const &)*arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_9(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = 0 ;
+  TSG_Data_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Create_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Create_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  result = (CSG_Grid *)SG_Create_Grid((CSG_Grid_System const &)*arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_10(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_System *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Grid_System,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "CSG_Grid_System const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_System * >(argp1);
+  result = (CSG_Grid *)SG_Create_Grid((CSG_Grid_System const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_11(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  double arg5 ;
+  double arg6 ;
+  TSG_Grid_Memory_Type arg7 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:SG_Create_Grid",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Create_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Create_Grid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "SG_Create_Grid" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "SG_Create_Grid" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "SG_Create_Grid" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "SG_Create_Grid" "', argument " "7"" of type '" "TSG_Grid_Memory_Type""'");
+  } 
+  arg7 = static_cast< TSG_Grid_Memory_Type >(val7);
+  result = (CSG_Grid *)SG_Create_Grid(arg1,arg2,arg3,arg4,arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_12(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  double arg5 ;
+  double arg6 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:SG_Create_Grid",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Create_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Create_Grid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "SG_Create_Grid" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "SG_Create_Grid" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "SG_Create_Grid" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  result = (CSG_Grid *)SG_Create_Grid(arg1,arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_13(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  double arg5 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:SG_Create_Grid",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Create_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Create_Grid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "SG_Create_Grid" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "SG_Create_Grid" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (CSG_Grid *)SG_Create_Grid(arg1,arg2,arg3,arg4,arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_14(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:SG_Create_Grid",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Create_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Create_Grid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "SG_Create_Grid" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (CSG_Grid *)SG_Create_Grid(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid__SWIG_15(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Data_Type arg1 ;
+  int arg2 ;
+  int arg3 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_Create_Grid",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Create_Grid" "', argument " "1"" of type '" "TSG_Data_Type""'");
+  } 
+  arg1 = static_cast< TSG_Data_Type >(val1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SG_Create_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "SG_Create_Grid" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (CSG_Grid *)SG_Create_Grid(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Grid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_SG_Create_Grid__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_Grid__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_Grid__SWIG_4(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_Grid__SWIG_7(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_Grid__SWIG_10(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_SG_Create_Grid__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_SG_Create_Grid__SWIG_9(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_SG_Create_Grid__SWIG_6(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Grid_System, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_SG_Create_Grid__SWIG_8(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_SG_Create_Grid__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_SG_Create_Grid__SWIG_5(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_SG_Create_Grid__SWIG_15(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_SG_Create_Grid__SWIG_14(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_SG_Create_Grid__SWIG_13(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_SG_Create_Grid__SWIG_12(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_SG_Create_Grid__SWIG_11(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Create_Grid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Create_Grid()\n"
+    "    SG_Create_Grid(CSG_Grid const &)\n"
+    "    SG_Create_Grid(CSG_String const &,TSG_Data_Type,TSG_Grid_Memory_Type)\n"
+    "    SG_Create_Grid(CSG_String const &,TSG_Data_Type)\n"
+    "    SG_Create_Grid(CSG_String const &)\n"
+    "    SG_Create_Grid(CSG_Grid *,TSG_Data_Type,TSG_Grid_Memory_Type)\n"
+    "    SG_Create_Grid(CSG_Grid *,TSG_Data_Type)\n"
+    "    SG_Create_Grid(CSG_Grid *)\n"
+    "    SG_Create_Grid(CSG_Grid_System const &,TSG_Data_Type,TSG_Grid_Memory_Type)\n"
+    "    SG_Create_Grid(CSG_Grid_System const &,TSG_Data_Type)\n"
+    "    SG_Create_Grid(CSG_Grid_System const &)\n"
+    "    SG_Create_Grid(TSG_Data_Type,int,int,double,double,double,TSG_Grid_Memory_Type)\n"
+    "    SG_Create_Grid(TSG_Data_Type,int,int,double,double,double)\n"
+    "    SG_Create_Grid(TSG_Data_Type,int,int,double,double)\n"
+    "    SG_Create_Grid(TSG_Data_Type,int,int,double)\n"
+    "    SG_Create_Grid(TSG_Data_Type,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Grid_Cache_Get_Directory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Grid_Cache_Get_Directory")) SWIG_fail;
+  result = (wchar_t *)SG_Grid_Cache_Get_Directory();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Grid_Cache_Set_Directory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *arg1 = (wchar_t *) 0 ;
+  int res1 ;
+  wchar_t *buf1 = 0 ;
+  int alloc1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Grid_Cache_Set_Directory",&obj0)) SWIG_fail;
+  res1 = SWIG_AsWCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Grid_Cache_Set_Directory" "', argument " "1"" of type '" "wchar_t const *""'");
+  }
+  arg1 = reinterpret_cast< wchar_t * >(buf1);
+  SG_Grid_Cache_Set_Directory((wchar_t const *)arg1);
+  resultobj = SWIG_Py_Void();
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return resultobj;
+fail:
+  if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Grid_Cache_Set_Automatic(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool arg1 ;
+  bool val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Grid_Cache_Set_Automatic",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_bool(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Grid_Cache_Set_Automatic" "', argument " "1"" of type '" "bool""'");
+  } 
+  arg1 = static_cast< bool >(val1);
+  SG_Grid_Cache_Set_Automatic(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Grid_Cache_Get_Automatic(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Grid_Cache_Get_Automatic")) SWIG_fail;
+  result = (bool)SG_Grid_Cache_Get_Automatic();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Grid_Cache_Set_Confirm(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Grid_Cache_Set_Confirm",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Grid_Cache_Set_Confirm" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  SG_Grid_Cache_Set_Confirm(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Grid_Cache_Get_Confirm(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Grid_Cache_Get_Confirm")) SWIG_fail;
+  result = (int)SG_Grid_Cache_Get_Confirm();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Grid_Cache_Set_Threshold(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Grid_Cache_Set_Threshold",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Grid_Cache_Set_Threshold" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  SG_Grid_Cache_Set_Threshold(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Grid_Cache_Set_Threshold_MB(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Grid_Cache_Set_Threshold_MB",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Grid_Cache_Set_Threshold_MB" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  SG_Grid_Cache_Set_Threshold_MB(arg1);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Grid_Cache_Get_Threshold(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Grid_Cache_Get_Threshold")) SWIG_fail;
+  result = (int)SG_Grid_Cache_Get_Threshold();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Grid_Cache_Get_Threshold_MB(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Grid_Cache_Get_Threshold_MB")) SWIG_fail;
+  result = (double)SG_Grid_Cache_Get_Threshold_MB();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Stack(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Stack *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Grid_Stack")) SWIG_fail;
+  result = (CSG_Grid_Stack *)new CSG_Grid_Stack();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Stack, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Stack_Push(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Stack *arg1 = (CSG_Grid_Stack *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Stack_Push",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Stack, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Stack_Push" "', argument " "1"" of type '" "CSG_Grid_Stack *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Stack * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Stack_Push" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Stack_Push" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Push(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Stack_Pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Stack *arg1 = (CSG_Grid_Stack *) 0 ;
+  int *arg2 = 0 ;
+  int *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Stack_Pop",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Stack, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Stack_Pop" "', argument " "1"" of type '" "CSG_Grid_Stack *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Stack * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Grid_Stack_Pop" "', argument " "2"" of type '" "int &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Stack_Pop" "', argument " "2"" of type '" "int &""'"); 
+  }
+  arg2 = reinterpret_cast< int * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Stack_Pop" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Stack_Pop" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  (arg1)->Pop(*arg2,*arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Grid_Stack(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Stack *arg1 = (CSG_Grid_Stack *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Grid_Stack",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Stack, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Grid_Stack" "', argument " "1"" of type '" "CSG_Grid_Stack *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Stack * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Grid_Stack_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Grid_Stack, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Grid_Cell_Addressor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Grid_Cell_Addressor")) SWIG_fail;
+  result = (CSG_Grid_Cell_Addressor *)new CSG_Grid_Cell_Addressor();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_Cell_Addressor, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Cell_Addressor_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Destroy" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_Weighting(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Distance_Weighting *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Cell_Addressor_Get_Weighting",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Get_Weighting" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  result = (CSG_Distance_Weighting *) &(arg1)->Get_Weighting();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Distance_Weighting, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Set_Radius(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Cell_Addressor_Set_Radius",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Set_Radius" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Cell_Addressor_Set_Radius" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Radius(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Set_Sector(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  int arg2 ;
+  double arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Grid_Cell_Addressor_Set_Sector",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Set_Sector" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Cell_Addressor_Set_Sector" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Cell_Addressor_Set_Sector" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Grid_Cell_Addressor_Set_Sector" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Set_Sector(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Grid_Cell_Addressor_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Get_Count" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  result = (int)((CSG_Grid_Cell_Addressor const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_X__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Cell_Addressor_Get_X",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Get_X" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Cell_Addressor_Get_X" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Cell_Addressor_Get_X" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid_Cell_Addressor const *)arg1)->Get_X(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_X__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Cell_Addressor_Get_X",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Get_X" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Cell_Addressor_Get_X" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Grid_Cell_Addressor const *)arg1)->Get_X(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_X(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Cell_Addressor_Get_X__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Cell_Addressor_Get_X__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Cell_Addressor_Get_X'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_X(CSG_Grid_Cell_Addressor const *,int,int)\n"
+    "    Get_X(CSG_Grid_Cell_Addressor const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_Y__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Grid_Cell_Addressor_Get_Y",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Get_Y" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Cell_Addressor_Get_Y" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Grid_Cell_Addressor_Get_Y" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)((CSG_Grid_Cell_Addressor const *)arg1)->Get_Y(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_Y__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Cell_Addressor_Get_Y",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Get_Y" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Cell_Addressor_Get_Y" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)((CSG_Grid_Cell_Addressor const *)arg1)->Get_Y(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_Y(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Grid_Cell_Addressor_Get_Y__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Grid_Cell_Addressor_Get_Y__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Cell_Addressor_Get_Y'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Y(CSG_Grid_Cell_Addressor const *,int,int)\n"
+    "    Get_Y(CSG_Grid_Cell_Addressor const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_Distance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Cell_Addressor_Get_Distance",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Get_Distance" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Cell_Addressor_Get_Distance" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Grid_Cell_Addressor const *)arg1)->Get_Distance(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_Weight(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Grid_Cell_Addressor_Get_Weight",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Get_Weight" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Cell_Addressor_Get_Weight" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_Grid_Cell_Addressor const *)arg1)->Get_Weight(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_Values__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  int arg2 ;
+  int *arg3 = 0 ;
+  int *arg4 = 0 ;
+  double *arg5 = 0 ;
+  double *arg6 = 0 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Grid_Cell_Addressor_Get_Values",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "4"" of type '" "int &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "4"" of type '" "int &""'"); 
+  }
+  arg4 = reinterpret_cast< int * >(argp4);
+  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "5"" of type '" "double &""'"); 
+  }
+  if (!argp5) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "5"" of type '" "double &""'"); 
+  }
+  arg5 = reinterpret_cast< double * >(argp5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "6"" of type '" "double &""'"); 
+  }
+  if (!argp6) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "6"" of type '" "double &""'"); 
+  }
+  arg6 = reinterpret_cast< double * >(argp6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (bool)((CSG_Grid_Cell_Addressor const *)arg1)->Get_Values(arg2,*arg3,*arg4,*arg5,*arg6,arg7);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_Values__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  int arg2 ;
+  int *arg3 = 0 ;
+  int *arg4 = 0 ;
+  double *arg5 = 0 ;
+  double *arg6 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Grid_Cell_Addressor_Get_Values",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "3"" of type '" "int &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "3"" of type '" "int &""'"); 
+  }
+  arg3 = reinterpret_cast< int * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "4"" of type '" "int &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "4"" of type '" "int &""'"); 
+  }
+  arg4 = reinterpret_cast< int * >(argp4);
+  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "5"" of type '" "double &""'"); 
+  }
+  if (!argp5) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "5"" of type '" "double &""'"); 
+  }
+  arg5 = reinterpret_cast< double * >(argp5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "6"" of type '" "double &""'"); 
+  }
+  if (!argp6) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Grid_Cell_Addressor_Get_Values" "', argument " "6"" of type '" "double &""'"); 
+  }
+  arg6 = reinterpret_cast< double * >(argp6);
+  result = (bool)((CSG_Grid_Cell_Addressor const *)arg1)->Get_Values(arg2,*arg3,*arg4,*arg5,*arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Grid_Cell_Addressor_Get_Values(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_int, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            void *vptr = 0;
+            int res = SWIG_ConvertPtr(argv[4], &vptr, SWIGTYPE_p_double, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_double, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Grid_Cell_Addressor_Get_Values__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Grid_Cell_Addressor, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_int, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_int, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            void *vptr = 0;
+            int res = SWIG_ConvertPtr(argv[4], &vptr, SWIGTYPE_p_double, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_double, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Grid_Cell_Addressor_Get_Values__SWIG_0(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Grid_Cell_Addressor_Get_Values'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Values(CSG_Grid_Cell_Addressor const *,int,int &,int &,double &,double &,bool)\n"
+    "    Get_Values(CSG_Grid_Cell_Addressor const *,int,int &,int &,double &,double &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Grid_Cell_Addressor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Grid_Cell_Addressor *arg1 = (CSG_Grid_Cell_Addressor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Grid_Cell_Addressor",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Grid_Cell_Addressor, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Grid_Cell_Addressor" "', argument " "1"" of type '" "CSG_Grid_Cell_Addressor *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Grid_Cell_Addressor * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Grid_Cell_Addressor_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Grid_Cell_Addressor, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Get_ShapeType_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Shape_Type arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Get_ShapeType_Name",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Get_ShapeType_Name" "', argument " "1"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg1 = static_cast< TSG_Shape_Type >(val1);
+  result = (wchar_t *)SG_Get_ShapeType_Name(arg1);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Destroy" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Assign__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  CSG_Shape *arg2 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Assign" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Assign" "', argument " "2"" of type '" "CSG_Shape *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Assign__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  CSG_Shape *arg2 = (CSG_Shape *) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Assign",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Assign" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Assign" "', argument " "2"" of type '" "CSG_Shape *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Assign" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Assign(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Assign(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shape_Assign__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Assign__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Assign'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Assign(CSG_Shape *,CSG_Shape *)\n"
+    "    Assign(CSG_Shape *,CSG_Shape *,bool)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Shape_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Type" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  result = (TSG_Shape_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_is_Valid" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  result = (bool)(arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Add_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Add_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Add_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Add_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Add_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Add_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Add_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Add_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Add_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Add_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (int)(arg1)->Add_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Ins_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Shape_Ins_Point",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Ins_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Ins_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Ins_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Ins_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shape_Ins_Point" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (int)(arg1)->Ins_Point(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Ins_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Ins_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Ins_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Ins_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Ins_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Ins_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Ins_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Set_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Shape_Set_Point",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Set_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Set_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Set_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Set_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shape_Set_Point" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (int)(arg1)->Set_Point(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Set_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Set_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Set_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Set_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Set_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Set_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Set_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Del_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Del_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Del_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Del_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Del_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)(arg1)->Del_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Del_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Del_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Del_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Del_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Del_Point(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Del_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Del_Point__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Del_Point__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Del_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Del_Point(CSG_Shape *,int,int)\n"
+    "    Del_Point(CSG_Shape *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Add_Point__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Add_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Add_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Add_Point" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Add_Point" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Add_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)(arg1)->Add_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Add_Point__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Add_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Add_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Add_Point" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Add_Point" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (int)(arg1)->Add_Point(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Add_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shape_Add_Point__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Add_Point__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Add_Point__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Add_Point__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Add_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Point(CSG_Shape *,double,double,int)\n"
+    "    Add_Point(CSG_Shape *,double,double)\n"
+    "    Add_Point(CSG_Shape *,TSG_Point,int)\n"
+    "    Add_Point(CSG_Shape *,TSG_Point)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Ins_Point__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Ins_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Ins_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Ins_Point" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Ins_Point" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Ins_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Ins_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Ins_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Ins_Point__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Ins_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Ins_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Ins_Point" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Ins_Point" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Ins_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)(arg1)->Ins_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Ins_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Ins_Point__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Ins_Point__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Ins_Point__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Shape_Ins_Point__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Ins_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Ins_Point(CSG_Shape *,double,double,int,int)\n"
+    "    Ins_Point(CSG_Shape *,double,double,int)\n"
+    "    Ins_Point(CSG_Shape *,TSG_Point,int,int)\n"
+    "    Ins_Point(CSG_Shape *,TSG_Point,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Set_Point__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Set_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Set_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Set_Point" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Set_Point" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Set_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Set_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Set_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Set_Point__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Set_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Set_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Set_Point" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Set_Point" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Set_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)(arg1)->Set_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Set_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Set_Point__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Set_Point__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Set_Point__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Shape_Set_Point__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Set_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Point(CSG_Shape *,double,double,int,int)\n"
+    "    Set_Point(CSG_Shape *,double,double,int)\n"
+    "    Set_Point(CSG_Shape *,TSG_Point,int,int)\n"
+    "    Set_Point(CSG_Shape *,TSG_Point,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Del_Part(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Del_Part",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Del_Part" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Del_Part" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Del_Part(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Del_Parts(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Del_Parts",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Del_Parts" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  result = (int)(arg1)->Del_Parts();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Part_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Get_Part_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Part_Count" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  result = (int)(arg1)->Get_Part_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Point_Count__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Get_Point_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Point_Count" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  result = (int)(arg1)->Get_Point_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Point_Count__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Get_Point_Count",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Point_Count" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Get_Point_Count" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Get_Point_Count(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Point_Count(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Shape_Get_Point_Count__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Get_Point_Count__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Get_Point_Count'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Point_Count(CSG_Shape *)\n"
+    "    Get_Point_Count(CSG_Shape *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Get_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Get_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (arg1)->Get_Point(arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Get_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Point" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (arg1)->Get_Point(arg2);
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Get_Point__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Get_Point__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Get_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Point(CSG_Shape *,int,int)\n"
+    "    Get_Point(CSG_Shape *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Set_Z__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Set_Z",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Set_Z" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Set_Z" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Set_Z" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Set_Z" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  (arg1)->Set_Z(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Set_Z__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Set_Z",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Set_Z" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Set_Z" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Set_Z" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_Z(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Set_Z(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Set_Z__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Set_Z__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Set_Z'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Z(CSG_Shape *,double,int,int)\n"
+    "    Set_Z(CSG_Shape *,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Z__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Get_Z",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Z" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Get_Z" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Get_Z" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)(arg1)->Get_Z(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Z__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Get_Z",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Z" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Get_Z" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_Z(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Z(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Get_Z__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Get_Z__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Get_Z'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Z(CSG_Shape *,int,int)\n"
+    "    Get_Z(CSG_Shape *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_ZMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Get_ZMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_ZMin" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  result = (double)(arg1)->Get_ZMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_ZMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Get_ZMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_ZMax" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  result = (double)(arg1)->Get_ZMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Set_M__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Set_M",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Set_M" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Set_M" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Set_M" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Set_M" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  (arg1)->Set_M(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Set_M__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Set_M",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Set_M" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Set_M" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Set_M" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_M(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Set_M(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Set_M__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Set_M__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Set_M'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_M(CSG_Shape *,double,int,int)\n"
+    "    Set_M(CSG_Shape *,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_M__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Get_M",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_M" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Get_M" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Get_M" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)(arg1)->Get_M(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_M__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Get_M",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_M" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Get_M" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_M(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_M(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Get_M__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Get_M__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Get_M'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_M(CSG_Shape *,int,int)\n"
+    "    Get_M(CSG_Shape *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_MMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Get_MMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_MMin" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  result = (double)(arg1)->Get_MMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_MMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Get_MMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_MMax" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  result = (double)(arg1)->Get_MMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Extent__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Get_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Extent" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  result = (CSG_Rect *) &(arg1)->Get_Extent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Extent__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Get_Extent",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Extent" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Get_Extent" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Rect *) &(arg1)->Get_Extent(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Extent(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Shape_Get_Extent__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Get_Extent__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Get_Extent'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Extent(CSG_Shape *)\n"
+    "    Get_Extent(CSG_Shape *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Intersects(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  TSG_Rect arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Intersects",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Intersects" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Rect,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Intersects" "', argument " "2"" of type '" "TSG_Rect""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Intersects" "', argument " "2"" of type '" "TSG_Rect""'");
+    } else {
+      TSG_Rect * temp = reinterpret_cast< TSG_Rect * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (int)(arg1)->Intersects(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Distance__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Get_Distance",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Distance" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (double)(arg1)->Get_Distance(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Distance__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Get_Distance",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Distance" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Get_Distance" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)(arg1)->Get_Distance(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Distance__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  TSG_Point arg2 ;
+  TSG_Point *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Get_Distance",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Distance" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shape_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  result = (double)(arg1)->Get_Distance(arg2,*arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Distance__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  TSG_Point arg2 ;
+  TSG_Point *arg3 = 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Get_Distance",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Get_Distance" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shape_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Get_Distance" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (double)(arg1)->Get_Distance(arg2,*arg3,arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Get_Distance(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shape_Get_Distance__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_SSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Shape_Get_Distance__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Get_Distance__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_SSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Get_Distance__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Get_Distance'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Distance(CSG_Shape *,TSG_Point)\n"
+    "    Get_Distance(CSG_Shape *,TSG_Point,int)\n"
+    "    Get_Distance(CSG_Shape *,TSG_Point,TSG_Point &)\n"
+    "    Get_Distance(CSG_Shape *,TSG_Point,TSG_Point &,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shape_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shape, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Point_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_is_Valid" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  result = (bool)(arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Add_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Point_Add_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Add_Point" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Add_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Point_Add_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Add_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Add_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Point_Add_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Add_Point" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Add_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (int)(arg1)->Add_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Add_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Point_Add_Point__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Point_Add_Point__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Point_Add_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Point(CSG_Shape_Point *,double,double,int)\n"
+    "    Add_Point(CSG_Shape_Point *,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Ins_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Shape_Point_Ins_Point",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Ins_Point" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Ins_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Ins_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Point_Ins_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shape_Point_Ins_Point" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (int)(arg1)->Ins_Point(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Ins_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Point_Ins_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Ins_Point" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Ins_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Ins_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Point_Ins_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Ins_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Ins_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Point_Ins_Point__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Shape_Point_Ins_Point__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Point_Ins_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Ins_Point(CSG_Shape_Point *,double,double,int,int)\n"
+    "    Ins_Point(CSG_Shape_Point *,double,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Set_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Shape_Point_Set_Point",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Set_Point" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Set_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Set_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Point_Set_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shape_Point_Set_Point" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (int)(arg1)->Set_Point(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Set_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Point_Set_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Set_Point" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Set_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Set_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Point_Set_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Set_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Set_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Point_Set_Point__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Shape_Point_Set_Point__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Point_Set_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Point(CSG_Shape_Point *,double,double,int,int)\n"
+    "    Set_Point(CSG_Shape_Point *,double,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Del_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Point_Del_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Del_Point" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Del_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Del_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)(arg1)->Del_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Del_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Point_Del_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Del_Point" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Del_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Del_Point(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Del_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Point_Del_Point__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Point_Del_Point__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Point_Del_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Del_Point(CSG_Shape_Point *,int,int)\n"
+    "    Del_Point(CSG_Shape_Point *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Del_Part(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Point_Del_Part",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Del_Part" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Del_Part" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Del_Part(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Del_Parts(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Point_Del_Parts",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Del_Parts" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  result = (int)(arg1)->Del_Parts();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Get_Part_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Point_Get_Part_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Get_Part_Count" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  result = (int)(arg1)->Get_Part_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Get_Point_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Point_Get_Point_Count",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Get_Point_Count" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Get_Point_Count" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Get_Point_Count(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Get_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Point_Get_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Get_Point" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Get_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (arg1)->Get_Point(arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Get_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Point_Get_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Get_Point" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (arg1)->Get_Point(arg2);
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Get_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Point_Get_Point__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Point_Get_Point__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Point_Get_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Point(CSG_Shape_Point *,int,int)\n"
+    "    Get_Point(CSG_Shape_Point *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Get_Extent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Point_Get_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Get_Extent" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  result = (CSG_Rect *) &(arg1)->Get_Extent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Get_Distance__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Point_Get_Distance",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (double)(arg1)->Get_Distance(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Get_Distance__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Point_Get_Distance",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)(arg1)->Get_Distance(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Get_Distance__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  TSG_Point arg2 ;
+  TSG_Point *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Point_Get_Distance",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  result = (double)(arg1)->Get_Distance(arg2,*arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Get_Distance__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point *arg1 = (CSG_Shape_Point *) 0 ;
+  TSG_Point arg2 ;
+  TSG_Point *arg3 = 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Point_Get_Distance",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "1"" of type '" "CSG_Shape_Point *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Point_Get_Distance" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (double)(arg1)->Get_Distance(arg2,*arg3,arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Get_Distance(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shape_Point_Get_Distance__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_SSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Shape_Point_Get_Distance__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Point_Get_Distance__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_SSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Point_Get_Distance__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Point_Get_Distance'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Distance(CSG_Shape_Point *,TSG_Point)\n"
+    "    Get_Distance(CSG_Shape_Point *,TSG_Point,int)\n"
+    "    Get_Distance(CSG_Shape_Point *,TSG_Point,TSG_Point &)\n"
+    "    Get_Distance(CSG_Shape_Point *,TSG_Point,TSG_Point &,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shape_Point_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shape_Point, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shape_Point_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape_Point_Z *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Shape_Point_Z",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Shape_Point_Z" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Shape_Point_Z" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Shape_Point_Z *)new CSG_Shape_Point_Z(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape_Point_Z, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Z_Set_Z__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_Z *arg1 = (CSG_Shape_Point_Z *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Point_Z_Set_Z",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Z_Set_Z" "', argument " "1"" of type '" "CSG_Shape_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_Z * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Z_Set_Z" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Z_Set_Z" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Point_Z_Set_Z" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  (arg1)->Set_Z(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Z_Set_Z__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_Z *arg1 = (CSG_Shape_Point_Z *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Point_Z_Set_Z",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Z_Set_Z" "', argument " "1"" of type '" "CSG_Shape_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_Z * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Z_Set_Z" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Z_Set_Z" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_Z(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Z_Set_Z(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Point_Z_Set_Z__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Point_Z_Set_Z__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Point_Z_Set_Z'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Z(CSG_Shape_Point_Z *,double,int,int)\n"
+    "    Set_Z(CSG_Shape_Point_Z *,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Z_Get_Z__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_Z *arg1 = (CSG_Shape_Point_Z *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Point_Z_Get_Z",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Z_Get_Z" "', argument " "1"" of type '" "CSG_Shape_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_Z * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Z_Get_Z" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_Z_Get_Z" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)(arg1)->Get_Z(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Z_Get_Z__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_Z *arg1 = (CSG_Shape_Point_Z *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Point_Z_Get_Z",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Z_Get_Z" "', argument " "1"" of type '" "CSG_Shape_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_Z * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_Z_Get_Z" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_Z(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Z_Get_Z(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Point_Z_Get_Z__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point_Z, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Point_Z_Get_Z__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Point_Z_Get_Z'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Z(CSG_Shape_Point_Z *,int,int)\n"
+    "    Get_Z(CSG_Shape_Point_Z *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Z_Get_ZMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_Z *arg1 = (CSG_Shape_Point_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Point_Z_Get_ZMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Z_Get_ZMin" "', argument " "1"" of type '" "CSG_Shape_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_Z * >(argp1);
+  result = (double)(arg1)->Get_ZMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_Z_Get_ZMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_Z *arg1 = (CSG_Shape_Point_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Point_Z_Get_ZMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_Z_Get_ZMax" "', argument " "1"" of type '" "CSG_Shape_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_Z * >(argp1);
+  result = (double)(arg1)->Get_ZMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Shape_Point_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_Z *arg1 = (CSG_Shape_Point_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Shape_Point_Z",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_Z, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Shape_Point_Z" "', argument " "1"" of type '" "CSG_Shape_Point_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_Z * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shape_Point_Z_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shape_Point_Z, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shape_Point_ZM(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape_Point_ZM *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Shape_Point_ZM",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Shape_Point_ZM" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Shape_Point_ZM" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Shape_Point_ZM *)new CSG_Shape_Point_ZM(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape_Point_ZM, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_ZM_Set_M__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_ZM *arg1 = (CSG_Shape_Point_ZM *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Point_ZM_Set_M",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_ZM_Set_M" "', argument " "1"" of type '" "CSG_Shape_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_ZM_Set_M" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_ZM_Set_M" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Point_ZM_Set_M" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  (arg1)->Set_M(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_ZM_Set_M__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_ZM *arg1 = (CSG_Shape_Point_ZM *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Point_ZM_Set_M",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_ZM_Set_M" "', argument " "1"" of type '" "CSG_Shape_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_ZM_Set_M" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_ZM_Set_M" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_M(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_ZM_Set_M(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point_ZM, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Point_ZM_Set_M__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point_ZM, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Point_ZM_Set_M__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Point_ZM_Set_M'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_M(CSG_Shape_Point_ZM *,double,int,int)\n"
+    "    Set_M(CSG_Shape_Point_ZM *,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_ZM_Get_M__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_ZM *arg1 = (CSG_Shape_Point_ZM *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Point_ZM_Get_M",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_ZM_Get_M" "', argument " "1"" of type '" "CSG_Shape_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_ZM_Get_M" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Point_ZM_Get_M" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)(arg1)->Get_M(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_ZM_Get_M__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_ZM *arg1 = (CSG_Shape_Point_ZM *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Point_ZM_Get_M",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_ZM_Get_M" "', argument " "1"" of type '" "CSG_Shape_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Point_ZM_Get_M" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_M(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_ZM_Get_M(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point_ZM, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Point_ZM_Get_M__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Point_ZM, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Point_ZM_Get_M__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Point_ZM_Get_M'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_M(CSG_Shape_Point_ZM *,int,int)\n"
+    "    Get_M(CSG_Shape_Point_ZM *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_ZM_Get_MMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_ZM *arg1 = (CSG_Shape_Point_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Point_ZM_Get_MMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_ZM_Get_MMin" "', argument " "1"" of type '" "CSG_Shape_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_ZM * >(argp1);
+  result = (double)(arg1)->Get_MMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Point_ZM_Get_MMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_ZM *arg1 = (CSG_Shape_Point_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Point_ZM_Get_MMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Point_ZM_Get_MMax" "', argument " "1"" of type '" "CSG_Shape_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_ZM * >(argp1);
+  result = (double)(arg1)->Get_MMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Shape_Point_ZM(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Point_ZM *arg1 = (CSG_Shape_Point_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Shape_Point_ZM",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Point_ZM, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Shape_Point_ZM" "', argument " "1"" of type '" "CSG_Shape_Point_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Point_ZM * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shape_Point_ZM_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shape_Point_ZM, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Get_Owner(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shape_Points *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_Get_Owner",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Get_Owner" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  result = (CSG_Shape_Points *)(arg1)->Get_Owner();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Destroy" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  CSG_Shape_Part *arg2 = (CSG_Shape_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Part_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Assign" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Part_Assign" "', argument " "2"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape_Part * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Get_Extent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_Get_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Get_Extent" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  result = (CSG_Rect *) &(arg1)->Get_Extent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Get_Count" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  result = (int)(arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Get_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Part_Get_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Get_Point" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (arg1)->Get_Point(arg2);
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Add_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Part_Add_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Add_Point" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Part_Add_Point" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Part_Add_Point" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (int)(arg1)->Add_Point(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Ins_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Part_Ins_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Ins_Point" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Part_Ins_Point" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Part_Ins_Point" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Part_Ins_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)(arg1)->Ins_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Set_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Part_Set_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Set_Point" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Part_Set_Point" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Part_Set_Point" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Part_Set_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)(arg1)->Set_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Add_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Part_Add_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Add_Point" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_Add_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Part_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (int)(arg1)->Add_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Add_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Part, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shape_Part_Add_Point__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Part, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Part_Add_Point__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Part_Add_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Point(CSG_Shape_Part *,TSG_Point)\n"
+    "    Add_Point(CSG_Shape_Part *,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Ins_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Part_Ins_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Ins_Point" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_Ins_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Part_Ins_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Part_Ins_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Ins_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Ins_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Part, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Part_Ins_Point__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Part, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Part_Ins_Point__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Part_Ins_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Ins_Point(CSG_Shape_Part *,TSG_Point,int)\n"
+    "    Ins_Point(CSG_Shape_Part *,double,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Set_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Part_Set_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Set_Point" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_Set_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Part_Set_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Part_Set_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Set_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Set_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Part, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Part_Set_Point__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Part, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Part_Set_Point__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Part_Set_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Point(CSG_Shape_Part *,TSG_Point,int)\n"
+    "    Set_Point(CSG_Shape_Part *,double,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Del_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Part_Del_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Del_Point" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_Del_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Del_Point(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Set_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Part_Set_Z",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Set_Z" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_Set_Z" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Part_Set_Z" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_Z(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Get_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Part_Get_Z",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Get_Z" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_Get_Z" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_Z(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Get_ZMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_Get_ZMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Get_ZMin" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  result = (double)(arg1)->Get_ZMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Get_ZMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_Get_ZMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Get_ZMax" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  result = (double)(arg1)->Get_ZMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Set_M(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Part_Set_M",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Set_M" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_Set_M" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Part_Set_M" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_M(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Get_M(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Part_Get_M",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Get_M" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_Get_M" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_M(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Get_MMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_Get_MMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Get_MMin" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  result = (double)(arg1)->Get_MMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Get_MMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part *arg1 = (CSG_Shape_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_Get_MMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Get_MMax" "', argument " "1"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part * >(argp1);
+  result = (double)(arg1)->Get_MMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shape_Part_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shape_Part, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Z_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_Z *arg1 = (CSG_Shape_Part_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_Z_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Z_Destroy" "', argument " "1"" of type '" "CSG_Shape_Part_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_Z * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Z_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_Z *arg1 = (CSG_Shape_Part_Z *) 0 ;
+  CSG_Shape_Part *arg2 = (CSG_Shape_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Part_Z_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Z_Assign" "', argument " "1"" of type '" "CSG_Shape_Part_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_Z * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Part_Z_Assign" "', argument " "2"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape_Part * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Z_Set_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_Z *arg1 = (CSG_Shape_Part_Z *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Part_Z_Set_Z",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Z_Set_Z" "', argument " "1"" of type '" "CSG_Shape_Part_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_Z * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_Z_Set_Z" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Part_Z_Set_Z" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_Z(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Z_Get_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_Z *arg1 = (CSG_Shape_Part_Z *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Part_Z_Get_Z",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Z_Get_Z" "', argument " "1"" of type '" "CSG_Shape_Part_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_Z * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_Z_Get_Z" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_Z(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Z_Get_ZMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_Z *arg1 = (CSG_Shape_Part_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_Z_Get_ZMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Z_Get_ZMin" "', argument " "1"" of type '" "CSG_Shape_Part_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_Z * >(argp1);
+  result = (double)(arg1)->Get_ZMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_Z_Get_ZMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_Z *arg1 = (CSG_Shape_Part_Z *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_Z_Get_ZMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_Z, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_Z_Get_ZMax" "', argument " "1"" of type '" "CSG_Shape_Part_Z *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_Z * >(argp1);
+  result = (double)(arg1)->Get_ZMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shape_Part_Z_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shape_Part_Z, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_ZM_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_ZM *arg1 = (CSG_Shape_Part_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_ZM_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_ZM_Destroy" "', argument " "1"" of type '" "CSG_Shape_Part_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_ZM * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_ZM_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_ZM *arg1 = (CSG_Shape_Part_ZM *) 0 ;
+  CSG_Shape_Part *arg2 = (CSG_Shape_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Part_ZM_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_ZM_Assign" "', argument " "1"" of type '" "CSG_Shape_Part_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_ZM * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Part_ZM_Assign" "', argument " "2"" of type '" "CSG_Shape_Part *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape_Part * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_ZM_Set_M(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_ZM *arg1 = (CSG_Shape_Part_ZM *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Part_ZM_Set_M",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_ZM_Set_M" "', argument " "1"" of type '" "CSG_Shape_Part_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_ZM_Set_M" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Part_ZM_Set_M" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_M(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_ZM_Get_M(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_ZM *arg1 = (CSG_Shape_Part_ZM *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Part_ZM_Get_M",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_ZM_Get_M" "', argument " "1"" of type '" "CSG_Shape_Part_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_ZM * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Part_ZM_Get_M" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_M(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_ZM_Get_MMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_ZM *arg1 = (CSG_Shape_Part_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_ZM_Get_MMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_ZM_Get_MMin" "', argument " "1"" of type '" "CSG_Shape_Part_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_ZM * >(argp1);
+  result = (double)(arg1)->Get_MMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Part_ZM_Get_MMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Part_ZM *arg1 = (CSG_Shape_Part_ZM *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Part_ZM_Get_MMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Part_ZM, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Part_ZM_Get_MMax" "', argument " "1"" of type '" "CSG_Shape_Part_ZM *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Part_ZM * >(argp1);
+  result = (double)(arg1)->Get_MMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shape_Part_ZM_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shape_Part_ZM, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Points_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Destroy" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Points_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_is_Valid" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  result = (bool)(arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Add_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Points_Add_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Add_Point" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Add_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Points_Add_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Add_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Add_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Points_Add_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Add_Point" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Add_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (int)(arg1)->Add_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Add_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Points_Add_Point__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Points_Add_Point__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Points_Add_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Point(CSG_Shape_Points *,double,double,int)\n"
+    "    Add_Point(CSG_Shape_Points *,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Ins_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Shape_Points_Ins_Point",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Ins_Point" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Ins_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Ins_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Points_Ins_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shape_Points_Ins_Point" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (int)(arg1)->Ins_Point(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Ins_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Points_Ins_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Ins_Point" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Ins_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Ins_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Points_Ins_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Ins_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Ins_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Points_Ins_Point__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Shape_Points_Ins_Point__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Points_Ins_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Ins_Point(CSG_Shape_Points *,double,double,int,int)\n"
+    "    Ins_Point(CSG_Shape_Points *,double,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Set_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Shape_Points_Set_Point",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Set_Point" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Set_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Set_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Points_Set_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shape_Points_Set_Point" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (int)(arg1)->Set_Point(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Set_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Points_Set_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Set_Point" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Set_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Set_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Points_Set_Point" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Set_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Set_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Points_Set_Point__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Shape_Points_Set_Point__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Points_Set_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Point(CSG_Shape_Points *,double,double,int,int)\n"
+    "    Set_Point(CSG_Shape_Points *,double,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Del_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Points_Del_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Del_Point" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Del_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Del_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (int)(arg1)->Del_Point(arg2,arg3);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Del_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Points_Del_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Del_Point" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Del_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Del_Point(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Del_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Points_Del_Point__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Points_Del_Point__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Points_Del_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Del_Point(CSG_Shape_Points *,int,int)\n"
+    "    Del_Point(CSG_Shape_Points *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Del_Part(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Points_Del_Part",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Del_Part" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Del_Part" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Del_Part(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Del_Parts(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Points_Del_Parts",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Del_Parts" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  result = (int)(arg1)->Del_Parts();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Part_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Points_Get_Part_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Part_Count" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  result = (int)(arg1)->Get_Part_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Part(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape_Part *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Points_Get_Part",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Part" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Get_Part" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Shape_Part *)(arg1)->Get_Part(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape_Part, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Point_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Points_Get_Point_Count",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Point_Count" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Get_Point_Count" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Get_Point_Count(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Points_Get_Point",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Point" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Get_Point" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (arg1)->Get_Point(arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Points_Get_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Point" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (arg1)->Get_Point(arg2);
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Points_Get_Point__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Points_Get_Point__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Points_Get_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Point(CSG_Shape_Points *,int,int)\n"
+    "    Get_Point(CSG_Shape_Points *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Set_Z__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Points_Set_Z",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Set_Z" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Set_Z" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Set_Z" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Points_Set_Z" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  (arg1)->Set_Z(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Set_Z__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Points_Set_Z",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Set_Z" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Set_Z" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Set_Z" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_Z(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Set_Z(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Points_Set_Z__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Points_Set_Z__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Points_Set_Z'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Z(CSG_Shape_Points *,double,int,int)\n"
+    "    Set_Z(CSG_Shape_Points *,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Z__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Points_Get_Z",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Z" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Get_Z" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Get_Z" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)(arg1)->Get_Z(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Z__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Points_Get_Z",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Z" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Get_Z" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_Z(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Z(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Points_Get_Z__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Points_Get_Z__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Points_Get_Z'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Z(CSG_Shape_Points *,int,int)\n"
+    "    Get_Z(CSG_Shape_Points *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_ZMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Points_Get_ZMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_ZMin" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  result = (double)(arg1)->Get_ZMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_ZMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Points_Get_ZMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_ZMax" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  result = (double)(arg1)->Get_ZMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Set_M__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Points_Set_M",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Set_M" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Set_M" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Set_M" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Points_Set_M" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  (arg1)->Set_M(arg2,arg3,arg4);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Set_M__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  double arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Points_Set_M",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Set_M" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Set_M" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Set_M" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  (arg1)->Set_M(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Set_M(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Points_Set_M__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Points_Set_M__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Points_Set_M'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_M(CSG_Shape_Points *,double,int,int)\n"
+    "    Set_M(CSG_Shape_Points *,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_M__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Points_Get_M",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_M" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Get_M" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Get_M" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)(arg1)->Get_M(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_M__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Points_Get_M",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_M" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Points_Get_M" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_M(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_M(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Points_Get_M__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Points_Get_M__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Points_Get_M'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_M(CSG_Shape_Points *,int,int)\n"
+    "    Get_M(CSG_Shape_Points *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_MMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Points_Get_MMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_MMin" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  result = (double)(arg1)->Get_MMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_MMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Points_Get_MMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_MMax" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  result = (double)(arg1)->Get_MMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Extent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Points_Get_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Extent" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  result = (CSG_Rect *) &(arg1)->Get_Extent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Distance__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Points_Get_Distance",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (double)(arg1)->Get_Distance(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Distance__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  TSG_Point arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Points_Get_Distance",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)(arg1)->Get_Distance(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Distance__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  TSG_Point arg2 ;
+  TSG_Point *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Points_Get_Distance",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  result = (double)(arg1)->Get_Distance(arg2,*arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Distance__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Points *arg1 = (CSG_Shape_Points *) 0 ;
+  TSG_Point arg2 ;
+  TSG_Point *arg3 = 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Points_Get_Distance",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Points, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "1"" of type '" "CSG_Shape_Points *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Points * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Points_Get_Distance" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (double)(arg1)->Get_Distance(arg2,*arg3,arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Points_Get_Distance(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shape_Points_Get_Distance__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_SSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Shape_Points_Get_Distance__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Points_Get_Distance__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Points, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_SSG_Point, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Points_Get_Distance__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Points_Get_Distance'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Distance(CSG_Shape_Points *,TSG_Point)\n"
+    "    Get_Distance(CSG_Shape_Points *,TSG_Point,int)\n"
+    "    Get_Distance(CSG_Shape_Points *,TSG_Point,TSG_Point &)\n"
+    "    Get_Distance(CSG_Shape_Points *,TSG_Point,TSG_Point &,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shape_Points_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shape_Points, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Line_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Line *arg1 = (CSG_Shape_Line *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Line_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Line, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Line_is_Valid" "', argument " "1"" of type '" "CSG_Shape_Line *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Line * >(argp1);
+  result = (bool)(arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Line_Get_Length__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Line *arg1 = (CSG_Shape_Line *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Line_Get_Length",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Line, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Line_Get_Length" "', argument " "1"" of type '" "CSG_Shape_Line *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Line * >(argp1);
+  result = (double)(arg1)->Get_Length();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Line_Get_Length__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Line *arg1 = (CSG_Shape_Line *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Line_Get_Length",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Line, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Line_Get_Length" "', argument " "1"" of type '" "CSG_Shape_Line *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Line * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Line_Get_Length" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_Length(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Line_Get_Length(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Line, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Shape_Line_Get_Length__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Line, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Line_Get_Length__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Line_Get_Length'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Length(CSG_Shape_Line *)\n"
+    "    Get_Length(CSG_Shape_Line *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Line_Get_Distance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Line *arg1 = (CSG_Shape_Line *) 0 ;
+  TSG_Point arg2 ;
+  TSG_Point *arg3 = 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Line_Get_Distance",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Line, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Line_Get_Distance" "', argument " "1"" of type '" "CSG_Shape_Line *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Line * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Line_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Line_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shape_Line_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Line_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Line_Get_Distance" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (double)(arg1)->Get_Distance(arg2,*arg3,arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shape_Line_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shape_Line, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Part_is_Clockwise(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon_Part *arg1 = (CSG_Shape_Polygon_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Polygon_Part_is_Clockwise",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Part_is_Clockwise" "', argument " "1"" of type '" "CSG_Shape_Polygon_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon_Part * >(argp1);
+  result = (bool)(arg1)->is_Clockwise();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Part_Get_Perimeter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon_Part *arg1 = (CSG_Shape_Polygon_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Polygon_Part_Get_Perimeter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Part_Get_Perimeter" "', argument " "1"" of type '" "CSG_Shape_Polygon_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon_Part * >(argp1);
+  result = (double)(arg1)->Get_Perimeter();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Part_Get_Area(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon_Part *arg1 = (CSG_Shape_Polygon_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Polygon_Part_Get_Area",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Part_Get_Area" "', argument " "1"" of type '" "CSG_Shape_Polygon_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon_Part * >(argp1);
+  result = (double)(arg1)->Get_Area();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Part_Get_Centroid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon_Part *arg1 = (CSG_Shape_Polygon_Part *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Point *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Polygon_Part_Get_Centroid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Part_Get_Centroid" "', argument " "1"" of type '" "CSG_Shape_Polygon_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon_Part * >(argp1);
+  result = (TSG_Point *) &(arg1)->Get_Centroid();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Point, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Part_is_Containing__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon_Part *arg1 = (CSG_Shape_Polygon_Part *) 0 ;
+  TSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Polygon_Part_is_Containing",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Part_is_Containing" "', argument " "1"" of type '" "CSG_Shape_Polygon_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon_Part * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Polygon_Part_is_Containing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Polygon_Part_is_Containing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  result = (bool)(arg1)->is_Containing((TSG_Point const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Part_is_Containing__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon_Part *arg1 = (CSG_Shape_Polygon_Part *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Polygon_Part_is_Containing",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Part_is_Containing" "', argument " "1"" of type '" "CSG_Shape_Polygon_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon_Part * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Polygon_Part_is_Containing" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Polygon_Part_is_Containing" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->is_Containing(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Part_is_Containing(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon_Part, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shape_Polygon_Part_is_Containing__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon_Part, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Polygon_Part_is_Containing__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Polygon_Part_is_Containing'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_Containing(CSG_Shape_Polygon_Part *,TSG_Point const &)\n"
+    "    is_Containing(CSG_Shape_Polygon_Part *,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Part_Get_Distance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon_Part *arg1 = (CSG_Shape_Polygon_Part *) 0 ;
+  TSG_Point arg2 ;
+  TSG_Point *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Polygon_Part_Get_Distance",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon_Part, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Part_Get_Distance" "', argument " "1"" of type '" "CSG_Shape_Polygon_Part *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon_Part * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Polygon_Part_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Polygon_Part_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shape_Polygon_Part_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Polygon_Part_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  result = (double)(arg1)->Get_Distance(arg2,*arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shape_Polygon_Part_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shape_Polygon_Part, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Polygon_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_is_Valid" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  result = (bool)(arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Get_Polygon_Part(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape_Polygon_Part *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Polygon_Get_Polygon_Part",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Get_Polygon_Part" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Polygon_Get_Polygon_Part" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Shape_Polygon_Part *)(arg1)->Get_Polygon_Part(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape_Polygon_Part, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_is_Lake(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Polygon_is_Lake",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_is_Lake" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Polygon_is_Lake" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->is_Lake(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_is_Clockwise(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Polygon_is_Clockwise",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_is_Clockwise" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Polygon_is_Clockwise" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->is_Clockwise(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Get_Perimeter__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Polygon_Get_Perimeter",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Get_Perimeter" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Polygon_Get_Perimeter" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_Perimeter(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Get_Perimeter__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Polygon_Get_Perimeter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Get_Perimeter" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  result = (double)(arg1)->Get_Perimeter();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Get_Perimeter(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Shape_Polygon_Get_Perimeter__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Polygon_Get_Perimeter__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Polygon_Get_Perimeter'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Perimeter(CSG_Shape_Polygon *,int)\n"
+    "    Get_Perimeter(CSG_Shape_Polygon *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Get_Area__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Polygon_Get_Area",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Get_Area" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Polygon_Get_Area" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)(arg1)->Get_Area(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Get_Area__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Polygon_Get_Area",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Get_Area" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  result = (double)(arg1)->Get_Area();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Get_Area(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Shape_Polygon_Get_Area__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Polygon_Get_Area__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Polygon_Get_Area'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Area(CSG_Shape_Polygon *,int)\n"
+    "    Get_Area(CSG_Shape_Polygon *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Get_Centroid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Polygon_Get_Centroid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Get_Centroid" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Polygon_Get_Centroid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (arg1)->Get_Centroid(arg2);
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Get_Centroid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shape_Polygon_Get_Centroid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Get_Centroid" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  result = (arg1)->Get_Centroid();
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Get_Centroid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Shape_Polygon_Get_Centroid__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shape_Polygon_Get_Centroid__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Polygon_Get_Centroid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Centroid(CSG_Shape_Polygon *,int)\n"
+    "    Get_Centroid(CSG_Shape_Polygon *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_is_Containing__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  TSG_Point *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Polygon_is_Containing",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->is_Containing((TSG_Point const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_is_Containing__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  TSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shape_Polygon_is_Containing",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  result = (bool)(arg1)->is_Containing((TSG_Point const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_is_Containing__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Polygon_is_Containing",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->is_Containing(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_is_Containing__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shape_Polygon_is_Containing",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shape_Polygon_is_Containing" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->is_Containing(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_is_Containing(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shape_Polygon_is_Containing__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Polygon_is_Containing__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shape_Polygon_is_Containing__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shape_Polygon, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shape_Polygon_is_Containing__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shape_Polygon_is_Containing'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_Containing(CSG_Shape_Polygon *,TSG_Point const &,int)\n"
+    "    is_Containing(CSG_Shape_Polygon *,TSG_Point const &)\n"
+    "    is_Containing(CSG_Shape_Polygon *,double,double,int)\n"
+    "    is_Containing(CSG_Shape_Polygon *,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shape_Polygon_Get_Distance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape_Polygon *arg1 = (CSG_Shape_Polygon *) 0 ;
+  TSG_Point arg2 ;
+  TSG_Point *arg3 = 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shape_Polygon_Get_Distance",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape_Polygon, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shape_Polygon_Get_Distance" "', argument " "1"" of type '" "CSG_Shape_Polygon *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape_Polygon * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shape_Polygon_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Polygon_Get_Distance" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shape_Polygon_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shape_Polygon_Get_Distance" "', argument " "3"" of type '" "TSG_Point &""'"); 
+  }
+  arg3 = reinterpret_cast< TSG_Point * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shape_Polygon_Get_Distance" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (double)(arg1)->Get_Distance(arg2,*arg3,arg4);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shape_Polygon_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shape_Polygon, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Shapes")) SWIG_fail;
+  result = (CSG_Shapes *)new CSG_Shapes();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Shapes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Shapes,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Shapes" "', argument " "1"" of type '" "CSG_Shapes const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Shapes" "', argument " "1"" of type '" "CSG_Shapes const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (CSG_Shapes *)new CSG_Shapes((CSG_Shapes const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  CSG_Shapes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Create" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Shapes,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Create" "', argument " "2"" of type '" "CSG_Shapes const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_Create" "', argument " "2"" of type '" "CSG_Shapes const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shapes * >(argp2);
+  result = (bool)(arg1)->Create((CSG_Shapes const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Shapes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Shapes" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Shapes" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_Shapes *)new CSG_Shapes((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Create" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Shape_Type arg1 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  CSG_Table *arg3 = (CSG_Table *) 0 ;
+  TSG_Vertex_Type arg4 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_CSG_Shapes",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Shapes" "', argument " "1"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg1 = static_cast< TSG_Shape_Type >(val1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Shapes" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_CSG_Shapes" "', argument " "3"" of type '" "CSG_Table *""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Table * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_CSG_Shapes" "', argument " "4"" of type '" "TSG_Vertex_Type""'");
+  } 
+  arg4 = static_cast< TSG_Vertex_Type >(val4);
+  result = (CSG_Shapes *)new CSG_Shapes(arg1,(wchar_t const *)arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, SWIG_POINTER_NEW |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Shape_Type arg1 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  CSG_Table *arg3 = (CSG_Table *) 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Shapes",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Shapes" "', argument " "1"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg1 = static_cast< TSG_Shape_Type >(val1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Shapes" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_CSG_Shapes" "', argument " "3"" of type '" "CSG_Table *""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Table * >(argp3);
+  result = (CSG_Shapes *)new CSG_Shapes(arg1,(wchar_t const *)arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, SWIG_POINTER_NEW |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Shape_Type arg1 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Shapes",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Shapes" "', argument " "1"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg1 = static_cast< TSG_Shape_Type >(val1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Shapes" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (CSG_Shapes *)new CSG_Shapes(arg1,(wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, SWIG_POINTER_NEW |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Shape_Type arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Shapes",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CSG_Shapes" "', argument " "1"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg1 = static_cast< TSG_Shape_Type >(val1);
+  result = (CSG_Shapes *)new CSG_Shapes(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Shapes__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Shapes__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Shapes__SWIG_2(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CSG_Shapes__SWIG_6(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_new_CSG_Shapes__SWIG_5(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_CSG_Table, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_new_CSG_Shapes__SWIG_4(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_CSG_Table, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_CSG_Shapes__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Shapes'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Shapes()\n"
+    "    CSG_Shapes(CSG_Shapes const &)\n"
+    "    CSG_Shapes(CSG_String const &)\n"
+    "    CSG_Shapes(TSG_Shape_Type,wchar_t const *,CSG_Table *,TSG_Vertex_Type)\n"
+    "    CSG_Shapes(TSG_Shape_Type,wchar_t const *,CSG_Table *)\n"
+    "    CSG_Shapes(TSG_Shape_Type,wchar_t const *)\n"
+    "    CSG_Shapes(TSG_Shape_Type)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  TSG_Shape_Type arg2 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  CSG_Table *arg4 = (CSG_Table *) 0 ;
+  TSG_Vertex_Type arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Shapes_Create",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Create" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Create" "', argument " "2"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg2 = static_cast< TSG_Shape_Type >(val2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shapes_Create" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Shapes_Create" "', argument " "4"" of type '" "CSG_Table *""'"); 
+  }
+  arg4 = reinterpret_cast< CSG_Table * >(argp4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shapes_Create" "', argument " "5"" of type '" "TSG_Vertex_Type""'");
+  } 
+  arg5 = static_cast< TSG_Vertex_Type >(val5);
+  result = (bool)(arg1)->Create(arg2,(wchar_t const *)arg3,arg4,arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Create__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  TSG_Shape_Type arg2 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  CSG_Table *arg4 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shapes_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Create" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Create" "', argument " "2"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg2 = static_cast< TSG_Shape_Type >(val2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shapes_Create" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Shapes_Create" "', argument " "4"" of type '" "CSG_Table *""'"); 
+  }
+  arg4 = reinterpret_cast< CSG_Table * >(argp4);
+  result = (bool)(arg1)->Create(arg2,(wchar_t const *)arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Create__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  TSG_Shape_Type arg2 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shapes_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Create" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Create" "', argument " "2"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg2 = static_cast< TSG_Shape_Type >(val2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Shapes_Create" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (bool)(arg1)->Create(arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Create__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  TSG_Shape_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Create" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Create" "', argument " "2"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg2 = static_cast< TSG_Shape_Type >(val2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Shapes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shapes_Create__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shapes_Create__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shapes_Create__SWIG_5(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Shapes_Create__SWIG_4(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_CSG_Table, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Shapes_Create__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_CSG_Table, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Shapes_Create__SWIG_2(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shapes_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Shapes *,CSG_Shapes const &)\n"
+    "    Create(CSG_Shapes *,CSG_String const &)\n"
+    "    Create(CSG_Shapes *,TSG_Shape_Type,wchar_t const *,CSG_Table *,TSG_Vertex_Type)\n"
+    "    Create(CSG_Shapes *,TSG_Shape_Type,wchar_t const *,CSG_Table *)\n"
+    "    Create(CSG_Shapes *,TSG_Shape_Type,wchar_t const *)\n"
+    "    Create(CSG_Shapes *,TSG_Shape_Type)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Shapes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Shapes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Shapes" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Destroy" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_ObjectType(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Data_Object_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Get_ObjectType",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_ObjectType" "', argument " "1"" of type '" "CSG_Shapes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (TSG_Data_Object_Type)((CSG_Shapes const *)arg1)->Get_ObjectType();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  CSG_Data_Object *arg2 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Assign" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Assign" "', argument " "2"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Data_Object * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Save__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shapes_Save",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Save" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Save" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Save__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Save",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Save" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Save(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shapes_Save__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shapes_Save__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shapes_Save'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Save(CSG_Shapes *,CSG_String const &,int)\n"
+    "    Save(CSG_Shapes *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_is_Valid" "', argument " "1"" of type '" "CSG_Shapes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (bool)((CSG_Shapes const *)arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Shape_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_Type" "', argument " "1"" of type '" "CSG_Shapes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (TSG_Shape_Type)((CSG_Shapes const *)arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Vertex_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Vertex_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Get_Vertex_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_Vertex_Type" "', argument " "1"" of type '" "CSG_Shapes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (TSG_Vertex_Type)((CSG_Shapes const *)arg1)->Get_Vertex_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Extent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Get_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_Extent" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (CSG_Rect *) &(arg1)->Get_Extent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_ZMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Get_ZMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_ZMin" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (double)(arg1)->Get_ZMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_ZMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Get_ZMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_ZMax" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (double)(arg1)->Get_ZMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_MMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Get_MMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_MMin" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (double)(arg1)->Get_MMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_MMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Get_MMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_MMax" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (double)(arg1)->Get_MMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Add_Shape__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  CSG_Table_Record *arg2 = (CSG_Table_Record *) 0 ;
+  TSG_ADD_Shape_Copy_Mode arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shapes_Add_Shape",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Add_Shape" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Add_Shape" "', argument " "2"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table_Record * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Add_Shape" "', argument " "3"" of type '" "TSG_ADD_Shape_Copy_Mode""'");
+  } 
+  arg3 = static_cast< TSG_ADD_Shape_Copy_Mode >(val3);
+  result = (CSG_Shape *)(arg1)->Add_Shape(arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Add_Shape__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  CSG_Table_Record *arg2 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Add_Shape",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Add_Shape" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Add_Shape" "', argument " "2"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table_Record * >(argp2);
+  result = (CSG_Shape *)(arg1)->Add_Shape(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Add_Shape__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Add_Shape",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Add_Shape" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (CSG_Shape *)(arg1)->Add_Shape();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Add_Shape(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Shapes_Add_Shape__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shapes_Add_Shape__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shapes_Add_Shape__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shapes_Add_Shape'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Shape(CSG_Shapes *,CSG_Table_Record *,TSG_ADD_Shape_Copy_Mode)\n"
+    "    Add_Shape(CSG_Shapes *,CSG_Table_Record *)\n"
+    "    Add_Shape(CSG_Shapes *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Del_Shape__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Del_Shape",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Del_Shape" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Del_Shape" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del_Shape(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Del_Shape__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  CSG_Shape *arg2 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Del_Shape",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Del_Shape" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Del_Shape" "', argument " "2"" of type '" "CSG_Shape *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape * >(argp2);
+  result = (bool)(arg1)->Del_Shape(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Del_Shape(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shapes_Del_Shape__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shapes_Del_Shape__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shapes_Del_Shape'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Del_Shape(CSG_Shapes *,int)\n"
+    "    Del_Shape(CSG_Shapes *,CSG_Shape *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Del_Shapes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Del_Shapes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Del_Shapes" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (bool)(arg1)->Del_Shapes();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Shape__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  TSG_Point arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shapes_Get_Shape",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_Shape" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Get_Shape" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_Get_Shape" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Get_Shape" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (CSG_Shape *)(arg1)->Get_Shape(arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Shape__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Get_Shape",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_Shape" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Get_Shape" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_Get_Shape" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (CSG_Shape *)(arg1)->Get_Shape(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Shape__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Get_Shape",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_Shape" "', argument " "1"" of type '" "CSG_Shapes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Get_Shape" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Shape *)((CSG_Shapes const *)arg1)->Get_Shape(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Shape(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shapes_Get_Shape__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shapes_Get_Shape__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shapes_Get_Shape__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shapes_Get_Shape'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Shape(CSG_Shapes *,TSG_Point,double)\n"
+    "    Get_Shape(CSG_Shapes *,TSG_Point)\n"
+    "    Get_Shape(CSG_Shapes const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Shape_byIndex(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Get_Shape_byIndex",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_Shape_byIndex" "', argument " "1"" of type '" "CSG_Shapes const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Get_Shape_byIndex" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Shape *)((CSG_Shapes const *)arg1)->Get_Shape_byIndex(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Make_Clean(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Make_Clean",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Make_Clean" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (bool)(arg1)->Make_Clean();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Selection__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Get_Selection",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_Selection" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Get_Selection" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Shape *)(arg1)->Get_Selection(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Selection__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Get_Selection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_Selection" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (CSG_Shape *)(arg1)->Get_Selection();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Selection(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Shapes_Get_Selection__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Shapes_Get_Selection__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shapes_Get_Selection'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Selection(CSG_Shapes *,int)\n"
+    "    Get_Selection(CSG_Shapes *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Get_Selection_Extent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Get_Selection_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Get_Selection_Extent" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (CSG_Rect *) &(arg1)->Get_Selection_Extent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Select__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  CSG_Shape *arg2 = (CSG_Shape *) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shapes_Select",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Select" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Select" "', argument " "2"" of type '" "CSG_Shape *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Select" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Select(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Select__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  CSG_Shape *arg2 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Select",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Select" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Select" "', argument " "2"" of type '" "CSG_Shape *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape * >(argp2);
+  result = (bool)(arg1)->Select(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Select__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Select",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Select" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (bool)(arg1)->Select();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Select__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  TSG_Rect arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shapes_Select",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Select" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Rect,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Select" "', argument " "2"" of type '" "TSG_Rect""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_Select" "', argument " "2"" of type '" "TSG_Rect""'");
+    } else {
+      TSG_Rect * temp = reinterpret_cast< TSG_Rect * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Select" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Select(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Select__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  TSG_Rect arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Select",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Select" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Rect,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Select" "', argument " "2"" of type '" "TSG_Rect""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_Select" "', argument " "2"" of type '" "TSG_Rect""'");
+    } else {
+      TSG_Rect * temp = reinterpret_cast< TSG_Rect * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (bool)(arg1)->Select(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Select__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  TSG_Point arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shapes_Select",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Select" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Select" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_Select" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Select" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Select(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Select__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Select",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Select" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Select" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_Select" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (bool)(arg1)->Select(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Select(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Shapes_Select__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shapes_Select__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shapes_Select__SWIG_4(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Shapes_Select__SWIG_6(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shapes_Select__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shapes_Select__SWIG_5(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shapes_Select__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shapes_Select'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Select(CSG_Shapes *,CSG_Shape *,bool)\n"
+    "    Select(CSG_Shapes *,CSG_Shape *)\n"
+    "    Select(CSG_Shapes *)\n"
+    "    Select(CSG_Shapes *,TSG_Rect,bool)\n"
+    "    Select(CSG_Shapes *,TSG_Rect)\n"
+    "    Select(CSG_Shapes *,TSG_Point,bool)\n"
+    "    Select(CSG_Shapes *,TSG_Point)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shapes_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shapes, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Create_Shapes__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Create_Shapes")) SWIG_fail;
+  result = (CSG_Shapes *)SG_Create_Shapes();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Shapes__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_Shapes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Shapes,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Shapes" "', argument " "1"" of type '" "CSG_Shapes const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_Shapes" "', argument " "1"" of type '" "CSG_Shapes const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (CSG_Shapes *)SG_Create_Shapes((CSG_Shapes const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Shapes__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_Shapes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Shapes" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_Shapes" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_Shapes *)SG_Create_Shapes((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Shapes__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Shape_Type arg1 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  CSG_Table *arg3 = (CSG_Table *) 0 ;
+  TSG_Vertex_Type arg4 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:SG_Create_Shapes",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Create_Shapes" "', argument " "1"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg1 = static_cast< TSG_Shape_Type >(val1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Create_Shapes" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SG_Create_Shapes" "', argument " "3"" of type '" "CSG_Table *""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Table * >(argp3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "SG_Create_Shapes" "', argument " "4"" of type '" "TSG_Vertex_Type""'");
+  } 
+  arg4 = static_cast< TSG_Vertex_Type >(val4);
+  result = (CSG_Shapes *)SG_Create_Shapes(arg1,(wchar_t const *)arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Shapes__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Shape_Type arg1 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  CSG_Table *arg3 = (CSG_Table *) 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SG_Create_Shapes",&obj0,&obj1,&obj2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Create_Shapes" "', argument " "1"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg1 = static_cast< TSG_Shape_Type >(val1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Create_Shapes" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SG_Create_Shapes" "', argument " "3"" of type '" "CSG_Table *""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Table * >(argp3);
+  result = (CSG_Shapes *)SG_Create_Shapes(arg1,(wchar_t const *)arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Shapes__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Shape_Type arg1 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SG_Create_Shapes",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Create_Shapes" "', argument " "1"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg1 = static_cast< TSG_Shape_Type >(val1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SG_Create_Shapes" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (CSG_Shapes *)SG_Create_Shapes(arg1,(wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Shapes__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Shape_Type arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_Shapes",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Create_Shapes" "', argument " "1"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg1 = static_cast< TSG_Shape_Type >(val1);
+  result = (CSG_Shapes *)SG_Create_Shapes(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Shapes__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_Shapes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_Shapes" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (CSG_Shapes *)SG_Create_Shapes(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_Shapes(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_SG_Create_Shapes__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_Shapes__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_Shapes__SWIG_2(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_Shapes__SWIG_7(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_SG_Create_Shapes__SWIG_6(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_SG_Create_Shapes__SWIG_5(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_CSG_Table, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_SG_Create_Shapes__SWIG_4(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    {
+      int res = SWIG_AsVal_int(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_CSG_Table, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_SG_Create_Shapes__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Create_Shapes'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Create_Shapes()\n"
+    "    SG_Create_Shapes(CSG_Shapes const &)\n"
+    "    SG_Create_Shapes(CSG_String const &)\n"
+    "    SG_Create_Shapes(TSG_Shape_Type,wchar_t const *,CSG_Table *,TSG_Vertex_Type)\n"
+    "    SG_Create_Shapes(TSG_Shape_Type,wchar_t const *,CSG_Table *)\n"
+    "    SG_Create_Shapes(TSG_Shape_Type,wchar_t const *)\n"
+    "    SG_Create_Shapes(TSG_Shape_Type)\n"
+    "    SG_Create_Shapes(CSG_Shapes *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_is_Leaf(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_is_Leaf",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_is_Leaf" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = (bool)((CSG_PRQuadTree_Item const *)arg1)->is_Leaf();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_is_Node(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_is_Node",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_is_Node" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = (bool)((CSG_PRQuadTree_Item const *)arg1)->is_Node();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_Get_Extent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_Get_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_Get_Extent" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = ((CSG_PRQuadTree_Item const *)arg1)->Get_Extent();
+  resultobj = SWIG_NewPointerObj((new CSG_Rect(static_cast< const CSG_Rect& >(result))), SWIGTYPE_p_CSG_Rect, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_Get_xMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_Get_xMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_Get_xMin" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = (double)((CSG_PRQuadTree_Item const *)arg1)->Get_xMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_Get_yMin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_Get_yMin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_Get_yMin" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = (double)((CSG_PRQuadTree_Item const *)arg1)->Get_yMin();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_Get_xCenter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_Get_xCenter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_Get_xCenter" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = (double)((CSG_PRQuadTree_Item const *)arg1)->Get_xCenter();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_Get_yCenter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_Get_yCenter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_Get_yCenter" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = (double)((CSG_PRQuadTree_Item const *)arg1)->Get_yCenter();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_Get_xMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_Get_xMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_Get_xMax" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = (double)((CSG_PRQuadTree_Item const *)arg1)->Get_xMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_Get_yMax(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_Get_yMax",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_Get_yMax" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = (double)((CSG_PRQuadTree_Item const *)arg1)->Get_yMax();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_Get_Size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_Get_Size",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_Get_Size" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = (double)((CSG_PRQuadTree_Item const *)arg1)->Get_Size();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_Contains(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PRQuadTree_Item_Contains",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_Contains" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PRQuadTree_Item_Contains" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PRQuadTree_Item_Contains" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)((CSG_PRQuadTree_Item const *)arg1)->Contains(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_asLeaf(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PRQuadTree_Leaf *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_asLeaf",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_asLeaf" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = (CSG_PRQuadTree_Leaf *)((CSG_PRQuadTree_Item const *)arg1)->asLeaf();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PRQuadTree_Leaf, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Item_asNode(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PRQuadTree_Node *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Item_asNode",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Item_asNode" "', argument " "1"" of type '" "CSG_PRQuadTree_Item const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  result = (CSG_PRQuadTree_Node *)((CSG_PRQuadTree_Item const *)arg1)->asNode();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PRQuadTree_Node, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_PRQuadTree_Item(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Item *arg1 = (CSG_PRQuadTree_Item *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_PRQuadTree_Item",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Item, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_PRQuadTree_Item" "', argument " "1"" of type '" "CSG_PRQuadTree_Item *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Item * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_PRQuadTree_Item_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_PRQuadTree_Item, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Leaf_is_Leaf(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Leaf *arg1 = (CSG_PRQuadTree_Leaf *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Leaf_is_Leaf",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Leaf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Leaf_is_Leaf" "', argument " "1"" of type '" "CSG_PRQuadTree_Leaf const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Leaf * >(argp1);
+  result = (bool)((CSG_PRQuadTree_Leaf const *)arg1)->is_Leaf();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Leaf_Get_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Leaf *arg1 = (CSG_PRQuadTree_Leaf *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Point *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Leaf_Get_Point",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Leaf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Leaf_Get_Point" "', argument " "1"" of type '" "CSG_PRQuadTree_Leaf const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Leaf * >(argp1);
+  result = (TSG_Point *) &((CSG_PRQuadTree_Leaf const *)arg1)->Get_Point();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Point, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Leaf_Get_X(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Leaf *arg1 = (CSG_PRQuadTree_Leaf *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Leaf_Get_X",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Leaf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Leaf_Get_X" "', argument " "1"" of type '" "CSG_PRQuadTree_Leaf const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Leaf * >(argp1);
+  result = (double)((CSG_PRQuadTree_Leaf const *)arg1)->Get_X();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Leaf_Get_Y(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Leaf *arg1 = (CSG_PRQuadTree_Leaf *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Leaf_Get_Y",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Leaf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Leaf_Get_Y" "', argument " "1"" of type '" "CSG_PRQuadTree_Leaf const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Leaf * >(argp1);
+  result = (double)((CSG_PRQuadTree_Leaf const *)arg1)->Get_Y();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Leaf_Get_Z(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Leaf *arg1 = (CSG_PRQuadTree_Leaf *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Leaf_Get_Z",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Leaf, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Leaf_Get_Z" "', argument " "1"" of type '" "CSG_PRQuadTree_Leaf const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Leaf * >(argp1);
+  result = (double)((CSG_PRQuadTree_Leaf const *)arg1)->Get_Z();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_PRQuadTree_Leaf(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Leaf *arg1 = (CSG_PRQuadTree_Leaf *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_PRQuadTree_Leaf",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Leaf, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_PRQuadTree_Leaf" "', argument " "1"" of type '" "CSG_PRQuadTree_Leaf *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Leaf * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_PRQuadTree_Leaf_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_PRQuadTree_Leaf, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Node_is_Node(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Node *arg1 = (CSG_PRQuadTree_Node *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Node_is_Node",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Node_is_Node" "', argument " "1"" of type '" "CSG_PRQuadTree_Node const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Node * >(argp1);
+  result = (bool)((CSG_PRQuadTree_Node const *)arg1)->is_Node();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Node_Get_Child(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Node *arg1 = (CSG_PRQuadTree_Node *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_PRQuadTree_Item *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PRQuadTree_Node_Get_Child",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Node_Get_Child" "', argument " "1"" of type '" "CSG_PRQuadTree_Node const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Node * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PRQuadTree_Node_Get_Child" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_PRQuadTree_Item *)((CSG_PRQuadTree_Node const *)arg1)->Get_Child(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PRQuadTree_Item, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Node_Add_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree_Node *arg1 = (CSG_PRQuadTree_Node *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_PRQuadTree_Node_Add_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Node_Add_Point" "', argument " "1"" of type '" "CSG_PRQuadTree_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree_Node * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PRQuadTree_Node_Add_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PRQuadTree_Node_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_PRQuadTree_Node_Add_Point" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Add_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_PRQuadTree_Node_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_PRQuadTree_Node, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_PRQuadTree__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_PRQuadTree")) SWIG_fail;
+  result = (CSG_PRQuadTree *)new CSG_PRQuadTree();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PRQuadTree, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_PRQuadTree__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Rect *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PRQuadTree *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_PRQuadTree",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_SSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_PRQuadTree" "', argument " "1"" of type '" "TSG_Rect const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_PRQuadTree" "', argument " "1"" of type '" "TSG_Rect const &""'"); 
+  }
+  arg1 = reinterpret_cast< TSG_Rect * >(argp1);
+  result = (CSG_PRQuadTree *)new CSG_PRQuadTree((TSG_Rect const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PRQuadTree, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_PRQuadTree__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_PRQuadTree *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_PRQuadTree",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_PRQuadTree" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_PRQuadTree" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_PRQuadTree *)new CSG_PRQuadTree(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PRQuadTree, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_PRQuadTree(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_PRQuadTree__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_SSG_Rect, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_PRQuadTree__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_CSG_PRQuadTree__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_PRQuadTree'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_PRQuadTree()\n"
+    "    CSG_PRQuadTree(TSG_Rect const &)\n"
+    "    CSG_PRQuadTree(CSG_Shapes *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_PRQuadTree(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_PRQuadTree",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_PRQuadTree" "', argument " "1"" of type '" "CSG_PRQuadTree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  CSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PRQuadTree_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Create" "', argument " "1"" of type '" "CSG_PRQuadTree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PRQuadTree_Create" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PRQuadTree_Create" "', argument " "2"" of type '" "CSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Rect * >(argp2);
+  result = (bool)(arg1)->Create((CSG_Rect const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  CSG_Shapes *arg2 = (CSG_Shapes *) 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PRQuadTree_Create",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Create" "', argument " "1"" of type '" "CSG_PRQuadTree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PRQuadTree_Create" "', argument " "2"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shapes * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PRQuadTree_Create" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Create(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PRQuadTree, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PRQuadTree_Create__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PRQuadTree, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PRQuadTree_Create__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PRQuadTree_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_PRQuadTree *,CSG_Rect const &)\n"
+    "    Create(CSG_PRQuadTree *,CSG_Shapes *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Destroy" "', argument " "1"" of type '" "CSG_PRQuadTree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Add_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_PRQuadTree_Add_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Add_Point" "', argument " "1"" of type '" "CSG_PRQuadTree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PRQuadTree_Add_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PRQuadTree_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_PRQuadTree_Add_Point" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Add_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Get_Point_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Get_Point_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Get_Point_Count" "', argument " "1"" of type '" "CSG_PRQuadTree const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  result = (int)((CSG_PRQuadTree const *)arg1)->Get_Point_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Get_Root(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PRQuadTree_Node *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Get_Root",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Get_Root" "', argument " "1"" of type '" "CSG_PRQuadTree const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  result = (CSG_PRQuadTree_Node *) &((CSG_PRQuadTree const *)arg1)->Get_Root();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PRQuadTree_Node, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_is_Okay(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_is_Okay",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_is_Okay" "', argument " "1"" of type '" "CSG_PRQuadTree const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  result = (bool)((CSG_PRQuadTree const *)arg1)->is_Okay();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Get_Nearest_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  TSG_Point *arg4 = 0 ;
+  double *arg5 = 0 ;
+  double *arg6 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_PRQuadTree_Get_Nearest_Point",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Get_Nearest_Point" "', argument " "1"" of type '" "CSG_PRQuadTree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PRQuadTree_Get_Nearest_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PRQuadTree_Get_Nearest_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_PRQuadTree_Get_Nearest_Point" "', argument " "4"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PRQuadTree_Get_Nearest_Point" "', argument " "4"" of type '" "TSG_Point &""'"); 
+  }
+  arg4 = reinterpret_cast< TSG_Point * >(argp4);
+  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_PRQuadTree_Get_Nearest_Point" "', argument " "5"" of type '" "double &""'"); 
+  }
+  if (!argp5) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PRQuadTree_Get_Nearest_Point" "', argument " "5"" of type '" "double &""'"); 
+  }
+  arg5 = reinterpret_cast< double * >(argp5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_PRQuadTree_Get_Nearest_Point" "', argument " "6"" of type '" "double &""'"); 
+  }
+  if (!argp6) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PRQuadTree_Get_Nearest_Point" "', argument " "6"" of type '" "double &""'"); 
+  }
+  arg6 = reinterpret_cast< double * >(argp6);
+  result = (bool)(arg1)->Get_Nearest_Point(arg2,arg3,*arg4,*arg5,*arg6);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Select_Nearest_Points__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  double arg5 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_PRQuadTree_Select_Nearest_Points",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "1"" of type '" "CSG_PRQuadTree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (int)(arg1)->Select_Nearest_Points(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Select_Nearest_Points__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_PRQuadTree_Select_Nearest_Points",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "1"" of type '" "CSG_PRQuadTree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  result = (int)(arg1)->Select_Nearest_Points(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Select_Nearest_Points__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_PRQuadTree_Select_Nearest_Points",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "1"" of type '" "CSG_PRQuadTree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_PRQuadTree_Select_Nearest_Points" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (int)(arg1)->Select_Nearest_Points(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Select_Nearest_Points(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PRQuadTree, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_PRQuadTree_Select_Nearest_Points__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PRQuadTree, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_PRQuadTree_Select_Nearest_Points__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PRQuadTree, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_PRQuadTree_Select_Nearest_Points__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PRQuadTree_Select_Nearest_Points'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Select_Nearest_Points(CSG_PRQuadTree *,double,double,int,double,int)\n"
+    "    Select_Nearest_Points(CSG_PRQuadTree *,double,double,int,double)\n"
+    "    Select_Nearest_Points(CSG_PRQuadTree *,double,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Get_Selected_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PRQuadTree_Get_Selected_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Get_Selected_Count" "', argument " "1"" of type '" "CSG_PRQuadTree const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  result = (int)((CSG_PRQuadTree const *)arg1)->Get_Selected_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PRQuadTree_Get_Selected_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PRQuadTree *arg1 = (CSG_PRQuadTree *) 0 ;
+  int arg2 ;
+  double *arg3 = 0 ;
+  double *arg4 = 0 ;
+  double *arg5 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_PRQuadTree_Get_Selected_Point",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PRQuadTree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PRQuadTree_Get_Selected_Point" "', argument " "1"" of type '" "CSG_PRQuadTree const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PRQuadTree * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PRQuadTree_Get_Selected_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_PRQuadTree_Get_Selected_Point" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PRQuadTree_Get_Selected_Point" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_PRQuadTree_Get_Selected_Point" "', argument " "4"" of type '" "double &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PRQuadTree_Get_Selected_Point" "', argument " "4"" of type '" "double &""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_PRQuadTree_Get_Selected_Point" "', argument " "5"" of type '" "double &""'"); 
+  }
+  if (!argp5) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PRQuadTree_Get_Selected_Point" "', argument " "5"" of type '" "double &""'"); 
+  }
+  arg5 = reinterpret_cast< double * >(argp5);
+  result = (bool)((CSG_PRQuadTree const *)arg1)->Get_Selected_Point(arg2,*arg3,*arg4,*arg5);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_PRQuadTree_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_PRQuadTree, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes_Search__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Shapes_Search")) SWIG_fail;
+  result = (CSG_Shapes_Search *)new CSG_Shapes_Search();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes_Search, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes_Search__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shapes_Search *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Shapes_Search",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Shapes_Search" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (CSG_Shapes_Search *)new CSG_Shapes_Search(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes_Search, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes_Search(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Shapes_Search__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Shapes_Search__SWIG_1(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Shapes_Search'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Shapes_Search()\n"
+    "    CSG_Shapes_Search(CSG_Shapes *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Shapes_Search(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Shapes_Search",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Shapes_Search" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  CSG_Shapes *arg2 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Search_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Create" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_Search_Create" "', argument " "2"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shapes * >(argp2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Search_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Destroy" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Search_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_is_Valid" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  result = (bool)(arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Get_Point_Nearest__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Shapes_Search_Get_Point_Nearest",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Get_Point_Nearest" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Search_Get_Point_Nearest" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Search_Get_Point_Nearest" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (CSG_Shape *)(arg1)->Get_Point_Nearest(arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Get_Point_Nearest__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shapes_Search_Get_Point_Nearest",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Get_Point_Nearest" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Search_Get_Point_Nearest" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Search_Get_Point_Nearest" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shapes_Search_Get_Point_Nearest" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (CSG_Shape *)(arg1)->Get_Point_Nearest(arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Get_Point_Nearest(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes_Search, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Shapes_Search_Get_Point_Nearest__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes_Search, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shapes_Search_Get_Point_Nearest__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shapes_Search_Get_Point_Nearest'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Point_Nearest(CSG_Shapes_Search *,double,double)\n"
+    "    Get_Point_Nearest(CSG_Shapes_Search *,double,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Select_Radius__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  bool arg5 ;
+  int arg6 ;
+  int arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Shapes_Search_Select_Radius",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "7"" of type '" "int""'");
+  } 
+  arg7 = static_cast< int >(val7);
+  result = (int)(arg1)->Select_Radius(arg2,arg3,arg4,arg5,arg6,arg7);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Select_Radius__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  bool arg5 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Shapes_Search_Select_Radius",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (int)(arg1)->Select_Radius(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Select_Radius__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  bool arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Shapes_Search_Select_Radius",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  result = (int)(arg1)->Select_Radius(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Select_Radius__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Shapes_Search_Select_Radius",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shapes_Search_Select_Radius" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (int)(arg1)->Select_Radius(arg2,arg3,arg4);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Select_Radius(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes_Search, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Shapes_Search_Select_Radius__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes_Search, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Shapes_Search_Select_Radius__SWIG_2(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes_Search, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Shapes_Search_Select_Radius__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes_Search, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Shapes_Search_Select_Radius__SWIG_0(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shapes_Search_Select_Radius'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Select_Radius(CSG_Shapes_Search *,double,double,double,bool,int,int)\n"
+    "    Select_Radius(CSG_Shapes_Search *,double,double,double,bool,int)\n"
+    "    Select_Radius(CSG_Shapes_Search *,double,double,double,bool)\n"
+    "    Select_Radius(CSG_Shapes_Search *,double,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Select_Quadrants__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  int arg5 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Shapes_Search_Select_Quadrants",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Select_Quadrants" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Search_Select_Quadrants" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Search_Select_Quadrants" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shapes_Search_Select_Quadrants" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shapes_Search_Select_Quadrants" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Shapes_Search_Select_Quadrants" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (int)(arg1)->Select_Quadrants(arg2,arg3,arg4,arg5,arg6);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Select_Quadrants__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  int arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Shapes_Search_Select_Quadrants",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Select_Quadrants" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Search_Select_Quadrants" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Shapes_Search_Select_Quadrants" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Shapes_Search_Select_Quadrants" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_int(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CSG_Shapes_Search_Select_Quadrants" "', argument " "5"" of type '" "int""'");
+  } 
+  arg5 = static_cast< int >(val5);
+  result = (int)(arg1)->Select_Quadrants(arg2,arg3,arg4,arg5);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Select_Quadrants(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes_Search, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_CSG_Shapes_Search_Select_Quadrants__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes_Search, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            {
+              int res = SWIG_AsVal_int(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Shapes_Search_Select_Quadrants__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Shapes_Search_Select_Quadrants'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Select_Quadrants(CSG_Shapes_Search *,double,double,double,int,int)\n"
+    "    Select_Quadrants(CSG_Shapes_Search *,double,double,double,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Get_Selected_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Shapes_Search_Get_Selected_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Get_Selected_Count" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  result = (int)(arg1)->Get_Selected_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_Search_Get_Selected_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_Search *arg1 = (CSG_Shapes_Search *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_Search_Get_Selected_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_Search, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_Search_Get_Selected_Point" "', argument " "1"" of type '" "CSG_Shapes_Search *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_Search * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Shapes_Search_Get_Selected_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Shape *)(arg1)->Get_Selected_Point(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shapes_Search_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shapes_Search, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Shapes_OGIS_Converter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_OGIS_Converter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Shapes_OGIS_Converter")) SWIG_fail;
+  result = (CSG_Shapes_OGIS_Converter *)new CSG_Shapes_OGIS_Converter();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes_OGIS_Converter, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_OGIS_Converter_from_WKText(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  CSG_Shape *arg2 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_OGIS_Converter_from_WKText",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_OGIS_Converter_from_WKText" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_OGIS_Converter_from_WKText" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_OGIS_Converter_from_WKText" "', argument " "2"" of type '" "CSG_Shape *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape * >(argp2);
+  result = (bool)CSG_Shapes_OGIS_Converter::from_WKText((CSG_String const &)*arg1,arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_OGIS_Converter_to_WKText(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_OGIS_Converter_to_WKText",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_OGIS_Converter_to_WKText" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_OGIS_Converter_to_WKText" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_OGIS_Converter_to_WKText" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)CSG_Shapes_OGIS_Converter::to_WKText(arg1,*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_OGIS_Converter_from_WKBinary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Bytes *arg1 = 0 ;
+  CSG_Shape *arg2 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_OGIS_Converter_from_WKBinary",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_Bytes,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_OGIS_Converter_from_WKBinary" "', argument " "1"" of type '" "CSG_Bytes &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_OGIS_Converter_from_WKBinary" "', argument " "1"" of type '" "CSG_Bytes &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Bytes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_OGIS_Converter_from_WKBinary" "', argument " "2"" of type '" "CSG_Shape *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape * >(argp2);
+  result = (bool)CSG_Shapes_OGIS_Converter::from_WKBinary(*arg1,arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Shapes_OGIS_Converter_to_WKBinary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shape *arg1 = (CSG_Shape *) 0 ;
+  CSG_Bytes *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Shapes_OGIS_Converter_to_WKBinary",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Shapes_OGIS_Converter_to_WKBinary" "', argument " "1"" of type '" "CSG_Shape *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shape * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Bytes,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Shapes_OGIS_Converter_to_WKBinary" "', argument " "2"" of type '" "CSG_Bytes &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Shapes_OGIS_Converter_to_WKBinary" "', argument " "2"" of type '" "CSG_Bytes &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Bytes * >(argp2);
+  result = (bool)CSG_Shapes_OGIS_Converter::to_WKBinary(arg1,*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Shapes_OGIS_Converter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes_OGIS_Converter *arg1 = (CSG_Shapes_OGIS_Converter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Shapes_OGIS_Converter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes_OGIS_Converter, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Shapes_OGIS_Converter" "', argument " "1"" of type '" "CSG_Shapes_OGIS_Converter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes_OGIS_Converter * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Shapes_OGIS_Converter_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Shapes_OGIS_Converter, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Node_Get_ID(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Node *arg1 = (CSG_TIN_Node *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Node_Get_ID",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Node_Get_ID" "', argument " "1"" of type '" "CSG_TIN_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Node * >(argp1);
+  result = (int)(arg1)->Get_ID();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Node_Get_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Node *arg1 = (CSG_TIN_Node *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Point *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Node_Get_Point",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Node_Get_Point" "', argument " "1"" of type '" "CSG_TIN_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Node * >(argp1);
+  result = (TSG_Point *) &(arg1)->Get_Point();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SSG_Point, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Node_Get_X(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Node *arg1 = (CSG_TIN_Node *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Node_Get_X",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Node_Get_X" "', argument " "1"" of type '" "CSG_TIN_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Node * >(argp1);
+  result = (double)(arg1)->Get_X();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Node_Get_Y(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Node *arg1 = (CSG_TIN_Node *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Node_Get_Y",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Node_Get_Y" "', argument " "1"" of type '" "CSG_TIN_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Node * >(argp1);
+  result = (double)(arg1)->Get_Y();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Node_Get_Neighbor_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Node *arg1 = (CSG_TIN_Node *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Node_Get_Neighbor_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Node_Get_Neighbor_Count" "', argument " "1"" of type '" "CSG_TIN_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Node * >(argp1);
+  result = (int)(arg1)->Get_Neighbor_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Node_Get_Neighbor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Node *arg1 = (CSG_TIN_Node *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_TIN_Node *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Node_Get_Neighbor",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Node_Get_Neighbor" "', argument " "1"" of type '" "CSG_TIN_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Node * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_TIN_Node_Get_Neighbor" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_TIN_Node *)(arg1)->Get_Neighbor(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Node_Get_Gradient(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Node *arg1 = (CSG_TIN_Node *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_TIN_Node_Get_Gradient",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Node_Get_Gradient" "', argument " "1"" of type '" "CSG_TIN_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Node * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_TIN_Node_Get_Gradient" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_TIN_Node_Get_Gradient" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)(arg1)->Get_Gradient(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Node_Get_Triangle_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Node *arg1 = (CSG_TIN_Node *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Node_Get_Triangle_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Node_Get_Triangle_Count" "', argument " "1"" of type '" "CSG_TIN_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Node * >(argp1);
+  result = (int)(arg1)->Get_Triangle_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Node_Get_Triangle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Node *arg1 = (CSG_TIN_Node *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_TIN_Triangle *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Node_Get_Triangle",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Node_Get_Triangle" "', argument " "1"" of type '" "CSG_TIN_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Node * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_TIN_Node_Get_Triangle" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_TIN_Triangle *)(arg1)->Get_Triangle(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN_Triangle, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Node_Get_Polygon(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Node *arg1 = (CSG_TIN_Node *) 0 ;
+  CSG_Points *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Node_Get_Polygon",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Node_Get_Polygon" "', argument " "1"" of type '" "CSG_TIN_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Node * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Points,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_TIN_Node_Get_Polygon" "', argument " "2"" of type '" "CSG_Points &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_TIN_Node_Get_Polygon" "', argument " "2"" of type '" "CSG_Points &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Points * >(argp2);
+  result = (bool)(arg1)->Get_Polygon(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Node_Get_Polygon_Area(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Node *arg1 = (CSG_TIN_Node *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Node_Get_Polygon_Area",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Node_Get_Polygon_Area" "', argument " "1"" of type '" "CSG_TIN_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Node * >(argp1);
+  result = (double)(arg1)->Get_Polygon_Area();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_TIN_Node_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_TIN_Node, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Edge_Get_Node(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Edge *arg1 = (CSG_TIN_Edge *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_TIN_Node *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Edge_Get_Node",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Edge, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Edge_Get_Node" "', argument " "1"" of type '" "CSG_TIN_Edge *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Edge * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_TIN_Edge_Get_Node" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_TIN_Node *)(arg1)->Get_Node(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_TIN_Edge_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_TIN_Edge, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Triangle_Get_Node(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Triangle *arg1 = (CSG_TIN_Triangle *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_TIN_Node *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Triangle_Get_Node",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Triangle, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Triangle_Get_Node" "', argument " "1"" of type '" "CSG_TIN_Triangle *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Triangle * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_TIN_Triangle_Get_Node" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_TIN_Node *)(arg1)->Get_Node(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Triangle_Get_Extent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Triangle *arg1 = (CSG_TIN_Triangle *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Triangle_Get_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Triangle, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Triangle_Get_Extent" "', argument " "1"" of type '" "CSG_TIN_Triangle *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Triangle * >(argp1);
+  result = (CSG_Rect *) &(arg1)->Get_Extent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Triangle_Get_Area(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Triangle *arg1 = (CSG_TIN_Triangle *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Triangle_Get_Area",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Triangle, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Triangle_Get_Area" "', argument " "1"" of type '" "CSG_TIN_Triangle *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Triangle * >(argp1);
+  result = (double)(arg1)->Get_Area();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Triangle_is_Containing__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Triangle *arg1 = (CSG_TIN_Triangle *) 0 ;
+  TSG_Point *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Triangle_is_Containing",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Triangle, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Triangle_is_Containing" "', argument " "1"" of type '" "CSG_TIN_Triangle *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Triangle * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_TIN_Triangle_is_Containing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_TIN_Triangle_is_Containing" "', argument " "2"" of type '" "TSG_Point const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  result = (bool)(arg1)->is_Containing((TSG_Point const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Triangle_is_Containing__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Triangle *arg1 = (CSG_TIN_Triangle *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_TIN_Triangle_is_Containing",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Triangle, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Triangle_is_Containing" "', argument " "1"" of type '" "CSG_TIN_Triangle *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Triangle * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_TIN_Triangle_is_Containing" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_TIN_Triangle_is_Containing" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->is_Containing(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Triangle_is_Containing(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_TIN_Triangle, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_TIN_Triangle_is_Containing__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_TIN_Triangle, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_TIN_Triangle_is_Containing__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_TIN_Triangle_is_Containing'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_Containing(CSG_TIN_Triangle *,TSG_Point const &)\n"
+    "    is_Containing(CSG_TIN_Triangle *,double,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Triangle_Get_Gradient(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Triangle *arg1 = (CSG_TIN_Triangle *) 0 ;
+  int arg2 ;
+  double *arg3 = 0 ;
+  double *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_TIN_Triangle_Get_Gradient",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Triangle, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Triangle_Get_Gradient" "', argument " "1"" of type '" "CSG_TIN_Triangle *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Triangle * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_TIN_Triangle_Get_Gradient" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_TIN_Triangle_Get_Gradient" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_TIN_Triangle_Get_Gradient" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_TIN_Triangle_Get_Gradient" "', argument " "4"" of type '" "double &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_TIN_Triangle_Get_Gradient" "', argument " "4"" of type '" "double &""'"); 
+  }
+  arg4 = reinterpret_cast< double * >(argp4);
+  result = (bool)(arg1)->Get_Gradient(arg2,*arg3,*arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Triangle_Get_CircumCircle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Triangle *arg1 = (CSG_TIN_Triangle *) 0 ;
+  TSG_Point *arg2 = 0 ;
+  double *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_TIN_Triangle_Get_CircumCircle",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Triangle, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Triangle_Get_CircumCircle" "', argument " "1"" of type '" "CSG_TIN_Triangle *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Triangle * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_TIN_Triangle_Get_CircumCircle" "', argument " "2"" of type '" "TSG_Point &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_TIN_Triangle_Get_CircumCircle" "', argument " "2"" of type '" "TSG_Point &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Point * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_TIN_Triangle_Get_CircumCircle" "', argument " "3"" of type '" "double &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_TIN_Triangle_Get_CircumCircle" "', argument " "3"" of type '" "double &""'"); 
+  }
+  arg3 = reinterpret_cast< double * >(argp3);
+  (arg1)->Get_CircumCircle(*arg2,*arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Triangle_Get_CircumCircle_Radius(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Triangle *arg1 = (CSG_TIN_Triangle *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Triangle_Get_CircumCircle_Radius",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Triangle, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Triangle_Get_CircumCircle_Radius" "', argument " "1"" of type '" "CSG_TIN_Triangle *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Triangle * >(argp1);
+  result = (double)(arg1)->Get_CircumCircle_Radius();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Triangle_Get_CircumCircle_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN_Triangle *arg1 = (CSG_TIN_Triangle *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Point result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Triangle_Get_CircumCircle_Point",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN_Triangle, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Triangle_Get_CircumCircle_Point" "', argument " "1"" of type '" "CSG_TIN_Triangle *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN_Triangle * >(argp1);
+  result = (arg1)->Get_CircumCircle_Point();
+  resultobj = SWIG_NewPointerObj((new TSG_Point(static_cast< const TSG_Point& >(result))), SWIGTYPE_p_SSG_Point, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_TIN_Triangle_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_TIN_Triangle, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_TIN__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_TIN")) SWIG_fail;
+  result = (CSG_TIN *)new CSG_TIN();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_TIN__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_TIN",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_TIN,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_TIN" "', argument " "1"" of type '" "CSG_TIN const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_TIN" "', argument " "1"" of type '" "CSG_TIN const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  result = (CSG_TIN *)new CSG_TIN((CSG_TIN const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  CSG_TIN *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Create" "', argument " "1"" of type '" "CSG_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_TIN,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_TIN_Create" "', argument " "2"" of type '" "CSG_TIN const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_TIN_Create" "', argument " "2"" of type '" "CSG_TIN const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_TIN * >(argp2);
+  result = (bool)(arg1)->Create((CSG_TIN const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_TIN__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_TIN",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_TIN" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (CSG_TIN *)new CSG_TIN(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  CSG_Shapes *arg2 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Create" "', argument " "1"" of type '" "CSG_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_TIN_Create" "', argument " "2"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shapes * >(argp2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_TIN__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_TIN",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_TIN" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_TIN" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_TIN *)new CSG_TIN((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_TIN(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_TIN__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_TIN, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_TIN__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_TIN__SWIG_2(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_TIN__SWIG_3(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_TIN'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_TIN()\n"
+    "    CSG_TIN(CSG_TIN const &)\n"
+    "    CSG_TIN(CSG_Shapes *)\n"
+    "    CSG_TIN(CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Create" "', argument " "1"" of type '" "CSG_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_TIN_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_TIN_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_TIN, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_TIN, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_TIN_Create__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_TIN, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_TIN_Create__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_TIN, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_TIN_Create__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_TIN_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_TIN *,CSG_TIN const &)\n"
+    "    Create(CSG_TIN *,CSG_Shapes *)\n"
+    "    Create(CSG_TIN *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_TIN(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_TIN",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_TIN" "', argument " "1"" of type '" "CSG_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Destroy" "', argument " "1"" of type '" "CSG_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Get_ObjectType(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Data_Object_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Get_ObjectType",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Get_ObjectType" "', argument " "1"" of type '" "CSG_TIN const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  result = (TSG_Data_Object_Type)((CSG_TIN const *)arg1)->Get_ObjectType();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  CSG_Data_Object *arg2 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Assign" "', argument " "1"" of type '" "CSG_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_TIN_Assign" "', argument " "2"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Data_Object * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Save__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_TIN_Save",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Save" "', argument " "1"" of type '" "CSG_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_TIN_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_TIN_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_TIN_Save" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Save__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Save",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Save" "', argument " "1"" of type '" "CSG_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_TIN_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_TIN_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Save(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_TIN, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_TIN_Save__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_TIN, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_TIN_Save__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_TIN_Save'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Save(CSG_TIN *,CSG_String const &,int)\n"
+    "    Save(CSG_TIN *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_is_Valid" "', argument " "1"" of type '" "CSG_TIN const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  result = (bool)((CSG_TIN const *)arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Get_Extent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Get_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Get_Extent" "', argument " "1"" of type '" "CSG_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  result = (CSG_Rect *) &(arg1)->Get_Extent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Add_Node(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  TSG_Point arg2 ;
+  CSG_Table_Record *arg3 = (CSG_Table_Record *) 0 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_TIN_Node *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_TIN_Add_Node",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Add_Node" "', argument " "1"" of type '" "CSG_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_TIN_Add_Node" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_TIN_Add_Node" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_TIN_Add_Node" "', argument " "3"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Table_Record * >(argp3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_TIN_Add_Node" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (CSG_TIN_Node *)(arg1)->Add_Node(arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Del_Node(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_TIN_Del_Node",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Del_Node" "', argument " "1"" of type '" "CSG_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_TIN_Del_Node" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_TIN_Del_Node" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Del_Node(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Get_Node_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Get_Node_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Get_Node_Count" "', argument " "1"" of type '" "CSG_TIN const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  result = (int)((CSG_TIN const *)arg1)->Get_Node_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Get_Node(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_TIN_Node *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Get_Node",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Get_Node" "', argument " "1"" of type '" "CSG_TIN const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_TIN_Get_Node" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_TIN_Node *)((CSG_TIN const *)arg1)->Get_Node(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN_Node, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Get_Edge_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Get_Edge_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Get_Edge_Count" "', argument " "1"" of type '" "CSG_TIN const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  result = (int)((CSG_TIN const *)arg1)->Get_Edge_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Get_Edge(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_TIN_Edge *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Get_Edge",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Get_Edge" "', argument " "1"" of type '" "CSG_TIN const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_TIN_Get_Edge" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_TIN_Edge *)((CSG_TIN const *)arg1)->Get_Edge(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN_Edge, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Get_Triangle_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_TIN_Get_Triangle_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Get_Triangle_Count" "', argument " "1"" of type '" "CSG_TIN const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  result = (int)((CSG_TIN const *)arg1)->Get_Triangle_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_TIN_Get_Triangle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = (CSG_TIN *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_TIN_Triangle *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_TIN_Get_Triangle",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_TIN_Get_Triangle" "', argument " "1"" of type '" "CSG_TIN const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_TIN_Get_Triangle" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_TIN_Triangle *)((CSG_TIN const *)arg1)->Get_Triangle(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN_Triangle, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_TIN_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_TIN, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Create_TIN__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Create_TIN")) SWIG_fail;
+  result = (CSG_TIN *)SG_Create_TIN();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_TIN__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_TIN *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_TIN",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_TIN,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_TIN" "', argument " "1"" of type '" "CSG_TIN const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_TIN" "', argument " "1"" of type '" "CSG_TIN const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_TIN * >(argp1);
+  result = (CSG_TIN *)SG_Create_TIN((CSG_TIN const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_TIN__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Shapes *arg1 = (CSG_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_TIN",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_TIN" "', argument " "1"" of type '" "CSG_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Shapes * >(argp1);
+  result = (CSG_TIN *)SG_Create_TIN(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_TIN__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_TIN",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_TIN" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_TIN" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_TIN *)SG_Create_TIN((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_TIN(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_SG_Create_TIN__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_TIN, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_TIN__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Shapes, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_TIN__SWIG_2(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_TIN__SWIG_3(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Create_TIN'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Create_TIN()\n"
+    "    SG_Create_TIN(CSG_TIN const &)\n"
+    "    SG_Create_TIN(CSG_Shapes *)\n"
+    "    SG_Create_TIN(CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_PointCloud__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_PointCloud")) SWIG_fail;
+  result = (CSG_PointCloud *)new CSG_PointCloud();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PointCloud, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Create",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Create" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (bool)(arg1)->Create();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_PointCloud__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_PointCloud",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_PointCloud,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_PointCloud" "', argument " "1"" of type '" "CSG_PointCloud const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_PointCloud" "', argument " "1"" of type '" "CSG_PointCloud const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (CSG_PointCloud *)new CSG_PointCloud((CSG_PointCloud const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PointCloud, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_PointCloud *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Create" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_PointCloud,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Create" "', argument " "2"" of type '" "CSG_PointCloud const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PointCloud_Create" "', argument " "2"" of type '" "CSG_PointCloud const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_PointCloud * >(argp2);
+  result = (bool)(arg1)->Create((CSG_PointCloud const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_PointCloud__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_PointCloud",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_PointCloud" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_PointCloud" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_PointCloud *)new CSG_PointCloud((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PointCloud, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Create" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PointCloud_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_PointCloud__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_PointCloud",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_PointCloud" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (CSG_PointCloud *)new CSG_PointCloud(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PointCloud, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_PointCloud(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_PointCloud__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_PointCloud__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_PointCloud__SWIG_2(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_PointCloud__SWIG_3(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_PointCloud'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_PointCloud()\n"
+    "    CSG_PointCloud(CSG_PointCloud const &)\n"
+    "    CSG_PointCloud(CSG_String const &)\n"
+    "    CSG_PointCloud(CSG_PointCloud *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Create__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_PointCloud *arg2 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Create" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Create" "', argument " "2"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_PointCloud * >(argp2);
+  result = (bool)(arg1)->Create(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_PointCloud_Create__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_PointCloud, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PointCloud_Create__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PointCloud_Create__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PointCloud_Create__SWIG_3(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_PointCloud *)\n"
+    "    Create(CSG_PointCloud *,CSG_PointCloud const &)\n"
+    "    Create(CSG_PointCloud *,CSG_String const &)\n"
+    "    Create(CSG_PointCloud *,CSG_PointCloud *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_PointCloud(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_PointCloud",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_PointCloud" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Destroy" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_ObjectType(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Data_Object_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Get_ObjectType",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_ObjectType" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (TSG_Data_Object_Type)((CSG_PointCloud const *)arg1)->Get_ObjectType();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_Data_Object *arg2 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Assign" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Assign" "', argument " "2"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Data_Object * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Save__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_String *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Save",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Save" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PointCloud_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Save" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Save__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Save",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Save" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PointCloud_Save" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Save((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Save(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PointCloud_Save__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Save__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Save'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Save(CSG_PointCloud *,CSG_String const &,int)\n"
+    "    Save(CSG_PointCloud *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_XYZ_Precision(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Set_XYZ_Precision",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Set_XYZ_Precision" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Set_XYZ_Precision" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_XYZ_Precision(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_is_Valid" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (bool)((CSG_PointCloud const *)arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_is_Compatible(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_PointCloud *arg2 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_is_Compatible",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_is_Compatible" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_is_Compatible" "', argument " "2"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_PointCloud * >(argp2);
+  result = (bool)((CSG_PointCloud const *)arg1)->is_Compatible(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Field__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  TSG_Data_Type arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_PointCloud_Add_Field",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Add_Field" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Add_Field" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Add_Field" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_PointCloud_Add_Field" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Add_Field((wchar_t const *)arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Field__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  TSG_Data_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Add_Field",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Add_Field" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Add_Field" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Add_Field" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  result = (bool)(arg1)->Add_Field((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Field__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  char *arg2 = (char *) 0 ;
+  TSG_Data_Type arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_PointCloud_Add_Field",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Add_Field" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Add_Field" "', argument " "2"" of type '" "char const *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Add_Field" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_PointCloud_Add_Field" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Add_Field((char const *)arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Field__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  char *arg2 = (char *) 0 ;
+  TSG_Data_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Add_Field",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Add_Field" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Add_Field" "', argument " "2"" of type '" "char const *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Add_Field" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  result = (bool)(arg1)->Add_Field((char const *)arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Field(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Add_Field__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Add_Field__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_PointCloud_Add_Field__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_PointCloud_Add_Field__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Add_Field'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Field(CSG_PointCloud *,wchar_t const *,TSG_Data_Type,int)\n"
+    "    Add_Field(CSG_PointCloud *,wchar_t const *,TSG_Data_Type)\n"
+    "    Add_Field(CSG_PointCloud *,char const *,TSG_Data_Type,int)\n"
+    "    Add_Field(CSG_PointCloud *,char const *,TSG_Data_Type)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Del_Field(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Del_Field",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Del_Field" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Del_Field" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del_Field(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Attribute_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Get_Attribute_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Attribute_Count" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (int)((CSG_PointCloud const *)arg1)->Get_Attribute_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Attribute_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Get_Attribute_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Attribute_Name" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Attribute_Name" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)((CSG_PointCloud const *)arg1)->Get_Attribute_Name(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Attribute_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Data_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Get_Attribute_Type",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Attribute_Type" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Attribute_Type" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (TSG_Data_Type)((CSG_PointCloud const *)arg1)->Get_Attribute_Type(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_PointCloud_Add_Point",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Add_Point" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Add_Point" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Add_Point" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_PointCloud_Add_Point" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Add_Point(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Del_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Del_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Del_Point" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Del_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del_Point(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Del_Points(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Del_Points",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Del_Points" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (bool)(arg1)->Del_Points();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Point_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Get_Point_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Point_Count" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (int)((CSG_PointCloud const *)arg1)->Get_Point_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_Cursor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Set_Cursor",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Set_Cursor" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Set_Cursor" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Cursor(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Set_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Set_Value" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Set_Value" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Set_Value(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Get_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Value" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_PointCloud const *)arg1)->Get_Value(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_X__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Get_X",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_X" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (double)((CSG_PointCloud const *)arg1)->Get_X();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Y__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Get_Y",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Y" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (double)((CSG_PointCloud const *)arg1)->Get_Y();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Z__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Get_Z",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Z" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (double)((CSG_PointCloud const *)arg1)->Get_Z();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_Attribute__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Set_Attribute",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Set_Attribute" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Set_Attribute" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Set_Attribute" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Set_Attribute(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Attribute__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Get_Attribute",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Attribute" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Attribute" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_PointCloud const *)arg1)->Get_Attribute(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_NoData__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Set_NoData",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Set_NoData" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Set_NoData" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_NoData(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_is_NoData__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_is_NoData",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_is_NoData" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_is_NoData" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)((CSG_PointCloud const *)arg1)->is_NoData(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_PointCloud_Set_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Set_Value" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Set_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_PointCloud_Set_Value" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Set_Value(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Get_Value",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Value" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Get_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)((CSG_PointCloud const *)arg1)->Get_Value(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_X__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Get_X",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_X" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_X" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_PointCloud const *)arg1)->Get_X(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_X(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_PointCloud_Get_X__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Get_X__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Get_X'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_X(CSG_PointCloud const *)\n"
+    "    Get_X(CSG_PointCloud const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Y__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Get_Y",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Y" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Y" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_PointCloud const *)arg1)->Get_Y(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Y(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_PointCloud_Get_Y__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Get_Y__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Get_Y'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Y(CSG_PointCloud const *)\n"
+    "    Get_Y(CSG_PointCloud const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Z__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Get_Z",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Z" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Z" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (double)((CSG_PointCloud const *)arg1)->Get_Z(arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Z(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_PointCloud_Get_Z__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Get_Z__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Get_Z'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Z(CSG_PointCloud const *)\n"
+    "    Get_Z(CSG_PointCloud const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_Attribute__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_PointCloud_Set_Attribute",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Set_Attribute" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Set_Attribute" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Set_Attribute" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_PointCloud_Set_Attribute" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Set_Attribute(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_Attribute(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Set_Attribute__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_PointCloud_Set_Attribute__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Set_Attribute'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Attribute(CSG_PointCloud *,int,double)\n"
+    "    Set_Attribute(CSG_PointCloud *,int,int,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Attribute__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Get_Attribute",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Attribute" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Attribute" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Get_Attribute" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (double)((CSG_PointCloud const *)arg1)->Get_Attribute(arg2,arg3);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Attribute(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Get_Attribute__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Get_Attribute__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Get_Attribute'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Attribute(CSG_PointCloud const *,int)\n"
+    "    Get_Attribute(CSG_PointCloud const *,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_NoData__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Set_NoData",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Set_NoData" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Set_NoData" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Set_NoData" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Set_NoData(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_NoData(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Set_NoData__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Set_NoData__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Set_NoData'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_NoData(CSG_PointCloud *,int)\n"
+    "    Set_NoData(CSG_PointCloud *,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_is_NoData__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_is_NoData",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_is_NoData" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_is_NoData" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_is_NoData" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)((CSG_PointCloud const *)arg1)->is_NoData(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_is_NoData(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_is_NoData__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_is_NoData__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_is_NoData'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    is_NoData(CSG_PointCloud const *,int)\n"
+    "    is_NoData(CSG_PointCloud const *,int,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_PointCloud_Set_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Set_Value" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Set_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_PointCloud_Set_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  result = (bool)(arg1)->Set_Value(arg2,arg3,(wchar_t const *)arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return resultobj;
+fail:
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Set_Value__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_PointCloud_Set_Value__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_PointCloud_Set_Value__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_PointCloud *,int,double)\n"
+    "    Set_Value(CSG_PointCloud *,int,int,double)\n"
+    "    Set_Value(CSG_PointCloud *,int,int,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  CSG_String *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_PointCloud_Get_Value",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Value" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Get_Value" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_PointCloud_Get_Value" "', argument " "4"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PointCloud_Get_Value" "', argument " "4"" of type '" "CSG_String &""'"); 
+  }
+  arg4 = reinterpret_cast< CSG_String * >(argp4);
+  result = (bool)((CSG_PointCloud const *)arg1)->Get_Value(arg2,arg3,*arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Get_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Get_Value__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          void *vptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_CSG_String, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_PointCloud_Get_Value__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Get_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Value(CSG_PointCloud const *,int)\n"
+    "    Get_Value(CSG_PointCloud const *,int,int)\n"
+    "    Get_Value(CSG_PointCloud const *,int,int,CSG_String &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Point__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Point_Z result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Get_Point",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Point" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = ((CSG_PointCloud const *)arg1)->Get_Point();
+  resultobj = SWIG_NewPointerObj((new TSG_Point_Z(static_cast< const TSG_Point_Z& >(result))), SWIGTYPE_p_SSG_Point_Z, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Point__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  TSG_Point_Z result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Get_Point",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Point" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Point" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = ((CSG_PointCloud const *)arg1)->Get_Point(arg2);
+  resultobj = SWIG_NewPointerObj((new TSG_Point_Z(static_cast< const TSG_Point_Z& >(result))), SWIGTYPE_p_SSG_Point_Z, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Point(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_PointCloud_Get_Point__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Get_Point__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Get_Point'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Point(CSG_PointCloud const *)\n"
+    "    Get_Point(CSG_PointCloud const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_Modified__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Set_Modified",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Set_Modified" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Set_Modified" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Modified(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_Modified__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Set_Modified",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Set_Modified" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  (arg1)->Set_Modified();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Set_Modified(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_PointCloud_Set_Modified__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Set_Modified__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Set_Modified'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Modified(CSG_PointCloud *,bool)\n"
+    "    Set_Modified(CSG_PointCloud *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Record(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Get_Record",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Record" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Record" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Table_Record *)((CSG_PointCloud const *)arg1)->Get_Record(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Shape__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  TSG_Point arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Get_Shape",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Shape" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Get_Shape" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PointCloud_Get_Shape" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Get_Shape" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (CSG_Shape *)(arg1)->Get_Shape(arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Shape__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Get_Shape",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Shape" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Get_Shape" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PointCloud_Get_Shape" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (CSG_Shape *)(arg1)->Get_Shape(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Shape(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PointCloud_Get_Shape__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Get_Shape__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Get_Shape'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Shape(CSG_PointCloud *,TSG_Point,double)\n"
+    "    Get_Shape(CSG_PointCloud *,TSG_Point)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Del_Record(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Del_Record",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Del_Record" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Del_Record" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del_Record(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Del_Shape__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Del_Shape",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Del_Shape" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Del_Shape" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del_Shape(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Del_Records(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Del_Records",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Del_Records" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (bool)(arg1)->Del_Records();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Del_Shapes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Del_Shapes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Del_Shapes" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (bool)(arg1)->Del_Shapes();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Ins_Record__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  CSG_Table_Record *arg3 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Ins_Record",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Ins_Record" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Ins_Record" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_PointCloud_Ins_Record" "', argument " "3"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Table_Record * >(argp3);
+  result = (CSG_Table_Record *)(arg1)->Ins_Record(arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Ins_Record__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Ins_Record",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Ins_Record" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Ins_Record" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Table_Record *)(arg1)->Ins_Record(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Ins_Record(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Ins_Record__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_PointCloud_Ins_Record__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Ins_Record'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Ins_Record(CSG_PointCloud *,int,CSG_Table_Record *)\n"
+    "    Ins_Record(CSG_PointCloud *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Record__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_Table_Record *arg2 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Add_Record",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Add_Record" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Add_Record" "', argument " "2"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table_Record * >(argp2);
+  result = (CSG_Table_Record *)(arg1)->Add_Record(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Record__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table_Record *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Add_Record",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Add_Record" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (CSG_Table_Record *)(arg1)->Add_Record();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Record(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_PointCloud_Add_Record__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PointCloud_Add_Record__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Add_Record'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Record(CSG_PointCloud *,CSG_Table_Record *)\n"
+    "    Add_Record(CSG_PointCloud *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Shape__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_Table_Record *arg2 = (CSG_Table_Record *) 0 ;
+  TSG_ADD_Shape_Copy_Mode arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Add_Shape",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Add_Shape" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Add_Shape" "', argument " "2"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table_Record * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Add_Shape" "', argument " "3"" of type '" "TSG_ADD_Shape_Copy_Mode""'");
+  } 
+  arg3 = static_cast< TSG_ADD_Shape_Copy_Mode >(val3);
+  result = (CSG_Shape *)(arg1)->Add_Shape(arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Shape__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_Table_Record *arg2 = (CSG_Table_Record *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Add_Shape",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Add_Shape" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Table_Record, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Add_Shape" "', argument " "2"" of type '" "CSG_Table_Record *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Table_Record * >(argp2);
+  result = (CSG_Shape *)(arg1)->Add_Shape(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Shape__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Add_Shape",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Add_Shape" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (CSG_Shape *)(arg1)->Add_Shape();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Add_Shape(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_PointCloud_Add_Shape__SWIG_2(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PointCloud_Add_Shape__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Table_Record, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Add_Shape__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Add_Shape'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Shape(CSG_PointCloud *,CSG_Table_Record *,TSG_ADD_Shape_Copy_Mode)\n"
+    "    Add_Shape(CSG_PointCloud *,CSG_Table_Record *)\n"
+    "    Add_Shape(CSG_PointCloud *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Del_Shape__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_Shape *arg2 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Del_Shape",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Del_Shape" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Del_Shape" "', argument " "2"" of type '" "CSG_Shape *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape * >(argp2);
+  result = (bool)(arg1)->Del_Shape(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Del_Shape(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PointCloud_Del_Shape__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Del_Shape__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Del_Shape'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Del_Shape(CSG_PointCloud *,int)\n"
+    "    Del_Shape(CSG_PointCloud *,CSG_Shape *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Select__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Select",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Select" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Select" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Select(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Select__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Select",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Select" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Select(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Select__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_Shape *arg2 = (CSG_Shape *) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Select",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Select" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "CSG_Shape *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Select" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Select(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Select__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  CSG_Shape *arg2 = (CSG_Shape *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Select",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Select" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "CSG_Shape *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Shape * >(argp2);
+  result = (bool)(arg1)->Select(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Select__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Select",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Select" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (bool)(arg1)->Select();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Select__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  TSG_Rect arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Select",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Select" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Rect,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "TSG_Rect""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "TSG_Rect""'");
+    } else {
+      TSG_Rect * temp = reinterpret_cast< TSG_Rect * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Select" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Select(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Select__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  TSG_Rect arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Select",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Select" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Rect,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "TSG_Rect""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "TSG_Rect""'");
+    } else {
+      TSG_Rect * temp = reinterpret_cast< TSG_Rect * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (bool)(arg1)->Select(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Select__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  TSG_Point arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_PointCloud_Select",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Select" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_PointCloud_Select" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Select(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Select__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  TSG_Point arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Select",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Select" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "TSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_PointCloud_Select" "', argument " "2"" of type '" "TSG_Point""'");
+    } else {
+      TSG_Point * temp = reinterpret_cast< TSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = (bool)(arg1)->Select(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Select(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_PointCloud_Select__SWIG_4(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PointCloud_Select__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PointCloud_Select__SWIG_6(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_PointCloud_Select__SWIG_8(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Select__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Select__SWIG_5(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Point, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Select__SWIG_7(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Shape, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Select__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_PointCloud_Select__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Select'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Select(CSG_PointCloud *,int,bool)\n"
+    "    Select(CSG_PointCloud *,int)\n"
+    "    Select(CSG_PointCloud *,CSG_Shape *,bool)\n"
+    "    Select(CSG_PointCloud *,CSG_Shape *)\n"
+    "    Select(CSG_PointCloud *)\n"
+    "    Select(CSG_PointCloud *,TSG_Rect,bool)\n"
+    "    Select(CSG_PointCloud *,TSG_Rect)\n"
+    "    Select(CSG_PointCloud *,TSG_Point,bool)\n"
+    "    Select(CSG_PointCloud *,TSG_Point)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_is_Selected(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_is_Selected",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_is_Selected" "', argument " "1"" of type '" "CSG_PointCloud const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_is_Selected" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)((CSG_PointCloud const *)arg1)->is_Selected(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Del_Selection(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Del_Selection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Del_Selection" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (int)(arg1)->Del_Selection();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Inv_Selection(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Inv_Selection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Inv_Selection" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (int)(arg1)->Inv_Selection();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Selection__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_PointCloud_Get_Selection",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Selection" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_PointCloud_Get_Selection" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Shape *)(arg1)->Get_Selection(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Selection__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shape *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Get_Selection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Selection" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (CSG_Shape *)(arg1)->Get_Selection();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shape, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Selection(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_PointCloud_Get_Selection__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_PointCloud_Get_Selection__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_PointCloud_Get_Selection'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Selection(CSG_PointCloud *,int)\n"
+    "    Get_Selection(CSG_PointCloud *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_PointCloud_Get_Selection_Extent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Rect *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_PointCloud_Get_Selection_Extent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_PointCloud_Get_Selection_Extent" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (CSG_Rect *) &(arg1)->Get_Selection_Extent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Rect, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_PointCloud_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_PointCloud, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SG_Create_PointCloud__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SG_Create_PointCloud")) SWIG_fail;
+  result = (CSG_PointCloud *)SG_Create_PointCloud();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_PointCloud__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_PointCloud",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_PointCloud,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_PointCloud" "', argument " "1"" of type '" "CSG_PointCloud const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_PointCloud" "', argument " "1"" of type '" "CSG_PointCloud const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (CSG_PointCloud *)SG_Create_PointCloud((CSG_PointCloud const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_PointCloud__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_PointCloud",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_PointCloud" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SG_Create_PointCloud" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_PointCloud *)SG_Create_PointCloud((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_PointCloud__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_PointCloud *arg1 = (CSG_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Create_PointCloud",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SG_Create_PointCloud" "', argument " "1"" of type '" "CSG_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_PointCloud * >(argp1);
+  result = (CSG_PointCloud *)SG_Create_PointCloud(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Create_PointCloud(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_SG_Create_PointCloud__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_PointCloud__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_PointCloud__SWIG_2(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_PointCloud, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_SG_Create_PointCloud__SWIG_3(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SG_Create_PointCloud'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SG_Create_PointCloud()\n"
+    "    SG_Create_PointCloud(CSG_PointCloud const &)\n"
+    "    SG_Create_PointCloud(CSG_String const &)\n"
+    "    SG_Create_PointCloud(CSG_PointCloud *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Parameter_Type_Get_Identifier(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Parameter_Type arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Parameter_Type_Get_Identifier",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Parameter_Type_Get_Identifier" "', argument " "1"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg1 = static_cast< TSG_Parameter_Type >(val1);
+  result = (wchar_t *)SG_Parameter_Type_Get_Identifier(arg1);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SG_Parameter_Type_Get_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  TSG_Parameter_Type arg1 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:SG_Parameter_Type_Get_Name",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "SG_Parameter_Type_Get_Name" "', argument " "1"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg1 = static_cast< TSG_Parameter_Type >(val1);
+  result = (wchar_t *)SG_Parameter_Type_Get_Name(arg1);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Data",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Data" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Get_Type_Identifier(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_Get_Type_Identifier",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Get_Type_Identifier" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Type_Identifier();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Get_Type_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_Get_Type_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Get_Type_Name" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Type_Name();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Get_Constraint(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_Get_Constraint",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Get_Constraint" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  result = (long)(arg1)->Get_Constraint();
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_is_Valid" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  result = (bool)(arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  CSG_Parameter_Data *arg2 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Data_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Assign" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Data_Assign" "', argument " "2"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter_Data * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Serialize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameter_Data_Serialize",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Serialize" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Data_Serialize" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameter_Data_Serialize" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameter_Data_Serialize" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Serialize(*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Data_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Data_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Data_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Data_Set_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Data_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Data_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Data, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Data_Set_Value__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Data, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Data_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Data, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Data_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Data_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Parameter_Data *,int)\n"
+    "    Set_Value(CSG_Parameter_Data *,double)\n"
+    "    Set_Value(CSG_Parameter_Data *,void *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_asInt" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  result = (int)(arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_asDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_asDouble",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_asDouble" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  result = (double)(arg1)->asDouble();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_asPointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_asPointer",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_asPointer" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  result = (void *)(arg1)->asPointer();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_asString" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Get_Default(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_Get_Default",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Get_Default" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  result = (arg1)->Get_Default();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Set_Default__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Data_Set_Default",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Set_Default" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Data_Set_Default" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  (arg1)->Set_Default(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Set_Default__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Data_Set_Default",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Set_Default" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Data_Set_Default" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Set_Default(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Set_Default__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data *arg1 = (CSG_Parameter_Data *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Data_Set_Default",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Set_Default" "', argument " "1"" of type '" "CSG_Parameter_Data *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Data_Set_Default" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->Set_Default((wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Set_Default(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Data, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Data_Set_Default__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Data, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Data_Set_Default__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Data, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Data_Set_Default__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Data_Set_Default'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Default(CSG_Parameter_Data *,int)\n"
+    "    Set_Default(CSG_Parameter_Data *,double)\n"
+    "    Set_Default(CSG_Parameter_Data *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Data_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Data, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Node(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Node *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Node",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Node" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Node" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Node *)new CSG_Parameter_Node(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Node, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Node(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Node *arg1 = (CSG_Parameter_Node *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Node",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Node, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Node" "', argument " "1"" of type '" "CSG_Parameter_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Node * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Node_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Node *arg1 = (CSG_Parameter_Node *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Node_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Node, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Node_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Node *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Node * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Node_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Node, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Bool(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Bool *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Bool",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Bool" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Bool" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Bool *)new CSG_Parameter_Bool(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Bool, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Bool(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Bool *arg1 = (CSG_Parameter_Bool *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Bool",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Bool, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Bool" "', argument " "1"" of type '" "CSG_Parameter_Bool *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Bool * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Bool_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Bool *arg1 = (CSG_Parameter_Bool *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Bool_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Bool, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Bool_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Bool *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Bool * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Bool_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Bool *arg1 = (CSG_Parameter_Bool *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Bool_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Bool, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Bool_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Bool *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Bool * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Bool_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Bool_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Bool *arg1 = (CSG_Parameter_Bool *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Bool_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Bool, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Bool_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Bool *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Bool * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Bool_Set_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Bool_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Bool, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Bool_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Bool, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Bool_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Bool_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Parameter_Bool *,int)\n"
+    "    Set_Value(CSG_Parameter_Bool *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Bool_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Bool *arg1 = (CSG_Parameter_Bool *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Bool_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Bool, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Bool_asInt" "', argument " "1"" of type '" "CSG_Parameter_Bool *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Bool * >(argp1);
+  result = (int)(arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Bool_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Bool *arg1 = (CSG_Parameter_Bool *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Bool_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Bool, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Bool_asString" "', argument " "1"" of type '" "CSG_Parameter_Bool *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Bool * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Bool_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Bool, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Value *arg1 = (CSG_Parameter_Value *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Value",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Value, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Value" "', argument " "1"" of type '" "CSG_Parameter_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Value * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Value_Set_Range(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Value *arg1 = (CSG_Parameter_Value *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameter_Value_Set_Range",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Value_Set_Range" "', argument " "1"" of type '" "CSG_Parameter_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Value * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Value_Set_Range" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameter_Value_Set_Range" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Set_Range(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Value_Set_Minimum__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Value *arg1 = (CSG_Parameter_Value *) 0 ;
+  double arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameter_Value_Set_Minimum",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Value_Set_Minimum" "', argument " "1"" of type '" "CSG_Parameter_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Value * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Value_Set_Minimum" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameter_Value_Set_Minimum" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  (arg1)->Set_Minimum(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Value_Set_Minimum__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Value *arg1 = (CSG_Parameter_Value *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Value_Set_Minimum",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Value_Set_Minimum" "', argument " "1"" of type '" "CSG_Parameter_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Value * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Value_Set_Minimum" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Set_Minimum(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Value_Set_Minimum(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Value, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Value_Set_Minimum__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Value, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Parameter_Value_Set_Minimum__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Value_Set_Minimum'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Minimum(CSG_Parameter_Value *,double,bool)\n"
+    "    Set_Minimum(CSG_Parameter_Value *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Value_Get_Minimum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Value *arg1 = (CSG_Parameter_Value *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Value_Get_Minimum",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Value_Get_Minimum" "', argument " "1"" of type '" "CSG_Parameter_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Value * >(argp1);
+  result = (double)(arg1)->Get_Minimum();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Value_has_Minimum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Value *arg1 = (CSG_Parameter_Value *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Value_has_Minimum",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Value_has_Minimum" "', argument " "1"" of type '" "CSG_Parameter_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Value * >(argp1);
+  result = (bool)(arg1)->has_Minimum();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Value_Set_Maximum__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Value *arg1 = (CSG_Parameter_Value *) 0 ;
+  double arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameter_Value_Set_Maximum",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Value_Set_Maximum" "', argument " "1"" of type '" "CSG_Parameter_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Value * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Value_Set_Maximum" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameter_Value_Set_Maximum" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  (arg1)->Set_Maximum(arg2,arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Value_Set_Maximum__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Value *arg1 = (CSG_Parameter_Value *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Value_Set_Maximum",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Value_Set_Maximum" "', argument " "1"" of type '" "CSG_Parameter_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Value * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Value_Set_Maximum" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Set_Maximum(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Value_Set_Maximum(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Value, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Value_Set_Maximum__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Value, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Parameter_Value_Set_Maximum__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Value_Set_Maximum'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Maximum(CSG_Parameter_Value *,double,bool)\n"
+    "    Set_Maximum(CSG_Parameter_Value *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Value_Get_Maximum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Value *arg1 = (CSG_Parameter_Value *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Value_Get_Maximum",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Value_Get_Maximum" "', argument " "1"" of type '" "CSG_Parameter_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Value * >(argp1);
+  result = (double)(arg1)->Get_Maximum();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Value_has_Maximum(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Value *arg1 = (CSG_Parameter_Value *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Value_has_Maximum",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Value, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Value_has_Maximum" "', argument " "1"" of type '" "CSG_Parameter_Value *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Value * >(argp1);
+  result = (bool)(arg1)->has_Maximum();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Value_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Value, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Int(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Int *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Int",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Int" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Int" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Int *)new CSG_Parameter_Int(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Int, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Int(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Int *arg1 = (CSG_Parameter_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Int",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Int, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Int" "', argument " "1"" of type '" "CSG_Parameter_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Int * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Int_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Int *arg1 = (CSG_Parameter_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Int_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Int_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Int * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Int_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Int *arg1 = (CSG_Parameter_Int *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Int_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Int_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Int * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Int_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Int_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Int *arg1 = (CSG_Parameter_Int *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Int_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Int_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Int * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Int_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Int_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Int *arg1 = (CSG_Parameter_Int *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Int_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Int_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Int * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Int_Set_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Int_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Int, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Int_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Int, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Int_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Int, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Int_Set_Value__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Int_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Parameter_Int *,void *)\n"
+    "    Set_Value(CSG_Parameter_Int *,int)\n"
+    "    Set_Value(CSG_Parameter_Int *,double)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Int_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Int *arg1 = (CSG_Parameter_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Int_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Int_asInt" "', argument " "1"" of type '" "CSG_Parameter_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Int * >(argp1);
+  result = (int)(arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Int_asDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Int *arg1 = (CSG_Parameter_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Int_asDouble",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Int_asDouble" "', argument " "1"" of type '" "CSG_Parameter_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Int * >(argp1);
+  result = (double)(arg1)->asDouble();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Int_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Int *arg1 = (CSG_Parameter_Int *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Int_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Int, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Int_asString" "', argument " "1"" of type '" "CSG_Parameter_Int *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Int * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Int_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Int, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Double *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Double",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Double" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Double" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Double *)new CSG_Parameter_Double(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Double, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Double *arg1 = (CSG_Parameter_Double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Double",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Double, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Double" "', argument " "1"" of type '" "CSG_Parameter_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Double * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Double_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Double *arg1 = (CSG_Parameter_Double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Double_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Double_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Double * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Double_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Double *arg1 = (CSG_Parameter_Double *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Double_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Double_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Double * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Double_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Double_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Double *arg1 = (CSG_Parameter_Double *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Double_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Double_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Double * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Double_Set_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Double_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Double *arg1 = (CSG_Parameter_Double *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Double_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Double_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Double * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Double_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Double_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Double, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Double_Set_Value__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Double, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Double_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Double, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Double_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Double_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Parameter_Double *,int)\n"
+    "    Set_Value(CSG_Parameter_Double *,double)\n"
+    "    Set_Value(CSG_Parameter_Double *,void *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Double_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Double *arg1 = (CSG_Parameter_Double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Double_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Double_asInt" "', argument " "1"" of type '" "CSG_Parameter_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Double * >(argp1);
+  result = (int)(arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Double_asDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Double *arg1 = (CSG_Parameter_Double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Double_asDouble",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Double_asDouble" "', argument " "1"" of type '" "CSG_Parameter_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Double * >(argp1);
+  result = (double)(arg1)->asDouble();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Double_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Double *arg1 = (CSG_Parameter_Double *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Double_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Double, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Double_asString" "', argument " "1"" of type '" "CSG_Parameter_Double *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Double * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Double_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Double, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Degree(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Degree *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Degree",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Degree" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Degree" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Degree *)new CSG_Parameter_Degree(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Degree, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Degree(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Degree *arg1 = (CSG_Parameter_Degree *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Degree",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Degree, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Degree" "', argument " "1"" of type '" "CSG_Parameter_Degree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Degree * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Degree_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Degree *arg1 = (CSG_Parameter_Degree *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Degree_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Degree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Degree_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Degree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Degree * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Degree_Set_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Degree *arg1 = (CSG_Parameter_Degree *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Degree_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Degree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Degree_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Degree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Degree * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Degree_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Degree_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Degree *arg1 = (CSG_Parameter_Degree *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Degree_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Degree, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Degree_asString" "', argument " "1"" of type '" "CSG_Parameter_Degree *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Degree * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Degree_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Degree, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Range(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Range *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Range",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Range" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Range" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Range *)new CSG_Parameter_Range(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Range, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Range(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Range *arg1 = (CSG_Parameter_Range *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Range",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Range, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Range" "', argument " "1"" of type '" "CSG_Parameter_Range *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Range * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Range_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Range *arg1 = (CSG_Parameter_Range *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Range_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Range, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Range_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Range *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Range * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Range_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Range *arg1 = (CSG_Parameter_Range *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Range_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Range, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Range_asString" "', argument " "1"" of type '" "CSG_Parameter_Range *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Range * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Range_Set_Range(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Range *arg1 = (CSG_Parameter_Range *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameter_Range_Set_Range",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Range, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Range_Set_Range" "', argument " "1"" of type '" "CSG_Parameter_Range *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Range * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Range_Set_Range" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameter_Range_Set_Range" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)(arg1)->Set_Range(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Range_Set_LoVal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Range *arg1 = (CSG_Parameter_Range *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Range_Set_LoVal",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Range, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Range_Set_LoVal" "', argument " "1"" of type '" "CSG_Parameter_Range *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Range * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Range_Set_LoVal" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_LoVal(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Range_Get_LoVal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Range *arg1 = (CSG_Parameter_Range *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Range_Get_LoVal",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Range, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Range_Get_LoVal" "', argument " "1"" of type '" "CSG_Parameter_Range *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Range * >(argp1);
+  result = (double)(arg1)->Get_LoVal();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Range_Set_HiVal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Range *arg1 = (CSG_Parameter_Range *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Range_Set_HiVal",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Range, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Range_Set_HiVal" "', argument " "1"" of type '" "CSG_Parameter_Range *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Range * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Range_Set_HiVal" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_HiVal(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Range_Get_HiVal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Range *arg1 = (CSG_Parameter_Range *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Range_Get_HiVal",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Range, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Range_Get_HiVal" "', argument " "1"" of type '" "CSG_Parameter_Range *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Range * >(argp1);
+  result = (double)(arg1)->Get_HiVal();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Range_Get_LoParm(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Range *arg1 = (CSG_Parameter_Range *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Range_Get_LoParm",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Range, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Range_Get_LoParm" "', argument " "1"" of type '" "CSG_Parameter_Range *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Range * >(argp1);
+  result = (CSG_Parameter *)(arg1)->Get_LoParm();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Range_Get_HiParm(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Range *arg1 = (CSG_Parameter_Range *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Range_Get_HiParm",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Range, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Range_Get_HiParm" "', argument " "1"" of type '" "CSG_Parameter_Range *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Range * >(argp1);
+  result = (CSG_Parameter *)(arg1)->Get_HiParm();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Range_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Range, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Choice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Choice *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Choice",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Choice" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Choice" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Choice *)new CSG_Parameter_Choice(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Choice, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Choice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Choice *arg1 = (CSG_Parameter_Choice *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Choice",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Choice, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Choice" "', argument " "1"" of type '" "CSG_Parameter_Choice *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Choice * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Choice_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Choice *arg1 = (CSG_Parameter_Choice *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Choice_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Choice, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Choice_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Choice *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Choice * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Choice_Set_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Choice *arg1 = (CSG_Parameter_Choice *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Choice_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Choice, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Choice_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Choice *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Choice * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Choice_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Choice_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Choice *arg1 = (CSG_Parameter_Choice *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Choice_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Choice, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Choice_asString" "', argument " "1"" of type '" "CSG_Parameter_Choice *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Choice * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Choice_Set_Items(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Choice *arg1 = (CSG_Parameter_Choice *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Choice_Set_Items",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Choice, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Choice_Set_Items" "', argument " "1"" of type '" "CSG_Parameter_Choice *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Choice * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Choice_Set_Items" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->Set_Items((wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Choice_Get_Item(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Choice *arg1 = (CSG_Parameter_Choice *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Choice_Get_Item",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Choice, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Choice_Get_Item" "', argument " "1"" of type '" "CSG_Parameter_Choice *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Choice * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Choice_Get_Item" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)(arg1)->Get_Item(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Choice_Get_Data__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Choice *arg1 = (CSG_Parameter_Choice *) 0 ;
+  int *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Choice_Get_Data",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Choice, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Choice_Get_Data" "', argument " "1"" of type '" "CSG_Parameter_Choice *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Choice * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_int,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Choice_Get_Data" "', argument " "2"" of type '" "int &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameter_Choice_Get_Data" "', argument " "2"" of type '" "int &""'"); 
+  }
+  arg2 = reinterpret_cast< int * >(argp2);
+  result = (bool)(arg1)->Get_Data(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Choice_Get_Data__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Choice *arg1 = (CSG_Parameter_Choice *) 0 ;
+  double *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Choice_Get_Data",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Choice, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Choice_Get_Data" "', argument " "1"" of type '" "CSG_Parameter_Choice *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Choice * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Choice_Get_Data" "', argument " "2"" of type '" "double &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameter_Choice_Get_Data" "', argument " "2"" of type '" "double &""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  result = (bool)(arg1)->Get_Data(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Choice_Get_Data__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Choice *arg1 = (CSG_Parameter_Choice *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Choice_Get_Data",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Choice, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Choice_Get_Data" "', argument " "1"" of type '" "CSG_Parameter_Choice *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Choice * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Choice_Get_Data" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameter_Choice_Get_Data" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Get_Data(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Choice_Get_Data(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Choice, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_int, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Choice_Get_Data__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Choice, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Choice_Get_Data__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Choice, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Choice_Get_Data__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Choice_Get_Data'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Data(CSG_Parameter_Choice *,int &)\n"
+    "    Get_Data(CSG_Parameter_Choice *,double &)\n"
+    "    Get_Data(CSG_Parameter_Choice *,CSG_String &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Choice_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Choice *arg1 = (CSG_Parameter_Choice *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Choice_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Choice, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Choice_Get_Count" "', argument " "1"" of type '" "CSG_Parameter_Choice *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Choice * >(argp1);
+  result = (int)(arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Choice_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Choice, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_String(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_String",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_String" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_String" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_String *)new CSG_Parameter_String(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_String, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_String(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_String *arg1 = (CSG_Parameter_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_String",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_String, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_String" "', argument " "1"" of type '" "CSG_Parameter_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_String * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_String_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_String *arg1 = (CSG_Parameter_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_String_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_String_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_String * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_String_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_String *arg1 = (CSG_Parameter_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_String_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_String_asString" "', argument " "1"" of type '" "CSG_Parameter_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_String * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_String_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_String *arg1 = (CSG_Parameter_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_String_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_String_is_Valid" "', argument " "1"" of type '" "CSG_Parameter_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_String * >(argp1);
+  result = (bool)(arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_String_Set_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_String *arg1 = (CSG_Parameter_String *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_String_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_String_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_String * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_String_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_String_Set_Password(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_String *arg1 = (CSG_Parameter_String *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_String_Set_Password",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_String_Set_Password" "', argument " "1"" of type '" "CSG_Parameter_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_String * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_String_Set_Password" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Password(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_String_is_Password(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_String *arg1 = (CSG_Parameter_String *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_String_is_Password",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_String, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_String_is_Password" "', argument " "1"" of type '" "CSG_Parameter_String *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_String * >(argp1);
+  result = (bool)(arg1)->is_Password();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_String_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_String, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Text(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Text *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Text",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Text" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Text" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Text *)new CSG_Parameter_Text(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Text, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Text(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Text *arg1 = (CSG_Parameter_Text *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Text",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Text, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Text" "', argument " "1"" of type '" "CSG_Parameter_Text *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Text * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Text_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Text *arg1 = (CSG_Parameter_Text *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Text_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Text, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Text_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Text *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Text * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Text_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Text, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_File_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_File_Name *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_File_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_File_Name" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_File_Name" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_File_Name *)new CSG_Parameter_File_Name(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_File_Name, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_File_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_File_Name *arg1 = (CSG_Parameter_File_Name *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_File_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_File_Name, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_File_Name" "', argument " "1"" of type '" "CSG_Parameter_File_Name *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_File_Name * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_File_Name_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_File_Name *arg1 = (CSG_Parameter_File_Name *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_File_Name_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_File_Name, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_File_Name_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_File_Name *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_File_Name * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_File_Name_Set_Filter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_File_Name *arg1 = (CSG_Parameter_File_Name *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_File_Name_Set_Filter",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_File_Name, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_File_Name_Set_Filter" "', argument " "1"" of type '" "CSG_Parameter_File_Name *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_File_Name * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_File_Name_Set_Filter" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->Set_Filter((wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_File_Name_Get_Filter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_File_Name *arg1 = (CSG_Parameter_File_Name *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_File_Name_Get_Filter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_File_Name, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_File_Name_Get_Filter" "', argument " "1"" of type '" "CSG_Parameter_File_Name *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_File_Name * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Filter();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_File_Name_Set_Flag_Save(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_File_Name *arg1 = (CSG_Parameter_File_Name *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_File_Name_Set_Flag_Save",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_File_Name, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_File_Name_Set_Flag_Save" "', argument " "1"" of type '" "CSG_Parameter_File_Name *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_File_Name * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_File_Name_Set_Flag_Save" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Flag_Save(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_File_Name_is_Save(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_File_Name *arg1 = (CSG_Parameter_File_Name *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_File_Name_is_Save",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_File_Name, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_File_Name_is_Save" "', argument " "1"" of type '" "CSG_Parameter_File_Name *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_File_Name * >(argp1);
+  result = (bool)(arg1)->is_Save();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_File_Name_Set_Flag_Multiple(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_File_Name *arg1 = (CSG_Parameter_File_Name *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_File_Name_Set_Flag_Multiple",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_File_Name, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_File_Name_Set_Flag_Multiple" "', argument " "1"" of type '" "CSG_Parameter_File_Name *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_File_Name * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_File_Name_Set_Flag_Multiple" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Flag_Multiple(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_File_Name_is_Multiple(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_File_Name *arg1 = (CSG_Parameter_File_Name *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_File_Name_is_Multiple",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_File_Name, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_File_Name_is_Multiple" "', argument " "1"" of type '" "CSG_Parameter_File_Name *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_File_Name * >(argp1);
+  result = (bool)(arg1)->is_Multiple();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_File_Name_Set_Flag_Directory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_File_Name *arg1 = (CSG_Parameter_File_Name *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_File_Name_Set_Flag_Directory",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_File_Name, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_File_Name_Set_Flag_Directory" "', argument " "1"" of type '" "CSG_Parameter_File_Name *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_File_Name * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_File_Name_Set_Flag_Directory" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Flag_Directory(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_File_Name_is_Directory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_File_Name *arg1 = (CSG_Parameter_File_Name *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_File_Name_is_Directory",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_File_Name, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_File_Name_is_Directory" "', argument " "1"" of type '" "CSG_Parameter_File_Name *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_File_Name * >(argp1);
+  result = (bool)(arg1)->is_Directory();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_File_Name_Get_FilePaths(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_File_Name *arg1 = (CSG_Parameter_File_Name *) 0 ;
+  CSG_Strings *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_File_Name_Get_FilePaths",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_File_Name, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_File_Name_Get_FilePaths" "', argument " "1"" of type '" "CSG_Parameter_File_Name *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_File_Name * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Strings,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_File_Name_Get_FilePaths" "', argument " "2"" of type '" "CSG_Strings &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameter_File_Name_Get_FilePaths" "', argument " "2"" of type '" "CSG_Strings &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Strings * >(argp2);
+  result = (bool)(arg1)->Get_FilePaths(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_File_Name_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_File_Name, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Font(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Font *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Font",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Font" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Font" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Font *)new CSG_Parameter_Font(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Font, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Font(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Font *arg1 = (CSG_Parameter_Font *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Font",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Font, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Font" "', argument " "1"" of type '" "CSG_Parameter_Font *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Font * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Font_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Font *arg1 = (CSG_Parameter_Font *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Font_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Font, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Font_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Font *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Font * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Font_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Font *arg1 = (CSG_Parameter_Font *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Font_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Font, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Font_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Font *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Font * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Font_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Font_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Font *arg1 = (CSG_Parameter_Font *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Font_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Font, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Font_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Font *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Font * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Font_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Font_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Font, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Font_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Font, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Font_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Font_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Parameter_Font *,int)\n"
+    "    Set_Value(CSG_Parameter_Font *,void *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Font_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Font *arg1 = (CSG_Parameter_Font *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Font_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Font, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Font_asInt" "', argument " "1"" of type '" "CSG_Parameter_Font *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Font * >(argp1);
+  result = (int)(arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Font_asPointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Font *arg1 = (CSG_Parameter_Font *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Font_asPointer",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Font, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Font_asPointer" "', argument " "1"" of type '" "CSG_Parameter_Font *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Font * >(argp1);
+  result = (void *)(arg1)->asPointer();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Font_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Font *arg1 = (CSG_Parameter_Font *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Font_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Font, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Font_asString" "', argument " "1"" of type '" "CSG_Parameter_Font *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Font * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Font_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Font, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Color(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Color *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Color",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Color" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Color" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Color *)new CSG_Parameter_Color(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Color, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Color(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Color *arg1 = (CSG_Parameter_Color *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Color",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Color, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Color" "', argument " "1"" of type '" "CSG_Parameter_Color *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Color * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Color_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Color *arg1 = (CSG_Parameter_Color *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Color_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Color, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Color_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Color *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Color * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Color_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Color, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Colors(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Colors *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Colors",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Colors" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Colors" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Colors *)new CSG_Parameter_Colors(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Colors, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Colors(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Colors *arg1 = (CSG_Parameter_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Colors",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Colors, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Colors" "', argument " "1"" of type '" "CSG_Parameter_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Colors * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Colors_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Colors *arg1 = (CSG_Parameter_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Colors_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Colors_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Colors * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Colors_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Colors *arg1 = (CSG_Parameter_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Colors_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Colors_asInt" "', argument " "1"" of type '" "CSG_Parameter_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Colors * >(argp1);
+  result = (int)(arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Colors_asPointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Colors *arg1 = (CSG_Parameter_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Colors_asPointer",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Colors_asPointer" "', argument " "1"" of type '" "CSG_Parameter_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Colors * >(argp1);
+  result = (void *)(arg1)->asPointer();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Colors_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Colors *arg1 = (CSG_Parameter_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Colors_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Colors_asString" "', argument " "1"" of type '" "CSG_Parameter_Colors *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Colors * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Colors_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Colors, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Fixed_Table(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Fixed_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Fixed_Table",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Fixed_Table" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Fixed_Table" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Fixed_Table *)new CSG_Parameter_Fixed_Table(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Fixed_Table, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Fixed_Table(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Fixed_Table *arg1 = (CSG_Parameter_Fixed_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Fixed_Table",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Fixed_Table, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Fixed_Table" "', argument " "1"" of type '" "CSG_Parameter_Fixed_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Fixed_Table * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Fixed_Table_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Fixed_Table *arg1 = (CSG_Parameter_Fixed_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Fixed_Table_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Fixed_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Fixed_Table_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Fixed_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Fixed_Table * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Fixed_Table_asPointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Fixed_Table *arg1 = (CSG_Parameter_Fixed_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Fixed_Table_asPointer",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Fixed_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Fixed_Table_asPointer" "', argument " "1"" of type '" "CSG_Parameter_Fixed_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Fixed_Table * >(argp1);
+  result = (void *)(arg1)->asPointer();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Fixed_Table_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Fixed_Table *arg1 = (CSG_Parameter_Fixed_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Fixed_Table_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Fixed_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Fixed_Table_asString" "', argument " "1"" of type '" "CSG_Parameter_Fixed_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Fixed_Table * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Fixed_Table_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Fixed_Table, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Grid_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Grid_System",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Grid_System" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Grid_System" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Grid_System *)new CSG_Parameter_Grid_System(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Grid_System, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Grid_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid_System *arg1 = (CSG_Parameter_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Grid_System",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid_System, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Grid_System" "', argument " "1"" of type '" "CSG_Parameter_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid_System * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_System_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid_System *arg1 = (CSG_Parameter_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Grid_System_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_System_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid_System * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_System_Set_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid_System *arg1 = (CSG_Parameter_Grid_System *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Grid_System_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_System_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid_System * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Grid_System_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_System_asPointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid_System *arg1 = (CSG_Parameter_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Grid_System_asPointer",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_System_asPointer" "', argument " "1"" of type '" "CSG_Parameter_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid_System * >(argp1);
+  result = (void *)(arg1)->asPointer();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_System_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid_System *arg1 = (CSG_Parameter_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Grid_System_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_System_asString" "', argument " "1"" of type '" "CSG_Parameter_Grid_System *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid_System * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Grid_System_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Grid_System, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Table_Field(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Table_Field *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Table_Field",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Table_Field" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Table_Field" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Table_Field *)new CSG_Parameter_Table_Field(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Table_Field, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Table_Field(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table_Field *arg1 = (CSG_Parameter_Table_Field *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Table_Field",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table_Field, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Table_Field" "', argument " "1"" of type '" "CSG_Parameter_Table_Field *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table_Field * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Table_Field_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table_Field *arg1 = (CSG_Parameter_Table_Field *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Table_Field_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table_Field, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Table_Field_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Table_Field *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table_Field * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Table_Field_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table_Field *arg1 = (CSG_Parameter_Table_Field *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Table_Field_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table_Field, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Table_Field_asString" "', argument " "1"" of type '" "CSG_Parameter_Table_Field *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table_Field * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Table_Field_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table_Field *arg1 = (CSG_Parameter_Table_Field *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Table_Field_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table_Field, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Table_Field_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Table_Field *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table_Field * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Table_Field_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Table_Field_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table_Field *arg1 = (CSG_Parameter_Table_Field *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Table_Field_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table_Field, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Table_Field_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Table_Field *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table_Field * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Table_Field_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Table_Field_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Table_Field, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Table_Field_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Table_Field, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Table_Field_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Table_Field_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Parameter_Table_Field *,int)\n"
+    "    Set_Value(CSG_Parameter_Table_Field *,void *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Table_Field_Get_Table(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table_Field *arg1 = (CSG_Parameter_Table_Field *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Table_Field_Get_Table",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table_Field, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Table_Field_Get_Table" "', argument " "1"" of type '" "CSG_Parameter_Table_Field *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table_Field * >(argp1);
+  result = (CSG_Table *)(arg1)->Get_Table();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Table_Field_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Table_Field, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Data_Object(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data_Object *arg1 = (CSG_Parameter_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Data_Object",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data_Object, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Data_Object" "', argument " "1"" of type '" "CSG_Parameter_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data_Object * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Object_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data_Object *arg1 = (CSG_Parameter_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_Object_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Object_is_Valid" "', argument " "1"" of type '" "CSG_Parameter_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data_Object * >(argp1);
+  result = (bool)(arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Object_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data_Object *arg1 = (CSG_Parameter_Data_Object *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Data_Object_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Object_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data_Object * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Data_Object_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Object_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data_Object *arg1 = (CSG_Parameter_Data_Object *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Data_Object_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Object_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data_Object * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Data_Object_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Object_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Data_Object, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Data_Object_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_Data_Object, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Data_Object_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Data_Object_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Parameter_Data_Object *,int)\n"
+    "    Set_Value(CSG_Parameter_Data_Object *,void *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Object_asPointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data_Object *arg1 = (CSG_Parameter_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_Object_asPointer",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Object_asPointer" "', argument " "1"" of type '" "CSG_Parameter_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data_Object * >(argp1);
+  result = (void *)(arg1)->asPointer();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Object_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data_Object *arg1 = (CSG_Parameter_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_Object_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Object_asString" "', argument " "1"" of type '" "CSG_Parameter_Data_Object *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data_Object * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Data_Object_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Data_Object, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Data_Object_Output(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Data_Object_Output *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Data_Object_Output",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Data_Object_Output" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Data_Object_Output" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Data_Object_Output *)new CSG_Parameter_Data_Object_Output(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Data_Object_Output, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Data_Object_Output(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data_Object_Output *arg1 = (CSG_Parameter_Data_Object_Output *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Data_Object_Output",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data_Object_Output, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Data_Object_Output" "', argument " "1"" of type '" "CSG_Parameter_Data_Object_Output *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data_Object_Output * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Object_Output_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data_Object_Output *arg1 = (CSG_Parameter_Data_Object_Output *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_Object_Output_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data_Object_Output, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Object_Output_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Data_Object_Output *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data_Object_Output * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Object_Output_Set_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data_Object_Output *arg1 = (CSG_Parameter_Data_Object_Output *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Data_Object_Output_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data_Object_Output, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Object_Output_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Data_Object_Output *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data_Object_Output * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Data_Object_Output_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Object_Output_Set_DataObject_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data_Object_Output *arg1 = (CSG_Parameter_Data_Object_Output *) 0 ;
+  TSG_Data_Object_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Data_Object_Output_Set_DataObject_Type",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data_Object_Output, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Object_Output_Set_DataObject_Type" "', argument " "1"" of type '" "CSG_Parameter_Data_Object_Output *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data_Object_Output * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Data_Object_Output_Set_DataObject_Type" "', argument " "2"" of type '" "TSG_Data_Object_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Object_Type >(val2);
+  result = (bool)(arg1)->Set_DataObject_Type(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Data_Object_Output_Get_DataObject_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Data_Object_Output *arg1 = (CSG_Parameter_Data_Object_Output *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Data_Object_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Data_Object_Output_Get_DataObject_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Data_Object_Output, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Data_Object_Output_Get_DataObject_Type" "', argument " "1"" of type '" "CSG_Parameter_Data_Object_Output *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Data_Object_Output * >(argp1);
+  result = (TSG_Data_Object_Type)(arg1)->Get_DataObject_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Data_Object_Output_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Data_Object_Output, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Grid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Grid" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Grid" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Grid *)new CSG_Parameter_Grid(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Grid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Grid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid *arg1 = (CSG_Parameter_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Grid" "', argument " "1"" of type '" "CSG_Parameter_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid *arg1 = (CSG_Parameter_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Grid_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_Set_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid *arg1 = (CSG_Parameter_Grid *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Grid_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Grid_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_Set_Preferred_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid *arg1 = (CSG_Parameter_Grid *) 0 ;
+  TSG_Data_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Grid_Set_Preferred_Type",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_Set_Preferred_Type" "', argument " "1"" of type '" "CSG_Parameter_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Grid_Set_Preferred_Type" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  (arg1)->Set_Preferred_Type(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_Get_Preferred_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid *arg1 = (CSG_Parameter_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Data_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Grid_Get_Preferred_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_Get_Preferred_Type" "', argument " "1"" of type '" "CSG_Parameter_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid * >(argp1);
+  result = (TSG_Data_Type)(arg1)->Get_Preferred_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_Get_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid *arg1 = (CSG_Parameter_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Grid_Get_System",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_Get_System" "', argument " "1"" of type '" "CSG_Parameter_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid * >(argp1);
+  result = (CSG_Grid_System *)(arg1)->Get_System();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Grid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Grid, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Table(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Table",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Table" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Table" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Table *)new CSG_Parameter_Table(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Table, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Table(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table *arg1 = (CSG_Parameter_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Table",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Table" "', argument " "1"" of type '" "CSG_Parameter_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Table_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table *arg1 = (CSG_Parameter_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Table_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Table_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Table_Set_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table *arg1 = (CSG_Parameter_Table *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Table_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Table_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Table *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Table_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Table_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Table, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Shapes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Shapes",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Shapes" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Shapes" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Shapes *)new CSG_Parameter_Shapes(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Shapes, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Shapes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Shapes *arg1 = (CSG_Parameter_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Shapes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Shapes, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Shapes" "', argument " "1"" of type '" "CSG_Parameter_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Shapes * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Shapes_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Shapes *arg1 = (CSG_Parameter_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Shapes_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Shapes_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Shapes * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Shapes_Set_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Shapes *arg1 = (CSG_Parameter_Shapes *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Shapes_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Shapes_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Shapes * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Shapes_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Shapes_Set_Shape_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Shapes *arg1 = (CSG_Parameter_Shapes *) 0 ;
+  TSG_Shape_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Shapes_Set_Shape_Type",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Shapes_Set_Shape_Type" "', argument " "1"" of type '" "CSG_Parameter_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Shapes * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Shapes_Set_Shape_Type" "', argument " "2"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg2 = static_cast< TSG_Shape_Type >(val2);
+  (arg1)->Set_Shape_Type(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Shapes_Get_Shape_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Shapes *arg1 = (CSG_Parameter_Shapes *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Shape_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Shapes_Get_Shape_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Shapes, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Shapes_Get_Shape_Type" "', argument " "1"" of type '" "CSG_Parameter_Shapes *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Shapes * >(argp1);
+  result = (TSG_Shape_Type)(arg1)->Get_Shape_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Shapes_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Shapes, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_TIN(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_TIN",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_TIN" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_TIN" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_TIN *)new CSG_Parameter_TIN(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_TIN, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_TIN(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_TIN *arg1 = (CSG_Parameter_TIN *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_TIN",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_TIN, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_TIN" "', argument " "1"" of type '" "CSG_Parameter_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_TIN * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_TIN_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_TIN *arg1 = (CSG_Parameter_TIN *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_TIN_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_TIN_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_TIN * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_TIN_Set_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_TIN *arg1 = (CSG_Parameter_TIN *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_TIN_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_TIN, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_TIN_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_TIN *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_TIN * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_TIN_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_TIN_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_TIN, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_PointCloud(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_PointCloud",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_PointCloud" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_PointCloud" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_PointCloud *)new CSG_Parameter_PointCloud(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_PointCloud, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_PointCloud(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_PointCloud *arg1 = (CSG_Parameter_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_PointCloud",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_PointCloud, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_PointCloud" "', argument " "1"" of type '" "CSG_Parameter_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_PointCloud * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_PointCloud_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_PointCloud *arg1 = (CSG_Parameter_PointCloud *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_PointCloud_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_PointCloud_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_PointCloud * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_PointCloud_Set_Value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_PointCloud *arg1 = (CSG_Parameter_PointCloud *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_PointCloud_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_PointCloud, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_PointCloud_Set_Value" "', argument " "1"" of type '" "CSG_Parameter_PointCloud *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_PointCloud * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_PointCloud_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_PointCloud_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_PointCloud, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_List *arg1 = (CSG_Parameter_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_List",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_List, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_List" "', argument " "1"" of type '" "CSG_Parameter_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_List * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_List_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_List *arg1 = (CSG_Parameter_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_List_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_List_asString" "', argument " "1"" of type '" "CSG_Parameter_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_List * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_List_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_List *arg1 = (CSG_Parameter_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_List_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_List_asInt" "', argument " "1"" of type '" "CSG_Parameter_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_List * >(argp1);
+  result = (int)(arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_List_asPointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_List *arg1 = (CSG_Parameter_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_List_asPointer",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_List_asPointer" "', argument " "1"" of type '" "CSG_Parameter_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_List * >(argp1);
+  result = (void *)(arg1)->asPointer();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_List_Add_Item(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_List *arg1 = (CSG_Parameter_List *) 0 ;
+  CSG_Data_Object *arg2 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_List_Add_Item",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_List_Add_Item" "', argument " "1"" of type '" "CSG_Parameter_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_List * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_List_Add_Item" "', argument " "2"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Data_Object * >(argp2);
+  (arg1)->Add_Item(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_List_Del_Item__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_List *arg1 = (CSG_Parameter_List *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_List_Del_Item",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_List_Del_Item" "', argument " "1"" of type '" "CSG_Parameter_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_List * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_List_Del_Item" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (int)(arg1)->Del_Item(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_List_Del_Item__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_List *arg1 = (CSG_Parameter_List *) 0 ;
+  CSG_Data_Object *arg2 = (CSG_Data_Object *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_List_Del_Item",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_List_Del_Item" "', argument " "1"" of type '" "CSG_Parameter_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_List * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_List_Del_Item" "', argument " "2"" of type '" "CSG_Data_Object *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Data_Object * >(argp2);
+  result = (int)(arg1)->Del_Item(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_List_Del_Item(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_List, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Data_Object, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_List_Del_Item__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter_List, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_List_Del_Item__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_List_Del_Item'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Del_Item(CSG_Parameter_List *,int)\n"
+    "    Del_Item(CSG_Parameter_List *,CSG_Data_Object *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_List_Del_Items(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_List *arg1 = (CSG_Parameter_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_List_Del_Items",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_List_Del_Items" "', argument " "1"" of type '" "CSG_Parameter_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_List * >(argp1);
+  (arg1)->Del_Items();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_List_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_List *arg1 = (CSG_Parameter_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_List_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_List_Get_Count" "', argument " "1"" of type '" "CSG_Parameter_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_List * >(argp1);
+  result = (int)(arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_List_asDataObject(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_List *arg1 = (CSG_Parameter_List *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Data_Object *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_List_asDataObject",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_List_asDataObject" "', argument " "1"" of type '" "CSG_Parameter_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_List * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_List_asDataObject" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Data_Object *)(arg1)->asDataObject(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_List_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_List, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Grid_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Grid_List *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Grid_List",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Grid_List" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Grid_List" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Grid_List *)new CSG_Parameter_Grid_List(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Grid_List, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Grid_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid_List *arg1 = (CSG_Parameter_Grid_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Grid_List",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid_List, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Grid_List" "', argument " "1"" of type '" "CSG_Parameter_Grid_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid_List * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_List_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid_List *arg1 = (CSG_Parameter_Grid_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Grid_List_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_List_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Grid_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid_List * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_List_Get_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid_List *arg1 = (CSG_Parameter_Grid_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Grid_List_Get_System",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_List_Get_System" "', argument " "1"" of type '" "CSG_Parameter_Grid_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid_List * >(argp1);
+  result = (CSG_Grid_System *)(arg1)->Get_System();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Grid_List_asGrid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Grid_List *arg1 = (CSG_Parameter_Grid_List *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Grid_List_asGrid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Grid_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Grid_List_asGrid" "', argument " "1"" of type '" "CSG_Parameter_Grid_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Grid_List * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Grid_List_asGrid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Grid *)(arg1)->asGrid(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Grid_List_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Grid_List, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Table_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Table_List *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Table_List",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Table_List" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Table_List" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Table_List *)new CSG_Parameter_Table_List(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Table_List, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Table_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table_List *arg1 = (CSG_Parameter_Table_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Table_List",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table_List, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Table_List" "', argument " "1"" of type '" "CSG_Parameter_Table_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table_List * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Table_List_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table_List *arg1 = (CSG_Parameter_Table_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Table_List_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Table_List_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Table_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table_List * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Table_List_asTable(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Table_List *arg1 = (CSG_Parameter_Table_List *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Table_List_asTable",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Table_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Table_List_asTable" "', argument " "1"" of type '" "CSG_Parameter_Table_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Table_List * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Table_List_asTable" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Table *)(arg1)->asTable(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Table_List_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Table_List, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Shapes_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Shapes_List *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Shapes_List",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Shapes_List" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Shapes_List" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Shapes_List *)new CSG_Parameter_Shapes_List(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Shapes_List, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Shapes_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Shapes_List *arg1 = (CSG_Parameter_Shapes_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Shapes_List",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Shapes_List, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Shapes_List" "', argument " "1"" of type '" "CSG_Parameter_Shapes_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Shapes_List * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Shapes_List_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Shapes_List *arg1 = (CSG_Parameter_Shapes_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Shapes_List_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Shapes_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Shapes_List_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Shapes_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Shapes_List * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Shapes_List_Set_Shape_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Shapes_List *arg1 = (CSG_Parameter_Shapes_List *) 0 ;
+  TSG_Shape_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Shapes_List_Set_Shape_Type",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Shapes_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Shapes_List_Set_Shape_Type" "', argument " "1"" of type '" "CSG_Parameter_Shapes_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Shapes_List * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Shapes_List_Set_Shape_Type" "', argument " "2"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg2 = static_cast< TSG_Shape_Type >(val2);
+  (arg1)->Set_Shape_Type(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Shapes_List_Get_Shape_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Shapes_List *arg1 = (CSG_Parameter_Shapes_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Shape_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Shapes_List_Get_Shape_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Shapes_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Shapes_List_Get_Shape_Type" "', argument " "1"" of type '" "CSG_Parameter_Shapes_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Shapes_List * >(argp1);
+  result = (TSG_Shape_Type)(arg1)->Get_Shape_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Shapes_List_asShapes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Shapes_List *arg1 = (CSG_Parameter_Shapes_List *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Shapes_List_asShapes",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Shapes_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Shapes_List_asShapes" "', argument " "1"" of type '" "CSG_Parameter_Shapes_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Shapes_List * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Shapes_List_asShapes" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Shapes *)(arg1)->asShapes(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Shapes_List_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Shapes_List, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_TIN_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_TIN_List *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_TIN_List",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_TIN_List" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_TIN_List" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_TIN_List *)new CSG_Parameter_TIN_List(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_TIN_List, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_TIN_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_TIN_List *arg1 = (CSG_Parameter_TIN_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_TIN_List",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_TIN_List, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_TIN_List" "', argument " "1"" of type '" "CSG_Parameter_TIN_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_TIN_List * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_TIN_List_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_TIN_List *arg1 = (CSG_Parameter_TIN_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_TIN_List_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_TIN_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_TIN_List_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_TIN_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_TIN_List * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_TIN_List_asTIN(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_TIN_List *arg1 = (CSG_Parameter_TIN_List *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_TIN_List_asTIN",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_TIN_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_TIN_List_asTIN" "', argument " "1"" of type '" "CSG_Parameter_TIN_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_TIN_List * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_TIN_List_asTIN" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_TIN *)(arg1)->asTIN(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_TIN_List_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_TIN_List, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_PointCloud_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_PointCloud_List *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_PointCloud_List",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_PointCloud_List" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_PointCloud_List" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_PointCloud_List *)new CSG_Parameter_PointCloud_List(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_PointCloud_List, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_PointCloud_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_PointCloud_List *arg1 = (CSG_Parameter_PointCloud_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_PointCloud_List",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_PointCloud_List, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_PointCloud_List" "', argument " "1"" of type '" "CSG_Parameter_PointCloud_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_PointCloud_List * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_PointCloud_List_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_PointCloud_List *arg1 = (CSG_Parameter_PointCloud_List *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_PointCloud_List_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_PointCloud_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_PointCloud_List_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_PointCloud_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_PointCloud_List * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_PointCloud_List_asPointCloud(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_PointCloud_List *arg1 = (CSG_Parameter_PointCloud_List *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_PointCloud_List_asPointCloud",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_PointCloud_List, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_PointCloud_List_asPointCloud" "', argument " "1"" of type '" "CSG_Parameter_PointCloud_List *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_PointCloud_List * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_PointCloud_List_asPointCloud" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_PointCloud *)(arg1)->asPointCloud(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_PointCloud_List_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_PointCloud_List, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameter_Parameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  long arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  long val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_CSG_Parameter_Parameters",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameter_Parameters" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_long(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CSG_Parameter_Parameters" "', argument " "2"" of type '" "long""'");
+  } 
+  arg2 = static_cast< long >(val2);
+  result = (CSG_Parameter_Parameters *)new CSG_Parameter_Parameters(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Parameters, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameter_Parameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Parameters *arg1 = (CSG_Parameter_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameter_Parameters",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Parameters, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameter_Parameters" "', argument " "1"" of type '" "CSG_Parameter_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Parameters * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Parameters_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Parameters *arg1 = (CSG_Parameter_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Parameters_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Parameters_Get_Type" "', argument " "1"" of type '" "CSG_Parameter_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Parameters * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Parameters_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Parameters *arg1 = (CSG_Parameter_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Parameters_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Parameters_asString" "', argument " "1"" of type '" "CSG_Parameter_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Parameters * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Parameters_asPointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter_Parameters *arg1 = (CSG_Parameter_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Parameters_asPointer",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Parameters_asPointer" "', argument " "1"" of type '" "CSG_Parameter_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter_Parameters * >(argp1);
+  result = (void *)(arg1)->asPointer();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_Parameters_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter_Parameters, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameters_Grid_Target(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Parameters_Grid_Target")) SWIG_fail;
+  result = (CSG_Parameters_Grid_Target *)new CSG_Parameters_Grid_Target();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters_Grid_Target, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Grid_Target_Create",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Create" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  (arg1)->Create();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Add_Parameters_User__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_Parameters *arg2 = (CSG_Parameters *) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameters_Grid_Target_Add_Parameters_User",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_User" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_User" "', argument " "2"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameters * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_User" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Add_Parameters_User(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Add_Parameters_User__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_Parameters *arg2 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Grid_Target_Add_Parameters_User",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_User" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_User" "', argument " "2"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameters * >(argp2);
+  result = (bool)(arg1)->Add_Parameters_User(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Add_Parameters_User(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters_Grid_Target_Add_Parameters_User__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Parameters_Grid_Target_Add_Parameters_User__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Grid_Target_Add_Parameters_User'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Parameters_User(CSG_Parameters_Grid_Target *,CSG_Parameters *,bool)\n"
+    "    Add_Parameters_User(CSG_Parameters_Grid_Target *,CSG_Parameters *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Add_Parameters_Grid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_Parameters *arg2 = (CSG_Parameters *) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameters_Grid_Target_Add_Parameters_Grid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_Grid" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_Grid" "', argument " "2"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameters * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_Grid" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Add_Parameters_Grid(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Add_Parameters_Grid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_Parameters *arg2 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Grid_Target_Add_Parameters_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_Grid" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_Grid" "', argument " "2"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameters * >(argp2);
+  result = (bool)(arg1)->Add_Parameters_Grid(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Add_Parameters_Grid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters_Grid_Target_Add_Parameters_Grid__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Parameters_Grid_Target_Add_Parameters_Grid__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Grid_Target_Add_Parameters_Grid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Parameters_Grid(CSG_Parameters_Grid_Target *,CSG_Parameters *,bool)\n"
+    "    Add_Parameters_Grid(CSG_Parameters_Grid_Target *,CSG_Parameters *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Add_Parameters_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_Parameters *arg2 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Grid_Target_Add_Parameters_System",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_System" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Add_Parameters_System" "', argument " "2"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameters * >(argp2);
+  result = (bool)(arg1)->Add_Parameters_System(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Add_Grid_Parameter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_String *arg2 = 0 ;
+  CSG_String *arg3 = 0 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Parameters_Grid_Target_Add_Grid_Parameter",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Add_Grid_Parameter" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Add_Grid_Parameter" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Grid_Target_Add_Grid_Parameter" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Grid_Target_Add_Grid_Parameter" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Grid_Target_Add_Grid_Parameter" "', argument " "3"" of type '" "CSG_String const &""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_String * >(argp3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Parameters_Grid_Target_Add_Grid_Parameter" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Add_Grid_Parameter((CSG_String const &)*arg2,(CSG_String const &)*arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_On_User_Changed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_Parameters *arg2 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg3 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameters_Grid_Target_On_User_Changed",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_On_User_Changed" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_On_User_Changed" "', argument " "2"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameters * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Grid_Target_On_User_Changed" "', argument " "3"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Parameter * >(argp3);
+  result = (bool)(arg1)->On_User_Changed(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Init_User__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  TSG_Rect *arg2 = 0 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameters_Grid_Target_Init_User",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Init_User" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Init_User" "', argument " "2"" of type '" "TSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Grid_Target_Init_User" "', argument " "2"" of type '" "TSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Rect * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Grid_Target_Init_User" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Init_User((TSG_Rect const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Init_User__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  TSG_Rect *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Grid_Target_Init_User",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Init_User" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_SSG_Rect,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Init_User" "', argument " "2"" of type '" "TSG_Rect const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Grid_Target_Init_User" "', argument " "2"" of type '" "TSG_Rect const &""'"); 
+  }
+  arg2 = reinterpret_cast< TSG_Rect * >(argp2);
+  result = (bool)(arg1)->Init_User((TSG_Rect const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Init_User(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters_Grid_Target_Init_User__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_SSG_Rect, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Parameters_Grid_Target_Init_User__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Grid_Target_Init_User'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Init_User(CSG_Parameters_Grid_Target *,TSG_Rect const &,int)\n"
+    "    Init_User(CSG_Parameters_Grid_Target *,TSG_Rect const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_User__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  TSG_Data_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Grid_Target_Get_User",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Get_User" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameters_Grid_Target_Get_User" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  result = (CSG_Grid *)(arg1)->Get_User(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_User__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Grid_Target_Get_User",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Get_User" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  result = (CSG_Grid *)(arg1)->Get_User();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_User__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_String *arg2 = 0 ;
+  TSG_Data_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameters_Grid_Target_Get_User",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Get_User" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Get_User" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Grid_Target_Get_User" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Grid_Target_Get_User" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  result = (CSG_Grid *)(arg1)->Get_User((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_User__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Grid_Target_Get_User",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Get_User" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Get_User" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Grid_Target_Get_User" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (CSG_Grid *)(arg1)->Get_User((CSG_String const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_User(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Parameters_Grid_Target_Get_User__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters_Grid_Target_Get_User__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameters_Grid_Target_Get_User__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Parameters_Grid_Target_Get_User__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Grid_Target_Get_User'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_User(CSG_Parameters_Grid_Target *,TSG_Data_Type)\n"
+    "    Get_User(CSG_Parameters_Grid_Target *)\n"
+    "    Get_User(CSG_Parameters_Grid_Target *,CSG_String const &,TSG_Data_Type)\n"
+    "    Get_User(CSG_Parameters_Grid_Target *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_Grid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  TSG_Data_Type arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Grid_Target_Get_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Get_Grid" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameters_Grid_Target_Get_Grid" "', argument " "2"" of type '" "TSG_Data_Type""'");
+  } 
+  arg2 = static_cast< TSG_Data_Type >(val2);
+  result = (CSG_Grid *)(arg1)->Get_Grid(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_Grid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Grid_Target_Get_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Get_Grid" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  result = (CSG_Grid *)(arg1)->Get_Grid();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_Grid__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_String *arg2 = 0 ;
+  TSG_Data_Type arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameters_Grid_Target_Get_Grid",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Get_Grid" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Get_Grid" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Grid_Target_Get_Grid" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Grid_Target_Get_Grid" "', argument " "3"" of type '" "TSG_Data_Type""'");
+  } 
+  arg3 = static_cast< TSG_Data_Type >(val3);
+  result = (CSG_Grid *)(arg1)->Get_Grid((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_Grid__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Grid_Target_Get_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Get_Grid" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Get_Grid" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Grid_Target_Get_Grid" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (CSG_Grid *)(arg1)->Get_Grid((CSG_String const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_Grid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Parameters_Grid_Target_Get_Grid__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters_Grid_Target_Get_Grid__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameters_Grid_Target_Get_Grid__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters_Grid_Target, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Parameters_Grid_Target_Get_Grid__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Grid_Target_Get_Grid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Grid(CSG_Parameters_Grid_Target *,TSG_Data_Type)\n"
+    "    Get_Grid(CSG_Parameters_Grid_Target *)\n"
+    "    Get_Grid(CSG_Parameters_Grid_Target *,CSG_String const &,TSG_Data_Type)\n"
+    "    Get_Grid(CSG_Parameters_Grid_Target *,CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_System_User(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_Grid_System *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Grid_Target_Get_System_User",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Get_System_User" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid_System,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Get_System_User" "', argument " "2"" of type '" "CSG_Grid_System &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Grid_Target_Get_System_User" "', argument " "2"" of type '" "CSG_Grid_System &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid_System * >(argp2);
+  result = (bool)(arg1)->Get_System_User(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Grid_Target_Get_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  CSG_Grid_System *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Grid_Target_Get_System",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Grid_Target_Get_System" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Grid_System,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Grid_Target_Get_System" "', argument " "2"" of type '" "CSG_Grid_System &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Grid_Target_Get_System" "', argument " "2"" of type '" "CSG_Grid_System &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Grid_System * >(argp2);
+  result = (bool)(arg1)->Get_System(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameters_Grid_Target(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters_Grid_Target *arg1 = (CSG_Parameters_Grid_Target *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameters_Grid_Target",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters_Grid_Target, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameters_Grid_Target" "', argument " "1"" of type '" "CSG_Parameters_Grid_Target *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters_Grid_Target * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameters_Grid_Target_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameters_Grid_Target, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Owner(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Get_Owner",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Owner" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameters *)(arg1)->Get_Owner();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Parent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Get_Parent",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Parent" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter *)(arg1)->Get_Parent();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Parameter_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Type" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (TSG_Parameter_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Type_Identifier(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Get_Type_Identifier",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Type_Identifier" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Type_Identifier();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Type_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Get_Type_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Type_Name" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Type_Name();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter_Data *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Get_Data",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Data" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter_Data *)(arg1)->Get_Data();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Data, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Identifier(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Get_Identifier",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Identifier" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Identifier();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Get_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Name" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Name();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Description__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Get_Description",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Description" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Description();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Description__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Get_Description",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Description" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Get_Description" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (arg1)->Get_Description(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Description__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  int arg2 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameter_Get_Description",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Description" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Get_Description" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameter_Get_Description" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (arg1)->Get_Description(arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Description(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Parameter_Get_Description__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Get_Description__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Parameter_Get_Description__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Get_Description'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Description(CSG_Parameter *)\n"
+    "    Get_Description(CSG_Parameter *,int)\n"
+    "    Get_Description(CSG_Parameter *,int,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Set_Enabled(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Set_Enabled",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Set_Enabled" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Set_Enabled" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (bool)(arg1)->Set_Enabled(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_is_Enabled(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_is_Enabled",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_is_Enabled" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->is_Enabled();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_ignore_Projection(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_ignore_Projection",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_ignore_Projection" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->ignore_Projection();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_is_Valid" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_is_Input(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_is_Input",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_is_Input" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->is_Input();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_is_Output(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_is_Output",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_is_Output" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->is_Output();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_is_Optional(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_is_Optional",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_is_Optional" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->is_Optional();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_is_Information(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_is_Information",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_is_Information" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->is_Information();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_is_Option(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_is_Option",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_is_Option" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->is_Option();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_is_DataObject(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_is_DataObject",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_is_DataObject" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->is_DataObject();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_is_DataObject_List(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_is_DataObject_List",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_is_DataObject_List" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->is_DataObject_List();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_is_Parameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_is_Parameters",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_is_Parameters" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->is_Parameters();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_is_Serializable(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_is_Serializable",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_is_Serializable" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->is_Serializable();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Children_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_Get_Children_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Children_Count" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (int)(arg1)->Get_Children_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Get_Child(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Get_Child",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Get_Child" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Get_Child" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Parameter *)(arg1)->Get_Child(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Set_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Set_Value" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Set_Value" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Set_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Set_Value" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Set_Value" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Set_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *arg2 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Set_Value" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Set_Value" "', argument " "2"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Value(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Set_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Set_Value",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Set_Value" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Set_Value" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Set_Value((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Set_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Set_Value__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Set_Value__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Set_Value__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Set_Value__SWIG_3(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Set_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Value(CSG_Parameter *,int)\n"
+    "    Set_Value(CSG_Parameter *,double)\n"
+    "    Set_Value(CSG_Parameter *,void *)\n"
+    "    Set_Value(CSG_Parameter *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Set_Default__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Set_Default",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Set_Default" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Set_Default" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  (arg1)->Set_Default(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Set_Default__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Set_Default",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Set_Default" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameter_Set_Default" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->Set_Default(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Set_Default__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Set_Default",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Set_Default" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Set_Default" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->Set_Default((wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Set_Default(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Set_Default__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameter_Set_Default__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameter_Set_Default__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameter_Set_Default'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Default(CSG_Parameter *,int)\n"
+    "    Set_Default(CSG_Parameter *,double)\n"
+    "    Set_Default(CSG_Parameter *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_has_Changed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_has_Changed",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_has_Changed" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->has_Changed();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asBool(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asBool",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asBool" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (bool)(arg1)->asBool();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asInt(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asInt",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asInt" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (int)(arg1)->asInt();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asColor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  long result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asColor",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asColor" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (long)(arg1)->asColor();
+  resultobj = SWIG_From_long(static_cast< long >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asDouble(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asDouble",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asDouble" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (double)(arg1)->asDouble();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asPointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asPointer",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asPointer" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (void *)(arg1)->asPointer();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asString" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (wchar_t *)(arg1)->asString();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asFont(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wxFont *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asFont",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asFont" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (wxFont *)(arg1)->asFont();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_wxFont, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asColors(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Colors *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asColors",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asColors" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Colors *)(arg1)->asColors();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asGrid_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asGrid_System",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asGrid_System" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Grid_System *)(arg1)->asGrid_System();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asDataObject(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Data_Object *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asDataObject",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asDataObject" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Data_Object *)(arg1)->asDataObject();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asGrid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asGrid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asGrid" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Grid *)(arg1)->asGrid();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asTable(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Table *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asTable",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asTable" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Table *)(arg1)->asTable();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Table, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asShapes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Shapes *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asShapes",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asShapes" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Shapes *)(arg1)->asShapes();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Shapes, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asTIN(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_TIN *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asTIN",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asTIN" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_TIN *)(arg1)->asTIN();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_TIN, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asPointCloud(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_PointCloud *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asPointCloud",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asPointCloud" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_PointCloud *)(arg1)->asPointCloud();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_PointCloud, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter_Value *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asValue",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asValue" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter_Value *)(arg1)->asValue();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Value, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asChoice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter_Choice *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asChoice",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asChoice" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter_Choice *)(arg1)->asChoice();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Choice, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asRange(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter_Range *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asRange",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asRange" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter_Range *)(arg1)->asRange();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Range, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asFilePath(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter_File_Name *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asFilePath",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asFilePath" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter_File_Name *)(arg1)->asFilePath();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_File_Name, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asList(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter_List *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asList",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asList" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter_List *)(arg1)->asList();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_List, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asGridList(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter_Grid_List *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asGridList",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asGridList" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter_Grid_List *)(arg1)->asGridList();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Grid_List, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asTableList(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter_Table_List *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asTableList",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asTableList" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter_Table_List *)(arg1)->asTableList();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Table_List, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asShapesList(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter_Shapes_List *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asShapesList",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asShapesList" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter_Shapes_List *)(arg1)->asShapesList();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_Shapes_List, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asTINList(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter_TIN_List *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asTINList",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asTINList" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter_TIN_List *)(arg1)->asTINList();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_TIN_List, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asPointCloudList(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameter_PointCloud_List *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asPointCloudList",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asPointCloudList" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameter_PointCloud_List *)(arg1)->asPointCloudList();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter_PointCloud_List, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_asParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameter_asParameters",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_asParameters" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  result = (CSG_Parameters *)(arg1)->asParameters();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameter_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Assign" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Assign" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  result = (bool)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameter_Serialize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameter *arg1 = (CSG_Parameter *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_MetaData *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameter_Serialize",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameter_Serialize" "', argument " "1"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameter * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameter_Serialize" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameter_Serialize" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameter_Serialize" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (CSG_MetaData *)(arg1)->Serialize(*arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_MetaData, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameter_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameter, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameters__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Parameters")) SWIG_fail;
+  result = (CSG_Parameters *)new CSG_Parameters();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Parameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Parameters",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Parameters" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameters__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  void *arg1 = (void *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  bool arg5 ;
+  int res1 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  bool val5 ;
+  int ecode5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:new_CSG_Parameters",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameters" "', argument " "1"" of type '" "void *""'"); 
+  }
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Parameters" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_CSG_Parameters" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "new_CSG_Parameters" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  ecode5 = SWIG_AsVal_bool(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_CSG_Parameters" "', argument " "5"" of type '" "bool""'");
+  } 
+  arg5 = static_cast< bool >(val5);
+  result = (CSG_Parameters *)new CSG_Parameters(arg1,(wchar_t const *)arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters, SWIG_POINTER_NEW |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameters__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  void *arg1 = (void *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  int res1 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  CSG_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_CSG_Parameters",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameters" "', argument " "1"" of type '" "void *""'"); 
+  }
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Parameters" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_CSG_Parameters" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "new_CSG_Parameters" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  result = (CSG_Parameters *)new CSG_Parameters(arg1,(wchar_t const *)arg2,(wchar_t const *)arg3,(wchar_t const *)arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters, SWIG_POINTER_NEW |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameters__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  void *arg1 = (void *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  int res1 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_CSG_Parameters",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Parameters" "', argument " "1"" of type '" "void *""'"); 
+  }
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_CSG_Parameters" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_CSG_Parameters" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  result = (CSG_Parameters *)new CSG_Parameters(arg1,(wchar_t const *)arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters, SWIG_POINTER_NEW |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Parameters(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Parameters__SWIG_0(self, args);
+  }
+  if (argc == 3) {
+    int _v;
+    void *ptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &ptr, 0, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_new_CSG_Parameters__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *ptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &ptr, 0, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_new_CSG_Parameters__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *ptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &ptr, 0, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            {
+              int res = SWIG_AsVal_bool(argv[4], NULL);
+              _v = SWIG_CheckState(res);
+            }
+            if (_v) {
+              return _wrap_new_CSG_Parameters__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Parameters'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Parameters()\n"
+    "    CSG_Parameters(void *,wchar_t const *,wchar_t const *,wchar_t const *,bool)\n"
+    "    CSG_Parameters(void *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    CSG_Parameters(void *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Create__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *arg2 = (void *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  bool arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Create",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Create" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Create" "', argument " "2"" of type '" "void *""'"); 
+  }
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Create" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Create" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Create" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Create" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  (arg1)->Create(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_Py_Void();
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Create__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *arg2 = (void *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Create",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Create" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Create" "', argument " "2"" of type '" "void *""'"); 
+  }
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Create" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Create" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Create" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  (arg1)->Create(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_Py_Void();
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Create__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *arg2 = (void *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Parameters_Create",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Create" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Create" "', argument " "2"" of type '" "void *""'"); 
+  }
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Create" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Create" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  (arg1)->Create(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4);
+  resultobj = SWIG_Py_Void();
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Create(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Parameters_Create__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Create__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *ptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &ptr, 0, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Create__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Create'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Create(CSG_Parameters *,void *,wchar_t const *,wchar_t const *,wchar_t const *,bool)\n"
+    "    Create(CSG_Parameters *,void *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Create(CSG_Parameters *,void *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Destroy" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Get_Owner(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  void *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Get_Owner",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Get_Owner" "', argument " "1"" of type '" "CSG_Parameters const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  result = (void *)((CSG_Parameters const *)arg1)->Get_Owner();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_void, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Get_Count" "', argument " "1"" of type '" "CSG_Parameters const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  result = (int)((CSG_Parameters const *)arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Identifier(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Set_Identifier",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Identifier" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_Identifier" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->Set_Identifier((wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Get_Identifier(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Get_Identifier",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Get_Identifier" "', argument " "1"" of type '" "CSG_Parameters const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  result = (wchar_t *)((CSG_Parameters const *)arg1)->Get_Identifier();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Set_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Name" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_Name" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->Set_Name((wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Get_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Get_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Get_Name" "', argument " "1"" of type '" "CSG_Parameters const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  result = (wchar_t *)((CSG_Parameters const *)arg1)->Get_Name();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Description(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Set_Description",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Description" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_Description" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  (arg1)->Set_Description((wchar_t const *)arg2);
+  resultobj = SWIG_Py_Void();
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Get_Description(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Get_Description",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Get_Description" "', argument " "1"" of type '" "CSG_Parameters const *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  result = (wchar_t *)((CSG_Parameters const *)arg1)->Get_Description();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Translation(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Translator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Set_Translation",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Translation" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Translator,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_Translation" "', argument " "2"" of type '" "CSG_Translator &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Set_Translation" "', argument " "2"" of type '" "CSG_Translator &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Translator * >(argp2);
+  (arg1)->Set_Translation(*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Enabled(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Set_Enabled",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Enabled" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameters_Set_Enabled" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Enabled(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Callback_On_Parameter_Changed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  TSG_PFNC_Parameter_Changed arg2 = (TSG_PFNC_Parameter_Changed) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Set_Callback_On_Parameter_Changed",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Callback_On_Parameter_Changed" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  {
+    int res = SWIG_ConvertFunctionPtr(obj1, (void**)(&arg2), SWIGTYPE_p_f_p_CSG_Parameter__int);
+    if (!SWIG_IsOK(res)) {
+      SWIG_exception_fail(SWIG_ArgError(res), "in method '" "CSG_Parameters_Set_Callback_On_Parameter_Changed" "', argument " "2"" of type '" "TSG_PFNC_Parameter_Changed""'"); 
+    }
+  }
+  (arg1)->Set_Callback_On_Parameter_Changed(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Callback__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Set_Callback",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Callback" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameters_Set_Callback" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Callback(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Callback__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Set_Callback",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Callback" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  (arg1)->Set_Callback();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Callback(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Parameters_Set_Callback__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameters_Set_Callback__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Set_Callback'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Callback(CSG_Parameters *,bool)\n"
+    "    Set_Callback(CSG_Parameters *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Get_Parameter__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Get_Parameter",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Get_Parameter" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameters_Get_Parameter" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Parameter *)(arg1)->Get_Parameter(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Get_Parameter__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Get_Parameter",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Get_Parameter" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Get_Parameter" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (CSG_Parameter *)(arg1)->Get_Parameter((wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters___call____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters___call__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters___call__" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameters___call__" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Parameter *)(arg1)->operator ()(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters___call____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters___call__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters___call__" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters___call__" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (CSG_Parameter *)(arg1)->operator ()((wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Del_Parameter__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Del_Parameter",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Del_Parameter" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameters_Del_Parameter" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (bool)(arg1)->Del_Parameter(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Del_Parameter__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Del_Parameter",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Del_Parameter" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Del_Parameter" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (bool)(arg1)->Del_Parameter((wchar_t const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Del_Parameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Del_Parameters",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Del_Parameters" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  result = (bool)(arg1)->Del_Parameters();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Node__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Node",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Node" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Node" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Node" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Node" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Node" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Node(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  double arg10 ;
+  bool arg11 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  double val10 ;
+  int ecode10 = 0 ;
+  bool val11 ;
+  int ecode11 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  PyObject * obj9 = 0 ;
+  PyObject * obj10 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Value" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Value" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  ecode10 = SWIG_AsVal_double(obj9, &val10);
+  if (!SWIG_IsOK(ecode10)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "CSG_Parameters_Add_Value" "', argument " "10"" of type '" "double""'");
+  } 
+  arg10 = static_cast< double >(val10);
+  ecode11 = SWIG_AsVal_bool(obj10, &val11);
+  if (!SWIG_IsOK(ecode11)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode11), "in method '" "CSG_Parameters_Add_Value" "', argument " "11"" of type '" "bool""'");
+  } 
+  arg11 = static_cast< bool >(val11);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  double arg10 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  double val10 ;
+  int ecode10 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  PyObject * obj9 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Value" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Value" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  ecode10 = SWIG_AsVal_double(obj9, &val10);
+  if (!SWIG_IsOK(ecode10)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "CSG_Parameters_Add_Value" "', argument " "10"" of type '" "double""'");
+  } 
+  arg10 = static_cast< double >(val10);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9,arg10);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Value" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Value" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  double arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Value" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Value__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Info_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Info_Value(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Value__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Info_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Info_Value(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  double arg10 ;
+  bool arg11 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  double val10 ;
+  int ecode10 = 0 ;
+  bool val11 ;
+  int ecode11 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  PyObject * obj9 = 0 ;
+  PyObject * obj10 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Range" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Range" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  ecode10 = SWIG_AsVal_double(obj9, &val10);
+  if (!SWIG_IsOK(ecode10)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "CSG_Parameters_Add_Range" "', argument " "10"" of type '" "double""'");
+  } 
+  arg10 = static_cast< double >(val10);
+  ecode11 = SWIG_AsVal_bool(obj10, &val11);
+  if (!SWIG_IsOK(ecode11)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode11), "in method '" "CSG_Parameters_Add_Range" "', argument " "11"" of type '" "bool""'");
+  } 
+  arg11 = static_cast< bool >(val11);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  double arg10 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  double val10 ;
+  int ecode10 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  PyObject * obj9 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Range" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Range" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  ecode10 = SWIG_AsVal_double(obj9, &val10);
+  if (!SWIG_IsOK(ecode10)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "CSG_Parameters_Add_Range" "', argument " "10"" of type '" "double""'");
+  } 
+  arg10 = static_cast< double >(val10);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9,arg10);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Range" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Range" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  double arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Range" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Range__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Info_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Info_Range(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Range__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Info_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Info_Range(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Range__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Info_Range",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Info_Range(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Choice__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  int arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Choice",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Choice" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Choice" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Choice" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Choice" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Choice" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Choice" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Choice" "', argument " "7"" of type '" "int""'");
+  } 
+  arg7 = static_cast< int >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Choice(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Choice__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Choice",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Choice" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Choice" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Choice" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Choice" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Choice" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Choice" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  result = (CSG_Parameter *)(arg1)->Add_Choice(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_String__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  bool arg7 ;
+  bool arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  bool val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Parameters_Add_String",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_String" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_String" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_String" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_String" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_String" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_String" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  ecode8 = SWIG_AsVal_bool(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_String" "', argument " "8"" of type '" "bool""'");
+  } 
+  arg8 = static_cast< bool >(val8);
+  result = (CSG_Parameter *)(arg1)->Add_String(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,arg7,arg8);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_String__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_String",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_String" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_String" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_String" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_String" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_String" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_String" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_String(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_String__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_String",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_String" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_String" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_String" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_String" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_String" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  result = (CSG_Parameter *)(arg1)->Add_String(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_String__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Info_String",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Info_String(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_String__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Info_String",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  result = (CSG_Parameter *)(arg1)->Add_Info_String(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  wchar_t *arg7 = (wchar_t *) 0 ;
+  bool arg8 ;
+  bool arg9 ;
+  bool arg10 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  int res7 ;
+  wchar_t *buf7 = 0 ;
+  int alloc7 = 0 ;
+  bool val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  bool val10 ;
+  int ecode10 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  PyObject * obj9 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  res7 = SWIG_AsWCharPtrAndSize(obj6, &buf7, NULL, &alloc7);
+  if (!SWIG_IsOK(res7)) {
+    SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "7"" of type '" "wchar_t const *""'");
+  }
+  arg7 = reinterpret_cast< wchar_t * >(buf7);
+  ecode8 = SWIG_AsVal_bool(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "8"" of type '" "bool""'");
+  } 
+  arg8 = static_cast< bool >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  ecode10 = SWIG_AsVal_bool(obj9, &val10);
+  if (!SWIG_IsOK(ecode10)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "10"" of type '" "bool""'");
+  } 
+  arg10 = static_cast< bool >(val10);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,(wchar_t const *)arg7,arg8,arg9,arg10);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  wchar_t *arg7 = (wchar_t *) 0 ;
+  bool arg8 ;
+  bool arg9 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  int res7 ;
+  wchar_t *buf7 = 0 ;
+  int alloc7 = 0 ;
+  bool val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  res7 = SWIG_AsWCharPtrAndSize(obj6, &buf7, NULL, &alloc7);
+  if (!SWIG_IsOK(res7)) {
+    SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "7"" of type '" "wchar_t const *""'");
+  }
+  arg7 = reinterpret_cast< wchar_t * >(buf7);
+  ecode8 = SWIG_AsVal_bool(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "8"" of type '" "bool""'");
+  } 
+  arg8 = static_cast< bool >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,(wchar_t const *)arg7,arg8,arg9);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  wchar_t *arg7 = (wchar_t *) 0 ;
+  bool arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  int res7 ;
+  wchar_t *buf7 = 0 ;
+  int alloc7 = 0 ;
+  bool val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  res7 = SWIG_AsWCharPtrAndSize(obj6, &buf7, NULL, &alloc7);
+  if (!SWIG_IsOK(res7)) {
+    SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "7"" of type '" "wchar_t const *""'");
+  }
+  arg7 = reinterpret_cast< wchar_t * >(buf7);
+  ecode8 = SWIG_AsVal_bool(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "8"" of type '" "bool""'");
+  } 
+  arg8 = static_cast< bool >(val8);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,(wchar_t const *)arg7,arg8);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  wchar_t *arg7 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  int res7 ;
+  wchar_t *buf7 = 0 ;
+  int alloc7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  res7 = SWIG_AsWCharPtrAndSize(obj6, &buf7, NULL, &alloc7);
+  if (!SWIG_IsOK(res7)) {
+    SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "7"" of type '" "wchar_t const *""'");
+  }
+  arg7 = reinterpret_cast< wchar_t * >(buf7);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,(wchar_t const *)arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Font__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wxFont *arg6 = (wxFont *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Font",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Font" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Font" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Font" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Font" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Font" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6,SWIGTYPE_p_wxFont, 0 |  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Font" "', argument " "6"" of type '" "wxFont *""'"); 
+  }
+  arg6 = reinterpret_cast< wxFont * >(argp6);
+  result = (CSG_Parameter *)(arg1)->Add_Font(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Font__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Font",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Font" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Font" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Font" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Font" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Font" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Font(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Colors__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  CSG_Colors *arg6 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Colors",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Colors" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Colors" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Colors" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Colors" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Colors" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Colors" "', argument " "6"" of type '" "CSG_Colors *""'"); 
+  }
+  arg6 = reinterpret_cast< CSG_Colors * >(argp6);
+  result = (CSG_Parameter *)(arg1)->Add_Colors(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Colors__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Colors",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Colors" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Colors" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Colors" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Colors" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Colors" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Colors(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FixedTable__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  CSG_Table *arg6 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_FixedTable",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "6"" of type '" "CSG_Table *""'"); 
+  }
+  arg6 = reinterpret_cast< CSG_Table * >(argp6);
+  result = (CSG_Parameter *)(arg1)->Add_FixedTable(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FixedTable__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_FixedTable",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_FixedTable(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_System__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  CSG_Grid_System *arg6 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Grid_System",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "6"" of type '" "CSG_Grid_System *""'"); 
+  }
+  arg6 = reinterpret_cast< CSG_Grid_System * >(argp6);
+  result = (CSG_Parameter *)(arg1)->Add_Grid_System(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_System__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Grid_System",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Grid_System(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  bool arg7 ;
+  TSG_Data_Type arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  int val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Parameters_Add_Grid",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Grid" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Grid" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  ecode8 = SWIG_AsVal_int(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Grid" "', argument " "8"" of type '" "TSG_Data_Type""'");
+  } 
+  arg8 = static_cast< TSG_Data_Type >(val8);
+  result = (CSG_Parameter *)(arg1)->Add_Grid(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Grid",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Grid" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Grid" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Grid(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Grid",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Grid" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Grid(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_Output__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Grid_Output",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid_Output" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid_Output" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid_Output" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid_Output" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid_Output" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Grid_Output(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_List__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Grid_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Grid_List(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_List__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Grid_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Grid_List(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table_Field__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  bool arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Table_Field",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Table_Field(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table_Field__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Table_Field",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Table_Field(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Table",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Table" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Table" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Table" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Table" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Table" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Table" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Table(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table_Output__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Table_Output",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Table_Output" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Table_Output" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Table_Output" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Table_Output" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Table_Output" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Table_Output(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table_List__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Table_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Table_List(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  TSG_Shape_Type arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Shapes",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "7"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg7 = static_cast< TSG_Shape_Type >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Shapes(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Shapes",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Shapes(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes_Output__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Shapes_Output",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Shapes_Output" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Shapes_Output" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Shapes_Output" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Shapes_Output" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Shapes_Output" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Shapes_Output(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes_List__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  TSG_Shape_Type arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Shapes_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "7"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg7 = static_cast< TSG_Shape_Type >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Shapes_List(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes_List__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Shapes_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Shapes_List(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_TIN__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_TIN",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_TIN" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_TIN" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_TIN" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_TIN" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_TIN" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_TIN" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_TIN(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_TIN_Output__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_TIN_Output",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_TIN_Output" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_TIN_Output" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_TIN_Output" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_TIN_Output" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_TIN_Output" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_TIN_Output(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_TIN_List__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_TIN_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_TIN_List(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_PointCloud__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_PointCloud",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_PointCloud(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_PointCloud_Output__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_PointCloud_Output",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_PointCloud_Output" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_PointCloud_Output" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_PointCloud_Output" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_PointCloud_Output" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_PointCloud_Output" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_PointCloud_Output(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_PointCloud_List__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_PointCloud_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_PointCloud_List(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Parameters__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Parameters",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Parameters" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Parameters" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Parameters" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Parameters" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Parameters" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Parameters(arg2,(wchar_t const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Parameter__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  CSG_Parameter *arg3 = (CSG_Parameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameters_Set_Parameter",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "3"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg3 = reinterpret_cast< CSG_Parameter * >(argp3);
+  result = (bool)(arg1)->Set_Parameter((wchar_t const *)arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Parameter__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Parameters_Set_Parameter",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Set_Parameter((wchar_t const *)arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Parameter__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int arg3 ;
+  double arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Parameters_Set_Parameter",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (bool)(arg1)->Set_Parameter((wchar_t const *)arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Parameter__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int arg3 ;
+  void *arg4 = (void *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int res4 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Parameters_Set_Parameter",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  res4 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg4), 0, 0);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "4"" of type '" "void *""'"); 
+  }
+  result = (bool)(arg1)->Set_Parameter((wchar_t const *)arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Parameter__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  int arg3 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Parameters_Set_Parameter",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Set_Parameter" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  result = (bool)(arg1)->Set_Parameter((wchar_t const *)arg2,arg3,(wchar_t const *)arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_Parameter(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_CSG_Parameters_Set_Parameter__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          void *ptr = 0;
+          int res = SWIG_ConvertPtr(argv[3], &ptr, 0, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Parameters_Set_Parameter__SWIG_3(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_int(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Parameters_Set_Parameter__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Parameters_Set_Parameter__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_int(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_CSG_Parameters_Set_Parameter__SWIG_4(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Set_Parameter'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Parameter(CSG_Parameters *,wchar_t const *,CSG_Parameter *)\n"
+    "    Set_Parameter(CSG_Parameters *,wchar_t const *,int,int)\n"
+    "    Set_Parameter(CSG_Parameters *,wchar_t const *,int,double)\n"
+    "    Set_Parameter(CSG_Parameters *,wchar_t const *,int,void *)\n"
+    "    Set_Parameter(CSG_Parameters *,wchar_t const *,int,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameters *arg2 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Assign",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Assign" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Assign" "', argument " "2"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameters * >(argp2);
+  result = (int)(arg1)->Assign(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Assign_Values(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameters *arg2 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Assign_Values",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Assign_Values" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Assign_Values" "', argument " "2"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameters * >(argp2);
+  result = (int)(arg1)->Assign_Values(arg2);
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Serialize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_String *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameters_Serialize",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Serialize" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Serialize" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Serialize" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Serialize" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Serialize((CSG_String const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Serialize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameters_Serialize",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Serialize" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Serialize" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Serialize" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Serialize" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Serialize(*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Serialize(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_CSG_String, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Parameters_Serialize__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Parameters_Serialize__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Serialize'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Serialize(CSG_Parameters *,CSG_String const &,bool)\n"
+    "    Serialize(CSG_Parameters *,CSG_MetaData &,bool)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Serialize_Compatibility(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_File *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Serialize_Compatibility",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Serialize_Compatibility" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_File,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Serialize_Compatibility" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Serialize_Compatibility" "', argument " "2"" of type '" "CSG_File &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_File * >(argp2);
+  result = (bool)(arg1)->Serialize_Compatibility(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_DataObjects_Check__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_DataObjects_Check",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_DataObjects_Check" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameters_DataObjects_Check" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (bool)(arg1)->DataObjects_Check(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_DataObjects_Check__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_DataObjects_Check",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_DataObjects_Check" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  result = (bool)(arg1)->DataObjects_Check();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_DataObjects_Check(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Parameters_DataObjects_Check__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameters_DataObjects_Check__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_DataObjects_Check'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    DataObjects_Check(CSG_Parameters *,bool)\n"
+    "    DataObjects_Check(CSG_Parameters *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Get_String(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_String *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameters_Get_String",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Get_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Get_String" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Get_String" "', argument " "2"" of type '" "CSG_String &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Get_String" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Get_String(*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Msg_String(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Msg_String",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Msg_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Parameters_Msg_String" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (bool)(arg1)->Msg_String(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_History__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  bool arg3 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Parameters_Set_History",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_History" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_History" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Set_History" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Set_History" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  ecode4 = SWIG_AsVal_bool(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Parameters_Set_History" "', argument " "4"" of type '" "bool""'");
+  } 
+  arg4 = static_cast< bool >(val4);
+  result = (bool)(arg1)->Set_History(*arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_History__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Parameters_Set_History",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_History" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_History" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Set_History" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Parameters_Set_History" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (bool)(arg1)->Set_History(*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_History__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_MetaData *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Set_History",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Set_History" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_MetaData,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Set_History" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Parameters_Set_History" "', argument " "2"" of type '" "CSG_MetaData &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_MetaData * >(argp2);
+  result = (bool)(arg1)->Set_History(*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Set_History(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters_Set_History__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Parameters_Set_History__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_MetaData, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_bool(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_CSG_Parameters_Set_History__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Set_History'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_History(CSG_Parameters *,CSG_MetaData &,bool,bool)\n"
+    "    Set_History(CSG_Parameters *,CSG_MetaData &,bool)\n"
+    "    Set_History(CSG_Parameters *,CSG_MetaData &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Get_Grid_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_Get_Grid_System",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Get_Grid_System" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  result = (CSG_Grid_System *)(arg1)->Get_Grid_System();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_is_Managed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Parameters_is_Managed",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_is_Managed" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  result = (bool)(arg1)->is_Managed();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Get_Parameter__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  char *arg2 = (char *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Get_Parameter",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Get_Parameter" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Get_Parameter" "', argument " "2"" of type '" "char const *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  result = (CSG_Parameter *)(arg1)->Get_Parameter((char const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Get_Parameter(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameters_Get_Parameter__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters_Get_Parameter__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters_Get_Parameter__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Get_Parameter'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Parameter(CSG_Parameters *,int)\n"
+    "    Get_Parameter(CSG_Parameters *,wchar_t const *)\n"
+    "    Get_Parameter(CSG_Parameters *,char const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters___call____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  char *arg2 = (char *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters___call__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters___call__" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters___call__" "', argument " "2"" of type '" "char const *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  result = (CSG_Parameter *)(arg1)->operator ()((char const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters___call__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameters___call____SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters___call____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters___call____SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters___call__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    operator ()(CSG_Parameters *,int)\n"
+    "    operator ()(CSG_Parameters *,wchar_t const *)\n"
+    "    operator ()(CSG_Parameters *,char const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Del_Parameter__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  char *arg2 = (char *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Parameters_Del_Parameter",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Del_Parameter" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Del_Parameter" "', argument " "2"" of type '" "char const *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  result = (bool)(arg1)->Del_Parameter((char const *)arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Del_Parameter(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Parameters_Del_Parameter__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters_Del_Parameter__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Parameters_Del_Parameter__SWIG_2(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Del_Parameter'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Del_Parameter(CSG_Parameters *,int)\n"
+    "    Del_Parameter(CSG_Parameters *,wchar_t const *)\n"
+    "    Del_Parameter(CSG_Parameters *,char const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Node__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Node",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Node" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Node" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Node" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Node" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Node" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Node(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Node(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Node__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Node__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Node'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Node(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Node(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  double arg10 ;
+  bool arg11 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  double val10 ;
+  int ecode10 = 0 ;
+  bool val11 ;
+  int ecode11 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  PyObject * obj9 = 0 ;
+  PyObject * obj10 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Value" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Value" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  ecode10 = SWIG_AsVal_double(obj9, &val10);
+  if (!SWIG_IsOK(ecode10)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "CSG_Parameters_Add_Value" "', argument " "10"" of type '" "double""'");
+  } 
+  arg10 = static_cast< double >(val10);
+  ecode11 = SWIG_AsVal_bool(obj10, &val11);
+  if (!SWIG_IsOK(ecode11)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode11), "in method '" "CSG_Parameters_Add_Value" "', argument " "11"" of type '" "bool""'");
+  } 
+  arg11 = static_cast< bool >(val11);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  double arg10 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  double val10 ;
+  int ecode10 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  PyObject * obj9 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Value" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Value" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  ecode10 = SWIG_AsVal_double(obj9, &val10);
+  if (!SWIG_IsOK(ecode10)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "CSG_Parameters_Add_Value" "', argument " "10"" of type '" "double""'");
+  } 
+  arg10 = static_cast< double >(val10);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9,arg10);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Value" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Value" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_9(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  double arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Value" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_10(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value__SWIG_11(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Value" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Value(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[12];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 11); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Value__SWIG_5(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Value__SWIG_11(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Value__SWIG_4(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Value__SWIG_10(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Parameters_Add_Value__SWIG_3(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Parameters_Add_Value__SWIG_9(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 9) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      return _wrap_CSG_Parameters_Add_Value__SWIG_2(self, args);
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 9) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      return _wrap_CSG_Parameters_Add_Value__SWIG_8(self, args);
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 10) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      {
+                        int res = SWIG_AsVal_double(argv[9], NULL);
+                        _v = SWIG_CheckState(res);
+                      }
+                      if (_v) {
+                        return _wrap_CSG_Parameters_Add_Value__SWIG_1(self, args);
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 10) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      {
+                        int res = SWIG_AsVal_double(argv[9], NULL);
+                        _v = SWIG_CheckState(res);
+                      }
+                      if (_v) {
+                        return _wrap_CSG_Parameters_Add_Value__SWIG_7(self, args);
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 11) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      {
+                        int res = SWIG_AsVal_double(argv[9], NULL);
+                        _v = SWIG_CheckState(res);
+                      }
+                      if (_v) {
+                        {
+                          int res = SWIG_AsVal_bool(argv[10], NULL);
+                          _v = SWIG_CheckState(res);
+                        }
+                        if (_v) {
+                          return _wrap_CSG_Parameters_Add_Value__SWIG_0(self, args);
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 11) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      {
+                        int res = SWIG_AsVal_double(argv[9], NULL);
+                        _v = SWIG_CheckState(res);
+                      }
+                      if (_v) {
+                        {
+                          int res = SWIG_AsVal_bool(argv[10], NULL);
+                          _v = SWIG_CheckState(res);
+                        }
+                        if (_v) {
+                          return _wrap_CSG_Parameters_Add_Value__SWIG_6(self, args);
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double,double,bool,double,bool)\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double,double,bool,double)\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double,double,bool)\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double,double)\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double)\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type)\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double,double,bool,double,bool)\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double,double,bool,double)\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double,double,bool)\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double,double)\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double)\n"
+    "    Add_Value(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Value__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  double arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Info_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Info_Value(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Value__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  TSG_Parameter_Type arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Info_Value",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Info_Value" "', argument " "6"" of type '" "TSG_Parameter_Type""'");
+  } 
+  arg6 = static_cast< TSG_Parameter_Type >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Info_Value(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Info_Value__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Info_Value__SWIG_3(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Info_Value__SWIG_0(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Info_Value__SWIG_2(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Info_Value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Info_Value(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double)\n"
+    "    Add_Info_Value(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type)\n"
+    "    Add_Info_Value(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type,double)\n"
+    "    Add_Info_Value(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,TSG_Parameter_Type)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  double arg10 ;
+  bool arg11 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  double val10 ;
+  int ecode10 = 0 ;
+  bool val11 ;
+  int ecode11 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  PyObject * obj9 = 0 ;
+  PyObject * obj10 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Range" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Range" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  ecode10 = SWIG_AsVal_double(obj9, &val10);
+  if (!SWIG_IsOK(ecode10)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "CSG_Parameters_Add_Range" "', argument " "10"" of type '" "double""'");
+  } 
+  arg10 = static_cast< double >(val10);
+  ecode11 = SWIG_AsVal_bool(obj10, &val11);
+  if (!SWIG_IsOK(ecode11)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode11), "in method '" "CSG_Parameters_Add_Range" "', argument " "11"" of type '" "bool""'");
+  } 
+  arg11 = static_cast< bool >(val11);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9,arg10,arg11);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  double arg10 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  double val10 ;
+  int ecode10 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  PyObject * obj9 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Range" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Range" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  ecode10 = SWIG_AsVal_double(obj9, &val10);
+  if (!SWIG_IsOK(ecode10)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "CSG_Parameters_Add_Range" "', argument " "10"" of type '" "double""'");
+  } 
+  arg10 = static_cast< double >(val10);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9,arg10);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_9(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  double arg8 ;
+  bool arg9 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Range" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_Range" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8,arg9);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_10(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  double arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  double val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  ecode8 = SWIG_AsVal_double(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Range" "', argument " "8"" of type '" "double""'");
+  } 
+  arg8 = static_cast< double >(val8);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_11(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_12(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range__SWIG_13(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Range",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Range" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Range(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Range(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[12];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 11); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Range__SWIG_6(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Range__SWIG_13(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Range__SWIG_5(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Range__SWIG_12(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Range__SWIG_4(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Range__SWIG_11(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Parameters_Add_Range__SWIG_3(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Parameters_Add_Range__SWIG_10(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 9) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      return _wrap_CSG_Parameters_Add_Range__SWIG_2(self, args);
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 9) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      return _wrap_CSG_Parameters_Add_Range__SWIG_9(self, args);
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 10) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      {
+                        int res = SWIG_AsVal_double(argv[9], NULL);
+                        _v = SWIG_CheckState(res);
+                      }
+                      if (_v) {
+                        return _wrap_CSG_Parameters_Add_Range__SWIG_1(self, args);
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 10) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      {
+                        int res = SWIG_AsVal_double(argv[9], NULL);
+                        _v = SWIG_CheckState(res);
+                      }
+                      if (_v) {
+                        return _wrap_CSG_Parameters_Add_Range__SWIG_8(self, args);
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 11) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      {
+                        int res = SWIG_AsVal_double(argv[9], NULL);
+                        _v = SWIG_CheckState(res);
+                      }
+                      if (_v) {
+                        {
+                          int res = SWIG_AsVal_bool(argv[10], NULL);
+                          _v = SWIG_CheckState(res);
+                        }
+                        if (_v) {
+                          return _wrap_CSG_Parameters_Add_Range__SWIG_0(self, args);
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 11) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_double(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      {
+                        int res = SWIG_AsVal_double(argv[9], NULL);
+                        _v = SWIG_CheckState(res);
+                      }
+                      if (_v) {
+                        {
+                          int res = SWIG_AsVal_bool(argv[10], NULL);
+                          _v = SWIG_CheckState(res);
+                        }
+                        if (_v) {
+                          return _wrap_CSG_Parameters_Add_Range__SWIG_7(self, args);
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Range'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,double,double,double,bool,double,bool)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,double,double,double,bool,double)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,double,double,double,bool)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,double,double,double)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,double,double)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,double)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,double,double,double,bool,double,bool)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,double,double,double,bool,double)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,double,double,double,bool)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,double,double,double)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,double,double)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,double)\n"
+    "    Add_Range(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Range__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  double arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  double val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Info_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  ecode7 = SWIG_AsVal_double(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "7"" of type '" "double""'");
+  } 
+  arg7 = static_cast< double >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Info_Range(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Range__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  double arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  double val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Info_Range",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_double(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "6"" of type '" "double""'");
+  } 
+  arg6 = static_cast< double >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Info_Range(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Range__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Info_Range",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_Range" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Info_Range(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_Range(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Info_Range__SWIG_2(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Info_Range__SWIG_5(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Info_Range__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Info_Range__SWIG_4(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Info_Range__SWIG_0(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_double(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_double(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Info_Range__SWIG_3(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Info_Range'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Info_Range(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,double,double)\n"
+    "    Add_Info_Range(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,double)\n"
+    "    Add_Info_Range(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Info_Range(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,double,double)\n"
+    "    Add_Info_Range(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,double)\n"
+    "    Add_Info_Range(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Choice__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  int arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Choice",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Choice" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Choice" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Choice" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Choice" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Choice" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Choice" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Choice" "', argument " "7"" of type '" "int""'");
+  } 
+  arg7 = static_cast< int >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Choice(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Choice__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Choice",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Choice" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Choice" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Choice" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Choice" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Choice" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Choice" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  result = (CSG_Parameter *)(arg1)->Add_Choice(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Choice(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Choice__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Choice__SWIG_3(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Choice__SWIG_0(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Choice__SWIG_2(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Choice'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Choice(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_Choice(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Choice(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_Choice(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_String__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  bool arg7 ;
+  bool arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  bool val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Parameters_Add_String",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_String" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_String" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_String" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_String" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_String" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_String" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  ecode8 = SWIG_AsVal_bool(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_String" "', argument " "8"" of type '" "bool""'");
+  } 
+  arg8 = static_cast< bool >(val8);
+  result = (CSG_Parameter *)(arg1)->Add_String(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,arg7,arg8);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_String__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_String",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_String" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_String" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_String" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_String" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_String" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_String" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_String(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_String__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_String",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_String" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_String" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_String" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_String" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_String" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  result = (CSG_Parameter *)(arg1)->Add_String(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_String(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[9];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 8); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_String__SWIG_2(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_String__SWIG_5(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_String__SWIG_1(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_String__SWIG_4(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_bool(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Parameters_Add_String__SWIG_0(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_bool(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Parameters_Add_String__SWIG_3(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_String'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_String(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,bool,bool)\n"
+    "    Add_String(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,bool)\n"
+    "    Add_String(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_String(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *,bool,bool)\n"
+    "    Add_String(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *,bool)\n"
+    "    Add_String(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_String__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Info_String",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Info_String(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_String__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Info_String",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Info_String" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  result = (CSG_Parameter *)(arg1)->Add_Info_String(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Info_String(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Info_String__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Info_String__SWIG_3(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Info_String__SWIG_0(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Info_String__SWIG_2(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Info_String'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Info_String(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,bool)\n"
+    "    Add_Info_String(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Info_String(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *,bool)\n"
+    "    Add_Info_String(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_6(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  wchar_t *arg7 = (wchar_t *) 0 ;
+  bool arg8 ;
+  bool arg9 ;
+  bool arg10 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  int res7 ;
+  wchar_t *buf7 = 0 ;
+  int alloc7 = 0 ;
+  bool val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  bool val10 ;
+  int ecode10 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  PyObject * obj9 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  res7 = SWIG_AsWCharPtrAndSize(obj6, &buf7, NULL, &alloc7);
+  if (!SWIG_IsOK(res7)) {
+    SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "7"" of type '" "wchar_t const *""'");
+  }
+  arg7 = reinterpret_cast< wchar_t * >(buf7);
+  ecode8 = SWIG_AsVal_bool(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "8"" of type '" "bool""'");
+  } 
+  arg8 = static_cast< bool >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  ecode10 = SWIG_AsVal_bool(obj9, &val10);
+  if (!SWIG_IsOK(ecode10)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode10), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "10"" of type '" "bool""'");
+  } 
+  arg10 = static_cast< bool >(val10);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,(wchar_t const *)arg7,arg8,arg9,arg10);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_7(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  wchar_t *arg7 = (wchar_t *) 0 ;
+  bool arg8 ;
+  bool arg9 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  int res7 ;
+  wchar_t *buf7 = 0 ;
+  int alloc7 = 0 ;
+  bool val8 ;
+  int ecode8 = 0 ;
+  bool val9 ;
+  int ecode9 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  PyObject * obj8 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  res7 = SWIG_AsWCharPtrAndSize(obj6, &buf7, NULL, &alloc7);
+  if (!SWIG_IsOK(res7)) {
+    SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "7"" of type '" "wchar_t const *""'");
+  }
+  arg7 = reinterpret_cast< wchar_t * >(buf7);
+  ecode8 = SWIG_AsVal_bool(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "8"" of type '" "bool""'");
+  } 
+  arg8 = static_cast< bool >(val8);
+  ecode9 = SWIG_AsVal_bool(obj8, &val9);
+  if (!SWIG_IsOK(ecode9)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode9), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "9"" of type '" "bool""'");
+  } 
+  arg9 = static_cast< bool >(val9);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,(wchar_t const *)arg7,arg8,arg9);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  wchar_t *arg7 = (wchar_t *) 0 ;
+  bool arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  int res7 ;
+  wchar_t *buf7 = 0 ;
+  int alloc7 = 0 ;
+  bool val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  res7 = SWIG_AsWCharPtrAndSize(obj6, &buf7, NULL, &alloc7);
+  if (!SWIG_IsOK(res7)) {
+    SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "7"" of type '" "wchar_t const *""'");
+  }
+  arg7 = reinterpret_cast< wchar_t * >(buf7);
+  ecode8 = SWIG_AsVal_bool(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "8"" of type '" "bool""'");
+  } 
+  arg8 = static_cast< bool >(val8);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,(wchar_t const *)arg7,arg8);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_9(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  wchar_t *arg7 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  int res7 ;
+  wchar_t *buf7 = 0 ;
+  int alloc7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  res7 = SWIG_AsWCharPtrAndSize(obj6, &buf7, NULL, &alloc7);
+  if (!SWIG_IsOK(res7)) {
+    SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "7"" of type '" "wchar_t const *""'");
+  }
+  arg7 = reinterpret_cast< wchar_t * >(buf7);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6,(wchar_t const *)arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  if (alloc7 == SWIG_NEWOBJ) delete[] buf7;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_10(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wchar_t *arg6 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int res6 ;
+  wchar_t *buf6 = 0 ;
+  int alloc6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_AsWCharPtrAndSize(obj5, &buf6, NULL, &alloc6);
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "6"" of type '" "wchar_t const *""'");
+  }
+  arg6 = reinterpret_cast< wchar_t * >(buf6);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,(wchar_t const *)arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  if (alloc6 == SWIG_NEWOBJ) delete[] buf6;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath__SWIG_11(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_FilePath",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FilePath" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_FilePath(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FilePath(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[11];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 10); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_FilePath__SWIG_5(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_FilePath__SWIG_11(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_FilePath__SWIG_4(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_FilePath__SWIG_10(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                int res = SWIG_AsWCharPtrAndSize(argv[6], 0, NULL, 0);
+                _v = SWIG_CheckState(res);
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_FilePath__SWIG_3(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                int res = SWIG_AsWCharPtrAndSize(argv[6], 0, NULL, 0);
+                _v = SWIG_CheckState(res);
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_FilePath__SWIG_9(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                int res = SWIG_AsWCharPtrAndSize(argv[6], 0, NULL, 0);
+                _v = SWIG_CheckState(res);
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_bool(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Parameters_Add_FilePath__SWIG_2(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                int res = SWIG_AsWCharPtrAndSize(argv[6], 0, NULL, 0);
+                _v = SWIG_CheckState(res);
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_bool(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Parameters_Add_FilePath__SWIG_8(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 9) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                int res = SWIG_AsWCharPtrAndSize(argv[6], 0, NULL, 0);
+                _v = SWIG_CheckState(res);
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_bool(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      return _wrap_CSG_Parameters_Add_FilePath__SWIG_1(self, args);
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 9) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                int res = SWIG_AsWCharPtrAndSize(argv[6], 0, NULL, 0);
+                _v = SWIG_CheckState(res);
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_bool(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      return _wrap_CSG_Parameters_Add_FilePath__SWIG_7(self, args);
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 10) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                int res = SWIG_AsWCharPtrAndSize(argv[6], 0, NULL, 0);
+                _v = SWIG_CheckState(res);
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_bool(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      {
+                        int res = SWIG_AsVal_bool(argv[9], NULL);
+                        _v = SWIG_CheckState(res);
+                      }
+                      if (_v) {
+                        return _wrap_CSG_Parameters_Add_FilePath__SWIG_0(self, args);
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 10) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              int res = SWIG_AsWCharPtrAndSize(argv[5], 0, NULL, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                int res = SWIG_AsWCharPtrAndSize(argv[6], 0, NULL, 0);
+                _v = SWIG_CheckState(res);
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_bool(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    {
+                      int res = SWIG_AsVal_bool(argv[8], NULL);
+                      _v = SWIG_CheckState(res);
+                    }
+                    if (_v) {
+                      {
+                        int res = SWIG_AsVal_bool(argv[9], NULL);
+                        _v = SWIG_CheckState(res);
+                      }
+                      if (_v) {
+                        return _wrap_CSG_Parameters_Add_FilePath__SWIG_6(self, args);
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_FilePath'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,bool,bool,bool)\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,bool,bool)\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,bool)\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,bool,bool,bool)\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,bool,bool)\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,bool)\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_FilePath(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Font__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  wxFont *arg6 = (wxFont *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Font",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Font" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Font" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Font" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Font" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Font" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6,SWIGTYPE_p_wxFont, 0 |  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Font" "', argument " "6"" of type '" "wxFont *""'"); 
+  }
+  arg6 = reinterpret_cast< wxFont * >(argp6);
+  result = (CSG_Parameter *)(arg1)->Add_Font(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Font__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Font",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Font" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Font" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Font" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Font" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Font" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Font(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Font(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Font__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Font__SWIG_3(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_wxFont, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Font__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_wxFont, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Font__SWIG_2(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Font'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Font(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,wxFont *)\n"
+    "    Add_Font(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Font(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,wxFont *)\n"
+    "    Add_Font(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Colors__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  CSG_Colors *arg6 = (CSG_Colors *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Colors",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Colors" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Colors" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Colors" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Colors" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Colors" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6,SWIGTYPE_p_CSG_Colors, 0 |  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Colors" "', argument " "6"" of type '" "CSG_Colors *""'"); 
+  }
+  arg6 = reinterpret_cast< CSG_Colors * >(argp6);
+  result = (CSG_Parameter *)(arg1)->Add_Colors(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Colors__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Colors",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Colors" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Colors" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Colors" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Colors" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Colors" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Colors(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Colors(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Colors__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Colors__SWIG_3(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Colors__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_CSG_Colors, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Colors__SWIG_2(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Colors'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Colors(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,CSG_Colors *)\n"
+    "    Add_Colors(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Colors(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,CSG_Colors *)\n"
+    "    Add_Colors(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FixedTable__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  CSG_Table *arg6 = (CSG_Table *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_FixedTable",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6,SWIGTYPE_p_CSG_Table, 0 |  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "6"" of type '" "CSG_Table *""'"); 
+  }
+  arg6 = reinterpret_cast< CSG_Table * >(argp6);
+  result = (CSG_Parameter *)(arg1)->Add_FixedTable(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FixedTable__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_FixedTable",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_FixedTable" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_FixedTable(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_FixedTable(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_FixedTable__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_FixedTable__SWIG_3(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_CSG_Table, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_FixedTable__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_CSG_Table, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_FixedTable__SWIG_2(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_FixedTable'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_FixedTable(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,CSG_Table *)\n"
+    "    Add_FixedTable(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_FixedTable(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,CSG_Table *)\n"
+    "    Add_FixedTable(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_System__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  CSG_Grid_System *arg6 = (CSG_Grid_System *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Grid_System",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  res6 = SWIG_ConvertPtr(obj5, &argp6,SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  if (!SWIG_IsOK(res6)) {
+    SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "6"" of type '" "CSG_Grid_System *""'"); 
+  }
+  arg6 = reinterpret_cast< CSG_Grid_System * >(argp6);
+  result = (CSG_Parameter *)(arg1)->Add_Grid_System(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_System__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Grid_System",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid_System" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Grid_System(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_System(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Grid_System__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Grid_System__SWIG_3(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Grid_System__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              void *vptr = 0;
+              int res = SWIG_ConvertPtr(argv[5], &vptr, SWIGTYPE_p_CSG_Grid_System, 0);
+              _v = SWIG_CheckState(res);
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Grid_System__SWIG_2(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Grid_System'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Grid_System(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,CSG_Grid_System *)\n"
+    "    Add_Grid_System(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Grid_System(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,CSG_Grid_System *)\n"
+    "    Add_Grid_System(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  bool arg7 ;
+  TSG_Data_Type arg8 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  int val8 ;
+  int ecode8 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  PyObject * obj7 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOOO:CSG_Parameters_Add_Grid",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Grid" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Grid" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  ecode8 = SWIG_AsVal_int(obj7, &val8);
+  if (!SWIG_IsOK(ecode8)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "CSG_Parameters_Add_Grid" "', argument " "8"" of type '" "TSG_Data_Type""'");
+  } 
+  arg8 = static_cast< TSG_Data_Type >(val8);
+  result = (CSG_Parameter *)(arg1)->Add_Grid(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7,arg8);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Grid",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Grid" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Grid" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Grid(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid__SWIG_5(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Grid",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Grid" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Grid(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[9];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 8); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Grid__SWIG_2(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Grid__SWIG_5(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Grid__SWIG_1(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Grid__SWIG_4(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_int(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Parameters_Add_Grid__SWIG_0(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 8) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  {
+                    int res = SWIG_AsVal_int(argv[7], NULL);
+                    _v = SWIG_CheckState(res);
+                  }
+                  if (_v) {
+                    return _wrap_CSG_Parameters_Add_Grid__SWIG_3(self, args);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Grid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Grid(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int,bool,TSG_Data_Type)\n"
+    "    Add_Grid(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int,bool)\n"
+    "    Add_Grid(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_Grid(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int,bool,TSG_Data_Type)\n"
+    "    Add_Grid(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int,bool)\n"
+    "    Add_Grid(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_Output__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Grid_Output",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid_Output" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid_Output" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid_Output" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid_Output" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid_Output" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Grid_Output(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_Output(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Grid_Output__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Grid_Output__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Grid_Output'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Grid_Output(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Grid_Output(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_List__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  bool arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  bool val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Grid_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_bool(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "7"" of type '" "bool""'");
+  } 
+  arg7 = static_cast< bool >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Grid_List(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_List__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Grid_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Grid_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Grid_List(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Grid_List(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Grid_List__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Grid_List__SWIG_3(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Grid_List__SWIG_0(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_bool(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Grid_List__SWIG_2(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Grid_List'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Grid_List(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int,bool)\n"
+    "    Add_Grid_List(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_Grid_List(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int,bool)\n"
+    "    Add_Grid_List(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table_Field__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  bool arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  bool val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Table_Field",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_bool(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "6"" of type '" "bool""'");
+  } 
+  arg6 = static_cast< bool >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Table_Field(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table_Field__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Table_Field",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Table_Field" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Table_Field(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table_Field(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Table_Field__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Table_Field__SWIG_3(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Table_Field__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_bool(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Table_Field__SWIG_2(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Table_Field'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Table_Field(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,bool)\n"
+    "    Add_Table_Field(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Table_Field(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,bool)\n"
+    "    Add_Table_Field(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Table",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Table" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Table" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Table" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Table" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Table" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Table" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Table(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Table__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Table__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Table'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Table(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_Table(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table_Output__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Table_Output",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Table_Output" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Table_Output" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Table_Output" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Table_Output" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Table_Output" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Table_Output(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table_Output(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Table_Output__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Table_Output__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Table_Output'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Table_Output(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Table_Output(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table_List__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Table_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Table_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Table_List(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Table_List(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Table_List__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Table_List__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Table_List'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Table_List(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_Table_List(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  TSG_Shape_Type arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Shapes",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "7"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg7 = static_cast< TSG_Shape_Type >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Shapes(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Shapes",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Shapes" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Shapes(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Shapes__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Shapes__SWIG_3(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Shapes__SWIG_0(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Shapes__SWIG_2(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Shapes'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Shapes(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int,TSG_Shape_Type)\n"
+    "    Add_Shapes(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_Shapes(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int,TSG_Shape_Type)\n"
+    "    Add_Shapes(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes_Output__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Shapes_Output",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Shapes_Output" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Shapes_Output" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Shapes_Output" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Shapes_Output" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Shapes_Output" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Shapes_Output(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes_Output(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Shapes_Output__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Shapes_Output__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Shapes_Output'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Shapes_Output(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Shapes_Output(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes_List__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  TSG_Shape_Type arg7 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  int val7 ;
+  int ecode7 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  PyObject * obj6 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:CSG_Parameters_Add_Shapes_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  ecode7 = SWIG_AsVal_int(obj6, &val7);
+  if (!SWIG_IsOK(ecode7)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "7"" of type '" "TSG_Shape_Type""'");
+  } 
+  arg7 = static_cast< TSG_Shape_Type >(val7);
+  result = (CSG_Parameter *)(arg1)->Add_Shapes_List(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6,arg7);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes_List__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_Shapes_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_Shapes_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_Shapes_List(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Shapes_List(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 7); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Shapes_List__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_Shapes_List__SWIG_3(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Shapes_List__SWIG_0(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 7) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                {
+                  int res = SWIG_AsVal_int(argv[6], NULL);
+                  _v = SWIG_CheckState(res);
+                }
+                if (_v) {
+                  return _wrap_CSG_Parameters_Add_Shapes_List__SWIG_2(self, args);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Shapes_List'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Shapes_List(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int,TSG_Shape_Type)\n"
+    "    Add_Shapes_List(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_Shapes_List(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int,TSG_Shape_Type)\n"
+    "    Add_Shapes_List(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_TIN__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_TIN",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_TIN" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_TIN" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_TIN" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_TIN" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_TIN" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_TIN" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_TIN(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_TIN(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_TIN__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_TIN__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_TIN'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_TIN(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_TIN(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_TIN_Output__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_TIN_Output",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_TIN_Output" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_TIN_Output" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_TIN_Output" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_TIN_Output" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_TIN_Output" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_TIN_Output(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_TIN_Output(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_TIN_Output__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_TIN_Output__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_TIN_Output'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_TIN_Output(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_TIN_Output(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_TIN_List__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_TIN_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_TIN_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_TIN_List(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_TIN_List(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_TIN_List__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_TIN_List__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_TIN_List'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_TIN_List(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_TIN_List(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_PointCloud__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_PointCloud",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_PointCloud" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_PointCloud(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_PointCloud(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_PointCloud__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_PointCloud__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_PointCloud'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_PointCloud(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_PointCloud(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_PointCloud_Output__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_PointCloud_Output",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_PointCloud_Output" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_PointCloud_Output" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_PointCloud_Output" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_PointCloud_Output" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_PointCloud_Output" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_PointCloud_Output(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_PointCloud_Output(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_PointCloud_Output__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_PointCloud_Output__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_PointCloud_Output'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_PointCloud_Output(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_PointCloud_Output(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_PointCloud_List__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  int arg6 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  int val6 ;
+  int ecode6 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  PyObject * obj5 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:CSG_Parameters_Add_PointCloud_List",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  ecode6 = SWIG_AsVal_int(obj5, &val6);
+  if (!SWIG_IsOK(ecode6)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "CSG_Parameters_Add_PointCloud_List" "', argument " "6"" of type '" "int""'");
+  } 
+  arg6 = static_cast< int >(val6);
+  result = (CSG_Parameter *)(arg1)->Add_PointCloud_List(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5,arg6);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_PointCloud_List(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 6); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_PointCloud_List__SWIG_0(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 6) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              {
+                int res = SWIG_AsVal_int(argv[5], NULL);
+                _v = SWIG_CheckState(res);
+              }
+              if (_v) {
+                return _wrap_CSG_Parameters_Add_PointCloud_List__SWIG_1(self, args);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_PointCloud_List'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_PointCloud_List(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *,int)\n"
+    "    Add_PointCloud_List(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Parameters__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Parameters *arg1 = (CSG_Parameters *) 0 ;
+  CSG_Parameter *arg2 = (CSG_Parameter *) 0 ;
+  char *arg3 = (char *) 0 ;
+  wchar_t *arg4 = (wchar_t *) 0 ;
+  wchar_t *arg5 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  int res4 ;
+  wchar_t *buf4 = 0 ;
+  int alloc4 = 0 ;
+  int res5 ;
+  wchar_t *buf5 = 0 ;
+  int alloc5 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  PyObject * obj4 = 0 ;
+  CSG_Parameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:CSG_Parameters_Add_Parameters",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Parameters_Add_Parameters" "', argument " "1"" of type '" "CSG_Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Parameters * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Parameters_Add_Parameters" "', argument " "2"" of type '" "CSG_Parameter *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Parameter * >(argp2);
+  res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Parameters_Add_Parameters" "', argument " "3"" of type '" "char const *""'");
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  res4 = SWIG_AsWCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CSG_Parameters_Add_Parameters" "', argument " "4"" of type '" "wchar_t const *""'");
+  }
+  arg4 = reinterpret_cast< wchar_t * >(buf4);
+  res5 = SWIG_AsWCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+  if (!SWIG_IsOK(res5)) {
+    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CSG_Parameters_Add_Parameters" "', argument " "5"" of type '" "wchar_t const *""'");
+  }
+  arg5 = reinterpret_cast< wchar_t * >(buf5);
+  result = (CSG_Parameter *)(arg1)->Add_Parameters(arg2,(char const *)arg3,(wchar_t const *)arg4,(wchar_t const *)arg5);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameter, 0 |  0 );
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+  if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Parameters_Add_Parameters(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 5); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsWCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Parameters__SWIG_0(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  if (argc == 5) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Parameters, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_CSG_Parameter, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          int res = SWIG_AsWCharPtrAndSize(argv[3], 0, NULL, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            int res = SWIG_AsWCharPtrAndSize(argv[4], 0, NULL, 0);
+            _v = SWIG_CheckState(res);
+            if (_v) {
+              return _wrap_CSG_Parameters_Add_Parameters__SWIG_1(self, args);
+            }
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Parameters_Add_Parameters'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Add_Parameters(CSG_Parameters *,CSG_Parameter *,wchar_t const *,wchar_t const *,wchar_t const *)\n"
+    "    Add_Parameters(CSG_Parameters *,CSG_Parameter *,char const *,wchar_t const *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Parameters_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Parameters, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Module(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Module",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Module" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Destroy" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  (arg1)->Destroy();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Module_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Get_Type" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (TSG_Module_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Get_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Get_Name" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Name();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_Description(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Get_Description",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Get_Description" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Description();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_Author(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Get_Author",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Get_Author" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Author();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_Icon(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Get_Icon",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Get_Icon" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (wchar_t *)(arg1)->Get_Icon();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_MenuPath(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Get_MenuPath",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Get_MenuPath" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (wchar_t *)(arg1)->Get_MenuPath();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_Parameters_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Get_Parameters_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Get_Parameters_Count" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (int)(arg1)->Get_Parameters_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_Parameters__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Get_Parameters",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Get_Parameters" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (CSG_Parameters *)(arg1)->Get_Parameters();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_Parameters__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Get_Parameters",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Get_Parameters" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Get_Parameters" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Parameters *)(arg1)->Get_Parameters(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_Parameters__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Get_Parameters",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Get_Parameters" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Get_Parameters" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (CSG_Parameters *)(arg1)->Get_Parameters((wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_Parameters__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  char *arg2 = (char *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Parameters *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Get_Parameters",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Get_Parameters" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Get_Parameters" "', argument " "2"" of type '" "char const *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  result = (CSG_Parameters *)(arg1)->Get_Parameters((char const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Parameters, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Get_Parameters(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Module_Get_Parameters__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Module_Get_Parameters__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Module_Get_Parameters__SWIG_2(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Module_Get_Parameters__SWIG_3(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Module_Get_Parameters'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Parameters(CSG_Module *)\n"
+    "    Get_Parameters(CSG_Module *,int)\n"
+    "    Get_Parameters(CSG_Module *,wchar_t const *)\n"
+    "    Get_Parameters(CSG_Module *,char const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Garbage_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Garbage_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Garbage_Get_Count" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (int)(arg1)->Garbage_Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Garbage_Get_Item(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Data_Object *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Garbage_Get_Item",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Garbage_Get_Item" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Garbage_Get_Item" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Data_Object *)(arg1)->Garbage_Get_Item(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Garbage_Del_Item__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  int arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  CSG_Data_Object *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Module_Garbage_Del_Item",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Garbage_Del_Item" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Garbage_Del_Item" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Module_Garbage_Del_Item" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  result = (CSG_Data_Object *)(arg1)->Garbage_Del_Item(arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Garbage_Del_Item__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Data_Object *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Garbage_Del_Item",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Garbage_Del_Item" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Garbage_Del_Item" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Data_Object *)(arg1)->Garbage_Del_Item(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Data_Object, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Garbage_Del_Item(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Module_Garbage_Del_Item__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_bool(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_CSG_Module_Garbage_Del_Item__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Module_Garbage_Del_Item'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Garbage_Del_Item(CSG_Module *,int,bool)\n"
+    "    Garbage_Del_Item(CSG_Module *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Garbage_Clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Garbage_Clear",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Garbage_Clear" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  (arg1)->Garbage_Clear();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_do_Sync_Projections(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_do_Sync_Projections",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_do_Sync_Projections" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (bool)(arg1)->do_Sync_Projections();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_is_Interactive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_is_Interactive",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_is_Interactive" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (bool)(arg1)->is_Interactive();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_is_Progress(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_is_Progress",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_is_Progress" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (bool)(arg1)->is_Progress();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_is_Executing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_is_Executing",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_is_Executing" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (bool)(arg1)->is_Executing();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Set_Translation(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  CSG_Translator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Set_Translation",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Set_Translation" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Translator,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Set_Translation" "', argument " "2"" of type '" "CSG_Translator &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Module_Set_Translation" "', argument " "2"" of type '" "CSG_Translator &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Translator * >(argp2);
+  (arg1)->Set_Translation(*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Set_Managed__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Set_Managed",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Set_Managed" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Set_Managed" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Managed(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Set_Managed__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Set_Managed",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Set_Managed" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  (arg1)->Set_Managed();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Set_Managed(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Module_Set_Managed__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Module_Set_Managed__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Module_Set_Managed'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Managed(CSG_Module *,bool)\n"
+    "    Set_Managed(CSG_Module *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Set_Show_Progress__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Set_Show_Progress",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Set_Show_Progress" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Set_Show_Progress" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->Set_Show_Progress(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Set_Show_Progress__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Set_Show_Progress",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Set_Show_Progress" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  (arg1)->Set_Show_Progress();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Set_Show_Progress(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Module_Set_Show_Progress__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Module_Set_Show_Progress__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Module_Set_Show_Progress'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Set_Show_Progress(CSG_Module *,bool)\n"
+    "    Set_Show_Progress(CSG_Module *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_On_Before_Execution(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_On_Before_Execution",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_On_Before_Execution" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (bool)(arg1)->On_Before_Execution();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_On_After_Execution(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_On_After_Execution",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_On_After_Execution" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (bool)(arg1)->On_After_Execution();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Execute(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module *arg1 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Execute",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Execute" "', argument " "1"" of type '" "CSG_Module *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module * >(argp1);
+  result = (bool)(arg1)->Execute();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Module_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Module, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Module_Grid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Grid *arg1 = (CSG_Module_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Module_Grid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Grid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Module_Grid" "', argument " "1"" of type '" "CSG_Module_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Grid * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Grid_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Grid *arg1 = (CSG_Module_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Module_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Grid_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Grid_Get_Type" "', argument " "1"" of type '" "CSG_Module_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Grid * >(argp1);
+  result = (TSG_Module_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Grid_Get_System(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Grid *arg1 = (CSG_Module_Grid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Grid_System *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Grid_Get_System",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Grid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Grid_Get_System" "', argument " "1"" of type '" "CSG_Module_Grid *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Grid * >(argp1);
+  result = (CSG_Grid_System *)(arg1)->Get_System();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Grid_System, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Module_Grid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Module_Grid, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Module_Interactive_Base(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Interactive_Base *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Module_Interactive_Base")) SWIG_fail;
+  result = (CSG_Module_Interactive_Base *)new CSG_Module_Interactive_Base();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module_Interactive_Base, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Module_Interactive_Base(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Interactive_Base *arg1 = (CSG_Module_Interactive_Base *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Module_Interactive_Base",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Interactive_Base, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Module_Interactive_Base" "', argument " "1"" of type '" "CSG_Module_Interactive_Base *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Interactive_Base * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Interactive_Base_Execute_Position(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Interactive_Base *arg1 = (CSG_Module_Interactive_Base *) 0 ;
+  CSG_Point arg2 ;
+  TSG_Module_Interactive_Mode arg3 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:CSG_Module_Interactive_Base_Execute_Position",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Interactive_Base, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Interactive_Base_Execute_Position" "', argument " "1"" of type '" "CSG_Module_Interactive_Base *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Interactive_Base * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_Point,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Interactive_Base_Execute_Position" "', argument " "2"" of type '" "CSG_Point""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Module_Interactive_Base_Execute_Position" "', argument " "2"" of type '" "CSG_Point""'");
+    } else {
+      CSG_Point * temp = reinterpret_cast< CSG_Point * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Module_Interactive_Base_Execute_Position" "', argument " "3"" of type '" "TSG_Module_Interactive_Mode""'");
+  } 
+  arg3 = static_cast< TSG_Module_Interactive_Mode >(val3);
+  ecode4 = SWIG_AsVal_int(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CSG_Module_Interactive_Base_Execute_Position" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (bool)(arg1)->Execute_Position(arg2,arg3,arg4);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Interactive_Base_Execute_Keyboard(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Interactive_Base *arg1 = (CSG_Module_Interactive_Base *) 0 ;
+  int arg2 ;
+  int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Module_Interactive_Base_Execute_Keyboard",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Interactive_Base, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Interactive_Base_Execute_Keyboard" "', argument " "1"" of type '" "CSG_Module_Interactive_Base *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Interactive_Base * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Interactive_Base_Execute_Keyboard" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CSG_Module_Interactive_Base_Execute_Keyboard" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  result = (bool)(arg1)->Execute_Keyboard(arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Interactive_Base_Execute_Finish(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Interactive_Base *arg1 = (CSG_Module_Interactive_Base *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Interactive_Base_Execute_Finish",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Interactive_Base, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Interactive_Base_Execute_Finish" "', argument " "1"" of type '" "CSG_Module_Interactive_Base *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Interactive_Base * >(argp1);
+  result = (bool)(arg1)->Execute_Finish();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Interactive_Base_Get_Drag_Mode(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Interactive_Base *arg1 = (CSG_Module_Interactive_Base *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Interactive_Base_Get_Drag_Mode",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Interactive_Base, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Interactive_Base_Get_Drag_Mode" "', argument " "1"" of type '" "CSG_Module_Interactive_Base *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Interactive_Base * >(argp1);
+  result = (int)(arg1)->Get_Drag_Mode();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Module_Interactive_Base_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Module_Interactive_Base, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Module_Interactive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Interactive *arg1 = (CSG_Module_Interactive *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Module_Interactive",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Interactive, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Module_Interactive" "', argument " "1"" of type '" "CSG_Module_Interactive *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Interactive * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Interactive_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Interactive *arg1 = (CSG_Module_Interactive *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Module_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Interactive_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Interactive, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Interactive_Get_Type" "', argument " "1"" of type '" "CSG_Module_Interactive *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Interactive * >(argp1);
+  result = (TSG_Module_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Interactive_is_Interactive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Interactive *arg1 = (CSG_Module_Interactive *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Interactive_is_Interactive",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Interactive, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Interactive_is_Interactive" "', argument " "1"" of type '" "CSG_Module_Interactive *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Interactive * >(argp1);
+  result = (bool)(arg1)->is_Interactive();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Module_Interactive_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Module_Interactive, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Module_Grid_Interactive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Grid_Interactive *arg1 = (CSG_Module_Grid_Interactive *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Module_Grid_Interactive",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Grid_Interactive, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Module_Grid_Interactive" "', argument " "1"" of type '" "CSG_Module_Grid_Interactive *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Grid_Interactive * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Grid_Interactive_Get_Type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Grid_Interactive *arg1 = (CSG_Module_Grid_Interactive *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  TSG_Module_Type result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Grid_Interactive_Get_Type",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Grid_Interactive, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Grid_Interactive_Get_Type" "', argument " "1"" of type '" "CSG_Module_Grid_Interactive *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Grid_Interactive * >(argp1);
+  result = (TSG_Module_Type)(arg1)->Get_Type();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Grid_Interactive_is_Interactive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Grid_Interactive *arg1 = (CSG_Module_Grid_Interactive *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Grid_Interactive_is_Interactive",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Grid_Interactive, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Grid_Interactive_is_Interactive" "', argument " "1"" of type '" "CSG_Module_Grid_Interactive *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Grid_Interactive * >(argp1);
+  result = (bool)(arg1)->is_Interactive();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Module_Grid_Interactive_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Module_Grid_Interactive, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Module_Library_Interface(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library_Interface *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Module_Library_Interface")) SWIG_fail;
+  result = (CSG_Module_Library_Interface *)new CSG_Module_Library_Interface();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module_Library_Interface, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Module_Library_Interface(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library_Interface *arg1 = (CSG_Module_Library_Interface *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Module_Library_Interface",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library_Interface, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Module_Library_Interface" "', argument " "1"" of type '" "CSG_Module_Library_Interface *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library_Interface * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Interface_Set_Info(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library_Interface *arg1 = (CSG_Module_Library_Interface *) 0 ;
+  int arg2 ;
+  wchar_t *arg3 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int res3 ;
+  wchar_t *buf3 = 0 ;
+  int alloc3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:CSG_Module_Library_Interface_Set_Info",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library_Interface, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Interface_Set_Info" "', argument " "1"" of type '" "CSG_Module_Library_Interface *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library_Interface * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Library_Interface_Set_Info" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  res3 = SWIG_AsWCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CSG_Module_Library_Interface_Set_Info" "', argument " "3"" of type '" "wchar_t const *""'");
+  }
+  arg3 = reinterpret_cast< wchar_t * >(buf3);
+  (arg1)->Set_Info(arg2,(wchar_t const *)arg3);
+  resultobj = SWIG_Py_Void();
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return resultobj;
+fail:
+  if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Interface_Get_Info(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library_Interface *arg1 = (CSG_Module_Library_Interface *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Interface_Get_Info",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library_Interface, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Interface_Get_Info" "', argument " "1"" of type '" "CSG_Module_Library_Interface *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library_Interface * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Library_Interface_Get_Info" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)(arg1)->Get_Info(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Interface_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library_Interface *arg1 = (CSG_Module_Library_Interface *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_Interface_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library_Interface, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Interface_Get_Count" "', argument " "1"" of type '" "CSG_Module_Library_Interface *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library_Interface * >(argp1);
+  result = (int)(arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Interface_Add_Module(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library_Interface *arg1 = (CSG_Module_Library_Interface *) 0 ;
+  CSG_Module *arg2 = (CSG_Module *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Interface_Add_Module",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library_Interface, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Interface_Add_Module" "', argument " "1"" of type '" "CSG_Module_Library_Interface *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library_Interface * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Library_Interface_Add_Module" "', argument " "2"" of type '" "CSG_Module *""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_Module * >(argp2);
+  result = (bool)(arg1)->Add_Module(arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Interface_Get_Module(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library_Interface *arg1 = (CSG_Module_Library_Interface *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Module *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Interface_Get_Module",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library_Interface, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Interface_Get_Module" "', argument " "1"" of type '" "CSG_Module_Library_Interface *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library_Interface * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Library_Interface_Get_Module" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Module *)(arg1)->Get_Module(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Interface_Set_File_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library_Interface *arg1 = (CSG_Module_Library_Interface *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Interface_Set_File_Name",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library_Interface, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Interface_Set_File_Name" "', argument " "1"" of type '" "CSG_Module_Library_Interface *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library_Interface * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Library_Interface_Set_File_Name" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Module_Library_Interface_Set_File_Name" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  (arg1)->Set_File_Name((CSG_String const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Interface_Get_File_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library_Interface *arg1 = (CSG_Module_Library_Interface *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_Interface_Get_File_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library_Interface, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Interface_Get_File_Name" "', argument " "1"" of type '" "CSG_Module_Library_Interface *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library_Interface * >(argp1);
+  result = (wchar_t *)(arg1)->Get_File_Name();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Interface_Get_Translation(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library_Interface *arg1 = (CSG_Module_Library_Interface *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Interface_Get_Translation",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library_Interface, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Interface_Get_Translation" "', argument " "1"" of type '" "CSG_Module_Library_Interface *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library_Interface * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Library_Interface_Get_Translation" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (wchar_t *)(arg1)->Get_Translation((wchar_t const *)arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Module_Library_Interface_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Module_Library_Interface, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CSG_Module_Library__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_CSG_Module_Library")) SWIG_fail;
+  result = (CSG_Module_Library *)new CSG_Module_Library();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module_Library, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CSG_Module_Library(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_CSG_Module_Library",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CSG_Module_Library" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Module_Library__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_String *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_Module_Library *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_CSG_Module_Library",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_CSG_Module_Library" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_CSG_Module_Library" "', argument " "1"" of type '" "CSG_String const &""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_String * >(argp1);
+  result = (CSG_Module_Library *)new CSG_Module_Library((CSG_String const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module_Library, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CSG_Module_Library(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 1); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_CSG_Module_Library__SWIG_0(self, args);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_CSG_String, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CSG_Module_Library__SWIG_1(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_CSG_Module_Library'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CSG_Module_Library()\n"
+    "    CSG_Module_Library(CSG_String const &)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Create(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  CSG_String *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Create",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Create" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_CSG_String,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Library_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CSG_Module_Library_Create" "', argument " "2"" of type '" "CSG_String const &""'"); 
+  }
+  arg2 = reinterpret_cast< CSG_String * >(argp2);
+  result = (bool)(arg1)->Create((CSG_String const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Destroy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_Destroy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Destroy" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  result = (bool)(arg1)->Destroy();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_is_Valid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_is_Valid",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_is_Valid" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  result = (bool)(arg1)->is_Valid();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_File_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_Get_File_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_File_Name" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  result = (CSG_String *) &(arg1)->Get_File_Name();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_String, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Info(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Get_Info",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Info" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Library_Get_Info" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (wchar_t *)(arg1)->Get_Info(arg2);
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_Get_Name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Name" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  result = (arg1)->Get_Name();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Description(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_Get_Description",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Description" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  result = (arg1)->Get_Description();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Author(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_Get_Author",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Author" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  result = (arg1)->Get_Author();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Version(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_Get_Version",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Version" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  result = (arg1)->Get_Version();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Menu__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_Get_Menu",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Menu" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  result = (arg1)->Get_Menu();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Summary__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Get_Summary",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Summary" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Library_Get_Summary" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (arg1)->Get_Summary(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Summary__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_Get_Summary",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Summary" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  result = (arg1)->Get_Summary();
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Summary(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Module_Library_Get_Summary__SWIG_1(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Module_Library_Get_Summary__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Module_Library_Get_Summary'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Summary(CSG_Module_Library *,bool)\n"
+    "    Get_Summary(CSG_Module_Library *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CSG_Module_Library_Get_Count",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Count" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  result = (int)(arg1)->Get_Count();
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Module *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Get_Module",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Module" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Library_Get_Module" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Module *)(arg1)->Get_Module(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Module *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Get_Module",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Module" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Library_Get_Module" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (CSG_Module *)(arg1)->Get_Module((wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Module_Library_Get_Module__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Module_Library_Get_Module__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Module_Library_Get_Module'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Module(CSG_Module_Library *,int)\n"
+    "    Get_Module(CSG_Module_Library *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module_Grid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Module_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Get_Module_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Module_Grid" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Library_Get_Module_Grid" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Module_Grid *)(arg1)->Get_Module_Grid(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module_Grid, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module_Grid__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Module_Grid *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Get_Module_Grid",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Module_Grid" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Library_Get_Module_Grid" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (CSG_Module_Grid *)(arg1)->Get_Module_Grid((wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module_Grid, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module_Grid(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Module_Library_Get_Module_Grid__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Module_Library_Get_Module_Grid__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Module_Library_Get_Module_Grid'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Module_Grid(CSG_Module_Library *,int)\n"
+    "    Get_Module_Grid(CSG_Module_Library *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module_I__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Module_Interactive *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Get_Module_I",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Module_I" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Library_Get_Module_I" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Module_Interactive *)(arg1)->Get_Module_I(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module_Interactive, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module_I__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Module_Interactive *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Get_Module_I",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Module_I" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Library_Get_Module_I" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (CSG_Module_Interactive *)(arg1)->Get_Module_I((wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module_Interactive, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module_I(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Module_Library_Get_Module_I__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Module_Library_Get_Module_I__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Module_Library_Get_Module_I'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Module_I(CSG_Module_Library *,int)\n"
+    "    Get_Module_I(CSG_Module_Library *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module_Grid_I__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Module_Grid_Interactive *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Get_Module_Grid_I",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Module_Grid_I" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Library_Get_Module_Grid_I" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (CSG_Module_Grid_Interactive *)(arg1)->Get_Module_Grid_I(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module_Grid_Interactive, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module_Grid_I__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  wchar_t *arg2 = (wchar_t *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  wchar_t *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_Module_Grid_Interactive *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Get_Module_Grid_I",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Module_Grid_I" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  res2 = SWIG_AsWCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CSG_Module_Library_Get_Module_Grid_I" "', argument " "2"" of type '" "wchar_t const *""'");
+  }
+  arg2 = reinterpret_cast< wchar_t * >(buf2);
+  result = (CSG_Module_Grid_Interactive *)(arg1)->Get_Module_Grid_I((wchar_t const *)arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CSG_Module_Grid_Interactive, 0 |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Module_Grid_I(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Module_Library_Get_Module_Grid_I__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsWCharPtrAndSize(argv[1], 0, NULL, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_CSG_Module_Library_Get_Module_Grid_I__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Module_Library_Get_Module_Grid_I'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Module_Grid_I(CSG_Module_Library *,int)\n"
+    "    Get_Module_Grid_I(CSG_Module_Library *,wchar_t const *)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Menu__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CSG_Module_Library *arg1 = (CSG_Module_Library *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  CSG_String result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CSG_Module_Library_Get_Menu",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CSG_Module_Library, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CSG_Module_Library_Get_Menu" "', argument " "1"" of type '" "CSG_Module_Library *""'"); 
+  }
+  arg1 = reinterpret_cast< CSG_Module_Library * >(argp1);
+  ecode2 = SWIG_AsVal_int(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CSG_Module_Library_Get_Menu" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  result = (arg1)->Get_Menu(arg2);
+  resultobj = SWIG_NewPointerObj((new CSG_String(static_cast< const CSG_String& >(result))), SWIGTYPE_p_CSG_String, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CSG_Module_Library_Get_Menu(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  int ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = (int)PyObject_Length(args);
+  for (ii = 0; (ii < argc) && (ii < 2); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_CSG_Module_Library_Get_Menu__SWIG_0(self, args);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CSG_Module_Library, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_int(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_CSG_Module_Library_Get_Menu__SWIG_1(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CSG_Module_Library_Get_Menu'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Get_Menu(CSG_Module_Library *)\n"
+    "    Get_Menu(CSG_Module_Library *,int)\n");
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *CSG_Module_Library_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CSG_Module_Library, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_SAGA_API_Get_Version(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  wchar_t *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":SAGA_API_Get_Version")) SWIG_fail;
+  result = (wchar_t *)SAGA_API_Get_Version();
+  resultobj = SWIG_FromWCharPtr((const wchar_t *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+static PyMethodDef SwigMethods[] = {
+	 { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
+	 { (char *)"SG_Malloc", _wrap_SG_Malloc, METH_VARARGS, NULL},
+	 { (char *)"SG_Calloc", _wrap_SG_Calloc, METH_VARARGS, NULL},
+	 { (char *)"SG_Realloc", _wrap_SG_Realloc, METH_VARARGS, NULL},
+	 { (char *)"SG_Free", _wrap_SG_Free, METH_VARARGS, NULL},
+	 { (char *)"SG_Swap_Bytes", _wrap_SG_Swap_Bytes, METH_VARARGS, NULL},
+	 { (char *)"SG_Mem_Get_Int", _wrap_SG_Mem_Get_Int, METH_VARARGS, NULL},
+	 { (char *)"SG_Mem_Set_Int", _wrap_SG_Mem_Set_Int, METH_VARARGS, NULL},
+	 { (char *)"SG_Mem_Get_Double", _wrap_SG_Mem_Get_Double, METH_VARARGS, NULL},
+	 { (char *)"SG_Mem_Set_Double", _wrap_SG_Mem_Set_Double, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_String", _wrap_new_CSG_String, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_String", _wrap_delete_CSG_String, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_c_str", _wrap_CSG_String_c_str, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_b_str", _wrap_CSG_String_b_str, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Length", _wrap_CSG_String_Length, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Clear", _wrap_CSG_String_Clear, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Format", _wrap_CSG_String_Format, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Printf", _wrap_CSG_String_Printf, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Scanf", _wrap_CSG_String_Scanf, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Append", _wrap_CSG_String_Append, METH_VARARGS, NULL},
+	 { (char *)"CSG_String___add__", _wrap_CSG_String___add__, METH_VARARGS, NULL},
+	 { (char *)"CSG_String___iadd__", _wrap_CSG_String___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Cmp", _wrap_CSG_String_Cmp, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_CmpNoCase", _wrap_CSG_String_CmpNoCase, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Make_Lower", _wrap_CSG_String_Make_Lower, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Make_Upper", _wrap_CSG_String_Make_Upper, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Replace", _wrap_CSG_String_Replace, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Remove", _wrap_CSG_String_Remove, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Trim", _wrap_CSG_String_Trim, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Find", _wrap_CSG_String_Find, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Contains", _wrap_CSG_String_Contains, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_AfterFirst", _wrap_CSG_String_AfterFirst, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_AfterLast", _wrap_CSG_String_AfterLast, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_BeforeFirst", _wrap_CSG_String_BeforeFirst, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_BeforeLast", _wrap_CSG_String_BeforeLast, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Right", _wrap_CSG_String_Right, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Mid", _wrap_CSG_String_Mid, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_Left", _wrap_CSG_String_Left, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_asInt", _wrap_CSG_String_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_asDouble", _wrap_CSG_String_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_String_swigregister", CSG_String_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Strings", _wrap_new_CSG_Strings, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Strings", _wrap_delete_CSG_Strings, METH_VARARGS, NULL},
+	 { (char *)"CSG_Strings_Clear", _wrap_CSG_Strings_Clear, METH_VARARGS, NULL},
+	 { (char *)"CSG_Strings_Assign", _wrap_CSG_Strings_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Strings_Add", _wrap_CSG_Strings_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Strings___iadd__", _wrap_CSG_Strings___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Strings_Set_Count", _wrap_CSG_Strings_Set_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Strings_Get_Count", _wrap_CSG_Strings_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Strings_Get_String", _wrap_CSG_Strings_Get_String, METH_VARARGS, NULL},
+	 { (char *)"CSG_Strings_swigregister", CSG_Strings_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Printf", _wrap_SG_Printf, METH_VARARGS, NULL},
+	 { (char *)"SG_FPrintf", _wrap_SG_FPrintf, METH_VARARGS, NULL},
+	 { (char *)"SG_Sscanf", _wrap_SG_Sscanf, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_CurrentTimeStr", _wrap_SG_Get_CurrentTimeStr, METH_VARARGS, NULL},
+	 { (char *)"SG_UTF8_To_String", _wrap_SG_UTF8_To_String, METH_VARARGS, NULL},
+	 { (char *)"SG_String_To_UTF8", _wrap_SG_String_To_UTF8, METH_VARARGS, NULL},
+	 { (char *)"SG_Degree_To_Double", _wrap_SG_Degree_To_Double, METH_VARARGS, NULL},
+	 { (char *)"SG_Double_To_Degree", _wrap_SG_Double_To_Degree, METH_VARARGS, NULL},
+	 { (char *)"SG_Date_To_Number", _wrap_SG_Date_To_Number, METH_VARARGS, NULL},
+	 { (char *)"SG_Number_To_Date", _wrap_SG_Number_To_Date, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Significant_Decimals", _wrap_SG_Get_Significant_Decimals, METH_VARARGS, NULL},
+	 { (char *)"SG_Flip_Decimal_Separators", _wrap_SG_Flip_Decimal_Separators, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_String", _wrap_SG_Get_String, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Array", _wrap_delete_CSG_Array, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Array", _wrap_new_CSG_Array, METH_VARARGS, NULL},
+	 { (char *)"CSG_Array_Create", _wrap_CSG_Array_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Array_Destroy", _wrap_CSG_Array_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Array_Set_Growth", _wrap_CSG_Array_Set_Growth, METH_VARARGS, NULL},
+	 { (char *)"CSG_Array_Get_Growth", _wrap_CSG_Array_Get_Growth, METH_VARARGS, NULL},
+	 { (char *)"CSG_Array_Get_Size", _wrap_CSG_Array_Get_Size, METH_VARARGS, NULL},
+	 { (char *)"CSG_Array_Get_Entry", _wrap_CSG_Array_Get_Entry, METH_VARARGS, NULL},
+	 { (char *)"CSG_Array_Get_Array", _wrap_CSG_Array_Get_Array, METH_VARARGS, NULL},
+	 { (char *)"CSG_Array_Set_Array", _wrap_CSG_Array_Set_Array, METH_VARARGS, NULL},
+	 { (char *)"CSG_Array_Inc_Array", _wrap_CSG_Array_Inc_Array, METH_VARARGS, NULL},
+	 { (char *)"CSG_Array_Dec_Array", _wrap_CSG_Array_Dec_Array, METH_VARARGS, NULL},
+	 { (char *)"CSG_Array_swigregister", CSG_Array_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Buffer", _wrap_new_CSG_Buffer, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_Create", _wrap_CSG_Buffer_Create, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Buffer", _wrap_delete_CSG_Buffer, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_Destroy", _wrap_CSG_Buffer_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_Set_Size", _wrap_CSG_Buffer_Set_Size, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_Inc_Size", _wrap_CSG_Buffer_Inc_Size, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_Get_Size", _wrap_CSG_Buffer_Get_Size, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_Set_Data", _wrap_CSG_Buffer_Set_Data, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_Get_Data", _wrap_CSG_Buffer_Get_Data, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_Add_Value", _wrap_CSG_Buffer_Add_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer___iadd__", _wrap_CSG_Buffer___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_Set_Value", _wrap_CSG_Buffer_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_asShort", _wrap_CSG_Buffer_asShort, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_asInt", _wrap_CSG_Buffer_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_asFloat", _wrap_CSG_Buffer_asFloat, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_asDouble", _wrap_CSG_Buffer_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Buffer_swigregister", CSG_Buffer_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Bytes", _wrap_new_CSG_Bytes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Create", _wrap_CSG_Bytes_Create, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Bytes", _wrap_delete_CSG_Bytes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Destroy", _wrap_CSG_Bytes_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Clear", _wrap_CSG_Bytes_Clear, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Rewind", _wrap_CSG_Bytes_Rewind, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_is_EOF", _wrap_CSG_Bytes_is_EOF, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Get_Count", _wrap_CSG_Bytes_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Get_Bytes", _wrap_CSG_Bytes_Get_Bytes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes___add__", _wrap_CSG_Bytes___add__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Get_Byte", _wrap_CSG_Bytes_Get_Byte, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Assign", _wrap_CSG_Bytes_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Add", _wrap_CSG_Bytes_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes___iadd__", _wrap_CSG_Bytes___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_asByte", _wrap_CSG_Bytes_asByte, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_asChar", _wrap_CSG_Bytes_asChar, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_asShort", _wrap_CSG_Bytes_asShort, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_asWord", _wrap_CSG_Bytes_asWord, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_asInt", _wrap_CSG_Bytes_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_asDWord", _wrap_CSG_Bytes_asDWord, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_asFloat", _wrap_CSG_Bytes_asFloat, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_asDouble", _wrap_CSG_Bytes_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Read_Byte", _wrap_CSG_Bytes_Read_Byte, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Read_Char", _wrap_CSG_Bytes_Read_Char, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Read_Short", _wrap_CSG_Bytes_Read_Short, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Read_Word", _wrap_CSG_Bytes_Read_Word, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Read_Int", _wrap_CSG_Bytes_Read_Int, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Read_DWord", _wrap_CSG_Bytes_Read_DWord, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Read_Float", _wrap_CSG_Bytes_Read_Float, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Read_Double", _wrap_CSG_Bytes_Read_Double, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_toHexString", _wrap_CSG_Bytes_toHexString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_fromHexString", _wrap_CSG_Bytes_fromHexString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_swigregister", CSG_Bytes_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Bytes_Array", _wrap_new_CSG_Bytes_Array, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Bytes_Array", _wrap_delete_CSG_Bytes_Array, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Array_Destroy", _wrap_CSG_Bytes_Array_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Array_Get_Count", _wrap_CSG_Bytes_Array_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Array_Get_Bytes", _wrap_CSG_Bytes_Array_Get_Bytes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Array_Add", _wrap_CSG_Bytes_Array_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Bytes_Array_swigregister", CSG_Bytes_Array_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Stack", _wrap_new_CSG_Stack, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Stack", _wrap_delete_CSG_Stack, METH_VARARGS, NULL},
+	 { (char *)"CSG_Stack_Get_RecordSize", _wrap_CSG_Stack_Get_RecordSize, METH_VARARGS, NULL},
+	 { (char *)"CSG_Stack_Get_Size", _wrap_CSG_Stack_Get_Size, METH_VARARGS, NULL},
+	 { (char *)"CSG_Stack_Clear", _wrap_CSG_Stack_Clear, METH_VARARGS, NULL},
+	 { (char *)"CSG_Stack_Destroy", _wrap_CSG_Stack_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Stack_swigregister", CSG_Stack_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Data_Type_Get_Size", _wrap_SG_Data_Type_Get_Size, METH_VARARGS, NULL},
+	 { (char *)"SG_Data_Type_Get_Name", _wrap_SG_Data_Type_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"SG_Data_Type_is_Numeric", _wrap_SG_Data_Type_is_Numeric, METH_VARARGS, NULL},
+	 { (char *)"SG_DataType_Range_Check", _wrap_SG_DataType_Range_Check, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_File", _wrap_new_CSG_File, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_File", _wrap_delete_CSG_File, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Attach", _wrap_CSG_File_Attach, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Detach", _wrap_CSG_File_Detach, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Get_Stream", _wrap_CSG_File_Get_Stream, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Get_UnicodeFlag", _wrap_CSG_File_Get_UnicodeFlag, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Set_UnicodeFlag", _wrap_CSG_File_Set_UnicodeFlag, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Open", _wrap_CSG_File_Open, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Close", _wrap_CSG_File_Close, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_is_Open", _wrap_CSG_File_is_Open, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_is_EOF", _wrap_CSG_File_is_EOF, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Length", _wrap_CSG_File_Length, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Seek", _wrap_CSG_File_Seek, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Seek_Start", _wrap_CSG_File_Seek_Start, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Seek_End", _wrap_CSG_File_Seek_End, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Tell", _wrap_CSG_File_Tell, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Flush", _wrap_CSG_File_Flush, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Printf", _wrap_CSG_File_Printf, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Scanf", _wrap_CSG_File_Scanf, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Get_Character", _wrap_CSG_File_Get_Character, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Read", _wrap_CSG_File_Read, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Write", _wrap_CSG_File_Write, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Read_Line", _wrap_CSG_File_Read_Line, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Read_Int", _wrap_CSG_File_Read_Int, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Write_Int", _wrap_CSG_File_Write_Int, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Read_Double", _wrap_CSG_File_Read_Double, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Write_Double", _wrap_CSG_File_Write_Double, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Scan", _wrap_CSG_File_Scan, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Scan_Int", _wrap_CSG_File_Scan_Int, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Scan_Double", _wrap_CSG_File_Scan_Double, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_Scan_String", _wrap_CSG_File_Scan_String, METH_VARARGS, NULL},
+	 { (char *)"CSG_File_swigregister", CSG_File_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Dir_Exists", _wrap_SG_Dir_Exists, METH_VARARGS, NULL},
+	 { (char *)"SG_Dir_Create", _wrap_SG_Dir_Create, METH_VARARGS, NULL},
+	 { (char *)"SG_Dir_Get_Current", _wrap_SG_Dir_Get_Current, METH_VARARGS, NULL},
+	 { (char *)"SG_File_Exists", _wrap_SG_File_Exists, METH_VARARGS, NULL},
+	 { (char *)"SG_File_Delete", _wrap_SG_File_Delete, METH_VARARGS, NULL},
+	 { (char *)"SG_File_Get_TmpName", _wrap_SG_File_Get_TmpName, METH_VARARGS, NULL},
+	 { (char *)"SG_File_Get_Name", _wrap_SG_File_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"SG_File_Get_Path", _wrap_SG_File_Get_Path, METH_VARARGS, NULL},
+	 { (char *)"SG_File_Make_Path", _wrap_SG_File_Make_Path, METH_VARARGS, NULL},
+	 { (char *)"SG_File_Cmp_Extension", _wrap_SG_File_Cmp_Extension, METH_VARARGS, NULL},
+	 { (char *)"SG_File_Get_Extension", _wrap_SG_File_Get_Extension, METH_VARARGS, NULL},
+	 { (char *)"SG_File_Set_Extension", _wrap_SG_File_Set_Extension, METH_VARARGS, NULL},
+	 { (char *)"SG_Read_Line", _wrap_SG_Read_Line, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Colors", _wrap_new_CSG_Colors, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Colors", _wrap_delete_CSG_Colors, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Destroy", _wrap_CSG_Colors_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Set_Count", _wrap_CSG_Colors_Set_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Get_Count", _wrap_CSG_Colors_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Set_Color", _wrap_CSG_Colors_Set_Color, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Set_Red", _wrap_CSG_Colors_Set_Red, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Set_Green", _wrap_CSG_Colors_Set_Green, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Set_Blue", _wrap_CSG_Colors_Set_Blue, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Set_Brightness", _wrap_CSG_Colors_Set_Brightness, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Get_Color", _wrap_CSG_Colors_Get_Color, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Get_Red", _wrap_CSG_Colors_Get_Red, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Get_Green", _wrap_CSG_Colors_Get_Green, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Get_Blue", _wrap_CSG_Colors_Get_Blue, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Get_Brightness", _wrap_CSG_Colors_Get_Brightness, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Set_Default", _wrap_CSG_Colors_Set_Default, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Set_Palette", _wrap_CSG_Colors_Set_Palette, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Set_Ramp", _wrap_CSG_Colors_Set_Ramp, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Set_Ramp_Brighness", _wrap_CSG_Colors_Set_Ramp_Brighness, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Random", _wrap_CSG_Colors_Random, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Invert", _wrap_CSG_Colors_Invert, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Revert", _wrap_CSG_Colors_Revert, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Assign", _wrap_CSG_Colors_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Load", _wrap_CSG_Colors_Load, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Save", _wrap_CSG_Colors_Save, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_Serialize", _wrap_CSG_Colors_Serialize, METH_VARARGS, NULL},
+	 { (char *)"CSG_Colors_swigregister", CSG_Colors_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Translator", _wrap_delete_CSG_Translator, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Translator", _wrap_new_CSG_Translator, METH_VARARGS, NULL},
+	 { (char *)"CSG_Translator_Create", _wrap_CSG_Translator_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Translator_Destroy", _wrap_CSG_Translator_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Translator_is_CaseSensitive", _wrap_CSG_Translator_is_CaseSensitive, METH_VARARGS, NULL},
+	 { (char *)"CSG_Translator_Get_Count", _wrap_CSG_Translator_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Translator_Get_Text", _wrap_CSG_Translator_Get_Text, METH_VARARGS, NULL},
+	 { (char *)"CSG_Translator_Get_Translation", _wrap_CSG_Translator_Get_Translation, METH_VARARGS, NULL},
+	 { (char *)"CSG_Translator_swigregister", CSG_Translator_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Translator", _wrap_SG_Get_Translator, METH_VARARGS, NULL},
+	 { (char *)"SG_Translate", _wrap_SG_Translate, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_UI_Parameter", _wrap_new_CSG_UI_Parameter, METH_VARARGS, NULL},
+	 { (char *)"CSG_UI_Parameter_True_set", _wrap_CSG_UI_Parameter_True_set, METH_VARARGS, NULL},
+	 { (char *)"CSG_UI_Parameter_True_get", _wrap_CSG_UI_Parameter_True_get, METH_VARARGS, NULL},
+	 { (char *)"CSG_UI_Parameter_Number_set", _wrap_CSG_UI_Parameter_Number_set, METH_VARARGS, NULL},
+	 { (char *)"CSG_UI_Parameter_Number_get", _wrap_CSG_UI_Parameter_Number_get, METH_VARARGS, NULL},
+	 { (char *)"CSG_UI_Parameter_Pointer_set", _wrap_CSG_UI_Parameter_Pointer_set, METH_VARARGS, NULL},
+	 { (char *)"CSG_UI_Parameter_Pointer_get", _wrap_CSG_UI_Parameter_Pointer_get, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_UI_Parameter", _wrap_delete_CSG_UI_Parameter, METH_VARARGS, NULL},
+	 { (char *)"CSG_UI_Parameter_swigregister", CSG_UI_Parameter_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Set_UI_Callback", _wrap_SG_Set_UI_Callback, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_UI_Callback", _wrap_SG_Get_UI_Callback, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Progress_Lock", _wrap_SG_UI_Progress_Lock, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Process_Get_Okay", _wrap_SG_UI_Process_Get_Okay, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Process_Set_Okay", _wrap_SG_UI_Process_Set_Okay, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Process_Set_Progress", _wrap_SG_UI_Process_Set_Progress, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Process_Set_Ready", _wrap_SG_UI_Process_Set_Ready, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Process_Set_Text", _wrap_SG_UI_Process_Set_Text, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Stop_Execution", _wrap_SG_UI_Stop_Execution, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Dlg_Message", _wrap_SG_UI_Dlg_Message, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Dlg_Continue", _wrap_SG_UI_Dlg_Continue, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Dlg_Error", _wrap_SG_UI_Dlg_Error, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Dlg_Parameters", _wrap_SG_UI_Dlg_Parameters, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Msg_Lock", _wrap_SG_UI_Msg_Lock, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Msg_Add", _wrap_SG_UI_Msg_Add, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Msg_Add_Error", _wrap_SG_UI_Msg_Add_Error, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Msg_Add_Execution", _wrap_SG_UI_Msg_Add_Execution, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_DataObject_Find", _wrap_SG_UI_DataObject_Find, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_DataObject_Check", _wrap_SG_UI_DataObject_Check, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_DataObject_Add", _wrap_SG_UI_DataObject_Add, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_DataObject_Update", _wrap_SG_UI_DataObject_Update, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_DataObject_Show", _wrap_SG_UI_DataObject_Show, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_DataObject_asImage", _wrap_SG_UI_DataObject_asImage, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_DataObject_Colors_Get", _wrap_SG_UI_DataObject_Colors_Get, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_DataObject_Colors_Set", _wrap_SG_UI_DataObject_Colors_Set, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_DataObject_Params_Get", _wrap_SG_UI_DataObject_Params_Get, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_DataObject_Params_Set", _wrap_SG_UI_DataObject_Params_Set, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_DataObject_Get_All", _wrap_SG_UI_DataObject_Get_All, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Get_Window_Main", _wrap_SG_UI_Get_Window_Main, METH_VARARGS, NULL},
+	 { (char *)"SG_UI_Get_Application_Path", _wrap_SG_UI_Get_Application_Path, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_MetaData", _wrap_new_CSG_MetaData, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Create", _wrap_CSG_MetaData_Create, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_MetaData", _wrap_delete_CSG_MetaData, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Destroy", _wrap_CSG_MetaData_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Load", _wrap_CSG_MetaData_Load, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Save", _wrap_CSG_MetaData_Save, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Load_WKT", _wrap_CSG_MetaData_Load_WKT, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Save_WKT", _wrap_CSG_MetaData_Save_WKT, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Assign", _wrap_CSG_MetaData_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData___iadd__", _wrap_CSG_MetaData___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Get_Name", _wrap_CSG_MetaData_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Set_Name", _wrap_CSG_MetaData_Set_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Get_Content", _wrap_CSG_MetaData_Get_Content, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Set_Content", _wrap_CSG_MetaData_Set_Content, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Cmp_Content", _wrap_CSG_MetaData_Cmp_Content, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Get_Children_Count", _wrap_CSG_MetaData_Get_Children_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Get_Child", _wrap_CSG_MetaData_Get_Child, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Add_Child", _wrap_CSG_MetaData_Add_Child, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Del_Child", _wrap_CSG_MetaData_Del_Child, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_is_Valid", _wrap_CSG_MetaData_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Get_Property_Count", _wrap_CSG_MetaData_Get_Property_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Get_Property_Name", _wrap_CSG_MetaData_Get_Property_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Get_Property", _wrap_CSG_MetaData_Get_Property, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Add_Property", _wrap_CSG_MetaData_Add_Property, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Set_Property", _wrap_CSG_MetaData_Set_Property, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_Cmp_Property", _wrap_CSG_MetaData_Cmp_Property, METH_VARARGS, NULL},
+	 { (char *)"CSG_MetaData_swigregister", CSG_MetaData_swigregister, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_x_set", _wrap_TSG_Point_x_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_x_get", _wrap_TSG_Point_x_get, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_y_set", _wrap_TSG_Point_y_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_y_get", _wrap_TSG_Point_y_get, METH_VARARGS, NULL},
+	 { (char *)"new_TSG_Point", _wrap_new_TSG_Point, METH_VARARGS, NULL},
+	 { (char *)"delete_TSG_Point", _wrap_delete_TSG_Point, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_swigregister", TSG_Point_swigregister, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Z_x_set", _wrap_TSG_Point_Z_x_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Z_x_get", _wrap_TSG_Point_Z_x_get, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Z_y_set", _wrap_TSG_Point_Z_y_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Z_y_get", _wrap_TSG_Point_Z_y_get, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Z_z_set", _wrap_TSG_Point_Z_z_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Z_z_get", _wrap_TSG_Point_Z_z_get, METH_VARARGS, NULL},
+	 { (char *)"new_TSG_Point_Z", _wrap_new_TSG_Point_Z, METH_VARARGS, NULL},
+	 { (char *)"delete_TSG_Point_Z", _wrap_delete_TSG_Point_Z, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Z_swigregister", TSG_Point_Z_swigregister, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_ZM_x_set", _wrap_TSG_Point_ZM_x_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_ZM_x_get", _wrap_TSG_Point_ZM_x_get, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_ZM_y_set", _wrap_TSG_Point_ZM_y_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_ZM_y_get", _wrap_TSG_Point_ZM_y_get, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_ZM_z_set", _wrap_TSG_Point_ZM_z_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_ZM_z_get", _wrap_TSG_Point_ZM_z_get, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_ZM_m_set", _wrap_TSG_Point_ZM_m_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_ZM_m_get", _wrap_TSG_Point_ZM_m_get, METH_VARARGS, NULL},
+	 { (char *)"new_TSG_Point_ZM", _wrap_new_TSG_Point_ZM, METH_VARARGS, NULL},
+	 { (char *)"delete_TSG_Point_ZM", _wrap_delete_TSG_Point_ZM, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_ZM_swigregister", TSG_Point_ZM_swigregister, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Int_x_set", _wrap_TSG_Point_Int_x_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Int_x_get", _wrap_TSG_Point_Int_x_get, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Int_y_set", _wrap_TSG_Point_Int_y_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Int_y_get", _wrap_TSG_Point_Int_y_get, METH_VARARGS, NULL},
+	 { (char *)"new_TSG_Point_Int", _wrap_new_TSG_Point_Int, METH_VARARGS, NULL},
+	 { (char *)"delete_TSG_Point_Int", _wrap_delete_TSG_Point_Int, METH_VARARGS, NULL},
+	 { (char *)"TSG_Point_Int_swigregister", TSG_Point_Int_swigregister, METH_VARARGS, NULL},
+	 { (char *)"TSG_Rect_xMin_set", _wrap_TSG_Rect_xMin_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Rect_xMin_get", _wrap_TSG_Rect_xMin_get, METH_VARARGS, NULL},
+	 { (char *)"TSG_Rect_yMin_set", _wrap_TSG_Rect_yMin_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Rect_yMin_get", _wrap_TSG_Rect_yMin_get, METH_VARARGS, NULL},
+	 { (char *)"TSG_Rect_xMax_set", _wrap_TSG_Rect_xMax_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Rect_xMax_get", _wrap_TSG_Rect_xMax_get, METH_VARARGS, NULL},
+	 { (char *)"TSG_Rect_yMax_set", _wrap_TSG_Rect_yMax_set, METH_VARARGS, NULL},
+	 { (char *)"TSG_Rect_yMax_get", _wrap_TSG_Rect_yMax_get, METH_VARARGS, NULL},
+	 { (char *)"new_TSG_Rect", _wrap_new_TSG_Rect, METH_VARARGS, NULL},
+	 { (char *)"delete_TSG_Rect", _wrap_delete_TSG_Rect, METH_VARARGS, NULL},
+	 { (char *)"TSG_Rect_swigregister", TSG_Rect_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Point", _wrap_new_CSG_Point, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Point", _wrap_delete_CSG_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Get_Type", _wrap_CSG_Point_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Get_X", _wrap_CSG_Point_Get_X, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Set_X", _wrap_CSG_Point_Set_X, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Get_Y", _wrap_CSG_Point_Get_Y, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Set_Y", _wrap_CSG_Point_Set_Y, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point___eq__", _wrap_CSG_Point___eq__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point___ne__", _wrap_CSG_Point___ne__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point___add__", _wrap_CSG_Point___add__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point___sub__", _wrap_CSG_Point___sub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point___iadd__", _wrap_CSG_Point___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point___isub__", _wrap_CSG_Point___isub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Assign", _wrap_CSG_Point_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Add", _wrap_CSG_Point_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Subtract", _wrap_CSG_Point_Subtract, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_is_Equal", _wrap_CSG_Point_is_Equal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_swigregister", CSG_Point_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Point_Z", _wrap_new_CSG_Point_Z, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Point_Z", _wrap_delete_CSG_Point_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z_Get_Type", _wrap_CSG_Point_Z_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z_Get_Z", _wrap_CSG_Point_Z_Get_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z_Set_Z", _wrap_CSG_Point_Z_Set_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z___eq__", _wrap_CSG_Point_Z___eq__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z___ne__", _wrap_CSG_Point_Z___ne__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z___add__", _wrap_CSG_Point_Z___add__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z___sub__", _wrap_CSG_Point_Z___sub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z___iadd__", _wrap_CSG_Point_Z___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z___isub__", _wrap_CSG_Point_Z___isub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z_Assign", _wrap_CSG_Point_Z_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z_Add", _wrap_CSG_Point_Z_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z_Subtract", _wrap_CSG_Point_Z_Subtract, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z_is_Equal", _wrap_CSG_Point_Z_is_Equal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_Z_swigregister", CSG_Point_Z_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Point_ZM", _wrap_new_CSG_Point_ZM, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Point_ZM", _wrap_delete_CSG_Point_ZM, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM_Get_Type", _wrap_CSG_Point_ZM_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM_Get_M", _wrap_CSG_Point_ZM_Get_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM_Set_M", _wrap_CSG_Point_ZM_Set_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM___eq__", _wrap_CSG_Point_ZM___eq__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM___ne__", _wrap_CSG_Point_ZM___ne__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM___add__", _wrap_CSG_Point_ZM___add__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM___sub__", _wrap_CSG_Point_ZM___sub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM___iadd__", _wrap_CSG_Point_ZM___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM___isub__", _wrap_CSG_Point_ZM___isub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM_Assign", _wrap_CSG_Point_ZM_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM_Add", _wrap_CSG_Point_ZM_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM_Subtract", _wrap_CSG_Point_ZM_Subtract, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM_is_Equal", _wrap_CSG_Point_ZM_is_Equal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Point_ZM_swigregister", CSG_Point_ZM_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Points", _wrap_new_CSG_Points, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Points", _wrap_delete_CSG_Points, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Clear", _wrap_CSG_Points_Clear, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Assign", _wrap_CSG_Points_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Add", _wrap_CSG_Points_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Del", _wrap_CSG_Points_Del, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Set_Count", _wrap_CSG_Points_Set_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Get_Count", _wrap_CSG_Points_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Get_Point", _wrap_CSG_Points_Get_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Get_X", _wrap_CSG_Points_Get_X, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Get_Y", _wrap_CSG_Points_Get_Y, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_swigregister", CSG_Points_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Points_Int", _wrap_new_CSG_Points_Int, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Points_Int", _wrap_delete_CSG_Points_Int, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Int_Clear", _wrap_CSG_Points_Int_Clear, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Int_Assign", _wrap_CSG_Points_Int_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Int_Add", _wrap_CSG_Points_Int_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Int_Del", _wrap_CSG_Points_Int_Del, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Int_Set_Count", _wrap_CSG_Points_Int_Set_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Int_Get_Count", _wrap_CSG_Points_Int_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Int_Get_Point", _wrap_CSG_Points_Int_Get_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Int_Get_X", _wrap_CSG_Points_Int_Get_X, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Int_Get_Y", _wrap_CSG_Points_Int_Get_Y, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Int_swigregister", CSG_Points_Int_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Points_Z", _wrap_new_CSG_Points_Z, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Points_Z", _wrap_delete_CSG_Points_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Z_Clear", _wrap_CSG_Points_Z_Clear, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Z_Assign", _wrap_CSG_Points_Z_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Z_Add", _wrap_CSG_Points_Z_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Z_Del", _wrap_CSG_Points_Z_Del, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Z_Set_Count", _wrap_CSG_Points_Z_Set_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Z_Get_Count", _wrap_CSG_Points_Z_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Z_Get_Point", _wrap_CSG_Points_Z_Get_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Z_Get_X", _wrap_CSG_Points_Z_Get_X, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Z_Get_Y", _wrap_CSG_Points_Z_Get_Y, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Z_Get_Z", _wrap_CSG_Points_Z_Get_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Points_Z_swigregister", CSG_Points_Z_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Rect", _wrap_new_CSG_Rect, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Rect", _wrap_delete_CSG_Rect, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect___eq__", _wrap_CSG_Rect___eq__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect___ne__", _wrap_CSG_Rect___ne__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect___iadd__", _wrap_CSG_Rect___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect___isub__", _wrap_CSG_Rect___isub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Assign", _wrap_CSG_Rect_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Set_BottomLeft", _wrap_CSG_Rect_Set_BottomLeft, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Set_TopRight", _wrap_CSG_Rect_Set_TopRight, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_is_Equal", _wrap_CSG_Rect_is_Equal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Get_XMin", _wrap_CSG_Rect_Get_XMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Get_XMax", _wrap_CSG_Rect_Get_XMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Get_YMin", _wrap_CSG_Rect_Get_YMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Get_YMax", _wrap_CSG_Rect_Get_YMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Get_XRange", _wrap_CSG_Rect_Get_XRange, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Get_YRange", _wrap_CSG_Rect_Get_YRange, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Get_TopLeft", _wrap_CSG_Rect_Get_TopLeft, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Get_BottomRight", _wrap_CSG_Rect_Get_BottomRight, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Get_Center", _wrap_CSG_Rect_Get_Center, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Get_XCenter", _wrap_CSG_Rect_Get_XCenter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Get_YCenter", _wrap_CSG_Rect_Get_YCenter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Move", _wrap_CSG_Rect_Move, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Inflate", _wrap_CSG_Rect_Inflate, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Deflate", _wrap_CSG_Rect_Deflate, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Union", _wrap_CSG_Rect_Union, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Intersect", _wrap_CSG_Rect_Intersect, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Intersects", _wrap_CSG_Rect_Intersects, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_Contains", _wrap_CSG_Rect_Contains, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_m_rect_set", _wrap_CSG_Rect_m_rect_set, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_m_rect_get", _wrap_CSG_Rect_m_rect_get, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rect_swigregister", CSG_Rect_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Rects", _wrap_new_CSG_Rects, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Rects", _wrap_delete_CSG_Rects, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rects_Clear", _wrap_CSG_Rects_Clear, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rects_Assign", _wrap_CSG_Rects_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rects_Add", _wrap_CSG_Rects_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rects_Get_Count", _wrap_CSG_Rects_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rects_Get_Rect", _wrap_CSG_Rects_Get_Rect, METH_VARARGS, NULL},
+	 { (char *)"CSG_Rects_swigregister", CSG_Rects_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Distance_Weighting", _wrap_new_CSG_Distance_Weighting, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Distance_Weighting", _wrap_delete_CSG_Distance_Weighting, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_Get_Parameters", _wrap_CSG_Distance_Weighting_Get_Parameters, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_Set_Parameters", _wrap_CSG_Distance_Weighting_Set_Parameters, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_Get_Weighting", _wrap_CSG_Distance_Weighting_Get_Weighting, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_Set_Weighting", _wrap_CSG_Distance_Weighting_Set_Weighting, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_Get_IDW_Power", _wrap_CSG_Distance_Weighting_Get_IDW_Power, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_Set_IDW_Power", _wrap_CSG_Distance_Weighting_Set_IDW_Power, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_Get_IDW_Offset", _wrap_CSG_Distance_Weighting_Get_IDW_Offset, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_Set_IDW_Offset", _wrap_CSG_Distance_Weighting_Set_IDW_Offset, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_Get_BandWidth", _wrap_CSG_Distance_Weighting_Get_BandWidth, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_Set_BandWidth", _wrap_CSG_Distance_Weighting_Set_BandWidth, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_Get_Weight", _wrap_CSG_Distance_Weighting_Get_Weight, METH_VARARGS, NULL},
+	 { (char *)"CSG_Distance_Weighting_swigregister", CSG_Distance_Weighting_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Projection_Type_Name", _wrap_SG_Get_Projection_Type_Name, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Projection", _wrap_delete_CSG_Projection, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Destroy", _wrap_CSG_Projection_Destroy, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Projection", _wrap_new_CSG_Projection, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Create", _wrap_CSG_Projection_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Assign", _wrap_CSG_Projection_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_is_Okay", _wrap_CSG_Projection_is_Okay, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_is_Equal", _wrap_CSG_Projection_is_Equal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection___eq__", _wrap_CSG_Projection___eq__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection___ne__", _wrap_CSG_Projection___ne__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Load", _wrap_CSG_Projection_Load, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Save", _wrap_CSG_Projection_Save, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Get_Name", _wrap_CSG_Projection_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Get_WKT", _wrap_CSG_Projection_Get_WKT, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Get_Proj4", _wrap_CSG_Projection_Get_Proj4, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Get_Authority", _wrap_CSG_Projection_Get_Authority, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Get_Authority_ID", _wrap_CSG_Projection_Get_Authority_ID, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Get_EPSG", _wrap_CSG_Projection_Get_EPSG, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Get_Description", _wrap_CSG_Projection_Get_Description, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Get_Type", _wrap_CSG_Projection_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Get_Type_Name", _wrap_CSG_Projection_Get_Type_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_Get_Type_Identifier", _wrap_CSG_Projection_Get_Type_Identifier, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projection_swigregister", CSG_Projection_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Projections", _wrap_delete_CSG_Projections, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Projections", _wrap_new_CSG_Projections, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_Create", _wrap_CSG_Projections_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_Destroy", _wrap_CSG_Projections_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_Reset_Dictionary", _wrap_CSG_Projections_Reset_Dictionary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_Load_Dictionary", _wrap_CSG_Projections_Load_Dictionary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_Save_Dictionary", _wrap_CSG_Projections_Save_Dictionary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_Load_DB", _wrap_CSG_Projections_Load_DB, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_Save_DB", _wrap_CSG_Projections_Save_DB, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_Get_Count", _wrap_CSG_Projections_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_Add", _wrap_CSG_Projections_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_Get_Projection", _wrap_CSG_Projections_Get_Projection, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_Get_Names_List", _wrap_CSG_Projections_Get_Names_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_WKT_to_MetaData", _wrap_CSG_Projections_WKT_to_MetaData, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_WKT_to_Proj4", _wrap_CSG_Projections_WKT_to_Proj4, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_WKT_from_Proj4", _wrap_CSG_Projections_WKT_from_Proj4, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_EPSG_to_Proj4", _wrap_CSG_Projections_EPSG_to_Proj4, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_EPSG_to_WKT", _wrap_CSG_Projections_EPSG_to_WKT, METH_VARARGS, NULL},
+	 { (char *)"CSG_Projections_swigregister", CSG_Projections_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Projections", _wrap_SG_Get_Projections, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Length", _wrap_SG_Get_Length, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Distance", _wrap_SG_Get_Distance, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Angle_Of_Direction", _wrap_SG_Get_Angle_Of_Direction, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Crossing", _wrap_SG_Get_Crossing, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Crossing_InRegion", _wrap_SG_Get_Crossing_InRegion, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Nearest_Point_On_Line", _wrap_SG_Get_Nearest_Point_On_Line, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Triangle_CircumCircle", _wrap_SG_Get_Triangle_CircumCircle, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Polygon_Area", _wrap_SG_Get_Polygon_Area, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_Square", _wrap_SG_Get_Square, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Index", _wrap_delete_CSG_Index, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Index", _wrap_new_CSG_Index, METH_VARARGS, NULL},
+	 { (char *)"CSG_Index_Create", _wrap_CSG_Index_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Index_Destroy", _wrap_CSG_Index_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Index_is_Okay", _wrap_CSG_Index_is_Okay, METH_VARARGS, NULL},
+	 { (char *)"CSG_Index_Get_Count", _wrap_CSG_Index_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Index_Get_Index", _wrap_CSG_Index_Get_Index, METH_VARARGS, NULL},
+	 { (char *)"CSG_Index_swigregister", CSG_Index_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Vector", _wrap_delete_CSG_Vector, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Vector", _wrap_new_CSG_Vector, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Create", _wrap_CSG_Vector_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Destroy", _wrap_CSG_Vector_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Get_N", _wrap_CSG_Vector_Get_N, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Get_Data", _wrap_CSG_Vector_Get_Data, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector___call__", _wrap_CSG_Vector___call__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_asString", _wrap_CSG_Vector_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_is_Equal", _wrap_CSG_Vector_is_Equal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Assign", _wrap_CSG_Vector_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Add", _wrap_CSG_Vector_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Subtract", _wrap_CSG_Vector_Subtract, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Multiply_Scalar", _wrap_CSG_Vector_Multiply_Scalar, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Multiply", _wrap_CSG_Vector_Multiply, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector___eq__", _wrap_CSG_Vector___eq__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector___iadd__", _wrap_CSG_Vector___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector___isub__", _wrap_CSG_Vector___isub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector___imul__", _wrap_CSG_Vector___imul__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector___add__", _wrap_CSG_Vector___add__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector___sub__", _wrap_CSG_Vector___sub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector___mul__", _wrap_CSG_Vector___mul__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Set_Zero", _wrap_CSG_Vector_Set_Zero, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Set_Unity", _wrap_CSG_Vector_Set_Unity, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Get_Length", _wrap_CSG_Vector_Get_Length, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Get_Angle", _wrap_CSG_Vector_Get_Angle, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_Get_Unity", _wrap_CSG_Vector_Get_Unity, METH_VARARGS, NULL},
+	 { (char *)"CSG_Vector_swigregister", CSG_Vector_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Matrix", _wrap_delete_CSG_Matrix, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Matrix", _wrap_new_CSG_Matrix, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Create", _wrap_CSG_Matrix_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Destroy", _wrap_CSG_Matrix_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Add_Cols", _wrap_CSG_Matrix_Add_Cols, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Add_Rows", _wrap_CSG_Matrix_Add_Rows, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Get_NX", _wrap_CSG_Matrix_Get_NX, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Get_NY", _wrap_CSG_Matrix_Get_NY, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Get_Data", _wrap_CSG_Matrix_Get_Data, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix___call__", _wrap_CSG_Matrix___call__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_asString", _wrap_CSG_Matrix_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_is_Square", _wrap_CSG_Matrix_is_Square, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_is_Equal", _wrap_CSG_Matrix_is_Equal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Assign", _wrap_CSG_Matrix_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Add", _wrap_CSG_Matrix_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Subtract", _wrap_CSG_Matrix_Subtract, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Multiply", _wrap_CSG_Matrix_Multiply, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix___eq__", _wrap_CSG_Matrix___eq__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix___iadd__", _wrap_CSG_Matrix___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix___isub__", _wrap_CSG_Matrix___isub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix___imul__", _wrap_CSG_Matrix___imul__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix___add__", _wrap_CSG_Matrix___add__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix___sub__", _wrap_CSG_Matrix___sub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix___mul__", _wrap_CSG_Matrix___mul__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Set_Zero", _wrap_CSG_Matrix_Set_Zero, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Set_Identity", _wrap_CSG_Matrix_Set_Identity, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Set_Transpose", _wrap_CSG_Matrix_Set_Transpose, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Set_Inverse", _wrap_CSG_Matrix_Set_Inverse, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Get_Determinant", _wrap_CSG_Matrix_Get_Determinant, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Get_Transpose", _wrap_CSG_Matrix_Get_Transpose, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_Get_Inverse", _wrap_CSG_Matrix_Get_Inverse, METH_VARARGS, NULL},
+	 { (char *)"CSG_Matrix_swigregister", CSG_Matrix_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Matrix_Solve", _wrap_SG_Matrix_Solve, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Grid_Radius", _wrap_new_CSG_Grid_Radius, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Grid_Radius", _wrap_delete_CSG_Grid_Radius, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Radius_Create", _wrap_CSG_Grid_Radius_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Radius_Destroy", _wrap_CSG_Grid_Radius_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Radius_Get_Maximum", _wrap_CSG_Grid_Radius_Get_Maximum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Radius_Get_nPoints", _wrap_CSG_Grid_Radius_Get_nPoints, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Radius_Get_Point", _wrap_CSG_Grid_Radius_Get_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Radius_swigregister", CSG_Grid_Radius_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Simple_Statistics", _wrap_new_CSG_Simple_Statistics, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_Invalidate", _wrap_CSG_Simple_Statistics_Invalidate, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_is_Evaluated", _wrap_CSG_Simple_Statistics_is_Evaluated, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_Get_Count", _wrap_CSG_Simple_Statistics_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_Get_Weights", _wrap_CSG_Simple_Statistics_Get_Weights, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_Get_Minimum", _wrap_CSG_Simple_Statistics_Get_Minimum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_Get_Maximum", _wrap_CSG_Simple_Statistics_Get_Maximum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_Get_Range", _wrap_CSG_Simple_Statistics_Get_Range, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_Get_Sum", _wrap_CSG_Simple_Statistics_Get_Sum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_Get_Mean", _wrap_CSG_Simple_Statistics_Get_Mean, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_Get_Variance", _wrap_CSG_Simple_Statistics_Get_Variance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_Get_StdDev", _wrap_CSG_Simple_Statistics_Get_StdDev, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_Add_Value", _wrap_CSG_Simple_Statistics_Add_Value, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Simple_Statistics", _wrap_delete_CSG_Simple_Statistics, METH_VARARGS, NULL},
+	 { (char *)"CSG_Simple_Statistics_swigregister", CSG_Simple_Statistics_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Class_Statistics", _wrap_new_CSG_Class_Statistics, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Class_Statistics", _wrap_delete_CSG_Class_Statistics, METH_VARARGS, NULL},
+	 { (char *)"CSG_Class_Statistics_Create", _wrap_CSG_Class_Statistics_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Class_Statistics_Destroy", _wrap_CSG_Class_Statistics_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Class_Statistics_Reset", _wrap_CSG_Class_Statistics_Reset, METH_VARARGS, NULL},
+	 { (char *)"CSG_Class_Statistics_Get_Count", _wrap_CSG_Class_Statistics_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Class_Statistics_Get_Class_Count", _wrap_CSG_Class_Statistics_Get_Class_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Class_Statistics_Get_Class_Value", _wrap_CSG_Class_Statistics_Get_Class_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Class_Statistics_Get_Class", _wrap_CSG_Class_Statistics_Get_Class, METH_VARARGS, NULL},
+	 { (char *)"CSG_Class_Statistics_Add_Value", _wrap_CSG_Class_Statistics_Add_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Class_Statistics_Get_Majority", _wrap_CSG_Class_Statistics_Get_Majority, METH_VARARGS, NULL},
+	 { (char *)"CSG_Class_Statistics_Get_Minority", _wrap_CSG_Class_Statistics_Get_Minority, METH_VARARGS, NULL},
+	 { (char *)"CSG_Class_Statistics_swigregister", CSG_Class_Statistics_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Cluster_Analysis", _wrap_new_CSG_Cluster_Analysis, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Cluster_Analysis", _wrap_delete_CSG_Cluster_Analysis, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Create", _wrap_CSG_Cluster_Analysis_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Destroy", _wrap_CSG_Cluster_Analysis_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Add_Element", _wrap_CSG_Cluster_Analysis_Add_Element, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Set_Feature", _wrap_CSG_Cluster_Analysis_Set_Feature, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Get_Cluster", _wrap_CSG_Cluster_Analysis_Get_Cluster, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Execute", _wrap_CSG_Cluster_Analysis_Execute, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Get_nElements", _wrap_CSG_Cluster_Analysis_Get_nElements, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Get_nFeatures", _wrap_CSG_Cluster_Analysis_Get_nFeatures, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Get_nClusters", _wrap_CSG_Cluster_Analysis_Get_nClusters, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Get_Iteration", _wrap_CSG_Cluster_Analysis_Get_Iteration, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Get_SP", _wrap_CSG_Cluster_Analysis_Get_SP, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Get_nMembers", _wrap_CSG_Cluster_Analysis_Get_nMembers, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Get_Variance", _wrap_CSG_Cluster_Analysis_Get_Variance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_Get_Centroid", _wrap_CSG_Cluster_Analysis_Get_Centroid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Cluster_Analysis_swigregister", CSG_Cluster_Analysis_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Spline", _wrap_new_CSG_Spline, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Spline", _wrap_delete_CSG_Spline, METH_VARARGS, NULL},
+	 { (char *)"CSG_Spline_Destroy", _wrap_CSG_Spline_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Spline_Create", _wrap_CSG_Spline_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Spline_Add", _wrap_CSG_Spline_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Spline_Get_xMin", _wrap_CSG_Spline_Get_xMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Spline_Get_xMax", _wrap_CSG_Spline_Get_xMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Spline_Get_Value", _wrap_CSG_Spline_Get_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Spline_swigregister", CSG_Spline_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Thin_Plate_Spline", _wrap_new_CSG_Thin_Plate_Spline, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Thin_Plate_Spline", _wrap_delete_CSG_Thin_Plate_Spline, METH_VARARGS, NULL},
+	 { (char *)"CSG_Thin_Plate_Spline_Destroy", _wrap_CSG_Thin_Plate_Spline_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Thin_Plate_Spline_Set_Point_Count", _wrap_CSG_Thin_Plate_Spline_Set_Point_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Thin_Plate_Spline_Get_Point_Count", _wrap_CSG_Thin_Plate_Spline_Get_Point_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Thin_Plate_Spline_Get_Points", _wrap_CSG_Thin_Plate_Spline_Get_Points, METH_VARARGS, NULL},
+	 { (char *)"CSG_Thin_Plate_Spline_Add_Point", _wrap_CSG_Thin_Plate_Spline_Add_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Thin_Plate_Spline_Set_Point", _wrap_CSG_Thin_Plate_Spline_Set_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Thin_Plate_Spline_Create", _wrap_CSG_Thin_Plate_Spline_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Thin_Plate_Spline_is_Okay", _wrap_CSG_Thin_Plate_Spline_is_Okay, METH_VARARGS, NULL},
+	 { (char *)"CSG_Thin_Plate_Spline_Get_Value", _wrap_CSG_Thin_Plate_Spline_Get_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Thin_Plate_Spline_swigregister", CSG_Thin_Plate_Spline_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Regression", _wrap_new_CSG_Regression, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Regression", _wrap_delete_CSG_Regression, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Destroy", _wrap_CSG_Regression_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Set_Values", _wrap_CSG_Regression_Set_Values, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Add_Values", _wrap_CSG_Regression_Add_Values, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_Count", _wrap_CSG_Regression_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_xValue", _wrap_CSG_Regression_Get_xValue, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_yValue", _wrap_CSG_Regression_Get_yValue, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_Values", _wrap_CSG_Regression_Get_Values, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_xMin", _wrap_CSG_Regression_Get_xMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_xMax", _wrap_CSG_Regression_Get_xMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_xMean", _wrap_CSG_Regression_Get_xMean, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_xVariance", _wrap_CSG_Regression_Get_xVariance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_x", _wrap_CSG_Regression_Get_x, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_yMin", _wrap_CSG_Regression_Get_yMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_yMax", _wrap_CSG_Regression_Get_yMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_yMean", _wrap_CSG_Regression_Get_yMean, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_yVariance", _wrap_CSG_Regression_Get_yVariance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_y", _wrap_CSG_Regression_Get_y, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_Constant", _wrap_CSG_Regression_Get_Constant, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_Coefficient", _wrap_CSG_Regression_Get_Coefficient, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_R", _wrap_CSG_Regression_Get_R, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_R2", _wrap_CSG_Regression_Get_R2, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_asString", _wrap_CSG_Regression_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Get_Type", _wrap_CSG_Regression_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Calculate", _wrap_CSG_Regression_Calculate, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_swigregister", CSG_Regression_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Regression_Multiple", _wrap_new_CSG_Regression_Multiple, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Regression_Multiple", _wrap_delete_CSG_Regression_Multiple, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_Destroy", _wrap_CSG_Regression_Multiple_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_Calculate", _wrap_CSG_Regression_Multiple_Calculate, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_Get_Result", _wrap_CSG_Regression_Multiple_Get_Result, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_Get_Count", _wrap_CSG_Regression_Multiple_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_Get_Index", _wrap_CSG_Regression_Multiple_Get_Index, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_Get_Order", _wrap_CSG_Regression_Multiple_Get_Order, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_Get_RConst", _wrap_CSG_Regression_Multiple_Get_RConst, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_Get_RCoeff", _wrap_CSG_Regression_Multiple_Get_RCoeff, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_Get_R2", _wrap_CSG_Regression_Multiple_Get_R2, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_Get_R2_Change", _wrap_CSG_Regression_Multiple_Get_R2_Change, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_Get_Name", _wrap_CSG_Regression_Multiple_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Regression_Multiple_swigregister", CSG_Regression_Multiple_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Formula", _wrap_new_CSG_Formula, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Formula", _wrap_delete_CSG_Formula, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_Get_Help_Operators", _wrap_CSG_Formula_Get_Help_Operators, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_Get_Help_Usage", _wrap_CSG_Formula_Get_Help_Usage, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_Get_Error", _wrap_CSG_Formula_Get_Error, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_Add_Function", _wrap_CSG_Formula_Add_Function, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_Del_Function", _wrap_CSG_Formula_Del_Function, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_Set_Formula", _wrap_CSG_Formula_Set_Formula, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_Get_Formula", _wrap_CSG_Formula_Get_Formula, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_Set_Variable", _wrap_CSG_Formula_Set_Variable, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_Get_Value", _wrap_CSG_Formula_Get_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_Get_Used_Variables", _wrap_CSG_Formula_Get_Used_Variables, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_swigregister", CSG_Formula_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_TSG_Formula_Item_name_set", _wrap_CSG_Formula_TSG_Formula_Item_name_set, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_TSG_Formula_Item_name_get", _wrap_CSG_Formula_TSG_Formula_Item_name_get, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_TSG_Formula_Item_f_set", _wrap_CSG_Formula_TSG_Formula_Item_f_set, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_TSG_Formula_Item_f_get", _wrap_CSG_Formula_TSG_Formula_Item_f_get, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_TSG_Formula_Item_n_pars_set", _wrap_CSG_Formula_TSG_Formula_Item_n_pars_set, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_TSG_Formula_Item_n_pars_get", _wrap_CSG_Formula_TSG_Formula_Item_n_pars_get, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_TSG_Formula_Item_varying_set", _wrap_CSG_Formula_TSG_Formula_Item_varying_set, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_TSG_Formula_Item_varying_get", _wrap_CSG_Formula_TSG_Formula_Item_varying_get, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Formula_TSG_Formula_Item", _wrap_new_CSG_Formula_TSG_Formula_Item, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Formula_TSG_Formula_Item", _wrap_delete_CSG_Formula_TSG_Formula_Item, METH_VARARGS, NULL},
+	 { (char *)"CSG_Formula_TSG_Formula_Item_swigregister", CSG_Formula_TSG_Formula_Item_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Trend", _wrap_new_CSG_Trend, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Trend", _wrap_delete_CSG_Trend, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Set_Formula", _wrap_CSG_Trend_Set_Formula, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Formula", _wrap_CSG_Trend_Get_Formula, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Parameter_Count", _wrap_CSG_Trend_Get_Parameter_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Parameters", _wrap_CSG_Trend_Get_Parameters, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Clr_Data", _wrap_CSG_Trend_Clr_Data, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Set_Data", _wrap_CSG_Trend_Set_Data, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Add_Data", _wrap_CSG_Trend_Add_Data, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Data_Count", _wrap_CSG_Trend_Get_Data_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Data_X", _wrap_CSG_Trend_Get_Data_X, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Data_Y", _wrap_CSG_Trend_Get_Data_Y, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Data_XMin", _wrap_CSG_Trend_Get_Data_XMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Data_XMax", _wrap_CSG_Trend_Get_Data_XMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Data_YMin", _wrap_CSG_Trend_Get_Data_YMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Data_YMax", _wrap_CSG_Trend_Get_Data_YMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Set_Max_Iterations", _wrap_CSG_Trend_Set_Max_Iterations, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Max_Iterations", _wrap_CSG_Trend_Get_Max_Iterations, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Set_Max_Lambda", _wrap_CSG_Trend_Set_Max_Lambda, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Max_Lambda", _wrap_CSG_Trend_Get_Max_Lambda, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Trend", _wrap_CSG_Trend_Get_Trend, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_is_Okay", _wrap_CSG_Trend_is_Okay, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Error", _wrap_CSG_Trend_Get_Error, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_ChiSquare", _wrap_CSG_Trend_Get_ChiSquare, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_R2", _wrap_CSG_Trend_Get_R2, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_Get_Value", _wrap_CSG_Trend_Get_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Trend_swigregister", CSG_Trend_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_DataObject_Identifier", _wrap_SG_Get_DataObject_Identifier, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_DataObject_Name", _wrap_SG_Get_DataObject_Name, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Data_Object", _wrap_delete_CSG_Data_Object, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Destroy", _wrap_CSG_Data_Object_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Get_ObjectType", _wrap_CSG_Data_Object_Get_ObjectType, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_is_Valid", _wrap_CSG_Data_Object_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Save", _wrap_CSG_Data_Object_Save, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Get_File_Name", _wrap_CSG_Data_Object_Get_File_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Get_File_Type", _wrap_CSG_Data_Object_Get_File_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Assign", _wrap_CSG_Data_Object_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Set_Name", _wrap_CSG_Data_Object_Set_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Get_Name", _wrap_CSG_Data_Object_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Set_Modified", _wrap_CSG_Data_Object_Set_Modified, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_is_Modified", _wrap_CSG_Data_Object_is_Modified, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Update", _wrap_CSG_Data_Object_Update, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Get_MetaData", _wrap_CSG_Data_Object_Get_MetaData, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Get_MetaData_DB", _wrap_CSG_Data_Object_Get_MetaData_DB, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Get_History", _wrap_CSG_Data_Object_Get_History, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Get_Projection", _wrap_CSG_Data_Object_Get_Projection, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_asTable", _wrap_CSG_Data_Object_asTable, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_asShapes", _wrap_CSG_Data_Object_asShapes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_asTIN", _wrap_CSG_Data_Object_asTIN, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_asPointCloud", _wrap_CSG_Data_Object_asPointCloud, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_asGrid", _wrap_CSG_Data_Object_asGrid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Set_NoData_Value", _wrap_CSG_Data_Object_Set_NoData_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Set_NoData_Value_Range", _wrap_CSG_Data_Object_Set_NoData_Value_Range, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Get_NoData_Value", _wrap_CSG_Data_Object_Get_NoData_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_Get_NoData_hiValue", _wrap_CSG_Data_Object_Get_NoData_hiValue, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_is_NoData_Value", _wrap_CSG_Data_Object_is_NoData_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Data_Object_swigregister", CSG_Data_Object_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Table_Value", _wrap_delete_CSG_Table_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Set_Value", _wrap_CSG_Table_Value_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_asBinary", _wrap_CSG_Table_Value_asBinary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_asString", _wrap_CSG_Table_Value_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_asInt", _wrap_CSG_Table_Value_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_asDouble", _wrap_CSG_Table_Value_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_swigregister", CSG_Table_Value_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Table_Value_Binary", _wrap_new_CSG_Table_Value_Binary, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Table_Value_Binary", _wrap_delete_CSG_Table_Value_Binary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Binary_Set_Value", _wrap_CSG_Table_Value_Binary_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Binary_Set_NoData", _wrap_CSG_Table_Value_Binary_Set_NoData, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Binary_is_NoData", _wrap_CSG_Table_Value_Binary_is_NoData, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Binary_asBinary", _wrap_CSG_Table_Value_Binary_asBinary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Binary_asString", _wrap_CSG_Table_Value_Binary_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Binary_asInt", _wrap_CSG_Table_Value_Binary_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Binary_asDouble", _wrap_CSG_Table_Value_Binary_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Binary_Get_Binary", _wrap_CSG_Table_Value_Binary_Get_Binary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Binary_swigregister", CSG_Table_Value_Binary_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Table_Value_String", _wrap_new_CSG_Table_Value_String, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Table_Value_String", _wrap_delete_CSG_Table_Value_String, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_String_Set_Value", _wrap_CSG_Table_Value_String_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_String_asBinary", _wrap_CSG_Table_Value_String_asBinary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_String_asString", _wrap_CSG_Table_Value_String_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_String_asInt", _wrap_CSG_Table_Value_String_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_String_asDouble", _wrap_CSG_Table_Value_String_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_String_swigregister", CSG_Table_Value_String_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Table_Value_Date", _wrap_new_CSG_Table_Value_Date, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Table_Value_Date", _wrap_delete_CSG_Table_Value_Date, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Date_Set_Value", _wrap_CSG_Table_Value_Date_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Date_asBinary", _wrap_CSG_Table_Value_Date_asBinary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Date_asString", _wrap_CSG_Table_Value_Date_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Date_asInt", _wrap_CSG_Table_Value_Date_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Date_asDouble", _wrap_CSG_Table_Value_Date_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Date_swigregister", CSG_Table_Value_Date_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Table_Value_Int", _wrap_new_CSG_Table_Value_Int, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Table_Value_Int", _wrap_delete_CSG_Table_Value_Int, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Int_Set_Value", _wrap_CSG_Table_Value_Int_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Int_asString", _wrap_CSG_Table_Value_Int_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Int_asBinary", _wrap_CSG_Table_Value_Int_asBinary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Int_asInt", _wrap_CSG_Table_Value_Int_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Int_asDouble", _wrap_CSG_Table_Value_Int_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Int_swigregister", CSG_Table_Value_Int_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Table_Value_Double", _wrap_new_CSG_Table_Value_Double, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Table_Value_Double", _wrap_delete_CSG_Table_Value_Double, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Double_Set_Value", _wrap_CSG_Table_Value_Double_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Double_asString", _wrap_CSG_Table_Value_Double_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Double_asBinary", _wrap_CSG_Table_Value_Double_asBinary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Double_asInt", _wrap_CSG_Table_Value_Double_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Double_asDouble", _wrap_CSG_Table_Value_Double_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Value_Double_swigregister", CSG_Table_Value_Double_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_Get_Table", _wrap_CSG_Table_Record_Get_Table, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_Get_Index", _wrap_CSG_Table_Record_Get_Index, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_Set_Value", _wrap_CSG_Table_Record_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_Add_Value", _wrap_CSG_Table_Record_Add_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_Mul_Value", _wrap_CSG_Table_Record_Mul_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_Set_NoData", _wrap_CSG_Table_Record_Set_NoData, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_is_NoData", _wrap_CSG_Table_Record_is_NoData, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_asString", _wrap_CSG_Table_Record_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_asChar", _wrap_CSG_Table_Record_asChar, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_asShort", _wrap_CSG_Table_Record_asShort, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_asInt", _wrap_CSG_Table_Record_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_asFloat", _wrap_CSG_Table_Record_asFloat, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_asDouble", _wrap_CSG_Table_Record_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_Get_Value", _wrap_CSG_Table_Record_Get_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_Assign", _wrap_CSG_Table_Record_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_is_Selected", _wrap_CSG_Table_Record_is_Selected, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_is_Modified", _wrap_CSG_Table_Record_is_Modified, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Record_swigregister", CSG_Table_Record_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Table", _wrap_new_CSG_Table, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Create", _wrap_CSG_Table_Create, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Table", _wrap_delete_CSG_Table, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Destroy", _wrap_CSG_Table_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_ObjectType", _wrap_CSG_Table_Get_ObjectType, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Assign", _wrap_CSG_Table_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Assign_Values", _wrap_CSG_Table_Assign_Values, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Save", _wrap_CSG_Table_Save, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Serialize", _wrap_CSG_Table_Serialize, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Owner", _wrap_CSG_Table_Get_Owner, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_is_Private", _wrap_CSG_Table_is_Private, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_is_Valid", _wrap_CSG_Table_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_is_Compatible", _wrap_CSG_Table_is_Compatible, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Add_Field", _wrap_CSG_Table_Add_Field, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Del_Field", _wrap_CSG_Table_Del_Field, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Field_Count", _wrap_CSG_Table_Get_Field_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Field_Name", _wrap_CSG_Table_Get_Field_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Field_Type", _wrap_CSG_Table_Get_Field_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Field_Length", _wrap_CSG_Table_Get_Field_Length, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Set_Field_Name", _wrap_CSG_Table_Set_Field_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Minimum", _wrap_CSG_Table_Get_Minimum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Maximum", _wrap_CSG_Table_Get_Maximum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Range", _wrap_CSG_Table_Get_Range, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Mean", _wrap_CSG_Table_Get_Mean, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_StdDev", _wrap_CSG_Table_Get_StdDev, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Variance", _wrap_CSG_Table_Get_Variance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Add_Record", _wrap_CSG_Table_Add_Record, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Ins_Record", _wrap_CSG_Table_Ins_Record, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Del_Record", _wrap_CSG_Table_Del_Record, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Del_Records", _wrap_CSG_Table_Del_Records, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Count", _wrap_CSG_Table_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Record_Count", _wrap_CSG_Table_Get_Record_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Record", _wrap_CSG_Table_Get_Record, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Index", _wrap_CSG_Table_Get_Index, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Record_byIndex", _wrap_CSG_Table_Get_Record_byIndex, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Set_Value", _wrap_CSG_Table_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Value", _wrap_CSG_Table_Get_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Set_Modified", _wrap_CSG_Table_Set_Modified, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Selection_Count", _wrap_CSG_Table_Get_Selection_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Selection", _wrap_CSG_Table_Get_Selection, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_is_Selected", _wrap_CSG_Table_is_Selected, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Select", _wrap_CSG_Table_Select, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Del_Selection", _wrap_CSG_Table_Del_Selection, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Inv_Selection", _wrap_CSG_Table_Inv_Selection, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Set_Index", _wrap_CSG_Table_Set_Index, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Del_Index", _wrap_CSG_Table_Del_Index, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Toggle_Index", _wrap_CSG_Table_Toggle_Index, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_is_Indexed", _wrap_CSG_Table_is_Indexed, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Index_Field", _wrap_CSG_Table_Get_Index_Field, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_Get_Index_Order", _wrap_CSG_Table_Get_Index_Order, METH_VARARGS, NULL},
+	 { (char *)"CSG_Table_swigregister", CSG_Table_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Create_Table", _wrap_SG_Create_Table, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Grid_Pyramid", _wrap_new_CSG_Grid_Pyramid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Pyramid_Create", _wrap_CSG_Grid_Pyramid_Create, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Grid_Pyramid", _wrap_delete_CSG_Grid_Pyramid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Pyramid_Destroy", _wrap_CSG_Grid_Pyramid_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Pyramid_Get_Count", _wrap_CSG_Grid_Pyramid_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Pyramid_Get_Grid", _wrap_CSG_Grid_Pyramid_Get_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Pyramid_swigregister", CSG_Grid_Pyramid_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Grid_System", _wrap_new_CSG_Grid_System, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Grid_System", _wrap_delete_CSG_Grid_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_is_Valid", _wrap_CSG_Grid_System_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_Name", _wrap_CSG_Grid_System_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_Cellsize", _wrap_CSG_Grid_System_Get_Cellsize, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_Cellarea", _wrap_CSG_Grid_System_Get_Cellarea, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_NX", _wrap_CSG_Grid_System_Get_NX, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_NY", _wrap_CSG_Grid_System_Get_NY, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_NCells", _wrap_CSG_Grid_System_Get_NCells, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_Extent", _wrap_CSG_Grid_System_Get_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_XMin", _wrap_CSG_Grid_System_Get_XMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_XMax", _wrap_CSG_Grid_System_Get_XMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_XRange", _wrap_CSG_Grid_System_Get_XRange, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_YMin", _wrap_CSG_Grid_System_Get_YMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_YMax", _wrap_CSG_Grid_System_Get_YMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_YRange", _wrap_CSG_Grid_System_Get_YRange, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System___eq__", _wrap_CSG_Grid_System___eq__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Assign", _wrap_CSG_Grid_System_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_is_Equal", _wrap_CSG_Grid_System_is_Equal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Fit_xto_Grid_System", _wrap_CSG_Grid_System_Fit_xto_Grid_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Fit_yto_Grid_System", _wrap_CSG_Grid_System_Fit_yto_Grid_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Fit_to_Grid_System", _wrap_CSG_Grid_System_Fit_to_Grid_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_xGrid_to_World", _wrap_CSG_Grid_System_Get_xGrid_to_World, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_yGrid_to_World", _wrap_CSG_Grid_System_Get_yGrid_to_World, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_Grid_to_World", _wrap_CSG_Grid_System_Get_Grid_to_World, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_xWorld_to_Grid", _wrap_CSG_Grid_System_Get_xWorld_to_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_yWorld_to_Grid", _wrap_CSG_Grid_System_Get_yWorld_to_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_World_to_Grid", _wrap_CSG_Grid_System_Get_World_to_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_Neighbor_Pos", _wrap_CSG_Grid_System_Get_Neighbor_Pos, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_xTo", _wrap_CSG_Grid_System_Get_xTo, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_yTo", _wrap_CSG_Grid_System_Get_yTo, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_xFrom", _wrap_CSG_Grid_System_Get_xFrom, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_yFrom", _wrap_CSG_Grid_System_Get_yFrom, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_xToSave", _wrap_CSG_Grid_System_Get_xToSave, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_yToSave", _wrap_CSG_Grid_System_Get_yToSave, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_xFromSave", _wrap_CSG_Grid_System_Get_xFromSave, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_yFromSave", _wrap_CSG_Grid_System_Get_yFromSave, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_is_InGrid", _wrap_CSG_Grid_System_is_InGrid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_Length", _wrap_CSG_Grid_System_Get_Length, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_Get_UnitLength", _wrap_CSG_Grid_System_Get_UnitLength, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_System_swigregister", CSG_Grid_System_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Grid", _wrap_new_CSG_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Create", _wrap_CSG_Grid_Create, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Grid", _wrap_delete_CSG_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Destroy", _wrap_CSG_Grid_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_ObjectType", _wrap_CSG_Grid_Get_ObjectType, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Type", _wrap_CSG_Grid_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_nValueBytes", _wrap_CSG_Grid_Get_nValueBytes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_nLineBytes", _wrap_CSG_Grid_Get_nLineBytes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Set_Description", _wrap_CSG_Grid_Set_Description, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Description", _wrap_CSG_Grid_Get_Description, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Set_Unit", _wrap_CSG_Grid_Set_Unit, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Unit", _wrap_CSG_Grid_Get_Unit, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_System", _wrap_CSG_Grid_Get_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_NX", _wrap_CSG_Grid_Get_NX, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_NY", _wrap_CSG_Grid_Get_NY, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_NCells", _wrap_CSG_Grid_Get_NCells, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Cellsize", _wrap_CSG_Grid_Get_Cellsize, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Cellarea", _wrap_CSG_Grid_Get_Cellarea, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Extent", _wrap_CSG_Grid_Get_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_XMin", _wrap_CSG_Grid_Get_XMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_XMax", _wrap_CSG_Grid_Get_XMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_XRange", _wrap_CSG_Grid_Get_XRange, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_YMin", _wrap_CSG_Grid_Get_YMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_YMax", _wrap_CSG_Grid_Get_YMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_YRange", _wrap_CSG_Grid_Get_YRange, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_ZMin", _wrap_CSG_Grid_Get_ZMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_ZMax", _wrap_CSG_Grid_Get_ZMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_ZRange", _wrap_CSG_Grid_Get_ZRange, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Set_ZFactor", _wrap_CSG_Grid_Set_ZFactor, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_ZFactor", _wrap_CSG_Grid_Get_ZFactor, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_ArithMean", _wrap_CSG_Grid_Get_ArithMean, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_StdDev", _wrap_CSG_Grid_Get_StdDev, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Variance", _wrap_CSG_Grid_Get_Variance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_NoData_Count", _wrap_CSG_Grid_Get_NoData_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Save", _wrap_CSG_Grid_Save, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_is_Valid", _wrap_CSG_Grid_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_is_Intersecting", _wrap_CSG_Grid_is_Intersecting, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_is_Compatible", _wrap_CSG_Grid_is_Compatible, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_is_InGrid", _wrap_CSG_Grid_is_InGrid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_is_InGrid_byPos", _wrap_CSG_Grid_is_InGrid_byPos, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Buffer_Size", _wrap_CSG_Grid_Get_Buffer_Size, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Set_Buffer_Size", _wrap_CSG_Grid_Set_Buffer_Size, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Set_Cache", _wrap_CSG_Grid_Set_Cache, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_is_Cached", _wrap_CSG_Grid_is_Cached, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Set_Compression", _wrap_CSG_Grid_Set_Compression, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_is_Compressed", _wrap_CSG_Grid_is_Compressed, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Compression_Ratio", _wrap_CSG_Grid_Get_Compression_Ratio, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Assign_NoData", _wrap_CSG_Grid_Assign_NoData, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Assign", _wrap_CSG_Grid_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Flip", _wrap_CSG_Grid_Flip, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Mirror", _wrap_CSG_Grid_Mirror, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Invert", _wrap_CSG_Grid_Invert, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Normalise", _wrap_CSG_Grid_Normalise, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_DeNormalise", _wrap_CSG_Grid_DeNormalise, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Gradient_NeighborDir", _wrap_CSG_Grid_Get_Gradient_NeighborDir, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Gradient", _wrap_CSG_Grid_Get_Gradient, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Set_Modified", _wrap_CSG_Grid_Set_Modified, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Set_Index", _wrap_CSG_Grid_Set_Index, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Sorted", _wrap_CSG_Grid_Get_Sorted, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Percentile", _wrap_CSG_Grid_Get_Percentile, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_is_NoData", _wrap_CSG_Grid_is_NoData, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Set_NoData", _wrap_CSG_Grid_Set_NoData, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid___add__", _wrap_CSG_Grid___add__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid___iadd__", _wrap_CSG_Grid___iadd__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Add", _wrap_CSG_Grid_Add, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid___sub__", _wrap_CSG_Grid___sub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid___isub__", _wrap_CSG_Grid___isub__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Subtract", _wrap_CSG_Grid_Subtract, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid___mul__", _wrap_CSG_Grid___mul__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid___imul__", _wrap_CSG_Grid___imul__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Multiply", _wrap_CSG_Grid_Multiply, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid___div__", _wrap_CSG_Grid___div__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid___idiv__", _wrap_CSG_Grid___idiv__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Divide", _wrap_CSG_Grid_Divide, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid___call__", _wrap_CSG_Grid___call__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Get_Value", _wrap_CSG_Grid_Get_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_asByte", _wrap_CSG_Grid_asByte, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_asChar", _wrap_CSG_Grid_asChar, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_asShort", _wrap_CSG_Grid_asShort, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_asInt", _wrap_CSG_Grid_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_asFloat", _wrap_CSG_Grid_asFloat, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_asDouble", _wrap_CSG_Grid_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Add_Value", _wrap_CSG_Grid_Add_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Mul_Value", _wrap_CSG_Grid_Mul_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Set_Value", _wrap_CSG_Grid_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Set_Value_And_Sort", _wrap_CSG_Grid_Set_Value_And_Sort, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_swigregister", CSG_Grid_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Create_Grid", _wrap_SG_Create_Grid, METH_VARARGS, NULL},
+	 { (char *)"SG_Grid_Cache_Get_Directory", _wrap_SG_Grid_Cache_Get_Directory, METH_VARARGS, NULL},
+	 { (char *)"SG_Grid_Cache_Set_Directory", _wrap_SG_Grid_Cache_Set_Directory, METH_VARARGS, NULL},
+	 { (char *)"SG_Grid_Cache_Set_Automatic", _wrap_SG_Grid_Cache_Set_Automatic, METH_VARARGS, NULL},
+	 { (char *)"SG_Grid_Cache_Get_Automatic", _wrap_SG_Grid_Cache_Get_Automatic, METH_VARARGS, NULL},
+	 { (char *)"SG_Grid_Cache_Set_Confirm", _wrap_SG_Grid_Cache_Set_Confirm, METH_VARARGS, NULL},
+	 { (char *)"SG_Grid_Cache_Get_Confirm", _wrap_SG_Grid_Cache_Get_Confirm, METH_VARARGS, NULL},
+	 { (char *)"SG_Grid_Cache_Set_Threshold", _wrap_SG_Grid_Cache_Set_Threshold, METH_VARARGS, NULL},
+	 { (char *)"SG_Grid_Cache_Set_Threshold_MB", _wrap_SG_Grid_Cache_Set_Threshold_MB, METH_VARARGS, NULL},
+	 { (char *)"SG_Grid_Cache_Get_Threshold", _wrap_SG_Grid_Cache_Get_Threshold, METH_VARARGS, NULL},
+	 { (char *)"SG_Grid_Cache_Get_Threshold_MB", _wrap_SG_Grid_Cache_Get_Threshold_MB, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Grid_Stack", _wrap_new_CSG_Grid_Stack, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Stack_Push", _wrap_CSG_Grid_Stack_Push, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Stack_Pop", _wrap_CSG_Grid_Stack_Pop, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Grid_Stack", _wrap_delete_CSG_Grid_Stack, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Stack_swigregister", CSG_Grid_Stack_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Grid_Cell_Addressor", _wrap_new_CSG_Grid_Cell_Addressor, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Cell_Addressor_Destroy", _wrap_CSG_Grid_Cell_Addressor_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Cell_Addressor_Get_Weighting", _wrap_CSG_Grid_Cell_Addressor_Get_Weighting, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Cell_Addressor_Set_Radius", _wrap_CSG_Grid_Cell_Addressor_Set_Radius, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Cell_Addressor_Set_Sector", _wrap_CSG_Grid_Cell_Addressor_Set_Sector, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Cell_Addressor_Get_Count", _wrap_CSG_Grid_Cell_Addressor_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Cell_Addressor_Get_X", _wrap_CSG_Grid_Cell_Addressor_Get_X, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Cell_Addressor_Get_Y", _wrap_CSG_Grid_Cell_Addressor_Get_Y, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Cell_Addressor_Get_Distance", _wrap_CSG_Grid_Cell_Addressor_Get_Distance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Cell_Addressor_Get_Weight", _wrap_CSG_Grid_Cell_Addressor_Get_Weight, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Cell_Addressor_Get_Values", _wrap_CSG_Grid_Cell_Addressor_Get_Values, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Grid_Cell_Addressor", _wrap_delete_CSG_Grid_Cell_Addressor, METH_VARARGS, NULL},
+	 { (char *)"CSG_Grid_Cell_Addressor_swigregister", CSG_Grid_Cell_Addressor_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Get_ShapeType_Name", _wrap_SG_Get_ShapeType_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Destroy", _wrap_CSG_Shape_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Assign", _wrap_CSG_Shape_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_Type", _wrap_CSG_Shape_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_is_Valid", _wrap_CSG_Shape_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Del_Point", _wrap_CSG_Shape_Del_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Add_Point", _wrap_CSG_Shape_Add_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Ins_Point", _wrap_CSG_Shape_Ins_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Set_Point", _wrap_CSG_Shape_Set_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Del_Part", _wrap_CSG_Shape_Del_Part, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Del_Parts", _wrap_CSG_Shape_Del_Parts, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_Part_Count", _wrap_CSG_Shape_Get_Part_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_Point_Count", _wrap_CSG_Shape_Get_Point_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_Point", _wrap_CSG_Shape_Get_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Set_Z", _wrap_CSG_Shape_Set_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_Z", _wrap_CSG_Shape_Get_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_ZMin", _wrap_CSG_Shape_Get_ZMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_ZMax", _wrap_CSG_Shape_Get_ZMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Set_M", _wrap_CSG_Shape_Set_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_M", _wrap_CSG_Shape_Get_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_MMin", _wrap_CSG_Shape_Get_MMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_MMax", _wrap_CSG_Shape_Get_MMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_Extent", _wrap_CSG_Shape_Get_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Intersects", _wrap_CSG_Shape_Intersects, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Get_Distance", _wrap_CSG_Shape_Get_Distance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_swigregister", CSG_Shape_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_is_Valid", _wrap_CSG_Shape_Point_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Add_Point", _wrap_CSG_Shape_Point_Add_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Ins_Point", _wrap_CSG_Shape_Point_Ins_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Set_Point", _wrap_CSG_Shape_Point_Set_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Del_Point", _wrap_CSG_Shape_Point_Del_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Del_Part", _wrap_CSG_Shape_Point_Del_Part, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Del_Parts", _wrap_CSG_Shape_Point_Del_Parts, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Get_Part_Count", _wrap_CSG_Shape_Point_Get_Part_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Get_Point_Count", _wrap_CSG_Shape_Point_Get_Point_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Get_Point", _wrap_CSG_Shape_Point_Get_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Get_Extent", _wrap_CSG_Shape_Point_Get_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Get_Distance", _wrap_CSG_Shape_Point_Get_Distance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_swigregister", CSG_Shape_Point_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Shape_Point_Z", _wrap_new_CSG_Shape_Point_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Z_Set_Z", _wrap_CSG_Shape_Point_Z_Set_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Z_Get_Z", _wrap_CSG_Shape_Point_Z_Get_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Z_Get_ZMin", _wrap_CSG_Shape_Point_Z_Get_ZMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Z_Get_ZMax", _wrap_CSG_Shape_Point_Z_Get_ZMax, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Shape_Point_Z", _wrap_delete_CSG_Shape_Point_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_Z_swigregister", CSG_Shape_Point_Z_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Shape_Point_ZM", _wrap_new_CSG_Shape_Point_ZM, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_ZM_Set_M", _wrap_CSG_Shape_Point_ZM_Set_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_ZM_Get_M", _wrap_CSG_Shape_Point_ZM_Get_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_ZM_Get_MMin", _wrap_CSG_Shape_Point_ZM_Get_MMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_ZM_Get_MMax", _wrap_CSG_Shape_Point_ZM_Get_MMax, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Shape_Point_ZM", _wrap_delete_CSG_Shape_Point_ZM, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Point_ZM_swigregister", CSG_Shape_Point_ZM_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Get_Owner", _wrap_CSG_Shape_Part_Get_Owner, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Destroy", _wrap_CSG_Shape_Part_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Assign", _wrap_CSG_Shape_Part_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Get_Extent", _wrap_CSG_Shape_Part_Get_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Get_Count", _wrap_CSG_Shape_Part_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Get_Point", _wrap_CSG_Shape_Part_Get_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Add_Point", _wrap_CSG_Shape_Part_Add_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Ins_Point", _wrap_CSG_Shape_Part_Ins_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Set_Point", _wrap_CSG_Shape_Part_Set_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Del_Point", _wrap_CSG_Shape_Part_Del_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Set_Z", _wrap_CSG_Shape_Part_Set_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Get_Z", _wrap_CSG_Shape_Part_Get_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Get_ZMin", _wrap_CSG_Shape_Part_Get_ZMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Get_ZMax", _wrap_CSG_Shape_Part_Get_ZMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Set_M", _wrap_CSG_Shape_Part_Set_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Get_M", _wrap_CSG_Shape_Part_Get_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Get_MMin", _wrap_CSG_Shape_Part_Get_MMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Get_MMax", _wrap_CSG_Shape_Part_Get_MMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_swigregister", CSG_Shape_Part_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Z_Destroy", _wrap_CSG_Shape_Part_Z_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Z_Assign", _wrap_CSG_Shape_Part_Z_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Z_Set_Z", _wrap_CSG_Shape_Part_Z_Set_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Z_Get_Z", _wrap_CSG_Shape_Part_Z_Get_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Z_Get_ZMin", _wrap_CSG_Shape_Part_Z_Get_ZMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Z_Get_ZMax", _wrap_CSG_Shape_Part_Z_Get_ZMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_Z_swigregister", CSG_Shape_Part_Z_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_ZM_Destroy", _wrap_CSG_Shape_Part_ZM_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_ZM_Assign", _wrap_CSG_Shape_Part_ZM_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_ZM_Set_M", _wrap_CSG_Shape_Part_ZM_Set_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_ZM_Get_M", _wrap_CSG_Shape_Part_ZM_Get_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_ZM_Get_MMin", _wrap_CSG_Shape_Part_ZM_Get_MMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_ZM_Get_MMax", _wrap_CSG_Shape_Part_ZM_Get_MMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Part_ZM_swigregister", CSG_Shape_Part_ZM_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Destroy", _wrap_CSG_Shape_Points_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_is_Valid", _wrap_CSG_Shape_Points_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Add_Point", _wrap_CSG_Shape_Points_Add_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Ins_Point", _wrap_CSG_Shape_Points_Ins_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Set_Point", _wrap_CSG_Shape_Points_Set_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Del_Point", _wrap_CSG_Shape_Points_Del_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Del_Part", _wrap_CSG_Shape_Points_Del_Part, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Del_Parts", _wrap_CSG_Shape_Points_Del_Parts, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_Part_Count", _wrap_CSG_Shape_Points_Get_Part_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_Part", _wrap_CSG_Shape_Points_Get_Part, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_Point_Count", _wrap_CSG_Shape_Points_Get_Point_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_Point", _wrap_CSG_Shape_Points_Get_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Set_Z", _wrap_CSG_Shape_Points_Set_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_Z", _wrap_CSG_Shape_Points_Get_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_ZMin", _wrap_CSG_Shape_Points_Get_ZMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_ZMax", _wrap_CSG_Shape_Points_Get_ZMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Set_M", _wrap_CSG_Shape_Points_Set_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_M", _wrap_CSG_Shape_Points_Get_M, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_MMin", _wrap_CSG_Shape_Points_Get_MMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_MMax", _wrap_CSG_Shape_Points_Get_MMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_Extent", _wrap_CSG_Shape_Points_Get_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_Get_Distance", _wrap_CSG_Shape_Points_Get_Distance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Points_swigregister", CSG_Shape_Points_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Line_is_Valid", _wrap_CSG_Shape_Line_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Line_Get_Length", _wrap_CSG_Shape_Line_Get_Length, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Line_Get_Distance", _wrap_CSG_Shape_Line_Get_Distance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Line_swigregister", CSG_Shape_Line_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Part_is_Clockwise", _wrap_CSG_Shape_Polygon_Part_is_Clockwise, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Part_Get_Perimeter", _wrap_CSG_Shape_Polygon_Part_Get_Perimeter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Part_Get_Area", _wrap_CSG_Shape_Polygon_Part_Get_Area, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Part_Get_Centroid", _wrap_CSG_Shape_Polygon_Part_Get_Centroid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Part_is_Containing", _wrap_CSG_Shape_Polygon_Part_is_Containing, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Part_Get_Distance", _wrap_CSG_Shape_Polygon_Part_Get_Distance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Part_swigregister", CSG_Shape_Polygon_Part_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_is_Valid", _wrap_CSG_Shape_Polygon_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Get_Polygon_Part", _wrap_CSG_Shape_Polygon_Get_Polygon_Part, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_is_Lake", _wrap_CSG_Shape_Polygon_is_Lake, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_is_Clockwise", _wrap_CSG_Shape_Polygon_is_Clockwise, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Get_Perimeter", _wrap_CSG_Shape_Polygon_Get_Perimeter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Get_Area", _wrap_CSG_Shape_Polygon_Get_Area, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Get_Centroid", _wrap_CSG_Shape_Polygon_Get_Centroid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_is_Containing", _wrap_CSG_Shape_Polygon_is_Containing, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_Get_Distance", _wrap_CSG_Shape_Polygon_Get_Distance, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shape_Polygon_swigregister", CSG_Shape_Polygon_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Shapes", _wrap_new_CSG_Shapes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Create", _wrap_CSG_Shapes_Create, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Shapes", _wrap_delete_CSG_Shapes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Destroy", _wrap_CSG_Shapes_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_ObjectType", _wrap_CSG_Shapes_Get_ObjectType, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Assign", _wrap_CSG_Shapes_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Save", _wrap_CSG_Shapes_Save, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_is_Valid", _wrap_CSG_Shapes_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_Type", _wrap_CSG_Shapes_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_Vertex_Type", _wrap_CSG_Shapes_Get_Vertex_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_Extent", _wrap_CSG_Shapes_Get_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_ZMin", _wrap_CSG_Shapes_Get_ZMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_ZMax", _wrap_CSG_Shapes_Get_ZMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_MMin", _wrap_CSG_Shapes_Get_MMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_MMax", _wrap_CSG_Shapes_Get_MMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Add_Shape", _wrap_CSG_Shapes_Add_Shape, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Del_Shape", _wrap_CSG_Shapes_Del_Shape, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Del_Shapes", _wrap_CSG_Shapes_Del_Shapes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_Shape", _wrap_CSG_Shapes_Get_Shape, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_Shape_byIndex", _wrap_CSG_Shapes_Get_Shape_byIndex, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Make_Clean", _wrap_CSG_Shapes_Make_Clean, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_Selection", _wrap_CSG_Shapes_Get_Selection, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Get_Selection_Extent", _wrap_CSG_Shapes_Get_Selection_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Select", _wrap_CSG_Shapes_Select, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_swigregister", CSG_Shapes_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Create_Shapes", _wrap_SG_Create_Shapes, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_is_Leaf", _wrap_CSG_PRQuadTree_Item_is_Leaf, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_is_Node", _wrap_CSG_PRQuadTree_Item_is_Node, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_Get_Extent", _wrap_CSG_PRQuadTree_Item_Get_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_Get_xMin", _wrap_CSG_PRQuadTree_Item_Get_xMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_Get_yMin", _wrap_CSG_PRQuadTree_Item_Get_yMin, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_Get_xCenter", _wrap_CSG_PRQuadTree_Item_Get_xCenter, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_Get_yCenter", _wrap_CSG_PRQuadTree_Item_Get_yCenter, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_Get_xMax", _wrap_CSG_PRQuadTree_Item_Get_xMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_Get_yMax", _wrap_CSG_PRQuadTree_Item_Get_yMax, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_Get_Size", _wrap_CSG_PRQuadTree_Item_Get_Size, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_Contains", _wrap_CSG_PRQuadTree_Item_Contains, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_asLeaf", _wrap_CSG_PRQuadTree_Item_asLeaf, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_asNode", _wrap_CSG_PRQuadTree_Item_asNode, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_PRQuadTree_Item", _wrap_delete_CSG_PRQuadTree_Item, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Item_swigregister", CSG_PRQuadTree_Item_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Leaf_is_Leaf", _wrap_CSG_PRQuadTree_Leaf_is_Leaf, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Leaf_Get_Point", _wrap_CSG_PRQuadTree_Leaf_Get_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Leaf_Get_X", _wrap_CSG_PRQuadTree_Leaf_Get_X, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Leaf_Get_Y", _wrap_CSG_PRQuadTree_Leaf_Get_Y, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Leaf_Get_Z", _wrap_CSG_PRQuadTree_Leaf_Get_Z, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_PRQuadTree_Leaf", _wrap_delete_CSG_PRQuadTree_Leaf, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Leaf_swigregister", CSG_PRQuadTree_Leaf_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Node_is_Node", _wrap_CSG_PRQuadTree_Node_is_Node, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Node_Get_Child", _wrap_CSG_PRQuadTree_Node_Get_Child, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Node_Add_Point", _wrap_CSG_PRQuadTree_Node_Add_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Node_swigregister", CSG_PRQuadTree_Node_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_PRQuadTree", _wrap_new_CSG_PRQuadTree, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_PRQuadTree", _wrap_delete_CSG_PRQuadTree, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Create", _wrap_CSG_PRQuadTree_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Destroy", _wrap_CSG_PRQuadTree_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Add_Point", _wrap_CSG_PRQuadTree_Add_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Get_Point_Count", _wrap_CSG_PRQuadTree_Get_Point_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Get_Root", _wrap_CSG_PRQuadTree_Get_Root, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_is_Okay", _wrap_CSG_PRQuadTree_is_Okay, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Get_Nearest_Point", _wrap_CSG_PRQuadTree_Get_Nearest_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Select_Nearest_Points", _wrap_CSG_PRQuadTree_Select_Nearest_Points, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Get_Selected_Count", _wrap_CSG_PRQuadTree_Get_Selected_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_Get_Selected_Point", _wrap_CSG_PRQuadTree_Get_Selected_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_PRQuadTree_swigregister", CSG_PRQuadTree_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Shapes_Search", _wrap_new_CSG_Shapes_Search, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Shapes_Search", _wrap_delete_CSG_Shapes_Search, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Search_Create", _wrap_CSG_Shapes_Search_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Search_Destroy", _wrap_CSG_Shapes_Search_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Search_is_Valid", _wrap_CSG_Shapes_Search_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Search_Get_Point_Nearest", _wrap_CSG_Shapes_Search_Get_Point_Nearest, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Search_Select_Radius", _wrap_CSG_Shapes_Search_Select_Radius, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Search_Select_Quadrants", _wrap_CSG_Shapes_Search_Select_Quadrants, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Search_Get_Selected_Count", _wrap_CSG_Shapes_Search_Get_Selected_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Search_Get_Selected_Point", _wrap_CSG_Shapes_Search_Get_Selected_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_Search_swigregister", CSG_Shapes_Search_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Shapes_OGIS_Converter", _wrap_new_CSG_Shapes_OGIS_Converter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_OGIS_Converter_from_WKText", _wrap_CSG_Shapes_OGIS_Converter_from_WKText, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_OGIS_Converter_to_WKText", _wrap_CSG_Shapes_OGIS_Converter_to_WKText, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_OGIS_Converter_from_WKBinary", _wrap_CSG_Shapes_OGIS_Converter_from_WKBinary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_OGIS_Converter_to_WKBinary", _wrap_CSG_Shapes_OGIS_Converter_to_WKBinary, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Shapes_OGIS_Converter", _wrap_delete_CSG_Shapes_OGIS_Converter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Shapes_OGIS_Converter_swigregister", CSG_Shapes_OGIS_Converter_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_Get_ID", _wrap_CSG_TIN_Node_Get_ID, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_Get_Point", _wrap_CSG_TIN_Node_Get_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_Get_X", _wrap_CSG_TIN_Node_Get_X, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_Get_Y", _wrap_CSG_TIN_Node_Get_Y, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_Get_Neighbor_Count", _wrap_CSG_TIN_Node_Get_Neighbor_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_Get_Neighbor", _wrap_CSG_TIN_Node_Get_Neighbor, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_Get_Gradient", _wrap_CSG_TIN_Node_Get_Gradient, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_Get_Triangle_Count", _wrap_CSG_TIN_Node_Get_Triangle_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_Get_Triangle", _wrap_CSG_TIN_Node_Get_Triangle, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_Get_Polygon", _wrap_CSG_TIN_Node_Get_Polygon, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_Get_Polygon_Area", _wrap_CSG_TIN_Node_Get_Polygon_Area, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Node_swigregister", CSG_TIN_Node_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Edge_Get_Node", _wrap_CSG_TIN_Edge_Get_Node, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Edge_swigregister", CSG_TIN_Edge_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Triangle_Get_Node", _wrap_CSG_TIN_Triangle_Get_Node, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Triangle_Get_Extent", _wrap_CSG_TIN_Triangle_Get_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Triangle_Get_Area", _wrap_CSG_TIN_Triangle_Get_Area, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Triangle_is_Containing", _wrap_CSG_TIN_Triangle_is_Containing, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Triangle_Get_Gradient", _wrap_CSG_TIN_Triangle_Get_Gradient, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Triangle_Get_CircumCircle", _wrap_CSG_TIN_Triangle_Get_CircumCircle, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Triangle_Get_CircumCircle_Radius", _wrap_CSG_TIN_Triangle_Get_CircumCircle_Radius, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Triangle_Get_CircumCircle_Point", _wrap_CSG_TIN_Triangle_Get_CircumCircle_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Triangle_swigregister", CSG_TIN_Triangle_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_TIN", _wrap_new_CSG_TIN, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Create", _wrap_CSG_TIN_Create, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_TIN", _wrap_delete_CSG_TIN, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Destroy", _wrap_CSG_TIN_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Get_ObjectType", _wrap_CSG_TIN_Get_ObjectType, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Assign", _wrap_CSG_TIN_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Save", _wrap_CSG_TIN_Save, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_is_Valid", _wrap_CSG_TIN_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Get_Extent", _wrap_CSG_TIN_Get_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Add_Node", _wrap_CSG_TIN_Add_Node, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Del_Node", _wrap_CSG_TIN_Del_Node, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Get_Node_Count", _wrap_CSG_TIN_Get_Node_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Get_Node", _wrap_CSG_TIN_Get_Node, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Get_Edge_Count", _wrap_CSG_TIN_Get_Edge_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Get_Edge", _wrap_CSG_TIN_Get_Edge, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Get_Triangle_Count", _wrap_CSG_TIN_Get_Triangle_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_Get_Triangle", _wrap_CSG_TIN_Get_Triangle, METH_VARARGS, NULL},
+	 { (char *)"CSG_TIN_swigregister", CSG_TIN_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Create_TIN", _wrap_SG_Create_TIN, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_PointCloud", _wrap_new_CSG_PointCloud, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Create", _wrap_CSG_PointCloud_Create, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_PointCloud", _wrap_delete_CSG_PointCloud, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Destroy", _wrap_CSG_PointCloud_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_ObjectType", _wrap_CSG_PointCloud_Get_ObjectType, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Assign", _wrap_CSG_PointCloud_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Save", _wrap_CSG_PointCloud_Save, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Set_XYZ_Precision", _wrap_CSG_PointCloud_Set_XYZ_Precision, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_is_Valid", _wrap_CSG_PointCloud_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_is_Compatible", _wrap_CSG_PointCloud_is_Compatible, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Add_Field", _wrap_CSG_PointCloud_Add_Field, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Del_Field", _wrap_CSG_PointCloud_Del_Field, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Attribute_Count", _wrap_CSG_PointCloud_Get_Attribute_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Attribute_Name", _wrap_CSG_PointCloud_Get_Attribute_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Attribute_Type", _wrap_CSG_PointCloud_Get_Attribute_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Add_Point", _wrap_CSG_PointCloud_Add_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Del_Point", _wrap_CSG_PointCloud_Del_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Del_Points", _wrap_CSG_PointCloud_Del_Points, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Point_Count", _wrap_CSG_PointCloud_Get_Point_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Set_Cursor", _wrap_CSG_PointCloud_Set_Cursor, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_X", _wrap_CSG_PointCloud_Get_X, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Y", _wrap_CSG_PointCloud_Get_Y, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Z", _wrap_CSG_PointCloud_Get_Z, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Set_Attribute", _wrap_CSG_PointCloud_Set_Attribute, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Attribute", _wrap_CSG_PointCloud_Get_Attribute, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Set_NoData", _wrap_CSG_PointCloud_Set_NoData, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_is_NoData", _wrap_CSG_PointCloud_is_NoData, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Set_Value", _wrap_CSG_PointCloud_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Value", _wrap_CSG_PointCloud_Get_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Point", _wrap_CSG_PointCloud_Get_Point, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Set_Modified", _wrap_CSG_PointCloud_Set_Modified, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Record", _wrap_CSG_PointCloud_Get_Record, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Shape", _wrap_CSG_PointCloud_Get_Shape, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Del_Record", _wrap_CSG_PointCloud_Del_Record, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Del_Records", _wrap_CSG_PointCloud_Del_Records, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Del_Shapes", _wrap_CSG_PointCloud_Del_Shapes, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Ins_Record", _wrap_CSG_PointCloud_Ins_Record, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Add_Record", _wrap_CSG_PointCloud_Add_Record, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Add_Shape", _wrap_CSG_PointCloud_Add_Shape, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Del_Shape", _wrap_CSG_PointCloud_Del_Shape, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Select", _wrap_CSG_PointCloud_Select, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_is_Selected", _wrap_CSG_PointCloud_is_Selected, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Del_Selection", _wrap_CSG_PointCloud_Del_Selection, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Inv_Selection", _wrap_CSG_PointCloud_Inv_Selection, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Selection", _wrap_CSG_PointCloud_Get_Selection, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_Get_Selection_Extent", _wrap_CSG_PointCloud_Get_Selection_Extent, METH_VARARGS, NULL},
+	 { (char *)"CSG_PointCloud_swigregister", CSG_PointCloud_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SG_Create_PointCloud", _wrap_SG_Create_PointCloud, METH_VARARGS, NULL},
+	 { (char *)"SG_Parameter_Type_Get_Identifier", _wrap_SG_Parameter_Type_Get_Identifier, METH_VARARGS, NULL},
+	 { (char *)"SG_Parameter_Type_Get_Name", _wrap_SG_Parameter_Type_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Data", _wrap_delete_CSG_Parameter_Data, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Get_Type", _wrap_CSG_Parameter_Data_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Get_Type_Identifier", _wrap_CSG_Parameter_Data_Get_Type_Identifier, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Get_Type_Name", _wrap_CSG_Parameter_Data_Get_Type_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Get_Constraint", _wrap_CSG_Parameter_Data_Get_Constraint, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_is_Valid", _wrap_CSG_Parameter_Data_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Assign", _wrap_CSG_Parameter_Data_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Serialize", _wrap_CSG_Parameter_Data_Serialize, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Set_Value", _wrap_CSG_Parameter_Data_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_asInt", _wrap_CSG_Parameter_Data_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_asDouble", _wrap_CSG_Parameter_Data_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_asPointer", _wrap_CSG_Parameter_Data_asPointer, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_asString", _wrap_CSG_Parameter_Data_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Get_Default", _wrap_CSG_Parameter_Data_Get_Default, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Set_Default", _wrap_CSG_Parameter_Data_Set_Default, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_swigregister", CSG_Parameter_Data_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Node", _wrap_new_CSG_Parameter_Node, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Node", _wrap_delete_CSG_Parameter_Node, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Node_Get_Type", _wrap_CSG_Parameter_Node_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Node_swigregister", CSG_Parameter_Node_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Bool", _wrap_new_CSG_Parameter_Bool, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Bool", _wrap_delete_CSG_Parameter_Bool, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Bool_Get_Type", _wrap_CSG_Parameter_Bool_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Bool_Set_Value", _wrap_CSG_Parameter_Bool_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Bool_asInt", _wrap_CSG_Parameter_Bool_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Bool_asString", _wrap_CSG_Parameter_Bool_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Bool_swigregister", CSG_Parameter_Bool_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Value", _wrap_delete_CSG_Parameter_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Value_Set_Range", _wrap_CSG_Parameter_Value_Set_Range, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Value_Set_Minimum", _wrap_CSG_Parameter_Value_Set_Minimum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Value_Get_Minimum", _wrap_CSG_Parameter_Value_Get_Minimum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Value_has_Minimum", _wrap_CSG_Parameter_Value_has_Minimum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Value_Set_Maximum", _wrap_CSG_Parameter_Value_Set_Maximum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Value_Get_Maximum", _wrap_CSG_Parameter_Value_Get_Maximum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Value_has_Maximum", _wrap_CSG_Parameter_Value_has_Maximum, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Value_swigregister", CSG_Parameter_Value_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Int", _wrap_new_CSG_Parameter_Int, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Int", _wrap_delete_CSG_Parameter_Int, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Int_Get_Type", _wrap_CSG_Parameter_Int_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Int_Set_Value", _wrap_CSG_Parameter_Int_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Int_asInt", _wrap_CSG_Parameter_Int_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Int_asDouble", _wrap_CSG_Parameter_Int_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Int_asString", _wrap_CSG_Parameter_Int_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Int_swigregister", CSG_Parameter_Int_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Double", _wrap_new_CSG_Parameter_Double, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Double", _wrap_delete_CSG_Parameter_Double, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Double_Get_Type", _wrap_CSG_Parameter_Double_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Double_Set_Value", _wrap_CSG_Parameter_Double_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Double_asInt", _wrap_CSG_Parameter_Double_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Double_asDouble", _wrap_CSG_Parameter_Double_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Double_asString", _wrap_CSG_Parameter_Double_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Double_swigregister", CSG_Parameter_Double_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Degree", _wrap_new_CSG_Parameter_Degree, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Degree", _wrap_delete_CSG_Parameter_Degree, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Degree_Get_Type", _wrap_CSG_Parameter_Degree_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Degree_Set_Value", _wrap_CSG_Parameter_Degree_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Degree_asString", _wrap_CSG_Parameter_Degree_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Degree_swigregister", CSG_Parameter_Degree_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Range", _wrap_new_CSG_Parameter_Range, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Range", _wrap_delete_CSG_Parameter_Range, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Range_Get_Type", _wrap_CSG_Parameter_Range_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Range_asString", _wrap_CSG_Parameter_Range_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Range_Set_Range", _wrap_CSG_Parameter_Range_Set_Range, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Range_Set_LoVal", _wrap_CSG_Parameter_Range_Set_LoVal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Range_Get_LoVal", _wrap_CSG_Parameter_Range_Get_LoVal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Range_Set_HiVal", _wrap_CSG_Parameter_Range_Set_HiVal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Range_Get_HiVal", _wrap_CSG_Parameter_Range_Get_HiVal, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Range_Get_LoParm", _wrap_CSG_Parameter_Range_Get_LoParm, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Range_Get_HiParm", _wrap_CSG_Parameter_Range_Get_HiParm, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Range_swigregister", CSG_Parameter_Range_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Choice", _wrap_new_CSG_Parameter_Choice, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Choice", _wrap_delete_CSG_Parameter_Choice, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Choice_Get_Type", _wrap_CSG_Parameter_Choice_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Choice_Set_Value", _wrap_CSG_Parameter_Choice_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Choice_asString", _wrap_CSG_Parameter_Choice_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Choice_Set_Items", _wrap_CSG_Parameter_Choice_Set_Items, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Choice_Get_Item", _wrap_CSG_Parameter_Choice_Get_Item, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Choice_Get_Data", _wrap_CSG_Parameter_Choice_Get_Data, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Choice_Get_Count", _wrap_CSG_Parameter_Choice_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Choice_swigregister", CSG_Parameter_Choice_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_String", _wrap_new_CSG_Parameter_String, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_String", _wrap_delete_CSG_Parameter_String, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_String_Get_Type", _wrap_CSG_Parameter_String_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_String_asString", _wrap_CSG_Parameter_String_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_String_is_Valid", _wrap_CSG_Parameter_String_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_String_Set_Value", _wrap_CSG_Parameter_String_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_String_Set_Password", _wrap_CSG_Parameter_String_Set_Password, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_String_is_Password", _wrap_CSG_Parameter_String_is_Password, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_String_swigregister", CSG_Parameter_String_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Text", _wrap_new_CSG_Parameter_Text, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Text", _wrap_delete_CSG_Parameter_Text, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Text_Get_Type", _wrap_CSG_Parameter_Text_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Text_swigregister", CSG_Parameter_Text_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_File_Name", _wrap_new_CSG_Parameter_File_Name, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_File_Name", _wrap_delete_CSG_Parameter_File_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_File_Name_Get_Type", _wrap_CSG_Parameter_File_Name_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_File_Name_Set_Filter", _wrap_CSG_Parameter_File_Name_Set_Filter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_File_Name_Get_Filter", _wrap_CSG_Parameter_File_Name_Get_Filter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_File_Name_Set_Flag_Save", _wrap_CSG_Parameter_File_Name_Set_Flag_Save, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_File_Name_is_Save", _wrap_CSG_Parameter_File_Name_is_Save, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_File_Name_Set_Flag_Multiple", _wrap_CSG_Parameter_File_Name_Set_Flag_Multiple, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_File_Name_is_Multiple", _wrap_CSG_Parameter_File_Name_is_Multiple, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_File_Name_Set_Flag_Directory", _wrap_CSG_Parameter_File_Name_Set_Flag_Directory, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_File_Name_is_Directory", _wrap_CSG_Parameter_File_Name_is_Directory, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_File_Name_Get_FilePaths", _wrap_CSG_Parameter_File_Name_Get_FilePaths, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_File_Name_swigregister", CSG_Parameter_File_Name_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Font", _wrap_new_CSG_Parameter_Font, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Font", _wrap_delete_CSG_Parameter_Font, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Font_Get_Type", _wrap_CSG_Parameter_Font_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Font_Set_Value", _wrap_CSG_Parameter_Font_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Font_asInt", _wrap_CSG_Parameter_Font_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Font_asPointer", _wrap_CSG_Parameter_Font_asPointer, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Font_asString", _wrap_CSG_Parameter_Font_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Font_swigregister", CSG_Parameter_Font_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Color", _wrap_new_CSG_Parameter_Color, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Color", _wrap_delete_CSG_Parameter_Color, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Color_Get_Type", _wrap_CSG_Parameter_Color_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Color_swigregister", CSG_Parameter_Color_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Colors", _wrap_new_CSG_Parameter_Colors, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Colors", _wrap_delete_CSG_Parameter_Colors, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Colors_Get_Type", _wrap_CSG_Parameter_Colors_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Colors_asInt", _wrap_CSG_Parameter_Colors_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Colors_asPointer", _wrap_CSG_Parameter_Colors_asPointer, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Colors_asString", _wrap_CSG_Parameter_Colors_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Colors_swigregister", CSG_Parameter_Colors_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Fixed_Table", _wrap_new_CSG_Parameter_Fixed_Table, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Fixed_Table", _wrap_delete_CSG_Parameter_Fixed_Table, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Fixed_Table_Get_Type", _wrap_CSG_Parameter_Fixed_Table_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Fixed_Table_asPointer", _wrap_CSG_Parameter_Fixed_Table_asPointer, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Fixed_Table_asString", _wrap_CSG_Parameter_Fixed_Table_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Fixed_Table_swigregister", CSG_Parameter_Fixed_Table_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Grid_System", _wrap_new_CSG_Parameter_Grid_System, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Grid_System", _wrap_delete_CSG_Parameter_Grid_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_System_Get_Type", _wrap_CSG_Parameter_Grid_System_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_System_Set_Value", _wrap_CSG_Parameter_Grid_System_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_System_asPointer", _wrap_CSG_Parameter_Grid_System_asPointer, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_System_asString", _wrap_CSG_Parameter_Grid_System_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_System_swigregister", CSG_Parameter_Grid_System_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Table_Field", _wrap_new_CSG_Parameter_Table_Field, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Table_Field", _wrap_delete_CSG_Parameter_Table_Field, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Table_Field_Get_Type", _wrap_CSG_Parameter_Table_Field_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Table_Field_asString", _wrap_CSG_Parameter_Table_Field_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Table_Field_Set_Value", _wrap_CSG_Parameter_Table_Field_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Table_Field_Get_Table", _wrap_CSG_Parameter_Table_Field_Get_Table, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Table_Field_swigregister", CSG_Parameter_Table_Field_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Data_Object", _wrap_delete_CSG_Parameter_Data_Object, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Object_is_Valid", _wrap_CSG_Parameter_Data_Object_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Object_Set_Value", _wrap_CSG_Parameter_Data_Object_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Object_asPointer", _wrap_CSG_Parameter_Data_Object_asPointer, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Object_asString", _wrap_CSG_Parameter_Data_Object_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Object_swigregister", CSG_Parameter_Data_Object_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Data_Object_Output", _wrap_new_CSG_Parameter_Data_Object_Output, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Data_Object_Output", _wrap_delete_CSG_Parameter_Data_Object_Output, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Object_Output_Get_Type", _wrap_CSG_Parameter_Data_Object_Output_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Object_Output_Set_Value", _wrap_CSG_Parameter_Data_Object_Output_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Object_Output_Set_DataObject_Type", _wrap_CSG_Parameter_Data_Object_Output_Set_DataObject_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Object_Output_Get_DataObject_Type", _wrap_CSG_Parameter_Data_Object_Output_Get_DataObject_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Data_Object_Output_swigregister", CSG_Parameter_Data_Object_Output_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Grid", _wrap_new_CSG_Parameter_Grid, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Grid", _wrap_delete_CSG_Parameter_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_Get_Type", _wrap_CSG_Parameter_Grid_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_Set_Value", _wrap_CSG_Parameter_Grid_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_Set_Preferred_Type", _wrap_CSG_Parameter_Grid_Set_Preferred_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_Get_Preferred_Type", _wrap_CSG_Parameter_Grid_Get_Preferred_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_Get_System", _wrap_CSG_Parameter_Grid_Get_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_swigregister", CSG_Parameter_Grid_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Table", _wrap_new_CSG_Parameter_Table, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Table", _wrap_delete_CSG_Parameter_Table, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Table_Get_Type", _wrap_CSG_Parameter_Table_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Table_Set_Value", _wrap_CSG_Parameter_Table_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Table_swigregister", CSG_Parameter_Table_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Shapes", _wrap_new_CSG_Parameter_Shapes, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Shapes", _wrap_delete_CSG_Parameter_Shapes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Shapes_Get_Type", _wrap_CSG_Parameter_Shapes_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Shapes_Set_Value", _wrap_CSG_Parameter_Shapes_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Shapes_Set_Shape_Type", _wrap_CSG_Parameter_Shapes_Set_Shape_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Shapes_Get_Shape_Type", _wrap_CSG_Parameter_Shapes_Get_Shape_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Shapes_swigregister", CSG_Parameter_Shapes_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_TIN", _wrap_new_CSG_Parameter_TIN, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_TIN", _wrap_delete_CSG_Parameter_TIN, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_TIN_Get_Type", _wrap_CSG_Parameter_TIN_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_TIN_Set_Value", _wrap_CSG_Parameter_TIN_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_TIN_swigregister", CSG_Parameter_TIN_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_PointCloud", _wrap_new_CSG_Parameter_PointCloud, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_PointCloud", _wrap_delete_CSG_Parameter_PointCloud, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_PointCloud_Get_Type", _wrap_CSG_Parameter_PointCloud_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_PointCloud_Set_Value", _wrap_CSG_Parameter_PointCloud_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_PointCloud_swigregister", CSG_Parameter_PointCloud_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_List", _wrap_delete_CSG_Parameter_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_List_asString", _wrap_CSG_Parameter_List_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_List_asInt", _wrap_CSG_Parameter_List_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_List_asPointer", _wrap_CSG_Parameter_List_asPointer, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_List_Add_Item", _wrap_CSG_Parameter_List_Add_Item, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_List_Del_Item", _wrap_CSG_Parameter_List_Del_Item, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_List_Del_Items", _wrap_CSG_Parameter_List_Del_Items, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_List_Get_Count", _wrap_CSG_Parameter_List_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_List_asDataObject", _wrap_CSG_Parameter_List_asDataObject, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_List_swigregister", CSG_Parameter_List_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Grid_List", _wrap_new_CSG_Parameter_Grid_List, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Grid_List", _wrap_delete_CSG_Parameter_Grid_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_List_Get_Type", _wrap_CSG_Parameter_Grid_List_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_List_Get_System", _wrap_CSG_Parameter_Grid_List_Get_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_List_asGrid", _wrap_CSG_Parameter_Grid_List_asGrid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Grid_List_swigregister", CSG_Parameter_Grid_List_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Table_List", _wrap_new_CSG_Parameter_Table_List, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Table_List", _wrap_delete_CSG_Parameter_Table_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Table_List_Get_Type", _wrap_CSG_Parameter_Table_List_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Table_List_asTable", _wrap_CSG_Parameter_Table_List_asTable, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Table_List_swigregister", CSG_Parameter_Table_List_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Shapes_List", _wrap_new_CSG_Parameter_Shapes_List, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Shapes_List", _wrap_delete_CSG_Parameter_Shapes_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Shapes_List_Get_Type", _wrap_CSG_Parameter_Shapes_List_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Shapes_List_Set_Shape_Type", _wrap_CSG_Parameter_Shapes_List_Set_Shape_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Shapes_List_Get_Shape_Type", _wrap_CSG_Parameter_Shapes_List_Get_Shape_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Shapes_List_asShapes", _wrap_CSG_Parameter_Shapes_List_asShapes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Shapes_List_swigregister", CSG_Parameter_Shapes_List_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_TIN_List", _wrap_new_CSG_Parameter_TIN_List, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_TIN_List", _wrap_delete_CSG_Parameter_TIN_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_TIN_List_Get_Type", _wrap_CSG_Parameter_TIN_List_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_TIN_List_asTIN", _wrap_CSG_Parameter_TIN_List_asTIN, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_TIN_List_swigregister", CSG_Parameter_TIN_List_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_PointCloud_List", _wrap_new_CSG_Parameter_PointCloud_List, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_PointCloud_List", _wrap_delete_CSG_Parameter_PointCloud_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_PointCloud_List_Get_Type", _wrap_CSG_Parameter_PointCloud_List_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_PointCloud_List_asPointCloud", _wrap_CSG_Parameter_PointCloud_List_asPointCloud, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_PointCloud_List_swigregister", CSG_Parameter_PointCloud_List_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameter_Parameters", _wrap_new_CSG_Parameter_Parameters, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameter_Parameters", _wrap_delete_CSG_Parameter_Parameters, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Parameters_Get_Type", _wrap_CSG_Parameter_Parameters_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Parameters_asString", _wrap_CSG_Parameter_Parameters_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Parameters_asPointer", _wrap_CSG_Parameter_Parameters_asPointer, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Parameters_swigregister", CSG_Parameter_Parameters_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameters_Grid_Target", _wrap_new_CSG_Parameters_Grid_Target, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_Create", _wrap_CSG_Parameters_Grid_Target_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_Add_Parameters_User", _wrap_CSG_Parameters_Grid_Target_Add_Parameters_User, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_Add_Parameters_Grid", _wrap_CSG_Parameters_Grid_Target_Add_Parameters_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_Add_Parameters_System", _wrap_CSG_Parameters_Grid_Target_Add_Parameters_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_Add_Grid_Parameter", _wrap_CSG_Parameters_Grid_Target_Add_Grid_Parameter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_On_User_Changed", _wrap_CSG_Parameters_Grid_Target_On_User_Changed, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_Init_User", _wrap_CSG_Parameters_Grid_Target_Init_User, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_Get_User", _wrap_CSG_Parameters_Grid_Target_Get_User, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_Get_Grid", _wrap_CSG_Parameters_Grid_Target_Get_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_Get_System_User", _wrap_CSG_Parameters_Grid_Target_Get_System_User, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_Get_System", _wrap_CSG_Parameters_Grid_Target_Get_System, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameters_Grid_Target", _wrap_delete_CSG_Parameters_Grid_Target, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Grid_Target_swigregister", CSG_Parameters_Grid_Target_swigregister, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Get_Owner", _wrap_CSG_Parameter_Get_Owner, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Get_Parent", _wrap_CSG_Parameter_Get_Parent, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Get_Type", _wrap_CSG_Parameter_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Get_Type_Identifier", _wrap_CSG_Parameter_Get_Type_Identifier, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Get_Type_Name", _wrap_CSG_Parameter_Get_Type_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Get_Data", _wrap_CSG_Parameter_Get_Data, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Get_Identifier", _wrap_CSG_Parameter_Get_Identifier, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Get_Name", _wrap_CSG_Parameter_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Get_Description", _wrap_CSG_Parameter_Get_Description, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Set_Enabled", _wrap_CSG_Parameter_Set_Enabled, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_is_Enabled", _wrap_CSG_Parameter_is_Enabled, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_ignore_Projection", _wrap_CSG_Parameter_ignore_Projection, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_is_Valid", _wrap_CSG_Parameter_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_is_Input", _wrap_CSG_Parameter_is_Input, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_is_Output", _wrap_CSG_Parameter_is_Output, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_is_Optional", _wrap_CSG_Parameter_is_Optional, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_is_Information", _wrap_CSG_Parameter_is_Information, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_is_Option", _wrap_CSG_Parameter_is_Option, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_is_DataObject", _wrap_CSG_Parameter_is_DataObject, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_is_DataObject_List", _wrap_CSG_Parameter_is_DataObject_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_is_Parameters", _wrap_CSG_Parameter_is_Parameters, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_is_Serializable", _wrap_CSG_Parameter_is_Serializable, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Get_Children_Count", _wrap_CSG_Parameter_Get_Children_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Get_Child", _wrap_CSG_Parameter_Get_Child, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Set_Value", _wrap_CSG_Parameter_Set_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Set_Default", _wrap_CSG_Parameter_Set_Default, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_has_Changed", _wrap_CSG_Parameter_has_Changed, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asBool", _wrap_CSG_Parameter_asBool, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asInt", _wrap_CSG_Parameter_asInt, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asColor", _wrap_CSG_Parameter_asColor, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asDouble", _wrap_CSG_Parameter_asDouble, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asPointer", _wrap_CSG_Parameter_asPointer, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asString", _wrap_CSG_Parameter_asString, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asFont", _wrap_CSG_Parameter_asFont, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asColors", _wrap_CSG_Parameter_asColors, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asGrid_System", _wrap_CSG_Parameter_asGrid_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asDataObject", _wrap_CSG_Parameter_asDataObject, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asGrid", _wrap_CSG_Parameter_asGrid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asTable", _wrap_CSG_Parameter_asTable, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asShapes", _wrap_CSG_Parameter_asShapes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asTIN", _wrap_CSG_Parameter_asTIN, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asPointCloud", _wrap_CSG_Parameter_asPointCloud, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asValue", _wrap_CSG_Parameter_asValue, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asChoice", _wrap_CSG_Parameter_asChoice, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asRange", _wrap_CSG_Parameter_asRange, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asFilePath", _wrap_CSG_Parameter_asFilePath, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asList", _wrap_CSG_Parameter_asList, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asGridList", _wrap_CSG_Parameter_asGridList, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asTableList", _wrap_CSG_Parameter_asTableList, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asShapesList", _wrap_CSG_Parameter_asShapesList, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asTINList", _wrap_CSG_Parameter_asTINList, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asPointCloudList", _wrap_CSG_Parameter_asPointCloudList, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_asParameters", _wrap_CSG_Parameter_asParameters, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Assign", _wrap_CSG_Parameter_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_Serialize", _wrap_CSG_Parameter_Serialize, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameter_swigregister", CSG_Parameter_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Parameters", _wrap_delete_CSG_Parameters, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Parameters", _wrap_new_CSG_Parameters, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Create", _wrap_CSG_Parameters_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Destroy", _wrap_CSG_Parameters_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Get_Owner", _wrap_CSG_Parameters_Get_Owner, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Get_Count", _wrap_CSG_Parameters_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Set_Identifier", _wrap_CSG_Parameters_Set_Identifier, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Get_Identifier", _wrap_CSG_Parameters_Get_Identifier, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Set_Name", _wrap_CSG_Parameters_Set_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Get_Name", _wrap_CSG_Parameters_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Set_Description", _wrap_CSG_Parameters_Set_Description, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Get_Description", _wrap_CSG_Parameters_Get_Description, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Set_Translation", _wrap_CSG_Parameters_Set_Translation, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Set_Enabled", _wrap_CSG_Parameters_Set_Enabled, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Set_Callback_On_Parameter_Changed", _wrap_CSG_Parameters_Set_Callback_On_Parameter_Changed, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Set_Callback", _wrap_CSG_Parameters_Set_Callback, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Del_Parameters", _wrap_CSG_Parameters_Del_Parameters, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Set_Parameter", _wrap_CSG_Parameters_Set_Parameter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Assign", _wrap_CSG_Parameters_Assign, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Assign_Values", _wrap_CSG_Parameters_Assign_Values, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Serialize", _wrap_CSG_Parameters_Serialize, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Serialize_Compatibility", _wrap_CSG_Parameters_Serialize_Compatibility, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_DataObjects_Check", _wrap_CSG_Parameters_DataObjects_Check, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Get_String", _wrap_CSG_Parameters_Get_String, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Msg_String", _wrap_CSG_Parameters_Msg_String, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Set_History", _wrap_CSG_Parameters_Set_History, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Get_Grid_System", _wrap_CSG_Parameters_Get_Grid_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_is_Managed", _wrap_CSG_Parameters_is_Managed, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Get_Parameter", _wrap_CSG_Parameters_Get_Parameter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters___call__", _wrap_CSG_Parameters___call__, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Del_Parameter", _wrap_CSG_Parameters_Del_Parameter, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Node", _wrap_CSG_Parameters_Add_Node, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Value", _wrap_CSG_Parameters_Add_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Info_Value", _wrap_CSG_Parameters_Add_Info_Value, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Range", _wrap_CSG_Parameters_Add_Range, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Info_Range", _wrap_CSG_Parameters_Add_Info_Range, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Choice", _wrap_CSG_Parameters_Add_Choice, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_String", _wrap_CSG_Parameters_Add_String, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Info_String", _wrap_CSG_Parameters_Add_Info_String, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_FilePath", _wrap_CSG_Parameters_Add_FilePath, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Font", _wrap_CSG_Parameters_Add_Font, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Colors", _wrap_CSG_Parameters_Add_Colors, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_FixedTable", _wrap_CSG_Parameters_Add_FixedTable, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Grid_System", _wrap_CSG_Parameters_Add_Grid_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Grid", _wrap_CSG_Parameters_Add_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Grid_Output", _wrap_CSG_Parameters_Add_Grid_Output, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Grid_List", _wrap_CSG_Parameters_Add_Grid_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Table_Field", _wrap_CSG_Parameters_Add_Table_Field, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Table", _wrap_CSG_Parameters_Add_Table, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Table_Output", _wrap_CSG_Parameters_Add_Table_Output, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Table_List", _wrap_CSG_Parameters_Add_Table_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Shapes", _wrap_CSG_Parameters_Add_Shapes, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Shapes_Output", _wrap_CSG_Parameters_Add_Shapes_Output, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Shapes_List", _wrap_CSG_Parameters_Add_Shapes_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_TIN", _wrap_CSG_Parameters_Add_TIN, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_TIN_Output", _wrap_CSG_Parameters_Add_TIN_Output, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_TIN_List", _wrap_CSG_Parameters_Add_TIN_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_PointCloud", _wrap_CSG_Parameters_Add_PointCloud, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_PointCloud_Output", _wrap_CSG_Parameters_Add_PointCloud_Output, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_PointCloud_List", _wrap_CSG_Parameters_Add_PointCloud_List, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_Add_Parameters", _wrap_CSG_Parameters_Add_Parameters, METH_VARARGS, NULL},
+	 { (char *)"CSG_Parameters_swigregister", CSG_Parameters_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Module", _wrap_delete_CSG_Module, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Destroy", _wrap_CSG_Module_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Get_Type", _wrap_CSG_Module_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Get_Name", _wrap_CSG_Module_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Get_Description", _wrap_CSG_Module_Get_Description, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Get_Author", _wrap_CSG_Module_Get_Author, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Get_Icon", _wrap_CSG_Module_Get_Icon, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Get_MenuPath", _wrap_CSG_Module_Get_MenuPath, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Get_Parameters_Count", _wrap_CSG_Module_Get_Parameters_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Get_Parameters", _wrap_CSG_Module_Get_Parameters, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Garbage_Get_Count", _wrap_CSG_Module_Garbage_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Garbage_Get_Item", _wrap_CSG_Module_Garbage_Get_Item, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Garbage_Del_Item", _wrap_CSG_Module_Garbage_Del_Item, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Garbage_Clear", _wrap_CSG_Module_Garbage_Clear, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_do_Sync_Projections", _wrap_CSG_Module_do_Sync_Projections, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_is_Interactive", _wrap_CSG_Module_is_Interactive, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_is_Progress", _wrap_CSG_Module_is_Progress, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_is_Executing", _wrap_CSG_Module_is_Executing, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Set_Translation", _wrap_CSG_Module_Set_Translation, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Set_Managed", _wrap_CSG_Module_Set_Managed, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Set_Show_Progress", _wrap_CSG_Module_Set_Show_Progress, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_On_Before_Execution", _wrap_CSG_Module_On_Before_Execution, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_On_After_Execution", _wrap_CSG_Module_On_After_Execution, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Execute", _wrap_CSG_Module_Execute, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_swigregister", CSG_Module_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Module_Grid", _wrap_delete_CSG_Module_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Grid_Get_Type", _wrap_CSG_Module_Grid_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Grid_Get_System", _wrap_CSG_Module_Grid_Get_System, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Grid_swigregister", CSG_Module_Grid_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Module_Interactive_Base", _wrap_new_CSG_Module_Interactive_Base, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Module_Interactive_Base", _wrap_delete_CSG_Module_Interactive_Base, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Interactive_Base_Execute_Position", _wrap_CSG_Module_Interactive_Base_Execute_Position, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Interactive_Base_Execute_Keyboard", _wrap_CSG_Module_Interactive_Base_Execute_Keyboard, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Interactive_Base_Execute_Finish", _wrap_CSG_Module_Interactive_Base_Execute_Finish, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Interactive_Base_Get_Drag_Mode", _wrap_CSG_Module_Interactive_Base_Get_Drag_Mode, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Interactive_Base_swigregister", CSG_Module_Interactive_Base_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Module_Interactive", _wrap_delete_CSG_Module_Interactive, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Interactive_Get_Type", _wrap_CSG_Module_Interactive_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Interactive_is_Interactive", _wrap_CSG_Module_Interactive_is_Interactive, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Interactive_swigregister", CSG_Module_Interactive_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Module_Grid_Interactive", _wrap_delete_CSG_Module_Grid_Interactive, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Grid_Interactive_Get_Type", _wrap_CSG_Module_Grid_Interactive_Get_Type, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Grid_Interactive_is_Interactive", _wrap_CSG_Module_Grid_Interactive_is_Interactive, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Grid_Interactive_swigregister", CSG_Module_Grid_Interactive_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Module_Library_Interface", _wrap_new_CSG_Module_Library_Interface, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Module_Library_Interface", _wrap_delete_CSG_Module_Library_Interface, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Interface_Set_Info", _wrap_CSG_Module_Library_Interface_Set_Info, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Interface_Get_Info", _wrap_CSG_Module_Library_Interface_Get_Info, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Interface_Get_Count", _wrap_CSG_Module_Library_Interface_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Interface_Add_Module", _wrap_CSG_Module_Library_Interface_Add_Module, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Interface_Get_Module", _wrap_CSG_Module_Library_Interface_Get_Module, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Interface_Set_File_Name", _wrap_CSG_Module_Library_Interface_Set_File_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Interface_Get_File_Name", _wrap_CSG_Module_Library_Interface_Get_File_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Interface_Get_Translation", _wrap_CSG_Module_Library_Interface_Get_Translation, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Interface_swigregister", CSG_Module_Library_Interface_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_CSG_Module_Library", _wrap_delete_CSG_Module_Library, METH_VARARGS, NULL},
+	 { (char *)"new_CSG_Module_Library", _wrap_new_CSG_Module_Library, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Create", _wrap_CSG_Module_Library_Create, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Destroy", _wrap_CSG_Module_Library_Destroy, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_is_Valid", _wrap_CSG_Module_Library_is_Valid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_File_Name", _wrap_CSG_Module_Library_Get_File_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Info", _wrap_CSG_Module_Library_Get_Info, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Name", _wrap_CSG_Module_Library_Get_Name, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Description", _wrap_CSG_Module_Library_Get_Description, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Author", _wrap_CSG_Module_Library_Get_Author, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Version", _wrap_CSG_Module_Library_Get_Version, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Summary", _wrap_CSG_Module_Library_Get_Summary, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Count", _wrap_CSG_Module_Library_Get_Count, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Module", _wrap_CSG_Module_Library_Get_Module, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Module_Grid", _wrap_CSG_Module_Library_Get_Module_Grid, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Module_I", _wrap_CSG_Module_Library_Get_Module_I, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Module_Grid_I", _wrap_CSG_Module_Library_Get_Module_Grid_I, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_Get_Menu", _wrap_CSG_Module_Library_Get_Menu, METH_VARARGS, NULL},
+	 { (char *)"CSG_Module_Library_swigregister", CSG_Module_Library_swigregister, METH_VARARGS, NULL},
+	 { (char *)"SAGA_API_Get_Version", _wrap_SAGA_API_Get_Version, METH_VARARGS, NULL},
+	 { NULL, NULL, 0, NULL }
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
+
+static void *_p_CSG_Module_Grid_InteractiveTo_p_CSG_Module_Grid(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Module_Grid *)  ((CSG_Module_Grid_Interactive *) x));
+}
+static void *_p_CSG_Table_Value_BinaryTo_p_CSG_Table_Value(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Value *)  ((CSG_Table_Value_Binary *) x));
+}
+static void *_p_CSG_Table_Value_DoubleTo_p_CSG_Table_Value(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Value *)  ((CSG_Table_Value_Double *) x));
+}
+static void *_p_CSG_Table_Value_StringTo_p_CSG_Table_Value(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Value *)  ((CSG_Table_Value_String *) x));
+}
+static void *_p_CSG_Table_Value_IntTo_p_CSG_Table_Value(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Value *)  ((CSG_Table_Value_Int *) x));
+}
+static void *_p_CSG_Table_Value_DateTo_p_CSG_Table_Value(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Value *)  ((CSG_Table_Value_Date *) x));
+}
+static void *_p_CSG_Shape_LineTo_p_CSG_Table_Record(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Record *) (CSG_Shape *)(CSG_Shape_Points *) ((CSG_Shape_Line *) x));
+}
+static void *_p_CSG_Shape_PolygonTo_p_CSG_Table_Record(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Record *) (CSG_Shape *)(CSG_Shape_Points *) ((CSG_Shape_Polygon *) x));
+}
+static void *_p_CSG_ShapeTo_p_CSG_Table_Record(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Record *)  ((CSG_Shape *) x));
+}
+static void *_p_CSG_Shape_PointsTo_p_CSG_Table_Record(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Record *) (CSG_Shape *) ((CSG_Shape_Points *) x));
+}
+static void *_p_CSG_Shape_Point_ZTo_p_CSG_Table_Record(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Record *) (CSG_Shape *)(CSG_Shape_Point *) ((CSG_Shape_Point_Z *) x));
+}
+static void *_p_CSG_Shape_Point_ZMTo_p_CSG_Table_Record(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Record *) (CSG_Shape *)(CSG_Shape_Point *)(CSG_Shape_Point_Z *) ((CSG_Shape_Point_ZM *) x));
+}
+static void *_p_CSG_Shape_PointTo_p_CSG_Table_Record(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Record *) (CSG_Shape *) ((CSG_Shape_Point *) x));
+}
+static void *_p_CSG_TIN_NodeTo_p_CSG_Table_Record(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table_Record *)  ((CSG_TIN_Node *) x));
+}
+static void *_p_CSG_Module_InteractiveTo_p_CSG_Module_Interactive_Base(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Module_Interactive_Base *)  ((CSG_Module_Interactive *) x));
+}
+static void *_p_CSG_Module_Grid_InteractiveTo_p_CSG_Module_Interactive_Base(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Module_Interactive_Base *)  ((CSG_Module_Grid_Interactive *) x));
+}
+static void *_p_CSG_Grid_StackTo_p_CSG_Stack(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Stack *)  ((CSG_Grid_Stack *) x));
+}
+static void *_p_CSG_PointCloudTo_p_CSG_Shapes(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shapes *)  ((CSG_PointCloud *) x));
+}
+static void *_p_CSG_Parameter_TextTo_p_CSG_Parameter_String(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_String *)  ((CSG_Parameter_Text *) x));
+}
+static void *_p_CSG_Parameter_File_NameTo_p_CSG_Parameter_String(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_String *)  ((CSG_Parameter_File_Name *) x));
+}
+static void *_p_CSG_Parameter_ChoiceTo_p_CSG_Parameter_Value(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Value *) (CSG_Parameter_Int *) ((CSG_Parameter_Choice *) x));
+}
+static void *_p_CSG_Parameter_DegreeTo_p_CSG_Parameter_Value(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Value *) (CSG_Parameter_Double *) ((CSG_Parameter_Degree *) x));
+}
+static void *_p_CSG_Parameter_IntTo_p_CSG_Parameter_Value(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Value *)  ((CSG_Parameter_Int *) x));
+}
+static void *_p_CSG_Parameter_DoubleTo_p_CSG_Parameter_Value(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Value *)  ((CSG_Parameter_Double *) x));
+}
+static void *_p_CSG_Parameter_ColorTo_p_CSG_Parameter_Value(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Value *) (CSG_Parameter_Int *) ((CSG_Parameter_Color *) x));
+}
+static void *_p_CSG_Parameter_Table_FieldTo_p_CSG_Parameter_Value(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Value *) (CSG_Parameter_Int *) ((CSG_Parameter_Table_Field *) x));
+}
+static void *_p_CSG_Shape_LineTo_p_CSG_Shape(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape *) (CSG_Shape_Points *) ((CSG_Shape_Line *) x));
+}
+static void *_p_CSG_Shape_PolygonTo_p_CSG_Shape(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape *) (CSG_Shape_Points *) ((CSG_Shape_Polygon *) x));
+}
+static void *_p_CSG_Shape_PointsTo_p_CSG_Shape(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape *)  ((CSG_Shape_Points *) x));
+}
+static void *_p_CSG_Shape_Point_ZTo_p_CSG_Shape(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape *) (CSG_Shape_Point *) ((CSG_Shape_Point_Z *) x));
+}
+static void *_p_CSG_Shape_Point_ZMTo_p_CSG_Shape(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape *) (CSG_Shape_Point *)(CSG_Shape_Point_Z *) ((CSG_Shape_Point_ZM *) x));
+}
+static void *_p_CSG_Shape_PointTo_p_CSG_Shape(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape *)  ((CSG_Shape_Point *) x));
+}
+static void *_p_CSG_Module_InteractiveTo_p_CSG_Module(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Module *)  ((CSG_Module_Interactive *) x));
+}
+static void *_p_CSG_Module_Grid_InteractiveTo_p_CSG_Module(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Module *) (CSG_Module_Grid *) ((CSG_Module_Grid_Interactive *) x));
+}
+static void *_p_CSG_Module_GridTo_p_CSG_Module(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Module *)  ((CSG_Module_Grid *) x));
+}
+static void *_p_CSG_Shape_Part_ZMTo_p_CSG_Shape_Part_Z(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape_Part_Z *)  ((CSG_Shape_Part_ZM *) x));
+}
+static void *_p_CSG_Shape_Polygon_PartTo_p_CSG_Shape_Part(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape_Part *)  ((CSG_Shape_Polygon_Part *) x));
+}
+static void *_p_CSG_Shape_Part_ZTo_p_CSG_Shape_Part(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape_Part *)  ((CSG_Shape_Part_Z *) x));
+}
+static void *_p_CSG_Shape_Part_ZMTo_p_CSG_Shape_Part(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape_Part *) (CSG_Shape_Part_Z *) ((CSG_Shape_Part_ZM *) x));
+}
+static void *_p_CSG_Parameter_ShapesTo_p_CSG_Parameter_Data_Object(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data_Object *)  ((CSG_Parameter_Shapes *) x));
+}
+static void *_p_CSG_Parameter_TINTo_p_CSG_Parameter_Data_Object(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data_Object *)  ((CSG_Parameter_TIN *) x));
+}
+static void *_p_CSG_Parameter_Data_Object_OutputTo_p_CSG_Parameter_Data_Object(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data_Object *)  ((CSG_Parameter_Data_Object_Output *) x));
+}
+static void *_p_CSG_Parameter_GridTo_p_CSG_Parameter_Data_Object(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data_Object *)  ((CSG_Parameter_Grid *) x));
+}
+static void *_p_CSG_Parameter_PointCloudTo_p_CSG_Parameter_Data_Object(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data_Object *)  ((CSG_Parameter_PointCloud *) x));
+}
+static void *_p_CSG_Parameter_TableTo_p_CSG_Parameter_Data_Object(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data_Object *)  ((CSG_Parameter_Table *) x));
+}
+static void *_p_CSG_ShapesTo_p_CSG_Data_Object(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Data_Object *) (CSG_Table *) ((CSG_Shapes *) x));
+}
+static void *_p_CSG_GridTo_p_CSG_Data_Object(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Data_Object *)  ((CSG_Grid *) x));
+}
+static void *_p_CSG_PointCloudTo_p_CSG_Data_Object(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Data_Object *) (CSG_Table *)(CSG_Shapes *) ((CSG_PointCloud *) x));
+}
+static void *_p_CSG_TINTo_p_CSG_Data_Object(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Data_Object *) (CSG_Table *) ((CSG_TIN *) x));
+}
+static void *_p_CSG_TableTo_p_CSG_Data_Object(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Data_Object *)  ((CSG_Table *) x));
+}
+static void *_p_CSG_Shape_LineTo_p_CSG_Shape_Points(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape_Points *)  ((CSG_Shape_Line *) x));
+}
+static void *_p_CSG_Shape_PolygonTo_p_CSG_Shape_Points(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape_Points *)  ((CSG_Shape_Polygon *) x));
+}
+static void *_p_CSG_Point_ZTo_p_CSG_Point(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Point *)  ((CSG_Point_Z *) x));
+}
+static void *_p_CSG_Point_ZMTo_p_CSG_Point(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Point *) (CSG_Point_Z *) ((CSG_Point_ZM *) x));
+}
+static void *_p_CSG_Shape_Point_ZTo_p_CSG_Shape_Point(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape_Point *)  ((CSG_Shape_Point_Z *) x));
+}
+static void *_p_CSG_Shape_Point_ZMTo_p_CSG_Shape_Point(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape_Point *) (CSG_Shape_Point_Z *) ((CSG_Shape_Point_ZM *) x));
+}
+static void *_p_CSG_Parameter_IntTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Value *) ((CSG_Parameter_Int *) x));
+}
+static void *_p_CSG_Parameter_File_NameTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_String *) ((CSG_Parameter_File_Name *) x));
+}
+static void *_p_CSG_Parameter_Table_ListTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_List *) ((CSG_Parameter_Table_List *) x));
+}
+static void *_p_CSG_Parameter_TIN_ListTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_List *) ((CSG_Parameter_TIN_List *) x));
+}
+static void *_p_CSG_Parameter_NodeTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_Node *) x));
+}
+static void *_p_CSG_Parameter_Grid_ListTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_List *) ((CSG_Parameter_Grid_List *) x));
+}
+static void *_p_CSG_Parameter_PointCloud_ListTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_List *) ((CSG_Parameter_PointCloud_List *) x));
+}
+static void *_p_CSG_Parameter_ParametersTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_Parameters *) x));
+}
+static void *_p_CSG_Parameter_ColorsTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_Colors *) x));
+}
+static void *_p_CSG_Parameter_Table_FieldTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Value *)(CSG_Parameter_Int *) ((CSG_Parameter_Table_Field *) x));
+}
+static void *_p_CSG_Parameter_StringTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_String *) x));
+}
+static void *_p_CSG_Parameter_Fixed_TableTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_Fixed_Table *) x));
+}
+static void *_p_CSG_Parameter_TableTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Data_Object *) ((CSG_Parameter_Table *) x));
+}
+static void *_p_CSG_Parameter_TextTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_String *) ((CSG_Parameter_Text *) x));
+}
+static void *_p_CSG_Parameter_Data_Object_OutputTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Data_Object *) ((CSG_Parameter_Data_Object_Output *) x));
+}
+static void *_p_CSG_Parameter_GridTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Data_Object *) ((CSG_Parameter_Grid *) x));
+}
+static void *_p_CSG_Parameter_ShapesTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Data_Object *) ((CSG_Parameter_Shapes *) x));
+}
+static void *_p_CSG_Parameter_ColorTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Value *)(CSG_Parameter_Int *) ((CSG_Parameter_Color *) x));
+}
+static void *_p_CSG_Parameter_ValueTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_Value *) x));
+}
+static void *_p_CSG_Parameter_FontTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_Font *) x));
+}
+static void *_p_CSG_Parameter_Grid_SystemTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_Grid_System *) x));
+}
+static void *_p_CSG_Parameter_PointCloudTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Data_Object *) ((CSG_Parameter_PointCloud *) x));
+}
+static void *_p_CSG_Parameter_DegreeTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Value *)(CSG_Parameter_Double *) ((CSG_Parameter_Degree *) x));
+}
+static void *_p_CSG_Parameter_TINTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Data_Object *) ((CSG_Parameter_TIN *) x));
+}
+static void *_p_CSG_Parameter_ChoiceTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Value *)(CSG_Parameter_Int *) ((CSG_Parameter_Choice *) x));
+}
+static void *_p_CSG_Parameter_ListTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_List *) x));
+}
+static void *_p_CSG_Parameter_Data_ObjectTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_Data_Object *) x));
+}
+static void *_p_CSG_Parameter_BoolTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_Bool *) x));
+}
+static void *_p_CSG_Parameter_RangeTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *)  ((CSG_Parameter_Range *) x));
+}
+static void *_p_CSG_Parameter_Shapes_ListTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_List *) ((CSG_Parameter_Shapes_List *) x));
+}
+static void *_p_CSG_Parameter_DoubleTo_p_CSG_Parameter_Data(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Data *) (CSG_Parameter_Value *) ((CSG_Parameter_Double *) x));
+}
+static void *_p_CSG_ShapesTo_p_CSG_Table(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table *)  ((CSG_Shapes *) x));
+}
+static void *_p_CSG_PointCloudTo_p_CSG_Table(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table *) (CSG_Shapes *) ((CSG_PointCloud *) x));
+}
+static void *_p_CSG_TINTo_p_CSG_Table(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Table *)  ((CSG_TIN *) x));
+}
+static void *_p_CSG_Point_ZMTo_p_CSG_Point_Z(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Point_Z *)  ((CSG_Point_ZM *) x));
+}
+static void *_p_CSG_Shape_Point_ZMTo_p_CSG_Shape_Point_Z(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Shape_Point_Z *)  ((CSG_Shape_Point_ZM *) x));
+}
+static void *_p_CSG_PRQuadTree_NodeTo_p_CSG_PRQuadTree_Item(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_PRQuadTree_Item *)  ((CSG_PRQuadTree_Node *) x));
+}
+static void *_p_CSG_PRQuadTree_LeafTo_p_CSG_PRQuadTree_Item(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_PRQuadTree_Item *)  ((CSG_PRQuadTree_Leaf *) x));
+}
+static void *_p_CSG_Parameter_DegreeTo_p_CSG_Parameter_Double(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Double *)  ((CSG_Parameter_Degree *) x));
+}
+static void *_p_CSG_Parameter_Table_ListTo_p_CSG_Parameter_List(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_List *)  ((CSG_Parameter_Table_List *) x));
+}
+static void *_p_CSG_Parameter_Grid_ListTo_p_CSG_Parameter_List(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_List *)  ((CSG_Parameter_Grid_List *) x));
+}
+static void *_p_CSG_Parameter_TIN_ListTo_p_CSG_Parameter_List(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_List *)  ((CSG_Parameter_TIN_List *) x));
+}
+static void *_p_CSG_Parameter_PointCloud_ListTo_p_CSG_Parameter_List(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_List *)  ((CSG_Parameter_PointCloud_List *) x));
+}
+static void *_p_CSG_Parameter_Shapes_ListTo_p_CSG_Parameter_List(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_List *)  ((CSG_Parameter_Shapes_List *) x));
+}
+static void *_p_CSG_Parameter_ChoiceTo_p_CSG_Parameter_Int(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Int *)  ((CSG_Parameter_Choice *) x));
+}
+static void *_p_CSG_Parameter_ColorTo_p_CSG_Parameter_Int(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Int *)  ((CSG_Parameter_Color *) x));
+}
+static void *_p_CSG_Parameter_Table_FieldTo_p_CSG_Parameter_Int(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CSG_Parameter_Int *)  ((CSG_Parameter_Table_Field *) x));
+}
+static swig_type_info _swigt__p_BYTE = {"_p_BYTE", "BYTE *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Array = {"_p_CSG_Array", "CSG_Array *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Buffer = {"_p_CSG_Buffer", "CSG_Buffer *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Bytes = {"_p_CSG_Bytes", "CSG_Bytes *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Bytes_Array = {"_p_CSG_Bytes_Array", "CSG_Bytes_Array *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Class_Statistics = {"_p_CSG_Class_Statistics", "CSG_Class_Statistics *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Cluster_Analysis = {"_p_CSG_Cluster_Analysis", "CSG_Cluster_Analysis *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Colors = {"_p_CSG_Colors", "CSG_Colors *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Data_Object = {"_p_CSG_Data_Object", "CSG_Data_Object *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Distance_Weighting = {"_p_CSG_Distance_Weighting", "CSG_Distance_Weighting *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_File = {"_p_CSG_File", "CSG_File *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Formula = {"_p_CSG_Formula", "CSG_Formula *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Formula_TSG_Formula_Item = {"_p_CSG_Formula_TSG_Formula_Item", "CSG_Formula_TSG_Formula_Item *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Grid = {"_p_CSG_Grid", "CSG_Grid *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Grid_Cell_Addressor = {"_p_CSG_Grid_Cell_Addressor", "CSG_Grid_Cell_Addressor *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Grid_Pyramid = {"_p_CSG_Grid_Pyramid", "CSG_Grid_Pyramid *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Grid_Radius = {"_p_CSG_Grid_Radius", "CSG_Grid_Radius *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Grid_Stack = {"_p_CSG_Grid_Stack", "CSG_Grid_Stack *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Grid_System = {"_p_CSG_Grid_System", "CSG_Grid_System *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Index = {"_p_CSG_Index", "CSG_Index *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Matrix = {"_p_CSG_Matrix", "CSG_Matrix *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_MetaData = {"_p_CSG_MetaData", "CSG_MetaData *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Module = {"_p_CSG_Module", "CSG_Module *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Module_Grid = {"_p_CSG_Module_Grid", "CSG_Module_Grid *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Module_Grid_Interactive = {"_p_CSG_Module_Grid_Interactive", "CSG_Module_Grid_Interactive *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Module_Interactive = {"_p_CSG_Module_Interactive", "CSG_Module_Interactive *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Module_Interactive_Base = {"_p_CSG_Module_Interactive_Base", "CSG_Module_Interactive_Base *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Module_Library = {"_p_CSG_Module_Library", "CSG_Module_Library *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Module_Library_Interface = {"_p_CSG_Module_Library_Interface", "CSG_Module_Library_Interface *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_PRQuadTree = {"_p_CSG_PRQuadTree", "CSG_PRQuadTree *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_PRQuadTree_Item = {"_p_CSG_PRQuadTree_Item", "CSG_PRQuadTree_Item *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_PRQuadTree_Leaf = {"_p_CSG_PRQuadTree_Leaf", "CSG_PRQuadTree_Leaf *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_PRQuadTree_Node = {"_p_CSG_PRQuadTree_Node", "CSG_PRQuadTree_Node *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter = {"_p_CSG_Parameter", "CSG_Parameter *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Bool = {"_p_CSG_Parameter_Bool", "CSG_Parameter_Bool *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Choice = {"_p_CSG_Parameter_Choice", "CSG_Parameter_Choice *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Color = {"_p_CSG_Parameter_Color", "CSG_Parameter_Color *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Colors = {"_p_CSG_Parameter_Colors", "CSG_Parameter_Colors *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Data = {"_p_CSG_Parameter_Data", "CSG_Parameter_Data *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Data_Object = {"_p_CSG_Parameter_Data_Object", "CSG_Parameter_Data_Object *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Data_Object_Output = {"_p_CSG_Parameter_Data_Object_Output", "CSG_Parameter_Data_Object_Output *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Degree = {"_p_CSG_Parameter_Degree", "CSG_Parameter_Degree *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Double = {"_p_CSG_Parameter_Double", "CSG_Parameter_Double *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_File_Name = {"_p_CSG_Parameter_File_Name", "CSG_Parameter_File_Name *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Fixed_Table = {"_p_CSG_Parameter_Fixed_Table", "CSG_Parameter_Fixed_Table *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Font = {"_p_CSG_Parameter_Font", "CSG_Parameter_Font *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Grid = {"_p_CSG_Parameter_Grid", "CSG_Parameter_Grid *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Grid_List = {"_p_CSG_Parameter_Grid_List", "CSG_Parameter_Grid_List *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Grid_System = {"_p_CSG_Parameter_Grid_System", "CSG_Parameter_Grid_System *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Int = {"_p_CSG_Parameter_Int", "CSG_Parameter_Int *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_List = {"_p_CSG_Parameter_List", "CSG_Parameter_List *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Node = {"_p_CSG_Parameter_Node", "CSG_Parameter_Node *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Parameters = {"_p_CSG_Parameter_Parameters", "CSG_Parameter_Parameters *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_PointCloud = {"_p_CSG_Parameter_PointCloud", "CSG_Parameter_PointCloud *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_PointCloud_List = {"_p_CSG_Parameter_PointCloud_List", "CSG_Parameter_PointCloud_List *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Range = {"_p_CSG_Parameter_Range", "CSG_Parameter_Range *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Shapes = {"_p_CSG_Parameter_Shapes", "CSG_Parameter_Shapes *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Shapes_List = {"_p_CSG_Parameter_Shapes_List", "CSG_Parameter_Shapes_List *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_String = {"_p_CSG_Parameter_String", "CSG_Parameter_String *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_TIN = {"_p_CSG_Parameter_TIN", "CSG_Parameter_TIN *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_TIN_List = {"_p_CSG_Parameter_TIN_List", "CSG_Parameter_TIN_List *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Table = {"_p_CSG_Parameter_Table", "CSG_Parameter_Table *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Table_Field = {"_p_CSG_Parameter_Table_Field", "CSG_Parameter_Table_Field *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Table_List = {"_p_CSG_Parameter_Table_List", "CSG_Parameter_Table_List *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Text = {"_p_CSG_Parameter_Text", "CSG_Parameter_Text *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameter_Value = {"_p_CSG_Parameter_Value", "CSG_Parameter_Value *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameters = {"_p_CSG_Parameters", "CSG_Parameters *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Parameters_Grid_Target = {"_p_CSG_Parameters_Grid_Target", "CSG_Parameters_Grid_Target *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Point = {"_p_CSG_Point", "CSG_Point *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_PointCloud = {"_p_CSG_PointCloud", "CSG_PointCloud *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Point_Z = {"_p_CSG_Point_Z", "CSG_Point_Z *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Point_ZM = {"_p_CSG_Point_ZM", "CSG_Point_ZM *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Points = {"_p_CSG_Points", "CSG_Points *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Points_Int = {"_p_CSG_Points_Int", "CSG_Points_Int *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Points_Z = {"_p_CSG_Points_Z", "CSG_Points_Z *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Projection = {"_p_CSG_Projection", "CSG_Projection *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Projections = {"_p_CSG_Projections", "CSG_Projections *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Rect = {"_p_CSG_Rect", "CSG_Rect *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Rects = {"_p_CSG_Rects", "CSG_Rects *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Regression = {"_p_CSG_Regression", "CSG_Regression *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Regression_Multiple = {"_p_CSG_Regression_Multiple", "CSG_Regression_Multiple *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shape = {"_p_CSG_Shape", "CSG_Shape *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shape_Line = {"_p_CSG_Shape_Line", "CSG_Shape_Line *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shape_Part = {"_p_CSG_Shape_Part", "CSG_Shape_Part *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shape_Part_Z = {"_p_CSG_Shape_Part_Z", "CSG_Shape_Part_Z *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shape_Part_ZM = {"_p_CSG_Shape_Part_ZM", "CSG_Shape_Part_ZM *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shape_Point = {"_p_CSG_Shape_Point", "CSG_Shape_Point *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shape_Point_Z = {"_p_CSG_Shape_Point_Z", "CSG_Shape_Point_Z *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shape_Point_ZM = {"_p_CSG_Shape_Point_ZM", "CSG_Shape_Point_ZM *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shape_Points = {"_p_CSG_Shape_Points", "CSG_Shape_Points *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shape_Polygon = {"_p_CSG_Shape_Polygon", "CSG_Shape_Polygon *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shape_Polygon_Part = {"_p_CSG_Shape_Polygon_Part", "CSG_Shape_Polygon_Part *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shapes = {"_p_CSG_Shapes", "CSG_Shapes *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shapes_OGIS_Converter = {"_p_CSG_Shapes_OGIS_Converter", "CSG_Shapes_OGIS_Converter *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Shapes_Search = {"_p_CSG_Shapes_Search", "CSG_Shapes_Search *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Simple_Statistics = {"_p_CSG_Simple_Statistics", "CSG_Simple_Statistics *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Spline = {"_p_CSG_Spline", "CSG_Spline *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Stack = {"_p_CSG_Stack", "CSG_Stack *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_String = {"_p_CSG_String", "CSG_String *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Strings = {"_p_CSG_Strings", "CSG_Strings *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_TIN = {"_p_CSG_TIN", "CSG_TIN *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_TIN_Edge = {"_p_CSG_TIN_Edge", "CSG_TIN_Edge *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_TIN_Node = {"_p_CSG_TIN_Node", "CSG_TIN_Node *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_TIN_Triangle = {"_p_CSG_TIN_Triangle", "CSG_TIN_Triangle *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Table = {"_p_CSG_Table", "CSG_Table *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Table_Record = {"_p_CSG_Table_Record", "CSG_Table_Record *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Table_Value = {"_p_CSG_Table_Value", "CSG_Table_Value *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Table_Value_Binary = {"_p_CSG_Table_Value_Binary", "CSG_Table_Value_Binary *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Table_Value_Date = {"_p_CSG_Table_Value_Date", "CSG_Table_Value_Date *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Table_Value_Double = {"_p_CSG_Table_Value_Double", "CSG_Table_Value_Double *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Table_Value_Int = {"_p_CSG_Table_Value_Int", "CSG_Table_Value_Int *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Table_Value_String = {"_p_CSG_Table_Value_String", "CSG_Table_Value_String *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Thin_Plate_Spline = {"_p_CSG_Thin_Plate_Spline", "CSG_Thin_Plate_Spline *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Translator = {"_p_CSG_Translator", "CSG_Translator *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Trend = {"_p_CSG_Trend", "CSG_Trend *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_UI_Parameter = {"_p_CSG_UI_Parameter", "CSG_UI_Parameter *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CSG_Vector = {"_p_CSG_Vector", "CSG_Vector *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_DWORD = {"_p_DWORD", "DWORD *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Array_Growth = {"_p_ESG_Array_Growth", "enum ESG_Array_Growth *|TSG_Array_Growth *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Data_Object_Type = {"_p_ESG_Data_Object_Type", "enum ESG_Data_Object_Type *|TSG_Data_Object_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Data_Type = {"_p_ESG_Data_Type", "enum ESG_Data_Type *|TSG_Data_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Distance_Weighting = {"_p_ESG_Distance_Weighting", "enum ESG_Distance_Weighting *|TSG_Distance_Weighting *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Grid_File_Format = {"_p_ESG_Grid_File_Format", "enum ESG_Grid_File_Format *|TSG_Grid_File_Format *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Grid_File_Key = {"_p_ESG_Grid_File_Key", "enum ESG_Grid_File_Key *|TSG_Grid_File_Key *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Grid_Interpolation = {"_p_ESG_Grid_Interpolation", "enum ESG_Grid_Interpolation *|TSG_Grid_Interpolation *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Grid_Memory_Type = {"_p_ESG_Grid_Memory_Type", "enum ESG_Grid_Memory_Type *|TSG_Grid_Memory_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Grid_Operation = {"_p_ESG_Grid_Operation", "enum ESG_Grid_Operation *|TSG_Grid_Operation *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Grid_Pyramid_Generalisation = {"_p_ESG_Grid_Pyramid_Generalisation", "enum ESG_Grid_Pyramid_Generalisation *|TSG_Grid_Pyramid_Generalisation *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Grid_Pyramid_Grow_Type = {"_p_ESG_Grid_Pyramid_Grow_Type", "enum ESG_Grid_Pyramid_Grow_Type *|TSG_Grid_Pyramid_Grow_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Intersection = {"_p_ESG_Intersection", "enum ESG_Intersection *|TSG_Intersection *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_MLB_Info = {"_p_ESG_MLB_Info", "enum ESG_MLB_Info *|TSG_MLB_Info *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Module_Error = {"_p_ESG_Module_Error", "enum ESG_Module_Error *|TSG_Module_Error *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Module_Interactive_DragMode = {"_p_ESG_Module_Interactive_DragMode", "enum ESG_Module_Interactive_DragMode *|TSG_Module_Interactive_DragMode *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Module_Interactive_Mode = {"_p_ESG_Module_Interactive_Mode", "enum ESG_Module_Interactive_Mode *|TSG_Module_Interactive_Mode *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Module_Type = {"_p_ESG_Module_Type", "enum ESG_Module_Type *|TSG_Module_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Parameter_Type = {"_p_ESG_Parameter_Type", "enum ESG_Parameter_Type *|TSG_Parameter_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Point_Type = {"_p_ESG_Point_Type", "enum ESG_Point_Type *|TSG_Point_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Projection_Format = {"_p_ESG_Projection_Format", "enum ESG_Projection_Format *|TSG_Projection_Format *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Projection_Type = {"_p_ESG_Projection_Type", "enum ESG_Projection_Type *|TSG_Projection_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Regression_Type = {"_p_ESG_Regression_Type", "enum ESG_Regression_Type *|TSG_Regression_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Shape_Copy_Mode = {"_p_ESG_Shape_Copy_Mode", "enum ESG_Shape_Copy_Mode *|TSG_ADD_Shape_Copy_Mode *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Shape_Type = {"_p_ESG_Shape_Type", "enum ESG_Shape_Type *|TSG_Shape_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Table_FileType = {"_p_ESG_Table_FileType", "enum ESG_Table_FileType *|TSG_Table_File_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Table_Index_Order = {"_p_ESG_Table_Index_Order", "enum ESG_Table_Index_Order *|TSG_Table_Index_Order *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_UI_Callback_ID = {"_p_ESG_UI_Callback_ID", "enum ESG_UI_Callback_ID *|TSG_UI_Callback_ID *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_UI_DataObject_Update = {"_p_ESG_UI_DataObject_Update", "enum ESG_UI_DataObject_Update *|TSG_UI_DataObject_Update *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_UI_MSG_STYLE = {"_p_ESG_UI_MSG_STYLE", "enum ESG_UI_MSG_STYLE *|TSG_UI_MSG_STYLE *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_ESG_Vertex_Type = {"_p_ESG_Vertex_Type", "enum ESG_Vertex_Type *|TSG_Vertex_Type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_FILE = {"_p_FILE", "FILE *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_SSG_Point = {"_p_SSG_Point", "SSG_Point *|TSG_Point *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_SSG_Point_Int = {"_p_SSG_Point_Int", "SSG_Point_Int *|TSG_Point_Int *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_SSG_Point_Z = {"_p_SSG_Point_Z", "SSG_Point_Z *|TSG_Point_Z *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_SSG_Point_ZM = {"_p_SSG_Point_ZM", "SSG_Point_ZM *|TSG_Point_ZM *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_SSG_Rect = {"_p_SSG_Rect", "SSG_Rect *|TSG_Rect *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_WORD = {"_p_WORD", "WORD *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_a_32__wchar_t = {"_p_a_32__wchar_t", "wchar_t (*)[32]", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_double = {"_p_double", "double *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_double__double = {"_p_f_double__double", "TSG_PFNC_Formula_1|double (*)(double)", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_enum_ESG_UI_Callback_ID_r_CSG_UI_Parameter_r_CSG_UI_Parameter__int = {"_p_f_enum_ESG_UI_Callback_ID_r_CSG_UI_Parameter_r_CSG_UI_Parameter__int", "int (*)(enum ESG_UI_Callback_ID,CSG_UI_Parameter &,CSG_UI_Parameter &)|TSG_PFNC_UI_Callback", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_p_CSG_Parameter__int = {"_p_f_p_CSG_Parameter__int", "int (*)(CSG_Parameter *)|TSG_PFNC_Parameter_Changed", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_f_q_const__int_q_const__int__int = {"_p_f_q_const__int_q_const__int__int", "int (*)(int const,int const)|TSG_PFNC_Compare", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_int = {"_p_int", "int *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_long = {"_p_long", "long *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_double = {"_p_p_double", "double **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_void = {"_p_p_void", "void **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_wchar_t = {"_p_p_wchar_t", "wchar_t **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_wchar_t = {"_p_wchar_t", "wchar_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_wxFont = {"_p_wxFont", "wxFont *", 0, 0, (void*)0, 0};
+
+static swig_type_info *swig_type_initial[] = {
+  &_swigt__p_BYTE,
+  &_swigt__p_CSG_Array,
+  &_swigt__p_CSG_Buffer,
+  &_swigt__p_CSG_Bytes,
+  &_swigt__p_CSG_Bytes_Array,
+  &_swigt__p_CSG_Class_Statistics,
+  &_swigt__p_CSG_Cluster_Analysis,
+  &_swigt__p_CSG_Colors,
+  &_swigt__p_CSG_Data_Object,
+  &_swigt__p_CSG_Distance_Weighting,
+  &_swigt__p_CSG_File,
+  &_swigt__p_CSG_Formula,
+  &_swigt__p_CSG_Formula_TSG_Formula_Item,
+  &_swigt__p_CSG_Grid,
+  &_swigt__p_CSG_Grid_Cell_Addressor,
+  &_swigt__p_CSG_Grid_Pyramid,
+  &_swigt__p_CSG_Grid_Radius,
+  &_swigt__p_CSG_Grid_Stack,
+  &_swigt__p_CSG_Grid_System,
+  &_swigt__p_CSG_Index,
+  &_swigt__p_CSG_Matrix,
+  &_swigt__p_CSG_MetaData,
+  &_swigt__p_CSG_Module,
+  &_swigt__p_CSG_Module_Grid,
+  &_swigt__p_CSG_Module_Grid_Interactive,
+  &_swigt__p_CSG_Module_Interactive,
+  &_swigt__p_CSG_Module_Interactive_Base,
+  &_swigt__p_CSG_Module_Library,
+  &_swigt__p_CSG_Module_Library_Interface,
+  &_swigt__p_CSG_PRQuadTree,
+  &_swigt__p_CSG_PRQuadTree_Item,
+  &_swigt__p_CSG_PRQuadTree_Leaf,
+  &_swigt__p_CSG_PRQuadTree_Node,
+  &_swigt__p_CSG_Parameter,
+  &_swigt__p_CSG_Parameter_Bool,
+  &_swigt__p_CSG_Parameter_Choice,
+  &_swigt__p_CSG_Parameter_Color,
+  &_swigt__p_CSG_Parameter_Colors,
+  &_swigt__p_CSG_Parameter_Data,
+  &_swigt__p_CSG_Parameter_Data_Object,
+  &_swigt__p_CSG_Parameter_Data_Object_Output,
+  &_swigt__p_CSG_Parameter_Degree,
+  &_swigt__p_CSG_Parameter_Double,
+  &_swigt__p_CSG_Parameter_File_Name,
+  &_swigt__p_CSG_Parameter_Fixed_Table,
+  &_swigt__p_CSG_Parameter_Font,
+  &_swigt__p_CSG_Parameter_Grid,
+  &_swigt__p_CSG_Parameter_Grid_List,
+  &_swigt__p_CSG_Parameter_Grid_System,
+  &_swigt__p_CSG_Parameter_Int,
+  &_swigt__p_CSG_Parameter_List,
+  &_swigt__p_CSG_Parameter_Node,
+  &_swigt__p_CSG_Parameter_Parameters,
+  &_swigt__p_CSG_Parameter_PointCloud,
+  &_swigt__p_CSG_Parameter_PointCloud_List,
+  &_swigt__p_CSG_Parameter_Range,
+  &_swigt__p_CSG_Parameter_Shapes,
+  &_swigt__p_CSG_Parameter_Shapes_List,
+  &_swigt__p_CSG_Parameter_String,
+  &_swigt__p_CSG_Parameter_TIN,
+  &_swigt__p_CSG_Parameter_TIN_List,
+  &_swigt__p_CSG_Parameter_Table,
+  &_swigt__p_CSG_Parameter_Table_Field,
+  &_swigt__p_CSG_Parameter_Table_List,
+  &_swigt__p_CSG_Parameter_Text,
+  &_swigt__p_CSG_Parameter_Value,
+  &_swigt__p_CSG_Parameters,
+  &_swigt__p_CSG_Parameters_Grid_Target,
+  &_swigt__p_CSG_Point,
+  &_swigt__p_CSG_PointCloud,
+  &_swigt__p_CSG_Point_Z,
+  &_swigt__p_CSG_Point_ZM,
+  &_swigt__p_CSG_Points,
+  &_swigt__p_CSG_Points_Int,
+  &_swigt__p_CSG_Points_Z,
+  &_swigt__p_CSG_Projection,
+  &_swigt__p_CSG_Projections,
+  &_swigt__p_CSG_Rect,
+  &_swigt__p_CSG_Rects,
+  &_swigt__p_CSG_Regression,
+  &_swigt__p_CSG_Regression_Multiple,
+  &_swigt__p_CSG_Shape,
+  &_swigt__p_CSG_Shape_Line,
+  &_swigt__p_CSG_Shape_Part,
+  &_swigt__p_CSG_Shape_Part_Z,
+  &_swigt__p_CSG_Shape_Part_ZM,
+  &_swigt__p_CSG_Shape_Point,
+  &_swigt__p_CSG_Shape_Point_Z,
+  &_swigt__p_CSG_Shape_Point_ZM,
+  &_swigt__p_CSG_Shape_Points,
+  &_swigt__p_CSG_Shape_Polygon,
+  &_swigt__p_CSG_Shape_Polygon_Part,
+  &_swigt__p_CSG_Shapes,
+  &_swigt__p_CSG_Shapes_OGIS_Converter,
+  &_swigt__p_CSG_Shapes_Search,
+  &_swigt__p_CSG_Simple_Statistics,
+  &_swigt__p_CSG_Spline,
+  &_swigt__p_CSG_Stack,
+  &_swigt__p_CSG_String,
+  &_swigt__p_CSG_Strings,
+  &_swigt__p_CSG_TIN,
+  &_swigt__p_CSG_TIN_Edge,
+  &_swigt__p_CSG_TIN_Node,
+  &_swigt__p_CSG_TIN_Triangle,
+  &_swigt__p_CSG_Table,
+  &_swigt__p_CSG_Table_Record,
+  &_swigt__p_CSG_Table_Value,
+  &_swigt__p_CSG_Table_Value_Binary,
+  &_swigt__p_CSG_Table_Value_Date,
+  &_swigt__p_CSG_Table_Value_Double,
+  &_swigt__p_CSG_Table_Value_Int,
+  &_swigt__p_CSG_Table_Value_String,
+  &_swigt__p_CSG_Thin_Plate_Spline,
+  &_swigt__p_CSG_Translator,
+  &_swigt__p_CSG_Trend,
+  &_swigt__p_CSG_UI_Parameter,
+  &_swigt__p_CSG_Vector,
+  &_swigt__p_DWORD,
+  &_swigt__p_ESG_Array_Growth,
+  &_swigt__p_ESG_Data_Object_Type,
+  &_swigt__p_ESG_Data_Type,
+  &_swigt__p_ESG_Distance_Weighting,
+  &_swigt__p_ESG_Grid_File_Format,
+  &_swigt__p_ESG_Grid_File_Key,
+  &_swigt__p_ESG_Grid_Interpolation,
+  &_swigt__p_ESG_Grid_Memory_Type,
+  &_swigt__p_ESG_Grid_Operation,
+  &_swigt__p_ESG_Grid_Pyramid_Generalisation,
+  &_swigt__p_ESG_Grid_Pyramid_Grow_Type,
+  &_swigt__p_ESG_Intersection,
+  &_swigt__p_ESG_MLB_Info,
+  &_swigt__p_ESG_Module_Error,
+  &_swigt__p_ESG_Module_Interactive_DragMode,
+  &_swigt__p_ESG_Module_Interactive_Mode,
+  &_swigt__p_ESG_Module_Type,
+  &_swigt__p_ESG_Parameter_Type,
+  &_swigt__p_ESG_Point_Type,
+  &_swigt__p_ESG_Projection_Format,
+  &_swigt__p_ESG_Projection_Type,
+  &_swigt__p_ESG_Regression_Type,
+  &_swigt__p_ESG_Shape_Copy_Mode,
+  &_swigt__p_ESG_Shape_Type,
+  &_swigt__p_ESG_Table_FileType,
+  &_swigt__p_ESG_Table_Index_Order,
+  &_swigt__p_ESG_UI_Callback_ID,
+  &_swigt__p_ESG_UI_DataObject_Update,
+  &_swigt__p_ESG_UI_MSG_STYLE,
+  &_swigt__p_ESG_Vertex_Type,
+  &_swigt__p_FILE,
+  &_swigt__p_SSG_Point,
+  &_swigt__p_SSG_Point_Int,
+  &_swigt__p_SSG_Point_Z,
+  &_swigt__p_SSG_Point_ZM,
+  &_swigt__p_SSG_Rect,
+  &_swigt__p_WORD,
+  &_swigt__p_a_32__wchar_t,
+  &_swigt__p_char,
+  &_swigt__p_double,
+  &_swigt__p_f_double__double,
+  &_swigt__p_f_enum_ESG_UI_Callback_ID_r_CSG_UI_Parameter_r_CSG_UI_Parameter__int,
+  &_swigt__p_f_p_CSG_Parameter__int,
+  &_swigt__p_f_q_const__int_q_const__int__int,
+  &_swigt__p_int,
+  &_swigt__p_long,
+  &_swigt__p_p_double,
+  &_swigt__p_p_void,
+  &_swigt__p_p_wchar_t,
+  &_swigt__p_void,
+  &_swigt__p_wchar_t,
+  &_swigt__p_wxFont,
+};
+
+static swig_cast_info _swigc__p_BYTE[] = {  {&_swigt__p_BYTE, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Array[] = {  {&_swigt__p_CSG_Array, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Buffer[] = {  {&_swigt__p_CSG_Buffer, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Bytes[] = {  {&_swigt__p_CSG_Bytes, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Bytes_Array[] = {  {&_swigt__p_CSG_Bytes_Array, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Class_Statistics[] = {  {&_swigt__p_CSG_Class_Statistics, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Cluster_Analysis[] = {  {&_swigt__p_CSG_Cluster_Analysis, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Colors[] = {  {&_swigt__p_CSG_Colors, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Data_Object[] = {  {&_swigt__p_CSG_Shapes, _p_CSG_ShapesTo_p_CSG_Data_Object, 0, 0},  {&_swigt__p_CSG_PointCloud, _p_CSG_PointCloudTo_p_CSG_Data_Object, 0, 0},  {&_swigt__p_CSG_Grid, _p_CSG_GridTo_p_CSG_Data_Object, 0, 0},  {&_swigt__p_CSG_Data_Object, 0, 0, 0},  {&_swigt__p_CSG_TIN, _p_CSG_TINTo_p_CSG_Data_Object, 0, 0},  {&_swigt__p_CSG_Table, _p_CSG_TableTo_p_CSG_Data_Object, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Distance_Weighting[] = {  {&_swigt__p_CSG_Distance_Weighting, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_File[] = {  {&_swigt__p_CSG_File, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Formula[] = {  {&_swigt__p_CSG_Formula, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Formula_TSG_Formula_Item[] = {  {&_swigt__p_CSG_Formula_TSG_Formula_Item, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Grid[] = {  {&_swigt__p_CSG_Grid, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Grid_Cell_Addressor[] = {  {&_swigt__p_CSG_Grid_Cell_Addressor, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Grid_Pyramid[] = {  {&_swigt__p_CSG_Grid_Pyramid, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Grid_Radius[] = {  {&_swigt__p_CSG_Grid_Radius, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Grid_Stack[] = {  {&_swigt__p_CSG_Grid_Stack, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Grid_System[] = {  {&_swigt__p_CSG_Grid_System, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Index[] = {  {&_swigt__p_CSG_Index, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Matrix[] = {  {&_swigt__p_CSG_Matrix, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_MetaData[] = {  {&_swigt__p_CSG_MetaData, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Module[] = {  {&_swigt__p_CSG_Module, 0, 0, 0},  {&_swigt__p_CSG_Module_Interactive, _p_CSG_Module_InteractiveTo_p_CSG_Module, 0, 0},  {&_swigt__p_CSG_Module_Grid_Interactive, _p_CSG_Module_Grid_InteractiveTo_p_CSG_Module, 0, 0},  {&_swigt__p_CSG_Module_Grid, _p_CSG_Module_GridTo_p_CSG_Module, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Module_Grid[] = {  {&_swigt__p_CSG_Module_Grid_Interactive, _p_CSG_Module_Grid_InteractiveTo_p_CSG_Module_Grid, 0, 0},  {&_swigt__p_CSG_Module_Grid, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Module_Grid_Interactive[] = {  {&_swigt__p_CSG_Module_Grid_Interactive, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Module_Interactive[] = {  {&_swigt__p_CSG_Module_Interactive, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Module_Interactive_Base[] = {  {&_swigt__p_CSG_Module_Interactive_Base, 0, 0, 0},  {&_swigt__p_CSG_Module_Interactive, _p_CSG_Module_InteractiveTo_p_CSG_Module_Interactive_Base, 0, 0},  {&_swigt__p_CSG_Module_Grid_Interactive, _p_CSG_Module_Grid_InteractiveTo_p_CSG_Module_Interactive_Base, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Module_Library[] = {  {&_swigt__p_CSG_Module_Library, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Module_Library_Interface[] = {  {&_swigt__p_CSG_Module_Library_Interface, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_PRQuadTree[] = {  {&_swigt__p_CSG_PRQuadTree, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_PRQuadTree_Item[] = {  {&_swigt__p_CSG_PRQuadTree_Node, _p_CSG_PRQuadTree_NodeTo_p_CSG_PRQuadTree_Item, 0, 0},  {&_swigt__p_CSG_PRQuadTree_Leaf, _p_CSG_PRQuadTree_LeafTo_p_CSG_PRQuadTree_Item, 0, 0},  {&_swigt__p_CSG_PRQuadTree_Item, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_PRQuadTree_Leaf[] = {  {&_swigt__p_CSG_PRQuadTree_Leaf, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_PRQuadTree_Node[] = {  {&_swigt__p_CSG_PRQuadTree_Node, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter[] = {  {&_swigt__p_CSG_Parameter, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Bool[] = {  {&_swigt__p_CSG_Parameter_Bool, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Choice[] = {  {&_swigt__p_CSG_Parameter_Choice, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Color[] = {  {&_swigt__p_CSG_Parameter_Color, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Colors[] = {  {&_swigt__p_CSG_Parameter_Colors, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Data[] = {  {&_swigt__p_CSG_Parameter_Int, _p_CSG_Parameter_IntTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_File_Name, _p_CSG_Parameter_File_NameTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Table_List, _p_CSG_Parameter_Table_ListTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_TIN_List, _p_CSG_Parameter_TIN_ListTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Node, _p_CSG_Parameter_NodeTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Grid_List, _p_CSG_Parameter_Grid_ListTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_PointCloud_List, _p_CSG_Parameter_PointCloud_ListTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Parameters, _p_CSG_Parameter_ParametersTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Colors, _p_CSG_Parameter_ColorsTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Table_Field, _p_CSG_Parameter_Table_FieldTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Table, _p_CSG_Parameter_TableTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Fixed_Table, _p_CSG_Parameter_Fixed_TableTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_String, _p_CSG_Parameter_StringTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Data, 0, 0, 0},  {&_swigt__p_CSG_Parameter_Text, _p_CSG_Parameter_TextTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Data_Object_Output, _p_CSG_Parameter_Data_Object_OutputTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Grid, _p_CSG_Parameter_GridTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Shapes, _p_CSG_Parameter_ShapesTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Color, _p_CSG_Parameter_ColorTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Value, _p_CSG_Parameter_ValueTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Font, _p_CSG_Parameter_FontTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Grid_System, _p_CSG_Parameter_Grid_SystemTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_PointCloud, _p_CSG_Parameter_PointCloudTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Degree, _p_CSG_Parameter_DegreeTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_TIN, _p_CSG_Parameter_TINTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Choice, _p_CSG_Parameter_ChoiceTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_List, _p_CSG_Parameter_ListTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Data_Object, _p_CSG_Parameter_Data_ObjectTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Shapes_List, _p_CSG_Parameter_Shapes_ListTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Bool, _p_CSG_Parameter_BoolTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Range, _p_CSG_Parameter_RangeTo_p_CSG_Parameter_Data, 0, 0},  {&_swigt__p_CSG_Parameter_Double, _p_CSG_Parameter_DoubleTo_p_CSG_Parameter_Data, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Data_Object[] = {  {&_swigt__p_CSG_Parameter_Shapes, _p_CSG_Parameter_ShapesTo_p_CSG_Parameter_Data_Object, 0, 0},  {&_swigt__p_CSG_Parameter_TIN, _p_CSG_Parameter_TINTo_p_CSG_Parameter_Data_Object, 0, 0},  {&_swigt__p_CSG_Parameter_Data_Object_Output, _p_CSG_Parameter_Data_Object_OutputTo_p_CSG_Parameter_Data_Object, 0, 0},  {&_swigt__p_CSG_Parameter_Grid, _p_CSG_Parameter_GridTo_p_CSG_Parameter_Data_Object, 0, 0},  {&_swigt__p_CSG_Parameter_PointCloud, _p_CSG_Parameter_PointCloudTo_p_CSG_Parameter_Data_Object, 0, 0},  {&_swigt__p_CSG_Parameter_Data_Object, 0, 0, 0},  {&_swigt__p_CSG_Parameter_Table, _p_CSG_Parameter_TableTo_p_CSG_Parameter_Data_Object, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Data_Object_Output[] = {  {&_swigt__p_CSG_Parameter_Data_Object_Output, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Degree[] = {  {&_swigt__p_CSG_Parameter_Degree, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Double[] = {  {&_swigt__p_CSG_Parameter_Degree, _p_CSG_Parameter_DegreeTo_p_CSG_Parameter_Double, 0, 0},  {&_swigt__p_CSG_Parameter_Double, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_File_Name[] = {  {&_swigt__p_CSG_Parameter_File_Name, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Fixed_Table[] = {  {&_swigt__p_CSG_Parameter_Fixed_Table, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Font[] = {  {&_swigt__p_CSG_Parameter_Font, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Grid[] = {  {&_swigt__p_CSG_Parameter_Grid, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Grid_List[] = {  {&_swigt__p_CSG_Parameter_Grid_List, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Grid_System[] = {  {&_swigt__p_CSG_Parameter_Grid_System, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Int[] = {  {&_swigt__p_CSG_Parameter_Choice, _p_CSG_Parameter_ChoiceTo_p_CSG_Parameter_Int, 0, 0},  {&_swigt__p_CSG_Parameter_Int, 0, 0, 0},  {&_swigt__p_CSG_Parameter_Color, _p_CSG_Parameter_ColorTo_p_CSG_Parameter_Int, 0, 0},  {&_swigt__p_CSG_Parameter_Table_Field, _p_CSG_Parameter_Table_FieldTo_p_CSG_Parameter_Int, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_List[] = {  {&_swigt__p_CSG_Parameter_Table_List, _p_CSG_Parameter_Table_ListTo_p_CSG_Parameter_List, 0, 0},  {&_swigt__p_CSG_Parameter_List, 0, 0, 0},  {&_swigt__p_CSG_Parameter_Grid_List, _p_CSG_Parameter_Grid_ListTo_p_CSG_Parameter_List, 0, 0},  {&_swigt__p_CSG_Parameter_TIN_List, _p_CSG_Parameter_TIN_ListTo_p_CSG_Parameter_List, 0, 0},  {&_swigt__p_CSG_Parameter_PointCloud_List, _p_CSG_Parameter_PointCloud_ListTo_p_CSG_Parameter_List, 0, 0},  {&_swigt__p_CSG_Parameter_Shapes_List, _p_CSG_Parameter_Shapes_ListTo_p_CSG_Parameter_List, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Node[] = {  {&_swigt__p_CSG_Parameter_Node, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Parameters[] = {  {&_swigt__p_CSG_Parameter_Parameters, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_PointCloud[] = {  {&_swigt__p_CSG_Parameter_PointCloud, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_PointCloud_List[] = {  {&_swigt__p_CSG_Parameter_PointCloud_List, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Range[] = {  {&_swigt__p_CSG_Parameter_Range, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Shapes[] = {  {&_swigt__p_CSG_Parameter_Shapes, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Shapes_List[] = {  {&_swigt__p_CSG_Parameter_Shapes_List, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_String[] = {  {&_swigt__p_CSG_Parameter_Text, _p_CSG_Parameter_TextTo_p_CSG_Parameter_String, 0, 0},  {&_swigt__p_CSG_Parameter_File_Name, _p_CSG_Parameter_File_NameTo_p_CSG_Parameter_String, 0, 0},  {&_swigt__p_CSG_Parameter_String, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_TIN[] = {  {&_swigt__p_CSG_Parameter_TIN, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_TIN_List[] = {  {&_swigt__p_CSG_Parameter_TIN_List, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Table[] = {  {&_swigt__p_CSG_Parameter_Table, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Table_Field[] = {  {&_swigt__p_CSG_Parameter_Table_Field, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Table_List[] = {  {&_swigt__p_CSG_Parameter_Table_List, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Text[] = {  {&_swigt__p_CSG_Parameter_Text, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameter_Value[] = {  {&_swigt__p_CSG_Parameter_Value, 0, 0, 0},  {&_swigt__p_CSG_Parameter_Choice, _p_CSG_Parameter_ChoiceTo_p_CSG_Parameter_Value, 0, 0},  {&_swigt__p_CSG_Parameter_Degree, _p_CSG_Parameter_DegreeTo_p_CSG_Parameter_Value, 0, 0},  {&_swigt__p_CSG_Parameter_Int, _p_CSG_Parameter_IntTo_p_CSG_Parameter_Value, 0, 0},  {&_swigt__p_CSG_Parameter_Color, _p_CSG_Parameter_ColorTo_p_CSG_Parameter_Value, 0, 0},  {&_swigt__p_CSG_Parameter_Table_Field, _p_CSG_Parameter_Table_FieldTo_p_CSG_Parameter_Value, 0, 0},  {&_swigt__p_CSG_Parameter_Double, _p_CSG_Parameter_DoubleTo_p_CSG_Parameter_Value, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameters[] = {  {&_swigt__p_CSG_Parameters, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Parameters_Grid_Target[] = {  {&_swigt__p_CSG_Parameters_Grid_Target, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Point[] = {  {&_swigt__p_CSG_Point_Z, _p_CSG_Point_ZTo_p_CSG_Point, 0, 0},  {&_swigt__p_CSG_Point_ZM, _p_CSG_Point_ZMTo_p_CSG_Point, 0, 0},  {&_swigt__p_CSG_Point, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_PointCloud[] = {  {&_swigt__p_CSG_PointCloud, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Point_Z[] = {  {&_swigt__p_CSG_Point_Z, 0, 0, 0},  {&_swigt__p_CSG_Point_ZM, _p_CSG_Point_ZMTo_p_CSG_Point_Z, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Point_ZM[] = {  {&_swigt__p_CSG_Point_ZM, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Points[] = {  {&_swigt__p_CSG_Points, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Points_Int[] = {  {&_swigt__p_CSG_Points_Int, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Points_Z[] = {  {&_swigt__p_CSG_Points_Z, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Projection[] = {  {&_swigt__p_CSG_Projection, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Projections[] = {  {&_swigt__p_CSG_Projections, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Rect[] = {  {&_swigt__p_CSG_Rect, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Rects[] = {  {&_swigt__p_CSG_Rects, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Regression[] = {  {&_swigt__p_CSG_Regression, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Regression_Multiple[] = {  {&_swigt__p_CSG_Regression_Multiple, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shape[] = {  {&_swigt__p_CSG_Shape_Line, _p_CSG_Shape_LineTo_p_CSG_Shape, 0, 0},  {&_swigt__p_CSG_Shape_Polygon, _p_CSG_Shape_PolygonTo_p_CSG_Shape, 0, 0},  {&_swigt__p_CSG_Shape, 0, 0, 0},  {&_swigt__p_CSG_Shape_Points, _p_CSG_Shape_PointsTo_p_CSG_Shape, 0, 0},  {&_swigt__p_CSG_Shape_Point_Z, _p_CSG_Shape_Point_ZTo_p_CSG_Shape, 0, 0},  {&_swigt__p_CSG_Shape_Point_ZM, _p_CSG_Shape_Point_ZMTo_p_CSG_Shape, 0, 0},  {&_swigt__p_CSG_Shape_Point, _p_CSG_Shape_PointTo_p_CSG_Shape, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shape_Line[] = {  {&_swigt__p_CSG_Shape_Line, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shape_Part[] = {  {&_swigt__p_CSG_Shape_Polygon_Part, _p_CSG_Shape_Polygon_PartTo_p_CSG_Shape_Part, 0, 0},  {&_swigt__p_CSG_Shape_Part, 0, 0, 0},  {&_swigt__p_CSG_Shape_Part_Z, _p_CSG_Shape_Part_ZTo_p_CSG_Shape_Part, 0, 0},  {&_swigt__p_CSG_Shape_Part_ZM, _p_CSG_Shape_Part_ZMTo_p_CSG_Shape_Part, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shape_Part_Z[] = {  {&_swigt__p_CSG_Shape_Part_Z, 0, 0, 0},  {&_swigt__p_CSG_Shape_Part_ZM, _p_CSG_Shape_Part_ZMTo_p_CSG_Shape_Part_Z, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shape_Part_ZM[] = {  {&_swigt__p_CSG_Shape_Part_ZM, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shape_Point[] = {  {&_swigt__p_CSG_Shape_Point_Z, _p_CSG_Shape_Point_ZTo_p_CSG_Shape_Point, 0, 0},  {&_swigt__p_CSG_Shape_Point_ZM, _p_CSG_Shape_Point_ZMTo_p_CSG_Shape_Point, 0, 0},  {&_swigt__p_CSG_Shape_Point, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shape_Point_Z[] = {  {&_swigt__p_CSG_Shape_Point_Z, 0, 0, 0},  {&_swigt__p_CSG_Shape_Point_ZM, _p_CSG_Shape_Point_ZMTo_p_CSG_Shape_Point_Z, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shape_Point_ZM[] = {  {&_swigt__p_CSG_Shape_Point_ZM, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shape_Points[] = {  {&_swigt__p_CSG_Shape_Line, _p_CSG_Shape_LineTo_p_CSG_Shape_Points, 0, 0},  {&_swigt__p_CSG_Shape_Polygon, _p_CSG_Shape_PolygonTo_p_CSG_Shape_Points, 0, 0},  {&_swigt__p_CSG_Shape_Points, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shape_Polygon[] = {  {&_swigt__p_CSG_Shape_Polygon, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shape_Polygon_Part[] = {  {&_swigt__p_CSG_Shape_Polygon_Part, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shapes[] = {  {&_swigt__p_CSG_Shapes, 0, 0, 0},  {&_swigt__p_CSG_PointCloud, _p_CSG_PointCloudTo_p_CSG_Shapes, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shapes_OGIS_Converter[] = {  {&_swigt__p_CSG_Shapes_OGIS_Converter, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Shapes_Search[] = {  {&_swigt__p_CSG_Shapes_Search, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Simple_Statistics[] = {  {&_swigt__p_CSG_Simple_Statistics, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Spline[] = {  {&_swigt__p_CSG_Spline, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Stack[] = {  {&_swigt__p_CSG_Stack, 0, 0, 0},  {&_swigt__p_CSG_Grid_Stack, _p_CSG_Grid_StackTo_p_CSG_Stack, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_String[] = {  {&_swigt__p_CSG_String, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Strings[] = {  {&_swigt__p_CSG_Strings, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_TIN[] = {  {&_swigt__p_CSG_TIN, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_TIN_Edge[] = {  {&_swigt__p_CSG_TIN_Edge, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_TIN_Node[] = {  {&_swigt__p_CSG_TIN_Node, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_TIN_Triangle[] = {  {&_swigt__p_CSG_TIN_Triangle, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Table[] = {  {&_swigt__p_CSG_Shapes, _p_CSG_ShapesTo_p_CSG_Table, 0, 0},  {&_swigt__p_CSG_PointCloud, _p_CSG_PointCloudTo_p_CSG_Table, 0, 0},  {&_swigt__p_CSG_TIN, _p_CSG_TINTo_p_CSG_Table, 0, 0},  {&_swigt__p_CSG_Table, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Table_Record[] = {  {&_swigt__p_CSG_Shape_Line, _p_CSG_Shape_LineTo_p_CSG_Table_Record, 0, 0},  {&_swigt__p_CSG_Shape_Polygon, _p_CSG_Shape_PolygonTo_p_CSG_Table_Record, 0, 0},  {&_swigt__p_CSG_Shape, _p_CSG_ShapeTo_p_CSG_Table_Record, 0, 0},  {&_swigt__p_CSG_Table_Record, 0, 0, 0},  {&_swigt__p_CSG_Shape_Points, _p_CSG_Shape_PointsTo_p_CSG_Table_Record, 0, 0},  {&_swigt__p_CSG_Shape_Point_Z, _p_CSG_Shape_Point_ZTo_p_CSG_Table_Record, 0, 0},  {&_swigt__p_CSG_Shape_Point_ZM, _p_CSG_Shape_Point_ZMTo_p_CSG_Table_Record, 0, 0},  {&_swigt__p_CSG_Shape_Point, _p_CSG_Shape_PointTo_p_CSG_Table_Record, 0, 0},  {&_swigt__p_CSG_TIN_Node, _p_CSG_TIN_NodeTo_p_CSG_Table_Record, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Table_Value[] = {  {&_swigt__p_CSG_Table_Value_Binary, _p_CSG_Table_Value_BinaryTo_p_CSG_Table_Value, 0, 0},  {&_swigt__p_CSG_Table_Value_Double, _p_CSG_Table_Value_DoubleTo_p_CSG_Table_Value, 0, 0},  {&_swigt__p_CSG_Table_Value_String, _p_CSG_Table_Value_StringTo_p_CSG_Table_Value, 0, 0},  {&_swigt__p_CSG_Table_Value_Int, _p_CSG_Table_Value_IntTo_p_CSG_Table_Value, 0, 0},  {&_swigt__p_CSG_Table_Value, 0, 0, 0},  {&_swigt__p_CSG_Table_Value_Date, _p_CSG_Table_Value_DateTo_p_CSG_Table_Value, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Table_Value_Binary[] = {  {&_swigt__p_CSG_Table_Value_Binary, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Table_Value_Date[] = {  {&_swigt__p_CSG_Table_Value_Date, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Table_Value_Double[] = {  {&_swigt__p_CSG_Table_Value_Double, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Table_Value_Int[] = {  {&_swigt__p_CSG_Table_Value_Int, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Table_Value_String[] = {  {&_swigt__p_CSG_Table_Value_String, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Thin_Plate_Spline[] = {  {&_swigt__p_CSG_Thin_Plate_Spline, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Translator[] = {  {&_swigt__p_CSG_Translator, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Trend[] = {  {&_swigt__p_CSG_Trend, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_UI_Parameter[] = {  {&_swigt__p_CSG_UI_Parameter, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CSG_Vector[] = {  {&_swigt__p_CSG_Vector, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_DWORD[] = {  {&_swigt__p_DWORD, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Array_Growth[] = {  {&_swigt__p_ESG_Array_Growth, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Data_Object_Type[] = {  {&_swigt__p_ESG_Data_Object_Type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Data_Type[] = {  {&_swigt__p_ESG_Data_Type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Distance_Weighting[] = {  {&_swigt__p_ESG_Distance_Weighting, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Grid_File_Format[] = {  {&_swigt__p_ESG_Grid_File_Format, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Grid_File_Key[] = {  {&_swigt__p_ESG_Grid_File_Key, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Grid_Interpolation[] = {  {&_swigt__p_ESG_Grid_Interpolation, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Grid_Memory_Type[] = {  {&_swigt__p_ESG_Grid_Memory_Type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Grid_Operation[] = {  {&_swigt__p_ESG_Grid_Operation, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Grid_Pyramid_Generalisation[] = {  {&_swigt__p_ESG_Grid_Pyramid_Generalisation, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Grid_Pyramid_Grow_Type[] = {  {&_swigt__p_ESG_Grid_Pyramid_Grow_Type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Intersection[] = {  {&_swigt__p_ESG_Intersection, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_MLB_Info[] = {  {&_swigt__p_ESG_MLB_Info, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Module_Error[] = {  {&_swigt__p_ESG_Module_Error, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Module_Interactive_DragMode[] = {  {&_swigt__p_ESG_Module_Interactive_DragMode, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Module_Interactive_Mode[] = {  {&_swigt__p_ESG_Module_Interactive_Mode, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Module_Type[] = {  {&_swigt__p_ESG_Module_Type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Parameter_Type[] = {  {&_swigt__p_ESG_Parameter_Type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Point_Type[] = {  {&_swigt__p_ESG_Point_Type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Projection_Format[] = {  {&_swigt__p_ESG_Projection_Format, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Projection_Type[] = {  {&_swigt__p_ESG_Projection_Type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Regression_Type[] = {  {&_swigt__p_ESG_Regression_Type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Shape_Copy_Mode[] = {  {&_swigt__p_ESG_Shape_Copy_Mode, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Shape_Type[] = {  {&_swigt__p_ESG_Shape_Type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Table_FileType[] = {  {&_swigt__p_ESG_Table_FileType, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Table_Index_Order[] = {  {&_swigt__p_ESG_Table_Index_Order, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_UI_Callback_ID[] = {  {&_swigt__p_ESG_UI_Callback_ID, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_UI_DataObject_Update[] = {  {&_swigt__p_ESG_UI_DataObject_Update, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_UI_MSG_STYLE[] = {  {&_swigt__p_ESG_UI_MSG_STYLE, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ESG_Vertex_Type[] = {  {&_swigt__p_ESG_Vertex_Type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_FILE[] = {  {&_swigt__p_FILE, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_SSG_Point[] = {  {&_swigt__p_SSG_Point, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_SSG_Point_Int[] = {  {&_swigt__p_SSG_Point_Int, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_SSG_Point_Z[] = {  {&_swigt__p_SSG_Point_Z, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_SSG_Point_ZM[] = {  {&_swigt__p_SSG_Point_ZM, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_SSG_Rect[] = {  {&_swigt__p_SSG_Rect, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_WORD[] = {  {&_swigt__p_WORD, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_a_32__wchar_t[] = {  {&_swigt__p_a_32__wchar_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_char[] = {  {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_double[] = {  {&_swigt__p_double, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_double__double[] = {  {&_swigt__p_f_double__double, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_enum_ESG_UI_Callback_ID_r_CSG_UI_Parameter_r_CSG_UI_Parameter__int[] = {  {&_swigt__p_f_enum_ESG_UI_Callback_ID_r_CSG_UI_Parameter_r_CSG_UI_Parameter__int, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_p_CSG_Parameter__int[] = {  {&_swigt__p_f_p_CSG_Parameter__int, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_f_q_const__int_q_const__int__int[] = {  {&_swigt__p_f_q_const__int_q_const__int__int, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_int[] = {  {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_long[] = {  {&_swigt__p_long, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_double[] = {  {&_swigt__p_p_double, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_void[] = {  {&_swigt__p_p_void, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_wchar_t[] = {  {&_swigt__p_p_wchar_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_void[] = {  {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_wchar_t[] = {  {&_swigt__p_wchar_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_wxFont[] = {  {&_swigt__p_wxFont, 0, 0, 0},{0, 0, 0, 0}};
+
+static swig_cast_info *swig_cast_initial[] = {
+  _swigc__p_BYTE,
+  _swigc__p_CSG_Array,
+  _swigc__p_CSG_Buffer,
+  _swigc__p_CSG_Bytes,
+  _swigc__p_CSG_Bytes_Array,
+  _swigc__p_CSG_Class_Statistics,
+  _swigc__p_CSG_Cluster_Analysis,
+  _swigc__p_CSG_Colors,
+  _swigc__p_CSG_Data_Object,
+  _swigc__p_CSG_Distance_Weighting,
+  _swigc__p_CSG_File,
+  _swigc__p_CSG_Formula,
+  _swigc__p_CSG_Formula_TSG_Formula_Item,
+  _swigc__p_CSG_Grid,
+  _swigc__p_CSG_Grid_Cell_Addressor,
+  _swigc__p_CSG_Grid_Pyramid,
+  _swigc__p_CSG_Grid_Radius,
+  _swigc__p_CSG_Grid_Stack,
+  _swigc__p_CSG_Grid_System,
+  _swigc__p_CSG_Index,
+  _swigc__p_CSG_Matrix,
+  _swigc__p_CSG_MetaData,
+  _swigc__p_CSG_Module,
+  _swigc__p_CSG_Module_Grid,
+  _swigc__p_CSG_Module_Grid_Interactive,
+  _swigc__p_CSG_Module_Interactive,
+  _swigc__p_CSG_Module_Interactive_Base,
+  _swigc__p_CSG_Module_Library,
+  _swigc__p_CSG_Module_Library_Interface,
+  _swigc__p_CSG_PRQuadTree,
+  _swigc__p_CSG_PRQuadTree_Item,
+  _swigc__p_CSG_PRQuadTree_Leaf,
+  _swigc__p_CSG_PRQuadTree_Node,
+  _swigc__p_CSG_Parameter,
+  _swigc__p_CSG_Parameter_Bool,
+  _swigc__p_CSG_Parameter_Choice,
+  _swigc__p_CSG_Parameter_Color,
+  _swigc__p_CSG_Parameter_Colors,
+  _swigc__p_CSG_Parameter_Data,
+  _swigc__p_CSG_Parameter_Data_Object,
+  _swigc__p_CSG_Parameter_Data_Object_Output,
+  _swigc__p_CSG_Parameter_Degree,
+  _swigc__p_CSG_Parameter_Double,
+  _swigc__p_CSG_Parameter_File_Name,
+  _swigc__p_CSG_Parameter_Fixed_Table,
+  _swigc__p_CSG_Parameter_Font,
+  _swigc__p_CSG_Parameter_Grid,
+  _swigc__p_CSG_Parameter_Grid_List,
+  _swigc__p_CSG_Parameter_Grid_System,
+  _swigc__p_CSG_Parameter_Int,
+  _swigc__p_CSG_Parameter_List,
+  _swigc__p_CSG_Parameter_Node,
+  _swigc__p_CSG_Parameter_Parameters,
+  _swigc__p_CSG_Parameter_PointCloud,
+  _swigc__p_CSG_Parameter_PointCloud_List,
+  _swigc__p_CSG_Parameter_Range,
+  _swigc__p_CSG_Parameter_Shapes,
+  _swigc__p_CSG_Parameter_Shapes_List,
+  _swigc__p_CSG_Parameter_String,
+  _swigc__p_CSG_Parameter_TIN,
+  _swigc__p_CSG_Parameter_TIN_List,
+  _swigc__p_CSG_Parameter_Table,
+  _swigc__p_CSG_Parameter_Table_Field,
+  _swigc__p_CSG_Parameter_Table_List,
+  _swigc__p_CSG_Parameter_Text,
+  _swigc__p_CSG_Parameter_Value,
+  _swigc__p_CSG_Parameters,
+  _swigc__p_CSG_Parameters_Grid_Target,
+  _swigc__p_CSG_Point,
+  _swigc__p_CSG_PointCloud,
+  _swigc__p_CSG_Point_Z,
+  _swigc__p_CSG_Point_ZM,
+  _swigc__p_CSG_Points,
+  _swigc__p_CSG_Points_Int,
+  _swigc__p_CSG_Points_Z,
+  _swigc__p_CSG_Projection,
+  _swigc__p_CSG_Projections,
+  _swigc__p_CSG_Rect,
+  _swigc__p_CSG_Rects,
+  _swigc__p_CSG_Regression,
+  _swigc__p_CSG_Regression_Multiple,
+  _swigc__p_CSG_Shape,
+  _swigc__p_CSG_Shape_Line,
+  _swigc__p_CSG_Shape_Part,
+  _swigc__p_CSG_Shape_Part_Z,
+  _swigc__p_CSG_Shape_Part_ZM,
+  _swigc__p_CSG_Shape_Point,
+  _swigc__p_CSG_Shape_Point_Z,
+  _swigc__p_CSG_Shape_Point_ZM,
+  _swigc__p_CSG_Shape_Points,
+  _swigc__p_CSG_Shape_Polygon,
+  _swigc__p_CSG_Shape_Polygon_Part,
+  _swigc__p_CSG_Shapes,
+  _swigc__p_CSG_Shapes_OGIS_Converter,
+  _swigc__p_CSG_Shapes_Search,
+  _swigc__p_CSG_Simple_Statistics,
+  _swigc__p_CSG_Spline,
+  _swigc__p_CSG_Stack,
+  _swigc__p_CSG_String,
+  _swigc__p_CSG_Strings,
+  _swigc__p_CSG_TIN,
+  _swigc__p_CSG_TIN_Edge,
+  _swigc__p_CSG_TIN_Node,
+  _swigc__p_CSG_TIN_Triangle,
+  _swigc__p_CSG_Table,
+  _swigc__p_CSG_Table_Record,
+  _swigc__p_CSG_Table_Value,
+  _swigc__p_CSG_Table_Value_Binary,
+  _swigc__p_CSG_Table_Value_Date,
+  _swigc__p_CSG_Table_Value_Double,
+  _swigc__p_CSG_Table_Value_Int,
+  _swigc__p_CSG_Table_Value_String,
+  _swigc__p_CSG_Thin_Plate_Spline,
+  _swigc__p_CSG_Translator,
+  _swigc__p_CSG_Trend,
+  _swigc__p_CSG_UI_Parameter,
+  _swigc__p_CSG_Vector,
+  _swigc__p_DWORD,
+  _swigc__p_ESG_Array_Growth,
+  _swigc__p_ESG_Data_Object_Type,
+  _swigc__p_ESG_Data_Type,
+  _swigc__p_ESG_Distance_Weighting,
+  _swigc__p_ESG_Grid_File_Format,
+  _swigc__p_ESG_Grid_File_Key,
+  _swigc__p_ESG_Grid_Interpolation,
+  _swigc__p_ESG_Grid_Memory_Type,
+  _swigc__p_ESG_Grid_Operation,
+  _swigc__p_ESG_Grid_Pyramid_Generalisation,
+  _swigc__p_ESG_Grid_Pyramid_Grow_Type,
+  _swigc__p_ESG_Intersection,
+  _swigc__p_ESG_MLB_Info,
+  _swigc__p_ESG_Module_Error,
+  _swigc__p_ESG_Module_Interactive_DragMode,
+  _swigc__p_ESG_Module_Interactive_Mode,
+  _swigc__p_ESG_Module_Type,
+  _swigc__p_ESG_Parameter_Type,
+  _swigc__p_ESG_Point_Type,
+  _swigc__p_ESG_Projection_Format,
+  _swigc__p_ESG_Projection_Type,
+  _swigc__p_ESG_Regression_Type,
+  _swigc__p_ESG_Shape_Copy_Mode,
+  _swigc__p_ESG_Shape_Type,
+  _swigc__p_ESG_Table_FileType,
+  _swigc__p_ESG_Table_Index_Order,
+  _swigc__p_ESG_UI_Callback_ID,
+  _swigc__p_ESG_UI_DataObject_Update,
+  _swigc__p_ESG_UI_MSG_STYLE,
+  _swigc__p_ESG_Vertex_Type,
+  _swigc__p_FILE,
+  _swigc__p_SSG_Point,
+  _swigc__p_SSG_Point_Int,
+  _swigc__p_SSG_Point_Z,
+  _swigc__p_SSG_Point_ZM,
+  _swigc__p_SSG_Rect,
+  _swigc__p_WORD,
+  _swigc__p_a_32__wchar_t,
+  _swigc__p_char,
+  _swigc__p_double,
+  _swigc__p_f_double__double,
+  _swigc__p_f_enum_ESG_UI_Callback_ID_r_CSG_UI_Parameter_r_CSG_UI_Parameter__int,
+  _swigc__p_f_p_CSG_Parameter__int,
+  _swigc__p_f_q_const__int_q_const__int__int,
+  _swigc__p_int,
+  _swigc__p_long,
+  _swigc__p_p_double,
+  _swigc__p_p_void,
+  _swigc__p_p_wchar_t,
+  _swigc__p_void,
+  _swigc__p_wchar_t,
+  _swigc__p_wxFont,
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
+
+static swig_const_info swig_const_table[] = {
+{0, 0, 0, 0.0, 0, 0}};
+
+#ifdef __cplusplus
+}
+#endif
+/* -----------------------------------------------------------------------------
+ * Type initialization:
+ * This problem is tough by the requirement that no dynamic 
+ * memory is used. Also, since swig_type_info structures store pointers to 
+ * swig_cast_info structures and swig_cast_info structures store pointers back
+ * to swig_type_info structures, we need some lookup code at initialization. 
+ * The idea is that swig generates all the structures that are needed. 
+ * The runtime then collects these partially filled structures. 
+ * The SWIG_InitializeModule function takes these initial arrays out of 
+ * swig_module, and does all the lookup, filling in the swig_module.types
+ * array with the correct data and linking the correct swig_cast_info
+ * structures together.
+ *
+ * The generated swig_type_info structures are assigned staticly to an initial 
+ * array. We just loop through that array, and handle each type individually.
+ * First we lookup if this type has been already loaded, and if so, use the
+ * loaded structure instead of the generated one. Then we have to fill in the
+ * cast linked list. The cast data is initially stored in something like a
+ * two-dimensional array. Each row corresponds to a type (there are the same
+ * number of rows as there are in the swig_type_initial array). Each entry in
+ * a column is one of the swig_cast_info structures for that type.
+ * The cast_initial array is actually an array of arrays, because each row has
+ * a variable number of columns. So to actually build the cast linked list,
+ * we find the array of casts associated with the type, and loop through it 
+ * adding the casts to the list. The one last trick we need to do is making
+ * sure the type pointer in the swig_cast_info struct is correct.
+ *
+ * First off, we lookup the cast->type name to see if it is already loaded. 
+ * There are three cases to handle:
+ *  1) If the cast->type has already been loaded AND the type we are adding
+ *     casting info to has not been loaded (it is in this module), THEN we
+ *     replace the cast->type pointer with the type pointer that has already
+ *     been loaded.
+ *  2) If BOTH types (the one we are adding casting info to, and the 
+ *     cast->type) are loaded, THEN the cast info has already been loaded by
+ *     the previous module so we just ignore it.
+ *  3) Finally, if cast->type has not already been loaded, then we add that
+ *     swig_cast_info to the linked list (because the cast->type) pointer will
+ *     be correct.
+ * ----------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* c-mode */
+#endif
+#endif
+
+#if 0
+#define SWIGRUNTIME_DEBUG
+#endif
+
+
+SWIGRUNTIME void
+SWIG_InitializeModule(void *clientdata) {
+  size_t i;
+  swig_module_info *module_head, *iter;
+  int found, init;
+  
+  clientdata = clientdata;
+  
+  /* check to see if the circular list has been setup, if not, set it up */
+  if (swig_module.next==0) {
+    /* Initialize the swig_module */
+    swig_module.type_initial = swig_type_initial;
+    swig_module.cast_initial = swig_cast_initial;
+    swig_module.next = &swig_module;
+    init = 1;
+  } else {
+    init = 0;
+  }
+  
+  /* Try and load any already created modules */
+  module_head = SWIG_GetModule(clientdata);
+  if (!module_head) {
+    /* This is the first module loaded for this interpreter */
+    /* so set the swig module into the interpreter */
+    SWIG_SetModule(clientdata, &swig_module);
+    module_head = &swig_module;
+  } else {
+    /* the interpreter has loaded a SWIG module, but has it loaded this one? */
+    found=0;
+    iter=module_head;
+    do {
+      if (iter==&swig_module) {
+        found=1;
+        break;
+      }
+      iter=iter->next;
+    } while (iter!= module_head);
+    
+    /* if the is found in the list, then all is done and we may leave */
+    if (found) return;
+    /* otherwise we must add out module into the list */
+    swig_module.next = module_head->next;
+    module_head->next = &swig_module;
+  }
+  
+  /* When multiple interpeters are used, a module could have already been initialized in
+       a different interpreter, but not yet have a pointer in this interpreter.
+       In this case, we do not want to continue adding types... everything should be
+       set up already */
+  if (init == 0) return;
+  
+  /* Now work on filling in swig_module.types */
+#ifdef SWIGRUNTIME_DEBUG
+  printf("SWIG_InitializeModule: size %d\n", swig_module.size);
+#endif
+  for (i = 0; i < swig_module.size; ++i) {
+    swig_type_info *type = 0;
+    swig_type_info *ret;
+    swig_cast_info *cast;
+    
+#ifdef SWIGRUNTIME_DEBUG
+    printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+#endif
+    
+    /* if there is another module already loaded */
+    if (swig_module.next != &swig_module) {
+      type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
+    }
+    if (type) {
+      /* Overwrite clientdata field */
+#ifdef SWIGRUNTIME_DEBUG
+      printf("SWIG_InitializeModule: found type %s\n", type->name);
+#endif
+      if (swig_module.type_initial[i]->clientdata) {
+        type->clientdata = swig_module.type_initial[i]->clientdata;
+#ifdef SWIGRUNTIME_DEBUG
+        printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
+#endif
+      }
+    } else {
+      type = swig_module.type_initial[i];
+    }
+    
+    /* Insert casting types */
+    cast = swig_module.cast_initial[i];
+    while (cast->type) {
+      /* Don't need to add information already in the list */
+      ret = 0;
+#ifdef SWIGRUNTIME_DEBUG
+      printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
+#endif
+      if (swig_module.next != &swig_module) {
+        ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
+#ifdef SWIGRUNTIME_DEBUG
+        if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
+#endif
+      }
+      if (ret) {
+        if (type == swig_module.type_initial[i]) {
+#ifdef SWIGRUNTIME_DEBUG
+          printf("SWIG_InitializeModule: skip old type %s\n", ret->name);
+#endif
+          cast->type = ret;
+          ret = 0;
+        } else {
+          /* Check for casting already in the list */
+          swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
+#ifdef SWIGRUNTIME_DEBUG
+          if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
+#endif
+          if (!ocast) ret = 0;
+        }
+      }
+      
+      if (!ret) {
+#ifdef SWIGRUNTIME_DEBUG
+        printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
+#endif
+        if (type->cast) {
+          type->cast->prev = cast;
+          cast->next = type->cast;
+        }
+        type->cast = cast;
+      }
+      cast++;
+    }
+    /* Set entry in modules->types array equal to the type */
+    swig_module.types[i] = type;
+  }
+  swig_module.types[i] = 0;
+  
+#ifdef SWIGRUNTIME_DEBUG
+  printf("**** SWIG_InitializeModule: Cast List ******\n");
+  for (i = 0; i < swig_module.size; ++i) {
+    int j = 0;
+    swig_cast_info *cast = swig_module.cast_initial[i];
+    printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
+    while (cast->type) {
+      printf("SWIG_InitializeModule: cast type %s\n", cast->type->name);
+      cast++;
+      ++j;
+    }
+    printf("---- Total casts: %d\n",j);
+  }
+  printf("**** SWIG_InitializeModule: Cast List ******\n");
+#endif
+}
+
+/* This function will propagate the clientdata field of type to
+* any new swig_type_info structures that have been added into the list
+* of equivalent types.  It is like calling
+* SWIG_TypeClientData(type, clientdata) a second time.
+*/
+SWIGRUNTIME void
+SWIG_PropagateClientData(void) {
+  size_t i;
+  swig_cast_info *equiv;
+  static int init_run = 0;
+  
+  if (init_run) return;
+  init_run = 1;
+  
+  for (i = 0; i < swig_module.size; i++) {
+    if (swig_module.types[i]->clientdata) {
+      equiv = swig_module.types[i]->cast;
+      while (equiv) {
+        if (!equiv->converter) {
+          if (equiv->type && !equiv->type->clientdata)
+          SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
+        }
+        equiv = equiv->next;
+      }
+    }
+  }
+}
+
+#ifdef __cplusplus
+#if 0
+{
+  /* c-mode */
+#endif
+}
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+  
+  /* Python-specific SWIG API */
+#define SWIG_newvarlink()                             SWIG_Python_newvarlink()
+#define SWIG_addvarlink(p, name, get_attr, set_attr)  SWIG_Python_addvarlink(p, name, get_attr, set_attr)
+#define SWIG_InstallConstants(d, constants)           SWIG_Python_InstallConstants(d, constants)
+  
+  /* -----------------------------------------------------------------------------
+   * global variable support code.
+   * ----------------------------------------------------------------------------- */
+  
+  typedef struct swig_globalvar {
+    char       *name;                  /* Name of global variable */
+    PyObject *(*get_attr)(void);       /* Return the current value */
+    int       (*set_attr)(PyObject *); /* Set the value */
+    struct swig_globalvar *next;
+  } swig_globalvar;
+  
+  typedef struct swig_varlinkobject {
+    PyObject_HEAD
+    swig_globalvar *vars;
+  } swig_varlinkobject;
+  
+  SWIGINTERN PyObject *
+  swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) {
+#if PY_VERSION_HEX >= 0x03000000
+    return PyUnicode_InternFromString("<Swig global variables>");
+#else
+    return PyString_FromString("<Swig global variables>");
+#endif
+  }
+  
+  SWIGINTERN PyObject *
+  swig_varlink_str(swig_varlinkobject *v) {
+#if PY_VERSION_HEX >= 0x03000000
+    PyObject *str = PyUnicode_InternFromString("(");
+    PyObject *tail;
+    PyObject *joined;
+    swig_globalvar *var;
+    for (var = v->vars; var; var=var->next) {
+      tail = PyUnicode_FromString(var->name);
+      joined = PyUnicode_Concat(str, tail);
+      Py_DecRef(str);
+      Py_DecRef(tail);
+      str = joined;
+      if (var->next) {
+        tail = PyUnicode_InternFromString(", ");
+        joined = PyUnicode_Concat(str, tail);
+        Py_DecRef(str);
+        Py_DecRef(tail);
+        str = joined;
+      }
+    }
+    tail = PyUnicode_InternFromString(")");
+    joined = PyUnicode_Concat(str, tail);
+    Py_DecRef(str);
+    Py_DecRef(tail);
+    str = joined;
+#else
+    PyObject *str = PyString_FromString("(");
+    swig_globalvar *var;
+    for (var = v->vars; var; var=var->next) {
+      PyString_ConcatAndDel(&str,PyString_FromString(var->name));
+      if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", "));
+    }
+    PyString_ConcatAndDel(&str,PyString_FromString(")"));
+#endif
+    return str;
+  }
+  
+  SWIGINTERN int
+  swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) {
+    char *tmp;
+    PyObject *str = swig_varlink_str(v);
+    fprintf(fp,"Swig global variables ");
+    fprintf(fp,"%s\n", tmp = SWIG_Python_str_AsChar(str));
+    SWIG_Python_str_DelForPy3(tmp);
+    Py_DECREF(str);
+    return 0;
+  }
+  
+  SWIGINTERN void
+  swig_varlink_dealloc(swig_varlinkobject *v) {
+    swig_globalvar *var = v->vars;
+    while (var) {
+      swig_globalvar *n = var->next;
+      free(var->name);
+      free(var);
+      var = n;
+    }
+  }
+  
+  SWIGINTERN PyObject *
+  swig_varlink_getattr(swig_varlinkobject *v, char *n) {
+    PyObject *res = NULL;
+    swig_globalvar *var = v->vars;
+    while (var) {
+      if (strcmp(var->name,n) == 0) {
+        res = (*var->get_attr)();
+        break;
+      }
+      var = var->next;
+    }
+    if (res == NULL && !PyErr_Occurred()) {
+      PyErr_SetString(PyExc_NameError,"Unknown C global variable");
+    }
+    return res;
+  }
+  
+  SWIGINTERN int
+  swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) {
+    int res = 1;
+    swig_globalvar *var = v->vars;
+    while (var) {
+      if (strcmp(var->name,n) == 0) {
+        res = (*var->set_attr)(p);
+        break;
+      }
+      var = var->next;
+    }
+    if (res == 1 && !PyErr_Occurred()) {
+      PyErr_SetString(PyExc_NameError,"Unknown C global variable");
+    }
+    return res;
+  }
+  
+  SWIGINTERN PyTypeObject*
+  swig_varlink_type(void) {
+    static char varlink__doc__[] = "Swig var link object";
+    static PyTypeObject varlink_type;
+    static int type_init = 0;  
+    if (!type_init) {
+      const PyTypeObject tmp
+      = {
+        /* PyObject header changed in Python 3 */
+#if PY_VERSION_HEX >= 0x03000000
+        PyVarObject_HEAD_INIT(&PyType_Type, 0)
+#else
+        PyObject_HEAD_INIT(NULL)
+        0,                                  /* Number of items in variable part (ob_size) */
+#endif
+        (char *)"swigvarlink",              /* Type name (tp_name) */
+        sizeof(swig_varlinkobject),         /* Basic size (tp_basicsize) */
+        0,                                  /* Itemsize (tp_itemsize) */
+        (destructor) swig_varlink_dealloc,  /* Deallocator (tp_dealloc) */ 
+        (printfunc) swig_varlink_print,     /* Print (tp_print) */
+        (getattrfunc) swig_varlink_getattr, /* get attr (tp_getattr) */
+        (setattrfunc) swig_varlink_setattr, /* Set attr (tp_setattr) */
+        0,                                  /* tp_compare */
+        (reprfunc) swig_varlink_repr,       /* tp_repr */
+        0,                                  /* tp_as_number */
+        0,                                  /* tp_as_sequence */
+        0,                                  /* tp_as_mapping */
+        0,                                  /* tp_hash */
+        0,                                  /* tp_call */
+        (reprfunc) swig_varlink_str,        /* tp_str */
+        0,                                  /* tp_getattro */
+        0,                                  /* tp_setattro */
+        0,                                  /* tp_as_buffer */
+        0,                                  /* tp_flags */
+        varlink__doc__,                     /* tp_doc */
+        0,                                  /* tp_traverse */
+        0,                                  /* tp_clear */
+        0,                                  /* tp_richcompare */
+        0,                                  /* tp_weaklistoffset */
+#if PY_VERSION_HEX >= 0x02020000
+        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */
+#endif
+#if PY_VERSION_HEX >= 0x02030000
+        0,                                  /* tp_del */
+#endif
+#ifdef COUNT_ALLOCS
+        0,0,0,0                             /* tp_alloc -> tp_next */
+#endif
+      };
+      varlink_type = tmp;
+      /* for Python 3 we already assigned ob_type in PyVarObject_HEAD_INIT() */
+#if PY_VERSION_HEX < 0x03000000
+      varlink_type.ob_type = &PyType_Type;
+#endif
+      type_init = 1;
+    }
+    return &varlink_type;
+  }
+  
+  /* Create a variable linking object for use later */
+  SWIGINTERN PyObject *
+  SWIG_Python_newvarlink(void) {
+    swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type());
+    if (result) {
+      result->vars = 0;
+    }
+    return ((PyObject*) result);
+  }
+  
+  SWIGINTERN void 
+  SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) {
+    swig_varlinkobject *v = (swig_varlinkobject *) p;
+    swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar));
+    if (gv) {
+      size_t size = strlen(name)+1;
+      gv->name = (char *)malloc(size);
+      if (gv->name) {
+        strncpy(gv->name,name,size);
+        gv->get_attr = get_attr;
+        gv->set_attr = set_attr;
+        gv->next = v->vars;
+      }
+    }
+    v->vars = gv;
+  }
+  
+  SWIGINTERN PyObject *
+  SWIG_globals(void) {
+    static PyObject *_SWIG_globals = 0; 
+    if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink();  
+    return _SWIG_globals;
+  }
+  
+  /* -----------------------------------------------------------------------------
+   * constants/methods manipulation
+   * ----------------------------------------------------------------------------- */
+  
+  /* Install Constants */
+  SWIGINTERN void
+  SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) {
+    PyObject *obj = 0;
+    size_t i;
+    for (i = 0; constants[i].type; ++i) {
+      switch(constants[i].type) {
+      case SWIG_PY_POINTER:
+        obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0);
+        break;
+      case SWIG_PY_BINARY:
+        obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype));
+        break;
+      default:
+        obj = 0;
+        break;
+      }
+      if (obj) {
+        PyDict_SetItemString(d, constants[i].name, obj);
+        Py_DECREF(obj);
+      }
+    }
+  }
+  
+  /* -----------------------------------------------------------------------------*/
+  /* Fix SwigMethods to carry the callback ptrs when needed */
+  /* -----------------------------------------------------------------------------*/
+  
+  SWIGINTERN void
+  SWIG_Python_FixMethods(PyMethodDef *methods,
+    swig_const_info *const_table,
+    swig_type_info **types,
+    swig_type_info **types_initial) {
+    size_t i;
+    for (i = 0; methods[i].ml_name; ++i) {
+      const char *c = methods[i].ml_doc;
+      if (c && (c = strstr(c, "swig_ptr: "))) {
+        int j;
+        swig_const_info *ci = 0;
+        const char *name = c + 10;
+        for (j = 0; const_table[j].type; ++j) {
+          if (strncmp(const_table[j].name, name, 
+              strlen(const_table[j].name)) == 0) {
+            ci = &(const_table[j]);
+            break;
+          }
+        }
+        if (ci) {
+          size_t shift = (ci->ptype) - types;
+          swig_type_info *ty = types_initial[shift];
+          size_t ldoc = (c - methods[i].ml_doc);
+          size_t lptr = strlen(ty->name)+2*sizeof(void*)+2;
+          char *ndoc = (char*)malloc(ldoc + lptr + 10);
+          if (ndoc) {
+            char *buff = ndoc;
+            void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0;
+            if (ptr) {
+              strncpy(buff, methods[i].ml_doc, ldoc);
+              buff += ldoc;
+              strncpy(buff, "swig_ptr: ", 10);
+              buff += 10;
+              SWIG_PackVoidPtr(buff, ptr, ty->name, lptr);
+              methods[i].ml_doc = ndoc;
+            }
+          }
+        }
+      }
+    }
+  } 
+  
+#ifdef __cplusplus
+}
+#endif
+
+/* -----------------------------------------------------------------------------*
+ *  Partial Init method
+ * -----------------------------------------------------------------------------*/
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+SWIGEXPORT 
+#if PY_VERSION_HEX >= 0x03000000
+PyObject*
+#else
+void
+#endif
+SWIG_init(void) {
+  PyObject *m, *d;  
+#if PY_VERSION_HEX >= 0x03000000
+  static struct PyModuleDef SWIG_module = {
+    PyModuleDef_HEAD_INIT,
+    (char *) SWIG_name,
+    NULL,
+    -1,
+    SwigMethods,
+    NULL,
+    NULL,
+    NULL,
+    NULL
+  };
+#endif
+  
+  /* Fix SwigMethods to carry the callback ptrs when needed */
+  SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial);
+  
+#if PY_VERSION_HEX >= 0x03000000
+  m = PyModule_Create(&SWIG_module);
+#else
+  m = Py_InitModule((char *) SWIG_name, SwigMethods);
+#endif
+  d = PyModule_GetDict(m);
+  
+  SWIG_InitializeModule(0);
+  SWIG_InstallConstants(d,swig_const_table);
+  
+  
+  SWIG_Python_SetConstant(d, "SIZEOF_LONG",SWIG_From_int(static_cast< int >(4)));
+  SWIG_Python_SetConstant(d, "SG_ARRAY_GROWTH_0",SWIG_From_int(static_cast< int >(SG_ARRAY_GROWTH_0)));
+  SWIG_Python_SetConstant(d, "SG_ARRAY_GROWTH_1",SWIG_From_int(static_cast< int >(SG_ARRAY_GROWTH_1)));
+  SWIG_Python_SetConstant(d, "SG_ARRAY_GROWTH_2",SWIG_From_int(static_cast< int >(SG_ARRAY_GROWTH_2)));
+  SWIG_Python_SetConstant(d, "SG_ARRAY_GROWTH_3",SWIG_From_int(static_cast< int >(SG_ARRAY_GROWTH_3)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Bit",SWIG_From_int(static_cast< int >(SG_DATATYPE_Bit)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Byte",SWIG_From_int(static_cast< int >(SG_DATATYPE_Byte)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Char",SWIG_From_int(static_cast< int >(SG_DATATYPE_Char)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Word",SWIG_From_int(static_cast< int >(SG_DATATYPE_Word)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Short",SWIG_From_int(static_cast< int >(SG_DATATYPE_Short)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_DWord",SWIG_From_int(static_cast< int >(SG_DATATYPE_DWord)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Int",SWIG_From_int(static_cast< int >(SG_DATATYPE_Int)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_ULong",SWIG_From_int(static_cast< int >(SG_DATATYPE_ULong)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Long",SWIG_From_int(static_cast< int >(SG_DATATYPE_Long)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Float",SWIG_From_int(static_cast< int >(SG_DATATYPE_Float)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Double",SWIG_From_int(static_cast< int >(SG_DATATYPE_Double)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_String",SWIG_From_int(static_cast< int >(SG_DATATYPE_String)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Date",SWIG_From_int(static_cast< int >(SG_DATATYPE_Date)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Color",SWIG_From_int(static_cast< int >(SG_DATATYPE_Color)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Binary",SWIG_From_int(static_cast< int >(SG_DATATYPE_Binary)));
+  SWIG_Python_SetConstant(d, "SG_DATATYPE_Undefined",SWIG_From_int(static_cast< int >(SG_DATATYPE_Undefined)));
+  PyDict_SetItemString(d,(char*)"cvar", SWIG_globals());
+  SWIG_addvarlink(SWIG_globals(),(char*)"gSG_Data_Type_Identifier",Swig_var_gSG_Data_Type_Identifier_get, Swig_var_gSG_Data_Type_Identifier_set);
+  SWIG_Python_SetConstant(d, "SG_FILE_R",SWIG_From_int(static_cast< int >(SG_FILE_R)));
+  SWIG_Python_SetConstant(d, "SG_FILE_W",SWIG_From_int(static_cast< int >(SG_FILE_W)));
+  SWIG_Python_SetConstant(d, "SG_FILE_RW",SWIG_From_int(static_cast< int >(SG_FILE_RW)));
+  SWIG_Python_SetConstant(d, "SG_FILE_WA",SWIG_From_int(static_cast< int >(SG_FILE_WA)));
+  SWIG_Python_SetConstant(d, "SG_FILE_RWA",SWIG_From_int(static_cast< int >(SG_FILE_RWA)));
+  SWIG_Python_SetConstant(d, "SG_FILE_START",SWIG_From_int(static_cast< int >(SG_FILE_START)));
+  SWIG_Python_SetConstant(d, "SG_FILE_CURRENT",SWIG_From_int(static_cast< int >(SG_FILE_CURRENT)));
+  SWIG_Python_SetConstant(d, "SG_FILE_END",SWIG_From_int(static_cast< int >(SG_FILE_END)));
+  SWIG_Python_SetConstant(d, "SG_COLOR_NONE",SWIG_From_int(static_cast< int >(-1)));
+  SWIG_Python_SetConstant(d, "SG_COLOR_RANDOM",SWIG_From_int(static_cast< int >(-2)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_DEFAULT",SWIG_From_int(static_cast< int >(SG_COLORS_DEFAULT)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_DEFAULT_BRIGHT",SWIG_From_int(static_cast< int >(SG_COLORS_DEFAULT_BRIGHT)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_BLACK_WHITE",SWIG_From_int(static_cast< int >(SG_COLORS_BLACK_WHITE)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_BLACK_RED",SWIG_From_int(static_cast< int >(SG_COLORS_BLACK_RED)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_BLACK_GREEN",SWIG_From_int(static_cast< int >(SG_COLORS_BLACK_GREEN)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_BLACK_BLUE",SWIG_From_int(static_cast< int >(SG_COLORS_BLACK_BLUE)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_WHITE_RED",SWIG_From_int(static_cast< int >(SG_COLORS_WHITE_RED)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_WHITE_GREEN",SWIG_From_int(static_cast< int >(SG_COLORS_WHITE_GREEN)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_WHITE_BLUE",SWIG_From_int(static_cast< int >(SG_COLORS_WHITE_BLUE)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_YELLOW_RED",SWIG_From_int(static_cast< int >(SG_COLORS_YELLOW_RED)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_YELLOW_GREEN",SWIG_From_int(static_cast< int >(SG_COLORS_YELLOW_GREEN)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_YELLOW_BLUE",SWIG_From_int(static_cast< int >(SG_COLORS_YELLOW_BLUE)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_RED_GREEN",SWIG_From_int(static_cast< int >(SG_COLORS_RED_GREEN)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_RED_BLUE",SWIG_From_int(static_cast< int >(SG_COLORS_RED_BLUE)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_GREEN_BLUE",SWIG_From_int(static_cast< int >(SG_COLORS_GREEN_BLUE)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_RED_GREY_BLUE",SWIG_From_int(static_cast< int >(SG_COLORS_RED_GREY_BLUE)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_RED_GREY_GREEN",SWIG_From_int(static_cast< int >(SG_COLORS_RED_GREY_GREEN)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_GREEN_GREY_BLUE",SWIG_From_int(static_cast< int >(SG_COLORS_GREEN_GREY_BLUE)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_RED_GREEN_BLUE",SWIG_From_int(static_cast< int >(SG_COLORS_RED_GREEN_BLUE)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_RED_BLUE_GREEN",SWIG_From_int(static_cast< int >(SG_COLORS_RED_BLUE_GREEN)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_GREEN_RED_BLUE",SWIG_From_int(static_cast< int >(SG_COLORS_GREEN_RED_BLUE)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_RAINBOW",SWIG_From_int(static_cast< int >(SG_COLORS_RAINBOW)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_NEON",SWIG_From_int(static_cast< int >(SG_COLORS_NEON)));
+  SWIG_Python_SetConstant(d, "SG_COLORS_COUNT",SWIG_From_int(static_cast< int >(SG_COLORS_COUNT)));
+  SWIG_Python_SetConstant(d, "SG_UI_MSG_STYLE_NORMAL",SWIG_From_int(static_cast< int >(SG_UI_MSG_STYLE_NORMAL)));
+  SWIG_Python_SetConstant(d, "SG_UI_MSG_STYLE_BOLD",SWIG_From_int(static_cast< int >(SG_UI_MSG_STYLE_BOLD)));
+  SWIG_Python_SetConstant(d, "SG_UI_MSG_STYLE_ITALIC",SWIG_From_int(static_cast< int >(SG_UI_MSG_STYLE_ITALIC)));
+  SWIG_Python_SetConstant(d, "SG_UI_MSG_STYLE_SUCCESS",SWIG_From_int(static_cast< int >(SG_UI_MSG_STYLE_SUCCESS)));
+  SWIG_Python_SetConstant(d, "SG_UI_MSG_STYLE_FAILURE",SWIG_From_int(static_cast< int >(SG_UI_MSG_STYLE_FAILURE)));
+  SWIG_Python_SetConstant(d, "SG_UI_MSG_STYLE_BIG",SWIG_From_int(static_cast< int >(SG_UI_MSG_STYLE_BIG)));
+  SWIG_Python_SetConstant(d, "SG_UI_MSG_STYLE_SMALL",SWIG_From_int(static_cast< int >(SG_UI_MSG_STYLE_SMALL)));
+  SWIG_Python_SetConstant(d, "SG_UI_MSG_STYLE_01",SWIG_From_int(static_cast< int >(SG_UI_MSG_STYLE_01)));
+  SWIG_Python_SetConstant(d, "SG_UI_MSG_STYLE_02",SWIG_From_int(static_cast< int >(SG_UI_MSG_STYLE_02)));
+  SWIG_Python_SetConstant(d, "SG_UI_MSG_STYLE_03",SWIG_From_int(static_cast< int >(SG_UI_MSG_STYLE_03)));
+  SWIG_Python_SetConstant(d, "SG_UI_DATAOBJECT_UPDATE_ONLY",SWIG_From_int(static_cast< int >(SG_UI_DATAOBJECT_UPDATE_ONLY)));
+  SWIG_Python_SetConstant(d, "SG_UI_DATAOBJECT_SHOW",SWIG_From_int(static_cast< int >(SG_UI_DATAOBJECT_SHOW)));
+  SWIG_Python_SetConstant(d, "SG_UI_DATAOBJECT_SHOW_NEW_MAP",SWIG_From_int(static_cast< int >(SG_UI_DATAOBJECT_SHOW_NEW_MAP)));
+  SWIG_Python_SetConstant(d, "SG_UI_DATAOBJECT_SHOW_LAST_MAP",SWIG_From_int(static_cast< int >(SG_UI_DATAOBJECT_SHOW_LAST_MAP)));
+  SWIG_Python_SetConstant(d, "CALLBACK_PROCESS_GET_OKAY",SWIG_From_int(static_cast< int >(CALLBACK_PROCESS_GET_OKAY)));
+  SWIG_Python_SetConstant(d, "CALLBACK_PROCESS_SET_OKAY",SWIG_From_int(static_cast< int >(CALLBACK_PROCESS_SET_OKAY)));
+  SWIG_Python_SetConstant(d, "CALLBACK_PROCESS_SET_PROGRESS",SWIG_From_int(static_cast< int >(CALLBACK_PROCESS_SET_PROGRESS)));
+  SWIG_Python_SetConstant(d, "CALLBACK_PROCESS_SET_READY",SWIG_From_int(static_cast< int >(CALLBACK_PROCESS_SET_READY)));
+  SWIG_Python_SetConstant(d, "CALLBACK_PROCESS_SET_TEXT",SWIG_From_int(static_cast< int >(CALLBACK_PROCESS_SET_TEXT)));
+  SWIG_Python_SetConstant(d, "CALLBACK_STOP_EXECUTION",SWIG_From_int(static_cast< int >(CALLBACK_STOP_EXECUTION)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DLG_MESSAGE",SWIG_From_int(static_cast< int >(CALLBACK_DLG_MESSAGE)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DLG_CONTINUE",SWIG_From_int(static_cast< int >(CALLBACK_DLG_CONTINUE)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DLG_ERROR",SWIG_From_int(static_cast< int >(CALLBACK_DLG_ERROR)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DLG_PARAMETERS",SWIG_From_int(static_cast< int >(CALLBACK_DLG_PARAMETERS)));
+  SWIG_Python_SetConstant(d, "CALLBACK_MESSAGE_ADD",SWIG_From_int(static_cast< int >(CALLBACK_MESSAGE_ADD)));
+  SWIG_Python_SetConstant(d, "CALLBACK_MESSAGE_ADD_ERROR",SWIG_From_int(static_cast< int >(CALLBACK_MESSAGE_ADD_ERROR)));
+  SWIG_Python_SetConstant(d, "CALLBACK_MESSAGE_ADD_EXECUTION",SWIG_From_int(static_cast< int >(CALLBACK_MESSAGE_ADD_EXECUTION)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DATAOBJECT_FIND_BY_FILE",SWIG_From_int(static_cast< int >(CALLBACK_DATAOBJECT_FIND_BY_FILE)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DATAOBJECT_CHECK",SWIG_From_int(static_cast< int >(CALLBACK_DATAOBJECT_CHECK)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DATAOBJECT_ADD",SWIG_From_int(static_cast< int >(CALLBACK_DATAOBJECT_ADD)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DATAOBJECT_UPDATE",SWIG_From_int(static_cast< int >(CALLBACK_DATAOBJECT_UPDATE)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DATAOBJECT_SHOW",SWIG_From_int(static_cast< int >(CALLBACK_DATAOBJECT_SHOW)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DATAOBJECT_ASIMAGE",SWIG_From_int(static_cast< int >(CALLBACK_DATAOBJECT_ASIMAGE)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DATAOBJECT_COLORS_GET",SWIG_From_int(static_cast< int >(CALLBACK_DATAOBJECT_COLORS_GET)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DATAOBJECT_COLORS_SET",SWIG_From_int(static_cast< int >(CALLBACK_DATAOBJECT_COLORS_SET)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DATAOBJECT_PARAMS_GET",SWIG_From_int(static_cast< int >(CALLBACK_DATAOBJECT_PARAMS_GET)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DATAOBJECT_PARAMS_SET",SWIG_From_int(static_cast< int >(CALLBACK_DATAOBJECT_PARAMS_SET)));
+  SWIG_Python_SetConstant(d, "CALLBACK_DATAOBJECT_GET_ALL",SWIG_From_int(static_cast< int >(CALLBACK_DATAOBJECT_GET_ALL)));
+  SWIG_Python_SetConstant(d, "CALLBACK_GUI_GET_WINDOW",SWIG_From_int(static_cast< int >(CALLBACK_GUI_GET_WINDOW)));
+  SWIG_Python_SetConstant(d, "CALLBACK_GET_APP_PATH",SWIG_From_int(static_cast< int >(CALLBACK_GET_APP_PATH)));
+  SWIG_Python_SetConstant(d, "INTERSECTION_None",SWIG_From_int(static_cast< int >(INTERSECTION_None)));
+  SWIG_Python_SetConstant(d, "INTERSECTION_Identical",SWIG_From_int(static_cast< int >(INTERSECTION_Identical)));
+  SWIG_Python_SetConstant(d, "INTERSECTION_Overlaps",SWIG_From_int(static_cast< int >(INTERSECTION_Overlaps)));
+  SWIG_Python_SetConstant(d, "INTERSECTION_Contained",SWIG_From_int(static_cast< int >(INTERSECTION_Contained)));
+  SWIG_Python_SetConstant(d, "INTERSECTION_Contains",SWIG_From_int(static_cast< int >(INTERSECTION_Contains)));
+  SWIG_Python_SetConstant(d, "SG_POINT_TYPE_XY",SWIG_From_int(static_cast< int >(SG_POINT_TYPE_XY)));
+  SWIG_Python_SetConstant(d, "SG_POINT_TYPE_XYZ",SWIG_From_int(static_cast< int >(SG_POINT_TYPE_XYZ)));
+  SWIG_Python_SetConstant(d, "SG_POINT_TYPE_XYZM",SWIG_From_int(static_cast< int >(SG_POINT_TYPE_XYZM)));
+  SWIG_Python_SetConstant(d, "SG_POINT_TYPE_XY_Int",SWIG_From_int(static_cast< int >(SG_POINT_TYPE_XY_Int)));
+  SWIG_Python_SetConstant(d, "SG_DISTWGHT_None",SWIG_From_int(static_cast< int >(SG_DISTWGHT_None)));
+  SWIG_Python_SetConstant(d, "SG_DISTWGHT_IDW",SWIG_From_int(static_cast< int >(SG_DISTWGHT_IDW)));
+  SWIG_Python_SetConstant(d, "SG_DISTWGHT_EXP",SWIG_From_int(static_cast< int >(SG_DISTWGHT_EXP)));
+  SWIG_Python_SetConstant(d, "SG_DISTWGHT_GAUSS",SWIG_From_int(static_cast< int >(SG_DISTWGHT_GAUSS)));
+  SWIG_Python_SetConstant(d, "SG_PROJ_FMT_WKT",SWIG_From_int(static_cast< int >(SG_PROJ_FMT_WKT)));
+  SWIG_Python_SetConstant(d, "SG_PROJ_FMT_Proj4",SWIG_From_int(static_cast< int >(SG_PROJ_FMT_Proj4)));
+  SWIG_Python_SetConstant(d, "SG_PROJ_FMT_EPSG",SWIG_From_int(static_cast< int >(SG_PROJ_FMT_EPSG)));
+  SWIG_Python_SetConstant(d, "SG_PROJ_FMT_Undefined",SWIG_From_int(static_cast< int >(SG_PROJ_FMT_Undefined)));
+  SWIG_Python_SetConstant(d, "SG_PROJ_TYPE_CS_Undefined",SWIG_From_int(static_cast< int >(SG_PROJ_TYPE_CS_Undefined)));
+  SWIG_Python_SetConstant(d, "SG_PROJ_TYPE_CS_Projected",SWIG_From_int(static_cast< int >(SG_PROJ_TYPE_CS_Projected)));
+  SWIG_Python_SetConstant(d, "SG_PROJ_TYPE_CS_Geographic",SWIG_From_int(static_cast< int >(SG_PROJ_TYPE_CS_Geographic)));
+  SWIG_Python_SetConstant(d, "SG_PROJ_TYPE_CS_Geocentric",SWIG_From_int(static_cast< int >(SG_PROJ_TYPE_CS_Geocentric)));
+  SWIG_addvarlink(SWIG_globals(),(char*)"gSG_Projection_Type_Identifier",Swig_var_gSG_Projection_Type_Identifier_get, Swig_var_gSG_Projection_Type_Identifier_set);
+  SWIG_Python_SetConstant(d, "M_PI",SWIG_From_double(static_cast< double >(3.141592653589793)));
+  SWIG_Python_SetConstant(d, "M_PI_045",SWIG_From_double(static_cast< double >((3.141592653589793/4.0))));
+  SWIG_Python_SetConstant(d, "M_PI_090",SWIG_From_double(static_cast< double >((3.141592653589793/2.0))));
+  SWIG_Python_SetConstant(d, "M_PI_135",SWIG_From_double(static_cast< double >((3.141592653589793*3.0/4.0))));
+  SWIG_Python_SetConstant(d, "M_PI_180",SWIG_From_double(static_cast< double >((3.141592653589793))));
+  SWIG_Python_SetConstant(d, "M_PI_225",SWIG_From_double(static_cast< double >((3.141592653589793*5.0/4.0))));
+  SWIG_Python_SetConstant(d, "M_PI_270",SWIG_From_double(static_cast< double >((3.141592653589793*3.0/2.0))));
+  SWIG_Python_SetConstant(d, "M_PI_315",SWIG_From_double(static_cast< double >((3.141592653589793*7.0/4.0))));
+  SWIG_Python_SetConstant(d, "M_PI_360",SWIG_From_double(static_cast< double >((3.141592653589793*2.0))));
+  SWIG_Python_SetConstant(d, "M_RAD_TO_DEG",SWIG_From_double(static_cast< double >((180.0/3.141592653589793))));
+  SWIG_Python_SetConstant(d, "M_DEG_TO_RAD",SWIG_From_double(static_cast< double >((3.141592653589793/180.0))));
+  SWIG_Python_SetConstant(d, "M_EULER",SWIG_From_double(static_cast< double >(2.718281828459045)));
+  SWIG_Python_SetConstant(d, "N_MEGABYTE_BYTES",SWIG_From_int(static_cast< int >(0x100000)));
+  SWIG_Python_SetConstant(d, "M_ALMOST_ZERO",SWIG_From_double(static_cast< double >(0.001)));
+  SWIG_Python_SetConstant(d, "M_TINY",SWIG_From_double(static_cast< double >((1.0e-20))));
+  SWIG_Python_SetConstant(d, "SG_CLUSTERANALYSIS_Minimum_Distance",SWIG_From_int(static_cast< int >(SG_CLUSTERANALYSIS_Minimum_Distance)));
+  SWIG_Python_SetConstant(d, "SG_CLUSTERANALYSIS_Hill_Climbing",SWIG_From_int(static_cast< int >(SG_CLUSTERANALYSIS_Hill_Climbing)));
+  SWIG_Python_SetConstant(d, "SG_CLUSTERANALYSIS_Combined",SWIG_From_int(static_cast< int >(SG_CLUSTERANALYSIS_Combined)));
+  SWIG_Python_SetConstant(d, "REGRESSION_Linear",SWIG_From_int(static_cast< int >(REGRESSION_Linear)));
+  SWIG_Python_SetConstant(d, "REGRESSION_Rez_X",SWIG_From_int(static_cast< int >(REGRESSION_Rez_X)));
+  SWIG_Python_SetConstant(d, "REGRESSION_Rez_Y",SWIG_From_int(static_cast< int >(REGRESSION_Rez_Y)));
+  SWIG_Python_SetConstant(d, "REGRESSION_Pow",SWIG_From_int(static_cast< int >(REGRESSION_Pow)));
+  SWIG_Python_SetConstant(d, "REGRESSION_Exp",SWIG_From_int(static_cast< int >(REGRESSION_Exp)));
+  SWIG_Python_SetConstant(d, "REGRESSION_Log",SWIG_From_int(static_cast< int >(REGRESSION_Log)));
+  SWIG_Python_SetConstant(d, "SG_TREND_STRING_Formula",SWIG_From_int(static_cast< int >(SG_TREND_STRING_Formula)));
+  SWIG_Python_SetConstant(d, "SG_TREND_STRING_Function",SWIG_From_int(static_cast< int >(SG_TREND_STRING_Function)));
+  SWIG_Python_SetConstant(d, "SG_TREND_STRING_Formula_Parameters",SWIG_From_int(static_cast< int >(SG_TREND_STRING_Formula_Parameters)));
+  SWIG_Python_SetConstant(d, "SG_TREND_STRING_Complete",SWIG_From_int(static_cast< int >(SG_TREND_STRING_Complete)));
+  SWIG_Python_SetConstant(d, "DATAOBJECT_TYPE_Grid",SWIG_From_int(static_cast< int >(DATAOBJECT_TYPE_Grid)));
+  SWIG_Python_SetConstant(d, "DATAOBJECT_TYPE_Table",SWIG_From_int(static_cast< int >(DATAOBJECT_TYPE_Table)));
+  SWIG_Python_SetConstant(d, "DATAOBJECT_TYPE_Shapes",SWIG_From_int(static_cast< int >(DATAOBJECT_TYPE_Shapes)));
+  SWIG_Python_SetConstant(d, "DATAOBJECT_TYPE_TIN",SWIG_From_int(static_cast< int >(DATAOBJECT_TYPE_TIN)));
+  SWIG_Python_SetConstant(d, "DATAOBJECT_TYPE_PointCloud",SWIG_From_int(static_cast< int >(DATAOBJECT_TYPE_PointCloud)));
+  SWIG_Python_SetConstant(d, "DATAOBJECT_TYPE_Undefined",SWIG_From_int(static_cast< int >(DATAOBJECT_TYPE_Undefined)));
+  SWIG_Python_SetConstant(d, "TABLE_FILETYPE_Undefined",SWIG_From_int(static_cast< int >(TABLE_FILETYPE_Undefined)));
+  SWIG_Python_SetConstant(d, "TABLE_FILETYPE_Text",SWIG_From_int(static_cast< int >(TABLE_FILETYPE_Text)));
+  SWIG_Python_SetConstant(d, "TABLE_FILETYPE_Text_NoHeadLine",SWIG_From_int(static_cast< int >(TABLE_FILETYPE_Text_NoHeadLine)));
+  SWIG_Python_SetConstant(d, "TABLE_FILETYPE_DBase",SWIG_From_int(static_cast< int >(TABLE_FILETYPE_DBase)));
+  SWIG_Python_SetConstant(d, "TABLE_INDEX_None",SWIG_From_int(static_cast< int >(TABLE_INDEX_None)));
+  SWIG_Python_SetConstant(d, "TABLE_INDEX_Ascending",SWIG_From_int(static_cast< int >(TABLE_INDEX_Ascending)));
+  SWIG_Python_SetConstant(d, "TABLE_INDEX_Descending",SWIG_From_int(static_cast< int >(TABLE_INDEX_Descending)));
+  SWIG_Python_SetConstant(d, "SG_TABLE_REC_FLAG_Modified",SWIG_From_int(static_cast< int >(0x01)));
+  SWIG_Python_SetConstant(d, "SG_TABLE_REC_FLAG_Selected",SWIG_From_int(static_cast< int >(0x02)));
+  SWIG_Python_SetConstant(d, "GRID_PYRAMID_Mean",SWIG_From_int(static_cast< int >(GRID_PYRAMID_Mean)));
+  SWIG_Python_SetConstant(d, "GRID_PYRAMID_Max",SWIG_From_int(static_cast< int >(GRID_PYRAMID_Max)));
+  SWIG_Python_SetConstant(d, "GRID_PYRAMID_Min",SWIG_From_int(static_cast< int >(GRID_PYRAMID_Min)));
+  SWIG_Python_SetConstant(d, "GRID_PYRAMID_MaxCount",SWIG_From_int(static_cast< int >(GRID_PYRAMID_MaxCount)));
+  SWIG_Python_SetConstant(d, "GRID_PYRAMID_Arithmetic",SWIG_From_int(static_cast< int >(GRID_PYRAMID_Arithmetic)));
+  SWIG_Python_SetConstant(d, "GRID_PYRAMID_Geometric",SWIG_From_int(static_cast< int >(GRID_PYRAMID_Geometric)));
+  SWIG_Python_SetConstant(d, "GRID_MEMORY_Normal",SWIG_From_int(static_cast< int >(GRID_MEMORY_Normal)));
+  SWIG_Python_SetConstant(d, "GRID_MEMORY_Cache",SWIG_From_int(static_cast< int >(GRID_MEMORY_Cache)));
+  SWIG_Python_SetConstant(d, "GRID_MEMORY_Compression",SWIG_From_int(static_cast< int >(GRID_MEMORY_Compression)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_FORMAT_Undefined",SWIG_From_int(static_cast< int >(GRID_FILE_FORMAT_Undefined)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_FORMAT_Binary",SWIG_From_int(static_cast< int >(GRID_FILE_FORMAT_Binary)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_FORMAT_ASCII",SWIG_From_int(static_cast< int >(GRID_FILE_FORMAT_ASCII)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_NAME",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_NAME)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_DESCRIPTION",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_DESCRIPTION)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_UNITNAME",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_UNITNAME)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_DATAFILE_NAME",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_DATAFILE_NAME)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_DATAFILE_OFFSET",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_DATAFILE_OFFSET)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_DATAFORMAT",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_DATAFORMAT)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_BYTEORDER_BIG",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_BYTEORDER_BIG)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_POSITION_XMIN",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_POSITION_XMIN)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_POSITION_YMIN",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_POSITION_YMIN)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_CELLCOUNT_X",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_CELLCOUNT_X)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_CELLCOUNT_Y",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_CELLCOUNT_Y)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_CELLSIZE",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_CELLSIZE)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_Z_FACTOR",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_Z_FACTOR)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_NODATA_VALUE",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_NODATA_VALUE)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_TOPTOBOTTOM",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_TOPTOBOTTOM)));
+  SWIG_Python_SetConstant(d, "GRID_FILE_KEY_Count",SWIG_From_int(static_cast< int >(GRID_FILE_KEY_Count)));
+  SWIG_addvarlink(SWIG_globals(),(char*)"gSG_Grid_File_Key_Names",Swig_var_gSG_Grid_File_Key_Names_get, Swig_var_gSG_Grid_File_Key_Names_set);
+  SWIG_Python_SetConstant(d, "GRID_INTERPOLATION_NearestNeighbour",SWIG_From_int(static_cast< int >(GRID_INTERPOLATION_NearestNeighbour)));
+  SWIG_Python_SetConstant(d, "GRID_INTERPOLATION_Bilinear",SWIG_From_int(static_cast< int >(GRID_INTERPOLATION_Bilinear)));
+  SWIG_Python_SetConstant(d, "GRID_INTERPOLATION_InverseDistance",SWIG_From_int(static_cast< int >(GRID_INTERPOLATION_InverseDistance)));
+  SWIG_Python_SetConstant(d, "GRID_INTERPOLATION_BicubicSpline",SWIG_From_int(static_cast< int >(GRID_INTERPOLATION_BicubicSpline)));
+  SWIG_Python_SetConstant(d, "GRID_INTERPOLATION_BSpline",SWIG_From_int(static_cast< int >(GRID_INTERPOLATION_BSpline)));
+  SWIG_Python_SetConstant(d, "GRID_INTERPOLATION_Mean_Nodes",SWIG_From_int(static_cast< int >(GRID_INTERPOLATION_Mean_Nodes)));
+  SWIG_Python_SetConstant(d, "GRID_INTERPOLATION_Mean_Cells",SWIG_From_int(static_cast< int >(GRID_INTERPOLATION_Mean_Cells)));
+  SWIG_Python_SetConstant(d, "GRID_INTERPOLATION_Minimum",SWIG_From_int(static_cast< int >(GRID_INTERPOLATION_Minimum)));
+  SWIG_Python_SetConstant(d, "GRID_INTERPOLATION_Maximum",SWIG_From_int(static_cast< int >(GRID_INTERPOLATION_Maximum)));
+  SWIG_Python_SetConstant(d, "GRID_INTERPOLATION_Majority",SWIG_From_int(static_cast< int >(GRID_INTERPOLATION_Majority)));
+  SWIG_Python_SetConstant(d, "GRID_INTERPOLATION_Undefined",SWIG_From_int(static_cast< int >(GRID_INTERPOLATION_Undefined)));
+  SWIG_Python_SetConstant(d, "GRID_OPERATION_Addition",SWIG_From_int(static_cast< int >(GRID_OPERATION_Addition)));
+  SWIG_Python_SetConstant(d, "GRID_OPERATION_Subtraction",SWIG_From_int(static_cast< int >(GRID_OPERATION_Subtraction)));
+  SWIG_Python_SetConstant(d, "GRID_OPERATION_Multiplication",SWIG_From_int(static_cast< int >(GRID_OPERATION_Multiplication)));
+  SWIG_Python_SetConstant(d, "GRID_OPERATION_Division",SWIG_From_int(static_cast< int >(GRID_OPERATION_Division)));
+  SWIG_Python_SetConstant(d, "SG_VERTEX_TYPE_XY",SWIG_From_int(static_cast< int >(SG_VERTEX_TYPE_XY)));
+  SWIG_Python_SetConstant(d, "SG_VERTEX_TYPE_XYZ",SWIG_From_int(static_cast< int >(SG_VERTEX_TYPE_XYZ)));
+  SWIG_Python_SetConstant(d, "SG_VERTEX_TYPE_XYZM",SWIG_From_int(static_cast< int >(SG_VERTEX_TYPE_XYZM)));
+  SWIG_Python_SetConstant(d, "SHAPE_TYPE_Undefined",SWIG_From_int(static_cast< int >(SHAPE_TYPE_Undefined)));
+  SWIG_Python_SetConstant(d, "SHAPE_TYPE_Point",SWIG_From_int(static_cast< int >(SHAPE_TYPE_Point)));
+  SWIG_Python_SetConstant(d, "SHAPE_TYPE_Points",SWIG_From_int(static_cast< int >(SHAPE_TYPE_Points)));
+  SWIG_Python_SetConstant(d, "SHAPE_TYPE_Line",SWIG_From_int(static_cast< int >(SHAPE_TYPE_Line)));
+  SWIG_Python_SetConstant(d, "SHAPE_TYPE_Polygon",SWIG_From_int(static_cast< int >(SHAPE_TYPE_Polygon)));
+  SWIG_Python_SetConstant(d, "SHAPE_NO_COPY",SWIG_From_int(static_cast< int >(SHAPE_NO_COPY)));
+  SWIG_Python_SetConstant(d, "SHAPE_COPY_GEOM",SWIG_From_int(static_cast< int >(SHAPE_COPY_GEOM)));
+  SWIG_Python_SetConstant(d, "SHAPE_COPY_ATTR",SWIG_From_int(static_cast< int >(SHAPE_COPY_ATTR)));
+  SWIG_Python_SetConstant(d, "SHAPE_COPY",SWIG_From_int(static_cast< int >(SHAPE_COPY)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_BYTEORDER_XDR",SWIG_From_int(static_cast< int >(SG_OGIS_BYTEORDER_XDR)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_BYTEORDER_NDR",SWIG_From_int(static_cast< int >(SG_OGIS_BYTEORDER_NDR)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_Point",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_Point)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_LineString",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_LineString)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_Polygon",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_Polygon)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiPoint",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiPoint)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiLineString",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiLineString)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiPolygon",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiPolygon)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_GeometryCollection",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_GeometryCollection)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_PolyhedralSurface",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_PolyhedralSurface)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_TIN",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_TIN)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_Triangle",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_Triangle)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_PointZ",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_PointZ)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_LineStringZ",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_LineStringZ)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_PolygonZ",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_PolygonZ)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiPointZ",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiPointZ)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiLineStringZ",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiLineStringZ)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiPolygonZ",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiPolygonZ)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_GeometryCollectionZ",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_GeometryCollectionZ)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_PolyhedralSurfaceZ",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_PolyhedralSurfaceZ)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_TINZ",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_TINZ)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_Trianglez",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_Trianglez)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_PointM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_PointM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_LineStringM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_LineStringM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_PolygonM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_PolygonM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiPointM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiPointM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiLineStringM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiLineStringM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiPolygonM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiPolygonM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_GeometryCollectionM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_GeometryCollectionM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_PolyhedralSurfaceM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_PolyhedralSurfaceM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_TINM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_TINM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_TriangleM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_TriangleM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_PointZM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_PointZM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_LineStringZM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_LineStringZM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_PolygonZM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_PolygonZM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiPointZM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiPointZM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiLineStringZM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiLineStringZM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_MultiPolygonZM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_MultiPolygonZM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_GeometryCollectionZM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_GeometryCollectionZM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_PolyhedralSurfaceZM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_PolyhedralSurfaceZM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_TinZM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_TinZM)));
+  SWIG_Python_SetConstant(d, "SG_OGIS_TYPE_TriangleZM",SWIG_From_int(static_cast< int >(SG_OGIS_TYPE_TriangleZM)));
+  SWIG_Python_SetConstant(d, "PARAMETER_INPUT",SWIG_From_int(static_cast< int >(0x01)));
+  SWIG_Python_SetConstant(d, "PARAMETER_OUTPUT",SWIG_From_int(static_cast< int >(0x02)));
+  SWIG_Python_SetConstant(d, "PARAMETER_OPTIONAL",SWIG_From_int(static_cast< int >(0x04)));
+  SWIG_Python_SetConstant(d, "PARAMETER_INFORMATION",SWIG_From_int(static_cast< int >(0x08)));
+  SWIG_Python_SetConstant(d, "PARAMETER_IGNORE_PROJECTION",SWIG_From_int(static_cast< int >(0x10)));
+  SWIG_Python_SetConstant(d, "PARAMETER_INPUT_OPTIONAL",SWIG_From_int(static_cast< int >((0x01|0x04))));
+  SWIG_Python_SetConstant(d, "PARAMETER_OUTPUT_OPTIONAL",SWIG_From_int(static_cast< int >((0x02|0x04))));
+  SWIG_Python_SetConstant(d, "PARAMETER_DESCRIPTION_NAME",SWIG_From_int(static_cast< int >(0x01)));
+  SWIG_Python_SetConstant(d, "PARAMETER_DESCRIPTION_TYPE",SWIG_From_int(static_cast< int >(0x02)));
+  SWIG_Python_SetConstant(d, "PARAMETER_DESCRIPTION_OPTIONAL",SWIG_From_int(static_cast< int >(0x04)));
+  SWIG_Python_SetConstant(d, "PARAMETER_DESCRIPTION_PROPERTIES",SWIG_From_int(static_cast< int >(0x08)));
+  SWIG_Python_SetConstant(d, "PARAMETER_DESCRIPTION_TEXT",SWIG_From_int(static_cast< int >(0x10)));
+  SWIG_Python_SetConstant(d, "PARAMETER_DESCRIPTION_ALL",SWIG_From_int(static_cast< int >((0x01|0x02|0x04|0x08|0x10))));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Node",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Node)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Bool",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Bool)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Int",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Int)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Double",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Double)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Degree",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Degree)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Range",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Range)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Choice",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Choice)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_String",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_String)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Text",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Text)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_FilePath",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_FilePath)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Font",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Font)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Color",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Color)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Colors",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Colors)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_FixedTable",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_FixedTable)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Grid_System",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Grid_System)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Table_Field",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Table_Field)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_PointCloud",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_PointCloud)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Grid",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Grid)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Table",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Table)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Shapes",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Shapes)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_TIN",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_TIN)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Grid_List",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Grid_List)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Table_List",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Table_List)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Shapes_List",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Shapes_List)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_TIN_List",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_TIN_List)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_PointCloud_List",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_PointCloud_List)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_DataObject_Output",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_DataObject_Output)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Parameters",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Parameters)));
+  SWIG_Python_SetConstant(d, "PARAMETER_TYPE_Undefined",SWIG_From_int(static_cast< int >(PARAMETER_TYPE_Undefined)));
+  SWIG_Python_SetConstant(d, "MODULE_TYPE_Base",SWIG_From_int(static_cast< int >(MODULE_TYPE_Base)));
+  SWIG_Python_SetConstant(d, "MODULE_TYPE_Interactive",SWIG_From_int(static_cast< int >(MODULE_TYPE_Interactive)));
+  SWIG_Python_SetConstant(d, "MODULE_TYPE_Grid",SWIG_From_int(static_cast< int >(MODULE_TYPE_Grid)));
+  SWIG_Python_SetConstant(d, "MODULE_TYPE_Grid_Interactive",SWIG_From_int(static_cast< int >(MODULE_TYPE_Grid_Interactive)));
+  SWIG_Python_SetConstant(d, "MODULE_ERROR_Unknown",SWIG_From_int(static_cast< int >(MODULE_ERROR_Unknown)));
+  SWIG_Python_SetConstant(d, "MODULE_ERROR_Calculation",SWIG_From_int(static_cast< int >(MODULE_ERROR_Calculation)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_UNDEFINED",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_UNDEFINED)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_LDOWN",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_LDOWN)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_LUP",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_LUP)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_LDCLICK",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_LDCLICK)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_MDOWN",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_MDOWN)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_MUP",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_MUP)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_MDCLICK",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_MDCLICK)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_RDOWN",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_RDOWN)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_RUP",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_RUP)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_RDCLICK",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_RDCLICK)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_MOVE",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_MOVE)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_MOVE_LDOWN",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_MOVE_LDOWN)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_MOVE_MDOWN",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_MOVE_MDOWN)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_MOVE_RDOWN",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_MOVE_RDOWN)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_DRAG_NONE",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_DRAG_NONE)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_DRAG_LINE",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_DRAG_LINE)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_DRAG_BOX",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_DRAG_BOX)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_DRAG_CIRCLE",SWIG_From_int(static_cast< int >(MODULE_INTERACTIVE_DRAG_CIRCLE)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_KEY_LEFT",SWIG_From_int(static_cast< int >(0x01)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_KEY_MIDDLE",SWIG_From_int(static_cast< int >(0x02)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_KEY_RIGHT",SWIG_From_int(static_cast< int >(0x04)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_KEY_SHIFT",SWIG_From_int(static_cast< int >(0x08)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_KEY_ALT",SWIG_From_int(static_cast< int >(0x10)));
+  SWIG_Python_SetConstant(d, "MODULE_INTERACTIVE_KEY_CTRL",SWIG_From_int(static_cast< int >(0x20)));
+  SWIG_Python_SetConstant(d, "MLB_INFO_Name",SWIG_From_int(static_cast< int >(MLB_INFO_Name)));
+  SWIG_Python_SetConstant(d, "MLB_INFO_Description",SWIG_From_int(static_cast< int >(MLB_INFO_Description)));
+  SWIG_Python_SetConstant(d, "MLB_INFO_Author",SWIG_From_int(static_cast< int >(MLB_INFO_Author)));
+  SWIG_Python_SetConstant(d, "MLB_INFO_Version",SWIG_From_int(static_cast< int >(MLB_INFO_Version)));
+  SWIG_Python_SetConstant(d, "MLB_INFO_Menu_Path",SWIG_From_int(static_cast< int >(MLB_INFO_Menu_Path)));
+  SWIG_Python_SetConstant(d, "MLB_INFO_User",SWIG_From_int(static_cast< int >(MLB_INFO_User)));
+  SWIG_Python_SetConstant(d, "MLB_INFO_Count",SWIG_From_int(static_cast< int >(MLB_INFO_Count)));
+#if PY_VERSION_HEX >= 0x03000000
+  return m;
+#else
+  return;
+#endif
+}
+
diff --git a/src/saga_core/saga_api/shape.cpp b/src/saga_core/saga_api/shape.cpp
index 217b7ff..5d55c08 100644
--- a/src/saga_core/saga_api/shape.cpp
+++ b/src/saga_core/saga_api/shape.cpp
@@ -154,6 +154,8 @@ int CSG_Shape::Set_Point(TSG_Point Point, int iPoint, int iPart)
 inline void CSG_Shape::_Invalidate(void)
 {
 	((CSG_Shapes *)m_pTable)->Set_Update_Flag();
+	
+	Set_Modified();
 }
 
 
diff --git a/src/saga_core/saga_api/shapes.cpp b/src/saga_core/saga_api/shapes.cpp
index e6c0665..0f6ee5c 100644
--- a/src/saga_core/saga_api/shapes.cpp
+++ b/src/saga_core/saga_api/shapes.cpp
@@ -61,6 +61,7 @@
 
 //---------------------------------------------------------
 #include "shapes.h"
+#include "pointcloud.h"
 
 
 ///////////////////////////////////////////////////////////
@@ -100,7 +101,17 @@ CSG_Shapes *		SG_Create_Shapes(void)
 //---------------------------------------------------------
 CSG_Shapes *		SG_Create_Shapes(const CSG_Shapes &Shapes)
 {
-	return( new CSG_Shapes(Shapes) );
+	switch( Shapes.Get_ObjectType() )
+	{
+	case DATAOBJECT_TYPE_Shapes:
+		return( new CSG_Shapes(Shapes) );
+
+	case DATAOBJECT_TYPE_PointCloud:
+		return( SG_Create_PointCloud(*((CSG_PointCloud *)&Shapes)) );
+
+	default:
+		return( NULL );
+	}
 }
 
 //---------------------------------------------------------
@@ -115,6 +126,27 @@ CSG_Shapes *		SG_Create_Shapes(TSG_Shape_Type Type, const SG_Char *Name, CSG_Tab
 	return( new CSG_Shapes(Type, Name, pStructure, Vertex_Type) );
 }
 
+//---------------------------------------------------------
+CSG_Shapes *		SG_Create_Shapes(CSG_Shapes *pTemplate)
+{
+	if( pTemplate )
+	{
+		switch( pTemplate->Get_ObjectType() )
+		{
+		case DATAOBJECT_TYPE_Shapes:
+			return( new CSG_Shapes(pTemplate->Get_Type(), pTemplate->Get_Name(), pTemplate, pTemplate->Get_Vertex_Type()) );
+
+		case DATAOBJECT_TYPE_PointCloud:
+			return( SG_Create_PointCloud((CSG_PointCloud *)pTemplate) );
+
+		default:
+			break;
+		}
+	}
+
+	return( new CSG_Shapes() );
+}
+
 
 ///////////////////////////////////////////////////////////
 //														 //
diff --git a/src/saga_core/saga_api/shapes.h b/src/saga_core/saga_api/shapes.h
index de8fee2..64d2552 100644
--- a/src/saga_core/saga_api/shapes.h
+++ b/src/saga_core/saga_api/shapes.h
@@ -763,6 +763,9 @@ SAGA_API_DLL_EXPORT CSG_Shapes *	SG_Create_Shapes	(const CSG_String &File_Name);
 /** Safe shapes construction */
 SAGA_API_DLL_EXPORT CSG_Shapes *	SG_Create_Shapes	(TSG_Shape_Type Type, const SG_Char *Name = NULL, CSG_Table *pStructure = NULL, TSG_Vertex_Type Vertex_Type = SG_VERTEX_TYPE_XY);
 
+/** Safe shapes construction */
+SAGA_API_DLL_EXPORT CSG_Shapes *	SG_Create_Shapes	(CSG_Shapes *pTemplate);
+
 
 ///////////////////////////////////////////////////////////
 //														 //
diff --git a/src/saga_core/saga_api/shapes_io.cpp b/src/saga_core/saga_api/shapes_io.cpp
index 9005aec..3f7272b 100644
--- a/src/saga_core/saga_api/shapes_io.cpp
+++ b/src/saga_core/saga_api/shapes_io.cpp
@@ -340,15 +340,36 @@ bool CSG_Shapes::_Load_ESRI(const CSG_String &File_Name)
 					break;
 
 				case SG_DATATYPE_Date:
-					pShape->Set_Value(iField, fDBF.asDouble(iField) );
+					{
+						int		Value;
+
+						if( fDBF.asInt(iField, Value) )
+							pShape->Set_Value(iField, Value);
+						else
+							pShape->Set_NoData(iField);
+					}
 					break;
 
 				case SG_DATATYPE_Long:
-					pShape->Set_Value(iField, fDBF.asInt(iField) );
+					{
+						int		Value;
+
+						if( fDBF.asInt(iField, Value) )
+							pShape->Set_Value(iField, Value);
+						else
+							pShape->Set_NoData(iField);
+					}
 					break;
 
 				case SG_DATATYPE_Double:
-					pShape->Set_Value(iField, fDBF.asDouble(iField) );
+					{
+						double	Value;
+
+						if( fDBF.asDouble(iField, Value) )
+							pShape->Set_Value(iField, Value);
+						else
+							pShape->Set_NoData(iField);
+					}
 					break;
 				}
 			}
@@ -677,7 +698,14 @@ bool CSG_Shapes::_Save_ESRI(const CSG_String &File_Name)
 				break;
 
 			case DBF_FT_NUMERIC:
-				fDBF.Set_Value(iField, pShape->asDouble(iField));
+				if( pShape->is_NoData(iField) )
+				{
+					fDBF.Set_NoData(iField);
+				}
+				else
+				{
+					fDBF.Set_Value(iField, pShape->asDouble(iField));
+				}
 				break;
 			}
 		}
diff --git a/src/saga_core/saga_api/table.cpp b/src/saga_core/saga_api/table.cpp
index bc10a88..057c651 100644
--- a/src/saga_core/saga_api/table.cpp
+++ b/src/saga_core/saga_api/table.cpp
@@ -79,7 +79,18 @@ CSG_Table * SG_Create_Table(void)
 //---------------------------------------------------------
 CSG_Table * SG_Create_Table(const CSG_Table &Table)
 {
-	return( new CSG_Table(Table) );
+	switch( Table.Get_ObjectType() )
+	{
+	case DATAOBJECT_TYPE_Table:
+		return( new CSG_Table(Table) );
+
+	case DATAOBJECT_TYPE_Shapes:
+	case DATAOBJECT_TYPE_PointCloud:
+		return( SG_Create_Shapes(*((CSG_Shapes *)&Table)) );
+
+	default:
+		return( NULL );
+	}
 }
 
 //---------------------------------------------------------
@@ -89,9 +100,25 @@ CSG_Table * SG_Create_Table(const CSG_String &File_Name)
 }
 
 //---------------------------------------------------------
-CSG_Table * SG_Create_Table(CSG_Table *pStructure)
+CSG_Table * SG_Create_Table(CSG_Table *pTemplate)
 {
-	return( new CSG_Table(pStructure) );
+	if( pTemplate )
+	{
+		switch( pTemplate->Get_ObjectType() )
+		{
+		case DATAOBJECT_TYPE_Table:
+			return( new CSG_Table(pTemplate) );
+
+		case DATAOBJECT_TYPE_Shapes:
+		case DATAOBJECT_TYPE_PointCloud:
+			return( SG_Create_Shapes((CSG_Shapes *)pTemplate) );
+
+		default:
+			break;
+		}
+	}
+
+	return( new CSG_Table() );
 }
 
 
@@ -167,28 +194,28 @@ bool CSG_Table::_Create(const CSG_String &File_Name, TSG_Table_File_Type Format,
 }
 
 //---------------------------------------------------------
-CSG_Table::CSG_Table(CSG_Table *pStructure)
+CSG_Table::CSG_Table(CSG_Table *pTemplate)
 	: CSG_Data_Object()
 {
 	_On_Construction();
 
-	Create(pStructure);
+	Create(pTemplate);
 }
 
-bool CSG_Table::Create(CSG_Table *pStructure)
+bool CSG_Table::Create(CSG_Table *pTemplate)
 {
-	return( is_Private() ? false : _Create(pStructure) );
+	return( is_Private() ? false : _Create(pTemplate) );
 }
 
-bool CSG_Table::_Create(CSG_Table *pStructure)
+bool CSG_Table::_Create(CSG_Table *pTemplate)
 {
 	_Destroy();
 
-	if( pStructure && pStructure->Get_Field_Count() > 0 )
+	if( pTemplate && pTemplate->Get_Field_Count() > 0 )
 	{
-		for(int i=0; i<pStructure->Get_Field_Count(); i++)
+		for(int i=0; i<pTemplate->Get_Field_Count(); i++)
 		{
-			Add_Field(pStructure->Get_Field_Name(i), pStructure->Get_Field_Type(i));
+			Add_Field(pTemplate->Get_Field_Name(i), pTemplate->Get_Field_Type(i));
 		}
 
 		return( true );
diff --git a/src/saga_core/saga_api/table.h b/src/saga_core/saga_api/table.h
index 6ce6c74..477f3aa 100644
--- a/src/saga_core/saga_api/table.h
+++ b/src/saga_core/saga_api/table.h
@@ -222,8 +222,8 @@ public:
 									CSG_Table			(const CSG_String &File_Name, TSG_Table_File_Type Format, const SG_Char *Separator);
 	bool							Create				(const CSG_String &File_Name, TSG_Table_File_Type Format, const SG_Char *Separator);
 
-									CSG_Table			(CSG_Table *pStructure);
-	bool							Create				(CSG_Table *pStructure);
+									CSG_Table			(CSG_Table *pTemplate);
+	bool							Create				(CSG_Table *pTemplate);
 
 	virtual ~CSG_Table(void);
 
@@ -343,7 +343,7 @@ protected:
 
 	bool							_Create				(const CSG_Table &Table);
 	bool							_Create				(const CSG_String &File_Name, TSG_Table_File_Type Format, const SG_Char *Separator);
-	bool							_Create				(CSG_Table *pStructure);
+	bool							_Create				(CSG_Table *pTemplate);
 
 	bool							_Stats_Invalidate	(void)			const;
 	bool							_Stats_Invalidate	(int iField)	const;
@@ -405,7 +405,7 @@ SAGA_API_DLL_EXPORT CSG_Table *	SG_Create_Table	(const CSG_Table &Table);
 SAGA_API_DLL_EXPORT CSG_Table *	SG_Create_Table	(const CSG_String &File_Name);
 
 /** Safe table construction */
-SAGA_API_DLL_EXPORT CSG_Table *	SG_Create_Table	(CSG_Table *pStructure);
+SAGA_API_DLL_EXPORT CSG_Table *	SG_Create_Table	(CSG_Table *pTemplate);
 
 
 ///////////////////////////////////////////////////////////
diff --git a/src/saga_core/saga_api/table_dbase.cpp b/src/saga_core/saga_api/table_dbase.cpp
index a938d19..543f62c 100644
--- a/src/saga_core/saga_api/table_dbase.cpp
+++ b/src/saga_core/saga_api/table_dbase.cpp
@@ -557,101 +557,109 @@ void CSG_Table_DBase::Flush_Record(void)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-int CSG_Table_DBase::asInt(int iField)
+bool CSG_Table_DBase::asInt(int iField, int &Value)
 {
-	char	*s;
-	int		Result	= 0;
-
 	if( bOpen && iField >= 0 && iField < nFields )
 	{
+		char		*c;
+		int			i;
+		CSG_String	s;
+
+		for(i=0, c=Record+FieldOffset[iField]; i<FieldDesc[iField].Width && *c; i++, c++)
+		{
+			s	+= *c;
+		}
+
 		if( FieldDesc[iField].Type == DBF_FT_NUMERIC )
 		{
-			s		= (char *)SG_Calloc(FieldDesc[iField].Width + 1, sizeof(char));
-			memcpy(s, Record + FieldOffset[iField], FieldDesc[iField].Width);
-			Result	= atoi(s);
-			SG_Free(s);
+			return( s.asInt(Value) );
+		}
+
+		else if( FieldDesc[iField].Type == DBF_FT_DATE && s.Length() >= 8 )
+		{
+			int	d	= s.Mid(6, 2).asInt();	if( d < 1 )	d	= 1;	else if( d > 31 )	d	= 31;
+			int	m	= s.Mid(4, 2).asInt();	if( m < 1 )	m	= 1;	else if( m > 12 )	m	= 12;
+			int	y	= s.Mid(0, 4).asInt();
+
+			Value	= 10000 * y + 100 * m + d;
+
+			return( true );
 		}
 	}
 
-	return( Result );
+	return( false );
 }
 
 //---------------------------------------------------------
-double CSG_Table_DBase::asDouble(int iField)
+bool CSG_Table_DBase::asDouble(int iField, double &Value)
 {
-	char	*s;
-	double	Result	= 0;
-
 	if( bOpen && iField >= 0 && iField < nFields )
 	{
-		if( FieldDesc[iField].Type == DBF_FT_NUMERIC )
-		{
-			s		= (char *)SG_Calloc(FieldDesc[iField].Width + 1, sizeof(char));
-			memcpy(s, Record + FieldOffset[iField], FieldDesc[iField].Width);
-
-			Result	= atof(s);
+		char		*c;
+		int			i;
+		CSG_String	s;
 
-			SG_Free(s);
+		for(i=0, c=Record+FieldOffset[iField]; i<FieldDesc[iField].Width && *c; i++, c++)
+		{
+			s	+= *c;
 		}
-		else if( FieldDesc[iField].Type == DBF_FT_DATE )
+
+		if( FieldDesc[iField].Type == DBF_FT_NUMERIC )
 		{
-			s		= (char *)SG_Calloc(FieldDesc[iField].Width + 1, sizeof(char));
-			memcpy(s, Record + FieldOffset[iField], FieldDesc[iField].Width);
+			return( s.asDouble(Value) );
+		}
 
-			int	d	= atoi(s + 6);	s[6]	= '\0';	if( d < 1 )	d	= 1;	else if( d > 31 )	d	= 31;
-			int	m	= atoi(s + 4);	s[4]	= '\0';	if( m < 1 )	m	= 1;	else if( m > 12 )	m	= 12;
-			int	y	= atoi(s);		
+		else if( FieldDesc[iField].Type == DBF_FT_DATE && s.Length() >= 8 )
+		{
+			int	d	= s.Mid(6, 2).asInt();	if( d < 1 )	d	= 1;	else if( d > 31 )	d	= 31;
+			int	m	= s.Mid(4, 2).asInt();	if( m < 1 )	m	= 1;	else if( m > 12 )	m	= 12;
+			int	y	= s.Mid(0, 4).asInt();
 
-			Result	= 10000 * y + 100 * m + 1 * d;
+			Value	= 10000 * y + 100 * m + d;
 
-			SG_Free(s);
+			return( true );
 		}
 	}
 
-	return( Result );
+	return( false );
 }
 
 //---------------------------------------------------------
-char * CSG_Table_DBase::asString(int iField)
+CSG_String CSG_Table_DBase::asString(int iField)
 {
+	CSG_String	Value;
+
 	if( bOpen && iField >= 0 && iField < nFields )
 	{
 		if( FieldDesc[iField].Type != DBF_FT_DATE )
 		{
-			int		i			= FieldDesc[iField].Width;
-			Result_String		= (char *)SG_Realloc(Result_String, (i + 1) * sizeof(char));
-			memcpy(Result_String, Record + FieldOffset[iField], FieldDesc[iField].Width);
+			char	*c;
+			int		i;
 
-			Result_String[i--]	= '\0';
-
-			while( i >= 0 && Result_String[i] == ' ' )
+			for(i=0, c=Record+FieldOffset[iField]; i<FieldDesc[iField].Width && *c; i++, c++)
 			{
-				Result_String[i--]	= '\0';
+				Value	+= *c;
 			}
 		}
+
 		else // if( FieldDesc[iField].Type == DBF_FT_DATE )	// SAGA(DD.MM.YYYY) from DBASE(YYYYMMDD)
 		{
 			char	*s	= Record + FieldOffset[iField];
 
-			Result_String		= (char *)SG_Realloc(Result_String, (10 + 1) * sizeof(char));
-
-			Result_String[0]	= s[6];	// D1
-			Result_String[1]	= s[7];	// D2
-			Result_String[2]	= '.';
-			Result_String[3]	= s[4];	// M1
-			Result_String[4]	= s[5];	// M2
-			Result_String[5]	= '.';
-			Result_String[6]	= s[0];	// Y1
-			Result_String[7]	= s[1];	// Y2
-			Result_String[8]	= s[2];	// Y3
-			Result_String[9]	= s[3];	// Y4
-			Result_String[2]	= '\0';
+			Value	+= s[6];	// D1
+			Value	+= s[7];	// D2
+			Value	+= '.';
+			Value	+= s[4];	// M1
+			Value	+= s[5];	// M2
+			Value	+= '.';
+			Value	+= s[0];	// Y1
+			Value	+= s[1];	// Y2
+			Value	+= s[2];	// Y3
+			Value	+= s[3];	// Y4
 		}
-
-		return( Result_String );
 	}
 
-	return( "" );
+	return( Value );
 }
 
 
@@ -763,6 +771,17 @@ bool CSG_Table_DBase::Set_Value(int iField, const char *Value)
 	return( false );
 }
 
+//---------------------------------------------------------
+bool CSG_Table_DBase::Set_NoData(int iField)
+{
+	if( bOpen && iField >= 0 && iField < nFields && FieldDesc[iField].Width > 0 )
+	{
+		memset(Record + FieldOffset[iField], ' ', FieldDesc[iField].Width);
+	}
+
+	return( true );
+}
+
 
 ///////////////////////////////////////////////////////////
 //														 //
diff --git a/src/saga_core/saga_api/table_dbase.h b/src/saga_core/saga_api/table_dbase.h
index ca80a1c..20c4281 100644
--- a/src/saga_core/saga_api/table_dbase.h
+++ b/src/saga_core/saga_api/table_dbase.h
@@ -71,7 +71,7 @@
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-#include <stdio.h>
+#include "api_core.h"
 
 
 ///////////////////////////////////////////////////////////
@@ -158,13 +158,14 @@ public:
 	void						Flush_Record		(void);
 
 	//-----------------------------------------------------
-	int							asInt				(int iField);
-	double						asDouble			(int iField);
-	char *						asString			(int iField);
+	bool						asInt				(int iField, int    &Value);
+	bool						asDouble			(int iField, double &Value);
+	CSG_String					asString			(int iField);
 
 	//-----------------------------------------------------
-	bool						Set_Value			(int iField, double Value);
+	bool						Set_Value			(int iField, double      Value);
 	bool						Set_Value			(int iField, const char *Value);
+	bool						Set_NoData			(int iField);
 
 
 protected:
diff --git a/src/saga_core/saga_api/table_io.cpp b/src/saga_core/saga_api/table_io.cpp
index df062fb..91c9b78 100644
--- a/src/saga_core/saga_api/table_io.cpp
+++ b/src/saga_core/saga_api/table_io.cpp
@@ -331,7 +331,7 @@ bool CSG_Table::_Load_Text(const CSG_String &File_Name, bool bHeadline, const SG
 			{
 				switch( Get_Field_Type(iField) )
 				{
-				default:						pRecord->Set_Value(iField, Table[iRecord].asString(iField));	break;
+				default:					pRecord->Set_Value(iField, Table[iRecord].asString(iField));	break;
 				case SG_DATATYPE_Int:		pRecord->Set_Value(iField, Table[iRecord].asInt   (iField));	break;
 				case SG_DATATYPE_Double:	pRecord->Set_Value(iField, Table[iRecord].asDouble(iField));	break;
 				}
@@ -449,15 +449,36 @@ bool CSG_Table::_Load_DBase(const CSG_String &File_Name)
 						break;
 
 					case SG_DATATYPE_Date:
-						pRecord->Set_Value(iField, dbf.asDouble(iField) );
+						{
+							int		Value;
+
+							if( dbf.asInt(iField, Value) )
+								pRecord->Set_Value(iField, Value);
+							else
+								pRecord->Set_NoData(iField);
+						}
 						break;
 
 					case SG_DATATYPE_Long:
-						pRecord->Set_Value(iField, dbf.asInt(iField) );
+						{
+							int		Value;
+
+							if( dbf.asInt(iField, Value) )
+								pRecord->Set_Value(iField, Value);
+							else
+								pRecord->Set_NoData(iField);
+						}
 						break;
 
 					case SG_DATATYPE_Double:
-						pRecord->Set_Value(iField, dbf.asDouble(iField) );
+						{
+							double	Value;
+
+							if( dbf.asDouble(iField, Value) )
+								pRecord->Set_Value(iField, Value);
+							else
+								pRecord->Set_NoData(iField);
+						}
 						break;
 					}
 				}
@@ -485,6 +506,7 @@ bool CSG_Table::_Save_DBase(const CSG_String &File_Name)
 {
 	int				iField, iRecord, nBytes;
 	CSG_Table_DBase	dbf;
+	CSG_String		sFile_Name	= SG_File_Make_Path(NULL, File_Name, SG_T("dbf"));
 
 	//-----------------------------------------------------
 	CSG_Table_DBase::TFieldDesc	*dbfFields	= new CSG_Table_DBase::TFieldDesc[Get_Field_Count()];
@@ -528,7 +550,7 @@ bool CSG_Table::_Save_DBase(const CSG_String &File_Name)
 		}
 	}
 
-	if( !dbf.Open(File_Name, Get_Field_Count(), dbfFields) )
+	if( !dbf.Open(sFile_Name, Get_Field_Count(), dbfFields) )
 	{
 		delete[](dbfFields);
 
@@ -556,7 +578,14 @@ bool CSG_Table::_Save_DBase(const CSG_String &File_Name)
 				break;
 
 			case DBF_FT_NUMERIC:
-				dbf.Set_Value(iField, pRecord->asDouble(iField));
+				if( pRecord->is_NoData(iField) )
+				{
+					dbf.Set_NoData(iField);
+				}
+				else
+				{
+					dbf.Set_Value(iField, pRecord->asDouble(iField));
+				}
 				break;
 			}
 		}
diff --git a/src/saga_core/saga_cmd/Makefile.am b/src/saga_core/saga_cmd/Makefile.am
index 4d23f32..6c0a4bb 100644
--- a/src/saga_core/saga_cmd/Makefile.am
+++ b/src/saga_core/saga_cmd/Makefile.am
@@ -1,14 +1,14 @@
 #
-# $Id: Makefile.am,v 1.10 2010/07/22 12:47:12 johanvdw Exp $
+# $Id: Makefile.am,v 1.11 2010/08/29 15:53:54 johanvdw Exp $
 #
 if DEBUG
 DBGFLAGS = -g -DDEBUG
 endif
 
 MLIBPATH = "MODULE_LIBRARY_PATH=\"$(prefix)/lib/saga\""
-BASEFLAGS = -D_SAGA_LINUX -D_SAGA_UNICODE -D_TYPEDEF_BYTE -D_TYPEDEF_WORD $(DBGFLAGS) -I.. -D$(MLIBPATH)
+BASEFLAGS = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD $(DBGFLAGS) -I.. -D$(MLIBPATH)
 if SAGA_UNICODE
-AM_CXXFLAGS = -fPIC `wx-config --unicode=yes --cxxflags` $(BASEFLAGS)
+AM_CXXFLAGS = -fPIC `wx-config --unicode=yes --cxxflags` $(BASEFLAGS) -D_SAGA_UNICODE
 AM_LDFLAGS = -fPIC `wx-config --unicode=yes --libs` -lm
 else
 AM_CXXFLAGS = -fPIC `wx-config --unicode=no --cxxflags` $(BASEFLAGS)
diff --git a/src/saga_core/saga_cmd/Makefile.in b/src/saga_core/saga_cmd/Makefile.in
index 0690f93..b520afd 100644
--- a/src/saga_core/saga_cmd/Makefile.in
+++ b/src/saga_core/saga_cmd/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -38,7 +38,13 @@ bin_PROGRAMS = saga_cmd$(EXEEXT)
 subdir = src/saga_core/saga_cmd
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -122,6 +128,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -171,14 +179,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -222,9 +243,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -235,13 +260,13 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.10 2010/07/22 12:47:12 johanvdw Exp $
+# $Id: Makefile.am,v 1.11 2010/08/29 15:53:54 johanvdw Exp $
 #
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
 MLIBPATH = "MODULE_LIBRARY_PATH=\"$(prefix)/lib/saga\""
-BASEFLAGS = -D_SAGA_LINUX -D_SAGA_UNICODE -D_TYPEDEF_BYTE -D_TYPEDEF_WORD $(DBGFLAGS) -I.. -D$(MLIBPATH)
+BASEFLAGS = -D_SAGA_LINUX -D_TYPEDEF_BYTE -D_TYPEDEF_WORD $(DBGFLAGS) -I.. -D$(MLIBPATH)
 @SAGA_UNICODE_FALSE at AM_CXXFLAGS = -fPIC `wx-config --unicode=no --cxxflags` $(BASEFLAGS)
- at SAGA_UNICODE_TRUE@AM_CXXFLAGS = -fPIC `wx-config --unicode=yes --cxxflags` $(BASEFLAGS)
+ at SAGA_UNICODE_TRUE@AM_CXXFLAGS = -fPIC `wx-config --unicode=yes --cxxflags` $(BASEFLAGS) -D_SAGA_UNICODE
 @SAGA_UNICODE_FALSE at AM_LDFLAGS = -fPIC `wx-config --unicode=no --libs` -lm
 @SAGA_UNICODE_TRUE at AM_LDFLAGS = -fPIC `wx-config --unicode=yes --libs` -lm
 saga_cmd_LDADD = ../saga_api/libsaga_api.la
@@ -378,7 +403,7 @@ clean-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]*);; \
@@ -403,7 +428,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]*);; \
diff --git a/src/saga_core/saga_cmd/callback.cpp b/src/saga_core/saga_cmd/callback.cpp
index 2956133..e84d287 100644
--- a/src/saga_core/saga_cmd/callback.cpp
+++ b/src/saga_core/saga_cmd/callback.cpp
@@ -184,15 +184,12 @@ bool			Get_YesNo		(const SG_Char *caption, const SG_Char *message)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
+int		Callback(TSG_UI_Callback_ID ID, CSG_UI_Parameter &Param_1, CSG_UI_Parameter &Param_2)
 {
 	static int		iBuisy		= 0;
 	const SG_Char	Buisy[4]	= {	'|', '/', '-', '\\'	};
 
-	int		Result;
-	double	d1, d2;
-
-	Result	= 1;
+	int		Result	= 1;
 
 	//-----------------------------------------------------
 	switch( ID )
@@ -211,7 +208,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_PROCESS_GET_OKAY:
 
-		if( !g_bSilent && Param_1 != 0 )
+		if( !g_bSilent && Param_1.True )
 		{
 			SG_PRINTF(SG_T("\r%c   "), Buisy[iBuisy++]);
 
@@ -232,10 +229,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 
 		if( !g_bSilent )
 		{
-			d1	= *((double *)Param_1);
-			d2	= *((double *)Param_2);
-
-			SG_PRINTF(SG_T("\r%3d%%"), d2 != 0.0 ? 1 + (int)(100.0 * d1 / d2) : 100);
+			SG_PRINTF(SG_T("\r%3d%%"), Param_2.Number != 0.0 ? 1 + (int)(100.0 * Param_1.Number / Param_2.Number) : 100);
 		}
 
 		break;
@@ -251,7 +245,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 
 		if( !g_bSilent )
 		{
-			SG_PRINTF(SG_T("\n%s\n"), (SG_Char *)Param_1);
+			SG_PRINTF(SG_T("\n%s\n"), (SG_Char *)Param_1.Pointer);
 		}
 
 		break;
@@ -266,7 +260,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 
 		if( !g_bSilent )
 		{
-			SG_PRINTF(SG_T("\n%s\n"), (SG_Char *)Param_1);
+			SG_PRINTF(SG_T("\n%s\n"), (SG_Char *)Param_1.Pointer);
 		}
 
 		break;
@@ -275,7 +269,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_MESSAGE_ADD_ERROR:
 
-		Print_Error((SG_Char *)Param_1);
+		Print_Error((SG_Char *)Param_1.Pointer);
 
 		break;
 
@@ -285,7 +279,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 
 		if( !g_bSilent )
 		{
-			SG_PRINTF(SG_T("\n%s\n"), (SG_Char *)Param_1);
+			SG_PRINTF(SG_T("\n%s\n"), (SG_Char *)Param_1.Pointer);
 		}
 
 		break;
@@ -300,7 +294,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 
 		if( !g_bSilent )
 		{
-			SG_PRINTF(SG_T("\n%s: %s\n"), (const SG_Char *)Param_2, (const SG_Char *)Param_1);
+			SG_PRINTF(SG_T("\n%s: %s\n"), (const SG_Char *)Param_2.Pointer, (const SG_Char *)Param_1.Pointer);
 		}
 
 		break;
@@ -309,7 +303,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DLG_CONTINUE:
 
-		Result	= Get_YesNo((const SG_Char *)Param_2, (const SG_Char *)Param_1);
+		Result	= Get_YesNo((const SG_Char *)Param_2.Pointer, (const SG_Char *)Param_1.Pointer);
 
 		break;
 
@@ -317,7 +311,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DLG_ERROR:
 
-		Result	= Get_YesNo((const SG_Char *)Param_2, (const SG_Char *)Param_1);
+		Result	= Get_YesNo((const SG_Char *)Param_2.Pointer, (const SG_Char *)Param_1.Pointer);
 
 		break;
 
@@ -339,7 +333,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 
 		if( g_pLibrary )
 		{
-			Result	= g_pLibrary->Add_DataObject((CSG_Data_Object *)Param_1) ? 1 : 0;
+			Result	= g_pLibrary->Add_DataObject((CSG_Data_Object *)Param_1.Pointer) ? 1 : 0;
 		}
 
 		break;
@@ -392,7 +386,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 
 		if( g_pLibrary )
 		{
-			Result	= g_pLibrary->Get_Parameters((CSG_Parameters *)Param_1) ? 1 : 0;
+			Result	= g_pLibrary->Get_Parameters((CSG_Parameters *)Param_1.Pointer) ? 1 : 0;
 		}
 
 		break;
diff --git a/src/saga_core/saga_cmd/man/Makefile.in b/src/saga_core/saga_cmd/man/Makefile.in
index 7801f25..5c8d44f 100644
--- a/src/saga_core/saga_cmd/man/Makefile.in
+++ b/src/saga_core/saga_cmd/man/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,
@@ -37,7 +37,13 @@ subdir = src/saga_core/saga_cmd/man
 DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -78,6 +84,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -127,14 +135,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -178,9 +199,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/saga_core/saga_cmd/module_library.cpp b/src/saga_core/saga_cmd/module_library.cpp
index 55fc021..5c26fd8 100644
--- a/src/saga_core/saga_cmd/module_library.cpp
+++ b/src/saga_core/saga_cmd/module_library.cpp
@@ -1,885 +1,897 @@
- 
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                Command Line Interface                 //
-//                                                       //
-//                   Program: SAGA_CMD                   //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                  module_library.cpp                   //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <wx/cmdline.h>
-
-#include <saga_api/saga_api.h>
-
-#include "callback.h"
-
-#include "module_library.h"
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define GET_ID1(p)		(p->Get_Owner()->Get_Identifier() && *(p->Get_Owner()->Get_Identifier()) \
-						? wxString::Format(wxT("%s_%s"), p->Get_Owner()->Get_Identifier(), p->Get_Identifier()) \
-						: wxString::Format(p->Get_Identifier()))
-
-#define GET_ID2(p, s)	wxString::Format(wxT("%s_%s"), GET_ID1(p).c_str(), s)
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CModule_Library::CModule_Library(void)
-{
-	m_nModules	= 0;
-	m_Modules	= NULL;
-	m_pSelected	= NULL;
-	m_pCMD		= NULL;
-}
-
-//---------------------------------------------------------
-CModule_Library::~CModule_Library(void)
-{
-	Destroy();
-}
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CModule_Library::Create(const SG_Char *FileName, const SG_Char *FilePath)
-{
-	TSG_PFNC_MLB_Initialize		MLB_Initialize;
-	TSG_PFNC_MLB_Get_Interface	MLB_Get_Interface;
-
-	CSG_Module_Library_Interface	*pInterface;
-	CSG_Module						*pModule;
-
-	//-----------------------------------------------------
-	Destroy();
-
-	m_FileName	= SG_File_Make_Path(FilePath, FileName, NULL).c_str();
-
-	m_Library.Load(m_FileName);
-
-	//-----------------------------------------------------
-	if( !m_Library.IsLoaded() )
-	{
-		Print_Error(LNG("[ERR] Library could not be loaded"), FileName);
-	}
-	else
-	{
-		MLB_Initialize		= (TSG_PFNC_MLB_Initialize)		m_Library.GetSymbol(SYMBOL_MLB_Initialize);
-		MLB_Get_Interface	= (TSG_PFNC_MLB_Get_Interface)	m_Library.GetSymbol(SYMBOL_MLB_Get_Interface);
-
-		if(	!MLB_Get_Interface	|| !(pInterface = MLB_Get_Interface())
-		||	!MLB_Initialize		|| !MLB_Initialize(m_FileName) )
-		{
-			Print_Error(LNG("[ERR] Invalid library"), FileName);
-		}
-		else
-		{
-			while( (pModule = pInterface->Get_Module(m_nModules)) != NULL )
-			{
-				m_Modules	= (CSG_Module **)SG_Realloc(m_Modules, (m_nModules + 1) * sizeof(CSG_Module *));
-				m_Modules[m_nModules++]	= pModule;
-			}
-
-			if( m_nModules > 0 )
-			{
-				return( true );
-			}
-
-			Print_Error(LNG("[ERR] Library does not contain any modules"), FileName);
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-void CModule_Library::Destroy(void)
-{
-	if( m_nModules > 0 )
-	{
-		SG_Free(m_Modules);
-		m_nModules	= 0;
-		m_Modules	= NULL;
-		m_pSelected	= NULL;
-	}
-
-	if( m_pCMD )
-	{
-		delete(m_pCMD);
-		m_pCMD		= NULL;
-	}
-
-	if( m_Library.IsLoaded() )
-	{
-		m_Library.Unload();
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Module * CModule_Library::Select(const SG_Char *ModuleName)
-{
-	int			i;
-	wxString	Description;
-
-	//-----------------------------------------------------
-	if( m_pCMD )
-	{
-		delete(m_pCMD);
-		m_pCMD	= NULL;
-	}
-
-	for(i=0, m_pSelected=NULL; i<m_nModules && !m_pSelected; i++)
-	{
-		if( !SG_STR_CMP(ModuleName, Get_Module(i)->Get_Name()) )
-		{
-			m_pSelected	= Get_Module(i);
-		}
-	}
-
-	if( !m_pSelected )
-	{
-		long		l;
-		wxString	s(ModuleName);
-
-		if( s.ToLong(&l) )
-		{
-			m_pSelected	= Get_Module((int)l);
-		}
-	}
-
-	//-----------------------------------------------------
-	if( m_pSelected )
-	{
-		m_pCMD	= new wxCmdLineParser;
-
-		_Set_CMD(m_pSelected->Get_Parameters(), false);
-
-		for(i=0; i<m_pSelected->Get_Parameters_Count(); i++)
-		{
-			_Set_CMD(m_pSelected->Get_Parameters(i), true);
-		}
-	}
-
-	return( m_pSelected );
-}
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CModule_Library::Execute(int argc, char *argv[])
-{
-	bool	bResult	= false;
-
-	if( m_pSelected && m_pCMD )
-	{
-		m_Data_Objects.Clear();
-
-		m_pCMD->SetCmdLine(argc, argv);
-
-		if( argc == 1 )
-		{
-			m_pCMD->Usage();
-
-			return( true );
-		}
-
-		if( _Get_CMD(m_pSelected->Get_Parameters()) && m_pSelected->On_Before_Execution() )
-		{
-			bResult	= m_pSelected->Execute();
-
-			m_pSelected->On_After_Execution();
-		}
-
-		_Destroy_DataObjects(bResult);
-
-		m_Data_Objects.Clear();
-	}
-
-	if( !bResult )
-	{
-		Print_Error(LNG("executing module"), m_pSelected->Get_Name());
-	}
-
-	return( bResult );
-}
-
-//---------------------------------------------------------
-bool CModule_Library::Get_Parameters(CSG_Parameters *pParameters)
-{
-	return( _Get_CMD(pParameters) );
-}
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CModule_Library::_Set_CMD(CSG_Parameters *pParameters, bool bExtra)
-{
-	CSG_Parameter	*pParameter;
-	wxString		Description;
-
-	//-----------------------------------------------------
-	if( m_pCMD && pParameters )
-	{
-		m_pCMD->SetSwitchChars(SG_T("-"));
-
-		for(int i=0; i<pParameters->Get_Count(); i++)
-		{
-			pParameter	= pParameters->Get_Parameter(i);
-			Description	= pParameter->Get_Description(
-							PARAMETER_DESCRIPTION_NAME|PARAMETER_DESCRIPTION_TYPE|PARAMETER_DESCRIPTION_PROPERTIES, SG_T("\n\t")
-						).c_str();
-
-			if( pParameter->is_Input() || pParameter->is_Output() )
-			{
-				m_pCMD->AddOption(
-					GET_ID1(pParameter), wxEmptyString, Description,
-					wxCMD_LINE_VAL_STRING,
-					wxCMD_LINE_NEEDS_SEPARATOR | (pParameter->is_Optional() || bExtra ? wxCMD_LINE_PARAM_OPTIONAL : wxCMD_LINE_OPTION_MANDATORY)
-				);
-			}
-			else if( pParameter->is_Option() && !pParameter->is_Information() )
-			{
-				switch( pParameter->Get_Type() )
-				{
-				default:
-					break;
-
-				case PARAMETER_TYPE_Bool:
-					m_pCMD->AddSwitch(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_PARAM_OPTIONAL);
-					break;
-
-				case PARAMETER_TYPE_Int:
-					m_pCMD->AddOption(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL);
-					break;
-
-				case PARAMETER_TYPE_Choice:
-				case PARAMETER_TYPE_Table_Field:
-					m_pCMD->AddOption(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
-					break;
-
-				case PARAMETER_TYPE_Double:
-				case PARAMETER_TYPE_Degree:
-					m_pCMD->AddOption(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
-					break;
-
-				case PARAMETER_TYPE_Range:
-					m_pCMD->AddOption(GET_ID2(pParameter, wxT("MIN")), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
-					m_pCMD->AddOption(GET_ID2(pParameter, wxT("MAX")), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
-					break;
-
-				case PARAMETER_TYPE_String:
-				case PARAMETER_TYPE_Text:
-				case PARAMETER_TYPE_FilePath:
-					m_pCMD->AddOption(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
-					break;
-
-				case PARAMETER_TYPE_FixedTable:
-					m_pCMD->AddOption(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
-					break;
-
-				case PARAMETER_TYPE_Grid_System:
-					if( pParameter->Get_Children_Count() == 0 )
-					{
-						m_pCMD->AddOption(GET_ID2(pParameter, wxT("NX")), wxEmptyString, Description, wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL);
-						m_pCMD->AddOption(GET_ID2(pParameter, wxT("NY")), wxEmptyString, Description, wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL);
-						m_pCMD->AddOption(GET_ID2(pParameter, wxT( "X")), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
-						m_pCMD->AddOption(GET_ID2(pParameter, wxT( "Y")), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
-						m_pCMD->AddOption(GET_ID2(pParameter, wxT( "D")), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
-					}
-					break;
-
-				case PARAMETER_TYPE_Parameters:
-					_Set_CMD(pParameter->asParameters(), true);
-					break;
-				}
-			}
-		}
-	}
-}
-
-//---------------------------------------------------------
-bool CModule_Library::_Get_CMD(CSG_Parameters *pParameters)
-{
-	//-----------------------------------------------------
-	if( m_pCMD == NULL || pParameters == NULL )
-	{
-		Print_Error(LNG("[ERR] Internal system error"));
-
-		return( false );
-	}
-
-	if( m_pCMD->Parse(false) != 0 || _Create_DataObjects(pParameters) == false )
-	{
-		m_pCMD->Usage();
-
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	for(int i=0; i<pParameters->Get_Count(); i++)
-	{
-		long			l;
-		double			d;
-		wxString		s;
-
-		CSG_Parameter	*pParameter	= pParameters->Get_Parameter(i);
-
-		if( !pParameter->is_Information() || pParameter->is_DataObject() )
-		{
-			switch( pParameter->Get_Type() )
-			{
-			default:
-				break;
-
-			case PARAMETER_TYPE_Bool:
-				pParameter->Set_Value(m_pCMD->Found(GET_ID1(pParameter)) ? 1 : 0);
-				break;
-
-			case PARAMETER_TYPE_Int:
-				if( m_pCMD->Found(GET_ID1(pParameter), &l) )
-				{
-					pParameter->Set_Value((int)l);
-				}
-				break;
-
-			case PARAMETER_TYPE_Choice:
-			case PARAMETER_TYPE_Table_Field:
-				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
-				{
-					if( s.ToLong(&l) )
-					{
-						pParameter->Set_Value((int)l);
-					}
-					else
-					{
-						pParameter->Set_Value(s.c_str());
-					}
-				}
-				break;
-
-			case PARAMETER_TYPE_Double:
-			case PARAMETER_TYPE_Degree:
-				if( m_pCMD->Found(GET_ID1(pParameter), &s) && s.ToDouble(&d) )
-				{
-					pParameter->Set_Value(d);
-				}
-				break;
-
-			case PARAMETER_TYPE_Range:
-				if( m_pCMD->Found(GET_ID2(pParameter, wxT("MIN")), &s) && s.ToDouble(&d) )
-				{
-					pParameter->asRange()->Set_LoVal(d);
-				}
-
-				if( m_pCMD->Found(GET_ID2(pParameter, wxT("MAX")), &s) && s.ToDouble(&d) )
-				{
-					pParameter->asRange()->Set_HiVal(d);
-				}
-				break;
-
-			case PARAMETER_TYPE_String:
-				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
-				{
-					pParameter->Set_Value(s.c_str());
-				}
-				break;
-
-			case PARAMETER_TYPE_Text:
-				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
-				{
-					CSG_File	Stream;
-
-					if( Stream.Open(s.c_str()) )
-					{
-						CSG_String	t;
-
-						Stream.Read(t, Stream.Length());
-
-						pParameter->Set_Value(t.c_str());
-					}
-					else
-					{
-						pParameter->Set_Value(s.c_str());
-					}
-				}
-				break;
-
-			case PARAMETER_TYPE_FilePath:
-				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
-				{
-					if( pParameter->asFilePath()->is_Multiple() )
-					{
-						s.Prepend(wxT("\""));
-						s.Replace(wxT(";"), wxT("\" \""));
-						s.Append (wxT("\""));
-					}
-
-					pParameter->Set_Value(s.c_str());
-				}
-				break;
-
-			case PARAMETER_TYPE_FixedTable:
-				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
-				{
-					CSG_Table	Table(s.c_str());
-					pParameter->asTable()->Assign_Values(&Table);
-				}
-				break;
-
-			case PARAMETER_TYPE_Grid_System:
-				if( pParameter->Get_Children_Count() == 0 )
-				{
-					long	nx, ny;
-					double	d, x, y;
-
-					if(	!m_pCMD->Found(GET_ID2(pParameter, wxT("NX")), &nx)
-					||	!m_pCMD->Found(GET_ID2(pParameter, wxT("NY")), &ny)
-					||	!m_pCMD->Found(GET_ID2(pParameter, wxT( "X")), &s) || !s.ToDouble(&x)
-					||	!m_pCMD->Found(GET_ID2(pParameter, wxT( "Y")), &s) || !s.ToDouble(&y)
-					||	!m_pCMD->Found(GET_ID2(pParameter, wxT( "D")), &s) || !s.ToDouble(&d) )
-					{
-						d	= -1.0;
-					}
-
-					pParameter->asGrid_System()->Assign(d, x, y, (int)nx, (int)ny);
-				}
-				break;
-
-			case PARAMETER_TYPE_Parameters:
-				_Get_CMD(pParameter->asParameters());
-				break;
-			}
-		}
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CModule_Library::_Create_DataObjects(CSG_Parameters *pParameters)
-{
-	//-----------------------------------------------------
-	if( m_pCMD == NULL || pParameters == NULL )
-	{
-		Print_Error(LNG("[ERR] Internal system error"));
-
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	bool	bObjects	= false;
-	int		nObjects	= 0;
-
-	for(int i=0; i<pParameters->Get_Count(); i++)
-	{
-		wxString		FileName;
-
-		CSG_Parameter	*pParameter	= pParameters->Get_Parameter(i);
-
-		if(	pParameter->is_DataObject() || pParameter->is_DataObject_List() )
-		{
-			bObjects	= true;
-
-			if( m_pCMD->Found(GET_ID1(pParameter), &FileName) )
-			{
-				if( pParameter->is_Input() )
-				{
-					if( pParameter->is_DataObject() )
-					{
-						if( !_Create_DataObject(pParameter, FileName) && !pParameter->is_Optional() )
-						{
-							Print_Error(LNG("input file"), FileName);
-
-							return( false );
-						}
-
-						nObjects++;
-					}
-					else if( pParameter->is_DataObject_List() )
-					{
-						if( !_Create_DataObject_List(pParameter, FileName) && !pParameter->is_Optional() )
-						{
-							Print_Error(LNG("empty input list"), GET_ID1(pParameter));
-
-							return( false );
-						}
-
-						nObjects++;
-					}
-				}
-				else if( pParameter->is_Output() )
-				{
-					if( !_Create_DataObject(pParameter, FileName) )
-					{
-						pParameter->Set_Value(DATAOBJECT_CREATE);
-					}
-
-					nObjects++;
-				}
-			}
-			else if( !pParameter->is_Optional() )
-			{
-				return( false );
-			}
-		}
-	}
-
-	return( bObjects == false || nObjects > 0 );
-}
-
-//---------------------------------------------------------
-bool CModule_Library::_Create_DataObject(CSG_Parameter *pParameter, const wxChar *FileName)
-{
-	if( !SG_File_Exists(FileName) )
-	{
-		return( false );
-	}
-
-	CSG_Data_Object	*pObject;
-
-	switch( pParameter->Get_Type() )
-	{
-	default:						pObject	= NULL;								break;
-	case PARAMETER_TYPE_TIN:		pObject = new CSG_TIN			(FileName);	break;
-	case PARAMETER_TYPE_PointCloud:	pObject = new CSG_PointCloud	(FileName);	break;
-	case PARAMETER_TYPE_Shapes:		pObject = new CSG_Shapes		(FileName);	break;
-	case PARAMETER_TYPE_Table:		pObject = new CSG_Table			(FileName);	break;
-	case PARAMETER_TYPE_Grid:		pObject	= new CSG_Grid			(FileName);	break;
-	}
-
-	if( pObject )
-	{
-		if( pObject->is_Valid() && pParameter->Get_Type() == PARAMETER_TYPE_Grid )
-		{
-			if( !pParameter->Get_Parent()->asGrid_System()->is_Valid() )
-			{
-				pParameter->Get_Parent()->asGrid_System()->Assign(((CSG_Grid *)pObject)->Get_System());
-			}
-			else if( !pParameter->Get_Parent()->asGrid_System()->is_Equal(((CSG_Grid *)pObject)->Get_System()) )
-			{
-				delete(pObject);
-
-				return( false );
-			}
-		}
-
-		if( pObject->is_Valid() )
-		{
-			pParameter->Set_Value(pObject);
-
-			return( true );
-		}
-
-		delete(pObject);
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CModule_Library::_Create_DataObject_List(CSG_Parameter *pParameter, wxString FileNames)
-{
-	CSG_Data_Object		*pObject;
-	wxString			FileName;
-
-	if( pParameter && pParameter->is_DataObject_List() )
-	{
-		do
-		{
-			FileName	= FileNames.BeforeFirst	(';');
-			FileNames	= FileNames.AfterFirst	(';');
-
-			switch( pParameter->Get_Type() )
-			{
-			default:								pObject	= NULL;									break;
-			case PARAMETER_TYPE_Grid_List:			pObject	= new CSG_Grid      (FileName.c_str());	break;
-			case PARAMETER_TYPE_TIN_List:			pObject	= new CSG_TIN       (FileName.c_str());	break;
-			case PARAMETER_TYPE_PointCloud_List:	pObject	= new CSG_PointCloud(FileName.c_str());	break;
-			case PARAMETER_TYPE_Shapes_List:		pObject	= new CSG_Shapes    (FileName.c_str());	break;
-			case PARAMETER_TYPE_Table_List:			pObject	= new CSG_Table     (FileName.c_str());	break;
-			}
-
-			if( pObject && pObject->is_Valid() )
-			{
-				if( pParameter->Get_Type() == PARAMETER_TYPE_Grid_List && (pParameter->Get_Parent() && pParameter->Get_Parent()->Get_Type() == PARAMETER_TYPE_Grid_System) )
-				{	// grid system dependent grid list: first grid defines the grid system to be used!
-					if( pParameter->asList()->Get_Count() == 0 )
-					{
-						pParameter->Get_Parent()->asGrid_System()->Assign  (((CSG_Grid *)pObject)->Get_System());
-					}
-
-					if( pParameter->Get_Parent()->asGrid_System()->is_Equal(((CSG_Grid *)pObject)->Get_System()) )
-					{
-						pParameter->asList()->Add_Item(pObject);
-					}
-				}
-				else
-				{
-					pParameter->asList()->Add_Item(pObject);
-				}
-			}
-			else if( pObject )
-			{
-				delete(pObject);
-
-				Print_Error(LNG("input file"), FileName);
-			}
-		}
-		while( FileNames.Length() > 0 );
-
-		return( pParameter->asList()->Get_Count() > 0 );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CModule_Library::Add_DataObject(CSG_Data_Object *pObject)
-{
-	m_Data_Objects.Add(pObject);
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CModule_Library::_Destroy_DataObjects(bool bSave)
-{
-	if( m_pSelected && m_pCMD )
-	{
-		_Destroy_DataObjects(bSave, m_pSelected->Get_Parameters());
-
-		for(int i=0; i<m_pSelected->Get_Parameters_Count(); i++)
-		{
-			_Destroy_DataObjects(bSave, m_pSelected->Get_Parameters(i));
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CModule_Library::_Destroy_DataObjects(bool bSave, CSG_Parameters *pParameters)
-{
-	if( !pParameters || !m_pCMD )
-	{
-		return( false );
-	}
-
-	for(int j=0; j<pParameters->Get_Count(); j++)
-	{
-		CSG_Parameter	*pParameter	= pParameters->Get_Parameter(j);
-
-		wxString	FileName;
-
-		if( !bSave || !pParameter->is_Output() || !m_pCMD->Found(GET_ID1(pParameter), &FileName) )
-		{
-			FileName.Clear();
-		}
-
-		//-------------------------------------------------
-		if( pParameter->is_DataObject() && pParameter->asDataObject() )
-		{
-			m_Data_Objects.Add(pParameter->asDataObject());
-
-			if( FileName.Length() > 0 )
-			{
-				pParameter->asDataObject()->Save(FileName.c_str());
-			}
-
-			pParameter->Set_Value(DATAOBJECT_NOTSET);
-		}
-
-		//-------------------------------------------------
-		else if( pParameter->is_DataObject_List() )
-		{
-			for(int i=0; i<pParameter->asList()->Get_Count(); i++)
-			{
-				m_Data_Objects.Add(pParameter->asList()->asDataObject(i));
-
-				if( FileName.Length() > 0 )
-				{
-					if( pParameter->asList()->Get_Count() == 1 )
-					{
-						pParameter->asList()->asDataObject(i)->Save(FileName.c_str());
-					}
-					else
-					{
-						pParameter->asList()->asDataObject(i)->Save(CSG_String::Format(SG_T("%s_%02d"), FileName.c_str(), i + 1));
-					}
-				}
-			}
-
-			pParameter->asList()->Del_Items();
-		}
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CData_Objects::CData_Objects(void)
-{
-	m_pObjects	= NULL;
-	m_nObjects	= 0;
-}
-
-//---------------------------------------------------------
-CData_Objects::~CData_Objects(void)
-{
-	Clear(false);
-}
-
-//---------------------------------------------------------
-void CData_Objects::Clear(bool bDelete)
-{
-	if( m_pObjects )
-	{
-		if( bDelete )
-		{
-			for(int i=0; i<m_nObjects; i++)
-			{
-				delete(m_pObjects[i]);
-			}
-		}
-
-		SG_Free(m_pObjects);
-
-		m_pObjects	= NULL;
-		m_nObjects	= 0;
-	}
-}
-
-//---------------------------------------------------------
-void CData_Objects::Add(class CSG_Data_Object *pObject)
-{
-	if( pObject != DATAOBJECT_NOTSET && pObject != DATAOBJECT_CREATE )
-	{
-		for(int i=0; i<m_nObjects; i++)
-		{
-			if( m_pObjects[i] == pObject )
-			{
-				return;
-			}
-		}
-
-		m_pObjects	= (CSG_Data_Object **)SG_Realloc(m_pObjects, (m_nObjects + 1) * sizeof(CSG_Data_Object *));
-		m_pObjects[m_nObjects++]	= pObject;
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+ 
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                Command Line Interface                 //
+//                                                       //
+//                   Program: SAGA_CMD                   //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                  module_library.cpp                   //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <wx/cmdline.h>
+
+#include <saga_api/saga_api.h>
+
+#include "callback.h"
+
+#include "module_library.h"
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define GET_ID1(p)		(p->Get_Owner()->Get_Identifier() && *(p->Get_Owner()->Get_Identifier()) \
+						? wxString::Format(wxT("%s_%s"), p->Get_Owner()->Get_Identifier(), p->Get_Identifier()) \
+						: wxString::Format(p->Get_Identifier()))
+
+#define GET_ID2(p, s)	wxString::Format(wxT("%s_%s"), GET_ID1(p).c_str(), s)
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CModule_Library::CModule_Library(void)
+{
+	m_nModules	= 0;
+	m_Modules	= NULL;
+	m_pSelected	= NULL;
+	m_pCMD		= NULL;
+}
+
+//---------------------------------------------------------
+CModule_Library::~CModule_Library(void)
+{
+	Destroy();
+}
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CModule_Library::Create(const SG_Char *FileName, const SG_Char *FilePath)
+{
+	TSG_PFNC_MLB_Initialize		MLB_Initialize;
+	TSG_PFNC_MLB_Get_Interface	MLB_Get_Interface;
+
+	CSG_Module_Library_Interface	*pInterface;
+	CSG_Module						*pModule;
+
+	//-----------------------------------------------------
+	Destroy();
+
+	m_FileName	= SG_File_Make_Path(FilePath, FileName, NULL).c_str();
+
+	m_Library.Load(m_FileName);
+
+	//-----------------------------------------------------
+	if( !m_Library.IsLoaded() )
+	{
+		Print_Error(LNG("[ERR] Library could not be loaded"), FileName);
+	}
+	else
+	{
+		MLB_Initialize		= (TSG_PFNC_MLB_Initialize)		m_Library.GetSymbol(SYMBOL_MLB_Initialize);
+		MLB_Get_Interface	= (TSG_PFNC_MLB_Get_Interface)	m_Library.GetSymbol(SYMBOL_MLB_Get_Interface);
+
+		if(	!MLB_Get_Interface	|| !(pInterface = MLB_Get_Interface())
+		||	!MLB_Initialize		|| !MLB_Initialize(m_FileName) )
+		{
+			Print_Error(LNG("[ERR] Invalid library"), FileName);
+		}
+		else
+		{
+			while( (pModule = pInterface->Get_Module(m_nModules)) != NULL )
+			{
+				m_Modules	= (CSG_Module **)SG_Realloc(m_Modules, (m_nModules + 1) * sizeof(CSG_Module *));
+				m_Modules[m_nModules++]	= pModule;
+			}
+
+			if( m_nModules > 0 )
+			{
+				return( true );
+			}
+
+			Print_Error(LNG("[ERR] Library does not contain any modules"), FileName);
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+void CModule_Library::Destroy(void)
+{
+	if( m_nModules > 0 )
+	{
+		SG_Free(m_Modules);
+		m_nModules	= 0;
+		m_Modules	= NULL;
+		m_pSelected	= NULL;
+	}
+
+	if( m_pCMD )
+	{
+		delete(m_pCMD);
+		m_pCMD		= NULL;
+	}
+
+	if( m_Library.IsLoaded() )
+	{
+		m_Library.Unload();
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Module * CModule_Library::Select(const SG_Char *ModuleName)
+{
+	int			i;
+	wxString	Description;
+
+	//-----------------------------------------------------
+	if( m_pCMD )
+	{
+		delete(m_pCMD);
+		m_pCMD	= NULL;
+	}
+
+	for(i=0, m_pSelected=NULL; i<m_nModules && !m_pSelected; i++)
+	{
+		if( !SG_STR_CMP(ModuleName, Get_Module(i)->Get_Name()) )
+		{
+			m_pSelected	= Get_Module(i);
+		}
+	}
+
+	if( !m_pSelected )
+	{
+		long		l;
+		wxString	s(ModuleName);
+
+		if( s.ToLong(&l) )
+		{
+			m_pSelected	= Get_Module((int)l);
+		}
+	}
+
+	//-----------------------------------------------------
+	if( m_pSelected )
+	{
+		m_pCMD	= new wxCmdLineParser;
+
+		_Set_CMD(m_pSelected->Get_Parameters(), false);
+
+		for(i=0; i<m_pSelected->Get_Parameters_Count(); i++)
+		{
+			_Set_CMD(m_pSelected->Get_Parameters(i), true);
+		}
+	}
+
+	return( m_pSelected );
+}
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CModule_Library::Execute(int argc, char *argv[])
+{
+	bool	bResult	= false;
+
+	if( m_pSelected && m_pCMD )
+	{
+		m_Data_Objects.Clear();
+
+		m_pCMD->SetCmdLine(argc, argv);
+
+		if( argc == 1 )
+		{
+			m_pCMD->Usage();
+
+			return( true );
+		}
+
+		if( _Get_CMD(m_pSelected->Get_Parameters()) && m_pSelected->On_Before_Execution() )
+		{
+			bResult	= m_pSelected->Execute();
+
+			m_pSelected->On_After_Execution();
+		}
+
+		_Destroy_DataObjects(bResult);
+
+		m_Data_Objects.Clear();
+	}
+
+	if( !bResult )
+	{
+		Print_Error(LNG("executing module"), m_pSelected->Get_Name());
+	}
+
+	return( bResult );
+}
+
+//---------------------------------------------------------
+bool CModule_Library::Get_Parameters(CSG_Parameters *pParameters)
+{
+	return( _Get_CMD(pParameters) );
+}
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CModule_Library::_Set_CMD(CSG_Parameters *pParameters, bool bExtra)
+{
+	CSG_Parameter	*pParameter;
+	wxString		Description;
+
+	//-----------------------------------------------------
+	if( m_pCMD && pParameters )
+	{
+		m_pCMD->SetSwitchChars(SG_T("-"));
+
+		for(int i=0; i<pParameters->Get_Count(); i++)
+		{
+			pParameter	= pParameters->Get_Parameter(i);
+			Description	= pParameter->Get_Description(
+							PARAMETER_DESCRIPTION_NAME|PARAMETER_DESCRIPTION_TYPE|PARAMETER_DESCRIPTION_PROPERTIES, SG_T("\n\t")
+						).c_str();
+
+			if( pParameter->is_Input() || pParameter->is_Output() )
+			{
+				m_pCMD->AddOption(
+					GET_ID1(pParameter), wxEmptyString, Description,
+					wxCMD_LINE_VAL_STRING,
+					wxCMD_LINE_NEEDS_SEPARATOR | (pParameter->is_Optional() || bExtra ? wxCMD_LINE_PARAM_OPTIONAL : wxCMD_LINE_OPTION_MANDATORY)
+				);
+			}
+			else if( pParameter->is_Option() && !pParameter->is_Information() )
+			{
+				switch( pParameter->Get_Type() )
+				{
+				default:
+					break;
+
+				case PARAMETER_TYPE_Bool:
+					m_pCMD->AddSwitch(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_PARAM_OPTIONAL);
+					break;
+
+				case PARAMETER_TYPE_Int:
+					m_pCMD->AddOption(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL);
+					break;
+
+				case PARAMETER_TYPE_Choice:
+				case PARAMETER_TYPE_Table_Field:
+					m_pCMD->AddOption(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
+					break;
+
+				case PARAMETER_TYPE_Double:
+				case PARAMETER_TYPE_Degree:
+					m_pCMD->AddOption(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
+					break;
+
+				case PARAMETER_TYPE_Range:
+					m_pCMD->AddOption(GET_ID2(pParameter, wxT("MIN")), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
+					m_pCMD->AddOption(GET_ID2(pParameter, wxT("MAX")), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
+					break;
+
+				case PARAMETER_TYPE_String:
+				case PARAMETER_TYPE_Text:
+				case PARAMETER_TYPE_FilePath:
+					m_pCMD->AddOption(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
+					break;
+
+				case PARAMETER_TYPE_FixedTable:
+					m_pCMD->AddOption(GET_ID1(pParameter), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
+					break;
+
+				case PARAMETER_TYPE_Grid_System:
+					if( pParameter->Get_Children_Count() == 0 )
+					{
+						m_pCMD->AddOption(GET_ID2(pParameter, wxT("NX")), wxEmptyString, Description, wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL);
+						m_pCMD->AddOption(GET_ID2(pParameter, wxT("NY")), wxEmptyString, Description, wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL);
+						m_pCMD->AddOption(GET_ID2(pParameter, wxT( "X")), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
+						m_pCMD->AddOption(GET_ID2(pParameter, wxT( "Y")), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
+						m_pCMD->AddOption(GET_ID2(pParameter, wxT( "D")), wxEmptyString, Description, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL);
+					}
+					break;
+
+				case PARAMETER_TYPE_Parameters:
+					_Set_CMD(pParameter->asParameters(), true);
+					break;
+				}
+			}
+		}
+	}
+}
+
+//---------------------------------------------------------
+bool CModule_Library::_Get_CMD(CSG_Parameters *pParameters)
+{
+	//-----------------------------------------------------
+	if( m_pCMD == NULL || pParameters == NULL )
+	{
+		Print_Error(LNG("[ERR] Internal system error"));
+
+		return( false );
+	}
+
+	if( m_pCMD->Parse(false) != 0 || _Create_DataObjects(pParameters) == false )
+	{
+		m_pCMD->Usage();
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	for(int i=0; i<pParameters->Get_Count(); i++)
+	{
+		long			l;
+		double			d;
+		wxString		s;
+
+		CSG_Parameter	*pParameter	= pParameters->Get_Parameter(i);
+
+		if( !pParameter->is_Information() || pParameter->is_DataObject() )
+		{
+			switch( pParameter->Get_Type() )
+			{
+			default:
+				break;
+
+			case PARAMETER_TYPE_Bool:
+				pParameter->Set_Value(m_pCMD->Found(GET_ID1(pParameter)) ? 1 : 0);
+				break;
+
+			case PARAMETER_TYPE_Int:
+				if( m_pCMD->Found(GET_ID1(pParameter), &l) )
+				{
+					pParameter->Set_Value((int)l);
+				}
+				break;
+
+			case PARAMETER_TYPE_Choice:
+			case PARAMETER_TYPE_Table_Field:
+				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
+				{
+					if( s.ToLong(&l) )
+					{
+						pParameter->Set_Value((int)l);
+					}
+					else
+					{
+						pParameter->Set_Value(s.c_str());
+					}
+				}
+				break;
+
+			case PARAMETER_TYPE_Double:
+			case PARAMETER_TYPE_Degree:
+				if( m_pCMD->Found(GET_ID1(pParameter), &s) && s.ToDouble(&d) )
+				{
+					pParameter->Set_Value(d);
+				}
+				break;
+
+			case PARAMETER_TYPE_Range:
+				if( m_pCMD->Found(GET_ID2(pParameter, wxT("MIN")), &s) && s.ToDouble(&d) )
+				{
+					pParameter->asRange()->Set_LoVal(d);
+				}
+
+				if( m_pCMD->Found(GET_ID2(pParameter, wxT("MAX")), &s) && s.ToDouble(&d) )
+				{
+					pParameter->asRange()->Set_HiVal(d);
+				}
+				break;
+
+			case PARAMETER_TYPE_String:
+				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
+				{
+					pParameter->Set_Value(s.c_str());
+				}
+				break;
+
+			case PARAMETER_TYPE_Text:
+				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
+				{
+					CSG_File	Stream;
+
+					if( Stream.Open(s.c_str()) )
+					{
+						CSG_String	t;
+
+						Stream.Read(t, Stream.Length());
+
+						pParameter->Set_Value(t.c_str());
+					}
+					else
+					{
+						pParameter->Set_Value(s.c_str());
+					}
+				}
+				break;
+
+			case PARAMETER_TYPE_FilePath:
+				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
+				{
+					if( pParameter->asFilePath()->is_Multiple() )
+					{
+						s.Prepend(wxT("\""));
+						s.Replace(wxT(";"), wxT("\" \""));
+						s.Append (wxT("\""));
+					}
+
+					pParameter->Set_Value(s.c_str());
+				}
+				break;
+
+			case PARAMETER_TYPE_FixedTable:
+				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
+				{
+					CSG_Table	Table(s.c_str());
+					pParameter->asTable()->Assign_Values(&Table);
+				}
+				break;
+
+			case PARAMETER_TYPE_Grid_System:
+				if( pParameter->Get_Children_Count() == 0 )
+				{
+					long	nx, ny;
+					double	d, x, y;
+
+					if(	!m_pCMD->Found(GET_ID2(pParameter, wxT("NX")), &nx)
+					||	!m_pCMD->Found(GET_ID2(pParameter, wxT("NY")), &ny)
+					||	!m_pCMD->Found(GET_ID2(pParameter, wxT( "X")), &s) || !s.ToDouble(&x)
+					||	!m_pCMD->Found(GET_ID2(pParameter, wxT( "Y")), &s) || !s.ToDouble(&y)
+					||	!m_pCMD->Found(GET_ID2(pParameter, wxT( "D")), &s) || !s.ToDouble(&d) )
+					{
+						d	= -1.0;
+					}
+
+					pParameter->asGrid_System()->Assign(d, x, y, (int)nx, (int)ny);
+				}
+				break;
+
+			case PARAMETER_TYPE_Parameters:
+				_Get_CMD(pParameter->asParameters());
+				break;
+			}
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CModule_Library::_Create_DataObjects(CSG_Parameters *pParameters)
+{
+	//-----------------------------------------------------
+	if( m_pCMD == NULL || pParameters == NULL )
+	{
+		Print_Error(LNG("[ERR] Internal system error"));
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	bool	bObjects	= false;
+	int		nObjects	= 0;
+
+	for(int i=0; i<pParameters->Get_Count(); i++)
+	{
+		wxString		FileName;
+
+		CSG_Parameter	*pParameter	= pParameters->Get_Parameter(i);
+
+		if(	pParameter->is_DataObject() || pParameter->is_DataObject_List() )
+		{
+			bObjects	= true;
+
+			if( m_pCMD->Found(GET_ID1(pParameter), &FileName) )
+			{
+				if( pParameter->is_Input() )
+				{
+					if( pParameter->is_DataObject() )
+					{
+						if( !_Create_DataObject(pParameter, FileName) && !pParameter->is_Optional() )
+						{
+							Print_Error(LNG("input file"), FileName);
+
+							return( false );
+						}
+
+						nObjects++;
+					}
+					else if( pParameter->is_DataObject_List() )
+					{
+						if( !_Create_DataObject_List(pParameter, FileName) && !pParameter->is_Optional() )
+						{
+							Print_Error(LNG("empty input list"), GET_ID1(pParameter));
+
+							return( false );
+						}
+
+						nObjects++;
+					}
+				}
+				else if( pParameter->is_Output() )
+				{
+					if( !_Create_DataObject(pParameter, FileName) )
+					{
+						pParameter->Set_Value(DATAOBJECT_CREATE);
+					}
+
+					nObjects++;
+				}
+			}
+			else if( !pParameter->is_Optional() )
+			{
+				return( false );
+			}
+		}
+	}
+
+	return( bObjects == false || nObjects > 0 );
+}
+
+//---------------------------------------------------------
+bool CModule_Library::_Create_DataObject(CSG_Parameter *pParameter, const wxChar *FileName)
+{
+	if( !SG_File_Exists(FileName) )
+	{
+		return( false );
+	}
+
+	CSG_Data_Object	*pObject;
+
+	switch( pParameter->Get_Type() )
+	{
+	default:						pObject	= NULL;								break;
+	case PARAMETER_TYPE_TIN:		pObject = new CSG_TIN			(FileName);	break;
+	case PARAMETER_TYPE_PointCloud:	pObject = new CSG_PointCloud	(FileName);	break;
+	case PARAMETER_TYPE_Shapes:		pObject = new CSG_Shapes		(FileName);	break;
+	case PARAMETER_TYPE_Table:		pObject = new CSG_Table			(FileName);	break;
+	case PARAMETER_TYPE_Grid:		pObject	= new CSG_Grid			(FileName);	break;
+	}
+
+	if( pObject )
+	{
+		if( pObject->is_Valid() && pParameter->Get_Type() == PARAMETER_TYPE_Grid )
+		{
+			if( !pParameter->Get_Parent()->asGrid_System()->is_Valid() )
+			{
+				pParameter->Get_Parent()->asGrid_System()->Assign(((CSG_Grid *)pObject)->Get_System());
+			}
+			else if( !pParameter->Get_Parent()->asGrid_System()->is_Equal(((CSG_Grid *)pObject)->Get_System()) )
+			{
+				delete(pObject);
+
+				return( false );
+			}
+		}
+
+		if( pObject->is_Valid() )
+		{
+			pParameter->Set_Value(pObject);
+
+			return( true );
+		}
+
+		delete(pObject);
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CModule_Library::_Create_DataObject_List(CSG_Parameter *pParameter, wxString FileNames)
+{
+	CSG_Data_Object		*pObject;
+	wxString			FileName;
+
+	if( pParameter && pParameter->is_DataObject_List() )
+	{
+		do
+		{
+			FileName	= FileNames.BeforeFirst	(';');
+			FileNames	= FileNames.AfterFirst	(';');
+
+			switch( pParameter->Get_Type() )
+			{
+			default:								pObject	= NULL;									break;
+			case PARAMETER_TYPE_Grid_List:			pObject	= new CSG_Grid      (FileName.c_str());	break;
+			case PARAMETER_TYPE_TIN_List:			pObject	= new CSG_TIN       (FileName.c_str());	break;
+			case PARAMETER_TYPE_PointCloud_List:	pObject	= new CSG_PointCloud(FileName.c_str());	break;
+			case PARAMETER_TYPE_Shapes_List:		pObject	= new CSG_Shapes    (FileName.c_str());	break;
+			case PARAMETER_TYPE_Table_List:			pObject	= new CSG_Table     (FileName.c_str());	break;
+			}
+
+			if( pObject && pObject->is_Valid() )
+			{
+				if( pParameter->Get_Type() == PARAMETER_TYPE_Grid_List && (pParameter->Get_Parent() && pParameter->Get_Parent()->Get_Type() == PARAMETER_TYPE_Grid_System) )
+				{	// grid system dependent grid list: first grid defines the grid system to be used!
+					if( pParameter->asList()->Get_Count() == 0 )
+					{
+						pParameter->Get_Parent()->asGrid_System()->Assign  (((CSG_Grid *)pObject)->Get_System());
+					}
+
+					if( pParameter->Get_Parent()->asGrid_System()->is_Equal(((CSG_Grid *)pObject)->Get_System()) )
+					{
+						pParameter->asList()->Add_Item(pObject);
+					}
+				}
+				else
+				{
+					pParameter->asList()->Add_Item(pObject);
+				}
+			}
+			else if( pObject )
+			{
+				delete(pObject);
+
+				Print_Error(LNG("input file"), FileName);
+			}
+		}
+		while( FileNames.Length() > 0 );
+
+		return( pParameter->asList()->Get_Count() > 0 );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CModule_Library::Add_DataObject(CSG_Data_Object *pObject)
+{
+	m_Data_Objects.Add(pObject);
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CModule_Library::_Destroy_DataObjects(bool bSave)
+{
+	if( m_pSelected && m_pCMD )
+	{
+		_Destroy_DataObjects(bSave, m_pSelected->Get_Parameters());
+
+		for(int i=0; i<m_pSelected->Get_Parameters_Count(); i++)
+		{
+			_Destroy_DataObjects(bSave, m_pSelected->Get_Parameters(i));
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CModule_Library::_Destroy_DataObjects(bool bSave, CSG_Parameters *pParameters)
+{
+	if( !pParameters || !m_pCMD )
+	{
+		return( false );
+	}
+
+	for(int j=0; j<pParameters->Get_Count(); j++)
+	{
+		CSG_Parameter	*pParameter	= pParameters->Get_Parameter(j);
+
+		wxString	FileName;
+
+		if( !bSave || !pParameter->is_Output() || !m_pCMD->Found(GET_ID1(pParameter), &FileName) )
+		{
+			FileName.Clear();
+		}
+
+		//-------------------------------------------------
+		if( pParameter->is_DataObject() && pParameter->asDataObject() )
+		{
+			CSG_Data_Object	*pObject	= pParameter->asDataObject();
+
+			if( pParameter->is_Input() && pObject->is_Modified() )
+			{
+				pObject->Save(pObject->Get_File_Name());
+			}
+			else if( FileName.Length() > 0 )
+			{
+				pObject->Save(FileName.c_str());
+			}
+
+			m_Data_Objects.Add(pObject);
+
+			pParameter->Set_Value(DATAOBJECT_NOTSET);
+		}
+
+		//-------------------------------------------------
+		else if( pParameter->is_DataObject_List() )
+		{
+			for(int i=0; i<pParameter->asList()->Get_Count(); i++)
+			{
+				CSG_Data_Object	*pObject	= pParameter->asList()->asDataObject(i);
+
+				if( pParameter->is_Input() && pObject->is_Modified() )
+				{
+					pObject->Save(pObject->Get_File_Name());
+				}
+				else if( FileName.Length() > 0 )
+				{
+					if( pParameter->asList()->Get_Count() == 1 )
+					{
+						pObject->Save(FileName.c_str());
+					}
+					else
+					{
+						pObject->Save(CSG_String::Format(SG_T("%s_%04d"), FileName.c_str(), i + 1));
+					}
+				}
+
+				m_Data_Objects.Add(pObject);
+			}
+
+			pParameter->asList()->Del_Items();
+		}
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CData_Objects::CData_Objects(void)
+{
+	m_pObjects	= NULL;
+	m_nObjects	= 0;
+}
+
+//---------------------------------------------------------
+CData_Objects::~CData_Objects(void)
+{
+	Clear(false);
+}
+
+//---------------------------------------------------------
+void CData_Objects::Clear(bool bDelete)
+{
+	if( m_pObjects )
+	{
+		if( bDelete )
+		{
+			for(int i=0; i<m_nObjects; i++)
+			{
+				delete(m_pObjects[i]);
+			}
+		}
+
+		SG_Free(m_pObjects);
+
+		m_pObjects	= NULL;
+		m_nObjects	= 0;
+	}
+}
+
+//---------------------------------------------------------
+void CData_Objects::Add(class CSG_Data_Object *pObject)
+{
+	if( pObject != DATAOBJECT_NOTSET && pObject != DATAOBJECT_CREATE )
+	{
+		for(int i=0; i<m_nObjects; i++)
+		{
+			if( m_pObjects[i] == pObject )
+			{
+				return;
+			}
+		}
+
+		m_pObjects	= (CSG_Data_Object **)SG_Realloc(m_pObjects, (m_nObjects + 1) * sizeof(CSG_Data_Object *));
+		m_pObjects[m_nObjects++]	= pObject;
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                                                       //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_cmd/saga_cmd.cpp b/src/saga_core/saga_cmd/saga_cmd.cpp
index 16df054..846d49c 100644
--- a/src/saga_core/saga_cmd/saga_cmd.cpp
+++ b/src/saga_core/saga_cmd/saga_cmd.cpp
@@ -198,7 +198,7 @@ _try
 
 	if( Flags.Find(FLAG_PROJ) > 0 )
 	{
-		SG_Get_Projections().Create(SG_File_Make_Path(CMD_Path, SG_T("saga"), SG_T("srs")));
+		SG_Get_Projections().Create(SG_File_Make_Path(CMD_Path, SG_T("saga_prj"), SG_T("srs")));
 	}
 
 	//-----------------------------------------------------
diff --git a/src/saga_core/saga_gdi/Makefile.in b/src/saga_core/saga_gdi/Makefile.in
index d3e60d8..8f35b53 100644
--- a/src/saga_core/saga_gdi/Makefile.in
+++ b/src/saga_core/saga_gdi/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/saga_core/saga_gdi
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -108,6 +114,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -157,14 +165,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -208,9 +229,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/saga_core/saga_gui/Makefile.am b/src/saga_core/saga_gui/Makefile.am
index ffee122..b8734b3 100644
--- a/src/saga_core/saga_gui/Makefile.am
+++ b/src/saga_core/saga_gui/Makefile.am
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.am,v 1.20 2010/07/22 12:47:13 johanvdw Exp $
+# $Id: Makefile.am,v 1.21 2010/10/22 09:15:15 oconrad Exp $
 #
 INCS = -I.. -I.
 if DEBUG
@@ -56,7 +56,6 @@ res_images.cpp\
 saga.cpp\
 saga_frame.cpp\
 saga_frame_droptarget.cpp\
-svg_interactive_map.cpp\
 view_base.cpp\
 view_histogram.cpp\
 view_layout.cpp\
@@ -148,7 +147,6 @@ res_images.h\
 saga.h\
 saga_frame.h\
 saga_frame_droptarget.h\
-svg_interactive_map.h\
 view_base.h\
 view_histogram.h\
 view_layout.h\
diff --git a/src/saga_core/saga_gui/Makefile.in b/src/saga_core/saga_gui/Makefile.in
index a93ec78..b5c4b7a 100644
--- a/src/saga_core/saga_gui/Makefile.in
+++ b/src/saga_core/saga_gui/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -38,7 +38,13 @@ bin_PROGRAMS = saga_gui$(EXEEXT)
 subdir = src/saga_core/saga_gui
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -63,37 +69,36 @@ am_saga_gui_OBJECTS = active.$(OBJEXT) active_attributes.$(OBJEXT) \
 	res_commands.$(OBJEXT) res_controls.$(OBJEXT) \
 	res_dialogs.$(OBJEXT) res_images.$(OBJEXT) saga.$(OBJEXT) \
 	saga_frame.$(OBJEXT) saga_frame_droptarget.$(OBJEXT) \
-	svg_interactive_map.$(OBJEXT) view_base.$(OBJEXT) \
-	view_histogram.$(OBJEXT) view_layout.$(OBJEXT) \
-	view_layout_control.$(OBJEXT) view_layout_info.$(OBJEXT) \
-	view_layout_printout.$(OBJEXT) view_map.$(OBJEXT) \
-	view_map_3d.$(OBJEXT) view_map_3d_image.$(OBJEXT) \
-	view_map_control.$(OBJEXT) view_ruler.$(OBJEXT) \
-	view_scatterplot.$(OBJEXT) view_table.$(OBJEXT) \
-	view_table_control.$(OBJEXT) view_table_diagram.$(OBJEXT) \
-	wksp.$(OBJEXT) wksp_base_control.$(OBJEXT) \
-	wksp_base_item.$(OBJEXT) wksp_base_manager.$(OBJEXT) \
-	wksp_data_control.$(OBJEXT) wksp_data_layers.$(OBJEXT) \
-	wksp_data_manager.$(OBJEXT) wksp_data_menu_file.$(OBJEXT) \
-	wksp_data_menu_files.$(OBJEXT) wksp_grid.$(OBJEXT) \
-	wksp_grid_manager.$(OBJEXT) wksp_grid_system.$(OBJEXT) \
-	wksp_layer.$(OBJEXT) wksp_layer_classify.$(OBJEXT) \
-	wksp_layer_legend.$(OBJEXT) wksp_map.$(OBJEXT) \
-	wksp_map_buttons.$(OBJEXT) wksp_map_control.$(OBJEXT) \
-	wksp_map_dc.$(OBJEXT) wksp_map_layer.$(OBJEXT) \
-	wksp_map_manager.$(OBJEXT) wksp_module.$(OBJEXT) \
-	wksp_module_control.$(OBJEXT) wksp_module_library.$(OBJEXT) \
-	wksp_module_manager.$(OBJEXT) wksp_module_menu.$(OBJEXT) \
-	wksp_pointcloud.$(OBJEXT) wksp_pointcloud_manager.$(OBJEXT) \
-	wksp_shapes.$(OBJEXT) wksp_shapes_edit.$(OBJEXT) \
-	wksp_shapes_line.$(OBJEXT) wksp_shapes_manager.$(OBJEXT) \
-	wksp_shapes_point.$(OBJEXT) wksp_shapes_points.$(OBJEXT) \
-	wksp_shapes_polygon.$(OBJEXT) wksp_shapes_type.$(OBJEXT) \
-	wksp_table.$(OBJEXT) wksp_table_manager.$(OBJEXT) \
-	wksp_tin.$(OBJEXT) wksp_tin_manager.$(OBJEXT) \
-	advprops.$(OBJEXT) editors.$(OBJEXT) extras.$(OBJEXT) \
-	manager.$(OBJEXT) odcombo.$(OBJEXT) propgrid.$(OBJEXT) \
-	props.$(OBJEXT)
+	view_base.$(OBJEXT) view_histogram.$(OBJEXT) \
+	view_layout.$(OBJEXT) view_layout_control.$(OBJEXT) \
+	view_layout_info.$(OBJEXT) view_layout_printout.$(OBJEXT) \
+	view_map.$(OBJEXT) view_map_3d.$(OBJEXT) \
+	view_map_3d_image.$(OBJEXT) view_map_control.$(OBJEXT) \
+	view_ruler.$(OBJEXT) view_scatterplot.$(OBJEXT) \
+	view_table.$(OBJEXT) view_table_control.$(OBJEXT) \
+	view_table_diagram.$(OBJEXT) wksp.$(OBJEXT) \
+	wksp_base_control.$(OBJEXT) wksp_base_item.$(OBJEXT) \
+	wksp_base_manager.$(OBJEXT) wksp_data_control.$(OBJEXT) \
+	wksp_data_layers.$(OBJEXT) wksp_data_manager.$(OBJEXT) \
+	wksp_data_menu_file.$(OBJEXT) wksp_data_menu_files.$(OBJEXT) \
+	wksp_grid.$(OBJEXT) wksp_grid_manager.$(OBJEXT) \
+	wksp_grid_system.$(OBJEXT) wksp_layer.$(OBJEXT) \
+	wksp_layer_classify.$(OBJEXT) wksp_layer_legend.$(OBJEXT) \
+	wksp_map.$(OBJEXT) wksp_map_buttons.$(OBJEXT) \
+	wksp_map_control.$(OBJEXT) wksp_map_dc.$(OBJEXT) \
+	wksp_map_layer.$(OBJEXT) wksp_map_manager.$(OBJEXT) \
+	wksp_module.$(OBJEXT) wksp_module_control.$(OBJEXT) \
+	wksp_module_library.$(OBJEXT) wksp_module_manager.$(OBJEXT) \
+	wksp_module_menu.$(OBJEXT) wksp_pointcloud.$(OBJEXT) \
+	wksp_pointcloud_manager.$(OBJEXT) wksp_shapes.$(OBJEXT) \
+	wksp_shapes_edit.$(OBJEXT) wksp_shapes_line.$(OBJEXT) \
+	wksp_shapes_manager.$(OBJEXT) wksp_shapes_point.$(OBJEXT) \
+	wksp_shapes_points.$(OBJEXT) wksp_shapes_polygon.$(OBJEXT) \
+	wksp_shapes_type.$(OBJEXT) wksp_table.$(OBJEXT) \
+	wksp_table_manager.$(OBJEXT) wksp_tin.$(OBJEXT) \
+	wksp_tin_manager.$(OBJEXT) advprops.$(OBJEXT) \
+	editors.$(OBJEXT) extras.$(OBJEXT) manager.$(OBJEXT) \
+	odcombo.$(OBJEXT) propgrid.$(OBJEXT) props.$(OBJEXT)
 saga_gui_OBJECTS = $(am_saga_gui_OBJECTS)
 saga_gui_DEPENDENCIES = ../saga_api/libsaga_api.la \
 	../saga_odbc/libsaga_odbc.la
@@ -169,6 +174,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -218,14 +225,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -269,9 +289,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -282,7 +306,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 #
-# $Id: Makefile.am,v 1.20 2010/07/22 12:47:13 johanvdw Exp $
+# $Id: Makefile.am,v 1.21 2010/10/22 09:15:15 oconrad Exp $
 #
 INCS = -I.. -I.
 @DEBUG_TRUE at DBGFLAGS = -g -DDEBUG
@@ -330,7 +354,6 @@ res_images.cpp\
 saga.cpp\
 saga_frame.cpp\
 saga_frame_droptarget.cpp\
-svg_interactive_map.cpp\
 view_base.cpp\
 view_histogram.cpp\
 view_layout.cpp\
@@ -422,7 +445,6 @@ res_images.h\
 saga.h\
 saga_frame.h\
 saga_frame_droptarget.h\
-svg_interactive_map.h\
 view_base.h\
 view_histogram.h\
 view_layout.h\
@@ -625,7 +647,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/saga.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/saga_frame.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/saga_frame_droptarget.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/svg_interactive_map.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/view_base.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/view_histogram.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/view_layout.Po at am__quote@
@@ -814,7 +835,7 @@ clean-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]*);; \
@@ -839,7 +860,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]*);; \
diff --git a/src/saga_core/saga_gui/active.cpp b/src/saga_core/saga_gui/active.cpp
index f1edb11..aa62984 100644
--- a/src/saga_core/saga_gui/active.cpp
+++ b/src/saga_core/saga_gui/active.cpp
@@ -230,9 +230,13 @@ bool CACTIVE::Set_Active(CWKSP_Base_Item *pItem)
 
 	if( m_pItem == NULL )
 	{
+		STATUSBAR_Set_Text(wxT(""), STATUSBAR_ACTIVE);
+
 		return( true );
 	}
 
+	STATUSBAR_Set_Text(m_pItem->Get_Name(), STATUSBAR_ACTIVE);
+
 	//-----------------------------------------------------
 	switch( m_pItem->Get_Type() )
 	{
@@ -389,55 +393,59 @@ bool CACTIVE::_Hide_Page(wxWindow *pPage)
 //---------------------------------------------------------
 bool CACTIVE::Update_Description(void)
 {
-	if( m_pItem != NULL )
+	if( m_pDescription == NULL )
 	{
-		STATUSBAR_Set_Text(m_pItem->Get_Name(), STATUSBAR_ACTIVE);
+		return( false );
+	}
 
-		//-------------------------------------------------
-		if( m_pDescription )
+	wxString	Description;
+
+	//-----------------------------------------------------
+	if( m_pItem == NULL )
+	{
+		Description	= LNG("[TXT] No description available");
+	}
+	else switch( m_pItem->Get_Type() )
+	{
+	default:
+		Description	= m_pItem->Get_Description();
+		break;
+
+	case WKSP_ITEM_Module:
 		{
-			switch( m_pItem->Get_Type() )
+			wxFileName	FileName;
+
+			FileName.Assign		(((CWKSP_Module *)m_pItem)->Get_File_Name());
+			FileName.AppendDir	(FileName.GetName());
+			FileName.SetName	(wxString::Format(wxT("%s_%02d"), FileName.GetName().c_str(), m_pItem->Get_Index()));
+
+			FileName.SetExt		(wxT("html"));
+
+			if( FileName.FileExists() && m_pDescription->LoadPage(FileName.GetFullPath()) )
+			{
+				return( true );
+			}
+
+			FileName.SetExt		(wxT("htm"));
+
+			if( FileName.FileExists() && m_pDescription->LoadPage(FileName.GetFullPath()) )
 			{
-			default:
-				m_pDescription->SetPage(m_pItem->Get_Description());
-				break;
-
-			case WKSP_ITEM_Module:
-				{
-					wxFileName	FileName;
-
-					FileName.Assign		(((CWKSP_Module *)m_pItem)->Get_File_Name());
-					FileName.AppendDir	(FileName.GetName());
-					FileName.SetName	(wxString::Format(wxT("%s_%02d"), FileName.GetName().c_str(), m_pItem->Get_Index()));
-
-					FileName.SetExt		(wxT("html"));
-
-					if( !FileName.FileExists() || !m_pDescription->LoadPage(FileName.GetFullPath()) )
-					{
-						FileName.SetExt		(wxT("htm"));
-
-						if( !FileName.FileExists() || !m_pDescription->LoadPage(FileName.GetFullPath()) )
-						{
-							m_pDescription->SetPage(m_pItem->Get_Description());
-						}
-					}
-				}
-				break;
+				return( true );
 			}
+
+			Description	= m_pItem->Get_Description();
 		}
+		break;
 	}
 
 	//-----------------------------------------------------
-	else
+	if( Description.Length() <= 8192 )
 	{
-		STATUSBAR_Set_Text(wxT(""), STATUSBAR_ACTIVE);
-
-		if( m_pDescription )
-		{
-			m_pDescription->SetPage(LNG("[TXT] No description available"));
-		}
+		Description.Replace(wxT("\n"), wxT("<br>"));
 	}
 
+	m_pDescription->SetPage(Description);
+
 	return( true );
 }
 
diff --git a/src/saga_core/saga_gui/callback.cpp b/src/saga_core/saga_gui/callback.cpp
index fd79560..38187fc 100644
--- a/src/saga_core/saga_gui/callback.cpp
+++ b/src/saga_core/saga_gui/callback.cpp
@@ -74,7 +74,7 @@
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
+int		Callback(TSG_UI_Callback_ID ID, CSG_UI_Parameter &Param_1, CSG_UI_Parameter &Param_2)
 {
 	int		Result, *iArray;
 
@@ -99,7 +99,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_PROCESS_GET_OKAY:
 
-		Result	= PROCESS_Get_Okay(Param_1 != 0);
+		Result	= PROCESS_Get_Okay(Param_1.True);
 
 		break;
 
@@ -107,7 +107,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_PROCESS_SET_OKAY:
 
-		Result	= PROCESS_Set_Okay(Param_1 != 0);
+		Result	= PROCESS_Set_Okay(Param_1.True);
 
 		break;
 
@@ -115,7 +115,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_PROCESS_SET_PROGRESS:
 
-		Result	= PROGRESSBAR_Set_Position(*((double *)Param_1), *((double *)Param_2));
+		Result	= PROGRESSBAR_Set_Position(Param_1.Number, Param_2.Number);
 
 		break;
 
@@ -130,7 +130,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_PROCESS_SET_TEXT:
 
-		STATUSBAR_Set_Text((wxChar *)Param_1);
+		STATUSBAR_Set_Text((wxChar *)Param_1.Pointer);
 
 		break;
 
@@ -146,7 +146,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 
 		if( g_pModule && g_pModule->is_Executing() )
 		{
-			Result	= g_pModule->Execute(false) ? 1 : 0;
+			Result	= g_pModule->Execute(Param_1.True) ? 1 : 0;
 		}
 
 		break;
@@ -161,9 +161,9 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_MESSAGE_ADD:
 
-		iArray	= (int *)Param_2;
+		iArray	= (int *)Param_2.Pointer;
 
-		MSG_General_Add		((wxChar *)Param_1, iArray[0] != 0, iArray[0] != 0, (TSG_UI_MSG_STYLE)iArray[1]);
+		MSG_General_Add		((wxChar *)Param_1.Pointer, iArray[0] != 0, iArray[0] != 0, (TSG_UI_MSG_STYLE)iArray[1]);
 
 		break;
 
@@ -171,7 +171,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_MESSAGE_ADD_ERROR:
 
-		MSG_Error_Add		((wxChar *)Param_1, true);
+		MSG_Error_Add		((wxChar *)Param_1.Pointer, true);
 
 		break;
 
@@ -179,9 +179,9 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_MESSAGE_ADD_EXECUTION:
 
-		iArray	= (int *)Param_2;
+		iArray	= (int *)Param_2.Pointer;
 
-		MSG_Execution_Add	((wxChar *)Param_1, iArray[0] != 0, iArray[0] != 0, (TSG_UI_MSG_STYLE)iArray[1]);
+		MSG_Execution_Add	((wxChar *)Param_1.Pointer, iArray[0] != 0, iArray[0] != 0, (TSG_UI_MSG_STYLE)iArray[1]);
 
 		break;
 
@@ -195,7 +195,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DLG_MESSAGE:
 
-		DLG_Message_Show((wxChar *)Param_1, (wxChar *)Param_2);
+		DLG_Message_Show((wxChar *)Param_1.Pointer, (wxChar *)Param_2.Pointer);
 
 		break;
 
@@ -203,7 +203,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DLG_CONTINUE:
 
-		Result	= DLG_Message_Confirm((wxChar *)Param_1, (wxChar *)Param_2);
+		Result	= DLG_Message_Confirm((wxChar *)Param_1.Pointer, (wxChar *)Param_2.Pointer);
 
 		break;
 
@@ -211,7 +211,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DLG_ERROR:
 
-		Result	= DLG_Message_Show_Error((wxChar *)Param_1, (wxChar *)Param_2);
+		Result	= DLG_Message_Show_Error((wxChar *)Param_1.Pointer, (wxChar *)Param_2.Pointer);
 
 		break;
 
@@ -225,7 +225,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DLG_PARAMETERS:
 
-		Result	= DLG_Parameters((CSG_Parameters *)Param_1) ? 1 : 0;
+		Result	= DLG_Parameters((CSG_Parameters *)Param_1.Pointer) ? 1 : 0;
 
 		break;
 
@@ -239,7 +239,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DATAOBJECT_FIND_BY_FILE:
 
-		Result	= (long)g_pData->Get_byFileName((const wxChar *)Param_1, Param_2);
+		Param_1.Pointer	= g_pData->Get_byFileName((const wxChar *)Param_1.Pointer, (int)Param_2.Number);
 
 		break;
 
@@ -247,7 +247,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DATAOBJECT_CHECK:
 
-		Result	= g_pData->Exists((CSG_Data_Object *)Param_1, Param_2) ? 1 : 0;
+		Result	= g_pData->Exists((CSG_Data_Object *)Param_1.Pointer, (int)Param_2.Number) ? 1 : 0;
 
 		break;
 
@@ -255,11 +255,11 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DATAOBJECT_ADD:
 
-		Result	= g_pData->Add((CSG_Data_Object *)Param_1) ? 1 : 0;
+		Result	= g_pData->Add((CSG_Data_Object *)Param_1.Pointer) ? 1 : 0;
 
-		if( Result && Param_2 )
+		if( Result && Param_2.True )
 		{
-			g_pData->Show((CSG_Data_Object *)Param_1, false);
+			g_pData->Show((CSG_Data_Object *)Param_1.Pointer, false);
 		}
 
 		break;
@@ -268,7 +268,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DATAOBJECT_UPDATE:
 
-		Result	= g_pData->Update((CSG_Data_Object *)Param_1, (CSG_Parameters *)Param_2) ? 1 : 0;
+		Result	= g_pData->Update((CSG_Data_Object *)Param_1.Pointer, (CSG_Parameters *)Param_2.Pointer) ? 1 : 0;
 
 		break;
 
@@ -276,7 +276,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DATAOBJECT_SHOW:
 
-		Result	= g_pData->Show((CSG_Data_Object *)Param_1, Param_2) ? 1 : 0;
+		Result	= g_pData->Show((CSG_Data_Object *)Param_1.Pointer, (int)Param_2.Number) ? 1 : 0;
 
 		break;
 
@@ -284,7 +284,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DATAOBJECT_ASIMAGE:
 
-		Result	= g_pData->asImage((CSG_Data_Object *)Param_1, (CSG_Grid *)Param_2) ? 1 : 0;
+		Result	= g_pData->asImage((CSG_Data_Object *)Param_1.Pointer, (CSG_Grid *)Param_2.Pointer) ? 1 : 0;
 
 		break;
 
@@ -292,7 +292,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DATAOBJECT_COLORS_GET:
 
-		Result	= g_pData->Get_Colors((CSG_Data_Object *)Param_1, (CSG_Colors *)Param_2) ? 1 : 0;
+		Result	= g_pData->Get_Colors((CSG_Data_Object *)Param_1.Pointer, (CSG_Colors *)Param_2.Pointer) ? 1 : 0;
 
 		break;
 
@@ -300,7 +300,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DATAOBJECT_COLORS_SET:
 
-		Result	= g_pData->Set_Colors((CSG_Data_Object *)Param_1, (CSG_Colors *)Param_2) ? 1 : 0;
+		Result	= g_pData->Set_Colors((CSG_Data_Object *)Param_1.Pointer, (CSG_Colors *)Param_2.Pointer) ? 1 : 0;
 
 		break;
 
@@ -308,7 +308,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DATAOBJECT_PARAMS_GET:
 
-		Result	= g_pData->Get_Parameters((CSG_Data_Object *)Param_1, (CSG_Parameters *)Param_2) ? 1 : 0;
+		Result	= g_pData->Get_Parameters((CSG_Data_Object *)Param_1.Pointer, (CSG_Parameters *)Param_2.Pointer) ? 1 : 0;
 
 		break;
 
@@ -316,7 +316,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DATAOBJECT_PARAMS_SET:
 
-		Result	= g_pData->Set_Parameters((CSG_Data_Object *)Param_1, (CSG_Parameters *)Param_2) ? 1 : 0;
+		Result	= g_pData->Set_Parameters((CSG_Data_Object *)Param_1.Pointer, (CSG_Parameters *)Param_2.Pointer) ? 1 : 0;
 
 		break;
 
@@ -324,7 +324,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_DATAOBJECT_GET_ALL:
 
-		Result	= g_pData->Get_DataObject_List((CSG_Parameters *)Param_1) ? 1 : 0;
+		Result	= g_pData->Get_DataObject_List((CSG_Parameters *)Param_1.Pointer) ? 1 : 0;
 
 		break;
 
@@ -338,7 +338,7 @@ int		Callback(TSG_UI_Callback_ID ID, long Param_1, long Param_2)
 	//-----------------------------------------------------
 	case CALLBACK_GUI_GET_WINDOW:
 
-		Result	= (long)MDI_Get_Frame();
+		Param_1.Pointer	= MDI_Get_Frame();
 
 		break;
 
diff --git a/src/saga_core/saga_gui/dlg_about.cpp b/src/saga_core/saga_gui/dlg_about.cpp
index d24a7ed..5f3987e 100644
--- a/src/saga_core/saga_gui/dlg_about.cpp
+++ b/src/saga_core/saga_gui/dlg_about.cpp
@@ -196,20 +196,32 @@ wxString CDLG_About::_Get_Version(void)
 		wxT("http://www.saga-gis.org\n")
 	);
 
-#ifdef _SAGA_UNICODE
-	s.Append(wxT("_______________________\n\n"));
+	//-----------------------------------------------------
+	// Target
 
-	s.Append(
-		wxT("UNICODE\n")
-	);
+	s	+= wxT("_______________________\n\n");
+
+#ifdef _SAGA_MSW
+	#ifdef _WIN64
+		s	+= wxT("64 bit\n");
+	#else
+		s	+= wxT("32 bit\n");
+	#endif
+#endif
+
+#ifdef _SAGA_UNICODE
+	s	+= wxT("unicode\n");
+#else
+	s	+= wxT("single byte characters\n");
 #endif
 
+	//-----------------------------------------------------
 	s.Append(wxT("_______________________\n\n"));
 
 	s.Append(wxString::Format(
 		wxT("SAGA GUI\nSAGA Graphical User Interface - Version: %s\n")
 		wxT("\n")
-		wxT("Copyrights (c) 2005-2009 by Olaf Conrad\n")
+		wxT("Copyrights (c) 2005-2010 by Olaf Conrad\n")
 		wxT("\n")
 		wxT("GNU General Public License (GPL)\n"),
 		SAGA_GUI_Get_Version()
@@ -220,7 +232,7 @@ wxString CDLG_About::_Get_Version(void)
 	s.Append(wxString::Format(
 		wxT("SAGA API\n%s\n")
 		wxT("\n")
-		wxT("Copyrights (c) 2002-2009 by Olaf Conrad\n")
+		wxT("Copyrights (c) 2002-2010 by Olaf Conrad\n")
 		wxT("Portions (c) 2002 by Andre Ringeler\n")	// " (mat_formula.cpp)\n")
 		wxT("Portions (c) 2005-2006 by Victor Olaya\n")
 		wxT("\n")
@@ -247,24 +259,6 @@ wxString CDLG_About::_Get_Version(void)
 	Version	-= (Version / 10  ) * 10;
 	s.Append(wxT("\n"));
 
-	if( CSG_Doc_PDF::Get_Version() != NULL )
-	{
-		s.Append(wxT("_______________________\n\n"));
-
-		s.Append(
-			wxT("SAGA uses\n")
-		);
-
-		s.Append(
-			CSG_Doc_PDF::Get_Version()
-		);
-
-		s.Append(
-			wxT("\n")
-			wxT("http://sourceforge.net/projects/libharu\n")
-		);
-	}
-
 	s.Append(wxT("_______________________\n\n"));
 
 	s.Append(
diff --git a/src/saga_core/saga_gui/dlg_list_base.cpp b/src/saga_core/saga_gui/dlg_list_base.cpp
index 1d4e617..df96ab5 100644
--- a/src/saga_core/saga_gui/dlg_list_base.cpp
+++ b/src/saga_core/saga_gui/dlg_list_base.cpp
@@ -84,7 +84,9 @@ IMPLEMENT_CLASS(CDLG_List_Base, CDLG_Base)
 //---------------------------------------------------------
 BEGIN_EVENT_TABLE(CDLG_List_Base, CDLG_Base)
 	EVT_BUTTON			(ID_BTN_ADD			, CDLG_List_Base::On_Add)
+	EVT_BUTTON			(ID_BTN_ADD_ALL		, CDLG_List_Base::On_Add_All)
 	EVT_BUTTON			(ID_BTN_DELETE		, CDLG_List_Base::On_Del)
+	EVT_BUTTON			(ID_BTN_DELETE_ALL	, CDLG_List_Base::On_Del_All)
 	EVT_BUTTON			(ID_BTN_UP			, CDLG_List_Base::On_Up)
 	EVT_BUTTON			(ID_BTN_DOWN		, CDLG_List_Base::On_Down)
 
@@ -108,10 +110,12 @@ CDLG_List_Base::CDLG_List_Base(CSG_Parameter_List *pList, wxString Caption)
 	m_pSelect		= new wxListBox	(this, ID_LISTBOX_SELECT, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB|wxLB_SORT);	// |wxLB_EXTENDED
 	m_pAdd			= new wxListBox	(this, ID_LISTBOX_ADD   , wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB);
 
-	m_pBtn_Add		= new wxButton	(this, ID_BTN_ADD   , wxT(">>"));
-	m_pBtn_Del		= new wxButton	(this, ID_BTN_DELETE, wxT("<<"));
-	m_pBtn_Up		= new wxButton	(this, ID_BTN_UP    , CTRL_Get_Name(ID_BTN_UP));
-	m_pBtn_Down		= new wxButton	(this, ID_BTN_DOWN  , CTRL_Get_Name(ID_BTN_DOWN));
+	m_pBtn_Add_All	= new wxButton	(this, ID_BTN_ADD_ALL   , wxT(">>"));
+	m_pBtn_Add		= new wxButton	(this, ID_BTN_ADD       , wxT(">"));
+	m_pBtn_Del		= new wxButton	(this, ID_BTN_DELETE    , wxT("<"));
+	m_pBtn_Del_All	= new wxButton	(this, ID_BTN_DELETE_ALL, wxT("<<"));
+	m_pBtn_Up		= new wxButton	(this, ID_BTN_UP        , CTRL_Get_Name(ID_BTN_UP));
+	m_pBtn_Down		= new wxButton	(this, ID_BTN_DOWN      , CTRL_Get_Name(ID_BTN_DOWN));
 
 	m_btn_height	= m_pBtn_Add->GetDefaultSize().y;
 
@@ -167,11 +171,17 @@ void CDLG_List_Base::Set_Position(wxRect r)
 	m_pAdd->SetSize(r);
 
 	r		= wxRect(Center - DLG_LIST_BTN_WIDTH / 2, r.GetTop(), DLG_LIST_BTN_WIDTH, m_btn_height);
-	m_pBtn_Add->SetSize(r);
+	m_pBtn_Add_All->SetSize(r);
 
 	r.SetTop(r.GetBottom() + DLG_LIST_BTN_DIST);
+	m_pBtn_Add->SetSize(r);
+
+	r.SetTop(r.GetBottom() + DLG_LIST_BTN_DIST * 2);
 	m_pBtn_Del->SetSize(r);
 
+	r.SetTop(r.GetBottom() + DLG_LIST_BTN_DIST);
+	m_pBtn_Del_All->SetSize(r);
+
 	r.SetTop(r.GetBottom() + DLG_LIST_BTN_DIST * 2);
 	m_pBtn_Up->SetSize(r);
 
@@ -190,9 +200,16 @@ void CDLG_List_Base::Save_Changes(void)
 		{
 		case PARAMETER_TYPE_Grid_List:			m_pList->Add_Item(((CWKSP_Grid       *)m_pAdd->GetClientData(i))->Get_Grid      ());	break;
 		case PARAMETER_TYPE_Table_List:			m_pList->Add_Item(((CWKSP_Table      *)m_pAdd->GetClientData(i))->Get_Table     ());	break;
-		case PARAMETER_TYPE_Shapes_List:		m_pList->Add_Item(((CWKSP_Shapes     *)m_pAdd->GetClientData(i))->Get_Shapes    ());	break;
 		case PARAMETER_TYPE_TIN_List:			m_pList->Add_Item(((CWKSP_TIN        *)m_pAdd->GetClientData(i))->Get_TIN       ());	break;
 		case PARAMETER_TYPE_PointCloud_List:	m_pList->Add_Item(((CWKSP_PointCloud *)m_pAdd->GetClientData(i))->Get_PointCloud());	break;
+		case PARAMETER_TYPE_Shapes_List:
+			switch( ((CWKSP_Base_Item *)m_pAdd->GetClientData(i))->Get_Type() )
+			{
+			case WKSP_ITEM_Shapes:				m_pList->Add_Item(((CWKSP_Shapes     *)m_pAdd->GetClientData(i))->Get_Shapes    ());	break;
+			case WKSP_ITEM_PointCloud:			m_pList->Add_Item(((CWKSP_PointCloud *)m_pAdd->GetClientData(i))->Get_PointCloud());	break;
+			default:	break;
+			}
+			break;
 		default:	return;
 		}
 	}
@@ -225,12 +242,12 @@ int ArrayInt_CMP_Down(int *first, int *second)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-void CDLG_List_Base::On_Del(wxCommandEvent &event)
+void CDLG_List_Base::On_DClick_Del(wxCommandEvent &event)
 {
 	_Del();
 }
 
-void CDLG_List_Base::On_DClick_Del(wxCommandEvent &event)
+void CDLG_List_Base::On_Del(wxCommandEvent &event)
 {
 	_Del();
 }
@@ -254,36 +271,56 @@ void CDLG_List_Base::_Del(void)
 	}
 }
 
+void CDLG_List_Base::On_Del_All(wxCommandEvent &event)
+{
+	for(unsigned int i=0; i<m_pAdd->GetCount(); i++)
+	{
+		m_pSelect->Append(m_pAdd->GetString(i), m_pAdd->GetClientData(i));
+	}
+
+	m_pAdd->Clear();
+}
+
 //---------------------------------------------------------
-void CDLG_List_Base::On_Add(wxCommandEvent &event)
+void CDLG_List_Base::On_DClick_Add(wxCommandEvent &event)
 {
 	_Add();
 }
 
-void CDLG_List_Base::On_DClick_Add(wxCommandEvent &event)
+void CDLG_List_Base::On_Add(wxCommandEvent &event)
 {
 	_Add();
 }
 
 void CDLG_List_Base::_Add(void)
 {
-	int			i, j, n;
+	int			i, j, n, m;
 	wxArrayInt	Selections;
 
 	if( (n = m_pSelect->GetSelections(Selections)) > 0 )
 	{
 		Selections.Sort(ArrayInt_CMP_Down);
 
-		for(i=0; i<n; i++)
+		for(i=0, m=m_pAdd->GetCount(); i<n; i++)
 		{
 			j	= Selections.Item(i);
 
-			m_pAdd->Insert(m_pSelect->GetString(j), 0, m_pSelect->GetClientData(j));
+			m_pAdd->Insert(m_pSelect->GetString(j), m, m_pSelect->GetClientData(j));
 			m_pSelect->Delete(j);
 		}
 	}
 }
 
+void CDLG_List_Base::On_Add_All(wxCommandEvent &event)
+{
+	for(unsigned int i=0; i<m_pSelect->GetCount(); i++)
+	{
+		m_pAdd->Append(m_pSelect->GetString(i), m_pSelect->GetClientData(i));
+	}
+
+	m_pSelect->Clear();
+}
+
 
 ///////////////////////////////////////////////////////////
 //														 //
diff --git a/src/saga_core/saga_gui/dlg_list_base.h b/src/saga_core/saga_gui/dlg_list_base.h
index c96c3b3..a704e15 100644
--- a/src/saga_core/saga_gui/dlg_list_base.h
+++ b/src/saga_core/saga_gui/dlg_list_base.h
@@ -101,10 +101,12 @@ public:
 	CDLG_List_Base(class CSG_Parameter_List *pList, wxString Caption);
 	virtual ~CDLG_List_Base(void);
 
-	void						On_Add			(wxCommandEvent &event);
 	void						On_DClick_Add	(wxCommandEvent &event);
-	void						On_Del			(wxCommandEvent &event);
+	void						On_Add			(wxCommandEvent &event);
+	void						On_Add_All		(wxCommandEvent &event);
 	void						On_DClick_Del	(wxCommandEvent &event);
+	void						On_Del			(wxCommandEvent &event);
+	void						On_Del_All		(wxCommandEvent &event);
 	void						On_Up			(wxCommandEvent &event);
 	void						On_Down			(wxCommandEvent &event);
 
@@ -113,11 +115,11 @@ protected:
 
 	int							m_btn_height;
 
-	wxButton					*m_pBtn_Add, *m_pBtn_Del, *m_pBtn_Up, *m_pBtn_Down;
+	wxButton					*m_pBtn_Add, *m_pBtn_Add_All, *m_pBtn_Del, *m_pBtn_Del_All, *m_pBtn_Up, *m_pBtn_Down;
 
 	wxListBox					*m_pAdd, *m_pSelect;
 
-	class CSG_Parameter_List		*m_pList;
+	class CSG_Parameter_List	*m_pList;
 
 
 	virtual void				Set_Position	(wxRect r);
diff --git a/src/saga_core/saga_gui/dlg_list_shapes.cpp b/src/saga_core/saga_gui/dlg_list_shapes.cpp
index cbdb7ce..0f5b8fe 100644
--- a/src/saga_core/saga_gui/dlg_list_shapes.cpp
+++ b/src/saga_core/saga_gui/dlg_list_shapes.cpp
@@ -64,6 +64,8 @@
 #include "wksp_shapes_manager.h"
 #include "wksp_shapes_type.h"
 #include "wksp_shapes.h"
+#include "wksp_pointcloud_manager.h"
+#include "wksp_pointcloud.h"
 
 #include "dlg_list_shapes.h"
 
@@ -112,46 +114,59 @@ CDLG_List_Shapes::~CDLG_List_Shapes(void)
 //---------------------------------------------------------
 void CDLG_List_Shapes::_Set_Objects(void)
 {
-	int						i;
-	CWKSP_Shapes_Manager	*pManager;
+	int					i;
+	CWKSP_Base_Item		*pItem;
+	CWKSP_Base_Manager	*pManager;
 
 	//-----------------------------------------------------
-	if( (pManager = g_pData->Get_Shapes()) != NULL )
+	for(i=0; i<m_pList->Get_Count(); i++)
 	{
-		for(i=0; i<m_pList->Get_Count(); i++)
+		if(	(pItem = g_pData->Get_Shapes     ()->Get_Shapes    (m_pList->asDataObject(i)->asShapes    ())) != NULL
+		||	(pItem = g_pData->Get_PointClouds()->Get_PointCloud(m_pList->asDataObject(i)->asPointCloud())) != NULL )
 		{
-			CWKSP_Base_Item	*pItem	= g_pData->Get_Shapes()->Get_Shapes(m_pList->asDataObject(i)->asShapes());
-
-			if( pItem )
-			{
-				m_pAdd->Append(pItem->Get_Name(), (void *)pItem);
-			}
+			m_pAdd->Append(pItem->Get_Name(), (void *)pItem);
 		}
+	}
 
-		//-------------------------------------------------
-		if( m_Shape_Type == SHAPE_TYPE_Undefined )
+	//-----------------------------------------------------
+	if( m_Shape_Type == SHAPE_TYPE_Undefined )
+	{
+		if( (pManager = g_pData->Get_Shapes()) != NULL )
 		{
 			for(i=0; i<pManager->Get_Count(); i++)
 			{
 				_Set_Shapes((CWKSP_Shapes_Type *)pManager->Get_Item(i));
 			}
 		}
-		else
+
+		if( (pManager = g_pData->Get_PointClouds()) != NULL )
+		{
+			_Set_Shapes(pManager);
+		}
+	}
+	else
+	{
+		if( (pManager = g_pData->Get_Shapes()) != NULL )
+		{
+			_Set_Shapes(((CWKSP_Shapes_Manager *)pManager)->Get_Shapes_Type(m_Shape_Type));
+		}
+
+		if( m_Shape_Type == SHAPE_TYPE_Point && (pManager = g_pData->Get_PointClouds()) != NULL )
 		{
-			_Set_Shapes(pManager->Get_Shapes_Type(m_Shape_Type));
+			_Set_Shapes(pManager);
 		}
 	}
 }
 
 //---------------------------------------------------------
-void CDLG_List_Shapes::_Set_Shapes(CWKSP_Shapes_Type *pType)
+void CDLG_List_Shapes::_Set_Shapes(CWKSP_Base_Manager *pType)
 {
 	if( pType )
 	{
 		for(int i=0; i<pType->Get_Count(); i++)
 		{
 			bool			bList		= true;
-			CWKSP_Shapes	*pShapes	= pType->Get_Shapes(i);
+			CWKSP_Base_Item	*pShapes	= pType->Get_Item(i);
 
 			for(int j=0; j<(int)m_pAdd->GetCount() && bList; j++)
 			{
diff --git a/src/saga_core/saga_gui/dlg_list_shapes.h b/src/saga_core/saga_gui/dlg_list_shapes.h
index 48663fd..458f7fa 100644
--- a/src/saga_core/saga_gui/dlg_list_shapes.h
+++ b/src/saga_core/saga_gui/dlg_list_shapes.h
@@ -95,7 +95,7 @@ protected:
 
 	virtual void				_Set_Objects(void);
 
-	void						_Set_Shapes(class CWKSP_Shapes_Type *pType);
+	void						_Set_Shapes(class CWKSP_Base_Manager *pType);
 
 
 //---------------------------------------------------------
diff --git a/src/saga_core/saga_gui/helper.cpp b/src/saga_core/saga_gui/helper.cpp
index 917a254..8c812fc 100644
--- a/src/saga_core/saga_gui/helper.cpp
+++ b/src/saga_core/saga_gui/helper.cpp
@@ -180,7 +180,9 @@ wxString		Get_TableInfo_asHTML(CSG_Table *pTable)
 
 	if( pTable && pTable->is_Valid() )
 	{
-		s.Append(wxString::Format(wxT("<table border=\"1\"><tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th>"),
+		s	+= wxString::Format(wxT("<hr><b>%s</b>"), LNG("[CAP] Table Description"));
+
+		s	+= wxString::Format(wxT("<table border=\"1\"><tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th>"),
 			LNG("[CAP] Field"),
 			LNG("[CAP] Name"),
 			LNG("[CAP] Type"),
@@ -188,11 +190,11 @@ wxString		Get_TableInfo_asHTML(CSG_Table *pTable)
 			LNG("[CAP] Maximum"),
 			LNG("[CAP] Mean"),
 			LNG("[CAP] Standard Deviation")
-		));
+		);
 
 		for(int i=0; i<pTable->Get_Field_Count(); i++)
 		{
-			s.Append(wxString::Format(wxT("<tr><td>%d</td><td>%s</td><td>%s</td><td>%f</td><td>%f</td><td>%f</td><td>%f</td></tr>"),
+			s	+= wxString::Format(wxT("<tr><td>%d</td><td>%s</td><td>%s</td><td>%f</td><td>%f</td><td>%f</td><td>%f</td></tr>"),
 				i + 1,
 				pTable->Get_Field_Name(i),
 				SG_Data_Type_Get_Name(pTable->Get_Field_Type(i)),
@@ -200,10 +202,10 @@ wxString		Get_TableInfo_asHTML(CSG_Table *pTable)
 				pTable->Get_Maximum(i),
 				pTable->Get_Mean(i),
 				pTable->Get_StdDev(i)
-			));
+			);
 		}
 
-		s.Append(wxT("</table>"));
+		s	+= wxT("</table>");
 	}
 
 	return( s );
diff --git a/src/saga_core/saga_gui/man/Makefile.in b/src/saga_core/saga_gui/man/Makefile.in
index ba3507b..0140477 100644
--- a/src/saga_core/saga_gui/man/Makefile.in
+++ b/src/saga_core/saga_gui/man/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,
@@ -37,7 +37,13 @@ subdir = src/saga_core/saga_gui/man
 DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -78,6 +84,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -127,14 +135,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -178,9 +199,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
diff --git a/src/saga_core/saga_gui/parameters_control.cpp b/src/saga_core/saga_gui/parameters_control.cpp
index f9ec8b4..2e1c1c5 100644
--- a/src/saga_core/saga_gui/parameters_control.cpp
+++ b/src/saga_core/saga_gui/parameters_control.cpp
@@ -597,6 +597,10 @@ wxPGProperty * CParameters_Control::_Get_Property(wxPGProperty *pParent, CSG_Par
 			{
 				pProperty->SetAttribute(wxPG_STRING_PASSWORD, (long)pParameter->asString());
 			}
+			else if( pParameter->is_Information() )
+			{
+				m_pPG->LimitPropertyEditing(pProperty);
+			}
 			break;
 
 		case PARAMETER_TYPE_Color:
diff --git a/src/saga_core/saga_gui/parameters_properties.cpp b/src/saga_core/saga_gui/parameters_properties.cpp
index 16237b1..2c3242d 100644
--- a/src/saga_core/saga_gui/parameters_properties.cpp
+++ b/src/saga_core/saga_gui/parameters_properties.cpp
@@ -94,7 +94,7 @@
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-#define GET_DATAOBJECT_LABEL(p)	(p->is_Option() ? wxString::Format(p->Get_Name()) : wxString::Format(wxT("%s %s"), p->is_Input() ? (p->is_Optional() ? wxT(">") : wxT(">>")) : (p->is_Optional() ? wxT("<") : wxT("<<")), p->Get_Name()))
+#define GET_DATAOBJECT_LABEL(p)	(!p->is_DataObject() ? wxString::Format(p->Get_Name()) : wxString::Format(wxT("%s %s"), p->is_Input() ? (p->is_Optional() ? wxT(">") : wxT(">>")) : (p->is_Optional() ? wxT("<") : wxT("<<")), p->Get_Name()))
 
 
 ///////////////////////////////////////////////////////////
@@ -602,7 +602,7 @@ bool CParameters_PG_Parameter_Value::Do_Dialog(void)
 		case PARAMETER_TYPE_Text:
 			bModified	= DLG_Text			(m_pParameter->Get_Name(), Text = m_pParameter->asString());
 
-			if( bModified )
+			if( bModified && !m_pParameter->is_Information() )
 			{
 				m_pParameter->Set_Value(Text.c_str());
 
diff --git a/src/saga_core/saga_gui/res/CVS/Entries b/src/saga_core/saga_gui/res/CVS/Entries
index ec52eb3..4244416 100644
--- a/src/saga_core/saga_gui/res/CVS/Entries
+++ b/src/saga_core/saga_gui/res/CVS/Entries
@@ -3,7 +3,8 @@
 /saga.ger.txt/1.2/Wed Apr 28 23:32:08 2010//
 /saga.ico/1.1.1.1/Mon Jun 26 15:42:59 2006/-kb/
 /saga.lng.txt/1.2/Wed Apr 28 23:32:08 2010//
+/saga_dic.txt/1.1/Mon Sep 20 16:22:25 2010//
 /saga_gui.rc/1.1.1.1/Mon Jun 26 15:43:00 2006//
 /saga_srs.txt/1.1/Thu Oct  1 14:01:33 2009//
 /saga_tip.txt/1.2/Thu Mar 22 17:01:17 2007//
-D
+D/xpm////
diff --git a/src/saga_core/saga_gui/res/CVS/Entries.Log b/src/saga_core/saga_gui/res/CVS/Entries.Log
deleted file mode 100644
index 9945310..0000000
--- a/src/saga_core/saga_gui/res/CVS/Entries.Log
+++ /dev/null
@@ -1 +0,0 @@
-A D/xpm////
diff --git a/src/saga_core/saga_gui/res/CVS/Root b/src/saga_core/saga_gui/res/CVS/Root
index 8a7f9bf..901c101 100644
--- a/src/saga_core/saga_gui/res/CVS/Root
+++ b/src/saga_core/saga_gui/res/CVS/Root
@@ -1 +1 @@
-:pserver:anonymous at saga-gis.cvs.sourceforge.net:/cvsroot/saga-gis
+:ext:reklov_w at saga-gis.cvs.sourceforge.net:/cvsroot/saga-gis
diff --git a/src/saga_core/saga_gui/res/saga_dic.txt b/src/saga_core/saga_gui/res/saga_dic.txt
new file mode 100644
index 0000000..abcc746
--- /dev/null
+++ b/src/saga_core/saga_gui/res/saga_dic.txt
@@ -0,0 +1,208 @@
+PROJ4	DIR	WKT	DESC
+aea	 	Albers_Conic_Equal_Area	Albers Equal Area
+aea	<	Albers	[ESRI] Albers Equal Area
+aeqd	 	Azimuthal_Equidistant	Azimuthal Equidistant
+airy	 	Airy	*) Airy
+aitoff	 	Aitoff	[ESRI] Aitoff
+alsk	 	Mod_Stererographics_of_Alaska	*) Mod. Stererographics of Alaska
+apian	 	Apian_Globular_I	*) Apian Globular I
+august	 	August_Epicycloidal	*) August Epicycloidal
+bacon	 	Bacon_Globular	*) Bacon Globular
+bipc	 	Bipolar_conic_of_western_hemisphere	*) Bipolar conic of western hemisphere
+boggs	 	Boggs_Eumorphic	*) Boggs Eumorphic
+bonne	 	Bonne	Bonne (Werner lat_1=90)
+cass	 	Cassini_Soldner	Cassini
+cass	<	Cassini	[ESRI] Cassini
+cc	 	Central_Cylindrical	*) Central Cylindrical
+cea	 	Cylindrical_Equal_Area	Equal Area Cylindrical, alias: Lambert Cyl.Eq.A., Normal Authalic Cyl. (FME), Behrmann (SP=30), Gall Orthogr. (SP=45)
+cea	<	Behrmann	[ESRI] Behrmann (standard parallel = 30)
+chamb	 	Chamberlin_Trimetric	*) Chamberlin Trimetric
+collg	 	Collignon	*) Collignon
+crast	 	Craster_Parabolic	[ESRI] Craster Parabolic (Putnins P4)
+denoy	 	Denoyer_Semi_Elliptical	*) Denoyer Semi-Elliptical
+eck1	 	Eckert_I	*) Eckert I
+eck2	 	Eckert_II	*) Eckert II
+eck3	 	Eckert_III	*) Eckert III
+eck4	 	Eckert_IV	Eckert IV
+eck5	 	Eckert_V	*) Eckert V
+eck6	 	Eckert_VI	Eckert VI
+eqc	 	Equirectangular	Equidistant Cylindrical (Plate Caree)
+eqc	<	Equidistant_Cylindrical	[ESRI] Equidistant Cylindrical (Plate Caree)
+eqc	<	Plate_Carree	[ESRI] Equidistant Cylindrical (Plate Caree)
+eqdc	 	Equidistant_Conic	*) Equidistant Conic
+euler	 	Euler	*) Euler
+fahey	 	Fahey	*) Fahey
+fouc	 	Foucault	*) Foucaut
+fouc_s	 	Foucault_Sinusoidal	*) Foucaut Sinusoidal
+gall	 	Gall_Stereographic	Gall (Gall Stereographic)
+geocent	 	Geocentric	*) Geocentric
+geos	 	GEOS	Geostationary Satellite View
+gins8	 	Ginsburg_VIII	*) Ginsburg VIII (TsNIIGAiK)
+gn_sinu	 	General_Sinusoidal_Series	*) General Sinusoidal Series
+gnom	 	Gnomonic	Gnomonic
+goode	 	Goode_Homolosine	*) Goode Homolosine
+gs48	 	Mod_Stererographics_48	*) Mod. Stererographics of 48 U.S.
+gs50	 	Mod_Stererographics_50	*) Mod. Stererographics of 50 U.S.
+hammer	 	Hammer_Eckert_Greifendorff	*) Hammer & Eckert-Greifendorff
+hatano	 	Hatano_Asymmetrical_Equal_Area	*) Hatano Asymmetrical Equal Area
+imw_p	 	Internation_Map_of_the_World_Polyconic	*) Internation Map of the World Polyconic
+kav5	 	Kavraisky_V	*) Kavraisky V
+kav7	 	Kavraisky_VII	*) Kavraisky VII
+krovak	 	Krovak	Krovak
+labrd	 	Laborde_Oblique_Mercator	*) Laborde
+laea	 	Lambert_Azimuthal_Equal_Area	Lambert Azimuthal Equal Area
+lagrng	 	Lagrange	*) Lagrange
+larr	 	Larrivee	*) Larrivee
+lask	 	Laskowski	*) Laskowski
+lcc	<	Lambert_Conformal_Conic_1SP	Lambert Conformal Conic (1 standard parallel)
+lcc	<	Lambert_Conformal_Conic_2SP	Lambert Conformal Conic (2 standard parallels)
+lcc	 	Lambert_Conformal_Conic	Lambert Conformal Conic
+lcca	 	Lambert_Conformal_Conic_Alternative	*) Lambert Conformal Conic Alternative
+leac	 	Lambert_Equal_Area_Conic	*) Lambert Equal Area Conic
+lee_os	 	Lee_Oblated_Stereographic	*) Lee Oblated Stereographic
+loxim	 	Loximuthal	[ESRI] Loximuthal
+lsat	 	Space_oblique_for_LANDSAT	*) Space oblique for LANDSAT
+mbt_s	 	McBryde_Thomas_Flat_Polar_Sine	*) McBryde-Thomas Flat-Polar Sine
+mbt_fps	 	McBryde_Thomas_Flat_Polar_Sine_2	*) McBryde-Thomas Flat-Pole Sine (No. 2)
+mbtfpp	 	McBryde_Thomas_Flat_Polar_Parabolic	*) McBride-Thomas Flat-Polar Parabolic
+mbtfpq	 	Flat_Polar_Quartic	[ESRI] McBryde-Thomas Flat-Polar Quartic
+mbtfps	 	McBryde_Thomas_Flat_Polar_Sinusoidal	*) McBryde-Thomas Flat-Polar Sinusoidal
+merc	 	Mercator	[ESRI] Mercator
+merc	<	Mercator_1SP	Mercator (1 standard parallel)
+merc	<	Mercator_2SP	Mercator (2 standard parallels)
+mil_os	 	Miller_Oblated_Stereographic	*) Miller Oblated Stereographic
+mill	 	Miller_Cylindrical	Miller Cylindrical
+moll	 	Mollweide	Mollweide
+murd1	 	Murdoch_I	*) Murdoch I
+murd2	 	Murdoch_II	*) Murdoch II
+murd3	 	Murdoch_III	*) Murdoch III
+nell	 	Nell	*) Nell
+nell_h	 	Nell_Hammer	*) Nell-Hammer
+nicol	 	Nicolosi_Globular	*) Nicolosi Globular
+nsper	 	Near_sided_perspective	*) Near-sided perspective
+nzmg	 	New_Zealand_Map_Grid	New Zealand Map Grid
+ob_tran	 	General_Oblique_Transformation	*) General Oblique Transformation
+ocea	 	Oblique_Cylindrical_Equal_Area	*) Oblique Cylindrical Equal Area
+oea	 	Oblated_Equal_Area	*) Oblated Equal Area
+omerc	 	Hotine_Oblique_Mercator	Oblique Mercator
+omerc	<	Oblique_Mercator	Oblique Mercator
+ortel	 	Ortelius_Oval	*) Ortelius Oval
+ortho	 	Orthographic	Orthographic (ESRI: World from Space)
+pconic	 	Perspective_Conic	*) Perspective Conic
+poly	 	Polyconic	*) Polyconic (American)
+putp1	 	Putnins_P1	*) Putnins P1
+putp2	 	Putnins_P2	*) Putnins P2
+putp3	 	Putnins_P3	*) Putnins P3
+putp3p	 	Putnins_P3'	*) Putnins P3'
+putp4p	 	Putnins_P4'	*) Putnins P4'
+putp5	 	Putnins_P5	*) Putnins P5
+putp5p	 	Putnins_P5'	*) Putnins P5'
+putp6	 	Putnins_P6	*) Putnins P6
+putp6p	 	Putnins_P6'	*) Putnins P6'
+qua_aut	 	Quartic_Authalic	[ESRI] Quartic Authalic
+robin	 	Robinson	Robinson
+rouss	 	Roussilhe_Stereographic	*) Roussilhe Stereographic
+rpoly	 	Rectangular_Polyconic	*) Rectangular Polyconic
+sinu	 	Sinusoidal	Sinusoidal (Sanson-Flamsteed)
+somerc	 	Hotine_Oblique_Mercator	Swiss Oblique Mercator
+somerc	<	Swiss_Oblique_Cylindrical	Swiss Oblique Cylindrical
+somerc	<	Hotine_Oblique_Mercator_Azimuth_Center	[ESRI] Swiss Oblique Mercator/Cylindrical
+stere	<	Polar_Stereographic	Stereographic
+stere	 	Stereographic	[ESRI] Stereographic
+sterea	 	Oblique_Stereographic	Oblique Stereographic Alternative
+gstmerc	 	Gauss_Schreiber_Transverse_Mercator	*) Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)
+tcc	 	Transverse_Central_Cylindrical	*) Transverse Central Cylindrical
+tcea	 	Transverse_Cylindrical_Equal_Area	*) Transverse Cylindrical Equal Area
+tissot	 	Tissot_Conic	*) Tissot Conic
+tmerc	 	Transverse_Mercator	*) Transverse Mercator
+tmerc	<	Gauss_Kruger	[ESRI] DHDN
+tpeqd	 	Two_Point_Equidistant	*) Two Point Equidistant
+tpers	 	Tilted_perspective	*) Tilted perspective
+ups	 	Universal_Polar_Stereographic	*) Universal Polar Stereographic
+urm5	 	Urmaev_V	*) Urmaev V
+urmfps	 	Urmaev_Flat_Polar_Sinusoidal	*) Urmaev Flat-Polar Sinusoidal
+utm	>	Transverse_Mercator	*) Universal Transverse Mercator (UTM)
+vandg	<	Van_Der_Grinten_I	[ESRI] van der Grinten (I)
+vandg	 	VanDerGrinten	van der Grinten (I)
+vandg2	 	VanDerGrinten_II	*) van der Grinten II
+vandg3	 	VanDerGrinten_III	*) van der Grinten III
+vandg4	 	VanDerGrinten_IV	*) van der Grinten IV
+vitk1	 	Vitkovsky_I	*) Vitkovsky I
+wag1	 	Wagner_I	*) Wagner I (Kavraisky VI)
+wag2	 	Wagner_II	*) Wagner II
+wag3	 	Wagner_III	*) Wagner III
+wag4	 	Wagner_IV	*) Wagner IV
+wag5	 	Wagner_V	*) Wagner V
+wag6	 	Wagner_VI	*) Wagner VI
+wag7	 	Wagner_VII	*) Wagner VII
+weren	 	Werenskiold_I	*) Werenskiold I
+wink1	 	Winkel_I	[ESRI] Winkel I
+wink2	 	Winkel_II	[ESRI] Winkel II
+wintri	 	Winkel_Tripel	[ESRI] Winkel Tripel
+alpha	 	azimuth	? Used with Oblique Mercator and possibly a few others
+k	>	scale_factor	Scaling factor (old name)
+K	>	scale_factor	? Scaling factor (old name)
+k_0	 	scale_factor	Scaling factor (new name)
+lat_0	 	latitude_of_origin	Latitude of origin
+lat_0	<	latitude_of_center	Latitude of center
+lat_0	<	central_parallel	[ESRI] Latitude of center
+lat_1	 	standard_parallel_1	Latitude of first standard parallel
+lat_2	 	standard_parallel_2	Latitude of second standard parallel
+lat_ts	>	latitude_of_origin	Latitude of true scale
+lon_0	 	central_meridian	Central meridian
+lon_0	<	longitude_of_center	Longitude of center
+lonc	 	longitude_of_center	? Longitude used with Oblique Mercator and possibly a few others
+x_0	 	false_easting	False easting
+y_0	 	false_northing	False northing
+azi	 		
+belgium	 		
+beta	 		
+czech	 		
+gamma	 		
+geoc	 		
+guam	 		
+h	 	satellite_height	Satellite height (geos - Geostationary Satellite View)
+lat_b	 		
+lat_t	 		
+lon_1	 		
+lon_2	 		
+lsat	 		
+m	 		
+M	 		
+n	 		
+no_cut	 		
+no_off	 		
+no_rot	 		
+ns	 		
+o_alpha	 		
+o_lat_1	 		
+o_lat_2	 		
+o_lat_c	 		
+o_lat_p	 		
+o_lon_1	 		
+o_lon_2	 		
+o_lon_c	 		
+o_lon_p	 		
+o_proj	 		
+over	 		
+p	 		
+path	 		
+q	 		
+R	 		
+R_a	 		
+R_A	 		
+R_g	 		
+R_h	 		
+R_lat_a	 		
+R_lat_g	 		
+rot	 		
+R_V	 		
+s	 		
+sym	 		
+t	 		
+theta	 		
+tilt	 		
+vopt	 		
+W	 		
+westo	 		
+	 		
diff --git a/src/saga_core/saga_gui/res/xpm/CVS/Entries b/src/saga_core/saga_gui/res/xpm/CVS/Entries
index 886cdd3..05dd397 100644
--- a/src/saga_core/saga_gui/res/xpm/CVS/Entries
+++ b/src/saga_core/saga_gui/res/xpm/CVS/Entries
@@ -1,115 +1,115 @@
-/crs_edit_point_add.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/crs_edit_point_move.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/crs_hand.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/crs_hand_grap.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/crs_info.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/crs_magnifier.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/crs_select.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/default.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_active_attributes.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_active_description.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_active_htmlextrainfo.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_active_legend.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_active_parameters.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_info_error.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_info_execution.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_info_messages.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_wksp_data.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_wksp_maps.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_wksp_modules.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/nb_wksp_thumbnails.xpm/1.1/Tue Jan  8 16:47:57 2008//
-/nb_wksp_treeview.xpm/1.1/Tue Jan  8 16:47:57 2008//
-/saga_icon_16.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/saga_icon_32.xpm/1.1.1.1/Mon Jun 26 15:43:00 2006//
-/saga_splash.xpm/1.3/Tue Jul 24 12:17:00 2007//
-/tb_active.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_delete.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_diagram_parameters.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_edit_shape_add.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_edit_shape_add_part.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_edit_shape_del.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_edit_shape_del_part.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_edit_shape_del_point.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_edit_shape_select.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_help.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_histogram_as_table.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_histogram_cumulative.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_info.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_layout_page_setup.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_layout_print.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_layout_print_preview.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_layout_print_setup.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_central_less.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_central_more.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_map3d_exaggerate_less.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_map3d_exaggerate_more.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_map3d_interpolated.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_properties.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_rotate_x_less.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_rotate_x_more.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_rotate_z_less.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_rotate_z_more.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_shift_x_less.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_shift_x_more.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_shift_y_less.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_shift_y_more.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_shift_z_less.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_shift_z_more.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map3d_stereo.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map_3d_show.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map_layout_show.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map_legend_horizontal.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map_legend_vertical.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map_mode_distance.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map_mode_pan.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_map_mode_select.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_map_mode_zoom.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_map_synchronize.xpm/1.1.1.1/Mon Jun 26 15:43:04 2006//
-/tb_map_zoom_active.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_map_zoom_full.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_map_zoom_last.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_map_zoom_next.xpm/1.1/Fri Jan  4 15:25:29 2008//
-/tb_map_zoom_selection.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_open.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_open_grid.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_open_module.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_open_shapes.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_open_table.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_open_tin.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_save.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_scatterplot_parameters.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_show.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_table_col_add.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_table_col_del.xpm/1.2/Thu Oct 19 18:13:00 2006//
-/tb_table_row_add.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_table_row_del.xpm/1.3/Fri Oct 27 18:35:01 2006//
-/tb_table_row_del_all.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_table_row_ins.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/tb_wksp.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_data_manager.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_grid.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_grid_manager.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_grid_system.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_map.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_map_manager.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_module.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_module_library.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_module_manager.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_noitems.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_shapes_line.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_shapes_manager.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_shapes_point.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_shapes_points.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_shapes_polygon.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_table.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_table_manager.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_tin.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wksp_tin_manager.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wnd_diagram.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wnd_histogram.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wnd_layout.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wnd_map.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wnd_map3d.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wnd_scatterplot.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
-/wnd_table.xpm/1.1.1.1/Mon Jun 26 15:43:05 2006//
+/crs_edit_point_add.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/crs_edit_point_move.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/crs_hand.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/crs_hand_grap.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/crs_info.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/crs_magnifier.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/crs_select.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/default.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_active_attributes.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_active_description.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_active_htmlextrainfo.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_active_legend.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_active_parameters.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_info_error.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_info_execution.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_info_messages.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_wksp_data.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_wksp_maps.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_wksp_modules.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_wksp_thumbnails.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/nb_wksp_treeview.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/saga_icon_16.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/saga_icon_32.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/saga_splash.xpm/1.4/Thu Oct  7 13:47:34 2010//
+/tb_active.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_delete.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_diagram_parameters.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_edit_shape_add.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_edit_shape_add_part.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_edit_shape_del.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_edit_shape_del_part.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_edit_shape_del_point.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_edit_shape_select.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_help.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_histogram_as_table.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_histogram_cumulative.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_info.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_layout_page_setup.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_layout_print.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_layout_print_preview.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_layout_print_setup.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_central_less.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_central_more.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_map3d_exaggerate_less.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_map3d_exaggerate_more.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_map3d_interpolated.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_properties.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_rotate_x_less.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_rotate_x_more.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_rotate_z_less.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_rotate_z_more.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_shift_x_less.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_shift_x_more.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_shift_y_less.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_shift_y_more.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_shift_z_less.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_shift_z_more.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map3d_stereo.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map_3d_show.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map_layout_show.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map_legend_horizontal.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map_legend_vertical.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map_mode_distance.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map_mode_pan.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_map_mode_select.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_map_mode_zoom.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_map_synchronize.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map_zoom_active.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_map_zoom_full.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_map_zoom_last.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_map_zoom_next.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_map_zoom_selection.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_open.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_open_grid.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_open_module.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_open_shapes.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_open_table.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_open_tin.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_save.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_scatterplot_parameters.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_show.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_table_col_add.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_table_col_del.xpm/1.3/Thu Oct  7 13:47:34 2010//
+/tb_table_row_add.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_table_row_del.xpm/1.4/Thu Oct  7 13:47:34 2010//
+/tb_table_row_del_all.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_table_row_ins.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/tb_wksp.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_data_manager.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_grid.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_grid_manager.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_grid_system.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_map.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_map_manager.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_module.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_module_library.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_module_manager.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_noitems.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_shapes_line.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_shapes_manager.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_shapes_point.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_shapes_points.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_shapes_polygon.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_table.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_table_manager.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_tin.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wksp_tin_manager.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wnd_diagram.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wnd_histogram.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wnd_layout.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wnd_map.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wnd_map3d.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wnd_scatterplot.xpm/1.2/Thu Oct  7 13:47:34 2010//
+/wnd_table.xpm/1.2/Thu Oct  7 13:47:34 2010//
 D
diff --git a/src/saga_core/saga_gui/res/xpm/CVS/Root b/src/saga_core/saga_gui/res/xpm/CVS/Root
index 8a7f9bf..901c101 100644
--- a/src/saga_core/saga_gui/res/xpm/CVS/Root
+++ b/src/saga_core/saga_gui/res/xpm/CVS/Root
@@ -1 +1 @@
-:pserver:anonymous at saga-gis.cvs.sourceforge.net:/cvsroot/saga-gis
+:ext:reklov_w at saga-gis.cvs.sourceforge.net:/cvsroot/saga-gis
diff --git a/src/saga_core/saga_gui/res/xpm/crs_edit_point_add.xpm b/src/saga_core/saga_gui/res/xpm/crs_edit_point_add.xpm
index a6f8e7f..e6d66fd 100644
--- a/src/saga_core/saga_gui/res/xpm/crs_edit_point_add.xpm
+++ b/src/saga_core/saga_gui/res/xpm/crs_edit_point_add.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *crs_edit_point_add_xpm[] = {
+static const char *crs_edit_point_add_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "32 32 4 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/crs_edit_point_move.xpm b/src/saga_core/saga_gui/res/xpm/crs_edit_point_move.xpm
index 6409b4d..5415aab 100644
--- a/src/saga_core/saga_gui/res/xpm/crs_edit_point_move.xpm
+++ b/src/saga_core/saga_gui/res/xpm/crs_edit_point_move.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *crs_edit_point_move_xpm[] = {
+static const char *crs_edit_point_move_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "32 32 4 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/crs_hand.xpm b/src/saga_core/saga_gui/res/xpm/crs_hand.xpm
index 3056cbe..1c4e953 100644
--- a/src/saga_core/saga_gui/res/xpm/crs_hand.xpm
+++ b/src/saga_core/saga_gui/res/xpm/crs_hand.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *crs_hand_xpm[] = {
+static const char *crs_hand_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "32 32 3 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/crs_hand_grap.xpm b/src/saga_core/saga_gui/res/xpm/crs_hand_grap.xpm
index d3e98b1..94b5e36 100644
--- a/src/saga_core/saga_gui/res/xpm/crs_hand_grap.xpm
+++ b/src/saga_core/saga_gui/res/xpm/crs_hand_grap.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *crs_hand_grap_xpm[] = {
+static const char *crs_hand_grap_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "32 32 3 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/crs_info.xpm b/src/saga_core/saga_gui/res/xpm/crs_info.xpm
index 72b05e8..9ddc359 100644
--- a/src/saga_core/saga_gui/res/xpm/crs_info.xpm
+++ b/src/saga_core/saga_gui/res/xpm/crs_info.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *crs_info_xpm[] = {
+static const char *crs_info_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "32 32 4 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/crs_magnifier.xpm b/src/saga_core/saga_gui/res/xpm/crs_magnifier.xpm
index e1a4ff0..6653722 100644
--- a/src/saga_core/saga_gui/res/xpm/crs_magnifier.xpm
+++ b/src/saga_core/saga_gui/res/xpm/crs_magnifier.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *crs_magnifier_xpm[] = {
+static const char *crs_magnifier_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "32 32 3 1",
 "X c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/crs_select.xpm b/src/saga_core/saga_gui/res/xpm/crs_select.xpm
index 79adee1..c43ff53 100644
--- a/src/saga_core/saga_gui/res/xpm/crs_select.xpm
+++ b/src/saga_core/saga_gui/res/xpm/crs_select.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *crs_select_xpm[] = {
+static const char *crs_select_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "32 32 3 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/default.xpm b/src/saga_core/saga_gui/res/xpm/default.xpm
index 0c32e7c..b144784 100644
--- a/src/saga_core/saga_gui/res/xpm/default.xpm
+++ b/src/saga_core/saga_gui/res/xpm/default.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *default_xpm[] = {
+static const char *default_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 "  c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_active_attributes.xpm b/src/saga_core/saga_gui/res/xpm/nb_active_attributes.xpm
index 6e643c6..9700bb9 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_active_attributes.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_active_attributes.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_active_attributes_xpm[] = {
+static const char *nb_active_attributes_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 6 1",
 "X c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_active_description.xpm b/src/saga_core/saga_gui/res/xpm/nb_active_description.xpm
index ae9dbfc..2699712 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_active_description.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_active_description.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_active_description_xpm[] = {
+static const char *nb_active_description_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "X c #FFFFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_active_htmlextrainfo.xpm b/src/saga_core/saga_gui/res/xpm/nb_active_htmlextrainfo.xpm
index 4aeebfe..156bc2d 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_active_htmlextrainfo.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_active_htmlextrainfo.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_active_htmlextrainfo_xpm[] = {
+static const char *nb_active_htmlextrainfo_xpm[] = {
 "22 22 158 2",
 "  	c None",
 ". 	c #FFFFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_active_legend.xpm b/src/saga_core/saga_gui/res/xpm/nb_active_legend.xpm
index d8fe60a..80b3f06 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_active_legend.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_active_legend.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_active_legend_xpm[] = {
+static const char *nb_active_legend_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 "  c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_active_parameters.xpm b/src/saga_core/saga_gui/res/xpm/nb_active_parameters.xpm
index 7d402d7..2dc8b14 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_active_parameters.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_active_parameters.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_active_parameters_xpm[] = {
+static const char *nb_active_parameters_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 "  c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_info_error.xpm b/src/saga_core/saga_gui/res/xpm/nb_info_error.xpm
index 06fe2a7..ecf06a6 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_info_error.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_info_error.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_info_error_xpm[] = {
+static const char *nb_info_error_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "X c #FFFFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_info_execution.xpm b/src/saga_core/saga_gui/res/xpm/nb_info_execution.xpm
index f29ab59..8260710 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_info_execution.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_info_execution.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_info_execution_xpm[] = {
+static const char *nb_info_execution_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 "X c #FFFFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_info_messages.xpm b/src/saga_core/saga_gui/res/xpm/nb_info_messages.xpm
index 7782fd2..e54619a 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_info_messages.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_info_messages.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_info_messages_xpm[] = {
+static const char *nb_info_messages_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "X c #FFFFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_wksp_data.xpm b/src/saga_core/saga_gui/res/xpm/nb_wksp_data.xpm
index f89f431..526793d 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_wksp_data.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_wksp_data.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_wksp_data_xpm[] = {
+static const char *nb_wksp_data_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_wksp_maps.xpm b/src/saga_core/saga_gui/res/xpm/nb_wksp_maps.xpm
index ae3aef7..0130ab8 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_wksp_maps.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_wksp_maps.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_wksp_maps_xpm[] = {
+static const char *nb_wksp_maps_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 7 1",
 "  c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_wksp_modules.xpm b/src/saga_core/saga_gui/res/xpm/nb_wksp_modules.xpm
index ab2b0f5..5f94b73 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_wksp_modules.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_wksp_modules.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_wksp_modules_xpm[] = {
+static const char *nb_wksp_modules_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 4 1",
 ". c #000084",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_wksp_thumbnails.xpm b/src/saga_core/saga_gui/res/xpm/nb_wksp_thumbnails.xpm
index f83da30..7e2d21a 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_wksp_thumbnails.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_wksp_thumbnails.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_wksp_thumbnails_xpm[] = {
+static const char *nb_wksp_thumbnails_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 7 1",
 "O c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/nb_wksp_treeview.xpm b/src/saga_core/saga_gui/res/xpm/nb_wksp_treeview.xpm
index 6c31431..50c7827 100644
--- a/src/saga_core/saga_gui/res/xpm/nb_wksp_treeview.xpm
+++ b/src/saga_core/saga_gui/res/xpm/nb_wksp_treeview.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *nb_wksp_treeview_xpm[] = {
+static const char *nb_wksp_treeview_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/saga_icon_16.xpm b/src/saga_core/saga_gui/res/xpm/saga_icon_16.xpm
index c0be658..b685b0d 100644
--- a/src/saga_core/saga_gui/res/xpm/saga_icon_16.xpm
+++ b/src/saga_core/saga_gui/res/xpm/saga_icon_16.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *saga_icon_16_xpm[] = {
+static const char *saga_icon_16_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #00FFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/saga_icon_32.xpm b/src/saga_core/saga_gui/res/xpm/saga_icon_32.xpm
index 91d211d..8f9efb2 100644
--- a/src/saga_core/saga_gui/res/xpm/saga_icon_32.xpm
+++ b/src/saga_core/saga_gui/res/xpm/saga_icon_32.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *saga_icon_32_xpm[] = {
+static const char *saga_icon_32_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "32 32 3 1",
 ". c #00FFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/saga_splash.xpm b/src/saga_core/saga_gui/res/xpm/saga_splash.xpm
index 25d90f3..a19f78f 100644
--- a/src/saga_core/saga_gui/res/xpm/saga_splash.xpm
+++ b/src/saga_core/saga_gui/res/xpm/saga_splash.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *saga_splash_xpm[] = {
+static const char *saga_splash_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "520 286 12 1",
 "# c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_active.xpm b/src/saga_core/saga_gui/res/xpm/tb_active.xpm
index 3599f09..fc2a858 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_active.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_active.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_active_xpm[] = {
+static const char *tb_active_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 "  c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_delete.xpm b/src/saga_core/saga_gui/res/xpm/tb_delete.xpm
index e3e6c0f..01d7ee6 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_delete.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_delete.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_delete_xpm[] = {
+static const char *tb_delete_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 2 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_diagram_parameters.xpm b/src/saga_core/saga_gui/res/xpm/tb_diagram_parameters.xpm
index a8f9d6e..0a8c0a1 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_diagram_parameters.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_diagram_parameters.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_diagram_parameters_xpm[] = {
+static const char *tb_diagram_parameters_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_add.xpm b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_add.xpm
index d60a5b2..71b5b88 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_add.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_add.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_edit_shape_add_xpm[] = {
+static const char *tb_edit_shape_add_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 6 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_add_part.xpm b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_add_part.xpm
index 1501ed7..d98d721 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_add_part.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_add_part.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_edit_shape_add_part_xpm[] = {
+static const char *tb_edit_shape_add_part_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 3 1",
 ". c #000084",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del.xpm b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del.xpm
index 4ff65b2..c3963ba 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_edit_shape_del_xpm[] = {
+static const char *tb_edit_shape_del_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 2 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del_part.xpm b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del_part.xpm
index 4112041..f5015f7 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del_part.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del_part.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_edit_shape_del_part_xpm[] = {
+static const char *tb_edit_shape_del_part_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 2 1",
 ". c #000084",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del_point.xpm b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del_point.xpm
index 67c4887..3403a43 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del_point.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_del_point.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_edit_shape_del_point_xpm[] = {
+static const char *tb_edit_shape_del_point_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 6 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_select.xpm b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_select.xpm
index fb125fe..173a0d3 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_edit_shape_select.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_edit_shape_select.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_edit_shape_select_xpm[] = {
+static const char *tb_edit_shape_select_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 5 1",
 "X c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_help.xpm b/src/saga_core/saga_gui/res/xpm/tb_help.xpm
index 43a7221..8b39266 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_help.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_help.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_help_xpm[] = {
+static const char *tb_help_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_histogram_as_table.xpm b/src/saga_core/saga_gui/res/xpm/tb_histogram_as_table.xpm
index 790d272..ce80e23 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_histogram_as_table.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_histogram_as_table.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_histogram_as_table_xpm[] = {
+static const char *tb_histogram_as_table_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 6 1",
 "X c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_histogram_cumulative.xpm b/src/saga_core/saga_gui/res/xpm/tb_histogram_cumulative.xpm
index e2ef46e..7807f02 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_histogram_cumulative.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_histogram_cumulative.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_histogram_cumulative_xpm[] = {
+static const char *tb_histogram_cumulative_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 7 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_info.xpm b/src/saga_core/saga_gui/res/xpm/tb_info.xpm
index 3f7eb8b..e481ab9 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_info.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_info.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_info_xpm[] = {
+static const char *tb_info_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "X c #FFFFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_layout_page_setup.xpm b/src/saga_core/saga_gui/res/xpm/tb_layout_page_setup.xpm
index 9110945..2101f51 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_layout_page_setup.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_layout_page_setup.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_layout_page_setup_xpm[] = {
+static const char *tb_layout_page_setup_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 6 1",
 "+ c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_layout_print.xpm b/src/saga_core/saga_gui/res/xpm/tb_layout_print.xpm
index 31fa880..63e0bc7 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_layout_print.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_layout_print.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_layout_print_xpm[] = {
+static const char *tb_layout_print_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 "X c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_layout_print_preview.xpm b/src/saga_core/saga_gui/res/xpm/tb_layout_print_preview.xpm
index e4f9533..5bc253a 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_layout_print_preview.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_layout_print_preview.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_layout_print_preview_xpm[] = {
+static const char *tb_layout_print_preview_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 "O c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_layout_print_setup.xpm b/src/saga_core/saga_gui/res/xpm/tb_layout_print_setup.xpm
index 2d851da..0ab109f 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_layout_print_setup.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_layout_print_setup.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_layout_print_setup_xpm[] = {
+static const char *tb_layout_print_setup_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 6 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_central_less.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_central_less.xpm
index 1361f94..0b4d8cf 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_central_less.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_central_less.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_central_less_xpm[] = {
+static const char *tb_map3d_central_less_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_central_more.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_central_more.xpm
index 711bd50..df591ee 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_central_more.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_central_more.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_central_more_xpm[] = {
+static const char *tb_map3d_central_more_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 2 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_less.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_less.xpm
index 5a2f73e..3cbfc83 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_less.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_less.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_exaggerate_less_xpm[] = {
+static const char *tb_map3d_exaggerate_less_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "o c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_more.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_more.xpm
index 133f91d..1d7e69e 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_more.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_exaggerate_more.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_exaggerate_more_xpm[] = {
+static const char *tb_map3d_exaggerate_more_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "o c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_interpolated.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_interpolated.xpm
index c37238e..c1ad13e 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_interpolated.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_interpolated.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_interpolated_xpm[] = {
+static const char *tb_map3d_interpolated_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_properties.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_properties.xpm
index bae5ae7..a2ce7bd 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_properties.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_properties.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_properties_xpm[] = {
+static const char *tb_map3d_properties_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "X c #000084",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_less.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_less.xpm
index 4c73ba5..eb69681 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_less.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_less.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_rotate_x_less_xpm[] = {
+static const char *tb_map3d_rotate_x_less_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_more.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_more.xpm
index 705f779..52b7548 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_more.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_x_more.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_rotate_x_more_xpm[] = {
+static const char *tb_map3d_rotate_x_more_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_less.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_less.xpm
index e5ec98e..f9ee5a6 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_less.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_less.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_rotate_z_less_xpm[] = {
+static const char *tb_map3d_rotate_z_less_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_more.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_more.xpm
index 3520e92..5b5bce5 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_more.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_rotate_z_more.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_rotate_z_more_xpm[] = {
+static const char *tb_map3d_rotate_z_more_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_x_less.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_x_less.xpm
index c565e8b..297b5f5 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_x_less.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_x_less.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_shift_x_less_xpm[] = {
+static const char *tb_map3d_shift_x_less_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_x_more.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_x_more.xpm
index f058e4e..b79309a 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_x_more.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_x_more.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_shift_x_more_xpm[] = {
+static const char *tb_map3d_shift_x_more_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_y_less.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_y_less.xpm
index b393a3f..3227f9f 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_y_less.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_y_less.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_shift_y_less_xpm[] = {
+static const char *tb_map3d_shift_y_less_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_y_more.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_y_more.xpm
index 16ffbc4..12413fe 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_y_more.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_y_more.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_shift_y_more_xpm[] = {
+static const char *tb_map3d_shift_y_more_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_z_less.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_z_less.xpm
index 0612e85..2d82565 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_z_less.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_z_less.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_shift_z_less_xpm[] = {
+static const char *tb_map3d_shift_z_less_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_z_more.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_z_more.xpm
index 96243f2..f54dd9f 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_z_more.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_shift_z_more.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_shift_z_more_xpm[] = {
+static const char *tb_map3d_shift_z_more_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c #000080",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map3d_stereo.xpm b/src/saga_core/saga_gui/res/xpm/tb_map3d_stereo.xpm
index 25659e9..874a299 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map3d_stereo.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map3d_stereo.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map3d_stereo_xpm[] = {
+static const char *tb_map3d_stereo_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c #FFFFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_3d_show.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_3d_show.xpm
index fa8e26d..bbcf77c 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_3d_show.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_3d_show.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_3d_show_xpm[] = {
+static const char *tb_map_3d_show_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "X c #000084",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_layout_show.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_layout_show.xpm
index 2b060e4..6097b31 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_layout_show.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_layout_show.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_layout_show_xpm[] = {
+static const char *tb_map_layout_show_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_legend_horizontal.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_legend_horizontal.xpm
index 6339199..a781f1a 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_legend_horizontal.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_legend_horizontal.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_legend_horizontal_xpm[] = {
+static const char *tb_map_legend_horizontal_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_legend_vertical.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_legend_vertical.xpm
index e804029..5851c43 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_legend_vertical.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_legend_vertical.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_legend_vertical_xpm[] = {
+static const char *tb_map_legend_vertical_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_mode_distance.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_mode_distance.xpm
index d1d7d6c..0fa1c45 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_mode_distance.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_mode_distance.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_mode_distance_xpm[] = {
+static const char *tb_map_mode_distance_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_mode_pan.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_mode_pan.xpm
index a64196f..240b572 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_mode_pan.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_mode_pan.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_mode_pan_xpm[] = {
+static const char *tb_map_mode_pan_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 3 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_mode_select.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_mode_select.xpm
index 6608f8d..e11e2a8 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_mode_select.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_mode_select.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_mode_select_xpm[] = {
+static const char *tb_map_mode_select_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 3 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_mode_zoom.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_mode_zoom.xpm
index 03e5320..1ba6d83 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_mode_zoom.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_mode_zoom.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_mode_zoom_xpm[] = {
+static const char *tb_map_mode_zoom_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 4 1",
 "o c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_synchronize.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_synchronize.xpm
index 4a9db80..82e387e 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_synchronize.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_synchronize.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_synchronize_xpm[] = {
+static const char *tb_map_synchronize_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 "  c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_zoom_active.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_zoom_active.xpm
index 5185028..f077a63 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_zoom_active.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_zoom_active.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_zoom_active_xpm[] = {
+static const char *tb_map_zoom_active_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 5 1",
 "o c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_zoom_full.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_zoom_full.xpm
index 4448e04..5334696 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_zoom_full.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_zoom_full.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_zoom_full_xpm[] = {
+static const char *tb_map_zoom_full_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 5 1",
 "o c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_zoom_last.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_zoom_last.xpm
index de6b2b8..b5e2e27 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_zoom_last.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_zoom_last.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_zoom_last_xpm[] = {
+static const char *tb_map_zoom_last_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 6 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_zoom_next.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_zoom_next.xpm
index 03dbe64..6063441 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_zoom_next.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_zoom_next.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_zoom_next_xpm[] = {
+static const char *tb_map_zoom_next_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 6 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_map_zoom_selection.xpm b/src/saga_core/saga_gui/res/xpm/tb_map_zoom_selection.xpm
index e3c5d81..5b2d18c 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_map_zoom_selection.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_map_zoom_selection.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_map_zoom_selection_xpm[] = {
+static const char *tb_map_zoom_selection_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "18 16 6 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_open.xpm b/src/saga_core/saga_gui/res/xpm/tb_open.xpm
index 914f610..9411bf8 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_open.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_open.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_open_xpm[] = {
+static const char *tb_open_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 4 1",
 "X c #00C0FF",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_open_grid.xpm b/src/saga_core/saga_gui/res/xpm/tb_open_grid.xpm
index 7b483ac..96dac1d 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_open_grid.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_open_grid.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_open_grid_xpm[] = {
+static const char *tb_open_grid_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 7 1",
 "O c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_open_module.xpm b/src/saga_core/saga_gui/res/xpm/tb_open_module.xpm
index 60f281d..0205f54 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_open_module.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_open_module.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_open_module_xpm[] = {
+static const char *tb_open_module_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 6 1",
 "o c #0039FF",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_open_shapes.xpm b/src/saga_core/saga_gui/res/xpm/tb_open_shapes.xpm
index 4c3e2e3..6f3445c 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_open_shapes.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_open_shapes.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_open_shapes_xpm[] = {
+static const char *tb_open_shapes_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 7 1",
 "O c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_open_table.xpm b/src/saga_core/saga_gui/res/xpm/tb_open_table.xpm
index 1f8398d..88a3900 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_open_table.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_open_table.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_open_table_xpm[] = {
+static const char *tb_open_table_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 "+ c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_open_tin.xpm b/src/saga_core/saga_gui/res/xpm/tb_open_tin.xpm
index 83e8e40..299cada 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_open_tin.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_open_tin.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_open_tin_xpm[] = {
+static const char *tb_open_tin_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 7 1",
 "O c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_save.xpm b/src/saga_core/saga_gui/res/xpm/tb_save.xpm
index e04b4da..49916ab 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_save.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_save.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_save_xpm[] = {
+static const char *tb_save_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_scatterplot_parameters.xpm b/src/saga_core/saga_gui/res/xpm/tb_scatterplot_parameters.xpm
index f1eceb0..9ff047b 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_scatterplot_parameters.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_scatterplot_parameters.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_scatterplot_parameters_xpm[] = {
+static const char *tb_scatterplot_parameters_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 4 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_show.xpm b/src/saga_core/saga_gui/res/xpm/tb_show.xpm
index f07fcdf..4864f23 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_show.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_show.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_show_xpm[] = {
+static const char *tb_show_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 4 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_table_col_add.xpm b/src/saga_core/saga_gui/res/xpm/tb_table_col_add.xpm
index 486fb8b..1c1c8a5 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_table_col_add.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_table_col_add.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_table_col_add_xpm[] = {
+static const char *tb_table_col_add_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_table_col_del.xpm b/src/saga_core/saga_gui/res/xpm/tb_table_col_del.xpm
index 78e7587..1e713be 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_table_col_del.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_table_col_del.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_table_col_del_xpm[] = {
+static const char *tb_table_col_del_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_table_row_add.xpm b/src/saga_core/saga_gui/res/xpm/tb_table_row_add.xpm
index f6ffc5b..011a8d1 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_table_row_add.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_table_row_add.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_table_row_add_xpm[] = {
+static const char *tb_table_row_add_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 "  c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_table_row_del.xpm b/src/saga_core/saga_gui/res/xpm/tb_table_row_del.xpm
index 929e56e..d977fa3 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_table_row_del.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_table_row_del.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_table_row_del_xpm[] = {
+static const char *tb_table_row_del_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_table_row_del_all.xpm b/src/saga_core/saga_gui/res/xpm/tb_table_row_del_all.xpm
index e214f57..3423b7d 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_table_row_del_all.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_table_row_del_all.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_table_row_del_all_xpm[] = {
+static const char *tb_table_row_del_all_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "X c #FFFFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_table_row_ins.xpm b/src/saga_core/saga_gui/res/xpm/tb_table_row_ins.xpm
index 74d472b..55c7f3b 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_table_row_ins.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_table_row_ins.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_table_row_ins_xpm[] = {
+static const char *tb_table_row_ins_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 "  c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/tb_wksp.xpm b/src/saga_core/saga_gui/res/xpm/tb_wksp.xpm
index 5c5692e..0a52bfe 100644
--- a/src/saga_core/saga_gui/res/xpm/tb_wksp.xpm
+++ b/src/saga_core/saga_gui/res/xpm/tb_wksp.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *tb_wksp_xpm[] = {
+static const char *tb_wksp_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_data_manager.xpm b/src/saga_core/saga_gui/res/xpm/wksp_data_manager.xpm
index 23cbc11..e8e98b6 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_data_manager.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_data_manager.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_data_manager_xpm[] = {
+static const char *wksp_data_manager_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_grid.xpm b/src/saga_core/saga_gui/res/xpm/wksp_grid.xpm
index fd7b190..451ca2f 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_grid.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_grid.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_grid_xpm[] = {
+static const char *wksp_grid_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_grid_manager.xpm b/src/saga_core/saga_gui/res/xpm/wksp_grid_manager.xpm
index b2abadc..8bf2d47 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_grid_manager.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_grid_manager.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_grid_manager_xpm[] = {
+static const char *wksp_grid_manager_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 6 1",
 "  c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_grid_system.xpm b/src/saga_core/saga_gui/res/xpm/wksp_grid_system.xpm
index e3241ec..6fe2575 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_grid_system.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_grid_system.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_grid_system_xpm[] = {
+static const char *wksp_grid_system_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 7 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_map.xpm b/src/saga_core/saga_gui/res/xpm/wksp_map.xpm
index 8f07e53..b4f8f40 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_map.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_map.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_map_xpm[] = {
+static const char *wksp_map_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_map_manager.xpm b/src/saga_core/saga_gui/res/xpm/wksp_map_manager.xpm
index d04bf1d..b0a23d6 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_map_manager.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_map_manager.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_map_manager_xpm[] = {
+static const char *wksp_map_manager_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 7 1",
 "  c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_module.xpm b/src/saga_core/saga_gui/res/xpm/wksp_module.xpm
index fb1fac7..0fe6ee2 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_module.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_module.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_module_xpm[] = {
+static const char *wksp_module_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 4 1",
 ". c #000084",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_module_library.xpm b/src/saga_core/saga_gui/res/xpm/wksp_module_library.xpm
index ef4ae83..b134252 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_module_library.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_module_library.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_module_library_xpm[] = {
+static const char *wksp_module_library_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 6 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_module_manager.xpm b/src/saga_core/saga_gui/res/xpm/wksp_module_manager.xpm
index f103ba4..a3a949d 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_module_manager.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_module_manager.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_module_manager_xpm[] = {
+static const char *wksp_module_manager_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_noitems.xpm b/src/saga_core/saga_gui/res/xpm/wksp_noitems.xpm
index 1959e47..4cc9b3f 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_noitems.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_noitems.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_noitems_xpm[] = {
+static const char *wksp_noitems_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_shapes_line.xpm b/src/saga_core/saga_gui/res/xpm/wksp_shapes_line.xpm
index 2a7c129..989584a 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_shapes_line.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_shapes_line.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_shapes_line_xpm[] = {
+static const char *wksp_shapes_line_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 4 1",
 "o c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_shapes_manager.xpm b/src/saga_core/saga_gui/res/xpm/wksp_shapes_manager.xpm
index 7c739f9..9490383 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_shapes_manager.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_shapes_manager.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_shapes_manager_xpm[] = {
+static const char *wksp_shapes_manager_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_shapes_point.xpm b/src/saga_core/saga_gui/res/xpm/wksp_shapes_point.xpm
index 95603ca..87e6cfd 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_shapes_point.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_shapes_point.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_shapes_point_xpm[] = {
+static const char *wksp_shapes_point_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "X c #00FFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_shapes_points.xpm b/src/saga_core/saga_gui/res/xpm/wksp_shapes_points.xpm
index c245add..326ad9c 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_shapes_points.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_shapes_points.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_shapes_points_xpm[] = {
+static const char *wksp_shapes_points_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "X c #00FFFF",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_shapes_polygon.xpm b/src/saga_core/saga_gui/res/xpm/wksp_shapes_polygon.xpm
index d0c6375..16f6af8 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_shapes_polygon.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_shapes_polygon.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_shapes_polygon_xpm[] = {
+static const char *wksp_shapes_polygon_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 "X c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_table.xpm b/src/saga_core/saga_gui/res/xpm/wksp_table.xpm
index 8ba5832..82e32a9 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_table.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_table.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_table_xpm[] = {
+static const char *wksp_table_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 6 1",
 "X c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_table_manager.xpm b/src/saga_core/saga_gui/res/xpm/wksp_table_manager.xpm
index beb3ab0..dcf0429 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_table_manager.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_table_manager.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_table_manager_xpm[] = {
+static const char *wksp_table_manager_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 6 1",
 "X c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_tin.xpm b/src/saga_core/saga_gui/res/xpm/wksp_tin.xpm
index f9af2cb..e861bfd 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_tin.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_tin.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_tin_xpm[] = {
+static const char *wksp_tin_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 4 1",
 "X c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wksp_tin_manager.xpm b/src/saga_core/saga_gui/res/xpm/wksp_tin_manager.xpm
index fba7b13..f97fa58 100644
--- a/src/saga_core/saga_gui/res/xpm/wksp_tin_manager.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wksp_tin_manager.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wksp_tin_manager_xpm[] = {
+static const char *wksp_tin_manager_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 4 1",
 "X c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wnd_diagram.xpm b/src/saga_core/saga_gui/res/xpm/wnd_diagram.xpm
index 46352b5..053c235 100644
--- a/src/saga_core/saga_gui/res/xpm/wnd_diagram.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wnd_diagram.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wnd_diagram_xpm[] = {
+static const char *wnd_diagram_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 5 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wnd_histogram.xpm b/src/saga_core/saga_gui/res/xpm/wnd_histogram.xpm
index 686b496..77cf741 100644
--- a/src/saga_core/saga_gui/res/xpm/wnd_histogram.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wnd_histogram.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wnd_histogram_xpm[] = {
+static const char *wnd_histogram_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 7 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wnd_layout.xpm b/src/saga_core/saga_gui/res/xpm/wnd_layout.xpm
index f68af0f..7f020b8 100644
--- a/src/saga_core/saga_gui/res/xpm/wnd_layout.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wnd_layout.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wnd_layout_xpm[] = {
+static const char *wnd_layout_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wnd_map.xpm b/src/saga_core/saga_gui/res/xpm/wnd_map.xpm
index 40f6563..5a50cda 100644
--- a/src/saga_core/saga_gui/res/xpm/wnd_map.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wnd_map.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wnd_map_xpm[] = {
+static const char *wnd_map_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 8 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wnd_map3d.xpm b/src/saga_core/saga_gui/res/xpm/wnd_map3d.xpm
index ae50cfb..367de3d 100644
--- a/src/saga_core/saga_gui/res/xpm/wnd_map3d.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wnd_map3d.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wnd_map3d_xpm[] = {
+static const char *wnd_map3d_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 3 1",
 "X c #000084",
diff --git a/src/saga_core/saga_gui/res/xpm/wnd_scatterplot.xpm b/src/saga_core/saga_gui/res/xpm/wnd_scatterplot.xpm
index 20ba647..7a0c5e0 100644
--- a/src/saga_core/saga_gui/res/xpm/wnd_scatterplot.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wnd_scatterplot.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wnd_scatterplot_xpm[] = {
+static const char *wnd_scatterplot_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 4 1",
 ". c Black",
diff --git a/src/saga_core/saga_gui/res/xpm/wnd_table.xpm b/src/saga_core/saga_gui/res/xpm/wnd_table.xpm
index 5dcf392..4810497 100644
--- a/src/saga_core/saga_gui/res/xpm/wnd_table.xpm
+++ b/src/saga_core/saga_gui/res/xpm/wnd_table.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *wnd_table_xpm[] = {
+static const char *wnd_table_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "16 16 6 1",
 "X c Black",
diff --git a/src/saga_core/saga_gui/res_commands.cpp b/src/saga_core/saga_gui/res_commands.cpp
index 9e276e7..d15025e 100644
--- a/src/saga_core/saga_gui/res_commands.cpp
+++ b/src/saga_core/saga_gui/res_commands.cpp
@@ -181,10 +181,6 @@ const wxChar * CMD_Get_Name(int Cmd_ID)
 	case ID_CMD_MAPS_SAVE_IMAGE:		return( LNG("[CMD] Save As Image...") );
 	case ID_CMD_MAPS_SAVE_TO_CLIPBOARD:	return( LNG("[CMD] Save to Clipboard [Ctrl+C]") );
 	case ID_CMD_MAPS_SAVE_TO_CLIPBOARD_LEGEND:	return( LNG("[CMD] Save Legend to Clipboard [Ctrl+L]") );
-	case ID_CMD_MAP_SAVE_PDF_INDEXED:
-	case ID_CMD_MAPS_SAVE_PDF_INDEXED:	return( LNG("[CMD] Save As PDF") );
-	case ID_CMD_MAP_SAVE_INTERACTIVE_SVG:
-	case ID_CMD_MAPS_SAVE_INTERACTIVE_SVG:	return( LNG("[CMD] Save as Interactive SVG") );
 	case ID_CMD_MAP_SYNCHRONIZE:
 	case ID_CMD_MAPS_SYNCHRONIZE:		return( LNG("[CMD] Synchronise Map Extents") );
 
diff --git a/src/saga_core/saga_gui/res_commands.h b/src/saga_core/saga_gui/res_commands.h
index 845752b..7cfcfe1 100644
--- a/src/saga_core/saga_gui/res_commands.h
+++ b/src/saga_core/saga_gui/res_commands.h
@@ -216,8 +216,6 @@ enum ID_COMMANDS
 	ID_CMD_MAPS_SAVE_TO_CLIPBOARD,
 	ID_CMD_MAPS_SAVE_TO_CLIPBOARD_LEGEND,
 	ID_CMD_MAPS_SAVE_IMAGE_ON_CHANGE,
-	ID_CMD_MAPS_SAVE_PDF_INDEXED,
-	ID_CMD_MAPS_SAVE_INTERACTIVE_SVG,
 	ID_CMD_MAPS_SYNCHRONIZE,
 	ID_CMD_MAPS_LAYER_SHOW,
 	ID_CMD_MAPS_MOVE_TOP,
@@ -239,8 +237,6 @@ enum ID_COMMANDS
 	ID_CMD_MAP_LAYOUT_SHOW,
 	ID_CMD_MAP_SAVE_IMAGE,
 	ID_CMD_MAP_SAVE_IMAGE_ON_CHANGE,
-	ID_CMD_MAP_SAVE_PDF_INDEXED,
-	ID_CMD_MAP_SAVE_INTERACTIVE_SVG,
 	ID_CMD_MAP_SYNCHRONIZE,
 	ID_CMD_MAP_LEGEND_VERTICAL,
 	ID_CMD_MAP_LEGEND_HORIZONTAL,
diff --git a/src/saga_core/saga_gui/res_controls.cpp b/src/saga_core/saga_gui/res_controls.cpp
index 394b082..728cd9f 100644
--- a/src/saga_core/saga_gui/res_controls.cpp
+++ b/src/saga_core/saga_gui/res_controls.cpp
@@ -88,6 +88,7 @@ const wxChar * CTRL_Get_Name(int ID_CTRL)
 	case ID_BTN_SAVE:					return( LNG("[BTN] Save") );
 
 	case ID_BTN_ADD:					return( LNG("[BTN] Add") );
+	case ID_BTN_ADD_ALL:				return( LNG("[BTN] Add All") );
 	case ID_BTN_INSERT:					return( LNG("[BTN] Insert") );
 	case ID_BTN_DELETE:					return( LNG("[BTN] Delete") );
 	case ID_BTN_DELETE_ALL:				return( LNG("[BTN] Clear") );
diff --git a/src/saga_core/saga_gui/res_controls.h b/src/saga_core/saga_gui/res_controls.h
index bd400dc..f83c06c 100644
--- a/src/saga_core/saga_gui/res_controls.h
+++ b/src/saga_core/saga_gui/res_controls.h
@@ -161,6 +161,7 @@ enum ID_CONTROLS
 	ID_BTN_RESTORE,
 
 	ID_BTN_ADD,
+	ID_BTN_ADD_ALL,
 	ID_BTN_INSERT,
 	ID_BTN_DELETE,
 	ID_BTN_DELETE_ALL,
diff --git a/src/saga_core/saga_gui/res_images.cpp b/src/saga_core/saga_gui/res_images.cpp
index f327d33..e9eae13 100644
--- a/src/saga_core/saga_gui/res_images.cpp
+++ b/src/saga_core/saga_gui/res_images.cpp
@@ -197,7 +197,7 @@
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-char ** IMG_Get_XPM(int ID_IMG)
+const char ** IMG_Get_XPM(int ID_IMG)
 {
 	switch( ID_IMG )
 	{
diff --git a/src/saga_core/saga_gui/saga.cpp b/src/saga_core/saga_gui/saga.cpp
index 2782254..1e4ec46 100644
--- a/src/saga_core/saga_gui/saga.cpp
+++ b/src/saga_core/saga_gui/saga.cpp
@@ -102,7 +102,7 @@ END_EVENT_TABLE()
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-#define SAGA_GUI_VERSION		wxT("2.0.5")
+#define SAGA_GUI_VERSION		wxT("2.0.6")
 #define SAGA_GUI_BUILD			wxT("20100719")
 
 //---------------------------------------------------------
@@ -199,9 +199,22 @@ bool CSAGA::OnInit(void)
 #endif // defined(_SAGA_MSW)
 
 	//-----------------------------------------------------
-	SG_Get_Translator() .Create(SG_File_Make_Path(Get_App_Path(), wxT("saga"), wxT("lng")), false);
-	SG_Get_Projections().Create(SG_File_Make_Path(Get_App_Path(), wxT("saga"), wxT("srs")));
+	SG_Get_Translator() .Create(
+		SG_File_Make_Path(Get_App_Path(), wxT("saga"    ), wxT("lng")), false
+	);
 
+	//-----------------------------------------------------
+	wxString	fName;
+
+	SG_Get_Projections().Load_Dictionary(CONFIG_Read(wxT("/MODULES"), wxT("CRS_FILE_DIC"), fName) && SG_File_Exists(fName)
+		? fName.c_str() : SG_File_Make_Path(Get_App_Path(), wxT("saga_prj"), wxT("dic")).c_str()
+	);
+
+	SG_Get_Projections().Load_DB        (CONFIG_Read(wxT("/MODULES"), wxT("CRS_FILE_SRS"), fName) && SG_File_Exists(fName)
+		? fName.c_str() : SG_File_Make_Path(Get_App_Path(), wxT("saga_prj"), wxT("srs")).c_str()
+	);
+
+	//-----------------------------------------------------
 	SetTopWindow(new CSAGA_Frame());
 
 	//-----------------------------------------------------
diff --git a/src/saga_core/saga_gui/svg_interactive_map.cpp b/src/saga_core/saga_gui/svg_interactive_map.cpp
deleted file mode 100644
index 1840423..0000000
--- a/src/saga_core/saga_gui/svg_interactive_map.cpp
+++ /dev/null
@@ -1,2838 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//              SVG_Interactive_map.cpp                  //
-//                                                       //
-//          Copyright (C) 2005 by Victor Olaya           //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "wksp_map_layer.h"
-#include "wksp_layer_classify.h"
-
-#include "svg_interactive_map.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define MAP_WINDOW_WIDTH	550.
-#define MAP_WINDOW_HEIGHT	700.
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSVG_Interactive_Map::CSVG_Interactive_Map(void)
-{
-}
-
-//---------------------------------------------------------
-CSVG_Interactive_Map::~CSVG_Interactive_Map(void)
-{
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSVG_Interactive_Map::Create_From_Map(CWKSP_Map *pMap, CSG_Shapes *pIndexLayer, const wxChar *Filename)
-{
-	//-----------------------------------------------------
-	m_Directory	= SG_File_Get_Path(Filename);
-
-	_Add_Opening(pMap->Get_Extent());
-
-	//-----------------------------------------------------
-	m_sSVGCode.Append(wxT("<g id=\"mainMapGroup\" transform=\"translate(0,0)\">\n"));
-
-	for(int i=pMap->Get_Count()-1; i>-1; i--)
-	{
-		switch( pMap->Get_Layer(i)->Get_Layer()->Get_Type() )
-		{
-		default:	break;
-		case WKSP_ITEM_Grid:	_Add_Grid	((CWKSP_Grid   *)pMap->Get_Layer(i)->Get_Layer());	break;
-		case WKSP_ITEM_Shapes:	_Add_Shapes	((CWKSP_Shapes *)pMap->Get_Layer(i)->Get_Layer());	break;
-		}
-	}
-
-	m_sSVGCode.Append(wxT("</g>\n</svg>\n"));
-
-	//-----------------------------------------------------
-	_Add_CheckBoxes(pMap);
-
-	_Add_ReferenceMap(pIndexLayer, pMap->Get_Extent());
-
-	m_sSVGCode.Append(_Get_Code_Closing_1());
-
-	Save(Filename);
-
-	//-----------------------------------------------------
-	_Write_Code(SG_File_Make_Path(m_Directory, wxT("checkbox")			, wxT("js")), _Get_Code_CheckBox());
-	_Write_Code(SG_File_Make_Path(m_Directory, wxT("mapApp")			, wxT("js")), _Get_Code_MapApp	());
-	_Write_Code(SG_File_Make_Path(m_Directory, wxT("timer")				, wxT("js")), _Get_Code_Timer	());
-	_Write_Code(SG_File_Make_Path(m_Directory, wxT("slider")			, wxT("js")), _Get_Code_Slider	());
-	_Write_Code(SG_File_Make_Path(m_Directory, wxT("helper_functions")	, wxT("js")), _Get_Code_Helper	());
-	_Write_Code(SG_File_Make_Path(m_Directory, wxT("button")			, wxT("js")), _Get_Code_Buttons	());
-	_Write_Code(SG_File_Make_Path(m_Directory, wxT("navigation")		, wxT("js")), CSG_String::Format(wxT("%s%s"), _Get_Code_Navigation_1(), _Get_Code_Navigation_2()));
-}
-
-//---------------------------------------------------------
-void CSVG_Interactive_Map::_Write_Code(const wxChar *FileName, const wxChar *Code)
-{
-	CSG_File	Stream;
-
-	if( Stream.Open(FileName, SG_FILE_W, false) )
-	{
-		Stream.Write((void *)Code, SG_STR_LEN(Code));
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSVG_Interactive_Map::_Add_Opening(CSG_Rect r)
-{
-	CSG_String sViewBox;
-	double Width, Height;
-	double OffsetX, OffsetY;
-
-	m_sSVGCode.Append(_Get_Opening_Code_1());
-	m_sSVGCode.Append(SG_Get_String(r.Get_XRange(),2));
-	m_sSVGCode.Append(wxT("),"));
-	m_sSVGCode.Append(SG_Get_String(r.Get_XRange() / 400.,2));
-	m_sSVGCode.Append(_Get_Opening_Code_2());
-
-	if (r.Get_XRange() / r.Get_YRange()  > MAP_WINDOW_WIDTH / MAP_WINDOW_HEIGHT)
-	{
-		Width = r.Get_XRange();
-		Height =  r.Get_XRange() * MAP_WINDOW_HEIGHT / MAP_WINDOW_WIDTH;
-	}
-	else
-	{
-		Height = r.Get_YRange();
-		Width = r.Get_YRange() / MAP_WINDOW_HEIGHT * MAP_WINDOW_WIDTH;
-	}
-
-	OffsetX = (Width - r.Get_XRange()) / 2.;
-	OffsetY = (Height - r.Get_YRange()) / 2.;
-
-	sViewBox.Append(SG_Get_String(r.Get_XMin() - OffsetX,2));
-	sViewBox.Append(wxT(" "));
-	sViewBox.Append(SG_Get_String(-r.Get_YMax() - OffsetY,2));
-	sViewBox.Append(wxT(" "));
-	sViewBox.Append(SG_Get_String(Width,2));
-	sViewBox.Append(wxT(" "));
-	sViewBox.Append(SG_Get_String(Height,2));
-
-	_AddAttribute(wxT("viewBox"), sViewBox);	
-	m_sSVGCode.Append(wxT(">\n"));
-
-	m_dWidth = Width;
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Opening_Code_1(void)
-{
-	return( SG_STR_MBTOSG(
-		"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
-		"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\" [\n"
-		"<!ATTLIST svg\n"
-		"	xmlns:attrib CDATA #IMPLIED\n"
-		"	xmlns:batik CDATA #IMPLIED\n"
-		">\n"
-		"<!ATTLIST g\n"
-		"	batik:static CDATA #IMPLIED\n"
-		">\n"
-		"<!ATTLIST image\n"
-		"	batik:static CDATA #IMPLIED\n"
-		">\n"
-		"<!ATTLIST path\n"
-		"	batik:static CDATA #IMPLIED\n"
-		">\n"
-		"]>\n"
-		"<?AdobeSVGViewer save=\"snapshot\"?>\n"
-		"<svg width=\"100%\" height=\"100%\" viewBox=\"0 0 1024 768\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:attrib=\"http://www.carto.net/attrib\" xmlns:batik=\"http://xml.apache.org/batik/ext\" onload=\"init(evt);\" zoomAndPan=\"disable\">\n"
-		"	<script type=\"text/ecmascript\" xlink:href=\"helper_functions.js\"/>\n"
-		"	<script type=\"text/ecmascript\" xlink:href=\"mapApp.js\"/>\n"
-		"	<script type=\"text/ecmascript\" xlink:href=\"timer.js\"/>\n"
-		"	<script type=\"text/ecmascript\" xlink:href=\"slider.js\"/>\n"
-		"	<script type=\"text/ecmascript\" xlink:href=\"button.js\"/>\n"
-		"	<script type=\"text/ecmascript\" xlink:href=\"checkbox.js\"/>\n"
-		"	<script type=\"text/ecmascript\" xlink:href=\"navigation.js\"/>\n"
-		"	<script type=\"text/ecmascript\"><![CDATA[\n"
-		"		//global variables for mapApp and map object\n"
-		"		var myMapApp = new mapApp();\n"
-		"		var myMainMap;\n"
-		"		function init(evt) {\n"
-		"			//dynamic layer array that allow loading from database\n"
-		"			var dynamicLayers = new Array();\n"
-		"			//initialize digiLayers (layers that allow digitizing)\n"
-		"			var digiLayers = new Array();\n"
-		"			//initialize myMainMap object\n"
-		"			myMainMap = new map(\"mainMap\"),"
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Opening_Code_2(void)
-{
-	return( SG_STR_MBTOSG(
-		"),0.6,0,0,\"\"),1,true,\"coordX\"),\"coordY\"),dynamicLayers,digiLayers,\"\"));\n"
-		"			//initialize refMapDragger object\n"
-		"			myMapApp.refMapDragger = new dragObj(\"dragRectForRefMap\"),\"referenceMap\"),\"myDragCross\"),0.1,true,\"coordX\"),\"coordY\"),myMainMap);\n"
-		"			//create zoom slider	\n"
-		"			myMapApp.zoomSlider = new slider(715,75,myMainMap.minWidth,715,165,myMainMap.maxWidth,myMainMap.maxWidth,\"mapZoomSlider\"),\"dimgray\"),2,10,\"sliderSymbol\"),myMapApp.refMapDragger,true);\n"
-		"			//now initialize buttons\n"
-		"			myMapApp.buttons = new Array();\n"
-		"			//groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset\n"
-		"			myMapApp.buttons[\"zoomIn\"] = new button(\"zoomIn\"),zoomImageButtons,\"rect\"),undefined,\"magnifyerZoomIn\"),705,47,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
-		"			myMapApp.buttons[\"zoomOut\"] = new button(\"zoomOut\"),zoomImageButtons,\"rect\"),undefined,\"magnifyerZoomOut\"),705,173,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
-		"			myMapApp.buttons[\"infoButton\"] = new switchbutton(\"infoButton\"),zoomImageSwitchButtons,\"rect\"),undefined,\"infoBut\"),746,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
-		"			myMapApp.buttons[\"infoButton\"].setSwitchValue(true,false);\n"
-		"			statusChange(\"Mode: Infomode\"));\n"
-		"			myMapApp.buttons[\"zoomFull\"] = new button(\"zoomFull\"),zoomImageButtons,\"rect\"),undefined,\"magnifyerFull\"),771,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
-		"			myMapApp.buttons[\"zoomManual\"] = new switchbutton(\"zoomManual\"),zoomImageSwitchButtons,\"rect\"),undefined,\"magnifyerManual\"),796,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
-		"			myMapApp.buttons[\"panManual\"] = new switchbutton(\"panManual\"),zoomImageSwitchButtons,\"rect\"),undefined,\"symbPan\"),821,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
-		"			myMapApp.buttons[\"recenterMap\"] = new switchbutton(\"recenterMap\"),zoomImageSwitchButtons,\"rect\"),undefined,\"symbRecenter\"),846,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
-		"			myMapApp.buttons[\"backwardExtent\"] = new button(\"backwardExtent\"),zoomImageButtons,\"rect\"),undefined,\"symbArrowLeft\"),871,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
-		"			myMapApp.buttons[\"forwardExtent\"] = new button(\"forwardExtent\"),zoomImageButtons,\"rect\"),undefined,\"symbArrowRight\"),896,74,20,20,10,\"\"),\"\"),\"white\"),\"rgb(235,235,235)\"),\"dimgray\"),1);\n"
-		"			//see if we need to disable buttons\n"
-		"			myMainMap.checkButtons();\n"
-		"			//load function specific to the current map project\n"
-		"			loadProjectSpecific();\n"
-		"		}\n"
-		"		function loadProjectSpecific() {\n"
-		"			//adopt width and height of map extent\n"
-		"			document.getElementById(\"myScaleTextW\")).firstChild.nodeValue = formatNumberString(myMainMap.curWidth.toFixed(myMainMap.nrDecimals)) + myMainMap.units;\n"
-		"			document.getElementById(\"myScaleTextH\")).firstChild.nodeValue = formatNumberString(myMainMap.curHeight.toFixed(myMainMap.nrDecimals)) + myMainMap.units;\n"
-		"		}\n"
-		"]]></script>\n"
-		"	<defs>\n"
-		"		<!-- Symbols for checkboxes -->\n"
-		"		<symbol id=\"checkBoxRect\" overflow=\"visible\">\n"
-		"			<rect x=\"-6\" y=\"-6\" width=\"12\" height=\"12\" fill=\"white\" stroke=\"dimgray\" stroke-width=\"1.5\"/>\n"
-		"		</symbol>\n"
-		"		<symbol id=\"checkBoxCross\" overflow=\"visible\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"1\" pointer-events=\"none\">\n"
-		"			<line x1=\"-5\" y1=\"-5\" x2=\"5\" y2=\"5\"/>\n"
-		"			<line x1=\"-5\" y1=\"5\" x2=\"5\" y2=\"-5\"/>\n"
-		"		</symbol>\n"
-		"		<!-- Symbols for Zoom Magnifyer glasses -->\n"
-		"		<symbol id=\"magnifyerFull\" overflow=\"visible\">\n"
-		"			<text y=\"7.5\" font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"18px\" font-weight=\"bold\" text-anchor=\"middle\" pointer-events=\"none\">F</text>\n"
-		"		</symbol>\n"
-		"		<symbol id=\"infoBut\" overflow=\"visible\">\n"
-		"			<circle fill=\"none\" stroke=\"dimgray\" stroke-width=\"1.5\" r=\"7.5\" />\n"
-		"			<text y=\"5\" font-family=\"sans-serif\" font-size=\"13px\" font-weight=\"bold\" fill=\"dimgray\" text-anchor=\"middle\" pointer-events=\"none\">i</text>\n"
-		"		</symbol>\n"
-		"		<symbol id=\"magnifyerManual\" overflow=\"visible\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"1.5\">\n"
-		"			<rect x=\"-6\" y=\"-6\" width=\"12\" height=\"12\" stroke-dasharray=\"1.5,1.5\"/>\n"
-		"			<line x1=\"-3\" y1=\"0\" x2=\"3\" y2=\"0\" />\n"
-		"			<line x1=\"0\" y1=\"-3\" x2=\"0\" y2=\"3\" />\n"
-		"		</symbol>\n"
-		"		<symbol id=\"magnifyerZoomIn\" overflow=\"visible\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"2\">\n"
-		"			<line x1=\"-4\" y1=\"0\" x2=\"4\" y2=\"0\"/>\n"
-		"			<line x1=\"0\" y1=\"-4\" x2=\"0\" y2=\"4\"/>\n"
-		"		</symbol>\n"
-		"		<symbol id=\"magnifyerZoomOut\" overflow=\"visible\">\n"
-		"			<line x1=\"-4\" y1=\"0\" x2=\"4\" y2=\"0\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"2\" />\n"
-		"		</symbol>\n"
-		"		<!-- hand symbol for panning -->\n"
-		"		<symbol id=\"symbPan\" overflow=\"visible\">\n"
-		"			<path transform=\"scale(1.2)\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"1\" d=\"M-2 6 C -2.2 2.5 -8.0 -0 -5.7 -1.9 C -4.3 -2.5 -3.3 -0.5 -2.5 0.7 C -3.2 -2.1 -5.5 -5.2 -3.6 -5.8 C -2.1 -6.3 -1.6 -3.6 -1.1 -1.9 C -0.9 -4.2 -1.6 -6.4 -0.2 -6.6 C 1.4 -6.8 0.9 -3 1.1 -1.9 C 1.5 -3.5 1.2 -6.1 2.5 -6.1 C 3.9 -6.1 3.5 -3.2 3.6 -1.6 C 4 -2.9 4.1 -4.3 5.3 -4.4 C 7.3 -3.5 4 2.2 3 6z\"/>\n"
-		"		</symbol>\n"
-		"		<!-- Symbol for Arrows -->\n"
-		"		<symbol id=\"symbArrow\" overflow=\"visible\">\n"
-		"			<polyline fill=\"none\" stroke=\"dimgray\" stroke-width=\"1\" points=\"-3,-6 3,-6 3,1 5,1 0,7 -5,1 -3,1 -3,-5\"/>\n"
-		"		</symbol>\n"
-		"		<symbol id=\"symbArrowLeft\" overflow=\"visible\">\n"
-		"			<use xlink:href=\"#symbArrow\" transform=\"rotate(90)\" />\n"
-		"		</symbol>\n"
-		"		<symbol id=\"symbArrowRight\" overflow=\"visible\">\n"
-		"			<use xlink:href=\"#symbArrow\" transform=\"rotate(-90)\" />\n"
-		"		</symbol>\n"
-		"		<!-- Symbol for Recentering Map -->\n"
-		"		<symbol id=\"symbRecenter\" overflow=\"visible\">\n"
-		"			<circle fill=\"dimgray\" cx=\"0\" cy=\"0\" r=\"1\" pointer-events=\"none\"/>\n"
-		"			<g fill=\"none\" stroke=\"dimgray\" stroke-width=\"1.5\" pointer-events=\"none\">\n"
-		"				<line x1=\"-7\" y1=\"-7\" x2=\"-3\" y2=\"-3\"/>\n"
-		"				<line x1=\"7\" y1=\"7\" x2=\"3\" y2=\"3\"/>\n"
-		"				<line x1=\"-7\" y1=\"7\" x2=\"-3\" y2=\"3\"/>\n"
-		"				<line x1=\"7\" y1=\"-7\" x2=\"3\" y2=\"-3\"/>\n"
-		"			</g>\n"
-		"		</symbol>\n"
-		"		<!-- Symbol for Slider -->\n"
-		"		<symbol id=\"sliderSymbol\" overflow=\"visible\" pointer-events=\"none\">\n"
-		"			<line x1=\"0\" y1=\"-5\" x2=\"0\" y2=\"5\" fill=\"none\" stroke=\"dimgray\" stroke-width=\"5\"/>\n"
-		"		</symbol>\n"
-		"		<!-- Symbol for Dragging if zoomed in far -->\n"
-		"		<symbol id=\"myDragCrossSymbol\" overflow=\"visible\" stroke-width=\"2000\" fill=\"none\" stroke=\"darkblue\" pointer-events=\"none\">\n"
-		"			<line x1=\"-7000\" y1=\"0\" x2=\"-2500\" y2=\"0\"/>\n"
-		"			<line x1=\"7000\" y1=\"0\" x2=\"2500\" y2=\"0\"/>\n"
-		"			<line x1=\"0\" y1=\"-3300\" x2=\"0\" y2=\"-7800\"/>\n"
-		"			<line x1=\"0\" y1=\"3300\" x2=\"0\" y2=\"7800\"/>\n"
-		"		</symbol>\n"
-		"		<!-- Marker for Extent-Arrows -->\n"
-		"		<marker id=\"myStartArrow\" overflow=\"visible\" orient=\"auto\">\n"
-		"			<polyline fill=\"dimgray\" points=\"-0.5,0 8,-2 8,2\"/>\n"
-		"		</marker>\n"
-		"		<marker id=\"myEndArrow\" overflow=\"visible\" orient=\"auto\">\n"
-		"			<polyline fill=\"dimgray\" points=\"0.5,0 -8,-2 -8,2\"/>\n"
-		"		</marker>\n"
-		"	</defs>\n"
-		"	<rect x=\"-500\" y=\"-500\" width=\"3000\" height=\"3000\" stroke=\"none\" fill=\"aliceblue\" />\n"
-		"	<!-- Main Map Frame -->\n"
-		"	<svg id=\"mainMap\" x=\"0\" y=\"15\" width=\"550\" height=\"700\"	cursor=\"crosshair\" "
-	));
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CSVG_Interactive_Map::_Add_ReferenceMap(CSG_Shapes *pIndexLayer, CSG_Rect r)
-{
-	int i;
-	CSG_String sViewBox;
-	double Line_Width, Point_Width;
-	double Width, Height;
-	double OffsetX, OffsetY;
-	CSG_Shape *pShape;
-
-	if (r.Get_XRange() / r.Get_YRange()  > MAP_WINDOW_WIDTH / MAP_WINDOW_HEIGHT)
-	{
-		Width = r.Get_XRange();
-		Height =  r.Get_XRange() * MAP_WINDOW_HEIGHT / MAP_WINDOW_WIDTH;
-	}
-	else
-	{
-		Height = r.Get_YRange();
-		Width = r.Get_YRange() / MAP_WINDOW_HEIGHT * MAP_WINDOW_WIDTH;
-	}
-
-	OffsetX = (Width - r.Get_XRange()) / 2.;
-	OffsetY = (Height - r.Get_YRange()) / 2.;
-
-	sViewBox.Append(SG_Get_String(r.Get_XMin() - OffsetX,2));
-	sViewBox.Append(wxT(" "));
-	sViewBox.Append(SG_Get_String(- r.Get_YMax() - OffsetY,2));
-	sViewBox.Append(wxT(" "));
-	sViewBox.Append(SG_Get_String(Width,2));
-	sViewBox.Append(wxT(" "));
-	sViewBox.Append(SG_Get_String(Height,2));
-
-	_AddAttribute(wxT("viewBox"), sViewBox);	
-
-	m_sSVGCode.Append(_Get_Code_3());
-	
-	if (pIndexLayer)
-	{
-		m_sSVGCode.Append(wxT("<g id=\"index\">\n"));
-		for (i = 0; i < pIndexLayer->Get_Count(); i++)
-		{
-			pShape = pIndexLayer->Get_Shape(i);
-			Line_Width = Point_Width = m_dWidth / MAP_WINDOW_WIDTH;
-			Point_Width *= 5;
-			_Add_Shape(pShape, 0, 0, Line_Width, Point_Width);
-		}
-		m_sSVGCode.Append(wxT("</g>\n"));
-	}
-
-	m_sSVGCode.Append(_Get_Code_4());
-		
-	_AddAttribute(wxT("x"), r.Get_XMin() - OffsetX);
-	_AddAttribute(wxT("y"), - r.Get_YMax() - OffsetY);
-	_AddAttribute(wxT("width"), Width);
-	_AddAttribute(wxT("height"), Height);
-
-	m_sSVGCode.Append(_Get_Code_5());
-
-}
-
-//---------------------------------------------------------
-void CSVG_Interactive_Map::_Add_Grid(CWKSP_Grid *pLayer)
-{
-	wxString Filename;
-	wxBitmap BMP;
-	
-	if( pLayer->Get_Image_Grid(BMP) )
-	{
-		Filename	= SG_File_Make_Path(m_Directory.c_str(), pLayer->Get_Object()->Get_Name(), wxT("jpg"));
-		BMP.SaveFile(Filename, wxBITMAP_TYPE_JPEG);
-
-		m_sSVGCode.Append(wxT("<image "));
-
-		_AddAttribute(wxT("id")			, pLayer->Get_Object()->Get_Name());
-		_AddAttribute(wxT("x")			, ((CSG_Grid *)pLayer->Get_Object())->Get_XMin());
-		_AddAttribute(wxT("y")			,-((CSG_Grid *)pLayer->Get_Object())->Get_YMax());
-		_AddAttribute(wxT("width")		, ((CSG_Grid *)pLayer->Get_Object())->Get_XRange());
-		_AddAttribute(wxT("height")		, ((CSG_Grid *)pLayer->Get_Object())->Get_YRange());
-		_AddAttribute(wxT("xlink:href")	, SG_File_Get_Name(Filename, true));
-
-		m_sSVGCode.Append(wxT("/>"));
-	}
-}
-
-//---------------------------------------------------------
-void CSVG_Interactive_Map::_Add_Shapes(CWKSP_Shapes *pLayer)
-{
-	int i;
-	int iColorField;
-	int Line_Color, Fill_Color; 
-	double Line_Width, Point_Width;
-	double dSize;
-	CSG_Shape *pShape;
-	CSG_String sLabel;
-
-	m_sSVGCode.Append(wxT("<g id=\""));
-	m_sSVGCode.Append(pLayer->Get_Object()->Get_Name());		
-	m_sSVGCode.Append(wxT("\" >\n"));
-	
-	iColorField = pLayer->Get_Color_Field();
-
-	m_sSVGCode.Append(wxT("<g transform=\"scale(1,-1)\">\n"));
-
-	for (i = 0; i < ((CSG_Shapes*)pLayer->Get_Object())->Get_Count(); i++)
-	{
-		pShape = pLayer->Get_Shapes()->Get_Shape(i);
-		Line_Color = Fill_Color = pLayer->Get_Classifier()->Get_Class_Color_byValue(pShape->asDouble(iColorField));
-		Line_Width = Point_Width = m_dWidth / MAP_WINDOW_WIDTH;
-		Point_Width *= 5;
-		_Add_Shape(pShape, Fill_Color, Line_Color, Line_Width, Point_Width);
-	}
-	
-	if (pLayer->Get_Label_Field() >= 0)
-	{
-		m_sSVGCode.Append(wxT("<g transform=\"scale(0.01,-0.01)\"\n>"));
-		for (i = 0; i < ((CSG_Shapes*)pLayer->Get_Object())->Get_Count(); i++)
-		{
-			pShape = pLayer->Get_Shapes()->Get_Shape(i);
-			Line_Width = Point_Width = m_dWidth / MAP_WINDOW_WIDTH;
-			sLabel = pShape->asString(pLayer->Get_Label_Field());
-			switch( pLayer->Get_Parameters()->Get_Parameter(wxT("LABEL_ATTRIB_SIZE_TYPE"))->asInt() )
-			{
-				case 0:	default:
-					dSize = Line_Width * pLayer->Get_Parameters()->Get_Parameter(wxT("LABEL_ATTRIB_FONT"))->asFont()->GetPointSize();
-					_Add_Label(sLabel, pShape, dSize, wxT("%"));
-					break;
-				case 1:
-					dSize =  pLayer->Get_Parameters()->Get_Parameter(wxT("LABEL_ATTRIB_SIZE"))->asDouble();
-					_Add_Label(sLabel, pShape, dSize, wxT(""));
-					break;
-			}
-		}
-
-		m_sSVGCode.Append(wxT("</g>\n"));
-	}
-
-	m_sSVGCode.Append(wxT("</g>\n</g>\n"));
-}
-
-//---------------------------------------------------------
-void CSVG_Interactive_Map::_Add_Label(const wxChar* Label, CSG_Shape *pShape, double dSize, const wxChar* Unit)
-{
-
-	int iPoint, iPart;
-	TSG_Point Point;
-
-	switch( pShape->Get_Type() )
-	{
-	case SHAPE_TYPE_Point:
-	case SHAPE_TYPE_Points:
-		for(iPoint=0; iPoint < pShape->Get_Point_Count(0); iPoint++)
-		{
-			Point = pShape->Get_Point(iPoint);
-			Draw_Text(100 * Point.x, -100 * Point.y, Label, 0, wxT("Verdana"), 100 * dSize);
-		}
-		break;
-
-	case SHAPE_TYPE_Line:
-		///************///
-		break;
-
-	case SHAPE_TYPE_Polygon:
-		
-		for (iPart = 0; iPart < pShape->Get_Part_Count(); iPart++)
-		{
-			if(! ((CSG_Shape_Polygon *)pShape)->is_Lake(iPart) )
-			{
-				Point = ((CSG_Shape_Polygon *)pShape)->Get_Centroid(iPart);
-				Draw_Text(100 * Point.x, -100 * Point.y, Label, 0, wxT("Verdana"), 100 * dSize);
-			}
-		}
-		break;
-	}
-
-}
-
-//---------------------------------------------------------
-bool CSVG_Interactive_Map::_Add_Shape(CSG_Shape *pShape, int Fill_Color, int Line_Color, double Line_Width, double Point_Width)
-{
-	if( pShape && pShape->is_Valid() )
-	{
-		int				iPart, iPoint;
-		TSG_Point		Point;
-		CSG_Points	Points;
-
-		for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
-		{
-			Points.Clear();
-
-			for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
-			{
-				Point = pShape->Get_Point(iPoint, iPart);
-				Points.Add(Point.x, Point.y);
-			}
-
-			switch( pShape->Get_Type() )
-			{
-			case SHAPE_TYPE_Point:
-			case SHAPE_TYPE_Points:
-				for(iPoint=0; iPoint<Points.Get_Count(); iPoint++)
-				{
-					Draw_Circle(Points[iPoint].x, Points[iPoint].y, Point_Width, Fill_Color, 0, Line_Width);
-				}
-				break;
-
-			case SHAPE_TYPE_Line:
-				Draw_Line(Points, Line_Width, Line_Color);
-				break;
-
-			case SHAPE_TYPE_Polygon:
-				if( ((CSG_Shape_Polygon *)pShape)->is_Lake(iPart) )
-				{
-					Draw_Polygon(Points, -1, 0, 0.01);
-				}
-				else
-				{
-					Draw_Polygon(Points, Fill_Color, 0, 0.01);
-				}
-				break;
-			}
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-void CSVG_Interactive_Map::_Add_CheckBoxes(CWKSP_Map *pMap)
-{
-
-	int i;
-	CSG_String s;
-	int x,y;
-	int iRow = 1;
-	
-	m_sSVGCode.Append(_Get_Code_1());	// 2* <g> open
-	m_sSVGCode.Append(LNG("Layers"));
-	m_sSVGCode.Append(wxT("</text>\n"));
-
-	for (i = 0; i < pMap->Get_Count(); i++)
-	{
-		y = iRow * 30;
-
-		if (i % 2)
-		{
-			x = 200;		
-			iRow++;
-		}
-		else
-		{
-			x = 0;
-		}
-	
-		m_sSVGCode.Append(wxT("<g "));
-		s = wxT("translate(");
-		s.Append(SG_Get_String(x,0));
-		s.Append(wxT(" "));
-		s.Append(SG_Get_String(y,0));
-		s.Append(wxT("))"));
-		_AddAttribute(wxT("transform"), s);
-		m_sSVGCode.Append(wxT(">\n"));
-
-		m_sSVGCode.Append(wxT("<use "));
-		s = wxT("checkBox");
-		s.Append(pMap->Get_Layer(i)->Get_Layer()->Get_Object()->Get_Name());
-		_AddAttribute(wxT("id"), s);
-		_AddAttribute(wxT("xlink:href"), wxT("#checkBoxRect"));
-		s = wxT("checkBoxScript(evt,'");
-		s.Append(pMap->Get_Layer(i)->Get_Layer()->Get_Object()->Get_Name());
-		s.Append(wxT("');"));
-		_AddAttribute(wxT("onclick"), s);
-		m_sSVGCode.Append(wxT("/>\n"));
-
-		m_sSVGCode.Append(wxT("<use "));
-		s = wxT("checkCross");
-		s.Append(pMap->Get_Layer(i)->Get_Layer()->Get_Object()->Get_Name());
-		_AddAttribute(wxT("id"), s);
-		_AddAttribute(wxT("xlink:href"), wxT("#checkBoxCross"));		
-		_AddAttribute(wxT("visibility"), wxT("visible"));
-		m_sSVGCode.Append(wxT("/>\n"));
-
-		m_sSVGCode.Append(wxT("</g>\n"));
-	}
-
-	m_sSVGCode.Append(wxT("<g font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"15px\" pointer-events=\"none\">\n"));
-	
-	iRow = 1;
-		
-	for (i = 0; i < pMap->Get_Count(); i++)
-	{
-		y = iRow * 30 + 6;
-
-		if (i % 2)
-		{
-			x = 212;
-			iRow++;
-		}
-		else
-		{
-			x = 12;
-		}
-
-		m_sSVGCode.Append(wxT("<text "));	
-		_AddAttribute(wxT("x"), x);
-		_AddAttribute(wxT("y"), y);
-		m_sSVGCode.Append(wxT(">"));
-		m_sSVGCode.Append(pMap->Get_Layer(i)->Get_Layer()->Get_Object()->Get_Name());
-		m_sSVGCode.Append(wxT("</text>\n"));	
-
-	}
-
-	m_sSVGCode.Append(wxT("</g>\n"));
-
-	m_sSVGCode.Append(_Get_Code_2());
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_1(void)
-{
-	return( SG_STR_MBTOSG(
-		"<g>\n"
-		"		<g font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"15px\" pointer-events=\"none\">"
-		"			<text id=\"coordX\" x=\"745\" y=\"145\">X:</text>\n"
-		"			<text id=\"coordY\" x=\"845\" y=\"145\">Y:</text>\n"
-		"		</g>\n"
-		"		<g>"
-		"			<!-- vertical line, displays current height of map extent -->\n"
-		"			<line stroke=\"dimgray\" stroke-width=\"1.5\" marker-start=\"url(#myStartArrow)\" marker-end=\"url(#myEndArrow)\" x1=\"561\" y1=\"15\" x2=\"561\" y2=\"715\"/>\n"
-		"			<rect fill=\"aliceblue\" x=\"555\" y=\"330\" width=\"12\" height=\"70\"/>\n"
-		"			<text id=\"myScaleTextH\" font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"15px\" text-anchor=\"middle\" transform=\"translate(556,365),rotate(90)\" pointer-events=\"none\">-</text>\n"
-		"			<!-- horizontal line, displays current width of map extent -->\n"
-		"			<line stroke=\"dimgray\" stroke-width=\"1.5\" marker-start=\"url(#myStartArrow)\" marker-end=\"url(#myEndArrow)\" x1=\"0\" y1=\"723\" x2=\"553.1\" y2=\"723\"/>\n"
-		"			<rect fill=\"aliceblue\" x=\"242\" y=\"717\" width=\"70\" height=\"12\"/>\n"
-		"			<text id=\"myScaleTextW\" font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"15px\" text-anchor=\"middle\" transform=\"translate(277,728)\" pointer-events=\"none\">-</text>\n"
-		"			<!-- small rectangle in lower right corner, onclick displays current map extent in real world coordinates -->\n"
-		"			<rect fill=\"dimgray\" x=\"558.5\" y=\"720.5\" width=\"5\" height=\"5\" onclick=\"showExtent()\" />\n"
-		"		</g>\n"
-		"		<g transform=\"translate(590 225)\">\n"
-		"			<text font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"18px\" font-weight=\"bold\" x=\"-10\" y=\"0\" pointer-events=\"none\">"
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_2(void)
-{
-	return( SG_STR_MBTOSG(
-		"</g>\n"
-		"   <g text-rendering=\"optimizeLegibility\" font-family=\"sans-serif\" fill=\"dimgray\" font-size=\"12px\">\n"
-		"		<!-- text with this id is required to show help texts -->\n"
-		"		<text id=\"statusText\" x=\"745\" y=\"125\">Statusbar: Your Status Text</text>\n"
-		"   </g>\n"
-		"</g>\n"
-		"<svg id=\"referenceMap\" x=\"580\" y=\"45\" "
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_3(void)
-{
-	return( SG_STR_MBTOSG(
-		"width=\"118.52\" height=\"150\" onmousedown=\"myMapApp.refMapDragger.handleEvent(evt)\" onmousemove=\"myMapApp.refMapDragger.handleEvent(evt)\" onmouseup=\"myMapApp.refMapDragger.handleEvent(evt)\" onmouseout=\"myMapApp.refMapDragger.handleEvent(evt)\" cursor=\"crosshair\">\n"
-		"		<g transform=\"scale(1,-1)\"\n>"
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_4(void)
-{
-	return( SG_STR_MBTOSG(
-		"		</g>\n"
-		"		<rect id=\"dragRectForRefMap\" fill=\"lightskyblue\" fill-opacity=\"0.4\" "
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_5(void)
-{
-	return( SG_STR_MBTOSG(
-		" pointer-events=\"none\" />\n	"
-		"		<use id=\"myDragCross\" x=\"0\" y=\"0\" xlink:href=\"#myDragCrossSymbol\" visibility=\"hidden\" />\n"
-		"	</svg>\n"
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_Closing_1(void)
-{
-	return( SG_STR_MBTOSG(
-		"	<g>\n"
-		"		<!-- empty group where zoomSlider is later appended -->\n"
-		"		<g id=\"mapZoomSlider\"/>\n"
-		"		<!-- button for zoom-in, above slider -->\n"
-		"		<g id=\"zoomIn\" cursor=\"pointer\" />\n"
-		"		<!-- button for zoom-out, below slider -->\n"
-		"		<g id=\"zoomOut\" cursor=\"pointer\" />\n"
-		"		<!-- info button -->\n"
-		"		<g id=\"infoButton\" cursor=\"pointer\" />\n"
-		"		<!-- button for full view (f) -->\n"
-		"		<g id=\"zoomFull\" cursor=\"pointer\" />\n"
-		"		<!-- button for manual zoom (rectangle) -->\n"
-		"		<g id=\"zoomManual\" cursor=\"pointer\" />\n"
-		"		<!-- button for manual pan -->\n"
-		"		<g id=\"panManual\" cursor=\"pointer\" />\n"
-		"		<!-- button for redefining map center -->\n"
-		"		<g id=\"recenterMap\" cursor=\"pointer\" />\n"
-		"		<!-- button for backwarding map extent (extent history) -->\n"
-		"		<g id=\"backwardExtent\" cursor=\"pointer\" />\n"
-		"		<!-- button for forwarding map extent (extent history) -->\n"
-		"		<g id=\"forwardExtent\" cursor=\"pointer\" />\n"
-		"	</g>\n"
-	));
-}
-
-
-///////////////////////////////////////////////////////////
-//														//
-//														//
-//														//
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_CheckBox(void)
-{
-	return( SG_STR_MBTOSG(
-		"function checkBoxScript(evt,myLayer) { //checkBox for toggling layers an contextMenue\n"
-		"	var myLayerObj = document.getElementById(myLayer);\n"
-		"	var myCheckCrossObj = document.getElementById(\"checkCross\"+myLayer);\n"
-		"	var myCheckCrossVisibility = myCheckCrossObj.getAttributeNS(null,\"visibility\"));\n"
-		"	if (evt.type == \"click\" && evt.detail == 1) {\n"
-		"	if (myCheckCrossVisibility == \"visible\")) {\n"
-		"		myLayerObj.setAttributeNS(null,\"visibility\"),\"hidden\"));\n"
-		"		myCheckCrossObj.setAttributeNS(null,\"visibility\"),\"hidden\"));\n"
-		"		//you can do if/else or switch statements to set different actions on activating a checkbox here\n"
-		"		//myLayer holds the currentLayer name\n"
-		"	}\n"
-		"	else {\n"
-		"		myLayerObj.setAttributeNS(null,\"visibility\"),\"visible\"));\n"
-		"		myCheckCrossObj.setAttributeNS(null,\"visibility\"),\"visible\"));\n"
-		"	}\n"
-		"	}\n"
-		"}\n"
-		"\n"
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_MapApp(void)
-{
-	return( SG_STR_MBTOSG(
-		"//holds data on window size\n"
-		"function mapApp() {\n"
-		"	if (!document.documentElement.getScreenCTM) {\n"
-		"	this.resetFactors();\n"
-		"	//add resize event to document element\n"
-		"	document.documentElement.addEventListener(\"SVGResize\"),this,false);\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"mapApp.prototype.handleEvent = function(evt) {\n"
-		"	if (evt.type == \"SVGResize\")) {\n"
-		"	this.resetFactors();\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"mapApp.prototype.resetFactors = function() {\n"
-		"	if (!document.documentElement.getScreenCTM) {\n"
-		"	//case for viewers that don't support .getScreenCTM, such as ASV3\n"
-		"	//calculate ratio and offset values of app window\n"
-		"	var viewBoxArray = document.documentElement.getAttributeNS(null,\"viewBox\")).split(\" \"));\n"
-		"	var myRatio = viewBoxArray[2]/viewBoxArray[3];\n"
-		"	if ((window.innerWidth/window.innerHeight) > myRatio) { //case window is more wide than myRatio\n"
-		"		this.scaleFactor = viewBoxArray[3] / window.innerHeight;\n"
-		"	}\n"
-		"	else { //case window is more tall than myRatio\n"
-		"		this.scaleFactor = viewBoxArray[2] / window.innerWidth;\n"
-		"	}\n"
-		"	this.offsetX = (window.innerWidth - viewBoxArray[2] * 1 / this.scaleFactor) / 2;\n"
-		"	this.offsetY = (window.innerHeight - viewBoxArray[3] * 1 / this.scaleFactor) / 2;\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"mapApp.prototype.calcCoord = function(evt,ctmNode) {\n"
-		"	var svgPoint = document.documentElement.createSVGPoint();\n"
-		"	svgPoint.x = evt.clientX;\n"
-		"	svgPoint.y = evt.clientY;\n"
-		"	if (!document.documentElement.getScreenCTM) {\n"
-		"	//case ASV3 a. Corel\n"
-		"	svgPoint.x = (svgPoint.x	- this.offsetX) * this.scaleFactor;\n"
-		"	svgPoint.y = (svgPoint.y - this.offsetY) * this.scaleFactor;\n"
-		"	//undo the effect of transformations\n"
-		"	if (ctmNode) {\n"
-		"		var ctm = getTransformToRootElement(ctmNode).inverse();\n"
-		"	}\n"
-		"	else {\n"
-		"		var ctm = getTransformToRootElement(evt.target).inverse();\n"
-		"	}\n"
-		"	svgPoint = svgPoint.matrixTransform(ctm);\n"
-		"\n"
-		"	}\n"
-		"	else {\n"
-		"	if (ctmNode) {\n"
-		"		var matrix = ctmNode.getScreenCTM();\n"
-		"	}\n"
-		"	else {\n"
-		"		var matrix = evt.target.getScreenCTM();\n"
-		"	}\n"
-		"	svgPoint = svgPoint.matrixTransform(matrix.inverse());\n"
-		"	}\n"
-		"	return svgPoint;\n"
-		"}\n"
-		"\n"
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_Timer(void)
-{
-	return( SG_STR_MBTOSG(
-		"// source/credits: \"Algorithm\": http://www.codingforums.com/showthread.php?s=&threadid=10531\n"
-		"// The constructor should be called with\n"
-		"// the parent object (optional, defaults to window).\n"
-		"\n"
-		"function Timer(){\n"
-		"	this.obj = (arguments.length)?arguments[0]:window;\n"
-		"	return this;\n"
-		"}\n"
-		"\n"
-		"// The set functions should be called with:\n"
-		"// - The name of the object method (as a string) (required)\n"
-		"// - The millisecond delay (required)\n"
-		"// - Any number of extra arguments, which will all be\n"
-		"//	passed to the method when it is evaluated.\n"
-		"\n"
-		"Timer.prototype.setInterval = function(func, msec){\n"
-		"	var i = Timer.getNew();\n"
-		"	var t = Timer.buildCall(this.obj, i, arguments);\n"
-		"	Timer.set[i].timer = window.setInterval(t,msec);\n"
-		"	return i;\n"
-		"}\n"
-		"Timer.prototype.setTimeout = function(func, msec){\n"
-		"	var i = Timer.getNew();\n"
-		"	Timer.buildCall(this.obj, i, arguments);\n"
-		"	Timer.set[i].timer = window.setTimeout(\"Timer.callOnce(\"+i+\"));\"),msec);\n"
-		"	return i;\n"
-		"}\n"
-		"\n"
-		"// The clear functions should be called with\n"
-		"// the return value from the equivalent set function.\n"
-		"\n"
-		"Timer.prototype.clearInterval = function(i){\n"
-		"	if(!Timer.set[i]) return;\n"
-		"	window.clearInterval(Timer.set[i].timer);\n"
-		"	Timer.set[i] = null;\n"
-		"}\n"
-		"Timer.prototype.clearTimeout = function(i){\n"
-		"	if(!Timer.set[i]) return;\n"
-		"	window.clearTimeout(Timer.set[i].timer);\n"
-		"	Timer.set[i] = null;\n"
-		"}\n"
-		"\n"
-		"// Private data\n"
-		"\n"
-		"Timer.set = new Array();\n"
-		"Timer.buildCall = function(obj, i, args){\n"
-		"	var t = \"\");\n"
-		"	Timer.set[i] = new Array();\n"
-		"	if(obj != window){\n"
-		"	Timer.set[i].obj = obj;\n"
-		"	t = \"Timer.set[\"+i+\"].obj.\");\n"
-		"	}\n"
-		"	t += args[0]+\"(\");\n"
-		"	if(args.length > 2){\n"
-		"	Timer.set[i][0] = args[2];\n"
-		"	t += \"Timer.set[\"+i+\"][0]\");\n"
-		"	for(var j=1; (j+2)<args.length; j++){\n"
-		"		Timer.set[i][j] = args[j+2];\n"
-		"		t += \"), Timer.set[\"+i+\"][\"+j+\"]\");\n"
-		"	}}\n"
-		"	t += \"));\");\n"
-		"	Timer.set[i].call = t;\n"
-		"	return t;\n"
-		"}\n"
-		"Timer.callOnce = function(i){\n"
-		"	if(!Timer.set[i]) return;\n"
-		"	eval(Timer.set[i].call);\n"
-		"	Timer.set[i] = null;\n"
-		"}\n"
-		"Timer.getNew = function(){\n"
-		"	var i = 0;\n"
-		"	while(Timer.set[i]) i++;\n"
-		"	return i;\n"
-		"}\n"
-		"\n"
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_Slider(void)
-{
-	return( SG_STR_MBTOSG(
-		"//slider properties\n"
-		"function slider(x1,y1,value1,x2,y2,value2,startVal,sliderGroupId,sliderColor,visSliderWidth,invisSliderWidth,sliderSymb,functionToCall,mouseMoveBool) {\n"
-		"	this.x1 = x1;\n"
-		"	this.y1 = y1;\n"
-		"	this.value1 = value1;\n"
-		"	this.x2 = x2;\n"
-		"	this.y2 = y2;\n"
-		"	this.value2 = value2;\n"
-		"	this.startVal = startVal;\n"
-		"	this.value = startVal;\n"
-		"	this.sliderGroupId = sliderGroupId;\n"
-		"	this.sliderGroup = document.getElementById(this.sliderGroupId);\n"
-		"	this.sliderColor = sliderColor;\n"
-		"	this.visSliderWidth = visSliderWidth;\n"
-		"	this.invisSliderWidth = invisSliderWidth;\n"
-		"	this.sliderSymb = sliderSymb;\n"
-		"	this.functionToCall = functionToCall;\n"
-		"	this.mouseMoveBool = mouseMoveBool;\n"
-		"	this.length = toPolarDist((this.x2 - this.x1),(this.y2 - this.y1));\n"
-		"	this.direction = toPolarDir((this.x2 - this.x1),(this.y2 - this.y1));\n"
-		"	this.sliderLine = null;\n"
-		"	this.createSlider();\n"
-		"	this.slideStatus = 0;\n"
-		"}\n"
-		"\n"
-		"//create slider\n"
-		"slider.prototype.createSlider = function() {\n"
-		"	this.sliderLine = document.createElementNS(svgNS,\"line\"));\n"
-		"	this.sliderLine.setAttributeNS(null,\"x1\"),this.x1);\n"
-		"	this.sliderLine.setAttributeNS(null,\"y1\"),this.y1);\n"
-		"	this.sliderLine.setAttributeNS(null,\"x2\"),this.x2);\n"
-		"	this.sliderLine.setAttributeNS(null,\"y2\"),this.y2);\n"
-		"	this.sliderLine.setAttributeNS(null,\"stroke\"),this.sliderColor);\n"
-		"	this.sliderLine.setAttributeNS(null,\"stroke-width\"),this.invisSliderWidth);\n"
-		"	this.sliderLine.setAttributeNS(null,\"opacity\"),\"0\"));\n"
-		"	this.sliderLine.setAttributeNS(null,\"stroke-linecap\"),\"square\"));\n"
-		"	this.sliderLine.setAttributeNS(null,\"id\"),this.sliderGroupId+\"_invisibleSliderLine\"));\n"
-		"	this.sliderLine.addEventListener(\"mousedown\"),this,false);\n"
-		"	this.sliderGroup.appendChild(this.sliderLine);\n"
-		"	var mySliderLine = document.createElementNS(svgNS,\"line\"));\n"
-		"	mySliderLine.setAttributeNS(null,\"x1\"),this.x1);\n"
-		"	mySliderLine.setAttributeNS(null,\"y1\"),this.y1);\n"
-		"	mySliderLine.setAttributeNS(null,\"x2\"),this.x2);\n"
-		"	mySliderLine.setAttributeNS(null,\"y2\"),this.y2);\n"
-		"	mySliderLine.setAttributeNS(null,\"stroke\"),this.sliderColor);\n"
-		"	mySliderLine.setAttributeNS(null,\"stroke-width\"),this.visSliderWidth);\n"
-		"	mySliderLine.setAttributeNS(null,\"id\"),this.sliderGroupId+\"_visibleSliderLine\"));\n"
-		"	mySliderLine.setAttributeNS(null,\"pointer-events\"),\"none\"));\n"
-		"	this.sliderGroup.appendChild(mySliderLine);\n"
-		"	mySliderSymb = document.createElementNS(svgNS,\"use\"));\n"
-		"	mySliderSymb.setAttributeNS(xlinkNS,\"xlink:href\"),\"#\"+this.sliderSymb);\n"
-		"	var myStartDistance = this.length - ((this.value2 - this.startVal) / (this.value2 - this.value1)) * this.length;\n"
-		"	var myPosX = this.x1 + toRectX(this.direction,myStartDistance);\n"
-		"	var myPosY = this.y1 + toRectY(this.direction,myStartDistance);\n"
-		"	var myTransformString = \"translate(\"+myPosX+\"),\"+myPosY+\")) rotate(\" + Math.round(this.direction / Math.PI * 180) + \"))\");\n"
-		"	mySliderSymb.setAttributeNS(null,\"transform\"),myTransformString);\n"
-		"	mySliderSymb.setAttributeNS(null,\"id\"),this.sliderGroupId+\"_sliderSymbol\"));\n"
-		"	this.sliderGroup.appendChild(mySliderSymb);\n"
-		"}\n"
-		"\n"
-		"//remove all slider elements\n"
-		"slider.prototype.removeSlider = function() {\n"
-		"	var mySliderSymb = document.getElementById(this.sliderGroup+\"_sliderSymbol\"));\n"
-		"	this.sliderGroup.removeChild(mySliderSymb);\n"
-		"	var mySliderLine = document.getElementById(this.sliderGroup+\"_visibleSliderLine\"));\n"
-		"	this.sliderGroup.removeChild(mySliderLine);\n"
-		"	var mySliderLine = document.getElementById(this.sliderGroup+\"_invisibleSliderLine\"));\n"
-		"	this.sliderGroup.removeChild(mySliderLine);\n"
-		"}\n"
-		"\n"
-		"//handle events\n"
-		"slider.prototype.handleEvent = function(evt) {\n"
-		"	this.drag(evt);\n"
-		"}\n"
-		"\n"
-		"//drag slider\n"
-		"slider.prototype.drag = function(evt) {\n"
-		"	if (evt.type == \"mousedown\" || (evt.type == \"mousemove\" && this.slideStatus == 1)) {\n"
-		"	//get coordinate in slider coordinate system\n"
-		"	var coordPoint = myMapApp.calcCoord(evt,this.sliderLine);\n"
-		"	//draw normal line for first vertex\n"
-		"	var ax = this.x2 - this.x1;\n"
-		"	var ay = this.y2 - this.y1;\n"
-		"	//normal vector 1\n"
-		"	var px1 = parseFloat(this.x1) + ay * -1;\n"
-		"	var py1 = parseFloat(this.y1) + ax;\n"
-		"	//normal vector 2\n"
-		"	var px2 = parseFloat(this.x2) + ay * -1;\n"
-		"	var py2 = parseFloat(this.y2) + ax;\n"
-		"		\n"
-		"	if (leftOfTest(coordPoint.x,coordPoint.y,this.x1,this.y1,px1,py1) == 0 && leftOfTest(coordPoint.x,coordPoint.y,this.x2,this.y2,px2,py2) == 1) {\n"
-		"		if (evt.type == \"mousedown\" && evt.detail == 1) {\n"
-		"		this.slideStatus = 1;\n"
-		"		document.documentElement.addEventListener(\"mousemove\"),this,false);\n"
-		"		document.documentElement.addEventListener(\"mouseup\"),this,false);\n"
-		"		}\n"
-		"		myNewPos = intersect2lines(this.x1,this.y1,this.x2,this.y2,coordPoint.x,coordPoint.y,coordPoint.x + ay * -1,coordPoint.y + ax);\n"
-		"		var myPercentage = toPolarDist(myNewPos['x'] - this.x1,myNewPos['y'] - this.y1) / this.length;\n"
-		"		this.value = this.value1 + myPercentage * (this.value2 - this.value1);\n"
-		"	}\n"
-		"	else {\n"
-		"		var myNewPos = new Array();\n"
-		"		if (leftOfTest(coordPoint.x,coordPoint.y,this.x1,this.y1,px1,py1) == 0 && leftOfTest(coordPoint.x,coordPoint.y,this.x2,this.y2,px2,py2) == 0) {\n"
-		"		//more than max\n"
-		"		this.value = this.value2;\n"
-		"		myNewPos['x'] = this.x2;\n"
-		"		myNewPos['y'] = this.y2;\n"
-		"		}\n"
-		"		if (leftOfTest(coordPoint.x,coordPoint.y,this.x1,this.y1,px1,py1) == 1 && leftOfTest(coordPoint.x,coordPoint.y,this.x2,this.y2,px2,py2) == 1) {\n"
-		"		//less than min\n"
-		"		this.value = this.value1;\n"
-		"		myNewPos['x'] = this.x1;\n"
-		"		myNewPos['y'] = this.y1;\n"
-		"		}\n"
-		"	}\n"
-		"	var myTransformString = \"translate(\"+myNewPos['x']+\"),\"+myNewPos['y']+\")) rotate(\" + Math.round(this.direction / Math.PI * 180) + \"))\");\n"
-		"	document.getElementById(this.sliderGroupId+\"_sliderSymbol\")).setAttributeNS(null,\"transform\"),myTransformString);\n"
-		"	this.getValue();\n"
-		"	}\n"
-		"	if (evt.type == \"mouseup\" && evt.detail == 1) {\n"
-		"	if (this.slideStatus == 1) {\n"
-		"		this.slideStatus = 2;\n"
-		"		document.documentElement.removeEventListener(\"mousemove\"),this,false);\n"
-		"		document.documentElement.removeEventListener(\"mouseup\"),this,false);\n"
-		"		this.getValue();\n"
-		"	}\n"
-		"	this.slideStatus = 0;\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//this code is executed, after the slider is released\n"
-		"//you can use switch/if to detect which slider was used (use this.sliderGroup) for that\n"
-		"slider.prototype.getValue = function() {\n"
-		"	if (this.slideStatus == 1 && this.mouseMoveBool == true) {\n"
-		"	if (typeof(this.functionToCall) == \"function\")) {\n"
-		"		this.functionToCall(\"change\"),this.sliderGroupId,this.value);\n"
-		"	}\n"
-		"	if (typeof(this.functionToCall) == \"object\")) {\n"
-		"		this.functionToCall.getSliderVal(\"change\"),this.sliderGroupId,this.value);\n"
-		"	}\n"
-		"	if (typeof(this.functionToCall) == \"string\")) {\n"
-		"		eval(this.functionToCall+\"('change','\"+this.sliderGroupId+\"',\"+this.value+\"))\"));\n"
-		"	}\n"
-		"	}\n"
-		"	if (this.slideStatus == 2) {\n"
-		"	if (typeof(this.functionToCall) == \"function\")) {\n"
-		"		this.functionToCall(\"release\"),this.sliderGroupId,this.value);\n"
-		"	}\n"
-		"	if (typeof(this.functionToCall) == \"object\")) {\n"
-		"		this.functionToCall.getSliderVal(\"release\"),this.sliderGroupId,this.value);\n"
-		"	}\n"
-		"	if (typeof(this.functionToCall) == \"string\")) {\n"
-		"		eval(this.functionToCall+\"('release','\"+this.sliderGroupId+\"',\"+this.value+\"))\"));\n"
-		"	}\n"
-		"	}\n"
-		"}	\n"
-		"\n"
-		"//this is to set the value from other scripts\n"
-		"slider.prototype.setValue = function(value) {\n"
-		"	var myPercAlLine = (value - this.value1) / (this.value2 - this.value1);\n"
-		"	this.value = myPercAlLine;\n"
-		"	var myPosX = this.x1 + toRectX(this.direction,this.length * myPercAlLine);\n"
-		"	var myPosY = this.y1 + toRectY(this.direction,this.length * myPercAlLine);\n"
-		"	var myTransformString = \"translate(\"+myPosX+\"),\"+myPosY+\")) rotate(\" + Math.round(this.direction / Math.PI * 180) + \"))\");\n"
-		"	document.getElementById(this.sliderGroupId+\"_sliderSymbol\")).setAttributeNS(null,\"transform\"),myTransformString);\n"
-		"}\n"
-		"\n"
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_Helper(void)
-{
-	return( SG_STR_MBTOSG(
-		"/*\n"
-		"ECMAScript helper functions\n"
-		"Copyright (C) <2004>	<Andreas Neumann>\n"
-		"Version 1.1, 2004-11-18\n"
-		"neumann at karto.baug.ethz.ch\n"
-		"http://www.carto.net/\n"
-		"http://www.carto.net/neumann/\n"
-		"\n"
-		"Credits: numerous people on svgdevelopers at yahoogroups.com\n"
-		"\n"
-		"This ECMA script library is free software; you can redistribute it and/or\n"
-		"modify it under the terms of the GNU Lesser General Public\n"
-		"License as published by the Free Software Foundation; either\n"
-		"version 2.1 of the License, or (at your option) any later version.\n"
-		"\n"
-		"This library is distributed in the hope that it will be useful,\n"
-		"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-		"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the GNU\n"
-		"Lesser General Public License for more details.\n"
-		"\n"
-		"You should have received a copy of the GNU Lesser General Public\n"
-		"License along with this library (http://www.carto.net/papers/svg/resources/lesser_gpl.txt); if not, write to the Free Software\n"
-		"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA	02111-1307	USA\n"
-		"\n"
-		"----\n"
-		"\n"
-		"original document site: http://www.carto.net/papers/svg/resources/helper_functions.js\n"
-		"Please contact the author in case you want to use code or ideas commercially.\n"
-		"If you use this code, please include this copyright header, the included full\n"
-		"LGPL 2.1 text and read the terms provided in the LGPL 2.1 license\n"
-		"(http://www.gnu.org/copyleft/lesser.txt)\n"
-		"\n"
-		"-------------------------------\n"
-		"\n"
-		"Please report bugs and send improvements to neumann at karto.baug.ethz.ch\n"
-		"If you use these scripts, please link to the original (http://www.carto.net/papers/svg/navigationTools/)\n"
-		"somewhere in the source-code-comment or the \"about\" of your project and give credits, thanks!\n"
-		"\n"
-		"*/\n"
-		"\n"
-		"//global variables necessary to create elements in these namespaces, do not delete them!!!!\n"
-		"var svgNS = \"http://www.w3.org/2000/svg\");\n"
-		"var xlinkNS = \"http://www.w3.org/1999/xlink\");\n"
-		"var cartoNS = \"http://www.carto.net/attrib\");\n"
-		"var attribNS = \"http://www.carto.net/attrib\");\n"
-		"var batikNS = \"http://xml.apache.org/batik/ext\");\n"
-		"\n"
-		"/* ----------------------- helper functions to calculate stuff ---------------- */\n"
-		"/* ---------------------------------------------------------------------------- */\n"
-		"function toPolarDir(xdiff,ydiff) { // Subroutine for calculating polar Coordinates\n"
-		"	direction = (Math.atan2(ydiff,xdiff));\n"
-		"	//result is angle in radian\n"
-		"	return(direction);\n"
-		"}\n"
-		"\n"
-		"function toPolarDist(xdiff,ydiff) { // Subroutine for calculating polar Coordinates\n"
-		"	distance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n"
-		"	return(distance);\n"
-		"}\n"
-		"\n"
-		"function toRectX(direction,distance) { // Subroutine for calculating cartesic coordinates\n"
-		"	x = distance * Math.cos(direction);\n"
-		"	y = distance * Math.sin(direction);\n"
-		"	return(x);\n"
-		"}\n"
-		"\n"
-		"function toRectY(direction,distance) { // Subroutine for calculating cartesic coordinates\n"
-		"	x = distance * Math.cos(direction);\n"
-		"	y = distance * Math.sin(direction);\n"
-		"	return(y);\n"
-		"}\n"
-		"\n"
-		"//Converts degrees to radians.\n"
-		"function DegToRad(deg) {\n"
-		"	return (deg / 180.0 * Math.PI);\n"
-		"}\n"
-		"\n"
-		"//Converts radians to degrees.\n"
-		"function RadToDeg(rad) {\n"
-		"	return (rad / Math.PI * 180.0);\n"
-		"}\n"
-		"\n"
-		"//converts decimal degrees to degree/minutes/seconds\n"
-		"function dd2dms(dd) {\n"
-		"	var minutes = (dd - Math.floor(dd)) * 60;\n"
-		"	var seconds = (minutes - Math.floor(minutes)) * 60;\n"
-		"	var minutes = Math.floor(minutes);\n"
-		"	var degrees = Math.floor(dd);\n"
-		"	return {deg:degrees,min:minutes,sec:seconds};\n"
-		"}\n"
-		"\n"
-		"//converts degree/minutes/seconds to decimal degrees\n"
-		"function dms2dd(deg,min,sec) {\n"
-		"	return deg + (min / 60) + (sec / 3600);\n"
-		"}\n"
-		"\n"
-		"//log functions that do not exist in Math object\n"
-		"function log(x,b) {\n"
-		"	if(b==null) b=Math.E;\n"
-		"	return Math.log(x)/Math.log(b);\n"
-		"}\n"
-		"\n"
-		"//gets 4 z-values (4 corners), a position, delta x and delty and a cellsize as input and returns interpolated z-value\n"
-		"function intBilinear(za,zb,zc,zd,xpos,ypos,ax,ay,cellsize) { //bilinear interpolation function\n"
-		"	e = (xpos - ax) / cellsize;\n"
-		"	f = (ypos - ay) / cellsize;\n"
-		"\n"
-		"	//calculation of weights\n"
-		"	wa = (1 - e) * (1 - f);\n"
-		"	wb = e * (1 - f);\n"
-		"	wc = e * f;\n"
-		"	wd = f * (1 - e);\n"
-		"\n"
-		"	height_interpol = wa * zc + wb * zd + wc * za + wd * zb;\n"
-		"\n"
-		"	return (height_interpol);	\n"
-		"}\n"
-		"\n"
-		"//test if point is left of or right of, result is 1 (leftof) or 0 (rightof)\n"
-		"function leftOfTest(pointx,pointy,linex1,liney1,linex2,liney2) {\n"
-		"	result = (liney1 - pointy) * (linex2 - linex1) - (linex1 - pointx) * (liney2 - liney1);\n"
-		"	if (result < 0) {\n"
-		"	leftof = 1; //case left of\n"
-		"	}\n"
-		"	else {\n"
-		"	leftof = 0; //case left of	\n"
-		"	}\n"
-		"	return(leftof);\n"
-		"}\n"
-		"\n"
-		"//input is point coordinate, and 2 line coordinates\n"
-		"function distFromLine(xpoint,ypoint,linex1,liney1,linex2,liney2) {\n"
-		"	dx = linex2 - linex1;\n"
-		"	dy = liney2 - liney1;\n"
-		"	distance = (dy * (xpoint - linex1) - dx * (ypoint - liney1)) / Math.sqrt(Math.pow(dx,2) + Math.pow(dy,2));\n"
-		"	return(distance);\n"
-		"}\n"
-		"\n"
-		"//converts radian value to degrees\n"
-		"function radian2deg(radian) {\n"
-		"	deg = radian / Math.PI * 180;\n"
-		"	return(deg);\n"
-		"}\n"
-		"\n"
-		"//input is two vectors (a1,a2 is vector a, b1,b2 is vector b), output is angle in radian\n"
-		"//Formula: Acos from	Scalaproduct of the two vectors divided by ( norm (deutsch Betrag) vector 1 by norm vector 2\n"
-		"//see http://www.mathe-online.at/mathint/vect2/i.html#Winkel\n"
-		"function angleBetwTwoLines(a1,a2,b1,b2) {\n"
-		"	angle = Math.acos((a1 * b1 + a2 * b2) / (Math.sqrt(Math.pow(a1,2) + Math.pow(a2,2)) * Math.sqrt(Math.pow(b1,2) + Math.pow(b2,2))));\n"
-		"	return(angle);\n"
-		"}\n"
-		"\n"
-		"//input is two vectors (a1,a2 is vector a, b1,b2 is vector b), output is new vector c2 returned as array\n"
-		"//Formula: Vektor a divided by Norm Vector a (Betrag) plus Vektor b divided by Norm Vector b (Betrag)\n"
-		"//see http://www.mathe-online.at/mathint/vect1/i.html#Winkelsymmetrale\n"
-		"function calcBisectorVector(a1,a2,b1,b2) {\n"
-		"	betraga = Math.sqrt(Math.pow(a1,2) + Math.pow(a2,2));\n"
-		"	betragb = Math.sqrt(Math.pow(b1,2) + Math.pow(b2,2));\n"
-		"	c = new Array();\n"
-		"	c[0] = a1 / betraga + b1 / betragb;\n"
-		"	c[1] = a2 / betraga + b2 / betragb;\n"
-		"	return(c);\n"
-		"}\n"
-		"\n"
-		"//input is two vectors (a1,a2 is vector a, b1,b2 is vector b), output is angle in radian\n"
-		"//Formula: Vektor a divided by Norm Vector a (Betrag) plus Vektor b divided by Norm Vector b (Betrag)\n"
-		"//see http://www.mathe-online.at/mathint/vect1/i.html#Winkelsymmetrale\n"
-		"function calcBisectorAngle(a1,a2,b1,b2) {\n"
-		"	betraga = Math.sqrt(Math.pow(a1,2) + Math.pow(a2,2));\n"
-		"	betragb = Math.sqrt(Math.pow(b1,2) + Math.pow(b2,2));\n"
-		"	c1 = a1 / betraga + b1 / betragb;\n"
-		"	c2 = a2 / betraga + b2 / betragb;\n"
-		"	angle = toPolarDir(c1,c2);\n"
-		"	return(angle);\n"
-		"}\n"
-		"\n"
-		"function intersect2lines(line1x1,line1y1,line1x2,line1y2,line2x1,line2y1,line2x2,line2y2) {\n"
-		"	//formula see http://astronomy.swin.edu.au/~pbourke/geometry/lineline2d/\n"
-		"	var result = new Array();\n"
-		"	var denominator = (line2y2 - line2y1)*(line1x2 - line1x1) - (line2x2 - line2x1)*(line1y2 - line1y1);\n"
-		"	if (denominator == 0) {\n"
-		"	alert(\"lines are parallel\"));\n"
-		"	}\n"
-		"	else {\n"
-		"	ua = ((line2x2 - line2x1)*(line1y1 - line2y1) - (line2y2 - line2y1)*(line1x1 - line2x1)) / denominator;\n"
-		"	ub = ((line1x2 - line1x1)*(line1y1 - line2y1) - (line1y2 - line1y1)*(line1x1 - line2x1)) / denominator;\n"
-		"	}\n"
-		"	result[\"x\"] = line1x1 + ua * (line1x2 - line1x1);\n"
-		"	result[\"y\"] = line1y1 + ua * (line1y2 - line1y1);\n"
-		"	return(result);\n"
-		"}\n"
-		"\n"
-		"/* ----------------------- helper function to sort arrays ---------------- */\n"
-		"/* ----------------------------------------------------------------------- */\n"
-		"//my own sort function, uses only first part of string (population value)\n"
-		"function mySort(a,b) {\n"
-		"	var myResulta = a.split(\"+\"));\n"
-		"	var myResultb = b.split(\"+\"));\n"
-		"	if (parseFloat(myResulta[0]) < parseFloat(myResultb[0])) {\n"
-		"	return 1;\n"
-		"	}\n"
-		"	else {\n"
-		"	return -1;\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"/* ----------------------- helper function format number strings -------------- */\n"
-		"/* ---------------------------------------------------------------------------- */\n"
-		"//formatting number strings\n"
-		"//this function add's \"'\" to a number every third digit\n"
-		"function formatNumberString(myString) {\n"
-		"	//check if of type string, if number, convert it to string\n"
-		"	if (typeof(myString) == \"number\")) {\n"
-		"	myTempString = myString.toString();\n"
-		"	}\n"
-		"	else {\n"
-		"	myTempString = myString;\n"
-		"	}\n"
-		"	var myNewString=\"\");\n"
-		"	//if it contains a comma, it will be split\n"
-		"	var splitResults = myTempString.split(\".\"));\n"
-		"	var myCounter= splitResults[0].length;\n"
-		"	if (myCounter > 3) {\n"
-		"	while(myCounter > 0) {\n"
-		"		if (myCounter > 3) {\n"
-		"		myNewString = \"),\" + splitResults[0].substr(myCounter - 3,3) + myNewString;\n"
-		"		}\n"
-		"		else {\n"
-		"		myNewString = splitResults[0].substr(0,myCounter) + myNewString;\n"
-		"		}\n"
-		"		myCounter -= 3;\n"
-		"	}\n"
-		"	}\n"
-		"	else {\n"
-		"	myNewString = splitResults[0];\n"
-		"	}\n"
-		"	//concatenate if it contains a comma\n"
-		"	if (splitResults[1]) {\n"
-		"	myNewString = myNewString + \".\" + splitResults[1];\n"
-		"	}\n"
-		"	return myNewString;\n"
-		"}\n"
-		"\n"
-		"//function for status Bar\n"
-		"function statusChange(statusText) {\n"
-		"	document.getElementById(\"statusText\")).firstChild.nodeValue = \"Statusbar: \" + statusText;\n"
-		"}\n"
-		"\n"
-		"//scale an object\n"
-		"function scaleObject(evt,factor) {\n"
-		"//reference to the currently selected object\n"
-		"	var element = evt.currentTarget;\n"
-		"	var myX = element.getAttributeNS(null,\"x\"));\n"
-		"	var myY = element.getAttributeNS(null,\"y\"));\n"
-		"	var newtransform = \"scale(\" + factor + \")) translate(\" + (myX * 1 / factor - myX) + \" \" + (myY * 1 / factor - myY) +\"))\");\n"
-		"	element.setAttributeNS(null,'transform', newtransform);\n"
-		"}\n"
-		"\n"
-		"//this code is copied from Kevin Lindsey\n"
-		"//http://www.kevlindev.com/tutorials/basics/transformations/toUserSpace/index.htm\n"
-		"function getTransformToRootElement(node) {\n"
-		"	try {\n"
-		"	//this part is for fully conformant players\n"
-		"	var CTM = node.getTransformToElement(document.documentElement);\n"
-		"	}\n"
-		"	catch (ex) {\n"
-		"	//this part is for ASV3 or other non-conformant players\n"
-		"	// Initialize our CTM the node's Current Transformation Matrix\n"
-		"	var CTM = node.getCTM();\n"
-		"	// Work our way through the ancestor nodes stopping at the SVG Document\n"
-		"	while ( ( node = node.parentNode ) != document ) {\n"
-		"		// Multiply the new CTM to the one with what we have accumulated so far\n"
-		"		CTM = node.getCTM().multiply(CTM);\n"
-		"	}\n"
-		"	}\n"
-		"	return CTM;\n"
-		"}\n"
-		"\n"
-		"//calculate HSV 2 RGB: HSV (h 0 to 360, sat and val are between 0 and 1), RGB between 0 and 255\n"
-		"function hsv2rgb(hue,sat,val) {\n"
-		"	//alert(\"Hue:\"+hue);\n"
-		"	var rgbArr = new Array();\n"
-		"	if ( sat == 0) {\n"
-		"	rgbArr[\"red\"] = Math.round(val * 255);\n"
-		"	rgbArr[\"green\"] = Math.round(val * 255);\n"
-		"	rgbArr[\"blue\"] = Math.round(val * 255);\n"
-		"	}\n"
-		"	else {\n"
-		"	var h = hue / 60;\n"
-		"	var i = Math.floor(h);\n"
-		"	var f = h - i;\n"
-		"	if (i % 2 == 0) {\n"
-		"		f = 1 - f;\n"
-		"	}\n"
-		"	var m = val * (1 - sat); \n"
-		"	var n = val * (1 - sat * f);\n"
-		"	switch(i) {\n"
-		"		case 0:\n"
-		"		rgbArr[\"red\"] = val;\n"
-		"		rgbArr[\"green\"] = n;\n"
-		"		rgbArr[\"blue\"] = m;\n"
-		"		break;\n"
-		"		case 1:\n"
-		"		rgbArr[\"red\"] = n;\n"
-		"		rgbArr[\"green\"] = val;\n"
-		"		rgbArr[\"blue\"] = m;\n"
-		"		break;\n"
-		"		case 2:\n"
-		"		rgbArr[\"red\"] = m;\n"
-		"		rgbArr[\"green\"] = val;\n"
-		"		rgbArr[\"blue\"] = n;\n"
-		"		break;\n"
-		"		case 3:\n"
-		"		rgbArr[\"red\"] = m;\n"
-		"		rgbArr[\"green\"] = n;\n"
-		"		rgbArr[\"blue\"] = val;\n"
-		"		break;\n"
-		"		case 4:\n"
-		"		rgbArr[\"red\"] = n;\n"
-		"		rgbArr[\"green\"] = m;\n"
-		"		rgbArr[\"blue\"] = val;\n"
-		"		break;\n"
-		"		case 5:\n"
-		"		rgbArr[\"red\"] = val;\n"
-		"		rgbArr[\"green\"] = m;\n"
-		"		rgbArr[\"blue\"] = n;\n"
-		"		break;\n"
-		"		case 6:\n"
-		"		rgbArr[\"red\"] = val;\n"
-		"		rgbArr[\"green\"] = n;\n"
-		"		rgbArr[\"blue\"] = m;\n"
-		"		break;\n"
-		"	}\n"
-		"	rgbArr[\"red\"] = Math.round(rgbArr[\"red\"] * 255);\n"
-		"	rgbArr[\"green\"] = Math.round(rgbArr[\"green\"] * 255);\n"
-		"	rgbArr[\"blue\"] = Math.round(rgbArr[\"blue\"] * 255);\n"
-		"	}\n"
-		"	return rgbArr;\n"
-		"}\n"
-		"\n"
-		"//calculate rgb to hsv values\n"
-		"function rgb2hsv (red,green,blue) {\n"
-		"	//input between 0 and 255 --> normalize to 0 to 1\n"
-		"	//result = \n"
-		"	var hsvArr = new Array();\n"
-		"	red = red / 255;\n"
-		"	green = green / 255;\n"
-		"	blue = blue / 255;\n"
-		"	myMax = Math.max(red, Math.max(green,blue));\n"
-		"	myMin = Math.min(red, Math.min(green,blue));\n"
-		"	v = myMax;\n"
-		"	if (myMax > 0) {\n"
-		"	s = (myMax - myMin) / myMax;\n"
-		"	}\n"
-		"	else {\n"
-		"	s = 0;\n"
-		"	}\n"
-		"	if (s > 0) {\n"
-		"	myDiff = myMax - myMin;\n"
-		"	rc = (myMax - red) / myDiff;\n"
-		"	gc = (myMax - green) / myDiff;\n"
-		"	bc = (myMax - blue) / myDiff;\n"
-		"	if (red == myMax) {\n"
-		"		h = (bc - gc) / 6;\n"
-		"	}\n"
-		"	if (green == myMax) {\n"
-		"		h = (2 + rc - bc) / 6;\n"
-		"	}\n"
-		"	if (blue == myMax) {\n"
-		"		h = (4 + gc - rc) / 6;\n"
-		"	}\n"
-		"	}\n"
-		"	else {\n"
-		"	h = 0;\n"
-		"	}\n"
-		"	if (h < 0) {\n"
-		"	h += 1;\n"
-		"	}\n"
-		"	hsvArr[\"hue\"] = Math.round(h * 360);\n"
-		"	hsvArr[\"sat\"] = s;\n"
-		"	hsvArr[\"val\"] = v;\n"
-		"	return hsvArr;\n"
-		"}\n"
-		"\n"
-		"//populate an array that can be addressed by both a key or an index nr\n"
-		"function assArrayPopulate(arrayKeys,arrayValues) {\n"
-		"	var returnArray = new Array();\n"
-		"	if (arrayKeys.length != arrayValues.length) {\n"
-		"	alert(\"error: arrays do not have same length!\"));\n"
-		"	}\n"
-		"	else {\n"
-		"	for (i=0;i<arrayKeys.length;i++) {\n"
-		"		returnArray[arrayKeys[i]] = arrayValues[i];\n"
-		"	}\n"
-		"	}\n"
-		"	return returnArray;\n"
-		"}\n"
-		"\n"
-		"//replace special (non-ASCII) characters with their charCode\n"
-		"function replaceSpecialChars(myString) {\n"
-		"	for (i=161;i<256;i++) {\n"
-		"		re = new RegExp(\"&#\"+i+\");\"),\"g\"));\n"
-		"		myString = myString.replace(re,String.fromCharCode(i));\n"
-		"	}\n"
-		"	return myString;\n"
-		"}\n"
-		"\n"
-		"/* ----------------------- getXMLData object ----------------------------- */\n"
-		"/* ----------------------------------------------------------------------- */\n"
-		"//this object allows to make network requests using getURL or XMLHttpRequest\n"
-		"//you may specify a url and a callBackFunction\n"
-		"//the callBackFunction receives a XML node representing the rootElement of the fragment received\n"
-		"function getXMLData(url,callBackFunction) {\n"
-		"	this.url = url;\n"
-		"	this.callBackFunction = callBackFunction;\n"
-		"	this.xmlRequest = null;\n"
-		"} \n"
-		"\n"
-		"getXMLData.prototype.getData = function() {\n"
-		"	//call getURL() if available\n"
-		"	if (window.getURL) {\n"
-		"	getURL(this.url,this);\n"
-		"	}\n"
-		"	//or call XMLHttpRequest() if available\n"
-		"	else if (window.XMLHttpRequest) {\n"
-		"	this.xmlRequest = new XMLHttpRequest();\n"
-		"	this.xmlRequest.overrideMimeType(\"text/xml\"));\n"
-		"	this.xmlRequest.open(\"GET\"),this.url,true);\n"
-		"	this.xmlRequest.onreadystatechange = this;\n"
-		"	this.xmlRequest.send(null);\n"
-		"	}\n"
-		"	//write an error message if neither method is available\n"
-		"	else {\n"
-		"	alert(\"your browser/svg viewer neither supports window.getURL nor window.XMLHttpRequest!\"));\n"
-		"	}	\n"
-		"}\n"
-		"\n"
-		"//this is the callback method for the getURL function\n"
-		"getXMLData.prototype.operationComplete = function(data) {\n"
-		"	//check if data has a success property\n"
-		"	if (data.success) {\n"
-		"	//parse content of the XML format to the variable \"node\"\n"
-		"	var node = parseXML(data.content,document);\n"
-		"	this.callBackFunction(node.firstChild);\n"
-		"	}\n"
-		"	else {\n"
-		"	alert(\"something went wrong with dynamic loading of geometry!\"));\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//this method receives data from XMLHttpRequest\n"
-		"getXMLData.prototype.handleEvent = function() {\n"
-		"	if (this.xmlRequest.readyState == 4) {\n"
-		"	this.callBackFunction(this.xmlRequest.responseXML.documentElement);\n"
-		"	}	\n"
-		"}\n"
-		"\n"
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_Buttons(void)
-{
-	return( SG_STR_MBTOSG(
-		"function button(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset) {\n"
-		"	if (arguments.length > 0) {\n"
-		"	this.init(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset);\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"button.prototype.init = function(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset) {\n"
-		"	this.groupId = groupId; //the group id where all new content is appended to\n"
-		"	this.functionToCall = functionToCall; //function to be called if button was pressed\n"
-		"	this.buttonType = buttonType; //button type: currently either \"rect\" or \"ellipse\"\n"
-		"	this.buttonText = buttonText; //default value to be filled in when textbox is created\n"
-		"	this.buttonSymbolId = buttonSymbolId; //id to a symbol to be used as a button graphics\n"
-		"	this.x = x; //left of button rectangle\n"
-		"	this.y = y; //top of button rectangle\n"
-		"	this.width = width; //button rectangle width\n"
-		"	this.height = height; //button rectangle height\n"
-		"	this.fontSize = fontSize; //font size in user units/pixels\n"
-		"	this.fontFamily = fontFamily; //font family for text element, can be an empty string for image buttons\n"
-		"	this.textFill = textFill; //the fill color of the text for text buttons, can be an empty string for image buttons\n"
-		"	this.buttonFill = buttonFill; //the fill color of the button rectangle or ellipse\n"
-		"	this.shadeLightFill = shadeLightFill; //light fill color simulating 3d effect\n"
-		"	this.shadeDarkFill = shadeDarkFill; //dark fill color simulating 3d effect\n"
-		"	this.shadowOffset = shadowOffset; //shadow offset in viewBox units\n"
-		"	this.buttonGroup = document.getElementById(this.groupId); //reference to the button group node\n"
-		"	this.upperLeftLine = null; //later a reference to the upper left line simulating 3d effect\n"
-		"	this.buttonRect = null; //later a reference to the button area (rect)\n"
-		"	this.buttonTextElement = null; //later a reference to the button text\n"
-		"	this.buttonSymbolInstance = null; //later a reference to the button symbol\n"
-		"	this.deActivateRect = null; //later a reference to a rectangle that can be used to deactivate the button\n"
-		"	this.activated = true; //a property indicating if button is activated or not\n"
-		"	this.lowerRightLine = null; //later a reference to the lower right line simulating 3d effect\n"
-		"	this.createButton(); //method to initialize button\n"
-		"	this.timer = new Timer(this); //a Timer instance for calling the functionToCall\n"
-		"	this.timerMs = 200; //a constant of this object that is used in conjunction with the timer - functionToCall is called after 200 ms\n"
-		"}\n"
-		"\n"
-		"//create button\n"
-		"button.prototype.createButton = function() {\n"
-		"	//create upper left button line or ellipse\n"
-		"	if (this.buttonType == \"rect\")) {\n"
-		"	this.upperLeftShadow = document.createElementNS(svgNS,\"rect\"));\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"x\"),this.x - this.shadowOffset);\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"y\"),this.y - this.shadowOffset);\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"width\"),this.width);\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"height\"),this.height);\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"points\"),this.x+\"),\"+(this.y+this.height)+\" \"+this.x+\"),\"+this.y+\" \"+(this.x+this.width)+\"),\"+this.y);\n"
-		"	}\n"
-		"	else if (this.buttonType == \"ellipse\")) {\n"
-		"	this.upperLeftShadow = document.createElementNS(svgNS,\"ellipse\"));\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"cx\"),this.x + this.width * 0.5 - this.shadowOffset);\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"cy\"),this.y + this.height * 0.5 - this.shadowOffset);\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"rx\"),this.width * 0.5);\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"ry\"),this.height * 0.5);\n"
-		"	}\n"
-		"	else {\n"
-		"	alert(\"buttonType '\"+this.buttonType+\"' not supported. You need to specify 'rect' or 'ellipse'\"));\n"
-		"	}\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"fill\"),this.shadeLightFill);\n"
-		"	this.buttonGroup.appendChild(this.upperLeftShadow);\n"
-		"\n"
-		"	//create lower right button line or ellipse\n"
-		"	if (this.buttonType == \"rect\")) {\n"
-		"	this.lowerRightShadow = document.createElementNS(svgNS,\"rect\"));\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"x\"),this.x + this.shadowOffset);\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"y\"),this.y + this.shadowOffset);\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"width\"),this.width);\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"height\"),this.height);\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"points\"),this.x+\"),\"+(this.y+this.height)+\" \"+this.x+\"),\"+this.y+\" \"+(this.x+this.width)+\"),\"+this.y);\n"
-		"	}\n"
-		"	else if (this.buttonType == \"ellipse\")) {\n"
-		"	this.lowerRightShadow = document.createElementNS(svgNS,\"ellipse\"));\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"cx\"),this.x + this.width * 0.5 + this.shadowOffset);\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"cy\"),this.y + this.height * 0.5 + this.shadowOffset);\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"rx\"),this.width * 0.5);\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"ry\"),this.height * 0.5);\n"
-		"	}\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"fill\"),this.shadeDarkFill);\n"
-		"	this.buttonGroup.appendChild(this.lowerRightShadow);\n"
-		"\n"
-		"	//create buttonRect\n"
-		"	if (this.buttonType == \"rect\")) {\n"
-		"	this.buttonRect = document.createElementNS(svgNS,\"rect\"));\n"
-		"	this.buttonRect.setAttributeNS(null,\"x\"),this.x);\n"
-		"	this.buttonRect.setAttributeNS(null,\"y\"),this.y);\n"
-		"	this.buttonRect.setAttributeNS(null,\"width\"),this.width);\n"
-		"	this.buttonRect.setAttributeNS(null,\"height\"),this.height);\n"
-		"	}\n"
-		"	else if (this.buttonType == \"ellipse\")) {\n"
-		"	this.buttonRect = document.createElementNS(svgNS,\"ellipse\"));\n"
-		"	this.buttonRect.setAttributeNS(null,\"cx\"),this.x + this.width * 0.5);\n"
-		"	this.buttonRect.setAttributeNS(null,\"cy\"),this.y + this.height * 0.5);\n"
-		"	this.buttonRect.setAttributeNS(null,\"rx\"),this.width * 0.5);\n"
-		"	this.buttonRect.setAttributeNS(null,\"ry\"),this.height * 0.5);\n"
-		"	}\n"
-		"	this.buttonRect.setAttributeNS(null,\"fill\"),this.buttonFill);\n"
-		"	this.buttonRect.setAttributeNS(null,\"cursor\"),\"pointer\"));\n"
-		"	this.buttonRect.addEventListener(\"mousedown\"),this,false);\n"
-		"	this.buttonRect.addEventListener(\"mouseup\"),this,false);\n"
-		"	this.buttonRect.addEventListener(\"click\"),this,false);\n"
-		"	this.buttonGroup.appendChild(this.buttonRect);\n"
-		"	\n"
-		"	if (this.buttonText != undefined) {\n"
-		"	//create text element and add clipping path attribute\n"
-		"	this.buttonTextElement = document.createElementNS(svgNS,\"text\"));\n"
-		"	this.buttonTextElement.setAttributeNS(null,\"x\"),(this.x + this.width / 2));\n"
-		"	this.buttonTextElement.setAttributeNS(null,\"y\"),(this.y + this.height - ((this.height - this.fontSize) / 1.75)));\n"
-		"	this.buttonTextElement.setAttributeNS(null,\"fill\"),this.textFill);\n"
-		"	this.buttonTextElement.setAttributeNS(null,\"font-family\"),this.fontFamily);\n"
-		"	this.buttonTextElement.setAttributeNS(null,\"font-size\"),this.fontSize+\"px\"));\n"
-		"	this.buttonTextElement.setAttributeNS(null,\"pointer-events\"),\"none\"));\n"
-		"	this.buttonTextElement.setAttributeNS(null,\"text-anchor\"),\"middle\"));\n"
-		"	this.buttonTextElement.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\"),\"space\"),\"preserve\"));\n"
-		"	var textboxTextContent = document.createTextNode(this.buttonText);\n"
-		"	this.buttonTextElement.appendChild(textboxTextContent);\n"
-		"	this.buttonGroup.appendChild(this.buttonTextElement);\n"
-		"	}\n"
-		"	\n"
-		"	if (this.buttonSymbolId != undefined) {\n"
-		"	this.buttonSymbolInstance = document.createElementNS(svgNS,\"use\"));\n"
-		"	this.buttonSymbolInstance.setAttributeNS(null,\"x\"),(this.x + this.width / 2));\n"
-		"	this.buttonSymbolInstance.setAttributeNS(null,\"y\"),(this.y + this.height / 2));\n"
-		"	this.buttonSymbolInstance.setAttributeNS(xlinkNS,\"href\"),\"#\"+this.buttonSymbolId);\n"
-		"	this.buttonSymbolInstance.setAttributeNS(null,\"pointer-events\"),\"none\"));\n"
-		"	this.buttonGroup.appendChild(this.buttonSymbolInstance);\n"
-		"	}\n"
-		"	\n"
-		"	//create rectangle to deactivate the button\n"
-		"	if (this.buttonType == \"rect\")) {\n"
-		"	this.deActivateRect = document.createElementNS(svgNS,\"rect\"));\n"
-		"	this.deActivateRect.setAttributeNS(null,\"x\"),this.x - this.shadowOffset);\n"
-		"	this.deActivateRect.setAttributeNS(null,\"y\"),this.y - this.shadowOffset);\n"
-		"	this.deActivateRect.setAttributeNS(null,\"width\"),this.width + this.shadowOffset * 2);\n"
-		"	this.deActivateRect.setAttributeNS(null,\"height\"),this.height + this.shadowOffset * 2);\n"
-		"	}\n"
-		"	else if (this.buttonType == \"ellipse\")) {\n"
-		"	this.deActivateRect = document.createElementNS(svgNS,\"ellipse\"));\n"
-		"	this.deActivateRect.setAttributeNS(null,\"cx\"),this.x + this.width * 0.5);\n"
-		"	this.deActivateRect.setAttributeNS(null,\"cy\"),this.y + this.height * 0.5);\n"
-		"	this.deActivateRect.setAttributeNS(null,\"rx\"),this.width * 0.5 + this.shadowOffset);\n"
-		"	this.deActivateRect.setAttributeNS(null,\"ry\"),this.height * 0.5 + this.shadowOffset);\n"
-		"	}\n"
-		"	\n"
-		"	this.deActivateRect.setAttributeNS(null,\"fill\"),\"white\"));\n"
-		"	this.deActivateRect.setAttributeNS(null,\"fill-opacity\"),\"0.5\"));\n"
-		"	this.deActivateRect.setAttributeNS(null,\"stroke\"),\"none\"));\n"
-		"	this.deActivateRect.setAttributeNS(null,\"display\"),\"none\"));\n"
-		"	this.deActivateRect.setAttributeNS(null,\"cursor\"),\"default\"));\n"
-		"	this.buttonGroup.appendChild(this.deActivateRect);\n"
-		"}\n"
-		"\n"
-		"//remove all textbox elements\n"
-		"button.prototype.removeButton = function() {\n"
-		"	this.buttonGroup.removeChild(this.upperLeftShadow);\n"
-		"	this.buttonGroup.removeChild(this.lowerRightShadow);\n"
-		"	this.buttonGroup.removeChild(this.buttonRect);\n"
-		"	if (this.buttonTextElement) {\n"
-		"	this.buttonGroup.removeChild(this.buttonTextElement);	\n"
-		"	}\n"
-		"	if (this.buttonSymbolInstance) {\n"
-		"	this.buttonGroup.removeChild(this.buttonSymbolInstance);	\n"
-		"	}\n"
-		"	this.buttonGroup.removeChild(this.deActivateRect);\n"
-		"}\n"
-		"\n"
-		"//click on and write in textbox\n"
-		"button.prototype.handleEvent = function(evt) {\n"
-		"	if (evt.type == \"mousedown\")) {\n"
-		"	this.togglePressed(\"pressed\"));\n"
-		"	document.documentElement.addEventListener(\"mouseup\"),this,false);	\n"
-		"	}\n"
-		"	if (evt.type == \"mouseup\")) {\n"
-		"	this.togglePressed(\"released\"));\n"
-		"	document.documentElement.removeEventListener(\"mouseup\"),this,false);	\n"
-		"	}\n"
-		"	if (evt.type == \"click\")) {\n"
-		"	//for some strange reasons I could not forward the evt object here ;-(, the code below using a literal is a workaround\n"
-		"	//attention: only some of the evt properties are forwarded here, you can add more, if you need them\n"
-		"	var timerEvt = {x:evt.clientX,y:evt.clientY,type:evt.type,detail:evt.detail,timeStamp:evt.timeStamp}\n"
-		"	this.timer.setTimeout(\"fireFunction\"),this.timerMs,timerEvt)\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"button.prototype.togglePressed = function(type) {\n"
-		"	if (type == \"pressed\")) {\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"fill\"),this.shadeDarkFill);	\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"fill\"),this.shadeLightFill);\n"
-		"	}\n"
-		"	if (type == \"released\")) {\n"
-		"	this.upperLeftShadow.setAttributeNS(null,\"fill\"),this.shadeLightFill);	\n"
-		"	this.lowerRightShadow.setAttributeNS(null,\"fill\"),this.shadeDarkFill);	\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"button.prototype.fireFunction = function(evt) {\n"
-		"	if (typeof(this.functionToCall) == \"function\")) {\n"
-		"	if (this.buttonTextElement) {\n"
-		"		this.functionToCall(this.groupId,evt,this.buttonText);\n"
-		"	}\n"
-		"	if (this.buttonSymbolInstance) {\n"
-		"		this.functionToCall(this.groupId,evt);\n"
-		"	}\n"
-		"	}\n"
-		"	if (typeof(this.functionToCall) == \"object\")) {\n"
-		"	if (this.buttonTextElement) {\n"
-		"		this.functionToCall.buttonPressed(this.groupId,evt,this.buttonText);\n"
-		"	}\n"
-		"	if (this.buttonSymbolInstance) {\n"
-		"		this.functionToCall.buttonPressed(this.groupId,evt);\n"
-		"	}\n"
-		"	}\n"
-		"	if (typeof(this.functionToCall) == undefined) {\n"
-		"	return;	\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"button.prototype.getTextValue = function() {\n"
-		"	return this.buttonText;\n"
-		"}	\n"
-		"\n"
-		"button.prototype.setTextValue = function(value) {\n"
-		"	this.buttonText = value;\n"
-		"	this.buttonTextElement.firstChild.nodeValue=this.buttonText;\n"
-		"}\n"
-		"\n"
-		"button.prototype.activate = function(value) {\n"
-		"	this.deActivateRect.setAttributeNS(null,\"display\"),\"none\"));\n"
-		"	this.activated = true;\n"
-		"}\n"
-		"\n"
-		"button.prototype.deactivate = function(value) {\n"
-		"	this.deActivateRect.setAttributeNS(null,\"display\"),\"inherit\"));\n"
-		"	this.activated = false;\n"
-		"}\n"
-		"\n"
-		"//switchbutton\n"
-		"//initialize inheritance\n"
-		"switchbutton.prototype = new button();\n"
-		"switchbutton.prototype.constructor = switchbutton;\n"
-		"switchbutton.superclass = button.prototype;\n"
-		"\n"
-		"function switchbutton(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset) {\n"
-		"	if (arguments.length > 0) {\n"
-		"	this.init(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset);\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"switchbutton.prototype.init = function(groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset) {\n"
-		"	switchbutton.superclass.init.call(this,groupId,functionToCall,buttonType,buttonText,buttonSymbolId,x,y,width,height,fontSize,fontFamily,textFill,buttonFill,shadeLightFill,shadeDarkFill,shadowOffset);\n"
-		"	this.on = false;\n"
-		"}\n"
-		"\n"
-		"//overwriting handleEventcode\n"
-		"switchbutton.prototype.handleEvent = function(evt) {\n"
-		"	//for some strange reasons I could not forward the evt object here ;-(, the code below using a literal is a workaround\n"
-		"	//attention: only some of the evt properties are forwarded here, you can add more, if you need them\n"
-		"	var timerEvt = {x:evt.clientX,y:evt.clientY,type:evt.type,detail:evt.detail,timeStamp:evt.timeStamp}\n"
-		"	if (evt.type == \"click\")) {\n"
-		"	if (this.on) {\n"
-		"		this.on = false;\n"
-		"		this.togglePressed(\"released\"));\n"
-		"		this.timer.setTimeout(\"fireFunction\"),this.timerMs,timerEvt);\n"
-		"	}\n"
-		"	else {\n"
-		"		this.on = true;\n"
-		"		this.togglePressed(\"pressed\"));		\n"
-		"		this.timer.setTimeout(\"fireFunction\"),this.timerMs,timerEvt);\n"
-		"	}\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"switchbutton.prototype.getSwitchValue = function() {\n"
-		"	return this.on;\n"
-		"}\n"
-		"\n"
-		"switchbutton.prototype.setSwitchValue = function(onOrOff,firefunction) {\n"
-		"	this.on = onOrOff;\n"
-		"	//artificial timer event - don't use the values!\n"
-		"	var timerEvt = {x:0,y:0,type:\"click\"),detail:1,timeStamp:0}\n"
-		"	if (this.on) {\n"
-		"	this.togglePressed(\"pressed\"));\n"
-		"	if (firefunction) {\n"
-		"		this.timer.setTimeout(\"fireFunction\"),this.timerMs,timerEvt);\n"
-		"	}\n"
-		"	}\n"
-		"	else {\n"
-		"	this.togglePressed(\"released\"));		\n"
-		"	if (firefunction) {\n"
-		"		this.timer.setTimeout(\"fireFunction\"),this.timerMs,timerEvt)\n"
-		"	}\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//overwriting fireFunction code\n"
-		"switchbutton.prototype.fireFunction = function(evt) {\n"
-		"	if (typeof(this.functionToCall) == \"function\")) {\n"
-		"	if (this.buttonTextElement) {\n"
-		"		this.functionToCall(this.groupId,evt,this.on,this.buttonText);\n"
-		"	}\n"
-		"	if (this.buttonSymbolInstance) {\n"
-		"		this.functionToCall(this.groupId,evt,this.on);\n"
-		"	}\n"
-		"	}\n"
-		"	if (typeof(this.functionToCall) == \"object\")) {\n"
-		"	if (this.buttonTextElement) {\n"
-		"		this.functionToCall.buttonPressed(this.groupId,evt,this.on,this.buttonText);\n"
-		"	}\n"
-		"	if (this.buttonSymbolInstance) {\n"
-		"		this.functionToCall.buttonPressed(this.groupId,evt,this.on);\n"
-		"	}\n"
-		"	}\n"
-		"	if (typeof(this.functionToCall) == undefined) {\n"
-		"	return;	\n"
-		"	}\n"
-		"}\n"
-		"\n"
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_Navigation_1(void)
-{
-	return( SG_STR_MBTOSG(
-		"/*\n"
-		"Scripts for SVG only webmapping application navigation tools\n"
-		"Copyright (C) <2005>  <Andreas Neumann>\n"
-		"Version 1.1, 2005-10-05\n"
-		"neumann at karto.baug.ethz.ch\n"
-		"http://www.carto.net/\n"
-		"http://www.carto.net/neumann/\n"
-		"\n"
-		"Credits: numerous people on svgdevelopers at yahoogroups.com\n"
-		"\n"
-		"This ECMA script library is free software; you can redistribute it and/or\n"
-		"modify it under the terms of the GNU Lesser General Public\n"
-		"License as published by the Free Software Foundation; either\n"
-		"version 2.1 of the License, or (at your option) any later version.\n"
-		"\n"
-		"This library is distributed in the hope that it will be useful,\n"
-		"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-		"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
-		"Lesser General Public License for more details.\n"
-		"\n"
-		"You should have received a copy of the GNU Lesser General Public\n"
-		"License along with this library (http://www.carto.net/papers/svg/navigationTools/lesser_gpl.txt); if not, write to the Free Software\n"
-		"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n"
-		"\n"
-		"----\n"
-		"\n"
-		"current version: 1.1\n"
-		"\n"
-		"version history:\n"
-		"1.0 initial version\n"
-		"1.01 (2005-02-15) added cleanUp() method to map and dragObj objects, some fixes in the documentation\n"
-		"1.02 (2005-02-20) fixed problems with double clicks, the second click of a double click is now ignored, using the evt.detail property\n"
-		"1.03 (2005-02-22) introduced timestamp and nrLayerToLoad array for dynamic loading (getUrl)\n"
-		"1.04 (2005-09-15) introduced a few changes with coordinate calculation to support MozillaSVG, introduced epsg and unitsFactor property based on a suggestion by Bruce Rindahl\n"
-		"1.1 (2005-10-05) introduced button object (see button.js file), introduced zoom and pan \"modes\" for repeated actions in the same mode, introduced history of map extents with the ability to go back and forth in the list of previous map extents, some internal changes in the code (e.g. less global variables), added experimental support for the batik SVG 1.2 \"static\" attribute to improve performance while panning the map, added cursors to give better status feedback\n"
-		"\n"
-		"original document site: http://www.carto.net/papers/svg/navigationTools/\n"
-		"Please contact the author in case you want to use code or ideas commercially.\n"
-		"If you use this code, please include this copyright header, the included full\n"
-		"LGPL 2.1 text and read the terms provided in the LGPL 2.1 license\n"
-		"(http://www.gnu.org/copyleft/lesser.txt)\n"
-		"\n"
-		"-------------------------------\n"
-		"\n"
-		"Please report bugs and send improvements to neumann at karto.baug.ethz.ch\n"
-		"If you use these scripts, please link to the original (http://www.carto.net/papers/svg/navigationTools/)\n"
-		"somewhere in the source-code-comment or the \"about\" of your project and give credits, thanks!\n"
-		"\n"
-		"*/\n"
-		"\n"
-		"//constructor: holds data on map and initializes various references\n"
-		"function map(mapName,maxWidth,minWidth,zoomFact,nrDecimals,epsg,units,unitsFactor,showCoords,coordXId,coordYId,dynamicLayers,digiLayers,activeDigiLayer) {\n"
-		"	this.mapName = mapName; //id of svg element containing the map geometry\n"
-		"	this.mapSVG = document.getElementById(this.mapName); //reference to nested SVG element holding the map-graphics\n"
-		"	this.mainMapGroup = document.getElementById(this.mapName+\"Group\")); //group within mainmap - to be transformed when panning manually\n"
-		"	this.dynamicLayers = dynamicLayers; //an associative array holding ids of values that are loaded from the web server dynamically (.getUrl())\n"
-		"	this.nrLayerToLoad = 0; //statusVariable to indicate how many layers are still to load\n"
-		"	this.maxWidth = maxWidth; //max map width\n"
-		"	this.minWidth = minWidth; //min map width, after zooming in\n"
-		"	this.zoomFact = zoomFact; //ratio to zoom in or out in relation to previous viewBox\n"
-		"	this.digiLayers = digiLayers; //references to digiLayers (for digitizing tools)\n"
-		"	this.activeDigiLayer = activeDigiLayer; //active Digi Layer, key is final group id where geometry should be copied to after digitizing\n"
-		"	this.pixXOffset = parseFloat(this.mapSVG.getAttributeNS(null,\"x\"))); //offset from left margin of outer viewBox\n"
-		"	this.pixYOffset = parseFloat(this.mapSVG.getAttributeNS(null,\"y\"))); //offset from top margin of outer viewBox\n"
-		"	var viewBoxArray = this.mapSVG.getAttributeNS(null,\"viewBox\")).split(\" \"));\n"
-		"	this.curxOrig = parseFloat(viewBoxArray[0]); //holds the current xOrig\n"
-		"	this.curyOrig = parseFloat(viewBoxArray[1]); //holds the current yOrig\n"
-		"	this.curWidth = parseFloat(viewBoxArray[2]); //holds the current map width\n"
-		"	this.curHeight = parseFloat(viewBoxArray[3]); //holds the current map height\n"
-		"	this.pixWidth = parseFloat(this.mapSVG.getAttributeNS(null,\"width\"))); //holds width of the map in pixel coordinates\n"
-		"	this.pixHeight = parseFloat(this.mapSVG.getAttributeNS(null,\"height\"))); //holds height of the map in pixel coordinates\n"
-		"	this.pixSize = this.curWidth / this.pixWidth; //size of a screen pixel in map units\n"
-		"	this.zoomVal = this.maxWidth / this.curWidth * 100; //zoomVal in relation to initial zoom\n"
-		"	this.nrDecimals = nrDecimals; //nr of decimal places to be displayed for show coordinates or accuracy when working with digitizing\n"
-		"	this.epsg = epsg; //epsg projection code - can be used for building URL strings for loading data from a WMS or spatial database, if you don't need it just input any number\n"
-		"	this.navStatus = \"info\"); //to indicate status in navigation, default is \"info\"), no navigation mode active\n"
-		"	this.units = units; //holds a string with map units, e.g. \"m\"), alternatively String.fromCharCode(176) for degrees\n"
-		"	this.unitsFactor = unitsFactor; //a factor for unit conversion. Can be used f.e. to output feet coordinates when data is meter, If you don't need a conversion, just use a factor of 1\n"
-		"	this.showCoords = showCoords;\n"
-		"	//initialize array of timestamp/layertoLoad values\n"
-		"	this.nrLayerToLoad = new Array();\n"
-		"	this.timestamp = null; //holds the timestamp after a zoom or pan occured\n"
-		"	//initialize coordinate display if showCoords == true\n"
-		"	if (this.showCoords == true) {\n"
-		"		//add event listener for coordinate display\n"
-		"		this.mapSVG.addEventListener(\"mousemove\"),this,false);\n"
-		"		if (typeof(coordXId) == \"string\")) {\n"
-		"			this.coordXText = document.getElementById(coordXId).firstChild;\n"
-		"		}\n"
-		"		else {\n"
-		"			alert(\"Error: coordXId needs to be an id of type string\"));\n"
-		"		}\n"
-		"		if (typeof(coordYId) == \"string\")) {\n"
-		"			this.coordYText = document.getElementById(coordYId).firstChild;\n"
-		"		}\n"
-		"		else {\n"
-		"			alert(\"Error: coordYId needs to be an id of type string\"));\n"
-		"		}\n"
-		"	}\n"
-		"	//a new array containing map extents\n"
-		"	this.mapExtents = new Array();\n"
-		"	this.mapExtents.push({xmin:this.curxOrig,ymin:((this.curyOrig + this.curHeight) * -1),xmax:(this.curxOrig + this.curWidth),ymax:(this.curyOrig * -1)});\n"
-		"	this.curMapExtentIndex = 0;\n"
-		"	//create background-element to receive events for showing coordinates\n"
-		"	//this rect is also used for manual zooming and panning\n"
-		"	this.backgroundRect = document.createElementNS(svgNS,\"rect\"));\n"
-		"	this.backgroundRect.setAttributeNS(null,\"x\"),this.curxOrig);\n"
-		"	this.backgroundRect.setAttributeNS(null,\"y\"),this.curyOrig);\n"
-		"	this.backgroundRect.setAttributeNS(null,\"width\"),this.curWidth);\n"
-		"	this.backgroundRect.setAttributeNS(null,\"height\"),this.curHeight);\n"
-		"	this.backgroundRect.setAttributeNS(null,\"fill\"),\"none\"));\n"
-		"	this.backgroundRect.setAttributeNS(null,\"stroke\"),\"none\"));\n"
-		"	this.backgroundRect.setAttributeNS(null,\"pointer-events\"),\"fill\"));\n"
-		"	this.backgroundRect.setAttributeNS(null,\"id\"),\"mapBackgroundRect\"));\n"
-		"	this.backgroundRect.addEventListener(\"mousedown\"),this,false);\n"
-		"	this.backgroundRect.addEventListener(\"mousemove\"),this,false);\n"
-		"	this.backgroundRect.addEventListener(\"mouseup\"),this,false);\n"
-		"	this.backgroundRect.addEventListener(\"mouseout\"),this,false);\n"
-		"	this.backgroundRect.addEventListener(\"click\"),this,false);\n"
-		"	this.mainMapGroup.insertBefore(this.backgroundRect,this.mainMapGroup.firstChild);\n"
-		"	//determine if viewer is capable of getScreenCTM\n"
-		"	if (document.documentElement.getScreenCTM) {\n"
-		"		this.getScreenCTM = true;\n"
-		"	}\n"
-		"	else {\n"
-		"		this.getScreenCTM = false;		\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//resets viewBox of main map after zooming and panning\n"
-		"map.prototype.newViewBox = function(refRectId,history) {\n"
-		"	var myRefRect = document.getElementById(refRectId);\n"
-		"	this.curxOrig = parseFloat(myRefRect.getAttributeNS(null,\"x\")));\n"
-		"	this.curyOrig = parseFloat(myRefRect.getAttributeNS(null,\"y\")));\n"
-		"	this.curWidth = parseFloat(myRefRect.getAttributeNS(null,\"width\")));\n"
-		"	this.curHeight = parseFloat(myRefRect.getAttributeNS(null,\"height\")));\n"
-		"	var myViewBoxString = this.curxOrig + \" \" + this.curyOrig + \" \" + this.curWidth + \" \" + this.curHeight;\n"
-		"	this.pixSize = this.curWidth / this.pixWidth;\n"
-		"	this.zoomVal = this.maxWidth / this.curWidth * 100;\n"
-		"	this.mapSVG.setAttributeNS(null,\"viewBox\"),myViewBoxString);\n"
-		"	myMapApp.zoomSlider.setValue(this.curWidth);\n"
-		"	loadProjectSpecific();\n"
-		"	if (history) {\n"
-		"	    this.mapExtents.push({xmin:this.curxOrig,ymin:((this.curyOrig + this.curHeight) * -1),xmax:(this.curxOrig + this.curWidth),ymax:(this.curyOrig * -1)});\n"
-		"               this.curMapExtentIndex = (this.mapExtents.length - 1);\n"
-		"	}\n"
-		"	this.checkButtons();\n"
-		"}\n"
-		"\n"
-		"map.prototype.backwardExtent = function() {\n"
-		"    if (this.curMapExtentIndex != 0) {\n"
-		"        this.curMapExtentIndex--;\n"
-		"        this.setNewViewBox(this.mapExtents[this.curMapExtentIndex].xmin,this.mapExtents[this.curMapExtentIndex].ymin,this.mapExtents[this.curMapExtentIndex].xmax,this.mapExtents[this.curMapExtentIndex].ymax,false);\n"
-		"    }\n"
-		"}\n"
-		"\n"
-		"map.prototype.forwardExtent = function() {\n"
-		"    if (this.mapExtents.length != (this.curMapExtentIndex + 1)) {\n"
-		"        this.curMapExtentIndex++;\n"
-		"        this.setNewViewBox(this.mapExtents[this.curMapExtentIndex].xmin,this.mapExtents[this.curMapExtentIndex].ymin,this.mapExtents[this.curMapExtentIndex].xmax,this.mapExtents[this.curMapExtentIndex].ymax,false);\n"
-		"    }\n"
-		"}\n"
-		"\n"
-		"map.prototype.checkButtons = function() {\n"
-		"           //check extent history\n"
-		"           if (this.curMapExtentIndex == 0) {\n"
-		"                if (myMapApp.buttons[\"backwardExtent\"].activated) {\n"
-		"                  myMapApp.buttons[\"backwardExtent\"].deactivate();\n"
-		"                }\n"
-		"           }\n"
-		"           else {\n"
-		"                if (!myMapApp.buttons[\"backwardExtent\"].activated) {\n"
-		"                  myMapApp.buttons[\"backwardExtent\"].activate();\n"
-		"                }           \n"
-		"           }\n"
-		"           if (this.mapExtents.length == (this.curMapExtentIndex + 1)) {\n"
-		"                if (myMapApp.buttons[\"forwardExtent\"].activated) {\n"
-		"                   myMapApp.buttons[\"forwardExtent\"].deactivate();\n"
-		"                }\n"
-		"           }\n"
-		"           else {\n"
-		"                if (!myMapApp.buttons[\"forwardExtent\"].activated) {\n"
-		"                  myMapApp.buttons[\"forwardExtent\"].activate();\n"
-		"                }           \n"
-		"           }\n"
-		" \n"
-		"           //maximum map width reached, cannot zoom out further\n"
-		"           if (this.curWidth >= this.maxWidth) {\n"
-		"               if (myMapApp.buttons[\"zoomOut\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomOut\"].deactivate();\n"
-		"               }\n"
-		"               if (myMapApp.buttons[\"zoomFull\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomFull\"].deactivate();\n"
-		"               }\n"
-		"               if (myMapApp.buttons[\"panManual\"].activated) {\n"
-		"                   myMapApp.buttons[\"panManual\"].deactivate();\n"
-		"               }\n"
-		"               if (myMapApp.buttons[\"recenterMap\"].activated) {\n"
-		"                   myMapApp.buttons[\"recenterMap\"].deactivate();\n"
-		"               }\n"
-		"               if (!myMapApp.buttons[\"zoomIn\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomIn\"].activate();\n"
-		"               }\n"
-		"               if (!myMapApp.buttons[\"zoomManual\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomManual\"].activate();\n"
-		"               }\n"
-		"           }\n"
-		"           //minimum map width reached, cannot zoom in further\n"
-		"           else if (this.curWidth <= this.minWidth) {\n"
-		"               if (myMapApp.buttons[\"zoomIn\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomIn\"].deactivate();\n"
-		"               }\n"
-		"               if (myMapApp.buttons[\"zoomManual\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomManual\"].deactivate();\n"
-		"               }\n"
-		"               if (!myMapApp.buttons[\"zoomOut\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomOut\"].activate();\n"
-		"               }\n"
-		"               if (!myMapApp.buttons[\"zoomFull\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomFull\"].activate();\n"
-		"               }\n"
-		"               if (!myMapApp.buttons[\"panManual\"].activated) {\n"
-		"                   myMapApp.buttons[\"panManual\"].activate();\n"
-		"               }\n"
-		"               if (!myMapApp.buttons[\"recenterMap\"].activated) {\n"
-		"                   myMapApp.buttons[\"recenterMap\"].activate();\n"
-		"               }           \n"
-		"           }\n"
-		"           //in between\n"
-		"           else {\n"
-		"               if (!myMapApp.buttons[\"zoomIn\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomIn\"].activate();\n"
-		"               }\n"
-		"               if (!myMapApp.buttons[\"zoomManual\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomManual\"].activate();\n"
-		"               }\n"
-		"               if (!myMapApp.buttons[\"zoomOut\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomOut\"].activate();\n"
-		"               }\n"
-		"               if (!myMapApp.buttons[\"zoomFull\"].activated) {\n"
-		"                   myMapApp.buttons[\"zoomFull\"].activate();\n"
-		"               }\n"
-		"               if (!myMapApp.buttons[\"panManual\"].activated) {\n"
-		"                   myMapApp.buttons[\"panManual\"].activate();\n"
-		"               }\n"
-		"               if (!myMapApp.buttons[\"recenterMap\"].activated) {\n"
-		"                   myMapApp.buttons[\"recenterMap\"].activate();\n"
-		"               }           \n"
-		"           }           \n"
-		"}\n"
-		"\n"
-		"map.prototype.setNewViewBox = function(xmin,ymin,xmax,ymax,history) {\n"
-		"	//check if within constraints\n"
-		"	if (xmin < myMapApp.refMapDragger.constrXmin) {\n"
-		"		xmin = myMapApp.refMapDragger.constrXmin;\n"
-		"	}\n"
-		"	if (xmax > myMapApp.refMapDragger.constrXmax) {\n"
-		"		xmax = myMapApp.refMapDragger.constrXmin;\n"
-		"	}\n"
-		"	if (ymin < (myMapApp.refMapDragger.constrYmax * -1)) {\n"
-		"		ymin = myMapApp.refMapDragger.constrYmax * -1;\n"
-		"	}\n"
-		"	if (ymax > (myMapApp.refMapDragger.constrYmin * -1)) {\n"
-		"		ymax = myMapApp.refMapDragger.constrYmin * -1;\n"
-		"	}\n"
-		"	\n"
-		"	var origWidth = xmax - xmin;\n"
-		"	var origHeight = ymax - ymin;\n"
-		"	var myRatio = this.curWidth/this.curHeight;\n"
-		"	\n"
-		"	if (origWidth / origHeight > myRatio) { //case rect is more wide than ratio\n"
-		"		var newWidth = origWidth;\n"
-		"		var newHeight = origWidth * 1 / myRatio;\n"
-		"		ymin = (ymax + (newHeight - origHeight) / 2) * -1;\n"
-		"	}\n"
-		"	else {\n"
-		"		var newHeight = origHeight;\n"
-		"		var newWidth = newHeight * myRatio;\n"
-		"		xmin = xmin - (newWidth - origWidth) / 2;\n"
-		"		ymin = ymax * -1;\n"
-		"	}\n"
-		"	//check if within constraints\n"
-		"	if (xmin < myMapApp.refMapDragger.constrXmin) {\n"
-		"		xmin = myMapApp.refMapDragger.constrXmin;\n"
-		"	}\n"
-		"	if (ymin < myMapApp.refMapDragger.constrYmin) {\n"
-		"		ymin = myMapApp.refMapDragger.constrYmin;\n"
-		"	}\n"
-		"	if ((xmin + newWidth) > myMapApp.refMapDragger.constrXmax) {\n"
-		"		xmin = myMapApp.refMapDragger.constrXmax - newWidth;\n"
-		"	}\n"
-		"	if ((ymin + newHeight) > myMapApp.refMapDragger.constrYmax) {\n"
-		"		ymin = myMapApp.refMapDragger.constrYmax - newHeight;\n"
-		"	}		\n"
-		"	myMapApp.refMapDragger.newView(xmin,ymin,newWidth,newHeight);\n"
-		"	this.newViewBox(myMapApp.refMapDragger.dragId,history);\n"
-		"}\n"
-		"\n"
-		"//handles events associated with navigation\n"
-		"map.prototype.handleEvent = function(evt) {\n"
-		"	var callerId = evt.currentTarget.getAttributeNS(null,\"id\"));\n"
-		"	if (callerId.match(/\\bzoomBgRectManual/)) {\n"
-		"		this.zoomManDragRect(evt);\n"
-		"	}\n"
-		"	if (callerId.match(/\\bzoomBgRectRecenter/)) {\n"
-		"		this.recenterFinally(evt);\n"
-		"	}\n"
-		"	if (callerId.match(/\\bbgPanManual/)) {\n"
-		"		this.panManualFinally(evt);\n"
-		"	}\n"
-		"	if (callerId == \"mainMap\" && evt.type == \"mousemove\")) {\n"
-		"		if (this.navStatus != \"panmanualActive\")) {\n"
-		"		    this.showCoordinates(evt);\n"
-		"		}\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//calcs coordinates; relies on myMapApp to handle different window sizes and resizing of windows\n"
-		"map.prototype.calcCoord = function(evt) {\n"
-		"	//with getScreenCTM the values are already in the inner coordinate system\n"
-		"	if (!this.getScreenCTM) {\n"
-		"		var coords = myMapApp.calcCoord(evt,this.mapSVG);\n"
-		"		coords.x = this.curxOrig + (coords.x - this.pixXOffset) * this.pixSize;\n"
-		"		coords.y = (this.curyOrig + (coords.y - this.pixYOffset) * this.pixSize);\n"
-		"	}\n"
-		"	else {	\n"
-		"		var coords = myMapApp.calcCoord(evt,this.mainMapGroup);\n"
-		"	}\n"
-		"	return coords;\n"
-		"}\n"
-		"\n"
-		"//displays x and y coordinates in two separate text elements\n"
-		"map.prototype.showCoordinates = function(evt) {\n"
-		"	var mapCoords = this.calcCoord(evt);\n"
-		"	this.coordXText.nodeValue = \"X: \" + formatNumberString((mapCoords.x * this.unitsFactor).toFixed(this.nrDecimals)) + this.units;\n"
-		"	this.coordYText.nodeValue = \"Y: \" + formatNumberString((mapCoords.y * this.unitsFactor * -1).toFixed(this.nrDecimals)) + this.units;\n"
-		"}\n"
-		"\n"
-		"//checks for and removes temporary rectangle objects\n"
-		"map.prototype.stopNavModes = function() {\n"
-		"	if (this.navStatus != \"info\")) {\n"
-		"                    	if (this.navStatus == \"zoomManual\")) {\n"
-		"                    	    myMapApp.buttons[\"zoomManual\"].setSwitchValue(false,false);\n"
-		"                    	}\n"
-		"                     	if (this.navStatus == \"panmanual\" || this.navStatus == \"panmanualActive\")) {\n"
-		"                    	    myMapApp.buttons[\"panManual\"].setSwitchValue(false,false);\n"
-		"                    	}\n"
-		"                    	if (this.navStatus == \"recenter\")) {\n"
-		"                    	    myMapApp.buttons[\"recenterMap\"].setSwitchValue(false,false);\n"
-		"                    	}\n"
-		"                              this.backgroundRect.setAttributeNS(null,\"id\"),\"mapBackgroundRect\"));\n"
-		"		myMapApp.buttons[\"infoButton\"].setSwitchValue(true,false);\n"
-		"		this.navStatus = \"info\");\n"
-		"	               this.mapSVG.setAttributeNS(null,\"cursor\"),\"crosshair\"));\n"
-		"		statusChange(\"Mode: Infomode\"));\n"
-		"	               this.mainMapGroup.insertBefore(this.backgroundRect,this.mainMapGroup.firstChild);\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//starts manual zooming mode\n"
-		"map.prototype.zoomManual = function(evt) {\n"
-		"	if (Math.round(myMainMap.curWidth) > myMainMap.minWidth && evt.detail == 1) {\n"
-		"		this.navStatus = \"zoomManual\");\n"
-		"                              this.backgroundRect.setAttributeNS(null,\"id\"),\"zoomBgRectManual\"));	\n"
-		"	               this.mainMapGroup.appendChild(this.backgroundRect);\n"
-		"	               this.mapSVG.setAttributeNS(null,\"cursor\"),\"se-resize\"));\n"
-		"		statusChange(\"Click and drag rectangle for new map extent.\"));\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//manages manual zooming by drawing a rectangle\n"
-		"map.prototype.zoomManDragRect = function(evt) {\n"
-		"	var mapCoords = this.calcCoord(evt);\n"
-		"	var myX = mapCoords.x;\n"
-		"	var myY = mapCoords.y;\n"
-		"	var myYXFact = this.curHeight / this.curWidth;\n"
-		"	if (evt.type == \"mousedown\")) {\n"
-		"		this.manZoomActive = 1;\n"
-		"		this.zoomRect = document.createElementNS(svgNS,\"rect\"));\n"
-		"		var myLineWidth = this.curWidth * 0.003;\n"
-		"		this.zoomRect.setAttributeNS(null,\"id\"),\"zoomRect\"));\n"
-		"		this.zoomRect.setAttributeNS(null,\"fill\"),\"white\"));\n"
-		"		this.zoomRect.setAttributeNS(null,\"fill-opacity\"),\"0.5\"));\n"
-		"		this.zoomRect.setAttributeNS(null,\"stroke\"),\"dimgray\"));\n"
-		"		this.zoomRect.setAttributeNS(null,\"stroke-width\"),myLineWidth);\n"
-		"		this.zoomRect.setAttributeNS(null,\"stroke-dasharray\"),(myLineWidth*3)+\"),\"+myLineWidth);\n"
-		"		this.zoomRect.setAttributeNS(null,\"pointer-events\"),\"none\"));\n"
-		"		this.zoomRect.setAttributeNS(null,\"x\"),myX);\n"
-		"		this.zoomRect.setAttributeNS(null,\"y\"),myY);\n"
-		"		this.zoomRect.setAttributeNS(null,\"width\"),this.minWidth);\n"
-		"		this.zoomRect.setAttributeNS(null,\"height\"),this.minWidth * myYXFact);\n"
-		"		this.mainMapGroup.appendChild(this.zoomRect);\n"
-		"		this.zoomRectOrigX = myX;\n"
-		"		this.zoomRectOrigY = myY;\n"
-		"	}\n"
-		"	if (evt.type == \"mousemove\" && this.manZoomActive == 1) {\n"
-		"		var myZoomWidth = myX - this.zoomRectOrigX;\n"
-		"		if (myZoomWidth < 0) {\n"
-		"			if (Math.abs(myZoomWidth) < this.minWidth) {\n"
-		"				this.zoomRect.setAttributeNS(null,\"x\"),this.zoomRectOrigX - this.minWidth);\n"
-		"				this.zoomRect.setAttributeNS(null,\"y\"),this.zoomRectOrigY - this.minWidth * myYXFact);\n"
-		"				this.zoomRect.setAttributeNS(null,\"width\"),this.minWidth);\n"
-		"				this.zoomRect.setAttributeNS(null,\"height\"),this.minWidth * myYXFact);\n"
-		"			}\n"
-		"			else {\n"
-		"				this.zoomRect.setAttributeNS(null,\"x\"),myX);\n"
-		"				this.zoomRect.setAttributeNS(null,\"y\"),this.zoomRectOrigY - Math.abs(myZoomWidth) * myYXFact);\n"
-		"				this.zoomRect.setAttributeNS(null,\"width\"),Math.abs(myZoomWidth));\n"
-		"				this.zoomRect.setAttributeNS(null,\"height\"),Math.abs(myZoomWidth) * myYXFact);			\n"
-		"			}\n"
-		"		}\n"
-		"		else {\n"
-		"			this.zoomRect.setAttributeNS(null,\"x\"),this.zoomRectOrigX);\n"
-		"			this.zoomRect.setAttributeNS(null,\"y\"),this.zoomRectOrigY);\n"
-		"			if (myZoomWidth < this.minWidth) {\n"
-		"				this.zoomRect.setAttributeNS(null,\"width\"),this.minWidth);\n"
-		"				this.zoomRect.setAttributeNS(null,\"height\"),this.minWidth * myYXFact);		\n"
-		"			}\n"
-		"			else {\n"
-		"				this.zoomRect.setAttributeNS(null,\"width\"),myZoomWidth);\n"
-		"				this.zoomRect.setAttributeNS(null,\"height\"),myZoomWidth * myYXFact);\n"
-		"			}\n"
-		"		}\n"
-		"	}\n"
-		"	if ((evt.type == \"mouseup\" || evt.type == \"mouseout\")) && this.manZoomActive == 1) {\n"
-		"		this.manZoomActive = 0;\n"
-		"		if (parseFloat(this.zoomRect.getAttributeNS(null,\"width\"))) > this.curWidth * 0.02) {\n"
-		"			myMapApp.refMapDragger.newView(parseFloat(this.zoomRect.getAttributeNS(null,\"x\"))),parseFloat(this.zoomRect.getAttributeNS(null,\"y\"))),parseFloat(this.zoomRect.getAttributeNS(null,\"width\"))),parseFloat(this.zoomRect.getAttributeNS(null,\"height\"))));\n"
-		"			this.newViewBox(myMapApp.refMapDragger.dragId,true);\n"
-		"		}\n"
-		"		this.mainMapGroup.removeChild(this.zoomRect);\n"
-		"		statusChange(\"Mode: Manual Zooming\"));\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//initializes recentering mode\n"
-		"map.prototype.recenter = function(evt) {\n"
-		"	if (evt.detail == 1) {\n"
-		"		this.navStatus = \"recenter\");\n"
-		"                              this.backgroundRect.setAttributeNS(null,\"id\"),\"zoomBgRectRecenter\"));	\n"
-		"	               this.mainMapGroup.appendChild(this.backgroundRect);\n"
-		"	               this.mapSVG.setAttributeNS(null,\"cursor\"),\"pointer\"));\n"
-		"		statusChange(\"Click in map to define new map center.\"));\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//finishes recentering after mouse-click\n"
-		"map.prototype.recenterFinally = function(evt) {\n"
-		"	if (evt.type == \"click\")) {\n"
-		"		var mapCoords = this.calcCoord(evt);\n"
-		"		var myX = mapCoords.x;\n"
-		"		var myY = mapCoords.y;\n"
-		"		var myNewX = myX - this.curWidth / 2;\n"
-		"		var myNewY = myY - this.curHeight / 2;\n"
-		"		\n"
-		"		//check if within constraints\n"
-		"		if (myNewX < myMapApp.refMapDragger.constrXmin) {\n"
-		"			myNewX = myMapApp.refMapDragger.constrXmin;\n"
-		"		}\n"
-		"		if (myNewY < myMapApp.refMapDragger.constrYmin) {\n"
-		"			myNewY = myMapApp.refMapDragger.constrYmin;\n"
-		"		}\n"
-		"		if ((myNewX + this.curWidth) > myMapApp.refMapDragger.constrXmax) {\n"
-		"			myNewX = myMapApp.refMapDragger.constrXmax - this.curWidth;\n"
-		"		}\n"
-		"		if ((myNewY + this.curHeight) > myMapApp.refMapDragger.constrYmax) {\n"
-		"			myNewY = myMapApp.refMapDragger.constrYmax - this.curHeight;\n"
-		"		}\n"
-		"		myMapApp.refMapDragger.newView(myNewX,myNewY,this.curWidth,this.curHeight);\n"
-		"		this.newViewBox(myMapApp.refMapDragger.dragId,true);\n"
-		"		statusChange(\"Mode: Recentering Map\"));\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//initializes manual panning\n"
-		"map.prototype.panManual = function(evt) {\n"
-		"	if (evt.detail == 1) {\n"
-		"		this.navStatus = \"panmanual\");\n"
-		"                              this.backgroundRect.setAttributeNS(null,\"id\"),\"bgPanManual\"));	\n"
-		"	               this.mainMapGroup.appendChild(this.backgroundRect);\n"
-		"	               this.mapSVG.setAttributeNS(null,\"cursor\"),\"move\"));\n"
-		"		statusChange(\"Mouse down and move to pan the map\"));\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//manages and finishes manual panning\n"
-		"map.prototype.panManualFinally = function(evt) {\n"
-		"	if (evt.type == \"mousedown\")) {\n"
-		"		this.navStatus = \"panmanualActive\");\n"
-		"		this.panCoords = this.calcCoord(evt);\n"
-		"		this.panCoorX = this.panCoords.x;\n"
-		"		this.panCoorY = this.panCoords.y;\n"
-		"		this.diffX = 0;\n"
-		"		this.diffY = 0;\n"
-		"		this.mainMapGroup.setAttributeNS(batikNS,\"static\"),\"true\"));\n"
-		"	}\n"
-		"	if (evt.type == \"mousemove\" && this.navStatus == \"panmanualActive\")) {\n"
-		"		var mapCoords = this.calcCoord(evt);\n"
-		"		if (this.getScreenCTM) {\n"
-		"			this.diffX = this.panCoorX - mapCoords.x + this.diffX;\n"
-		"			this.diffY = this.panCoorY - mapCoords.y + this.diffY;\n"
-		"		}\n"
-		"		else {\n"
-		"			this.diffX = this.panCoorX - mapCoords.x;\n"
-		"			this.diffY = this.panCoorY - mapCoords.y;		\n"
-		"		}\n"
-		"		var myNewX = this.curxOrig + this.diffX;\n"
-		"		var myNewY = this.curyOrig + this.diffY;\n"
-		"		//check if within constraints\n"
-		"		if (myNewX < myMapApp.refMapDragger.constrXmin) {\n"
-		"			var myNewXTemp = myMapApp.refMapDragger.constrXmin;\n"
-		"			this.diffX = this.diffX + (myNewXTemp - myNewX);\n"
-		"			myNewX = myNewXTemp;\n"
-		"		}\n"
-		"		if (myNewY < myMapApp.refMapDragger.constrYmin) {\n"
-		"			var myNewYTemp = myMapApp.refMapDragger.constrYmin;\n"
-		"			this.diffY = this.diffY + (myNewYTemp - myNewY);\n"
-		"			myNewY = myNewYTemp;\n"
-		"		}\n"
-		"		if ((myNewX + this.curWidth) > myMapApp.refMapDragger.constrXmax) {\n"
-		"			var myNewXTemp = myMapApp.refMapDragger.constrXmax - this.curWidth;\n"
-		"			this.diffX = this.diffX + (myNewXTemp - myNewX);\n"
-		"			myNewX = myNewXTemp;\n"
-		"		}\n"
-		"		if ((myNewY + this.curHeight) > myMapApp.refMapDragger.constrYmax) {\n"
-		"			var myNewYTemp = myMapApp.refMapDragger.constrYmax - this.curHeight;\n"
-		"			this.diffY = this.diffY + (myNewYTemp - myNewY);\n"
-		"			myNewY = myNewYTemp;\n"
-		"		}	\n"
-		"		var transformString = \"translate(\"+(this.diffX * -1) +\"),\"+(this.diffY * -1)+\"))\");\n"
-		"		this.mainMapGroup.setAttributeNS(null,\"transform\"),transformString);\n"
-		"		myMapApp.refMapDragger.newView(myNewX,myNewY,this.curWidth,this.curHeight);\n"
-		"	}\n"
-		"	if ((evt.type == \"mouseup\" || evt.type == \"mouseout\")) && this.navStatus == \"panmanualActive\")) {\n"
-		"		this.navStatus = \"panmanual\");\n"
-		"		this.mainMapGroup.setAttributeNS(batikNS,\"static\"),\"false\"));\n"
-		"		this.mainMapGroup.setAttributeNS(null,\"transform\"),\"translate(0,0)\"));\n"
-		"		this.newViewBox(myMapApp.refMapDragger.dragId,true);			\n"
-		"		statusChange(\"Mode: Manual Panning\"));	\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//remove all temporarily added elements and event listeners\n"
-		"map.prototype.cleanUp = function() {\n"
-		"			//remove background rect\n"
-		"			this.backgroundRect.parentNode.removeChild(this.backgroundRect);\n"
-		"			//remove eventlisteners\n"
-		"			if (this.showCoords == true) {\n"
-		"				//add event listener for coordinate display\n"
-		"				this.mapSVG.removeEventListener(\"mousemove\"),this,false);\n"
-		"			}\n"
-		"\n"
-		"}\n"
-		"\n"
-		"//make an element (rectangle) draggable within constraints\n"
-		"function dragObj(dragId,referenceMap,myDragSymbol,dragSymbThreshold,showCoords,coordXId,coordYId,mainMapObj) {\n"
-		"	this.dragId = dragId;\n"
-		"	this.myDragger = document.getElementById(this.dragId);\n"
-		"	this.myRefMap = document.getElementById(referenceMap);\n"
-		"	this.myDragSymbol = document.getElementById(myDragSymbol);	\n"
-		"	this.dragSymbThreshold = dragSymbThreshold;\n"
-		"	var viewBox = this.myRefMap.getAttributeNS(null,\"viewBox\")).split(\" \"));\n"
-		"	this.constrXmin = parseFloat(viewBox[0]);\n"
-		"	this.constrYmin = parseFloat(viewBox[1]);\n"
-		"	this.constrXmax = this.constrXmin + parseFloat(viewBox[2]);\n"
-		"	this.constrYmax = this.constrYmin + parseFloat(viewBox[3]);\n"
-		"	this.refMapX = parseFloat(this.myRefMap.getAttributeNS(null,\"x\")));\n"
-		"	this.refMapY = parseFloat(this.myRefMap.getAttributeNS(null,\"y\")));\n"
-		"	this.refMapWidth = parseFloat(this.myRefMap.getAttributeNS(null,\"width\")));\n"
-		"	this.pixSize = (this.constrXmax - this.constrXmin) / this.refMapWidth;\n"
-		"	this.mainMapObj = mainMapObj;\n"
-		"	//initialize coordinate display if showCoords == true\n"
-		"	this.showCoords = showCoords;\n"
-		"	if (this.showCoords == true) {\n"
-		"		if (typeof(coordXId) == \"string\")) {\n"
-		"			this.coordXText = document.getElementById(coordXId).firstChild;\n"
-		"		}\n"
-		"		else {\n"
-		"			alert(\"Error: coordXId needs to be an id of type string\"));\n"
-		"		}\n"
-		"		if (typeof(coordYId) == \"string\")) {\n"
-		"			this.coordYText = document.getElementById(coordYId).firstChild;\n"
-		"		}\n"
-		"		else {\n"
-		"			alert(\"Error: coordYId needs to be an id of type string\"));\n"
-		"		}\n"
-		"	}\n"
-		"	//determine if viewer is capable of getScreenCTM\n"
-		"	if (document.documentElement.getScreenCTM) {\n"
-		"		this.getScreenCTM = true;\n"
-		"	}\n"
-		"	else {\n"
-		"		this.getScreenCTM = false;		\n"
-		"	}\n"
-		"	this.status = false;\n"
-		"}\n"
-		"\n"
-		"dragObj.prototype.calcCoord = function(evt) {\n"
-		"	//with getScreenCTM the values are already in the inner coordinate system but without using the outer offset\n"
-		"	var coordPoint = myMapApp.calcCoord(evt,this.myRefMap);\n"
-		"	if (!this.getScreenCTM) {\n"
-		"		coordPoint.x = this.constrXmin + (coordPoint.x - this.refMapX) * this.pixSize;\n"
-		"		coordPoint.y = this.constrYmin + (coordPoint.y - this.refMapY) * this.pixSize;\n"
-		"	}\n"
-		"	return coordPoint;\n"
-		"}\n"
-		"\n"
-		"dragObj.prototype.handleEvent = function(evt) {\n"
-		"	if (evt.type == \"mousemove\")) {\n"
-		"		var mapCoords = this.calcCoord(evt);\n"
-		"		this.coordXText.nodeValue = \"X: \" + formatNumberString(mapCoords.x.toFixed(this.mainMapObj.nrDecimals)) + this.mainMapObj.units;\n"
-		"		this.coordYText.nodeValue = \"Y: \" + formatNumberString((mapCoords.y * -1).toFixed(this.mainMapObj.nrDecimals)) + this.mainMapObj.units;\n"
-		"	}\n"
-		"	this.drag(evt);\n"
-		"}\n"
-		"\n"
-		"dragObj.prototype.newView = function(x,y,width,height) {\n"
-		"	this.myDragger.setAttributeNS(null,\"x\"),x);\n"
-		"	this.myDragger.setAttributeNS(null,\"y\"),y);\n"
-		"	this.myDragger.setAttributeNS(null,\"width\"),width);\n"
-		"	this.myDragger.setAttributeNS(null,\"height\"),height);\n"
-		"	this.myDragSymbol.setAttributeNS(null,\"x\"),(x + width/2));\n"
-		"	this.myDragSymbol.setAttributeNS(null,\"y\"),(y + height/2));\n"
-		"	if (width < this.dragSymbThreshold) {\n"
-		"		this.myDragSymbol.setAttributeNS(null,\"visibility\"),\"visible\"));\n"
-		"	}\n"
-		"	else {\n"
-		"		this.myDragSymbol.setAttributeNS(null,\"visibility\"),\"hidden\"));	\n"
-		"	}\n"
-		"}\n"
-		"\n"
-	));
-}
-
-//---------------------------------------------------------
-const wxChar * CSVG_Interactive_Map::_Get_Code_Navigation_2(void)
-{
-	return( SG_STR_MBTOSG(
-		"//this method was previously called \"resizeDragger\" - now renamed to .getSliderVal\n"
-		"//this method receives values from the zoom slider\n"
-		"dragObj.prototype.getSliderVal = function(status,sliderGroupName,width) {\n"
-		"	var myX = parseFloat(this.myDragger.getAttributeNS(null,\"x\")));\n"
-		"	var myY = parseFloat(this.myDragger.getAttributeNS(null,\"y\")));\n"
-		"	var myWidth = parseFloat(this.myDragger.getAttributeNS(null,\"width\")));\n"
-		"	var myHeight = parseFloat(this.myDragger.getAttributeNS(null,\"height\")));\n"
-		"	var myCenterX = myX + myWidth / 2;\n"
-		"	var myCenterY = myY + myHeight / 2;\n"
-		"	var myRatio = myHeight / myWidth;\n"
-		"	var toMoveX = myCenterX - width / 2;\n"
-		"	var toMoveY = myCenterY - width * myRatio / 2;\n"
-		"	if (toMoveX < this.constrXmin) {\n"
-		"		toMoveX = this.constrXmin;\n"
-		"	}\n"
-		"	if ((toMoveX + width) > this.constrXmax) {\n"
-		"		toMoveX = this.constrXmax - width;\n"
-		"	}\n"
-		"	if (toMoveY < this.constrYmin) {\n"
-		"		toMoveY = this.constrYmin;\n"
-		"	}\n"
-		"	if ((toMoveY + width * myRatio) > this.constrYmax) {\n"
-		"		toMoveY = this.constrYmax - width * myRatio;\n"
-		"	}\n"
-		"	this.newView(toMoveX,toMoveY,width,width * myRatio);\n"
-		"	if (status == \"release\")) {\n"
-		"	           myMainMap.stopNavModes();\n"
-		"		this.mainMapObj.newViewBox(this.dragId,true);\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"dragObj.prototype.drag = function(evt) {\n"
-		"	if (evt.type == \"mousedown\")) {\n"
-		"		this.myRefMap.setAttributeNS(null,\"cursor\"),\"move\"));\n"
-		"		this.status = true;\n"
-		"	}\n"
-		"	if ((evt.type == \"mousemove\" || evt.type == \"mousedown\")) && this.status == true) {\n"
-		"		var coords = this.calcCoord(evt);\n"
-		"		var newEvtX = coords.x;\n"
-		"		var newEvtY = coords.y;\n"
-		"		var myX = parseFloat(this.myDragger.getAttributeNS(null,\"x\")));\n"
-		"		var myY = parseFloat(this.myDragger.getAttributeNS(null,\"y\")));\n"
-		"		var myWidth = parseFloat(this.myDragger.getAttributeNS(null,\"width\")));\n"
-		"		var myHeight = parseFloat(this.myDragger.getAttributeNS(null,\"height\")));\n"
-		"		var toMoveX = newEvtX - myWidth / 2;\n"
-		"		var toMoveY = newEvtY - myHeight / 2;\n"
-		"		if (toMoveX < this.constrXmin) {\n"
-		"			toMoveX = this.constrXmin;\n"
-		"		}\n"
-		"		if ((toMoveX + myWidth) > this.constrXmax) {\n"
-		"			toMoveX = this.constrXmax - myWidth;\n"
-		"		}\n"
-		"		if (toMoveY < this.constrYmin) {\n"
-		"			toMoveY = this.constrYmin;\n"
-		"		}\n"
-		"		if ((toMoveY + myHeight) > this.constrYmax) {\n"
-		"			toMoveY = this.constrYmax - myHeight;\n"
-		"		}\n"
-		"		this.newView(toMoveX,toMoveY,myWidth,myHeight);\n"
-		"	}\n"
-		"	if ((evt.type == \"mouseup\" || evt.type == \"mouseout\")) && this.status == true) {\n"
-		"		this.status = false;\n"
-		"		if (evt.detail == 1) { //second click is ignored\n"
-		"		               this.myRefMap.setAttributeNS(null,\"cursor\"),\"crosshair\"));\n"
-		"			this.mainMapObj.newViewBox('dragRectForRefMap',true);\n"
-		"		}\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"dragObj.prototype.zoom = function(inOrOut) {\n"
-		"	var myOldX = this.myDragger.getAttributeNS(null,\"x\"));\n"
-		"	var myOldY = this.myDragger.getAttributeNS(null,\"y\"));\n"
-		"	var myOldWidth = this.myDragger.getAttributeNS(null,\"width\"));\n"
-		"	var myOldHeight = this.myDragger.getAttributeNS(null,\"height\"));\n"
-		"	switch (inOrOut) {\n"
-		"		case \"in\":\n"
-		"			var myNewX = parseFloat(myOldX) + myOldWidth / 2 - (myOldWidth * this.mainMapObj.zoomFact * 0.5);\n"
-		"			var myNewY = parseFloat(myOldY) + myOldHeight / 2 - (myOldHeight * this.mainMapObj.zoomFact * 0.5);\n"
-		"			var myNewWidth = myOldWidth * this.mainMapObj.zoomFact;\n"
-		"			var myNewHeight = myOldHeight * this.mainMapObj.zoomFact;\n"
-		"			if (myNewWidth < this.mainMapObj.minWidth) {\n"
-		"				var myYXFact = this.mainMapObj.curHeight / this.mainMapObj.curWidth;\n"
-		"				myNewWidth = this.mainMapObj.minWidth;\n"
-		"				myNewHeight = myNewWidth * myYXFact;\n"
-		"				myNewX = parseFloat(myOldX) + myOldWidth / 2 - (myNewWidth * 0.5);\n"
-		"				myNewY = parseFloat(myOldY) + myOldHeight / 2 - (myNewHeight * 0.5);\n"
-		"			}\n"
-		"			break;\n"
-		"		case \"out\":\n"
-		"			var myNewX = parseFloat(myOldX) + myOldWidth / 2 - (myOldWidth * (1 + this.mainMapObj.zoomFact) * 0.5);\n"
-		"			var myNewY = parseFloat(myOldY) + myOldHeight / 2 - (myOldHeight * (1 + this.mainMapObj.zoomFact) * 0.5);\n"
-		"			var myNewWidth = myOldWidth * (1 + this.mainMapObj.zoomFact);\n"
-		"			var myNewHeight = myOldHeight * (1 + this.mainMapObj.zoomFact);\n"
-		"			break;\n"
-		"		default:\n"
-		"			var myNewX = this.constrXmin;\n"
-		"			var myNewY = this.constrYmin;\n"
-		"			var myNewWidth = this.constrXmax - this.constrXmin;\n"
-		"			var myNewHeight = this.constrYmax - this.constrYmin;\n"
-		"			break;\n"
-		"	}	\n"
-		"	//check if within constraints\n"
-		"	if (myNewWidth > (this.constrXmax - this.constrXmin)) {\n"
-		"		myNewWidth = this.constrXmax - this.constrXmin;\n"
-		"	}\n"
-		"	if (myNewHeight > (this.constrYmax - this.constrYmin)) {\n"
-		"		myNewHeight = this.constrYmax - this.constrYmin;\n"
-		"	}\n"
-		"	if (myNewX < this.constrXmin) {\n"
-		"		myNewX = this.constrXmin;\n"
-		"	}\n"
-		"	if (myNewY < this.constrYmin) {\n"
-		"		myNewY = this.constrYmin;\n"
-		"	}\n"
-		"	if ((myNewX + myNewWidth) > this.constrXmax) {\n"
-		"		myNewX = this.constrXmax - myNewWidth;\n"
-		"	}\n"
-		"	if ((myNewY + myNewHeight) > this.constrYmax) {\n"
-		"		myNewY = this.constrYmax - myNewHeight;\n"
-		"	}\n"
-		"	this.newView(myNewX,myNewY,myNewWidth,myNewHeight);\n"
-		"	this.mainMapObj.newViewBox(this.dragId,true);\n"
-		"}\n"
-		"\n"
-		"dragObj.prototype.pan = function (myX,myY,howmuch) {\n"
-		"	//get values from draggable rectangle\n"
-		"	var xulcorner = parseFloat(this.myDragger.getAttributeNS(null,\"x\")));\n"
-		"	var yulcorner = parseFloat(this.myDragger.getAttributeNS(null,\"y\")));\n"
-		"	var width = parseFloat(this.myDragger.getAttributeNS(null,\"width\")));\n"
-		"	var height = parseFloat(this.myDragger.getAttributeNS(null,\"height\")));\n"
-		"\n"
-		"	//set values of draggable rectangle\n"
-		"	var rectXulcorner = xulcorner + howmuch * width * myX;\n"
-		"	var rectYulcorner = yulcorner + howmuch * height * myY;\n"
-		"	//check if within constraints\n"
-		"	if (rectXulcorner < this.constrXmin) {\n"
-		"		rectXulcorner = this.constrXmin;\n"
-		"	}\n"
-		"	if (rectYulcorner < this.constrYmin) {\n"
-		"		rectYulcorner = this.constrYmin;\n"
-		"	}\n"
-		"	if ((rectXulcorner + width) > this.constrXmax) {\n"
-		"		rectXulcorner = this.constrXmax - width;\n"
-		"	}\n"
-		"	if ((rectYulcorner + height) > this.constrYmax) {\n"
-		"		rectYulcorner = this.constrYmax - height;\n"
-		"	}\n"
-		"	this.newView(rectXulcorner,rectYulcorner,width,height);\n"
-		"\n"
-		"	//set viewport of main map\n"
-		"	if ((xulcorner != rectXulcorner) || (yulcorner != rectYulcorner)) {\n"
-		"		this.mainMapObj.newViewBox(this.dragId,true);\n"
-		"	}\n"
-		"\n"
-		"	statusChange(\"map ready ...\"));\n"
-		"}\n"
-		"\n"
-		"//remove all temporarily used elements and event listeners\n"
-		"dragObj.prototype.cleanUp = function() {\n"
-		"	//remove eventlisteners\n"
-		"	if (this.showCoords == true) {\n"
-		"		//add event listener for coordinate display\n"
-		"		this.myRefMap.removeEventListener(\"mousemove\"),this,false);\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"function zoomIt(evt,inOrOut) {\n"
-		"	if (evt.detail == 1) { //only react on first click, double click: second click is ignored\n"
-		"		if (inOrOut == \"in\")) {\n"
-		"			if (Math.round(myMainMap.curWidth) > myMainMap.minWidth) {\n"
-		"				myMapApp.refMapDragger.zoom(\"in\"));\n"
-		"			}\n"
-		"			else {\n"
-		"				statusChange(\"Maximum zoom factor reached. Cannot zoom in any more.\"));\n"
-		"			}\n"
-		"		}\n"
-		"		if (inOrOut == \"out\")) {\n"
-		"			if (Math.round(myMainMap.curWidth) < myMainMap.maxWidth) {\n"
-		"				myMapApp.refMapDragger.zoom(\"out\"));\n"
-		"			}\n"
-		"			else {\n"
-		"				statusChange(\"Minimum zoom factor reached. Cannot zoom out any more.\"));\n"
-		"			}\n"
-		"		}\n"
-		"		if (inOrOut == \"full\")) {\n"
-		"			if (Math.round(myMainMap.curWidth) < myMainMap.maxWidth) {\n"
-		"				myMapApp.refMapDragger.zoom(\"full\"));\n"
-		"			}\n"
-		"			else {\n"
-		"				statusChange(\"Full view already reached.\"));\n"
-		"			}\n"
-		"		}\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//this function starts various zoom actions or map extent history functions\n"
-		"function zoomImageButtons(id,evt) {\n"
-		"	myMainMap.stopNavModes();\n"
-		"	if (id == \"zoomIn\")) {\n"
-		"		zoomIt(evt,'in');\n"
-		"	}\n"
-		"	if (id == \"zoomOut\")) {\n"
-		"		zoomIt(evt,'out');\n"
-		"	}\n"
-		"	if (id == \"zoomFull\")) {\n"
-		"		zoomIt(evt,'full');\n"
-		"	}\n"
-		"	if (id == \"backwardExtent\")) {\n"
-		"		myMainMap.backwardExtent();\n"
-		"	}\n"
-		"	if (id == \"forwardExtent\")) {\n"
-		"		myMainMap.forwardExtent();\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//this function starts various interactive zoom or pan modes\n"
-		"function zoomImageSwitchButtons(id,evt,onOrOff) {\n"
-		"	myMainMap.stopNavModes();\n"
-		"	if (onOrOff) {\n"
-		"                      if (id == \"infoButton\")) {\n"
-		"                      \n"
-		"                      }\n"
-		"                      else {\n"
-		"		    if (id == \"zoomManual\")) {\n"
-		"			    myMainMap.zoomManual(evt);\n"
-		"		    }\n"
-		"		    if (id == \"panManual\")) {\n"
-		"			    myMainMap.panManual(evt);\n"
-		"		    }\n"
-		"		    if (id == \"recenterMap\")) {\n"
-		"			    myMainMap.recenter(evt);\n"
-		"		    }\n"
-		"		    if (myMapApp.buttons[\"infoButton\"].getSwitchValue()) {\n"
-		"		        myMapApp.buttons[\"infoButton\"].setSwitchValue(false,false);\n"
-		"		    }\n"
-		"		}\n"
-		"	}\n"
-		"	else {\n"
-		"	    if (id == \"infoButton\")) {\n"
-		"	        myMapApp.buttons[\"infoButton\"].setSwitchValue(true,false);\n"
-		"	    }\n"
-		"	}\n"
-		"}\n"
-		"\n"
-		"//alert map extent\n"
-		"function showExtent() {\n"
-		"	with(myMainMap) {\n"
-		"		alert(\n"
-		"         \"Xmin=\"+curxOrig.toFixed(nrDecimals)+units+\n"
-		"         \"); Xmax=\"+(curxOrig + curWidth).toFixed(nrDecimals)+units+\n"
-		"         \"\\nYmin=\"+((curyOrig + curHeight) * -1).toFixed(nrDecimals) +units+\n"
-		"         \"); Ymax=\"+(curyOrig*-1).toFixed(nrDecimals)+units+\n"
-		"         \"\\nWidth=\"+curWidth.toFixed(nrDecimals)+units+\n"
-		"         \"); Height=\"+curHeight.toFixed(nrDecimals)+units);\n"
-		"	}\n"
-		"}\n"
-		"\n"
-	));
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
diff --git a/src/saga_core/saga_gui/svg_interactive_map.h b/src/saga_core/saga_gui/svg_interactive_map.h
deleted file mode 100644
index 73c38ed..0000000
--- a/src/saga_core/saga_gui/svg_interactive_map.h
+++ /dev/null
@@ -1,135 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//              SVG_Interactive_map.cpp                  //
-//                                                       //
-//          Copyright (C) 2005 by Victor Olaya           //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Victor Olaya                           //
-//                                                       //
-//    e-mail:     volaya at saga-gis.org                    //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef _HEADER_INCLUDED__SAGA_GUI__svg_interactive_map_H
-#define _HEADER_INCLUDED__SAGA_GUI__svg_interactive_map_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <saga_api/doc_svg.h>
-
-#include "wksp_map.h"
-#include "wksp_shapes.h"
-#include "wksp_grid.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CSVG_Interactive_Map : public CSG_Doc_SVG
-{
-public:
-	CSVG_Interactive_Map(void);
-	virtual ~CSVG_Interactive_Map(void);
-
-	void				Create_From_Map				(CWKSP_Map *pMap, CSG_Shapes *pIndexLayer, const wxChar *Filename);
-
-
-private:
-
-	CSG_String			m_Directory;
-	double				m_dWidth;
-
-
-	void				_Write_Code					(const wxChar *FileName, const wxChar *Code);
-
-	void				_Add_Opening				(CSG_Rect r);
-	const wxChar *		_Get_Opening_Code_1			(void);
-	const wxChar *		_Get_Opening_Code_2			(void);
-
-	void				_Add_CheckBoxes				(CWKSP_Map *pMap);
-	void				_Add_Shapes					(CWKSP_Shapes *pLayer);
-	bool				_Add_Shape					(CSG_Shape *pShape, int Fill_Color, int Line_Color, double Line_Width, double Point_Width);
-	void				_Add_Grid					(CWKSP_Grid *pLayer);
-	void				_Add_ReferenceMap			(CSG_Shapes *pIndexLayer, CSG_Rect r);
-	void				_Add_Label					(const wxChar* Label, CSG_Shape *pShape, double dSize, const wxChar* Unit);
-
-	const wxChar *		_Get_Code_1					(void);
-	const wxChar *		_Get_Code_2					(void);
-	const wxChar *		_Get_Code_3					(void);
-	const wxChar *		_Get_Code_4					(void);
-	const wxChar *		_Get_Code_5					(void);
-	const wxChar *		_Get_Code_Closing_1			(void);
-
-	const wxChar *		_Get_Code_CheckBox			(void);
-	const wxChar *		_Get_Code_MapApp			(void);
-	const wxChar *		_Get_Code_Timer				(void);
-	const wxChar *		_Get_Code_Slider			(void);
-	const wxChar *		_Get_Code_Helper			(void);
-	const wxChar *		_Get_Code_Buttons			(void);
-	const wxChar *		_Get_Code_Navigation_1		(void);
-	const wxChar *		_Get_Code_Navigation_2		(void);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__svg_interactive_map_H
diff --git a/src/saga_core/saga_gui/view_map.cpp b/src/saga_core/saga_gui/view_map.cpp
index 2074b1c..4caafbc 100644
--- a/src/saga_core/saga_gui/view_map.cpp
+++ b/src/saga_core/saga_gui/view_map.cpp
@@ -92,8 +92,6 @@ BEGIN_EVENT_TABLE(CVIEW_Map, CVIEW_Base)
 	EVT_MENU			(ID_CMD_MAP_LAYOUT_SHOW			, CVIEW_Map::On_Map_Layout_Show)
 	EVT_MENU			(ID_CMD_MAP_SAVE_IMAGE			, CVIEW_Map::On_Map_Save_Image)
 	EVT_MENU			(ID_CMD_MAP_SAVE_IMAGE_ON_CHANGE, CVIEW_Map::On_Map_Save_Image_On_Change)
-	EVT_MENU			(ID_CMD_MAP_SAVE_PDF_INDEXED	, CVIEW_Map::On_Map_Save_PDF_Indexed)
-	EVT_MENU			(ID_CMD_MAP_SAVE_INTERACTIVE_SVG, CVIEW_Map::On_Map_Save_Interactive_SVG)
 
 	EVT_MENU			(ID_CMD_MAP_ZOOM_FULL			, CVIEW_Map::On_Map_Zoom_Full)
 	EVT_MENU			(ID_CMD_MAP_ZOOM_BACK			, CVIEW_Map::On_Map_Zoom_Back)
@@ -163,11 +161,6 @@ wxMenu * CVIEW_Map::_Create_Menu(void)
 //	CMD_Menu_Add_Item(pMenu, true , ID_CMD_MAP_SAVE_IMAGE_ON_CHANGE);
 	CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAPS_SAVE_TO_CLIPBOARD);
 	CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAPS_SAVE_TO_CLIPBOARD_LEGEND);
-	if( CSG_Doc_PDF::Get_Version() != NULL )
-	{
-		CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAP_SAVE_PDF_INDEXED);
-	}
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAP_SAVE_INTERACTIVE_SVG);
 	pMenu->AppendSeparator();
 	CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAP_ZOOM_BACK);
 	CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAP_ZOOM_FORWARD);
@@ -443,18 +436,6 @@ void CVIEW_Map::On_Map_Save_Image_On_Change(wxCommandEvent &event)
 	m_pMap->SaveAs_Image_On_Change();
 }
 
-//---------------------------------------------------------
-void CVIEW_Map::On_Map_Save_PDF_Indexed(wxCommandEvent &event)
-{
-	m_pMap->SaveAs_PDF_Indexed();
-}
-
-//---------------------------------------------------------
-void CVIEW_Map::On_Map_Save_Interactive_SVG(wxCommandEvent &event)
-{
-	m_pMap->SaveAs_Interactive_SVG();
-}
-
 
 ///////////////////////////////////////////////////////////
 //														 //
diff --git a/src/saga_core/saga_gui/view_map.h b/src/saga_core/saga_gui/view_map.h
index 3b201bc..2fd114a 100644
--- a/src/saga_core/saga_gui/view_map.h
+++ b/src/saga_core/saga_gui/view_map.h
@@ -98,8 +98,6 @@ public:
 	void							On_Map_Layout_Show			(wxCommandEvent  &event);
 	void							On_Map_Save_Image			(wxCommandEvent  &event);
 	void							On_Map_Save_Image_On_Change	(wxCommandEvent  &event);
-	void							On_Map_Save_PDF_Indexed		(wxCommandEvent  &event);
-	void							On_Map_Save_Interactive_SVG (wxCommandEvent	 &event);
 
 	void							On_Map_Zoom_Full			(wxCommandEvent  &event);
 	void							On_Map_Zoom_Back			(wxCommandEvent  &event);
diff --git a/src/saga_core/saga_gui/view_map_control.cpp b/src/saga_core/saga_gui/view_map_control.cpp
index d9e2514..f56b0d5 100644
--- a/src/saga_core/saga_gui/view_map_control.cpp
+++ b/src/saga_core/saga_gui/view_map_control.cpp
@@ -1,1064 +1,1068 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                 VIEW_Map_Control.cpp                  //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <wx/window.h>
-#include <wx/image.h>
-
-#include "res_images.h"
-
-#include "helper.h"
-#include "dc_helper.h"
-
-#include "wksp_map.h"
-#include "wksp_module.h"
-#include "wksp_grid.h"
-#include "wksp_shapes.h"
-
-#include "view_map.h"
-#include "view_map_control.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define GET_KEYS(e)	((e.LeftIsDown()   ? MODULE_INTERACTIVE_KEY_LEFT   : 0)\
-					|(e.MiddleIsDown() ? MODULE_INTERACTIVE_KEY_MIDDLE : 0)\
-					|(e.RightIsDown()  ? MODULE_INTERACTIVE_KEY_RIGHT  : 0)\
-					|(e.ShiftDown()    ? MODULE_INTERACTIVE_KEY_SHIFT  : 0)\
-					|(e.AltDown()      ? MODULE_INTERACTIVE_KEY_ALT    : 0)\
-					|(e.ControlDown()  ? MODULE_INTERACTIVE_KEY_CTRL   : 0))
-
-//---------------------------------------------------------
-#define STANDARD_ZOOM_FACTOR	50
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-BEGIN_EVENT_TABLE(CVIEW_Map_Control, wxPanel)
-	EVT_PAINT			(CVIEW_Map_Control::On_Paint)
-	EVT_SIZE			(CVIEW_Map_Control::On_Size)
-	EVT_KEY_DOWN		(CVIEW_Map_Control::On_Key_Down)
-
-	EVT_MOUSEWHEEL		(CVIEW_Map_Control::On_Mouse_Wheel)
-	EVT_MOTION			(CVIEW_Map_Control::On_Mouse_Motion)
-	EVT_LEFT_DOWN		(CVIEW_Map_Control::On_Mouse_LDown)
-	EVT_LEFT_UP			(CVIEW_Map_Control::On_Mouse_LUp)
-	EVT_LEFT_DCLICK		(CVIEW_Map_Control::On_Mouse_LDClick)
-	EVT_RIGHT_DOWN		(CVIEW_Map_Control::On_Mouse_RDown)
-	EVT_RIGHT_UP		(CVIEW_Map_Control::On_Mouse_RUp)
-	EVT_RIGHT_DCLICK	(CVIEW_Map_Control::On_Mouse_RDClick)
-	EVT_MIDDLE_DOWN		(CVIEW_Map_Control::On_Mouse_MDown)
-	EVT_MIDDLE_UP		(CVIEW_Map_Control::On_Mouse_MUp)
-END_EVENT_TABLE()
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CVIEW_Map_Control::CVIEW_Map_Control(CVIEW_Map *pParent, CWKSP_Map *pMap)
-	: wxPanel(pParent, -1, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE)
-{
-	SYS_Set_Color_BG_Window(this);
-
-	m_pParent	= (CVIEW_Map *)pParent;
-	m_pMap		= pMap;
-
-	m_Mode		= -1;
-	Set_Mode(MAP_MODE_ZOOM);
-
-	m_Drag_Mode	= MODULE_INTERACTIVE_DRAG_NONE;
-}
-
-//---------------------------------------------------------
-CVIEW_Map_Control::~CVIEW_Map_Control(void)
-{
-	_Distance_Reset();
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CVIEW_Map_Control::Set_Mode(int Mode)
-{
-	if( m_Mode != Mode )
-	{
-		if( m_Mode == MAP_MODE_DISTANCE )
-		{
-			_Distance_Reset();
-		}
-
-		m_Mode	= Mode;
-
-		switch( m_Mode )
-		{
-		case MAP_MODE_ZOOM: default:
-			SetCursor(IMG_Get_Cursor(ID_IMG_CRS_SELECT));
-			break;
-
-		case MAP_MODE_PAN:
-			SetCursor(IMG_Get_Cursor(ID_IMG_CRS_HAND));
-			break;
-
-		case MAP_MODE_PAN_DOWN:
-			SetCursor(IMG_Get_Cursor(ID_IMG_CRS_HAND_GRAP));
-			break;
-
-		case MAP_MODE_SELECT:
-			SetCursor(IMG_Get_Cursor(ID_IMG_CRS_INFO));
-			break;
-
-		case MAP_MODE_DISTANCE:
-			SetCursor(IMG_Get_Cursor(ID_IMG_CRS_SELECT));
-			_Distance_Reset();
-			break;
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-inline void CVIEW_Map_Control::_Set_StatusBar(CSG_Point ptWorld)
-{
-	STATUSBAR_Set_Text(wxString::Format(wxT("X%f"), ptWorld.Get_X()), STATUSBAR_VIEW_X);
-	STATUSBAR_Set_Text(wxString::Format(wxT("Y%f"), ptWorld.Get_Y()), STATUSBAR_VIEW_Y);
-
-	if( m_Mode == MAP_MODE_DISTANCE )
-	{
-		STATUSBAR_Set_Text(wxString::Format(wxT("D %f"), m_Distance + m_Distance_Move), STATUSBAR_VIEW_Z);
-	}
-	else if( Get_Active_Layer() )
-	{
-		STATUSBAR_Set_Text(wxString::Format(wxT("Z %s"), Get_Active_Layer()->Get_Value(ptWorld, _Get_World(2.0)).c_str()), STATUSBAR_VIEW_Z);
-	}
-	else
-	{
-		STATUSBAR_Set_Text(wxT("Z"), STATUSBAR_VIEW_Z);
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-inline wxRect CVIEW_Map_Control::_Get_Client(void)
-{
-	return( wxRect(wxPoint(0, 0), GetClientSize()) );
-}
-
-//---------------------------------------------------------
-inline wxPoint CVIEW_Map_Control::_Get_Client(TSG_Point Point)
-{
-	wxRect		rClient(_Get_Client());
-	CSG_Rect	rWorld(m_pMap->Get_World(rClient));
-	double		World2DC	= (double)rClient.GetWidth() / rWorld.Get_XRange();
-
-	return( wxPoint(          (int)(0.5 + (Point.x - rWorld.Get_XMin()) * World2DC),
-		rClient.GetHeight() - (int)(0.5 + (Point.y - rWorld.Get_YMin()) * World2DC)
-	));
-}
-
-//---------------------------------------------------------
-inline CSG_Point CVIEW_Map_Control::_Get_World(wxPoint ptClient)
-{
-	return( m_pMap->Get_World(_Get_Client(), ptClient) );
-}
-
-//---------------------------------------------------------
-inline double CVIEW_Map_Control::_Get_World(double xClient)
-{
-	wxRect		rClient(_Get_Client());
-	CSG_Rect	rWorld(m_pMap->Get_World(rClient));
-
-	return( xClient * rWorld.Get_XRange() / (double)rClient.GetWidth() );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::_Draw_Inverse(wxPoint ptA, wxPoint ptB)
-{
-	if( m_Drag_Mode != MODULE_INTERACTIVE_DRAG_NONE )
-	{
-		wxClientDC	dc(this);
-
-		dc.SetLogicalFunction(wxINVERT);
-
-		switch( m_Drag_Mode )
-		{
-		case MODULE_INTERACTIVE_DRAG_LINE:
-			dc.DrawLine			(ptA.x, ptA.y, ptB.x, ptB.y);
-			break;
-
-		case MODULE_INTERACTIVE_DRAG_BOX:
-			dc.DrawRectangle	(ptA.x, ptA.y, ptB.x - ptA.x, ptB.y - ptA.y);
-			break;
-
-		case MODULE_INTERACTIVE_DRAG_CIRCLE:
-			dc.DrawCircle		(ptA.x, ptA.y, (int)SG_Get_Distance(ptA.x, ptA.y, ptB.x, ptB.y));
-			break;
-		}
-	}
-}
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::_Draw_Inverse(wxPoint ptA, wxPoint ptB_Old, wxPoint ptB_New)
-{
-	if( m_Drag_Mode != MODULE_INTERACTIVE_DRAG_NONE )
-	{
-		wxClientDC	dc(this);
-
-		dc.SetLogicalFunction(wxINVERT);
-
-		switch( m_Drag_Mode )
-		{
-		case MODULE_INTERACTIVE_DRAG_LINE:
-			dc.DrawLine			(ptA.x, ptA.y, ptB_Old.x, ptB_Old.y);
-			dc.DrawLine			(ptA.x, ptA.y, ptB_New.x, ptB_New.y);
-			break;
-
-		case MODULE_INTERACTIVE_DRAG_BOX:
-			dc.DrawRectangle	(ptA.x, ptA.y, ptB_Old.x - ptA.x, ptB_Old.y - ptA.y);
-			dc.DrawRectangle	(ptA.x, ptA.y, ptB_New.x - ptA.x, ptB_New.y - ptA.y);
-			break;
-
-		case MODULE_INTERACTIVE_DRAG_CIRCLE:
-			dc.DrawCircle		(ptA.x, ptA.y, (int)SG_Get_Distance(ptA.x, ptA.y, ptB_Old.x, ptB_Old.y));
-			dc.DrawCircle		(ptA.x, ptA.y, (int)SG_Get_Distance(ptA.x, ptA.y, ptB_New.x, ptB_New.y));
-			break;
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CVIEW_Map_Control::_Zoom(wxPoint A, wxPoint B)
-{
-	CSG_Rect	rWorld;
-
-	if( A.x == B.x && A.y == B.y )
-	{
-		return( _Zoom(_Get_World(A), true) );
-	}
-
-	rWorld.Assign(_Get_World(A), _Get_World(B));
-
-	m_pMap->Set_Extent(rWorld);
-
-	return( true );
-}
-
-bool CVIEW_Map_Control::_Zoom(CSG_Point ptCenter, bool bZoomIn)
-{
-	CSG_Rect	rWorld(m_pMap->Get_Extent());
-
-	rWorld.Move(ptCenter - rWorld.Get_Center());
-
-	if( bZoomIn )
-	{
-		rWorld.Deflate(STANDARD_ZOOM_FACTOR);
-	}
-	else
-	{
-		rWorld.Inflate(STANDARD_ZOOM_FACTOR);
-	}
-
-	m_pMap->Set_Extent(rWorld);
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CVIEW_Map_Control::_Pan(wxPoint A, wxPoint B)
-{
-	if( A.x != B.x || A.y != B.y )
-	{
-		wxClientDC	dc(this);
-
-		dc.SetBackground(*wxWHITE_BRUSH);
-		dc.Clear();
-		dc.DrawBitmap(m_Bitmap, B.x - A.x, B.y - A.y, false);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CVIEW_Map_Control::_Move(wxPoint &A, wxPoint B)
-{
-	if( A.x != B.x || A.y != B.y )
-	{
-		CSG_Rect	rWorld;
-
-		rWorld.Assign(m_pMap->Get_Extent());
-		rWorld.Move(_Get_World(A) - _Get_World(B));
-		m_pMap->Set_Extent(rWorld);
-
-		A	= B;
-
-		return( true );
-	}
-
-	return( false );
-}
-
-bool CVIEW_Map_Control::_Move(wxPoint ptMove)
-{
-	return( _Move(ptMove, wxPoint(0, 0)) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::_Distance_Reset(void)
-{
-	m_Distance_Pts.Clear();
-
-	m_Distance		= 0.0;
-	m_Distance_Move	= 0.0;
-
-	Refresh(false);
-}
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::_Distance_Add(wxPoint Point)
-{
-	int		n	= m_Distance_Pts.Get_Count();
-
-	m_Distance_Pts.Add(_Get_World(Point));
-
-	if( n > 0 )
-	{
-		m_Distance	+= SG_Get_Distance(m_Distance_Pts[n], m_Distance_Pts[n - 1]);
-	}
-
-	m_Distance_Move	= 0.0;
-
-	wxClientDC	dc(this);
-	_Distance_Draw(dc);
-}
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::_Distance_Draw(wxDC &dc)
-{
-	int		n	= m_Distance_Pts.Get_Count();
-
-	if( m_Mode == MAP_MODE_DISTANCE && n > 0 )
-	{
-		int		i;
-		wxPoint	A, B;
-
-		dc.SetPen(wxPen(*wxWHITE, 4));
-		for(i=1, A=_Get_Client(m_Distance_Pts[0]); i<n; i++)
-		{
-			B	= A;
-			A	= _Get_Client(m_Distance_Pts[i]);
-			dc.DrawLine(A.x, A.y, B.x, B.y);
-		}
-
-		dc.SetPen(wxPen(*wxBLACK, 2));
-		for(i=1, A=_Get_Client(m_Distance_Pts[0]); i<n; i++)
-		{
-			B	= A;
-			A	= _Get_Client(m_Distance_Pts[i]);
-			dc.DrawLine(A.x, A.y, B.x, B.y);
-		}
-
-		dc.SetPen(wxNullPen);
-		dc.SetLogicalFunction(wxINVERT);
-		A	= _Get_Client(m_Distance_Pts[n - 1]);
-		dc.DrawLine(A.x, A.y, m_Mouse_Move.x, m_Mouse_Move.y);
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Paint(wxPaintEvent &event)
-{
-	if( m_Bitmap.Ok() )
-	{
-		wxPaintDC	dc(this);
-
-		dc.DrawBitmap(m_Bitmap, 0, 0, false);
-
-		_Distance_Draw(dc);
-	}
-}
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Size(wxSizeEvent &event)
-{
-	wxRect	r(_Get_Client());
-
-	if( m_Bitmap.GetWidth() != r.GetWidth() || m_Bitmap.GetHeight() != r.GetHeight() )
-	{
-		m_Bitmap.Create(r.GetWidth(), r.GetHeight());
-
-		Refresh_Map();
-	}
-}
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::Refresh_Map(void)
-{
-	if( m_Bitmap.Ok() )
-	{
-		wxMemoryDC	dc;
-
-		dc.SelectObject(m_Bitmap);
-		m_pMap->Draw_Map(dc, 1.0, _Get_Client(), true);
-		dc.SelectObject(wxNullBitmap);
-
-		m_pParent->Ruler_Refresh();
-
-		Refresh(false);
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Key_Down(wxKeyEvent &event)
-{
-	if( m_pMap->Find_Layer(Get_Active_Layer()) && Get_Active_Layer()->Edit_On_Key_Down(event.GetKeyCode()) )
-	{
-		return;
-	}
-
-	switch( event.GetKeyCode() )
-	{
-	default:
-		event.Skip();
-		break;
-
-	case WXK_PRIOR:
-		_Zoom(m_pMap->Get_Extent().Get_Center(), true);
-		break;
-		
-	case WXK_NEXT:
-		_Zoom(m_pMap->Get_Extent().Get_Center(), false);
-		break;
-		
-	case WXK_LEFT:
-		_Move(wxPoint(-10,   0));
-		break;
-
-	case WXK_RIGHT:
-		_Move(wxPoint( 10,   0));
-		break;
-
-	case WXK_UP:
-		_Move(wxPoint(  0, -10));
-		break;
-
-	case WXK_DOWN:
-		_Move(wxPoint(  0,  10));
-		break;
-
-	case WXK_F2:
-		m_pMap->SaveAs_Image();
-		break;
-
-	case 'C':
-		if( event.GetModifiers() == wxMOD_CONTROL )
-		{
-			m_pMap->SaveAs_Image_Clipboard(false);
-		}
-		else if( event.GetModifiers() == wxMOD_ALT )
-		{
-			m_pMap->SaveAs_Image_Clipboard(GetClientSize().x, GetClientSize().y, -1);
-		}
-		break;
-
-	case 'L':
-		if( event.GetModifiers() == wxMOD_CONTROL )
-		{
-			m_pMap->SaveAs_Image_Clipboard(true);
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Mouse_LDown(wxMouseEvent &event)
-{
-	bool	bCaptureMouse	= true;
-
-	m_Mouse_Down	= m_Mouse_Move	= event.GetPosition();
-
-	switch( m_Mode )
-	{
-	//-----------------------------------------------------
-	case MAP_MODE_SELECT:
-		if( g_pModule && g_pModule->is_Interactive() )
-		{
-			m_Drag_Mode		= ((CSG_Module_Interactive *)g_pModule->Get_Module())->Get_Drag_Mode();
-			bCaptureMouse	= !g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_LDOWN, GET_KEYS(event));
-		}
-		else if( m_pMap->Find_Layer(Get_Active_Layer()) )
-		{
-			switch(	Get_Active_Layer()->Get_Type() )
-			{
-			default:
-				m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
-				break;
-
-			case WKSP_ITEM_Grid:
-				m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_BOX;
-				break;
-
-			case WKSP_ITEM_Shapes:
-				m_Drag_Mode		= ((CWKSP_Shapes *)Get_Active_Layer())->is_Editing()
-								? MODULE_INTERACTIVE_DRAG_NONE
-								: MODULE_INTERACTIVE_DRAG_BOX;
-				break;
-			}
-
-			Get_Active_Layer()->Edit_On_Mouse_Down(_Get_World(event.GetPosition()), _Get_World(1.0), GET_KEYS(event));
-		}
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_DISTANCE:
-		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_ZOOM:
-		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_BOX;
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN:
-		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
-		Set_Mode(MAP_MODE_PAN_DOWN);
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN_DOWN:
-		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
-		break;
-	}
-
-	//-----------------------------------------------------
-	if( bCaptureMouse )
-	{
-		CaptureMouse();
-	}
-
-	event.Skip();
-}
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Mouse_LUp(wxMouseEvent &event)
-{
-	if( HasCapture() )
-	{
-		ReleaseMouse();
-	}
-
-	_Draw_Inverse(m_Mouse_Down, event.GetPosition());
-	m_Drag_Mode	= MODULE_INTERACTIVE_DRAG_NONE;
-
-	switch( m_Mode )
-	{
-	//-----------------------------------------------------
-	case MAP_MODE_SELECT:
-		if( g_pModule )
-		{
-			g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_LUP, GET_KEYS(event));
-		}
-		else if( m_pMap->Find_Layer(Get_Active_Layer()) )
-		{
-			Get_Active_Layer()->Edit_On_Mouse_Up(_Get_World(event.GetPosition()), _Get_World(1.0), GET_KEYS(event)|MODULE_INTERACTIVE_KEY_LEFT);
-		}
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_DISTANCE:
-		_Distance_Add(event.GetPosition());
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_ZOOM:
-		_Zoom(m_Mouse_Down, event.GetPosition());
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN_DOWN:
-		Set_Mode(MAP_MODE_PAN);
-		_Move(m_Mouse_Down, event.GetPosition());
-		break;
-	}
-}
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Mouse_LDClick(wxMouseEvent &event)
-{
-	switch( m_Mode )
-	{
-	//-----------------------------------------------------
-	case MAP_MODE_SELECT:
-		if( g_pModule )
-		{
-			g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_LDCLICK, GET_KEYS(event));
-		}
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_DISTANCE:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_ZOOM:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN_DOWN:
-		break;
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Mouse_RDown(wxMouseEvent &event)
-{
-	m_Mouse_Down	= m_Mouse_Move	= event.GetPosition();
-
-	_Draw_Inverse(m_Mouse_Down, event.GetPosition());
-	m_Drag_Mode	= MODULE_INTERACTIVE_DRAG_NONE;
-
-	switch( m_Mode )
-	{
-	//-----------------------------------------------------
-	case MAP_MODE_SELECT:
-		if( g_pModule )
-		{
-			g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_RDOWN, GET_KEYS(event));
-		}
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_DISTANCE:
-		_Distance_Reset();
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_ZOOM:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN_DOWN:
-		break;
-	}
-}
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Mouse_RUp(wxMouseEvent &event)
-{
-	wxMenu	*pMenu	= NULL;
-
-	m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
-
-	switch( m_Mode )
-	{
-	//-----------------------------------------------------
-	case MAP_MODE_SELECT:
-		if( g_pModule )
-		{
-			g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_RUP, GET_KEYS(event));
-		}
-		else if( m_pMap->Find_Layer(Get_Active_Layer()) )
-		{
-			if(	!Get_Active_Layer()->Edit_On_Mouse_Up(_Get_World(event.GetPosition()), _Get_World(1.0), GET_KEYS(event)|MODULE_INTERACTIVE_KEY_RIGHT)
-			&&	(pMenu = Get_Active_Layer()->Edit_Get_Menu()) != NULL )
-			{
-				PopupMenu(pMenu, event.GetPosition());
-
-				delete(pMenu);
-			}
-		}
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_DISTANCE:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_ZOOM:
-		_Zoom(_Get_World(event.GetPosition()), false);
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN_DOWN:
-		break;
-	}
-}
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Mouse_RDClick(wxMouseEvent &event)
-{
-	switch( m_Mode )
-	{
-	//-----------------------------------------------------
-	case MAP_MODE_SELECT:
-		if( g_pModule )
-		{
-			g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_RDCLICK, GET_KEYS(event));
-		}
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_DISTANCE:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_ZOOM:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN_DOWN:
-		break;
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Mouse_MDown(wxMouseEvent &event)
-{
-	bool	bCaptureMouse	= true;
-
-	m_Mouse_Down	= m_Mouse_Move	= event.GetPosition();
-
-	switch( m_Mode )
-	{
-	//-----------------------------------------------------
-	case MAP_MODE_SELECT:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_DISTANCE:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_ZOOM:
-		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
-		Set_Mode(MAP_MODE_PAN_DOWN);
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN_DOWN:
-		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
-		break;
-	}
-
-	//-----------------------------------------------------
-	if( bCaptureMouse )
-	{
-		CaptureMouse();
-	}
-
-	event.Skip();
-}
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Mouse_MUp(wxMouseEvent &event)
-{
-	if( HasCapture() )
-	{
-		ReleaseMouse();
-	}
-
-	_Draw_Inverse(m_Mouse_Down, event.GetPosition());
-	m_Drag_Mode	= MODULE_INTERACTIVE_DRAG_NONE;
-
-	switch( m_Mode )
-	{
-	//-----------------------------------------------------
-	case MAP_MODE_SELECT:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_DISTANCE:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_ZOOM:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN_DOWN:
-		Set_Mode(MAP_MODE_ZOOM);
-		_Move(m_Mouse_Down, event.GetPosition());
-		break;
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Mouse_Motion(wxMouseEvent &event)
-{
-	if( m_Mode != MAP_MODE_PAN_DOWN )
-	{
-		_Set_StatusBar(_Get_World(event.GetPosition()));
-
-		m_pParent->Ruler_Set_Position(event.GetPosition().x, event.GetPosition().y);
-	}
-
-	switch( m_Mode )
-	{
-	//-----------------------------------------------------
-	case MAP_MODE_SELECT:
-		if( g_pModule )
-		{
-			TSG_Module_Interactive_Mode	iMode
-				= event.LeftIsDown()	? MODULE_INTERACTIVE_MOVE_LDOWN
-				: event.MiddleIsDown()	? MODULE_INTERACTIVE_MOVE_MDOWN
-				: event.RightIsDown()	? MODULE_INTERACTIVE_MOVE_RDOWN
-										: MODULE_INTERACTIVE_MOVE;
-
-			g_pModule->Execute(_Get_World(event.GetPosition()), iMode, GET_KEYS(event));
-		}
-		else if( m_pMap->Find_Layer(Get_Active_Layer()) )
-		{
-			Get_Active_Layer()->Edit_On_Mouse_Move(
-				this, m_pMap->Get_World(_Get_Client()),
-				event.GetPosition(), m_Mouse_Move,
-				GET_KEYS(event)
-			);
-		}
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_DISTANCE:
-		if( m_Distance_Pts.Get_Count() > 0 )
-		{
-			int			n	= m_Distance_Pts.Get_Count();
-			wxClientDC	dc(this);
-			wxPoint		Last(_Get_Client(m_Distance_Pts[n - 1]));
-			dc.SetLogicalFunction(wxINVERT);
-			dc.DrawLine(Last.x, Last.y, m_Mouse_Move       .x, m_Mouse_Move       .y);
-			dc.DrawLine(Last.x, Last.y, event.GetPosition().x, event.GetPosition().y);
-			m_Distance_Move	= SG_Get_Distance(m_Distance_Pts[n - 1], _Get_World(event.GetPosition()));
-		}
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_ZOOM:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN:
-		break;
-
-	//-----------------------------------------------------
-	case MAP_MODE_PAN_DOWN:
-	//	_Move(m_Mouse_Down, event.GetPosition());
-		_Pan(m_Mouse_Down, event.GetPosition());
-		break;
-	}
-
-	//-----------------------------------------------------
-	_Draw_Inverse(m_Mouse_Down, m_Mouse_Move, event.GetPosition());
-
-	//-----------------------------------------------------
-	m_Mouse_Move	= event.GetPosition();
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CVIEW_Map_Control::On_Mouse_Wheel(wxMouseEvent &event)
-{
-	if( event.GetWheelRotation() < 0 )
-	{
-		_Zoom(_Get_World(event.GetPosition()), false);
-	}
-	else if( event.GetWheelRotation() > 0 )
-	{
-		_Zoom(_Get_World(event.GetPosition()), true);
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                 VIEW_Map_Control.cpp                  //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <wx/window.h>
+#include <wx/image.h>
+
+#include "res_images.h"
+
+#include "helper.h"
+#include "dc_helper.h"
+
+#include "wksp_map.h"
+#include "wksp_module.h"
+#include "wksp_grid.h"
+#include "wksp_shapes.h"
+
+#include "view_map.h"
+#include "view_map_control.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define GET_KEYS(e)	((e.LeftIsDown()   ? MODULE_INTERACTIVE_KEY_LEFT   : 0)\
+					|(e.MiddleIsDown() ? MODULE_INTERACTIVE_KEY_MIDDLE : 0)\
+					|(e.RightIsDown()  ? MODULE_INTERACTIVE_KEY_RIGHT  : 0)\
+					|(e.ShiftDown()    ? MODULE_INTERACTIVE_KEY_SHIFT  : 0)\
+					|(e.AltDown()      ? MODULE_INTERACTIVE_KEY_ALT    : 0)\
+					|(e.ControlDown()  ? MODULE_INTERACTIVE_KEY_CTRL   : 0))
+
+//---------------------------------------------------------
+#define STANDARD_ZOOM_FACTOR	50
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+BEGIN_EVENT_TABLE(CVIEW_Map_Control, wxPanel)
+	EVT_PAINT			(CVIEW_Map_Control::On_Paint)
+	EVT_SIZE			(CVIEW_Map_Control::On_Size)
+	EVT_KEY_DOWN		(CVIEW_Map_Control::On_Key_Down)
+
+	EVT_MOUSEWHEEL		(CVIEW_Map_Control::On_Mouse_Wheel)
+	EVT_MOTION			(CVIEW_Map_Control::On_Mouse_Motion)
+	EVT_LEFT_DOWN		(CVIEW_Map_Control::On_Mouse_LDown)
+	EVT_LEFT_UP			(CVIEW_Map_Control::On_Mouse_LUp)
+	EVT_LEFT_DCLICK		(CVIEW_Map_Control::On_Mouse_LDClick)
+	EVT_RIGHT_DOWN		(CVIEW_Map_Control::On_Mouse_RDown)
+	EVT_RIGHT_UP		(CVIEW_Map_Control::On_Mouse_RUp)
+	EVT_RIGHT_DCLICK	(CVIEW_Map_Control::On_Mouse_RDClick)
+	EVT_MIDDLE_DOWN		(CVIEW_Map_Control::On_Mouse_MDown)
+	EVT_MIDDLE_UP		(CVIEW_Map_Control::On_Mouse_MUp)
+END_EVENT_TABLE()
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CVIEW_Map_Control::CVIEW_Map_Control(CVIEW_Map *pParent, CWKSP_Map *pMap)
+	: wxPanel(pParent, -1, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE)
+{
+	SYS_Set_Color_BG_Window(this);
+
+	m_pParent	= (CVIEW_Map *)pParent;
+	m_pMap		= pMap;
+
+	m_Mode		= -1;
+	Set_Mode(MAP_MODE_ZOOM);
+
+	m_Drag_Mode	= MODULE_INTERACTIVE_DRAG_NONE;
+}
+
+//---------------------------------------------------------
+CVIEW_Map_Control::~CVIEW_Map_Control(void)
+{
+	_Distance_Reset();
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CVIEW_Map_Control::Set_Mode(int Mode)
+{
+	if( m_Mode != Mode )
+	{
+		if( m_Mode == MAP_MODE_DISTANCE )
+		{
+			_Distance_Reset();
+		}
+
+		m_Mode	= Mode;
+
+		switch( m_Mode )
+		{
+		case MAP_MODE_ZOOM: default:
+			SetCursor(IMG_Get_Cursor(ID_IMG_CRS_SELECT));
+			break;
+
+		case MAP_MODE_PAN:
+			SetCursor(IMG_Get_Cursor(ID_IMG_CRS_HAND));
+			break;
+
+		case MAP_MODE_PAN_DOWN:
+			SetCursor(IMG_Get_Cursor(ID_IMG_CRS_HAND_GRAP));
+			break;
+
+		case MAP_MODE_SELECT:
+			SetCursor(IMG_Get_Cursor(ID_IMG_CRS_INFO));
+			break;
+
+		case MAP_MODE_DISTANCE:
+			SetCursor(IMG_Get_Cursor(ID_IMG_CRS_SELECT));
+			_Distance_Reset();
+			break;
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+inline void CVIEW_Map_Control::_Set_StatusBar(CSG_Point ptWorld)
+{
+	STATUSBAR_Set_Text(wxString::Format(wxT("X%f"), ptWorld.Get_X()), STATUSBAR_VIEW_X);
+	STATUSBAR_Set_Text(wxString::Format(wxT("Y%f"), ptWorld.Get_Y()), STATUSBAR_VIEW_Y);
+
+	if( m_Mode == MAP_MODE_DISTANCE )
+	{
+		STATUSBAR_Set_Text(wxString::Format(wxT("D %f"), m_Distance + m_Distance_Move), STATUSBAR_VIEW_Z);
+	}
+	else if( Get_Active_Layer() )
+	{
+		STATUSBAR_Set_Text(wxString::Format(wxT("Z %s"), Get_Active_Layer()->Get_Value(ptWorld, _Get_World(2.0)).c_str()), STATUSBAR_VIEW_Z);
+	}
+	else
+	{
+		STATUSBAR_Set_Text(wxT("Z"), STATUSBAR_VIEW_Z);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+inline wxRect CVIEW_Map_Control::_Get_Client(void)
+{
+	return( wxRect(wxPoint(0, 0), GetClientSize()) );
+}
+
+//---------------------------------------------------------
+inline wxPoint CVIEW_Map_Control::_Get_Client(TSG_Point Point)
+{
+	wxRect		rClient(_Get_Client());
+	CSG_Rect	rWorld(m_pMap->Get_World(rClient));
+	double		World2DC	= (double)rClient.GetWidth() / rWorld.Get_XRange();
+
+	return( wxPoint(          (int)(0.5 + (Point.x - rWorld.Get_XMin()) * World2DC),
+		rClient.GetHeight() - (int)(0.5 + (Point.y - rWorld.Get_YMin()) * World2DC)
+	));
+}
+
+//---------------------------------------------------------
+inline CSG_Point CVIEW_Map_Control::_Get_World(wxPoint ptClient)
+{
+	return( m_pMap->Get_World(_Get_Client(), ptClient) );
+}
+
+//---------------------------------------------------------
+inline double CVIEW_Map_Control::_Get_World(double xClient)
+{
+	wxRect		rClient(_Get_Client());
+	CSG_Rect	rWorld(m_pMap->Get_World(rClient));
+
+	return( xClient * rWorld.Get_XRange() / (double)rClient.GetWidth() );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::_Draw_Inverse(wxPoint ptA, wxPoint ptB)
+{
+	if( m_Drag_Mode != MODULE_INTERACTIVE_DRAG_NONE )
+	{
+		wxClientDC	dc(this);
+
+		dc.SetLogicalFunction(wxINVERT);
+
+		switch( m_Drag_Mode )
+		{
+		case MODULE_INTERACTIVE_DRAG_LINE:
+			dc.DrawLine			(ptA.x, ptA.y, ptB.x, ptB.y);
+			break;
+
+		case MODULE_INTERACTIVE_DRAG_BOX:
+			dc.DrawRectangle	(ptA.x, ptA.y, ptB.x - ptA.x, ptB.y - ptA.y);
+			break;
+
+		case MODULE_INTERACTIVE_DRAG_CIRCLE:
+			dc.DrawCircle		(ptA.x, ptA.y, (int)SG_Get_Distance(ptA.x, ptA.y, ptB.x, ptB.y));
+			break;
+		}
+	}
+}
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::_Draw_Inverse(wxPoint ptA, wxPoint ptB_Old, wxPoint ptB_New)
+{
+	if( m_Drag_Mode != MODULE_INTERACTIVE_DRAG_NONE )
+	{
+		wxClientDC	dc(this);
+
+		dc.SetLogicalFunction(wxINVERT);
+
+		switch( m_Drag_Mode )
+		{
+		case MODULE_INTERACTIVE_DRAG_LINE:
+			dc.DrawLine			(ptA.x, ptA.y, ptB_Old.x, ptB_Old.y);
+			dc.DrawLine			(ptA.x, ptA.y, ptB_New.x, ptB_New.y);
+			break;
+
+		case MODULE_INTERACTIVE_DRAG_BOX:
+			dc.DrawRectangle	(ptA.x, ptA.y, ptB_Old.x - ptA.x, ptB_Old.y - ptA.y);
+			dc.DrawRectangle	(ptA.x, ptA.y, ptB_New.x - ptA.x, ptB_New.y - ptA.y);
+			break;
+
+		case MODULE_INTERACTIVE_DRAG_CIRCLE:
+			dc.DrawCircle		(ptA.x, ptA.y, (int)SG_Get_Distance(ptA.x, ptA.y, ptB_Old.x, ptB_Old.y));
+			dc.DrawCircle		(ptA.x, ptA.y, (int)SG_Get_Distance(ptA.x, ptA.y, ptB_New.x, ptB_New.y));
+			break;
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CVIEW_Map_Control::_Zoom(wxPoint A, wxPoint B)
+{
+	CSG_Rect	rWorld;
+
+	if( A.x == B.x && A.y == B.y )
+	{
+		return( _Zoom(_Get_World(A), true) );
+	}
+
+	rWorld.Assign(_Get_World(A), _Get_World(B));
+
+	m_pMap->Set_Extent(rWorld);
+
+	return( true );
+}
+
+bool CVIEW_Map_Control::_Zoom(CSG_Point ptCenter, bool bZoomIn)
+{
+	CSG_Rect	rWorld(m_pMap->Get_Extent());
+
+	rWorld.Move(ptCenter - rWorld.Get_Center());
+
+	if( bZoomIn )
+	{
+		rWorld.Deflate(STANDARD_ZOOM_FACTOR);
+	}
+	else
+	{
+		rWorld.Inflate(STANDARD_ZOOM_FACTOR);
+	}
+
+	m_pMap->Set_Extent(rWorld);
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CVIEW_Map_Control::_Pan(wxPoint A, wxPoint B)
+{
+	if( A.x != B.x || A.y != B.y )
+	{
+		wxClientDC	dc(this);
+
+		dc.SetBackground(*wxWHITE_BRUSH);
+		dc.Clear();
+		dc.DrawBitmap(m_Bitmap, B.x - A.x, B.y - A.y, false);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CVIEW_Map_Control::_Move(wxPoint &A, wxPoint B)
+{
+	if( A.x != B.x || A.y != B.y )
+	{
+		CSG_Rect	rWorld;
+
+		rWorld.Assign(m_pMap->Get_Extent());
+		rWorld.Move(_Get_World(A) - _Get_World(B));
+		m_pMap->Set_Extent(rWorld);
+
+		A	= B;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+bool CVIEW_Map_Control::_Move(wxPoint ptMove)
+{
+	return( _Move(ptMove, wxPoint(0, 0)) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::_Distance_Reset(void)
+{
+	m_Distance_Pts.Clear();
+
+	m_Distance		= 0.0;
+	m_Distance_Move	= 0.0;
+
+	Refresh(false);
+}
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::_Distance_Add(wxPoint Point)
+{
+	int		n	= m_Distance_Pts.Get_Count();
+
+	m_Distance_Pts.Add(_Get_World(Point));
+
+	if( n > 0 )
+	{
+		m_Distance	+= SG_Get_Distance(m_Distance_Pts[n], m_Distance_Pts[n - 1]);
+	}
+
+	m_Distance_Move	= 0.0;
+
+	wxClientDC	dc(this);
+	_Distance_Draw(dc);
+}
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::_Distance_Draw(wxDC &dc)
+{
+	int		n	= m_Distance_Pts.Get_Count();
+
+	if( m_Mode == MAP_MODE_DISTANCE && n > 0 )
+	{
+		int		i;
+		wxPoint	A, B;
+
+		dc.SetPen(wxPen(*wxWHITE, 4));
+		for(i=1, A=_Get_Client(m_Distance_Pts[0]); i<n; i++)
+		{
+			B	= A;
+			A	= _Get_Client(m_Distance_Pts[i]);
+			dc.DrawLine(A.x, A.y, B.x, B.y);
+		}
+
+		dc.SetPen(wxPen(*wxBLACK, 2));
+		for(i=1, A=_Get_Client(m_Distance_Pts[0]); i<n; i++)
+		{
+			B	= A;
+			A	= _Get_Client(m_Distance_Pts[i]);
+			dc.DrawLine(A.x, A.y, B.x, B.y);
+		}
+
+		dc.SetPen(wxNullPen);
+		dc.SetLogicalFunction(wxINVERT);
+		A	= _Get_Client(m_Distance_Pts[n - 1]);
+		dc.DrawLine(A.x, A.y, m_Mouse_Move.x, m_Mouse_Move.y);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Paint(wxPaintEvent &event)
+{
+	if( m_Bitmap.Ok() )
+	{
+		wxPaintDC	dc(this);
+
+		dc.DrawBitmap(m_Bitmap, 0, 0, false);
+
+		_Distance_Draw(dc);
+	}
+}
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Size(wxSizeEvent &event)
+{
+	wxRect	r(_Get_Client());
+
+	if( m_Bitmap.GetWidth() != r.GetWidth() || m_Bitmap.GetHeight() != r.GetHeight() )
+	{
+		m_Bitmap.Create(r.GetWidth(), r.GetHeight());
+
+		Refresh_Map();
+	}
+}
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::Refresh_Map(void)
+{
+	if( m_Bitmap.Ok() )
+	{
+		wxMemoryDC	dc;
+
+		dc.SelectObject(m_Bitmap);
+		m_pMap->Draw_Map(dc, 1.0, _Get_Client(), true);
+		dc.SelectObject(wxNullBitmap);
+
+		m_pParent->Ruler_Refresh();
+
+		Refresh(false);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Key_Down(wxKeyEvent &event)
+{
+	if( m_pMap->Find_Layer(Get_Active_Layer()) && Get_Active_Layer()->Edit_On_Key_Down(event.GetKeyCode()) )
+	{
+		return;
+	}
+
+	switch( event.GetKeyCode() )
+	{
+	default:
+		event.Skip();
+		break;
+
+	case WXK_PRIOR:
+		_Zoom(m_pMap->Get_Extent().Get_Center(), true);
+		break;
+		
+	case WXK_NEXT:
+		_Zoom(m_pMap->Get_Extent().Get_Center(), false);
+		break;
+		
+	case WXK_LEFT:
+		_Move(wxPoint(-10,   0));
+		break;
+
+	case WXK_RIGHT:
+		_Move(wxPoint( 10,   0));
+		break;
+
+	case WXK_UP:
+		_Move(wxPoint(  0, -10));
+		break;
+
+	case WXK_DOWN:
+		_Move(wxPoint(  0,  10));
+		break;
+
+	case WXK_F2:
+		m_pMap->SaveAs_Image();
+		break;
+
+	case 'C':
+		if( event.GetModifiers() == wxMOD_CONTROL )
+		{
+			m_pMap->SaveAs_Image_Clipboard(false);
+		}
+		else if( event.GetModifiers() == wxMOD_ALT )
+		{
+			m_pMap->SaveAs_Image_Clipboard(GetClientSize().x, GetClientSize().y, -1);
+		}
+		break;
+
+	case 'L':
+		if( event.GetModifiers() == wxMOD_CONTROL )
+		{
+			m_pMap->SaveAs_Image_Clipboard(true);
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Mouse_LDown(wxMouseEvent &event)
+{
+	bool	bCaptureMouse	= true;
+
+	m_Mouse_Down	= m_Mouse_Move	= event.GetPosition();
+
+	switch( m_Mode )
+	{
+	//-----------------------------------------------------
+	case MAP_MODE_SELECT:
+		if( g_pModule && g_pModule->is_Interactive() )
+		{
+			m_Drag_Mode		= ((CSG_Module_Interactive *)g_pModule->Get_Module())->Get_Drag_Mode();
+			bCaptureMouse	= !g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_LDOWN, GET_KEYS(event));
+		}
+		else if( m_pMap->Find_Layer(Get_Active_Layer()) )
+		{
+			switch(	Get_Active_Layer()->Get_Type() )
+			{
+			default:
+				m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
+				break;
+
+			case WKSP_ITEM_Grid:
+				m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_BOX;
+				break;
+
+			case WKSP_ITEM_Shapes:
+				m_Drag_Mode		= ((CWKSP_Shapes *)Get_Active_Layer())->is_Editing()
+								? MODULE_INTERACTIVE_DRAG_NONE
+								: MODULE_INTERACTIVE_DRAG_BOX;
+				break;
+			}
+
+			Get_Active_Layer()->Edit_On_Mouse_Down(_Get_World(event.GetPosition()), _Get_World(1.0), GET_KEYS(event));
+		}
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_DISTANCE:
+		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_ZOOM:
+		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_BOX;
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN:
+		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
+		Set_Mode(MAP_MODE_PAN_DOWN);
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN_DOWN:
+		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
+		break;
+	}
+
+	//-----------------------------------------------------
+	if( bCaptureMouse )
+	{
+		CaptureMouse();
+	}
+
+	event.Skip();
+}
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Mouse_LUp(wxMouseEvent &event)
+{
+	if( HasCapture() )
+	{
+		ReleaseMouse();
+	}
+
+	_Draw_Inverse(m_Mouse_Down, event.GetPosition());
+	m_Drag_Mode	= MODULE_INTERACTIVE_DRAG_NONE;
+
+	switch( m_Mode )
+	{
+	//-----------------------------------------------------
+	case MAP_MODE_SELECT:
+		if( g_pModule )
+		{
+			g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_LUP, GET_KEYS(event));
+		}
+		else if( m_pMap->Find_Layer(Get_Active_Layer()) )
+		{
+			Get_Active_Layer()->Edit_On_Mouse_Up(_Get_World(event.GetPosition()), _Get_World(1.0), GET_KEYS(event)|MODULE_INTERACTIVE_KEY_LEFT);
+		}
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_DISTANCE:
+		_Distance_Add(event.GetPosition());
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_ZOOM:
+		_Zoom(m_Mouse_Down, event.GetPosition());
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN_DOWN:
+		Set_Mode(MAP_MODE_PAN);
+		_Move(m_Mouse_Down, event.GetPosition());
+		break;
+	}
+}
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Mouse_LDClick(wxMouseEvent &event)
+{
+	switch( m_Mode )
+	{
+	//-----------------------------------------------------
+	case MAP_MODE_SELECT:
+		if( g_pModule )
+		{
+			g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_LDCLICK, GET_KEYS(event));
+		}
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_DISTANCE:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_ZOOM:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN_DOWN:
+		break;
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Mouse_RDown(wxMouseEvent &event)
+{
+	m_Mouse_Down	= m_Mouse_Move	= event.GetPosition();
+
+	_Draw_Inverse(m_Mouse_Down, event.GetPosition());
+	m_Drag_Mode	= MODULE_INTERACTIVE_DRAG_NONE;
+
+	switch( m_Mode )
+	{
+	//-----------------------------------------------------
+	case MAP_MODE_SELECT:
+		if( g_pModule )
+		{
+			g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_RDOWN, GET_KEYS(event));
+		}
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_DISTANCE:
+		_Distance_Reset();
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_ZOOM:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN_DOWN:
+		break;
+	}
+}
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Mouse_RUp(wxMouseEvent &event)
+{
+	wxMenu	*pMenu	= NULL;
+
+	m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
+
+	switch( m_Mode )
+	{
+	//-----------------------------------------------------
+	case MAP_MODE_SELECT:
+		if( g_pModule )
+		{
+			g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_RUP, GET_KEYS(event));
+		}
+		else if( m_pMap->Find_Layer(Get_Active_Layer()) )
+		{
+			if(	!Get_Active_Layer()->Edit_On_Mouse_Up(_Get_World(event.GetPosition()), _Get_World(1.0), GET_KEYS(event)|MODULE_INTERACTIVE_KEY_RIGHT)
+			&&	(pMenu = Get_Active_Layer()->Edit_Get_Menu()) != NULL )
+			{
+				PopupMenu(pMenu, event.GetPosition());
+
+				delete(pMenu);
+			}
+		}
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_DISTANCE:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_ZOOM:
+		_Zoom(_Get_World(event.GetPosition()), false);
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN_DOWN:
+		break;
+	}
+}
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Mouse_RDClick(wxMouseEvent &event)
+{
+	switch( m_Mode )
+	{
+	//-----------------------------------------------------
+	case MAP_MODE_SELECT:
+		if( g_pModule )
+		{
+			g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_RDCLICK, GET_KEYS(event));
+		}
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_DISTANCE:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_ZOOM:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN_DOWN:
+		break;
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Mouse_MDown(wxMouseEvent &event)
+{
+	bool	bCaptureMouse	= true;
+
+	m_Mouse_Down	= m_Mouse_Move	= event.GetPosition();
+
+	switch( m_Mode )
+	{
+	//-----------------------------------------------------
+	case MAP_MODE_SELECT:
+		if( g_pModule )
+		{
+			g_pModule->Execute(_Get_World(event.GetPosition()), MODULE_INTERACTIVE_MDOWN, GET_KEYS(event));
+		}
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_DISTANCE:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_ZOOM:
+		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
+		Set_Mode(MAP_MODE_PAN_DOWN);
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN_DOWN:
+		m_Drag_Mode		= MODULE_INTERACTIVE_DRAG_NONE;
+		break;
+	}
+
+	//-----------------------------------------------------
+	if( bCaptureMouse )
+	{
+		CaptureMouse();
+	}
+
+	event.Skip();
+}
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Mouse_MUp(wxMouseEvent &event)
+{
+	if( HasCapture() )
+	{
+		ReleaseMouse();
+	}
+
+	_Draw_Inverse(m_Mouse_Down, event.GetPosition());
+	m_Drag_Mode	= MODULE_INTERACTIVE_DRAG_NONE;
+
+	switch( m_Mode )
+	{
+	//-----------------------------------------------------
+	case MAP_MODE_SELECT:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_DISTANCE:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_ZOOM:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN_DOWN:
+		Set_Mode(MAP_MODE_ZOOM);
+		_Move(m_Mouse_Down, event.GetPosition());
+		break;
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Mouse_Motion(wxMouseEvent &event)
+{
+	if( m_Mode != MAP_MODE_PAN_DOWN )
+	{
+		_Set_StatusBar(_Get_World(event.GetPosition()));
+
+		m_pParent->Ruler_Set_Position(event.GetPosition().x, event.GetPosition().y);
+	}
+
+	switch( m_Mode )
+	{
+	//-----------------------------------------------------
+	case MAP_MODE_SELECT:
+		if( g_pModule )
+		{
+			TSG_Module_Interactive_Mode	iMode
+				= event.LeftIsDown()	? MODULE_INTERACTIVE_MOVE_LDOWN
+				: event.MiddleIsDown()	? MODULE_INTERACTIVE_MOVE_MDOWN
+				: event.RightIsDown()	? MODULE_INTERACTIVE_MOVE_RDOWN
+										: MODULE_INTERACTIVE_MOVE;
+
+			g_pModule->Execute(_Get_World(event.GetPosition()), iMode, GET_KEYS(event));
+		}
+		else if( m_pMap->Find_Layer(Get_Active_Layer()) )
+		{
+			Get_Active_Layer()->Edit_On_Mouse_Move(
+				this, m_pMap->Get_World(_Get_Client()),
+				event.GetPosition(), m_Mouse_Move,
+				GET_KEYS(event)
+			);
+		}
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_DISTANCE:
+		if( m_Distance_Pts.Get_Count() > 0 )
+		{
+			int			n	= m_Distance_Pts.Get_Count();
+			wxClientDC	dc(this);
+			wxPoint		Last(_Get_Client(m_Distance_Pts[n - 1]));
+			dc.SetLogicalFunction(wxINVERT);
+			dc.DrawLine(Last.x, Last.y, m_Mouse_Move       .x, m_Mouse_Move       .y);
+			dc.DrawLine(Last.x, Last.y, event.GetPosition().x, event.GetPosition().y);
+			m_Distance_Move	= SG_Get_Distance(m_Distance_Pts[n - 1], _Get_World(event.GetPosition()));
+		}
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_ZOOM:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN:
+		break;
+
+	//-----------------------------------------------------
+	case MAP_MODE_PAN_DOWN:
+	//	_Move(m_Mouse_Down, event.GetPosition());
+		_Pan(m_Mouse_Down, event.GetPosition());
+		break;
+	}
+
+	//-----------------------------------------------------
+	_Draw_Inverse(m_Mouse_Down, m_Mouse_Move, event.GetPosition());
+
+	//-----------------------------------------------------
+	m_Mouse_Move	= event.GetPosition();
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CVIEW_Map_Control::On_Mouse_Wheel(wxMouseEvent &event)
+{
+	if( event.GetWheelRotation() < 0 )
+	{
+		_Zoom(_Get_World(event.GetPosition()), false);
+	}
+	else if( event.GetWheelRotation() > 0 )
+	{
+		_Zoom(_Get_World(event.GetPosition()), true);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_gui/wksp.cpp b/src/saga_core/saga_gui/wksp.cpp
index d191f69..295b61e 100644
--- a/src/saga_core/saga_gui/wksp.cpp
+++ b/src/saga_core/saga_gui/wksp.cpp
@@ -307,6 +307,7 @@ void CWKSP::On_Command(wxCommandEvent &event)
 	case ID_CMD_DATA_PROJECT_SAVE_AS:
 	case ID_CMD_TABLES_OPEN:
 	case ID_CMD_SHAPES_OPEN:
+	case ID_CMD_TIN_OPEN:
 	case ID_CMD_POINTCLOUD_OPEN:
 	case ID_CMD_GRIDS_OPEN:
 		m_pData   ->On_Command(event);
diff --git a/src/saga_core/saga_gui/wksp_base_control.cpp b/src/saga_core/saga_gui/wksp_base_control.cpp
index 9ad886f..e9f7164 100644
--- a/src/saga_core/saga_gui/wksp_base_control.cpp
+++ b/src/saga_core/saga_gui/wksp_base_control.cpp
@@ -300,10 +300,17 @@ bool CWKSP_Base_Control::_Add_Item(CWKSP_Base_Item *pItem, int Image, int selIma
 bool CWKSP_Base_Control::_Del_Item(CWKSP_Base_Item *pItem, bool bSilent)
 {
 	//-----------------------------------------------------
-	if( (	pItem == NULL	)
-	||	(	pItem->Get_Type()	== WKSP_ITEM_Table
-		&&	(	((CWKSP_Table *)pItem)->Get_Owner()->Get_Type() == WKSP_ITEM_Shapes
-			||	((CWKSP_Table *)pItem)->Get_Owner()->Get_Type() == WKSP_ITEM_TIN	)	)	)
+	if( pItem == NULL || pItem->GetId().IsOk() == false || pItem->Get_Control() != this )
+	{
+		return( false );
+	}
+
+	if( pItem->Get_Type() == WKSP_ITEM_Table &&	(((CWKSP_Table *)pItem)->Get_Owner()->Get_Type() == WKSP_ITEM_Shapes ||	((CWKSP_Table *)pItem)->Get_Owner()->Get_Type() == WKSP_ITEM_TIN) )
+	{
+		return( false );
+	}
+
+	if( !bSilent && !_Del_Item_Confirm(pItem) )
 	{
 		return( false );
 	}
@@ -311,14 +318,21 @@ bool CWKSP_Base_Control::_Del_Item(CWKSP_Base_Item *pItem, bool bSilent)
 	//-----------------------------------------------------
 	if( pItem == m_pManager )
 	{
-		if( m_pManager->Get_Count() > 0 && (bSilent || _Del_Item_Confirm(pItem)) )
+		if( m_pManager->Get_Count() > 0 )
 		{
 			Freeze();
+
 			if( g_pData_Buttons )
 			{
 				g_pData_Buttons->Freeze();
 			}
 
+			if( g_pMap_Buttons )
+			{
+				g_pMap_Buttons->Freeze();
+			}
+
+			//---------------------------------------------
 			DeleteChildren	(m_pManager->GetId());
 			AppendItem		(m_pManager->GetId(), LNG("[CAP] [no items]"), 0, 0, NULL);
 			Expand			(m_pManager->GetId());
@@ -328,6 +342,7 @@ bool CWKSP_Base_Control::_Del_Item(CWKSP_Base_Item *pItem, bool bSilent)
 				g_pModules->Get_Modules_Menu()->Update();
 			}
 
+			//---------------------------------------------
 			Thaw();
 
 			if( g_pData_Buttons )
@@ -338,6 +353,7 @@ bool CWKSP_Base_Control::_Del_Item(CWKSP_Base_Item *pItem, bool bSilent)
 
 			if( g_pMap_Buttons )
 			{
+				g_pMap_Buttons->Thaw();
 				g_pMap_Buttons->Update_Buttons();
 			}
 
@@ -348,45 +364,16 @@ bool CWKSP_Base_Control::_Del_Item(CWKSP_Base_Item *pItem, bool bSilent)
 	//-----------------------------------------------------
 	else
 	{
-		if( bSilent || _Del_Item_Confirm(pItem) )
-		{
-			CWKSP_Base_Manager	*pItem_Manager	= pItem->Get_Manager();
+		CWKSP_Base_Manager	*pItem_Manager	= pItem->Get_Manager();
 
-			Freeze();
-
-			Delete(pItem->GetId());
+		Freeze();
 
-			if( pItem_Manager != NULL && pItem_Manager->Get_Count() == 0 )
-			{
-				Thaw();
-
-				if( m_pManager->Get_Type() == WKSP_ITEM_Data_Manager )
-				{
-					g_pData_Buttons->Update_Buttons();
-				}
-
-				if( m_pManager->Get_Type() == WKSP_ITEM_Map_Manager )
-				{
-					g_pMap_Buttons->Update_Buttons();
-				}
-
-				return( _Del_Item(pItem_Manager, true) );
-			}
-
-			if( m_pManager->Get_Type() == WKSP_ITEM_Module_Manager )
-			{
-				g_pModules->Get_Modules_Menu()->Update();
-			}
-
-			if( pItem_Manager != NULL && pItem_Manager->Get_Type() == WKSP_ITEM_Map )
-			{
-				((CWKSP_Map *)pItem_Manager)->View_Refresh(false);
-			}
+		Delete(pItem->GetId());
 
+		if( pItem_Manager != NULL && pItem_Manager->Get_Count() == 0 )
+		{
 			Thaw();
 
-			Refresh();
-
 			if( m_pManager->Get_Type() == WKSP_ITEM_Data_Manager )
 			{
 				g_pData_Buttons->Update_Buttons();
@@ -397,8 +384,34 @@ bool CWKSP_Base_Control::_Del_Item(CWKSP_Base_Item *pItem, bool bSilent)
 				g_pMap_Buttons->Update_Buttons();
 			}
 
-			return( true );
+			return( _Del_Item(pItem_Manager, true) );
 		}
+
+		if( m_pManager->Get_Type() == WKSP_ITEM_Module_Manager )
+		{
+			g_pModules->Get_Modules_Menu()->Update();
+		}
+
+		if( pItem_Manager != NULL && pItem_Manager->Get_Type() == WKSP_ITEM_Map )
+		{
+			((CWKSP_Map *)pItem_Manager)->View_Refresh(false);
+		}
+
+		Thaw();
+
+		Refresh();
+
+		if( m_pManager->Get_Type() == WKSP_ITEM_Data_Manager )
+		{
+			g_pData_Buttons->Update_Buttons();
+		}
+
+		if( m_pManager->Get_Type() == WKSP_ITEM_Map_Manager )
+		{
+			g_pMap_Buttons->Update_Buttons();
+		}
+
+		return( true );
 	}
 
 	//-----------------------------------------------------
@@ -556,53 +569,31 @@ bool CWKSP_Base_Control::_Set_Active(void)
 //---------------------------------------------------------
 bool CWKSP_Base_Control::_Del_Active(bool bSilent)
 {
-	wxTreeItemId	ID;
-
 	if( GetWindowStyle() & wxTR_MULTIPLE )
 	{
 		wxArrayTreeItemIds	IDs;
 
-		if( GetSelections(IDs) > 0 && ((CWKSP_Base_Item *)GetItemData(IDs[0]))->Get_Control() == this )
+		if( GetSelections(IDs) > 0 && (bSilent || DLG_Message_Confirm(ID_DLG_DELETE)) && (m_pManager->Get_Type() != WKSP_ITEM_Data_Manager || g_pData->Save_Modified_Sel()) )
 		{
-			if( DLG_Message_Confirm(ID_DLG_DELETE)
-			&&	(m_pManager->Get_Type() != WKSP_ITEM_Data_Manager || g_pData->Save_Modified_Sel()) )
-			{
-				size_t	i;
-
-				for(i=0; i<IDs.GetCount(); i++)
-				{
-					if( IDs[i].IsOk() )
-					{
-						switch( ((CWKSP_Base_Item *)GetItemData(IDs[i]))->Get_Type() )
-						{
-						case WKSP_ITEM_Shapes:
-						case WKSP_ITEM_TIN:
-						case WKSP_ITEM_PointCloud:
-						case WKSP_ITEM_Grid:
-							g_pMaps->Del((CWKSP_Layer *)GetItemData(IDs[i]));
-							break;
-
-						default:
-							break;
-						}
-					}
-				}
+			UnselectAll();
 
-				for(i=0; i<IDs.GetCount(); i++)
+			for(size_t i=0; i<IDs.GetCount(); i++)
+			{
+				if( IDs[i].IsOk() )
 				{
-					if( IDs[i].IsOk() )
-					{
-						_Del_Item((CWKSP_Base_Item *)GetItemData(IDs[i]), true);
-					}
+					_Del_Item((CWKSP_Base_Item *)GetItemData(IDs[i]), true);
 				}
 			}
+
+			SelectItem(GetRootItem());
+			SetFocus();
 		}
 	}
 	else
 	{
-		ID	= GetSelection();
+		wxTreeItemId	ID	= GetSelection();
 
-		if( ID.IsOk() && ((CWKSP_Base_Item *)GetItemData(ID))->Get_Control() == this )
+		if( ID.IsOk() )
 		{
 			_Del_Item((CWKSP_Base_Item *)GetItemData(ID), bSilent);
 		}
diff --git a/src/saga_core/saga_gui/wksp_data_layers.cpp b/src/saga_core/saga_gui/wksp_data_layers.cpp
index 8994c08..90fe967 100644
--- a/src/saga_core/saga_gui/wksp_data_layers.cpp
+++ b/src/saga_core/saga_gui/wksp_data_layers.cpp
@@ -58,6 +58,8 @@
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
+#include <wx/tooltip.h>
+
 #include <saga_api/saga_api.h>
 
 #include "res_controls.h"
@@ -158,7 +160,10 @@ void CWKSP_Data_Button::On_Paint(wxPaintEvent &event)
 	{
 		if( g_pData->Exists(m_pObject) )
 		{
-			SetToolTip(m_pLayer->Get_Name());
+			if( !GetToolTip() || GetToolTip()->GetTip().Cmp(m_pLayer->Get_Name()) )
+			{
+				SetToolTip(m_pLayer->Get_Name());
+			}
 
 			dc.DrawBitmap(m_pLayer->Get_Thumbnail(r.GetWidth() - 1, r.GetHeight() - 1), r.GetLeft(), r.GetTop(), true);
 
diff --git a/src/saga_core/saga_gui/wksp_data_manager.cpp b/src/saga_core/saga_gui/wksp_data_manager.cpp
index 1551e40..8d8bf3e 100644
--- a/src/saga_core/saga_gui/wksp_data_manager.cpp
+++ b/src/saga_core/saga_gui/wksp_data_manager.cpp
@@ -217,6 +217,18 @@ CWKSP_Data_Manager::CWKSP_Data_Manager(void)
 			LNG("automatically save and load")
 		), lValue
 	);
+
+	//-----------------------------------------------------
+	if( CONFIG_Read(wxT("/DATA"), wxT("NUMBERING")				, lValue) == false )
+	{
+		lValue	= 2;
+	}
+
+	m_Parameters.Add_Value(
+		pNode	, "NUMBERING"				, LNG("Numbering of Data Sets"),
+		LNG("Leading zeros for data set numbering. Set to -1 for not using numbers at all."),
+		PARAMETER_TYPE_Int, m_Numbering = lValue, -1, true
+	);
 }
 
 //---------------------------------------------------------
@@ -279,6 +291,7 @@ bool CWKSP_Data_Manager::Finalise(void)
 	CONFIG_Write(wxT("/DATA/GRIDS")	, wxT("DISPLAY_RANGEFIT")	, (long)m_Parameters("GRID_DISPLAY_RANGEFIT")->asInt());
 
 	CONFIG_Write(wxT("/DATA")		, wxT("PROJECT_START")		, (long)m_Parameters("PROJECT_START")->asInt());
+	CONFIG_Write(wxT("/DATA")		, wxT("NUMBERING")			, (long)m_Parameters("NUMBERING")->asInt());
 
 	if( Get_Count() == 0 )
 	{
@@ -383,14 +396,14 @@ wxMenu * CWKSP_Data_Manager::Get_Menu(void)
 	CMD_Menu_Add_Item(pMenu, false, ID_CMD_DATA_PROJECT_NEW);
 	CMD_Menu_Add_Item(pMenu, false, ID_CMD_DATA_PROJECT_OPEN);
 //	CMD_Menu_Add_Item(pMenu, false, ID_CMD_DATA_PROJECT_OPEN_ADD);
-
-	if( Get_Count() > 0 )
-	{
+
+	if( Get_Count() > 0 )
+	{
 		CMD_Menu_Add_Item(pMenu, false, ID_CMD_DATA_PROJECT_SAVE);
 		CMD_Menu_Add_Item(pMenu, false, ID_CMD_DATA_PROJECT_SAVE_AS);
 		pMenu->AppendSeparator();
-		CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_SEARCH);
-	}
+		CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_SEARCH);
+	}
 
 	return( pMenu );
 }
@@ -512,6 +525,8 @@ void CWKSP_Data_Manager::Parameters_Changed(void)
 	SG_Grid_Cache_Set_Confirm		(m_Parameters("GRID_MEM_CACHE_CONFIRM")	->asInt());
 	SG_Grid_Cache_Set_Directory		(m_Parameters("GRID_MEM_CACHE_TMPDIR")	->asString());
 
+	m_Numbering	= m_Parameters("NUMBERING")->asInt();
+
 	CWKSP_Base_Manager::Parameters_Changed();
 }
 
@@ -625,35 +640,35 @@ bool CWKSP_Data_Manager::Open_CMD(int Cmd_ID)
 //---------------------------------------------------------
 bool CWKSP_Data_Manager::Open(const wxChar *File_Name)
 {
+	if( SG_File_Cmp_Extension(File_Name, wxT("sprj")) )
+	{
+		return( m_pProject->Load(File_Name, false, true) );
+	}
+
 	if( SG_File_Cmp_Extension(File_Name, wxT("txt"))
 	||	SG_File_Cmp_Extension(File_Name, wxT("dbf")) )
 	{
-		return( Open(DATAOBJECT_TYPE_Table , File_Name) != NULL );
+		return( Open(DATAOBJECT_TYPE_Table		, File_Name) != NULL );
 	}
 
 	if( SG_File_Cmp_Extension(File_Name, wxT("shp")) )
 	{
-		return( Open(DATAOBJECT_TYPE_Shapes, File_Name) != NULL );
+		return( Open(DATAOBJECT_TYPE_Shapes		, File_Name) != NULL );
 	}
 
 	if( SG_File_Cmp_Extension(File_Name, wxT("spc")) )
 	{
-		return( Open(DATAOBJECT_TYPE_PointCloud, File_Name) != NULL );
+		return( Open(DATAOBJECT_TYPE_PointCloud	, File_Name) != NULL );
 	}
 
 	if(	SG_File_Cmp_Extension(File_Name, wxT("sgrd"))
 	||	SG_File_Cmp_Extension(File_Name, wxT("dgm"))
 	||	SG_File_Cmp_Extension(File_Name, wxT("grd")) )
 	{
-		return( Open(DATAOBJECT_TYPE_Grid  , File_Name) != NULL );
-	}
-
-	if( SG_File_Cmp_Extension(File_Name, wxT("sprj")) )
-	{
-		return( m_pProject->Load(File_Name, false, true) );
+		return( Open(DATAOBJECT_TYPE_Grid		, File_Name) != NULL );
 	}
 
-	return( false );
+	return( Open_GDAL(File_Name) );
 }
 
 //---------------------------------------------------------
@@ -678,7 +693,10 @@ bool CWKSP_Data_Manager::Open(int DataType)
 
 		for(size_t i=0; i<File_Paths.GetCount(); i++)
 		{
-			Open(DataType, File_Paths[i]);
+			if( Open(DataType, File_Paths[i]) == NULL )
+			{
+				Open_GDAL(File_Paths[i]);
+			}
 		}
 
 		return( true );
@@ -690,34 +708,17 @@ bool CWKSP_Data_Manager::Open(int DataType)
 //---------------------------------------------------------
 CWKSP_Base_Item * CWKSP_Data_Manager::Open(int DataType, const wxChar *FileName)
 {
-	CSG_Data_Object		*pObject;
+	CSG_Data_Object	*pObject;
 	CWKSP_Base_Item	*pItem;
 
 	switch( DataType )
 	{
-	default:
-		pObject	= NULL;
-		break;
-
-	case DATAOBJECT_TYPE_Table:
-		pObject	= new CSG_Table		(FileName);
-		break;
-
-	case DATAOBJECT_TYPE_Shapes:
-		pObject	= new CSG_Shapes	(FileName);
-		break;
-
-	case DATAOBJECT_TYPE_TIN:
-		pObject	= new CSG_TIN		(FileName);
-		break;
-
-	case DATAOBJECT_TYPE_PointCloud:
-		pObject	= new CSG_PointCloud(FileName);
-		break;
-
-	case DATAOBJECT_TYPE_Grid:
-		pObject	= new CSG_Grid		(FileName);
-		break;
+	default:							pObject	= NULL;								break;
+	case DATAOBJECT_TYPE_Table:			pObject	= new CSG_Table			(FileName);	break;
+	case DATAOBJECT_TYPE_Shapes:		pObject	= new CSG_Shapes		(FileName);	break;
+	case DATAOBJECT_TYPE_TIN:			pObject	= new CSG_TIN			(FileName);	break;
+	case DATAOBJECT_TYPE_PointCloud:	pObject	= new CSG_PointCloud	(FileName);	break;
+	case DATAOBJECT_TYPE_Grid:			pObject	= new CSG_Grid			(FileName);	break;
 	}
 
 	PROCESS_Set_Okay();
@@ -726,7 +727,7 @@ CWKSP_Base_Item * CWKSP_Data_Manager::Open(int DataType, const wxChar *FileName)
 	{
 		if( pObject->is_Valid() && (pItem = Add(pObject)) != NULL )
 		{
-			m_pMenu_Files->Recent_Add(DataType, FileName);
+			m_pMenu_Files->Recent_Add(pObject->Get_ObjectType(), FileName);
 
 			return( pItem );
 		}
@@ -734,7 +735,10 @@ CWKSP_Base_Item * CWKSP_Data_Manager::Open(int DataType, const wxChar *FileName)
 		delete(pObject);
 	}
 
-	m_pMenu_Files->Recent_Del(DataType, FileName);
+	if( !Open_GDAL(FileName) )
+	{
+		m_pMenu_Files->Recent_Del(DataType, FileName);
+	}
 
 	return( NULL );
 }
@@ -747,6 +751,66 @@ CWKSP_Base_Item * CWKSP_Data_Manager::Open(int DataType, const wxChar *FileName)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
+#include "wksp_module_manager.h"
+#include "wksp_module_library.h"
+#include "wksp_module.h"
+
+//---------------------------------------------------------
+bool CWKSP_Data_Manager::Open_GDAL(const wxChar *File_Name)
+{
+	int			i;
+	CSG_Module	*pGDAL	= NULL, *pOGR	= NULL;
+
+	for(i=0; i<g_pModules->Get_Count() && !pGDAL && !pOGR; i++)
+	{
+		wxFileName	fName(g_pModules->Get_Library(i)->Get_File_Name());
+
+		if( !fName.GetName().Cmp(SG_T("io_gdal")) || !fName.GetName().Cmp(SG_T("libio_gdal")) )
+		{
+			pGDAL	= g_pModules->Get_Library(i)->Get_Module(0)->Get_Module();	// GDAL_Import
+			pOGR	= g_pModules->Get_Library(i)->Get_Module(3)->Get_Module();	// OGR_Import
+		}
+	}
+
+	if( pGDAL && pGDAL->Get_Parameters()->Set_Parameter(SG_T("FILES"), PARAMETER_TYPE_FilePath, File_Name) && pGDAL->Execute() )
+	{
+		CSG_Parameter_Grid_List	*pGrids	= pGDAL->Get_Parameters()->Get_Parameter(SG_T("GRIDS"))->asGridList();
+
+		for(i=0; i<pGrids->Get_Count(); i++)
+		{
+			SG_UI_DataObject_Add(pGrids->asGrid(i), SG_UI_DATAOBJECT_UPDATE_ONLY);
+
+			m_pMenu_Files->Recent_Add(DATAOBJECT_TYPE_Grid, File_Name);
+		}
+
+		return( true );
+	}
+
+	if( pOGR && pOGR->Get_Parameters()->Set_Parameter(SG_T("FILES"), PARAMETER_TYPE_FilePath, File_Name) && pOGR->Execute() )
+	{
+		CSG_Parameter_Shapes_List	*pShapes	= pOGR->Get_Parameters()->Get_Parameter(SG_T("SHAPES"))->asShapesList();
+
+		for(i=0; i<pShapes->Get_Count(); i++)
+		{
+			SG_UI_DataObject_Add(pShapes->asShapes(i), SG_UI_DATAOBJECT_UPDATE_ONLY);
+
+			m_pMenu_Files->Recent_Add(DATAOBJECT_TYPE_Shapes, File_Name);
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
 bool CWKSP_Data_Manager::Exists(CSG_Grid_System *pSystem)
 {
 	return( m_pGrids && m_pGrids->Exists(pSystem) );
diff --git a/src/saga_core/saga_gui/wksp_data_manager.h b/src/saga_core/saga_gui/wksp_data_manager.h
index 0667ed4..0ab0cbd 100644
--- a/src/saga_core/saga_gui/wksp_data_manager.h
+++ b/src/saga_core/saga_gui/wksp_data_manager.h
@@ -123,6 +123,7 @@ public:
 	bool							Open				(const wxChar *FileName);
 	bool							Open				(int DataType);
 	CWKSP_Base_Item *				Open				(int DataType, const wxChar *FileName);
+	bool							Open_GDAL			(const wxChar *File_Name);
 
 	bool							Exists				(class CSG_Grid_System *pSystem);
 	bool							Exists				(class CSG_Data_Object *pObject, int DataType = -1);
@@ -144,9 +145,13 @@ public:
 	bool							Get_Parameters		(class CSG_Data_Object *pObject, class CSG_Parameters *pParameters);
 	bool							Set_Parameters		(class CSG_Data_Object *pObject, class CSG_Parameters *pParameters);
 
+	int								Get_Numbering		(void)	const	{	return( m_Numbering );	}
+
 
 private:
 
+	int								m_Numbering;
+
 	CSG_Parameters					m_Parameters;
 
 	class CWKSP_Project				*m_pProject;
diff --git a/src/saga_core/saga_gui/wksp_grid.cpp b/src/saga_core/saga_gui/wksp_grid.cpp
index d867e7a..338fd94 100644
--- a/src/saga_core/saga_gui/wksp_grid.cpp
+++ b/src/saga_core/saga_gui/wksp_grid.cpp
@@ -1,1334 +1,1312 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    WKSP_Grid.cpp                      //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <wx/dc.h>
-#include <wx/dcmemory.h>
-#include <wx/image.h>
-#include <wx/filename.h>
-
-#include "res_commands.h"
-#include "res_dialogs.h"
-
-#include "helper.h"
-#include "dc_helper.h"
-
-#include "active.h"
-#include "active_attributes.h"
-
-#include "wksp_map_control.h"
-
-#include "wksp_layer_classify.h"
-#include "wksp_layer_legend.h"
-
-#include "wksp_data_manager.h"
-#include "wksp_grid_manager.h"
-#include "wksp_grid.h"
-
-#include "view_scatterplot.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_Grid::CWKSP_Grid(CSG_Grid *pGrid)
-	: CWKSP_Layer(pGrid)
-{
-	m_pGrid			= pGrid;
-
-	m_pOverlay[0]	= NULL;
-	m_pOverlay[1]	= NULL;
-
-	m_Sel_xN		= -1;
-
-	Create_Parameters();
-}
-
-//---------------------------------------------------------
-CWKSP_Grid::~CWKSP_Grid(void)
-{
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-wxString CWKSP_Grid::Get_Name(void)
-{
-	return( wxString::Format(wxT("%02d. %s"), 1 + Get_ID(), m_pGrid->Get_Name()) );
-}
-
-//---------------------------------------------------------
-wxString CWKSP_Grid::Get_Description(void)
-{
-	wxString	s;
-
-	//-----------------------------------------------------
-	s.Append(wxString::Format(wxT("<b>%s</b><table border=\"0\">"),
-		LNG("[CAP] Grid")
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Name")					, m_pGrid->Get_Name()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] File")					, m_pGrid->Get_File_Name()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Projection")				, m_pGrid->Get_Projection().Get_Name().c_str()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%d (x) * %d (y) = %ld</td></tr>"),
-		LNG("[CAP] Number of cells")		, m_pGrid->Get_NX(), m_pGrid->Get_NY(), m_pGrid->Get_NCells()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%f</td></tr>"),
-		LNG("[CAP] Cell size")				, m_pGrid->Get_Cellsize()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>[%f] - [%f] = [%f]</td></tr>"),
-		LNG("[CAP] West-East")				, m_pGrid->Get_XMin(), m_pGrid->Get_XMax(), m_pGrid->Get_XRange()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>[%f] - [%f] = [%f]</td></tr>"),
-		LNG("[CAP] South-North")			, m_pGrid->Get_YMin(), m_pGrid->Get_YMax(), m_pGrid->Get_YRange()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Value Type")				, SG_Data_Type_Get_Name(m_pGrid->Get_Type())
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>[%f] - [%f] = [%f]</td></tr>"),
-		LNG("[CAP] Value Range")			, m_pGrid->Get_ZMin(), m_pGrid->Get_ZMax(), m_pGrid->Get_ZRange()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%f</td></tr>"),
-		LNG("[CAP] Arithmetic Mean")		, m_pGrid->Get_ArithMean(true)
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%f</td></tr>"),
-		LNG("[CAP] Standard Deviation")		, m_pGrid->Get_StdDev(true)
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%fMB</td></tr>"),
-		LNG("[CAP] Memory Size")			, (double)(m_pGrid->Get_NCells() * m_pGrid->Get_nValueBytes()) / N_MEGABYTE_BYTES
-	));
-
-	if( m_pGrid->is_Compressed() )
-	{
-		s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%f%%</td></tr>"),
-			LNG("[CAP] Memory Compression")	, 100.0 * m_pGrid->Get_Compression_Ratio()
-		));
-	}
-
-	if( m_pGrid->is_Cached() )
-	{
-		s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s = %fmb</td></tr>"),
-			LNG("[CAP] File cache activated")	, LNG("buffer size"), m_pGrid->Get_Buffer_Size() / (double)N_MEGABYTE_BYTES
-		));
-	}
-
-	s.Append(wxT("</table>"));
-
-	//-----------------------------------------------------
-//	s.Append(wxString::Format(wxT("<hr><b>%s</b><font size=\"-1\">"), LNG("[CAP] Data History")));
-//	s.Append(m_pGrid->Get_History().Get_HTML());
-//	s.Append(wxString::Format(wxT("</font")));
-
-	return( s );
-}
-
-//---------------------------------------------------------
-wxMenu * CWKSP_Grid::Get_Menu(void)
-{
-	wxMenu	*pMenu, *pSubMenu;
-
-	pMenu		= new wxMenu(m_pGrid->Get_Name());
-
-	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_WKSP_ITEM_CLOSE);
-	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_GRIDS_SAVE);
-	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_GRIDS_SAVEAS);
-	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_GRIDS_SAVEAS_IMAGE);
-	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_GRIDS_SHOW);
-
-	pMenu->AppendSeparator();
-
-	CMD_Menu_Add_Item(pMenu		, true , ID_CMD_GRIDS_HISTOGRAM);
-
-	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_GRIDS_SCATTERPLOT);
-	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_WKSP_ITEM_SETTINGS_COPY);
-
-	pSubMenu	= new wxMenu(LNG("[MNU] Classificaton"));
-	CMD_Menu_Add_Item(pSubMenu	, false, ID_CMD_GRIDS_EQUALINTERVALS);
-	CMD_Menu_Add_Item(pSubMenu	, false, ID_CMD_GRIDS_SET_LUT);
-	CMD_Menu_Add_Item(pSubMenu	, false, ID_CMD_GRIDS_RANGE_MINMAX);
-	CMD_Menu_Add_Item(pSubMenu	, false, ID_CMD_GRIDS_RANGE_STDDEV150);
-	CMD_Menu_Add_Item(pSubMenu	, false, ID_CMD_GRIDS_RANGE_STDDEV200);
-
-	pMenu->Append(ID_CMD_WKSP_FIRST, LNG("[MNU] Classification"), pSubMenu);
-
-	return( pMenu );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Grid::On_Command(int Cmd_ID)
-{
-	switch( Cmd_ID )
-	{
-	default:
-		return( CWKSP_Layer::On_Command(Cmd_ID) );
-
-	case ID_CMD_GRIDS_SAVEAS_IMAGE:
-		_Save_Image();
-		break;
-
-	case ID_CMD_GRIDS_HISTOGRAM:
-		Histogram_Toggle();
-		break;
-
-	case ID_CMD_GRIDS_SCATTERPLOT:
-		Add_ScatterPlot(Get_Grid());
-		break;
-
-	case ID_CMD_GRIDS_EQUALINTERVALS:
-		m_pClassify->Metric2EqualElements();
-		break;
-
-	case ID_CMD_GRIDS_RANGE_MINMAX:
-		Set_Color_Range(
-			m_pGrid->Get_ZMin(true),
-			m_pGrid->Get_ZMax(true)
-		);
-		break;
-
-	case ID_CMD_GRIDS_RANGE_STDDEV150:
-		Set_Color_Range(
-			m_pGrid->Get_ArithMean(true) - 1.5 * m_pGrid->Get_StdDev(true),
-			m_pGrid->Get_ArithMean(true) + 1.5 * m_pGrid->Get_StdDev(true)
-		);
-		break;
-
-	case ID_CMD_GRIDS_RANGE_STDDEV200:
-		Set_Color_Range(
-			m_pGrid->Get_ArithMean(true) - 2.0 * m_pGrid->Get_StdDev(true),
-			m_pGrid->Get_ArithMean(true) + 2.0 * m_pGrid->Get_StdDev(true)
-		);
-		break;
-
-	case ID_CMD_GRIDS_SET_LUT:
-		_LUT_Create();
-		break;
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Grid::On_Command_UI(wxUpdateUIEvent &event)
-{
-	switch( event.GetId() )
-	{
-	default:
-		return( CWKSP_Layer::On_Command_UI(event) );
-
-	case ID_CMD_GRIDS_HISTOGRAM:
-		event.Check(m_pHistogram != NULL);
-		break;
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_Grid::On_Create_Parameters(void)
-{
-	//-----------------------------------------------------
-	// General...
-
-	m_Parameters.Add_String(
-		m_Parameters("NODE_GENERAL")	, "GENERAL_Z_UNIT"			, LNG("[CAP] Unit"),
-		LNG(""),
-		m_pGrid->Get_Unit()
-	);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_GENERAL")	, "GENERAL_Z_FACTOR"		, LNG("[CAP] Z-Factor"),
-		LNG(""),
-		PARAMETER_TYPE_Double
-	);
-
-
-	//-----------------------------------------------------
-	// Memory...
-
-	m_Parameters.Add_Node(
-		NULL							, "NODE_MEMORY"				, LNG("[CAP] Memory"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Choice(
-		m_Parameters("NODE_MEMORY")		, "MEMORY_MODE"				, LNG("[CAP] Memory Handling"),
-		LNG(""),
-		wxString::Format(wxT("%s|%s|%s|"),
-			LNG("[VAL] Normal"),
-			LNG("[VAL] RTL Compression"),
-			LNG("[VAL] File Cache")
-		), 0
-	);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_MEMORY")		, "MEMORY_BUFFER_SIZE"		, LNG("[CAP] Buffer Size MB"),
-		LNG(""),
-		PARAMETER_TYPE_Double
-	);
-
-
-	//-----------------------------------------------------
-	// Display...
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_DISPLAY")	, "DISPLAY_TRANSPARENCY"	, LNG("[CAP] Transparency [%]"),
-		LNG(""),
-		PARAMETER_TYPE_Double, 0.0, 0.0, true, 100.0, true
-	);
-
-	m_Parameters.Add_Choice(
-		m_Parameters("NODE_DISPLAY")	, "DISPLAY_INTERPOLATION"	, LNG("[CAP] Interpolation"),
-		LNG(""),
-		wxString::Format(wxT("%s|%s|%s|%s|%s|"),
-			LNG("[VAL] None"),
-			LNG("[VAL] Bilinear"),
-			LNG("[VAL] Inverse Distance"),
-			LNG("[VAL] Bicubic Spline"),
-			LNG("[VAL] B-Spline")
-		), 0
-	);
-
-
-	//-----------------------------------------------------
-	// Classification...
-
-	((CSG_Parameter_Choice *)m_Parameters("COLORS_TYPE")->Get_Data())->Set_Items(
-		wxString::Format(wxT("%s|%s|%s|%s|%s|%s|"),
-			LNG("[VAL] Unique Symbol"),
-			LNG("[VAL] Lookup Table"),
-			LNG("[VAL] Graduated Color"),
-			LNG("[VAL] RGB"),
-			LNG("[VAL] Shade"),
-			LNG("[VAL] RGB Overlay")
-		)
-	);
-
-	m_Parameters("COLORS_TYPE")->Set_Value(CLASSIFY_METRIC);
-
-	//-----------------------------------------------------
-	m_Parameters.Add_Node(
-		m_Parameters("NODE_COLORS")		, "NODE_SHADE"		, LNG("[CAP] Shade"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Choice(
-		m_Parameters("NODE_SHADE")		, "SHADE_MODE"		, LNG("[CAP] Coloring"),
-		LNG(""),
-		wxString::Format(wxT("%s|%s|%s|%s|%s|%s|%s|%s|"),
-			LNG("bright - dark"),
-			LNG("dark - bright"),
-			LNG("white - cyan"),
-			LNG("cyan - white"),
-			LNG("white - magenta"),
-			LNG("magenta - white"),
-			LNG("white - yellow"),
-			LNG("yellow - white")
-		), 0
-	);
-
-	//-----------------------------------------------------
-	m_Parameters.Add_Node(
-		m_Parameters("NODE_COLORS")		, "NODE_OVERLAY"	, LNG("[CAP] RGB Overlay"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Choice(
-		m_Parameters("NODE_OVERLAY")	, "OVERLAY_MODE"	, LNG("[CAP] Coloring"),
-		LNG(""),
-		wxString::Format(wxT("%s|%s|%s|%s|%s|%s|"),
-			LNG("red=this, green=1, blue=2"),
-			LNG("red=this, green=2, blue=1"),
-			LNG("red=1, green=this, blue=2"),
-			LNG("red=2, green=this, blue=1"),
-			LNG("red=1, green=2, blue=this"),
-			LNG("red=2, green=1, blue=this")
-		), 0
-	);
-
-	m_Parameters.Add_Grid(
-		m_Parameters("NODE_OVERLAY")	, "OVERLAY_1"		, LNG("[CAP] Overlay 1"),
-		LNG(""),
-		PARAMETER_INPUT_OPTIONAL, false
-	);
-
-	m_Parameters.Add_Grid(
-		m_Parameters("NODE_OVERLAY")	, "OVERLAY_2"		, LNG("[CAP] Overlay 2"),
-		LNG(""),
-		PARAMETER_INPUT_OPTIONAL, false
-	);
-
-
-	//-----------------------------------------------------
-	// Cell Values...
-
-	m_Parameters.Add_Node(
-		NULL							, "NODE_VALUES"		, LNG("[CAP] Display: Cell Values"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_VALUES")		, "VALUES_SHOW"		, LNG("[CAP] Show"),
-		LNG(""),
-		PARAMETER_TYPE_Bool, true
-	);
-
-	m_Parameters.Add_Font(
-		m_Parameters("NODE_VALUES")		, "VALUES_FONT"		, LNG("[CAP] Font"),
-		LNG("")
-	)->asFont()->SetFamily(wxDECORATIVE);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_VALUES")		, "VALUES_SIZE"		, LNG("[CAP] Size"),
-		LNG(""),
-		PARAMETER_TYPE_Double, 15, 0, true , 100.0, true
-	);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_VALUES")		, "VALUES_DECIMALS"	, LNG("[CAP] Decimals"),
-		LNG(""),
-		PARAMETER_TYPE_Int, 2
-	);
-
-
-	//-----------------------------------------------------
-	DataObject_Changed((CSG_Parameters *)NULL);
-}
-
-//---------------------------------------------------------
-void CWKSP_Grid::On_DataObject_Changed(void)
-{
-	//-----------------------------------------------------
-	m_Parameters("GENERAL_Z_UNIT")			->Set_Value((void *)m_pGrid->Get_Unit());
-	m_Parameters("GENERAL_Z_FACTOR")		->Set_Value(m_pGrid->Get_ZFactor());
-
-	//-----------------------------------------------------
-	m_Parameters("MEMORY_MODE")				->Set_Value(
-		m_pGrid->is_Compressed() ? 1 : (m_pGrid->is_Cached() ? 2 : 0)
-	);
-
-	m_Parameters("MEMORY_BUFFER_SIZE")		->Set_Value(
-		(double)m_pGrid->Get_Buffer_Size() / N_MEGABYTE_BYTES
-	);
-}
-
-//---------------------------------------------------------
-void CWKSP_Grid::On_Parameters_Changed(void)
-{
-	//-----------------------------------------------------
-	m_pGrid->Set_Unit		(m_Parameters("GENERAL_Z_UNIT")		->asString());
-	m_pGrid->Set_ZFactor	(m_Parameters("GENERAL_Z_FACTOR")	->asDouble());
-
-	//-----------------------------------------------------
-	m_pOverlay[0]	= g_pData->Get_Grids()->Get_Grid(m_Parameters("OVERLAY_1")->asGrid());
-	m_pOverlay[1]	= g_pData->Get_Grids()->Get_Grid(m_Parameters("OVERLAY_2")->asGrid());
-	m_bOverlay		= m_Parameters("COLORS_TYPE")->asInt() == 5;
-
-	m_pClassify->Set_Shade_Mode(m_Parameters("SHADE_MODE")->asInt());
-
-	//-----------------------------------------------------
-	switch( m_Parameters("MEMORY_MODE")->asInt() )
-	{
-	case 0:
-		if( m_pGrid->is_Compressed() )
-		{
-			m_pGrid->Set_Compression(false);
-		}
-		else if( m_pGrid->is_Cached() )
-		{
-			m_pGrid->Set_Cache(false);
-		}
-		break;
-
-	case 1:
-		if( !m_pGrid->is_Compressed() )
-		{
-			m_pGrid->Set_Compression(true);
-		}
-		break;
-
-	case 2:
-		if( !m_pGrid->is_Cached() )
-		{
-			m_pGrid->Set_Cache(true);
-		}
-		break;
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_Grid::_LUT_Create(void)
-{
-	static CSG_Parameters	Parameters;
-
-	if( Parameters.Get_Count() == 0 )
-	{
-		Parameters.Create(NULL, LNG("Create Lookup Table"), LNG(""));
-		Parameters.Add_Colors(NULL, "COLOR"	, LNG("Colors")	, LNG(""));
-	}
-
-	//-----------------------------------------------------
-	if( DLG_Parameters(&Parameters) )
-	{
-		int					i, n, x, y;
-		double				dValue, dStep, eValue;
-		CSG_String			sValue;
-		CSG_Colors			*pColors;
-		CSG_Table_Record	*pRecord_LUT;
-		CSG_Table			*pLUT;
-
-		//-------------------------------------------------
-		pColors	= Parameters("COLOR")->asColors();
-
-		pLUT	= m_Parameters("LUT")->asTable();
-		pLUT	->Del_Records();
-
-		for(i=0, n=0; i<m_pGrid->Get_NCells() && n < pColors->Get_Count() && PROGRESSBAR_Set_Position(i, m_pGrid->Get_NCells()); i++)
-		{
-			if( m_pGrid->Get_Sorted(i, x, y) && (n == 0 || dValue != m_pGrid->asDouble(x, y)) )
-			{
-				dValue		= m_pGrid->asDouble(x, y);
-				n++;
-			}
-		}
-
-		//-------------------------------------------------
-		if( n >= pColors->Get_Count() )
-		{
-			dValue	= m_pGrid->Get_ZMin();
-			dStep	= m_pGrid->Get_ZRange() / pColors->Get_Count();
-
-			for(i=0; i<pColors->Get_Count(); i++)
-			{
-				eValue		 = dValue;
-				dValue		+= dStep;
-				sValue		 = SG_Get_String(eValue, SG_Get_Significant_Decimals(eValue), false);
-				sValue		+= SG_T(" - ");
-				sValue		+= SG_Get_String(dValue, SG_Get_Significant_Decimals(dValue), false);
-
-				pRecord_LUT	= pLUT->Add_Record();
-				pRecord_LUT	->Set_Value(0, pColors->Get_Color(i));
-				pRecord_LUT	->Set_Value(1, sValue);			// Name
-				pRecord_LUT	->Set_Value(2, sValue);			// Description
-				pRecord_LUT	->Set_Value(3, eValue);			// Minimum
-				pRecord_LUT	->Set_Value(4, dValue);			// Maximum
-			}
-		}
-		else
-		{
-			pColors->Set_Count(n);
-
-			for(i=0, n=0; i<m_pGrid->Get_NCells() && PROGRESSBAR_Set_Position(i, m_pGrid->Get_NCells()); i++)
-			{
-				if( m_pGrid->Get_Sorted(i, x, y) && (pLUT->Get_Record_Count() == 0 || dValue != m_pGrid->asDouble(x, y)) )
-				{
-					dValue		= m_pGrid->asDouble(x, y);
-					sValue		= SG_Get_String(dValue, SG_Get_Significant_Decimals(dValue), false);
-
-					pRecord_LUT	= pLUT->Add_Record();
-					pRecord_LUT	->Set_Value(0, pColors->Get_Color(n++));
-					pRecord_LUT	->Set_Value(1, sValue);		// Name
-					pRecord_LUT	->Set_Value(2, sValue);		// Description
-					pRecord_LUT	->Set_Value(3, dValue);		// Minimum
-					pRecord_LUT	->Set_Value(4, dValue);		// Maximum
-				}
-			}
-		}
-
-		PROGRESSBAR_Set_Position(0);
-
-		DataObject_Changed();
-
-		m_Parameters("COLORS_TYPE")		->Set_Value(1);		// Lookup Table
-
-		Parameters_Changed();
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-wxString CWKSP_Grid::Get_Value(CSG_Point ptWorld, double Epsilon)
-{
-	double		Value;
-	wxString	s;
-
-	if( m_pGrid->Get_Value(ptWorld, Value, GRID_INTERPOLATION_NearestNeighbour, true) )
-	{
-		switch( m_pClassify->Get_Mode() )
-		{
-		case CLASSIFY_LUT:
-			s	= m_pClassify->Get_Class_Name_byValue(Value);
-			break;
-
-		case CLASSIFY_METRIC:	default:
-		case CLASSIFY_SHADE:
-			switch( m_pGrid->Get_Type() )
-			{
-			case SG_DATATYPE_Byte:
-			case SG_DATATYPE_Char:
-			case SG_DATATYPE_Word:
-			case SG_DATATYPE_Short:
-			case SG_DATATYPE_DWord:
-			case SG_DATATYPE_Int:
-				s.Printf(wxT("%d%s"), (int)Value, m_pGrid->Get_Unit());
-				break;
-
-			case SG_DATATYPE_Float:	default:
-			case SG_DATATYPE_Double:
-				s.Printf(wxT("%f%s"), Value, m_pGrid->Get_Unit());
-				break;
-			}
-			break;
-
-		case CLASSIFY_RGB:
-			s.Printf(wxT("R%03d G%03d B%03d"), SG_GET_R((int)Value), SG_GET_G((int)Value), SG_GET_B((int)Value));
-			break;
-		}
-	}
-
-	return( s );
-}
-
-//---------------------------------------------------------
-double CWKSP_Grid::Get_Value_Range(void)
-{
-	return( m_pGrid->Get_ZRange() );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Grid::On_Edit_On_Key_Down(int KeyCode)
-{
-	switch( KeyCode )
-	{
-	default:
-		return( false );
-
-	case WXK_DELETE:
-		return( _Edit_Del_Selection() );
-	}
-}
-
-//---------------------------------------------------------
-#define SELECTION_MAX	20
-
-//---------------------------------------------------------
-bool CWKSP_Grid::On_Edit_On_Mouse_Up(CSG_Point Point, double ClientToWorld, int Key)
-{
-	int					x, y;
-	CSG_Table_Record	*pRecord;
-	CSG_Rect			rWorld(m_Edit_Mouse_Down, Point);
-
-	m_Sel_xOff	= m_pGrid->Get_System().Get_xWorld_to_Grid(rWorld.Get_XMin());
-	if( m_Sel_xOff < 0 )
-		m_Sel_xOff	= 0;
-	m_Sel_xN	= m_pGrid->Get_System().Get_xWorld_to_Grid(rWorld.Get_XMax());
-	if( m_Sel_xN >= m_pGrid->Get_NX() )
-		m_Sel_xN	= m_pGrid->Get_NX() - 1;
-	m_Sel_xN	= 1 + m_Sel_xN - m_Sel_xOff;
-
-	m_Sel_yOff	= m_pGrid->Get_System().Get_yWorld_to_Grid(rWorld.Get_YMin());
-	if( m_Sel_yOff < 0 )
-		m_Sel_yOff	= 0;
-	m_Sel_yN	= m_pGrid->Get_System().Get_yWorld_to_Grid(rWorld.Get_YMax());
-	if( m_Sel_yN >= m_pGrid->Get_NY() )
-		m_Sel_yN	= m_pGrid->Get_NY() - 1;
-	m_Sel_yN	= 1 + m_Sel_yN - m_Sel_yOff;
-
-	m_Edit_Attributes.Destroy();
-
-	if( m_Sel_xN < 1 || m_Sel_yN < 1 )
-	{
-		m_Sel_xN	= -1;
-	}
-	else
-	{
-		if( m_Sel_xN > SELECTION_MAX )
-		{
-			m_Sel_xOff	+= (m_Sel_xN - SELECTION_MAX) / 2;
-			m_Sel_xN	= SELECTION_MAX;
-		}
-
-		if( m_Sel_yN > SELECTION_MAX )
-		{
-			m_Sel_yOff	+= (m_Sel_yN - SELECTION_MAX) / 2;
-			m_Sel_yN	= SELECTION_MAX;
-		}
-
-		for(x=0; x<m_Sel_xN; x++)
-		{
-			m_Edit_Attributes.Add_Field(wxString::Format(wxT("%d"), x + 1), SG_DATATYPE_Double);
-		}
-
-		for(y=0; y<m_Sel_yN; y++)
-		{
-			pRecord	= m_Edit_Attributes.Add_Record();
-
-			for(x=0; x<m_Sel_xN; x++)
-			{
-				pRecord->Set_Value(x, m_pGrid->asDouble(m_Sel_xOff + x, m_Sel_yOff + m_Sel_yN - 1 - y, false));
-			}
-		}
-	}
-
-	g_pACTIVE->Get_Attributes()->Set_Attributes();
-
-	Update_Views(true);
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Grid::On_Edit_Set_Attributes(void)
-{
-	int				x, y;
-	CSG_Table_Record	*pRecord;
-
-	if( m_Sel_xN >= 0 )
-	{
-		for(y=0; y<m_Sel_yN; y++)
-		{
-			pRecord	= m_Edit_Attributes.Get_Record(y);
-
-			for(x=0; x<m_Sel_xN; x++)
-			{
-				m_pGrid->Set_Value(m_Sel_xOff + x, m_Sel_yOff + m_Sel_yN - 1 - y, pRecord->asDouble(x));
-			}
-		}
-
-		Update_Views(true);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-TSG_Rect CWKSP_Grid::On_Edit_Get_Extent(void)
-{
-	if( m_Sel_xN >= 0 )
-	{
-		return( CSG_Rect(
-			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_xGrid_to_World(m_Sel_xOff),
-			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_yGrid_to_World(m_Sel_yOff),
-			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_xGrid_to_World(m_Sel_xOff + m_Sel_xN),
-			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_yGrid_to_World(m_Sel_yOff + m_Sel_yN))
-		);
-	}
-
-	return( m_pGrid->Get_Extent().m_rect );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Grid::_Edit_Del_Selection(void)
-{
-	int		x, y;
-
-	if( m_Sel_xN >= 0 && DLG_Message_Confirm(LNG("[DLG] Set selected values to no data."), LNG("[CAP] Delete")) )
-	{
-		for(y=m_Sel_yOff; y<m_Sel_yOff + m_Sel_yN; y++)
-		{
-			for(x=m_Sel_xOff; x<m_Sel_xOff + m_Sel_xN; x++)
-			{
-				m_pGrid->Set_NoData(x, y);
-			}
-		}
-
-		Update_Views(false);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Grid::Fit_Color_Range(CSG_Rect rWorld)
-{
-	int		x, y, xMin, yMin, xMax, yMax;
-	double	z, zMin, zMax;
-
-	if( rWorld.Intersect(Get_Extent()) )
-	{
-		xMin	= m_pGrid->Get_System().Get_xWorld_to_Grid(rWorld.Get_XMin());
-		yMin	= m_pGrid->Get_System().Get_yWorld_to_Grid(rWorld.Get_YMin());
-		xMax	= m_pGrid->Get_System().Get_xWorld_to_Grid(rWorld.Get_XMax());
-		yMax	= m_pGrid->Get_System().Get_yWorld_to_Grid(rWorld.Get_YMax());
-		zMin	= 1.0;
-		zMax	= 0.0;
-
-		for(y=yMin; y<=yMax; y++)
-		{
-			for(x=xMin; x<=xMax; x++)
-			{
-				if( m_pGrid->is_InGrid(x, y) )
-				{
-					z	= m_pGrid->asDouble(x, y);
-
-					if( zMin > zMax )
-					{
-						zMin	= zMax	= z;
-					}
-					else if( z < zMin )
-					{
-						zMin	= z;
-					}
-					else if( z > zMax )
-					{
-						zMax	= z;
-					}
-				}
-			}
-		}
-
-		return( Set_Color_Range(zMin, zMax) );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Grid::asImage(CSG_Grid *pImage)
-{
-	int			x, y;
-	wxBitmap	BMP;
-
-	if( pImage && Get_Image_Grid(BMP) )
-	{
-		wxImage	IMG(BMP.ConvertToImage());
-
-		pImage->Create(m_pGrid, SG_DATATYPE_Int);
-
-		for(y=0; y<pImage->Get_NY() && PROGRESSBAR_Set_Position(y, pImage->Get_NY()); y++)
-		{
-			for(x=0; x<pImage->Get_NX(); x++)
-			{
-				pImage->Set_Value(x, y, SG_GET_RGB(IMG.GetRed(x, y), IMG.GetGreen(x, y), IMG.GetBlue(x, y)));
-			}
-		}
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-void CWKSP_Grid::_Save_Image(void)
-{
-	int				type;
-	wxString		file;
-	wxBitmap		BMP;
-	CSG_File		Stream;
-	CSG_Parameters	Parms;
-
-	//-----------------------------------------------------
-	Parms.Set_Name(LNG("[CAP] Save Grid as Image..."));
-
-	Parms.Add_Value(
-		NULL	, "WORLD"	, LNG("Save Georeference"),
-		wxT(""),
-		PARAMETER_TYPE_Bool, 1
-	);
-
-	Parms.Add_Value(
-		NULL	, "LG"	, LNG("Legend: Save"),
-		wxT(""),
-		PARAMETER_TYPE_Bool, 1
-	);
-
-	Parms.Add_Value(
-		NULL	, "LZ"	, LNG("Legend: Zoom"),
-		wxT(""),
-		PARAMETER_TYPE_Double, 1.0, 0, true
-	);
-
-	//-----------------------------------------------------
-	if( DLG_Image_Save(file, type) && DLG_Parameters(&Parms) )
-	{
-		if( Get_Image_Grid(BMP) )
-		{
-			BMP.SaveFile(file, (wxBitmapType)type);
-		}
-
-		if( Parms("LG")->asBool() && Get_Image_Legend(BMP, Parms("LZ")->asDouble()) )
-		{
-			wxFileName	fn(file);
-			fn.SetName(wxString::Format(wxT("%s_legend"), fn.GetName().c_str()));
-
-			BMP.SaveFile(fn.GetFullPath(), (wxBitmapType)type);
-		}
-
-		if( Parms("WORLD")->asBool() )
-		{
-			wxFileName	fn(file);
-
-			switch( type )
-			{
-			default:					fn.SetExt(wxT("world"));	break;
-			case wxBITMAP_TYPE_BMP:		fn.SetExt(wxT("bpw"));		break;
-			case wxBITMAP_TYPE_GIF:		fn.SetExt(wxT("gfw"));		break;
-			case wxBITMAP_TYPE_JPEG:	fn.SetExt(wxT("jgw"));		break;
-			case wxBITMAP_TYPE_PNG:		fn.SetExt(wxT("pgw"));		break;
-			case wxBITMAP_TYPE_PCX:		fn.SetExt(wxT("pxw"));		break;
-			case wxBITMAP_TYPE_TIF:		fn.SetExt(wxT("tfw"));		break; 
-			}
-
-			if( Stream.Open(fn.GetFullPath().c_str(), SG_FILE_W, false) )
-			{
-				Stream.Printf(wxT("%.10f\n%.10f\n%.10f\n%.10f\n%.10f\n%.10f\n"),
-					 m_pGrid->Get_Cellsize(),
-					 0.0, 0.0,
-					-m_pGrid->Get_Cellsize(),
-					 m_pGrid->Get_XMin(),
-					 m_pGrid->Get_YMax()
-				);
-			}
-		}
-	}
-}
-
-//---------------------------------------------------------
-bool CWKSP_Grid::Get_Image_Grid(wxBitmap &BMP, bool bFitSize)
-{
-	if( bFitSize || (BMP.GetWidth() > 0 && BMP.GetHeight() > 0) )
-	{
-		Set_Buisy_Cursor(true);
-
-		if( bFitSize )
-		{
-			BMP.Create(m_pGrid->Get_NX(), m_pGrid->Get_NY());
-		}
-
-		wxMemoryDC		dc;
-		wxRect			r(0, 0, BMP.GetWidth(), BMP.GetHeight());
-		CWKSP_Map_DC	dc_Map(Get_Extent(), r, 1.0, SG_GET_RGB(255, 255, 255));
-
-		On_Draw(dc_Map, false);
-
-		dc.SelectObject(BMP);
-		dc.SetBackground(*wxWHITE_BRUSH);
-		dc.Clear();
-
-		dc_Map.Draw(dc);
-
-		dc.SelectObject(wxNullBitmap);
-
-		Set_Buisy_Cursor(false);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Grid::Get_Image_Legend(wxBitmap &BMP, double Zoom)
-{
-	if( Zoom > 0.0 )
-	{
-		wxMemoryDC	dc;
-		wxSize		s(Get_Legend()->Get_Size(Zoom, 1.0));
-
-		BMP.Create(s.GetWidth(), s.GetHeight());
-
-		dc.SelectObject(BMP);
-		dc.SetBackground(*wxWHITE_BRUSH);
-		dc.Clear();
-
-		Get_Legend()->Draw(dc, Zoom, 1.0, wxPoint(0, 0));
-
-		dc.SelectObject(wxNullBitmap);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_Grid::On_Draw(CWKSP_Map_DC &dc_Map, bool bEdit)
-{
-	int		Interpolation;
-	double	Transparency;
-
-	if(	Get_Extent().Intersects(dc_Map.m_rWorld) != INTERSECTION_None )
-	{
-		switch( m_pClassify->Get_Mode() )
-		{
-		default:				Transparency	= m_Parameters("DISPLAY_TRANSPARENCY")->asDouble() / 100.0;	break;
-		case CLASSIFY_SHADE:	Transparency	= 2.0;	break;
-		case CLASSIFY_RGB:		Transparency	= m_Parameters("DISPLAY_TRANSPARENCY")->asDouble() / 100.0;	if( Transparency <= 0.0 )	Transparency	= 3.0;	break;
-		}
-
-		m_pClassify->Set_Shade_Mode(m_Parameters("SHADE_MODE")->asInt());
-
-		if( dc_Map.IMG_Draw_Begin(Transparency) )
-		{
-			Interpolation	= m_pClassify->Get_Mode() == CLASSIFY_LUT
-							? GRID_INTERPOLATION_NearestNeighbour
-							: m_Parameters("DISPLAY_INTERPOLATION")->asInt();
-
-			if(	dc_Map.m_DC2World >= m_pGrid->Get_Cellsize()
-			||	Interpolation != GRID_INTERPOLATION_NearestNeighbour || m_bOverlay )
-			{
-				_Draw_Grid_Points	(dc_Map, Interpolation);
-			}
-			else
-			{
-				_Draw_Grid_Cells	(dc_Map);
-			}
-
-			dc_Map.IMG_Draw_End();
-
-			_Draw_Values(dc_Map);
-
-			if( bEdit )
-			{
-				_Draw_Edit(dc_Map);
-			}
-		}
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_Grid::_Draw_Grid_Points(CWKSP_Map_DC &dc_Map, int Interpolation)
-{
-	bool		bByteWise	= m_pClassify->Get_Mode() == CLASSIFY_RGB;
-	int			xDC, yDC, axDC, ayDC, bxDC, byDC, Color, r, g, b;
-	double		x, y, z;
-	CSG_Rect	rGrid(m_pGrid->Get_Extent());
-
-	switch( m_Parameters("OVERLAY_MODE")->asInt() )
-	{
-	default:
-	case 0:	r = 0; g = 1; b = 2;	break;
-	case 1:	r = 0; g = 2; b = 1;	break;
-	case 2:	r = 1; g = 0; b = 2;	break;
-	case 3:	r = 2; g = 0; b = 1;	break;
-	case 4:	r = 1; g = 2; b = 0;	break;
-	case 5:	r = 2; g = 1; b = 0;	break;
-	}
-
-	m_pOverlay[0]	= g_pData->Get_Grids()->Get_Grid(m_Parameters("OVERLAY_1")->asGrid());
-	m_pOverlay[1]	= g_pData->Get_Grids()->Get_Grid(m_Parameters("OVERLAY_2")->asGrid());
-
-	rGrid.Inflate(m_pGrid->Get_Cellsize() / 2.0, false);
-	rGrid.Intersect(dc_Map.m_rWorld);
-
-	axDC	= (int)dc_Map.xWorld2DC(rGrid.Get_XMin());	if( axDC < 0 )	axDC	= 0;
-	bxDC	= (int)dc_Map.xWorld2DC(rGrid.Get_XMax());	if( bxDC > dc_Map.m_rDC.GetWidth() )	bxDC	= dc_Map.m_rDC.GetWidth();
-	ayDC	= (int)dc_Map.yWorld2DC(rGrid.Get_YMin());	if( ayDC > dc_Map.m_rDC.GetHeight() )	ayDC	= dc_Map.m_rDC.GetHeight();
-	byDC	= (int)dc_Map.yWorld2DC(rGrid.Get_YMax());	if( byDC < 0 )	byDC	= 0;
-
-	for(y=rGrid.Get_YMin(), yDC=ayDC-1; yDC>=byDC; y+=dc_Map.m_DC2World, yDC--)
-	{
-		for(x=rGrid.Get_XMin(), xDC=axDC; xDC<bxDC; x+=dc_Map.m_DC2World, xDC++)
-		{
-			if( m_pGrid->Get_Value(x, y, z, Interpolation, false, bByteWise, true) )
-			{
-				if( m_bOverlay == false )
-				{
-					if( m_pClassify->Get_Class_Color_byValue(z, Color) )
-					{
-						dc_Map.IMG_Set_Pixel(xDC, yDC, Color);
-					}
-				}
-				else
-				{
-					int		c[3];
-
-					c[0]	= (int)(255.0 * m_pClassify->Get_MetricToRelative(z));
-
-					c[1]	= m_pOverlay[0] && m_pOverlay[0]->Get_Grid()->Get_Value(x, y, z, Interpolation, false, false, true)
-							? (int)(255.0 * m_pOverlay[0]->m_pClassify->Get_MetricToRelative(z)) : 255;
-
-					c[2]	= m_pOverlay[1] && m_pOverlay[1]->Get_Grid()->Get_Value(x, y, z, Interpolation, false, false, true)
-							? (int)(255.0 * m_pOverlay[1]->m_pClassify->Get_MetricToRelative(z)) : 255;
-
-					dc_Map.IMG_Set_Pixel(xDC, yDC, SG_GET_RGB(
-						c[r] < 0 ? 0 : c[r] > 255 ? 255 : c[r],
-						c[g] < 0 ? 0 : c[g] > 255 ? 255 : c[g],
-						c[b] < 0 ? 0 : c[b] > 255 ? 255 : c[b]
-					));
-				}
-			}
-		}
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_Grid::_Draw_Grid_Cells(CWKSP_Map_DC &dc_Map)
-{
-	int		x, y, xa, ya, xb, yb, xaDC, yaDC, xbDC, ybDC, Color;
-	double	xDC, yDC, axDC, ayDC, dDC;
-
-	//-----------------------------------------------------
-	dDC		= m_pGrid->Get_Cellsize() * dc_Map.m_World2DC;
-
-	xa		= m_pGrid->Get_System().Get_xWorld_to_Grid(dc_Map.m_rWorld.Get_XMin());
-	ya		= m_pGrid->Get_System().Get_yWorld_to_Grid(dc_Map.m_rWorld.Get_YMin());
-	xb		= m_pGrid->Get_System().Get_xWorld_to_Grid(dc_Map.m_rWorld.Get_XMax());
-	yb		= m_pGrid->Get_System().Get_yWorld_to_Grid(dc_Map.m_rWorld.Get_YMax());
-
-	if( xa < 0 )	xa	= 0;	if( xb >= m_pGrid->Get_NX() )	xb	= m_pGrid->Get_NX() - 1;
-	if( ya < 0 )	ya	= 0;	if( yb >= m_pGrid->Get_NY() )	yb	= m_pGrid->Get_NY() - 1;
-
-	axDC	= dc_Map.xWorld2DC(m_pGrid->Get_System().Get_xGrid_to_World(xa)) + dDC / 2.0;
-	ayDC	= dc_Map.yWorld2DC(m_pGrid->Get_System().Get_yGrid_to_World(ya)) - dDC / 2.0;
-
-	//-----------------------------------------------------
-	for(y=ya, yDC=ayDC, yaDC=(int)(ayDC), ybDC=(int)(ayDC+dDC); y<=yb; y++, ybDC=yaDC, yaDC=(int)(yDC-=dDC))
-	{
-		for(x=xa, xDC=axDC, xaDC=(int)(axDC-dDC), xbDC=(int)(axDC); x<=xb; x++, xaDC=xbDC, xbDC=(int)(xDC+=dDC))
-		{
-			if( m_pGrid->is_InGrid(x, y) && m_pClassify->Get_Class_Color_byValue(m_pGrid->asDouble(x, y), Color) )
-			{
-				dc_Map.IMG_Set_Rect(xaDC, yaDC, xbDC, ybDC, Color);
-			}
-		}
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_Grid::_Draw_Values(CWKSP_Map_DC &dc_Map)
-{
-	int			x, y, xa, ya, xb, yb, Decimals;
-	double		xDC, yDC, axDC, ayDC, dDC, zFactor, Value;
-	wxString	s;
-	wxFont		Font;
-
-	//-----------------------------------------------------
-	if(	m_Parameters("VALUES_SHOW")->asBool() && (dDC = m_pGrid->Get_Cellsize() * dc_Map.m_World2DC) > 40 )
-	{
-		zFactor		=  m_pGrid->Get_ZFactor();
-		Decimals	=  m_Parameters("VALUES_DECIMALS")	->asInt();
-
-		xDC			=  m_Parameters("VALUES_SIZE")		->asDouble() / 100.0;
-		x			=  m_Parameters("VALUES_FONT")		->asColor();
-		Font		= *m_Parameters("VALUES_FONT")		->asFont();
-		Font.SetPointSize((int)(xDC * dDC));
-		dc_Map.dc.SetFont(Font);
-		dc_Map.dc.SetTextForeground(Get_Color_asWX(x));
-
-		x			=  m_Parameters("VALUES_FONT")		->asInt();
-		dc_Map.dc.SetTextForeground(wxColour(SG_GET_R(x), SG_GET_G(x), SG_GET_B(x)));
-
-		//-------------------------------------------------
-		xa		= m_pGrid->Get_System().Get_xWorld_to_Grid(dc_Map.m_rWorld.Get_XMin());
-		ya		= m_pGrid->Get_System().Get_yWorld_to_Grid(dc_Map.m_rWorld.Get_YMin());
-		xb		= m_pGrid->Get_System().Get_xWorld_to_Grid(dc_Map.m_rWorld.Get_XMax());
-		yb		= m_pGrid->Get_System().Get_yWorld_to_Grid(dc_Map.m_rWorld.Get_YMax());
-
-		if( xa < 0 )	xa	= 0;	if( xb >= m_pGrid->Get_NX() )	xb	= m_pGrid->Get_NX() - 1;
-		if( ya < 0 )	ya	= 0;	if( yb >= m_pGrid->Get_NY() )	yb	= m_pGrid->Get_NY() - 1;
-
-		axDC	= dc_Map.xWorld2DC(m_pGrid->Get_System().Get_xGrid_to_World(xa));
-		ayDC	= dc_Map.yWorld2DC(m_pGrid->Get_System().Get_yGrid_to_World(ya));
-
-		//-------------------------------------------------
-		for(y=ya, yDC=ayDC; y<=yb; y++, yDC-=dDC)
-		{
-			for(x=xa, xDC=axDC; x<=xb; x++, xDC+=dDC)
-			{
-				if( m_pGrid->is_InGrid(x, y) )
-				{
-					Value	= m_pGrid->asDouble(x, y);
-
-					switch( m_pClassify->Get_Mode() )
-					{
-					case CLASSIFY_RGB:
-						s.Printf(wxT("R%03d G%03d B%03d"), SG_GET_R((int)Value), SG_GET_G((int)Value), SG_GET_B((int)Value));
-						break;
-
-					default:
-						s.Printf(wxT("%.*f"), Decimals, zFactor * Value);
-						break;
-					}
-
-					Draw_Text(dc_Map.dc, TEXTALIGN_CENTER, (int)xDC, (int)yDC, s);
-				}
-			}
-		}
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_Grid::_Draw_Edit(CWKSP_Map_DC &dc_Map)
-{
-	if( m_Sel_xN >= 0 )
-	{
-		CSG_Rect	r(
-			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_xGrid_to_World(m_Sel_xOff),
-			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_yGrid_to_World(m_Sel_yOff),
-			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_xGrid_to_World(m_Sel_xOff + m_Sel_xN),
-			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_yGrid_to_World(m_Sel_yOff + m_Sel_yN)
-		);
-
-		TSG_Point_Int		a(dc_Map.World2DC(r.Get_TopLeft())),
-						b(dc_Map.World2DC(r.Get_BottomRight()));
-
-		a.x	-= 1;
-		b.x	-= 1;
-		a.y	-= 1;
-		b.y	-= 1;
-
-		dc_Map.dc.SetPen(wxPen(wxColour(255, 0, 0), 2, wxSOLID));
-		dc_Map.dc.DrawLine(a.x, a.y, a.x, b.y);
-		dc_Map.dc.DrawLine(a.x, b.y, b.x, b.y);
-		dc_Map.dc.DrawLine(b.x, b.y, b.x, a.y);
-		dc_Map.dc.DrawLine(a.x, a.y, b.x, a.y);
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    WKSP_Grid.cpp                      //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <wx/dc.h>
+#include <wx/dcmemory.h>
+#include <wx/image.h>
+#include <wx/filename.h>
+
+#include "res_commands.h"
+#include "res_dialogs.h"
+
+#include "helper.h"
+#include "dc_helper.h"
+
+#include "active.h"
+#include "active_attributes.h"
+
+#include "wksp_map_control.h"
+
+#include "wksp_layer_classify.h"
+#include "wksp_layer_legend.h"
+
+#include "wksp_data_manager.h"
+#include "wksp_grid_manager.h"
+#include "wksp_grid.h"
+
+#include "view_scatterplot.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_Grid::CWKSP_Grid(CSG_Grid *pGrid)
+	: CWKSP_Layer(pGrid)
+{
+	m_pGrid			= pGrid;
+
+	m_pOverlay[0]	= NULL;
+	m_pOverlay[1]	= NULL;
+
+	m_Sel_xN		= -1;
+
+	Create_Parameters();
+}
+
+//---------------------------------------------------------
+CWKSP_Grid::~CWKSP_Grid(void)
+{
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define DESC_ADD_STR(label, value)	s.Append(wxString::Format(wxT("<tr><td valign=\"top\">%s</td><td valign=\"top\">%s</td></tr>"), label, value))
+#define DESC_ADD_INT(label, value)	s.Append(wxString::Format(wxT("<tr><td valign=\"top\">%s</td><td valign=\"top\">%d</td></tr>"), label, value))
+#define DESC_ADD_FLT(label, value)	s.Append(wxString::Format(wxT("<tr><td valign=\"top\">%s</td><td valign=\"top\">%s</td></tr>"), label, SG_Get_String(value, -2).c_str()))
+
+//---------------------------------------------------------
+wxString CWKSP_Grid::Get_Description(void)
+{
+	wxString	s;
+
+	//-----------------------------------------------------
+	s	+= wxString::Format(wxT("<b>%s</b>"), LNG("[CAP] Grid"));
+
+	s	+= wxT("<table border=\"0\">");
+
+	DESC_ADD_STR(LNG("[CAP] Name")					, m_pGrid->Get_Name());
+	DESC_ADD_STR(LNG("[CAP] Description")			, m_pGrid->Get_Description());
+	DESC_ADD_STR(LNG("[CAP] File")					, m_pGrid->Get_File_Name());
+	DESC_ADD_STR(LNG("[CAP] Projection")			, m_pGrid->Get_Projection().Get_Description().c_str());
+	DESC_ADD_FLT(LNG("[CAP] West")					, m_pGrid->Get_XMin());
+	DESC_ADD_FLT(LNG("[CAP] East")					, m_pGrid->Get_XMax());
+	DESC_ADD_FLT(LNG("[CAP] West-East")				, m_pGrid->Get_XRange());
+	DESC_ADD_FLT(LNG("[CAP] South")					, m_pGrid->Get_YMin());
+	DESC_ADD_FLT(LNG("[CAP] North")					, m_pGrid->Get_YMax());
+	DESC_ADD_FLT(LNG("[CAP] South-North")			, m_pGrid->Get_YRange());
+	DESC_ADD_FLT(LNG("[CAP] Cell Size")				, m_pGrid->Get_Cellsize());
+	DESC_ADD_INT(LNG("[CAP] Number of Columns")		, m_pGrid->Get_NX());
+	DESC_ADD_INT(LNG("[CAP] Number of Rows")		, m_pGrid->Get_NY());
+	DESC_ADD_INT(LNG("[CAP] Number of Cells")		, m_pGrid->Get_NCells());
+	DESC_ADD_INT(LNG("[CAP] No Data Cells")			, m_pGrid->Get_NoData_Count());
+	DESC_ADD_STR(LNG("[CAP] Value Type")			, SG_Data_Type_Get_Name(m_pGrid->Get_Type()));
+	DESC_ADD_FLT(LNG("[CAP] Value Minimum")			, m_pGrid->Get_ZMin());
+	DESC_ADD_FLT(LNG("[CAP] Value Maximum")			, m_pGrid->Get_ZMax());
+	DESC_ADD_FLT(LNG("[CAP] Value Range")			, m_pGrid->Get_ZRange());
+	DESC_ADD_STR(LNG("[CAP] No Data Value")			, m_pGrid->Get_NoData_Value() < m_pGrid->Get_NoData_hiValue() ? CSG_String::Format(SG_T("%f - %f"), m_pGrid->Get_NoData_Value(), m_pGrid->Get_NoData_hiValue()).c_str() : SG_Get_String(m_pGrid->Get_NoData_Value(), -2).c_str());
+	DESC_ADD_FLT(LNG("[CAP] Arithmetic Mean")		, m_pGrid->Get_ArithMean(true));
+	DESC_ADD_FLT(LNG("[CAP] Standard Deviation")	, m_pGrid->Get_StdDev(true));
+	DESC_ADD_FLT(LNG("[CAP] Memory Size [MB]")		, (double)(m_pGrid->Get_NCells() * m_pGrid->Get_nValueBytes()) / N_MEGABYTE_BYTES);
+
+	if( m_pGrid->is_Compressed() )
+	{
+		DESC_ADD_FLT(LNG("[CAP] Memory Compression")	, 100.0 * m_pGrid->Get_Compression_Ratio());
+	}
+
+	if( m_pGrid->is_Cached() )
+	{
+		DESC_ADD_FLT(LNG("[CAP] File Cache [MB]")		, m_pGrid->Get_Buffer_Size() / (double)N_MEGABYTE_BYTES);
+	}
+
+	s	+= wxT("</table>");
+
+	//-----------------------------------------------------
+//	s.Append(wxString::Format(wxT("<hr><b>%s</b><font size=\"-1\">"), LNG("[CAP] Data History")));
+//	s.Append(m_pGrid->Get_History().Get_HTML());
+//	s.Append(wxString::Format(wxT("</font")));
+
+	return( s );
+}
+
+//---------------------------------------------------------
+wxMenu * CWKSP_Grid::Get_Menu(void)
+{
+	wxMenu	*pMenu, *pSubMenu;
+
+	pMenu		= new wxMenu(m_pGrid->Get_Name());
+
+	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_WKSP_ITEM_CLOSE);
+	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_GRIDS_SAVE);
+	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_GRIDS_SAVEAS);
+	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_GRIDS_SAVEAS_IMAGE);
+	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_GRIDS_SHOW);
+
+	pMenu->AppendSeparator();
+
+	CMD_Menu_Add_Item(pMenu		, true , ID_CMD_GRIDS_HISTOGRAM);
+
+	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_GRIDS_SCATTERPLOT);
+	CMD_Menu_Add_Item(pMenu		, false, ID_CMD_WKSP_ITEM_SETTINGS_COPY);
+
+	pSubMenu	= new wxMenu(LNG("[MNU] Classificaton"));
+	CMD_Menu_Add_Item(pSubMenu	, false, ID_CMD_GRIDS_EQUALINTERVALS);
+	CMD_Menu_Add_Item(pSubMenu	, false, ID_CMD_GRIDS_SET_LUT);
+	CMD_Menu_Add_Item(pSubMenu	, false, ID_CMD_GRIDS_RANGE_MINMAX);
+	CMD_Menu_Add_Item(pSubMenu	, false, ID_CMD_GRIDS_RANGE_STDDEV150);
+	CMD_Menu_Add_Item(pSubMenu	, false, ID_CMD_GRIDS_RANGE_STDDEV200);
+
+	pMenu->Append(ID_CMD_WKSP_FIRST, LNG("[MNU] Classification"), pSubMenu);
+
+	return( pMenu );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Grid::On_Command(int Cmd_ID)
+{
+	switch( Cmd_ID )
+	{
+	default:
+		return( CWKSP_Layer::On_Command(Cmd_ID) );
+
+	case ID_CMD_GRIDS_SAVEAS_IMAGE:
+		_Save_Image();
+		break;
+
+	case ID_CMD_GRIDS_HISTOGRAM:
+		Histogram_Toggle();
+		break;
+
+	case ID_CMD_GRIDS_SCATTERPLOT:
+		Add_ScatterPlot(Get_Grid());
+		break;
+
+	case ID_CMD_GRIDS_EQUALINTERVALS:
+		m_pClassify->Metric2EqualElements();
+		break;
+
+	case ID_CMD_GRIDS_RANGE_MINMAX:
+		Set_Color_Range(
+			m_pGrid->Get_ZMin(true),
+			m_pGrid->Get_ZMax(true)
+		);
+		break;
+
+	case ID_CMD_GRIDS_RANGE_STDDEV150:
+		Set_Color_Range(
+			m_pGrid->Get_ArithMean(true) - 1.5 * m_pGrid->Get_StdDev(true),
+			m_pGrid->Get_ArithMean(true) + 1.5 * m_pGrid->Get_StdDev(true)
+		);
+		break;
+
+	case ID_CMD_GRIDS_RANGE_STDDEV200:
+		Set_Color_Range(
+			m_pGrid->Get_ArithMean(true) - 2.0 * m_pGrid->Get_StdDev(true),
+			m_pGrid->Get_ArithMean(true) + 2.0 * m_pGrid->Get_StdDev(true)
+		);
+		break;
+
+	case ID_CMD_GRIDS_SET_LUT:
+		_LUT_Create();
+		break;
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Grid::On_Command_UI(wxUpdateUIEvent &event)
+{
+	switch( event.GetId() )
+	{
+	default:
+		return( CWKSP_Layer::On_Command_UI(event) );
+
+	case ID_CMD_GRIDS_HISTOGRAM:
+		event.Check(m_pHistogram != NULL);
+		break;
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_Grid::On_Create_Parameters(void)
+{
+	//-----------------------------------------------------
+	// General...
+
+	m_Parameters.Add_String(
+		m_Parameters("NODE_GENERAL")	, "OBJECT_DESC"				, LNG("[CAP] Description"),
+		LNG(""),
+		m_pGrid->Get_Description(), true
+	);
+
+	m_Parameters.Add_String(
+		m_Parameters("NODE_GENERAL")	, "GENERAL_Z_UNIT"			, LNG("[CAP] Unit"),
+		LNG(""),
+		m_pGrid->Get_Unit()
+	);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_GENERAL")	, "GENERAL_Z_FACTOR"		, LNG("[CAP] Z-Factor"),
+		LNG(""),
+		PARAMETER_TYPE_Double
+	);
+
+
+	//-----------------------------------------------------
+	// Memory...
+
+	m_Parameters.Add_Node(
+		NULL							, "NODE_MEMORY"				, LNG("[CAP] Memory"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Choice(
+		m_Parameters("NODE_MEMORY")		, "MEMORY_MODE"				, LNG("[CAP] Memory Handling"),
+		LNG(""),
+		wxString::Format(wxT("%s|%s|%s|"),
+			LNG("[VAL] Normal"),
+			LNG("[VAL] RTL Compression"),
+			LNG("[VAL] File Cache")
+		), 0
+	);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_MEMORY")		, "MEMORY_BUFFER_SIZE"		, LNG("[CAP] Buffer Size MB"),
+		LNG(""),
+		PARAMETER_TYPE_Double
+	);
+
+
+	//-----------------------------------------------------
+	// Display...
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_DISPLAY")	, "DISPLAY_TRANSPARENCY"	, LNG("[CAP] Transparency [%]"),
+		LNG(""),
+		PARAMETER_TYPE_Double, 0.0, 0.0, true, 100.0, true
+	);
+
+	m_Parameters.Add_Choice(
+		m_Parameters("NODE_DISPLAY")	, "DISPLAY_INTERPOLATION"	, LNG("[CAP] Interpolation"),
+		LNG(""),
+		wxString::Format(wxT("%s|%s|%s|%s|%s|"),
+			LNG("[VAL] None"),
+			LNG("[VAL] Bilinear"),
+			LNG("[VAL] Inverse Distance"),
+			LNG("[VAL] Bicubic Spline"),
+			LNG("[VAL] B-Spline")
+		), 0
+	);
+
+
+	//-----------------------------------------------------
+	// Classification...
+
+	((CSG_Parameter_Choice *)m_Parameters("COLORS_TYPE")->Get_Data())->Set_Items(
+		wxString::Format(wxT("%s|%s|%s|%s|%s|%s|"),
+			LNG("[VAL] Unique Symbol"),
+			LNG("[VAL] Lookup Table"),
+			LNG("[VAL] Graduated Color"),
+			LNG("[VAL] RGB"),
+			LNG("[VAL] Shade"),
+			LNG("[VAL] RGB Overlay")
+		)
+	);
+
+	m_Parameters("COLORS_TYPE")->Set_Value(CLASSIFY_METRIC);
+
+	//-----------------------------------------------------
+	m_Parameters.Add_Node(
+		m_Parameters("NODE_COLORS")		, "NODE_SHADE"		, LNG("[CAP] Shade"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Choice(
+		m_Parameters("NODE_SHADE")		, "SHADE_MODE"		, LNG("[CAP] Coloring"),
+		LNG(""),
+		wxString::Format(wxT("%s|%s|%s|%s|%s|%s|%s|%s|"),
+			LNG("bright - dark"),
+			LNG("dark - bright"),
+			LNG("white - cyan"),
+			LNG("cyan - white"),
+			LNG("white - magenta"),
+			LNG("magenta - white"),
+			LNG("white - yellow"),
+			LNG("yellow - white")
+		), 0
+	);
+
+	//-----------------------------------------------------
+	m_Parameters.Add_Node(
+		m_Parameters("NODE_COLORS")		, "NODE_OVERLAY"	, LNG("[CAP] RGB Overlay"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Choice(
+		m_Parameters("NODE_OVERLAY")	, "OVERLAY_MODE"	, LNG("[CAP] Coloring"),
+		LNG(""),
+		wxString::Format(wxT("%s|%s|%s|%s|%s|%s|"),
+			LNG("red=this, green=1, blue=2"),
+			LNG("red=this, green=2, blue=1"),
+			LNG("red=1, green=this, blue=2"),
+			LNG("red=2, green=this, blue=1"),
+			LNG("red=1, green=2, blue=this"),
+			LNG("red=2, green=1, blue=this")
+		), 0
+	);
+
+	m_Parameters.Add_Grid(
+		m_Parameters("NODE_OVERLAY")	, "OVERLAY_1"		, LNG("[CAP] Overlay 1"),
+		LNG(""),
+		PARAMETER_INPUT_OPTIONAL, false
+	);
+
+	m_Parameters.Add_Grid(
+		m_Parameters("NODE_OVERLAY")	, "OVERLAY_2"		, LNG("[CAP] Overlay 2"),
+		LNG(""),
+		PARAMETER_INPUT_OPTIONAL, false
+	);
+
+
+	//-----------------------------------------------------
+	// Cell Values...
+
+	m_Parameters.Add_Node(
+		NULL							, "NODE_VALUES"		, LNG("[CAP] Display: Cell Values"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_VALUES")		, "VALUES_SHOW"		, LNG("[CAP] Show"),
+		LNG(""),
+		PARAMETER_TYPE_Bool, true
+	);
+
+	m_Parameters.Add_Font(
+		m_Parameters("NODE_VALUES")		, "VALUES_FONT"		, LNG("[CAP] Font"),
+		LNG("")
+	)->asFont()->SetFamily(wxDECORATIVE);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_VALUES")		, "VALUES_SIZE"		, LNG("[CAP] Size"),
+		LNG(""),
+		PARAMETER_TYPE_Double, 15, 0, true , 100.0, true
+	);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_VALUES")		, "VALUES_DECIMALS"	, LNG("[CAP] Decimals"),
+		LNG(""),
+		PARAMETER_TYPE_Int, 2
+	);
+
+
+	//-----------------------------------------------------
+	DataObject_Changed((CSG_Parameters *)NULL);
+}
+
+//---------------------------------------------------------
+void CWKSP_Grid::On_DataObject_Changed(void)
+{
+	//-----------------------------------------------------
+	m_Parameters("GENERAL_Z_UNIT")			->Set_Value((void *)m_pGrid->Get_Unit());
+	m_Parameters("GENERAL_Z_FACTOR")		->Set_Value(m_pGrid->Get_ZFactor());
+
+	//-----------------------------------------------------
+	m_Parameters("MEMORY_MODE")				->Set_Value(
+		m_pGrid->is_Compressed() ? 1 : (m_pGrid->is_Cached() ? 2 : 0)
+	);
+
+	m_Parameters("MEMORY_BUFFER_SIZE")		->Set_Value(
+		(double)m_pGrid->Get_Buffer_Size() / N_MEGABYTE_BYTES
+	);
+}
+
+//---------------------------------------------------------
+void CWKSP_Grid::On_Parameters_Changed(void)
+{
+	//-----------------------------------------------------
+	m_pGrid->Set_Unit		(m_Parameters("GENERAL_Z_UNIT")		->asString());
+	m_pGrid->Set_ZFactor	(m_Parameters("GENERAL_Z_FACTOR")	->asDouble());
+
+	//-----------------------------------------------------
+	m_pOverlay[0]	= g_pData->Get_Grids()->Get_Grid(m_Parameters("OVERLAY_1")->asGrid());
+	m_pOverlay[1]	= g_pData->Get_Grids()->Get_Grid(m_Parameters("OVERLAY_2")->asGrid());
+	m_bOverlay		= m_Parameters("COLORS_TYPE")->asInt() == 5;
+
+	m_pClassify->Set_Shade_Mode(m_Parameters("SHADE_MODE")->asInt());
+
+	//-----------------------------------------------------
+	switch( m_Parameters("MEMORY_MODE")->asInt() )
+	{
+	case 0:
+		if( m_pGrid->is_Compressed() )
+		{
+			m_pGrid->Set_Compression(false);
+		}
+		else if( m_pGrid->is_Cached() )
+		{
+			m_pGrid->Set_Cache(false);
+		}
+		break;
+
+	case 1:
+		if( !m_pGrid->is_Compressed() )
+		{
+			m_pGrid->Set_Compression(true);
+		}
+		break;
+
+	case 2:
+		if( !m_pGrid->is_Cached() )
+		{
+			m_pGrid->Set_Cache(true);
+		}
+		break;
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_Grid::_LUT_Create(void)
+{
+	static CSG_Parameters	Parameters;
+
+	if( Parameters.Get_Count() == 0 )
+	{
+		Parameters.Create(NULL, LNG("Create Lookup Table"), LNG(""));
+		Parameters.Add_Colors(NULL, "COLOR"	, LNG("Colors")	, LNG(""));
+	}
+
+	//-----------------------------------------------------
+	if( DLG_Parameters(&Parameters) )
+	{
+		int					i, n, x, y;
+		double				dValue, dStep, eValue;
+		CSG_String			sValue;
+		CSG_Colors			*pColors;
+		CSG_Table_Record	*pRecord_LUT;
+		CSG_Table			*pLUT;
+
+		//-------------------------------------------------
+		pColors	= Parameters("COLOR")->asColors();
+
+		pLUT	= m_Parameters("LUT")->asTable();
+		pLUT	->Del_Records();
+
+		for(i=0, n=0; i<m_pGrid->Get_NCells() && n < pColors->Get_Count() && PROGRESSBAR_Set_Position(i, m_pGrid->Get_NCells()); i++)
+		{
+			if( m_pGrid->Get_Sorted(i, x, y) && (n == 0 || dValue != m_pGrid->asDouble(x, y)) )
+			{
+				dValue		= m_pGrid->asDouble(x, y);
+				n++;
+			}
+		}
+
+		//-------------------------------------------------
+		if( n >= pColors->Get_Count() )
+		{
+			dValue	= m_pGrid->Get_ZMin();
+			dStep	= m_pGrid->Get_ZRange() / pColors->Get_Count();
+
+			for(i=0; i<pColors->Get_Count(); i++)
+			{
+				eValue		 = dValue;
+				dValue		+= dStep;
+				sValue		 = SG_Get_String(eValue, SG_Get_Significant_Decimals(eValue), false);
+				sValue		+= SG_T(" - ");
+				sValue		+= SG_Get_String(dValue, SG_Get_Significant_Decimals(dValue), false);
+
+				pRecord_LUT	= pLUT->Add_Record();
+				pRecord_LUT	->Set_Value(0, pColors->Get_Color(i));
+				pRecord_LUT	->Set_Value(1, sValue);			// Name
+				pRecord_LUT	->Set_Value(2, sValue);			// Description
+				pRecord_LUT	->Set_Value(3, eValue);			// Minimum
+				pRecord_LUT	->Set_Value(4, dValue);			// Maximum
+			}
+		}
+		else
+		{
+			pColors->Set_Count(n);
+
+			for(i=0, n=0; i<m_pGrid->Get_NCells() && PROGRESSBAR_Set_Position(i, m_pGrid->Get_NCells()); i++)
+			{
+				if( m_pGrid->Get_Sorted(i, x, y) && (pLUT->Get_Record_Count() == 0 || dValue != m_pGrid->asDouble(x, y)) )
+				{
+					dValue		= m_pGrid->asDouble(x, y);
+					sValue		= SG_Get_String(dValue, SG_Get_Significant_Decimals(dValue), false);
+
+					pRecord_LUT	= pLUT->Add_Record();
+					pRecord_LUT	->Set_Value(0, pColors->Get_Color(n++));
+					pRecord_LUT	->Set_Value(1, sValue);		// Name
+					pRecord_LUT	->Set_Value(2, sValue);		// Description
+					pRecord_LUT	->Set_Value(3, dValue);		// Minimum
+					pRecord_LUT	->Set_Value(4, dValue);		// Maximum
+				}
+			}
+		}
+
+		PROGRESSBAR_Set_Position(0);
+
+		DataObject_Changed();
+
+		m_Parameters("COLORS_TYPE")		->Set_Value(1);		// Lookup Table
+
+		Parameters_Changed();
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+wxString CWKSP_Grid::Get_Value(CSG_Point ptWorld, double Epsilon)
+{
+	double		Value;
+	wxString	s;
+
+	if( m_pGrid->Get_Value(ptWorld, Value, GRID_INTERPOLATION_NearestNeighbour, true) )
+	{
+		switch( m_pClassify->Get_Mode() )
+		{
+		case CLASSIFY_LUT:
+			s	= m_pClassify->Get_Class_Name_byValue(Value);
+			break;
+
+		case CLASSIFY_METRIC:	default:
+		case CLASSIFY_SHADE:
+			switch( m_pGrid->Get_Type() )
+			{
+			case SG_DATATYPE_Byte:
+			case SG_DATATYPE_Char:
+			case SG_DATATYPE_Word:
+			case SG_DATATYPE_Short:
+			case SG_DATATYPE_DWord:
+			case SG_DATATYPE_Int:
+				s.Printf(wxT("%d%s"), (int)Value, m_pGrid->Get_Unit());
+				break;
+
+			case SG_DATATYPE_Float:	default:
+			case SG_DATATYPE_Double:
+				s.Printf(wxT("%f%s"), Value, m_pGrid->Get_Unit());
+				break;
+			}
+			break;
+
+		case CLASSIFY_RGB:
+			s.Printf(wxT("R%03d G%03d B%03d"), SG_GET_R((int)Value), SG_GET_G((int)Value), SG_GET_B((int)Value));
+			break;
+		}
+	}
+
+	return( s );
+}
+
+//---------------------------------------------------------
+double CWKSP_Grid::Get_Value_Range(void)
+{
+	return( m_pGrid->Get_ZRange() );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Grid::On_Edit_On_Key_Down(int KeyCode)
+{
+	switch( KeyCode )
+	{
+	default:
+		return( false );
+
+	case WXK_DELETE:
+		return( _Edit_Del_Selection() );
+	}
+}
+
+//---------------------------------------------------------
+#define SELECTION_MAX	20
+
+//---------------------------------------------------------
+bool CWKSP_Grid::On_Edit_On_Mouse_Up(CSG_Point Point, double ClientToWorld, int Key)
+{
+	int					x, y;
+	CSG_Table_Record	*pRecord;
+	CSG_Rect			rWorld(m_Edit_Mouse_Down, Point);
+
+	m_Sel_xOff	= m_pGrid->Get_System().Get_xWorld_to_Grid(rWorld.Get_XMin());
+	if( m_Sel_xOff < 0 )
+		m_Sel_xOff	= 0;
+	m_Sel_xN	= m_pGrid->Get_System().Get_xWorld_to_Grid(rWorld.Get_XMax());
+	if( m_Sel_xN >= m_pGrid->Get_NX() )
+		m_Sel_xN	= m_pGrid->Get_NX() - 1;
+	m_Sel_xN	= 1 + m_Sel_xN - m_Sel_xOff;
+
+	m_Sel_yOff	= m_pGrid->Get_System().Get_yWorld_to_Grid(rWorld.Get_YMin());
+	if( m_Sel_yOff < 0 )
+		m_Sel_yOff	= 0;
+	m_Sel_yN	= m_pGrid->Get_System().Get_yWorld_to_Grid(rWorld.Get_YMax());
+	if( m_Sel_yN >= m_pGrid->Get_NY() )
+		m_Sel_yN	= m_pGrid->Get_NY() - 1;
+	m_Sel_yN	= 1 + m_Sel_yN - m_Sel_yOff;
+
+	m_Edit_Attributes.Destroy();
+
+	if( m_Sel_xN < 1 || m_Sel_yN < 1 )
+	{
+		m_Sel_xN	= -1;
+	}
+	else
+	{
+		if( m_Sel_xN > SELECTION_MAX )
+		{
+			m_Sel_xOff	+= (m_Sel_xN - SELECTION_MAX) / 2;
+			m_Sel_xN	= SELECTION_MAX;
+		}
+
+		if( m_Sel_yN > SELECTION_MAX )
+		{
+			m_Sel_yOff	+= (m_Sel_yN - SELECTION_MAX) / 2;
+			m_Sel_yN	= SELECTION_MAX;
+		}
+
+		for(x=0; x<m_Sel_xN; x++)
+		{
+			m_Edit_Attributes.Add_Field(wxString::Format(wxT("%d"), x + 1), SG_DATATYPE_Double);
+		}
+
+		for(y=0; y<m_Sel_yN; y++)
+		{
+			pRecord	= m_Edit_Attributes.Add_Record();
+
+			for(x=0; x<m_Sel_xN; x++)
+			{
+				pRecord->Set_Value(x, m_pGrid->asDouble(m_Sel_xOff + x, m_Sel_yOff + m_Sel_yN - 1 - y, false));
+			}
+		}
+	}
+
+	g_pACTIVE->Get_Attributes()->Set_Attributes();
+
+	Update_Views(true);
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Grid::On_Edit_Set_Attributes(void)
+{
+	int				x, y;
+	CSG_Table_Record	*pRecord;
+
+	if( m_Sel_xN >= 0 )
+	{
+		for(y=0; y<m_Sel_yN; y++)
+		{
+			pRecord	= m_Edit_Attributes.Get_Record(y);
+
+			for(x=0; x<m_Sel_xN; x++)
+			{
+				m_pGrid->Set_Value(m_Sel_xOff + x, m_Sel_yOff + m_Sel_yN - 1 - y, pRecord->asDouble(x));
+			}
+		}
+
+		Update_Views(true);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+TSG_Rect CWKSP_Grid::On_Edit_Get_Extent(void)
+{
+	if( m_Sel_xN >= 0 )
+	{
+		return( CSG_Rect(
+			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_xGrid_to_World(m_Sel_xOff),
+			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_yGrid_to_World(m_Sel_yOff),
+			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_xGrid_to_World(m_Sel_xOff + m_Sel_xN),
+			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_yGrid_to_World(m_Sel_yOff + m_Sel_yN))
+		);
+	}
+
+	return( m_pGrid->Get_Extent().m_rect );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Grid::_Edit_Del_Selection(void)
+{
+	int		x, y;
+
+	if( m_Sel_xN >= 0 && DLG_Message_Confirm(LNG("[DLG] Set selected values to no data."), LNG("[CAP] Delete")) )
+	{
+		for(y=m_Sel_yOff; y<m_Sel_yOff + m_Sel_yN; y++)
+		{
+			for(x=m_Sel_xOff; x<m_Sel_xOff + m_Sel_xN; x++)
+			{
+				m_pGrid->Set_NoData(x, y);
+			}
+		}
+
+		Update_Views(false);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Grid::Fit_Color_Range(CSG_Rect rWorld)
+{
+	int		x, y, xMin, yMin, xMax, yMax;
+	double	z, zMin, zMax;
+
+	if( rWorld.Intersect(Get_Extent()) )
+	{
+		xMin	= m_pGrid->Get_System().Get_xWorld_to_Grid(rWorld.Get_XMin());
+		yMin	= m_pGrid->Get_System().Get_yWorld_to_Grid(rWorld.Get_YMin());
+		xMax	= m_pGrid->Get_System().Get_xWorld_to_Grid(rWorld.Get_XMax());
+		yMax	= m_pGrid->Get_System().Get_yWorld_to_Grid(rWorld.Get_YMax());
+		zMin	= 1.0;
+		zMax	= 0.0;
+
+		for(y=yMin; y<=yMax; y++)
+		{
+			for(x=xMin; x<=xMax; x++)
+			{
+				if( m_pGrid->is_InGrid(x, y) )
+				{
+					z	= m_pGrid->asDouble(x, y);
+
+					if( zMin > zMax )
+					{
+						zMin	= zMax	= z;
+					}
+					else if( z < zMin )
+					{
+						zMin	= z;
+					}
+					else if( z > zMax )
+					{
+						zMax	= z;
+					}
+				}
+			}
+		}
+
+		return( Set_Color_Range(zMin, zMax) );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Grid::asImage(CSG_Grid *pImage)
+{
+	int			x, y;
+	wxBitmap	BMP;
+
+	if( pImage && Get_Image_Grid(BMP) )
+	{
+		wxImage	IMG(BMP.ConvertToImage());
+
+		pImage->Create(m_pGrid, SG_DATATYPE_Int);
+
+		for(y=0; y<pImage->Get_NY() && PROGRESSBAR_Set_Position(y, pImage->Get_NY()); y++)
+		{
+			for(x=0; x<pImage->Get_NX(); x++)
+			{
+				pImage->Set_Value(x, y, SG_GET_RGB(IMG.GetRed(x, y), IMG.GetGreen(x, y), IMG.GetBlue(x, y)));
+			}
+		}
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+void CWKSP_Grid::_Save_Image(void)
+{
+	int				type;
+	wxString		file;
+	wxBitmap		BMP;
+	CSG_File		Stream;
+	CSG_Parameters	Parms;
+
+	//-----------------------------------------------------
+	Parms.Set_Name(LNG("[CAP] Save Grid as Image..."));
+
+	Parms.Add_Value(
+		NULL	, "WORLD"	, LNG("Save Georeference"),
+		wxT(""),
+		PARAMETER_TYPE_Bool, 1
+	);
+
+	Parms.Add_Value(
+		NULL	, "LG"	, LNG("Legend: Save"),
+		wxT(""),
+		PARAMETER_TYPE_Bool, 1
+	);
+
+	Parms.Add_Value(
+		NULL	, "LZ"	, LNG("Legend: Zoom"),
+		wxT(""),
+		PARAMETER_TYPE_Double, 1.0, 0, true
+	);
+
+	//-----------------------------------------------------
+	if( DLG_Image_Save(file, type) && DLG_Parameters(&Parms) )
+	{
+		if( Get_Image_Grid(BMP) )
+		{
+			BMP.SaveFile(file, (wxBitmapType)type);
+		}
+
+		if( Parms("LG")->asBool() && Get_Image_Legend(BMP, Parms("LZ")->asDouble()) )
+		{
+			wxFileName	fn(file);
+			fn.SetName(wxString::Format(wxT("%s_legend"), fn.GetName().c_str()));
+
+			BMP.SaveFile(fn.GetFullPath(), (wxBitmapType)type);
+		}
+
+		if( Parms("WORLD")->asBool() )
+		{
+			wxFileName	fn(file);
+
+			switch( type )
+			{
+			default:					fn.SetExt(wxT("world"));	break;
+			case wxBITMAP_TYPE_BMP:		fn.SetExt(wxT("bpw"));		break;
+			case wxBITMAP_TYPE_GIF:		fn.SetExt(wxT("gfw"));		break;
+			case wxBITMAP_TYPE_JPEG:	fn.SetExt(wxT("jgw"));		break;
+			case wxBITMAP_TYPE_PNG:		fn.SetExt(wxT("pgw"));		break;
+			case wxBITMAP_TYPE_PCX:		fn.SetExt(wxT("pxw"));		break;
+			case wxBITMAP_TYPE_TIF:		fn.SetExt(wxT("tfw"));		break; 
+			}
+
+			if( Stream.Open(fn.GetFullPath().c_str(), SG_FILE_W, false) )
+			{
+				Stream.Printf(wxT("%.10f\n%.10f\n%.10f\n%.10f\n%.10f\n%.10f\n"),
+					 m_pGrid->Get_Cellsize(),
+					 0.0, 0.0,
+					-m_pGrid->Get_Cellsize(),
+					 m_pGrid->Get_XMin(),
+					 m_pGrid->Get_YMax()
+				);
+			}
+		}
+	}
+}
+
+//---------------------------------------------------------
+bool CWKSP_Grid::Get_Image_Grid(wxBitmap &BMP, bool bFitSize)
+{
+	if( bFitSize || (BMP.GetWidth() > 0 && BMP.GetHeight() > 0) )
+	{
+		Set_Buisy_Cursor(true);
+
+		if( bFitSize )
+		{
+			BMP.Create(m_pGrid->Get_NX(), m_pGrid->Get_NY());
+		}
+
+		wxMemoryDC		dc;
+		wxRect			r(0, 0, BMP.GetWidth(), BMP.GetHeight());
+		CWKSP_Map_DC	dc_Map(Get_Extent(), r, 1.0, SG_GET_RGB(255, 255, 255));
+
+		On_Draw(dc_Map, false);
+
+		dc.SelectObject(BMP);
+		dc.SetBackground(*wxWHITE_BRUSH);
+		dc.Clear();
+
+		dc_Map.Draw(dc);
+
+		dc.SelectObject(wxNullBitmap);
+
+		Set_Buisy_Cursor(false);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Grid::Get_Image_Legend(wxBitmap &BMP, double Zoom)
+{
+	if( Zoom > 0.0 )
+	{
+		wxMemoryDC	dc;
+		wxSize		s(Get_Legend()->Get_Size(Zoom, 1.0));
+
+		BMP.Create(s.GetWidth(), s.GetHeight());
+
+		dc.SelectObject(BMP);
+		dc.SetBackground(*wxWHITE_BRUSH);
+		dc.Clear();
+
+		Get_Legend()->Draw(dc, Zoom, 1.0, wxPoint(0, 0));
+
+		dc.SelectObject(wxNullBitmap);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_Grid::On_Draw(CWKSP_Map_DC &dc_Map, bool bEdit)
+{
+	int		Interpolation;
+	double	Transparency;
+
+	if(	Get_Extent().Intersects(dc_Map.m_rWorld) != INTERSECTION_None )
+	{
+		switch( m_pClassify->Get_Mode() )
+		{
+		default:				Transparency	= m_Parameters("DISPLAY_TRANSPARENCY")->asDouble() / 100.0;	break;
+		case CLASSIFY_SHADE:	Transparency	= 2.0;	break;
+		case CLASSIFY_RGB:		Transparency	= m_Parameters("DISPLAY_TRANSPARENCY")->asDouble() / 100.0;	if( Transparency <= 0.0 )	Transparency	= 3.0;	break;
+		}
+
+		m_pClassify->Set_Shade_Mode(m_Parameters("SHADE_MODE")->asInt());
+
+		if( dc_Map.IMG_Draw_Begin(Transparency) )
+		{
+			Interpolation	= m_pClassify->Get_Mode() == CLASSIFY_LUT
+							? GRID_INTERPOLATION_NearestNeighbour
+							: m_Parameters("DISPLAY_INTERPOLATION")->asInt();
+
+			if(	dc_Map.m_DC2World >= m_pGrid->Get_Cellsize()
+			||	Interpolation != GRID_INTERPOLATION_NearestNeighbour || m_bOverlay )
+			{
+				_Draw_Grid_Points	(dc_Map, Interpolation);
+			}
+			else
+			{
+				_Draw_Grid_Cells	(dc_Map);
+			}
+
+			dc_Map.IMG_Draw_End();
+
+			_Draw_Values(dc_Map);
+
+			if( bEdit )
+			{
+				_Draw_Edit(dc_Map);
+			}
+		}
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_Grid::_Draw_Grid_Points(CWKSP_Map_DC &dc_Map, int Interpolation)
+{
+	bool		bByteWise	= m_pClassify->Get_Mode() == CLASSIFY_RGB;
+	int			xDC, yDC, axDC, ayDC, bxDC, byDC, Color, r, g, b;
+	double		x, y, z, axMap, ayMap;
+	CSG_Rect	rMap(dc_Map.m_rWorld);
+
+	switch( m_Parameters("OVERLAY_MODE")->asInt() )
+	{
+	default:
+	case 0:	r = 0; g = 1; b = 2;	break;
+	case 1:	r = 0; g = 2; b = 1;	break;
+	case 2:	r = 1; g = 0; b = 2;	break;
+	case 3:	r = 2; g = 0; b = 1;	break;
+	case 4:	r = 1; g = 2; b = 0;	break;
+	case 5:	r = 2; g = 1; b = 0;	break;
+	}
+
+	m_pOverlay[0]	= g_pData->Get_Grids()->Get_Grid(m_Parameters("OVERLAY_1")->asGrid());
+	m_pOverlay[1]	= g_pData->Get_Grids()->Get_Grid(m_Parameters("OVERLAY_2")->asGrid());
+
+	rMap.Intersect(m_pGrid->Get_Extent(true));
+
+	axDC	= (int)dc_Map.xWorld2DC(rMap.Get_XMin());	if( axDC < 0 )	axDC	= 0;
+	bxDC	= (int)dc_Map.xWorld2DC(rMap.Get_XMax());	if( bxDC >= dc_Map.m_rDC.GetWidth () )	bxDC	= dc_Map.m_rDC.GetWidth () - 1;
+	ayDC	= (int)dc_Map.yWorld2DC(rMap.Get_YMin());	if( ayDC >= dc_Map.m_rDC.GetHeight() )	ayDC	= dc_Map.m_rDC.GetHeight() - 1;
+	byDC	= (int)dc_Map.yWorld2DC(rMap.Get_YMax());	if( byDC < 0 )	byDC	= 0;
+	axMap	=      dc_Map.xDC2World(axDC);
+	ayMap	=      dc_Map.yDC2World(ayDC);
+
+	for(y=ayMap, yDC=ayDC; yDC>=byDC; y+=dc_Map.m_DC2World, yDC--)
+	{
+		for(x=axMap, xDC=axDC; xDC<bxDC; x+=dc_Map.m_DC2World, xDC++)
+		{
+			if( m_pGrid->Get_Value(x, y, z, Interpolation, false, bByteWise, true) )
+			{
+				if( m_bOverlay == false )
+				{
+					if( m_pClassify->Get_Class_Color_byValue(z, Color) )
+					{
+						dc_Map.IMG_Set_Pixel(xDC, yDC, Color);
+					}
+				}
+				else
+				{
+					int		c[3];
+
+					c[0]	= (int)(255.0 * m_pClassify->Get_MetricToRelative(z));
+
+					c[1]	= m_pOverlay[0] && m_pOverlay[0]->Get_Grid()->Get_Value(x, y, z, Interpolation, false, false, true)
+							? (int)(255.0 * m_pOverlay[0]->m_pClassify->Get_MetricToRelative(z)) : 255;
+
+					c[2]	= m_pOverlay[1] && m_pOverlay[1]->Get_Grid()->Get_Value(x, y, z, Interpolation, false, false, true)
+							? (int)(255.0 * m_pOverlay[1]->m_pClassify->Get_MetricToRelative(z)) : 255;
+
+					dc_Map.IMG_Set_Pixel(xDC, yDC, SG_GET_RGB(
+						c[r] < 0 ? 0 : c[r] > 255 ? 255 : c[r],
+						c[g] < 0 ? 0 : c[g] > 255 ? 255 : c[g],
+						c[b] < 0 ? 0 : c[b] > 255 ? 255 : c[b]
+					));
+				}
+			}
+		}
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_Grid::_Draw_Grid_Cells(CWKSP_Map_DC &dc_Map)
+{
+	int		x, y, xa, ya, xb, yb, xaDC, yaDC, xbDC, ybDC, Color;
+	double	xDC, yDC, axDC, ayDC, dDC;
+
+	//-----------------------------------------------------
+	dDC		= m_pGrid->Get_Cellsize() * dc_Map.m_World2DC;
+
+	xa		= m_pGrid->Get_System().Get_xWorld_to_Grid(dc_Map.m_rWorld.Get_XMin());
+	ya		= m_pGrid->Get_System().Get_yWorld_to_Grid(dc_Map.m_rWorld.Get_YMin());
+	xb		= m_pGrid->Get_System().Get_xWorld_to_Grid(dc_Map.m_rWorld.Get_XMax());
+	yb		= m_pGrid->Get_System().Get_yWorld_to_Grid(dc_Map.m_rWorld.Get_YMax());
+
+	if( xa < 0 )	xa	= 0;	if( xb >= m_pGrid->Get_NX() )	xb	= m_pGrid->Get_NX() - 1;
+	if( ya < 0 )	ya	= 0;	if( yb >= m_pGrid->Get_NY() )	yb	= m_pGrid->Get_NY() - 1;
+
+	axDC	= dc_Map.xWorld2DC(m_pGrid->Get_System().Get_xGrid_to_World(xa)) + dDC / 2.0;
+	ayDC	= dc_Map.yWorld2DC(m_pGrid->Get_System().Get_yGrid_to_World(ya)) - dDC / 2.0;
+
+	//-----------------------------------------------------
+	for(y=ya, yDC=ayDC, yaDC=(int)(ayDC), ybDC=(int)(ayDC+dDC); y<=yb; y++, ybDC=yaDC, yaDC=(int)(yDC-=dDC))
+	{
+		for(x=xa, xDC=axDC, xaDC=(int)(axDC-dDC), xbDC=(int)(axDC); x<=xb; x++, xaDC=xbDC, xbDC=(int)(xDC+=dDC))
+		{
+			if( m_pGrid->is_InGrid(x, y) && m_pClassify->Get_Class_Color_byValue(m_pGrid->asDouble(x, y), Color) )
+			{
+				dc_Map.IMG_Set_Rect(xaDC, yaDC, xbDC, ybDC, Color);
+			}
+		}
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_Grid::_Draw_Values(CWKSP_Map_DC &dc_Map)
+{
+	int			x, y, xa, ya, xb, yb, Decimals;
+	double		xDC, yDC, axDC, ayDC, dDC, zFactor, Value;
+	wxString	s;
+	wxFont		Font;
+
+	//-----------------------------------------------------
+	if(	m_Parameters("VALUES_SHOW")->asBool() && (dDC = m_pGrid->Get_Cellsize() * dc_Map.m_World2DC) > 40 )
+	{
+		zFactor		=  m_pGrid->Get_ZFactor();
+		Decimals	=  m_Parameters("VALUES_DECIMALS")	->asInt();
+
+		xDC			=  m_Parameters("VALUES_SIZE")		->asDouble() / 100.0;
+		x			=  m_Parameters("VALUES_FONT")		->asColor();
+		Font		= *m_Parameters("VALUES_FONT")		->asFont();
+		Font.SetPointSize((int)(xDC * dDC));
+		dc_Map.dc.SetFont(Font);
+		dc_Map.dc.SetTextForeground(Get_Color_asWX(x));
+
+		x			=  m_Parameters("VALUES_FONT")		->asInt();
+		dc_Map.dc.SetTextForeground(wxColour(SG_GET_R(x), SG_GET_G(x), SG_GET_B(x)));
+
+		//-------------------------------------------------
+		xa		= m_pGrid->Get_System().Get_xWorld_to_Grid(dc_Map.m_rWorld.Get_XMin());
+		ya		= m_pGrid->Get_System().Get_yWorld_to_Grid(dc_Map.m_rWorld.Get_YMin());
+		xb		= m_pGrid->Get_System().Get_xWorld_to_Grid(dc_Map.m_rWorld.Get_XMax());
+		yb		= m_pGrid->Get_System().Get_yWorld_to_Grid(dc_Map.m_rWorld.Get_YMax());
+
+		if( xa < 0 )	xa	= 0;	if( xb >= m_pGrid->Get_NX() )	xb	= m_pGrid->Get_NX() - 1;
+		if( ya < 0 )	ya	= 0;	if( yb >= m_pGrid->Get_NY() )	yb	= m_pGrid->Get_NY() - 1;
+
+		axDC	= dc_Map.xWorld2DC(m_pGrid->Get_System().Get_xGrid_to_World(xa));
+		ayDC	= dc_Map.yWorld2DC(m_pGrid->Get_System().Get_yGrid_to_World(ya));
+
+		//-------------------------------------------------
+		for(y=ya, yDC=ayDC; y<=yb; y++, yDC-=dDC)
+		{
+			for(x=xa, xDC=axDC; x<=xb; x++, xDC+=dDC)
+			{
+				if( m_pGrid->is_InGrid(x, y) )
+				{
+					Value	= m_pGrid->asDouble(x, y);
+
+					switch( m_pClassify->Get_Mode() )
+					{
+					case CLASSIFY_RGB:
+						s.Printf(wxT("R%03d G%03d B%03d"), SG_GET_R((int)Value), SG_GET_G((int)Value), SG_GET_B((int)Value));
+						break;
+
+					default:
+						s.Printf(wxT("%.*f"), Decimals, zFactor * Value);
+						break;
+					}
+
+					Draw_Text(dc_Map.dc, TEXTALIGN_CENTER, (int)xDC, (int)yDC, s);
+				}
+			}
+		}
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_Grid::_Draw_Edit(CWKSP_Map_DC &dc_Map)
+{
+	if( m_Sel_xN >= 0 )
+	{
+		CSG_Rect	r(
+			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_xGrid_to_World(m_Sel_xOff),
+			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_yGrid_to_World(m_Sel_yOff),
+			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_xGrid_to_World(m_Sel_xOff + m_Sel_xN),
+			-m_pGrid->Get_Cellsize() / 2.0 + m_pGrid->Get_System().Get_yGrid_to_World(m_Sel_yOff + m_Sel_yN)
+		);
+
+		TSG_Point_Int		a(dc_Map.World2DC(r.Get_TopLeft())),
+						b(dc_Map.World2DC(r.Get_BottomRight()));
+
+		a.x	-= 1;
+		b.x	-= 1;
+		a.y	-= 1;
+		b.y	-= 1;
+
+		dc_Map.dc.SetPen(wxPen(wxColour(255, 0, 0), 2, wxSOLID));
+		dc_Map.dc.DrawLine(a.x, a.y, a.x, b.y);
+		dc_Map.dc.DrawLine(a.x, b.y, b.x, b.y);
+		dc_Map.dc.DrawLine(b.x, b.y, b.x, a.y);
+		dc_Map.dc.DrawLine(a.x, a.y, b.x, a.y);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_gui/wksp_grid.h b/src/saga_core/saga_gui/wksp_grid.h
index 8432796..38b3fa9 100644
--- a/src/saga_core/saga_gui/wksp_grid.h
+++ b/src/saga_core/saga_gui/wksp_grid.h
@@ -1,163 +1,162 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     WKSP_Grid.h                       //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_H
-#define _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "wksp_layer.h"
-
-class CSVG_Interactive_Map;
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CWKSP_Grid : public CWKSP_Layer
-{
-	friend class CSVG_Interactive_Map;
-
-public:
-	CWKSP_Grid(CSG_Grid *pGrid);
-	virtual ~CWKSP_Grid(void);
-
-	virtual TWKSP_Item			Get_Type				(void)	{	return( WKSP_ITEM_Grid );	}
-
-	virtual wxString			Get_Name				(void);
-	virtual wxString			Get_Description			(void);
-
-	virtual wxMenu *			Get_Menu				(void);
-
-	virtual bool				On_Command				(int Cmd_ID);
-	virtual bool				On_Command_UI			(wxUpdateUIEvent &event);
-
-	virtual wxString			Get_Value				(CSG_Point ptWorld, double Epsilon);
-	virtual double				Get_Value_Range			(void);
-
-	CSG_Grid *					Get_Grid				(void)	{	return( m_pGrid );	}
-
-	bool						Fit_Color_Range			(CSG_Rect rWorld);
-
-	bool						asImage					(CSG_Grid *pImage);
-
-	virtual bool				Update					(CWKSP_Layer *pChanged)	{	return( pChanged == this || pChanged == m_pOverlay[0] || pChanged == m_pOverlay[1] );	}
-
-
-protected:
-
-	bool						Get_Image_Grid			(wxBitmap &BMP, bool bFitSize = true);
-	bool						Get_Image_Legend		(wxBitmap &BMP, double Zoom);
-
-	virtual void				On_Create_Parameters	(void);
-	virtual void				On_DataObject_Changed	(void);
-	virtual void				On_Parameters_Changed	(void);
-
-	virtual bool				On_Edit_On_Key_Down		(int KeyCode);
-	virtual bool				On_Edit_On_Mouse_Up		(CSG_Point Point, double ClientToWorld, int Key);
-	virtual bool				On_Edit_Set_Attributes	(void);
-	virtual TSG_Rect			On_Edit_Get_Extent		(void);
-
-	virtual void				On_Draw					(CWKSP_Map_DC &dc_Map, bool bEdit);
-
-
-private:
-
-	bool						m_bOverlay;
-
-	int							m_Sel_xOff, m_Sel_xN, m_Sel_yOff, m_Sel_yN;
-
-	CSG_Grid					*m_pGrid;
-	
-	CWKSP_Grid					*m_pOverlay[2];
-
-
-	void						_LUT_Create				(void);
-
-	bool						_Edit_Del_Selection		(void);
-
-	void						_Save_Image				(void);
-
-	void						_Draw_Grid_Points		(CWKSP_Map_DC &dc_Map, int Interpolation);
-	void						_Draw_Grid_Cells		(CWKSP_Map_DC &dc_Map);
-
-	void						_Draw_Values			(CWKSP_Map_DC &dc_Map);
-	void						_Draw_Edit				(CWKSP_Map_DC &dc_Map);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     WKSP_Grid.h                       //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_H
+#define _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "wksp_layer.h"
+
+class CSVG_Interactive_Map;
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CWKSP_Grid : public CWKSP_Layer
+{
+	friend class CSVG_Interactive_Map;
+
+public:
+	CWKSP_Grid(CSG_Grid *pGrid);
+	virtual ~CWKSP_Grid(void);
+
+	virtual TWKSP_Item			Get_Type				(void)	{	return( WKSP_ITEM_Grid );	}
+
+	virtual wxString			Get_Description			(void);
+
+	virtual wxMenu *			Get_Menu				(void);
+
+	virtual bool				On_Command				(int Cmd_ID);
+	virtual bool				On_Command_UI			(wxUpdateUIEvent &event);
+
+	virtual wxString			Get_Value				(CSG_Point ptWorld, double Epsilon);
+	virtual double				Get_Value_Range			(void);
+
+	CSG_Grid *					Get_Grid				(void)	{	return( m_pGrid );	}
+
+	bool						Fit_Color_Range			(CSG_Rect rWorld);
+
+	bool						asImage					(CSG_Grid *pImage);
+
+	virtual bool				Update					(CWKSP_Layer *pChanged)	{	return( pChanged == this || pChanged == m_pOverlay[0] || pChanged == m_pOverlay[1] );	}
+
+
+protected:
+
+	bool						Get_Image_Grid			(wxBitmap &BMP, bool bFitSize = true);
+	bool						Get_Image_Legend		(wxBitmap &BMP, double Zoom);
+
+	virtual void				On_Create_Parameters	(void);
+	virtual void				On_DataObject_Changed	(void);
+	virtual void				On_Parameters_Changed	(void);
+
+	virtual bool				On_Edit_On_Key_Down		(int KeyCode);
+	virtual bool				On_Edit_On_Mouse_Up		(CSG_Point Point, double ClientToWorld, int Key);
+	virtual bool				On_Edit_Set_Attributes	(void);
+	virtual TSG_Rect			On_Edit_Get_Extent		(void);
+
+	virtual void				On_Draw					(CWKSP_Map_DC &dc_Map, bool bEdit);
+
+
+private:
+
+	bool						m_bOverlay;
+
+	int							m_Sel_xOff, m_Sel_xN, m_Sel_yOff, m_Sel_yN;
+
+	CSG_Grid					*m_pGrid;
+	
+	CWKSP_Grid					*m_pOverlay[2];
+
+
+	void						_LUT_Create				(void);
+
+	bool						_Edit_Del_Selection		(void);
+
+	void						_Save_Image				(void);
+
+	void						_Draw_Grid_Points		(CWKSP_Map_DC &dc_Map, int Interpolation);
+	void						_Draw_Grid_Cells		(CWKSP_Map_DC &dc_Map);
+
+	void						_Draw_Values			(CWKSP_Map_DC &dc_Map);
+	void						_Draw_Edit				(CWKSP_Map_DC &dc_Map);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_H
diff --git a/src/saga_core/saga_gui/wksp_grid_manager.cpp b/src/saga_core/saga_gui/wksp_grid_manager.cpp
index f45f4ad..efdbb98 100644
--- a/src/saga_core/saga_gui/wksp_grid_manager.cpp
+++ b/src/saga_core/saga_gui/wksp_grid_manager.cpp
@@ -1,372 +1,372 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                 WKSP_Grid_Manager.cpp                 //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <saga_api/saga_api.h>
-
-#include "res_commands.h"
-
-#include "wksp_data_manager.h"
-
-#include "wksp_map_manager.h"
-
-#include "wksp_grid_manager.h"
-#include "wksp_grid_system.h"
-#include "wksp_grid.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_Grid_Manager::CWKSP_Grid_Manager(void)
-{
-}
-
-//---------------------------------------------------------
-CWKSP_Grid_Manager::~CWKSP_Grid_Manager(void)
-{
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-wxString CWKSP_Grid_Manager::Get_Name(void)
-{
-	return( LNG("[CAP] Grids") );
-}
-
-//---------------------------------------------------------
-wxString CWKSP_Grid_Manager::Get_Description(void)
-{
-	wxString	s;
-
-	s.Printf(wxT("<b>%s</b><br>%d %s"), LNG("[CAP] Grids"), Get_Count(), Get_Count() == 1 ? LNG("[TXT] grid system") : LNG("[TXT] grid systems"));
-
-	return( s );
-}
-
-//---------------------------------------------------------
-wxMenu * CWKSP_Grid_Manager::Get_Menu(void)
-{
-	wxMenu	*pMenu;
-
-	pMenu	= new wxMenu(LNG("[CAP] Grids"));
-
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_GRIDS_OPEN);
-
-	if( Get_Count() > 0 )
-	{
-		CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_CLOSE);
-	}
-
-	return( pMenu );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Grid_Manager::On_Command(int Cmd_ID)
-{
-	switch( Cmd_ID )
-	{
-	default:
-		return( CWKSP_Base_Manager::On_Command(Cmd_ID) );
-
-	case ID_CMD_WKSP_ITEM_RETURN:
-		break;
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_Grid_System * CWKSP_Grid_Manager::Get_System(CSG_Grid_System *pSystem)
-{
-	if( pSystem != NULL )
-	{
-		for(int i=0; i<Get_Count(); i++)
-		{
-			if( pSystem->is_Equal(*Get_System(i)->Get_System()) )
-			{
-				return( Get_System(i) );
-			}
-		}
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-CWKSP_Grid_System * CWKSP_Grid_Manager::_Get_System(CSG_Grid_System *pSystem)
-{
-	CWKSP_Grid_System	*pItem;
-
-	if( pSystem )
-	{
-		if( (pItem = Get_System(pSystem)) == NULL )
-		{
-			Add_Item(pItem = new CWKSP_Grid_System(*pSystem));
-		}
-
-		return( pItem );
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Grid_Manager::Exists(CSG_Grid_System *pSystem)
-{
-	return( Get_System(pSystem) != NULL );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_Grid * CWKSP_Grid_Manager::Get_Grid(CSG_Grid *pGrid)
-{
-	for(int i=0; i<Get_Count(); i++)
-	{
-		if( Get_System(i)->Get_Grid(pGrid) )
-		{
-			return( Get_System(i)->Get_Grid(pGrid) );
-		}
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Grid_Manager::Exists(CSG_Grid *pGrid)
-{
-	return( Get_Grid(pGrid) != NULL );
-}
-
-//---------------------------------------------------------
-CWKSP_Grid * CWKSP_Grid_Manager::Add(CSG_Grid *pGrid)
-{
-	if( pGrid && pGrid->is_Valid() && !Exists(pGrid) )
-	{
-		return( _Get_System((CSG_Grid_System *)&pGrid->Get_System())->Add(pGrid) );
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-CSG_Grid * CWKSP_Grid_Manager::Get_byFileName(const wxChar *File_Name)
-{
-	CSG_String	s(File_Name);
-
-	for(int i=0; i<Get_Count(); i++)
-	{
-		for(int j=0; j<Get_System(i)->Get_Count(); j++)
-		{
-			if( !s.Cmp(Get_System(i)->Get_Grid(j)->Get_Grid()->Get_File_Name()) )
-			{
-				return( Get_System(i)->Get_Grid(j)->Get_Grid() );
-			}
-		}
-	}
-
-	return( NULL );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Grid_Manager::Update(CSG_Grid *pGrid, CSG_Parameters *pParameters)
-{
-	CWKSP_Grid	*pItem;
-
-	if( (pItem = Get_Grid(pGrid)) != NULL )
-	{
-		pItem->DataObject_Changed(pParameters);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Grid_Manager::Update_Views(CSG_Grid *pGrid)
-{
-	CWKSP_Grid	*pItem;
-
-	if( (pItem = Get_Grid(pGrid)) != NULL )
-	{
-		pItem->Update_Views(false);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Grid_Manager::Show(CSG_Grid *pGrid, int Map_Mode)
-{
-	CWKSP_Grid	*pItem;
-
-	if( (pItem = Get_Grid(pGrid)) != NULL )
-	{
-		switch( Map_Mode )
-		{
-		case SG_UI_DATAOBJECT_SHOW:
-			return( pItem->Show() );
-
-		case SG_UI_DATAOBJECT_SHOW_NEW_MAP:
-			g_pMaps->Add(pItem, NULL);
-
-		case SG_UI_DATAOBJECT_SHOW_LAST_MAP:
-			return( pItem->Show(g_pMaps->Get_Map(g_pMaps->Get_Count() - 1)) );
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Grid_Manager::asImage(CSG_Grid *pGrid, CSG_Grid *pImage)
-{
-	CWKSP_Grid	*pItem;
-
-	if( (pItem = Get_Grid(pGrid)) != NULL )
-	{
-		return( pItem->asImage(pImage) );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Grid_Manager::Get_Colors(CSG_Grid *pGrid, CSG_Colors *pColors)
-{
-	CWKSP_Grid	*pItem;
-
-	if( (pItem = Get_Grid(pGrid)) != NULL )
-	{
-		return( pItem->Get_Colors(pColors) );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Grid_Manager::Set_Colors(CSG_Grid *pGrid, CSG_Colors *pColors)
-{
-	CWKSP_Grid	*pItem;
-
-	if( (pItem = Get_Grid(pGrid)) != NULL )
-	{
-		pItem->DataObject_Changed(pColors);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                 WKSP_Grid_Manager.cpp                 //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <saga_api/saga_api.h>
+
+#include "res_commands.h"
+
+#include "wksp_data_manager.h"
+
+#include "wksp_map_manager.h"
+
+#include "wksp_grid_manager.h"
+#include "wksp_grid_system.h"
+#include "wksp_grid.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_Grid_Manager::CWKSP_Grid_Manager(void)
+{
+}
+
+//---------------------------------------------------------
+CWKSP_Grid_Manager::~CWKSP_Grid_Manager(void)
+{
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+wxString CWKSP_Grid_Manager::Get_Name(void)
+{
+	return( LNG("[CAP] Grids") );
+}
+
+//---------------------------------------------------------
+wxString CWKSP_Grid_Manager::Get_Description(void)
+{
+	wxString	s;
+
+	s.Printf(wxT("<b>%s</b><br>%d %s"), LNG("[CAP] Grids"), Get_Count(), Get_Count() == 1 ? LNG("[TXT] grid system") : LNG("[TXT] grid systems"));
+
+	return( s );
+}
+
+//---------------------------------------------------------
+wxMenu * CWKSP_Grid_Manager::Get_Menu(void)
+{
+	wxMenu	*pMenu;
+
+	pMenu	= new wxMenu(LNG("[CAP] Grids"));
+
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_GRIDS_OPEN);
+
+	if( Get_Count() > 0 )
+	{
+		CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_CLOSE);
+	}
+
+	return( pMenu );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Grid_Manager::On_Command(int Cmd_ID)
+{
+	switch( Cmd_ID )
+	{
+	default:
+		return( CWKSP_Base_Manager::On_Command(Cmd_ID) );
+
+	case ID_CMD_WKSP_ITEM_RETURN:
+		break;
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_Grid_System * CWKSP_Grid_Manager::Get_System(CSG_Grid_System *pSystem)
+{
+	if( pSystem != NULL )
+	{
+		for(int i=0; i<Get_Count(); i++)
+		{
+			if( pSystem->is_Equal(*Get_System(i)->Get_System()) )
+			{
+				return( Get_System(i) );
+			}
+		}
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+CWKSP_Grid_System * CWKSP_Grid_Manager::_Get_System(CSG_Grid_System *pSystem)
+{
+	CWKSP_Grid_System	*pItem;
+
+	if( pSystem )
+	{
+		if( (pItem = Get_System(pSystem)) == NULL )
+		{
+			Add_Item(pItem = new CWKSP_Grid_System(*pSystem));
+		}
+
+		return( pItem );
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Grid_Manager::Exists(CSG_Grid_System *pSystem)
+{
+	return( Get_System(pSystem) != NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_Grid * CWKSP_Grid_Manager::Get_Grid(CSG_Grid *pGrid)
+{
+	for(int i=0; i<Get_Count(); i++)
+	{
+		if( Get_System(i)->Get_Grid(pGrid) )
+		{
+			return( Get_System(i)->Get_Grid(pGrid) );
+		}
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Grid_Manager::Exists(CSG_Grid *pGrid)
+{
+	return( Get_Grid(pGrid) != NULL );
+}
+
+//---------------------------------------------------------
+CWKSP_Grid * CWKSP_Grid_Manager::Add(CSG_Grid *pGrid)
+{
+	if( pGrid && pGrid->is_Valid() && !Exists(pGrid) )
+	{
+		return( _Get_System((CSG_Grid_System *)&pGrid->Get_System())->Add(pGrid) );
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+CSG_Grid * CWKSP_Grid_Manager::Get_byFileName(const wxChar *File_Name)
+{
+	CSG_String	s(File_Name);
+
+	for(int i=0; i<Get_Count(); i++)
+	{
+		for(int j=0; j<Get_System(i)->Get_Count(); j++)
+		{
+			if( !s.Cmp(Get_System(i)->Get_Grid(j)->Get_Grid()->Get_File_Name()) )
+			{
+				return( Get_System(i)->Get_Grid(j)->Get_Grid() );
+			}
+		}
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Grid_Manager::Update(CSG_Grid *pGrid, CSG_Parameters *pParameters)
+{
+	CWKSP_Grid	*pItem;
+
+	if( (pItem = Get_Grid(pGrid)) != NULL )
+	{
+		pItem->DataObject_Changed(pParameters);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Grid_Manager::Update_Views(CSG_Grid *pGrid)
+{
+	CWKSP_Grid	*pItem;
+
+	if( (pItem = Get_Grid(pGrid)) != NULL )
+	{
+		pItem->Update_Views(false);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Grid_Manager::Show(CSG_Grid *pGrid, int Map_Mode)
+{
+	CWKSP_Grid	*pItem;
+
+	if( (pItem = Get_Grid(pGrid)) != NULL )
+	{
+		switch( Map_Mode )
+		{
+		case SG_UI_DATAOBJECT_SHOW:
+			return( pItem->Show() );
+
+		case SG_UI_DATAOBJECT_SHOW_NEW_MAP:
+			g_pMaps->Add(pItem, NULL);
+
+		case SG_UI_DATAOBJECT_SHOW_LAST_MAP:
+			return( pItem->Show(g_pMaps->Get_Map(g_pMaps->Get_Count() - 1)) );
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Grid_Manager::asImage(CSG_Grid *pGrid, CSG_Grid *pImage)
+{
+	CWKSP_Grid	*pItem;
+
+	if( (pItem = Get_Grid(pGrid)) != NULL )
+	{
+		return( pItem->asImage(pImage) );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Grid_Manager::Get_Colors(CSG_Grid *pGrid, CSG_Colors *pColors)
+{
+	CWKSP_Grid	*pItem;
+
+	if( (pItem = Get_Grid(pGrid)) != NULL )
+	{
+		return( pItem->Get_Colors(pColors) );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Grid_Manager::Set_Colors(CSG_Grid *pGrid, CSG_Colors *pColors)
+{
+	CWKSP_Grid	*pItem;
+
+	if( (pItem = Get_Grid(pGrid)) != NULL )
+	{
+		pItem->DataObject_Changed(pColors);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_gui/wksp_grid_manager.h b/src/saga_core/saga_gui/wksp_grid_manager.h
index 9c0f978..d092d7b 100644
--- a/src/saga_core/saga_gui/wksp_grid_manager.h
+++ b/src/saga_core/saga_gui/wksp_grid_manager.h
@@ -1,129 +1,129 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                 WKSP_Grid_Manager.h                   //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_Manager_H
-#define _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_Manager_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "wksp_base_manager.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CWKSP_Grid_Manager : public CWKSP_Base_Manager
-{
-public:
-	CWKSP_Grid_Manager(void);
-	virtual ~CWKSP_Grid_Manager(void);
-
-	virtual TWKSP_Item				Get_Type			(void)		{	return( WKSP_ITEM_Grid_Manager );	}
-
-	virtual wxString				Get_Name			(void);
-	virtual wxString				Get_Description		(void);
-
-	virtual wxMenu *				Get_Menu			(void);
-
-	virtual bool					On_Command			(int Cmd_ID);
-
-	class CWKSP_Grid_System *		Get_System			(int i)		{	return( (class CWKSP_Grid_System *)Get_Item(i) );	}
-	class CWKSP_Grid_System *		Get_System			(class CSG_Grid_System *pSystem);
-	bool							Exists				(class CSG_Grid_System *pSystem);
-
-	class CWKSP_Grid *				Get_Grid			(class CSG_Grid *pGrid);
-	bool							Exists				(class CSG_Grid *pGrid);
-	class CWKSP_Grid *				Add					(class CSG_Grid *pGrid);
-	class CSG_Grid *				Get_byFileName		(const wxChar *File_Name);
-
-	bool							Update				(class CSG_Grid *pGrid, class CSG_Parameters *pParameters);
-	bool							Update_Views		(class CSG_Grid *pGrid);
-	bool							Show				(class CSG_Grid *pGrid, int Map_Mode);
-	bool							asImage				(class CSG_Grid *pGrid, class CSG_Grid *pImage);
-
-	bool							Get_Colors			(class CSG_Grid *pGrid, class CSG_Colors *pColors);
-	bool							Set_Colors			(class CSG_Grid *pGrid, class CSG_Colors *pColors);
-
-
-private:
-
-	class CWKSP_Grid_System *		_Get_System			(class CSG_Grid_System *pSystem);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_Manager_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                 WKSP_Grid_Manager.h                   //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_Manager_H
+#define _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_Manager_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "wksp_base_manager.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CWKSP_Grid_Manager : public CWKSP_Base_Manager
+{
+public:
+	CWKSP_Grid_Manager(void);
+	virtual ~CWKSP_Grid_Manager(void);
+
+	virtual TWKSP_Item				Get_Type			(void)		{	return( WKSP_ITEM_Grid_Manager );	}
+
+	virtual wxString				Get_Name			(void);
+	virtual wxString				Get_Description		(void);
+
+	virtual wxMenu *				Get_Menu			(void);
+
+	virtual bool					On_Command			(int Cmd_ID);
+
+	class CWKSP_Grid_System *		Get_System			(int i)		{	return( (class CWKSP_Grid_System *)Get_Item(i) );	}
+	class CWKSP_Grid_System *		Get_System			(class CSG_Grid_System *pSystem);
+	bool							Exists				(class CSG_Grid_System *pSystem);
+
+	class CWKSP_Grid *				Get_Grid			(class CSG_Grid *pGrid);
+	bool							Exists				(class CSG_Grid *pGrid);
+	class CWKSP_Grid *				Add					(class CSG_Grid *pGrid);
+	class CSG_Grid *				Get_byFileName		(const wxChar *File_Name);
+
+	bool							Update				(class CSG_Grid *pGrid, class CSG_Parameters *pParameters);
+	bool							Update_Views		(class CSG_Grid *pGrid);
+	bool							Show				(class CSG_Grid *pGrid, int Map_Mode);
+	bool							asImage				(class CSG_Grid *pGrid, class CSG_Grid *pImage);
+
+	bool							Get_Colors			(class CSG_Grid *pGrid, class CSG_Colors *pColors);
+	bool							Set_Colors			(class CSG_Grid *pGrid, class CSG_Colors *pColors);
+
+
+private:
+
+	class CWKSP_Grid_System *		_Get_System			(class CSG_Grid_System *pSystem);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Grid_Manager_H
diff --git a/src/saga_core/saga_gui/wksp_layer.cpp b/src/saga_core/saga_gui/wksp_layer.cpp
index 7d64127..640af1e 100644
--- a/src/saga_core/saga_gui/wksp_layer.cpp
+++ b/src/saga_core/saga_gui/wksp_layer.cpp
@@ -1,950 +1,968 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    WKSP_Layer.cpp                     //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "res_commands.h"
-#include "res_dialogs.h"
-
-#include "helper.h"
-
-#include "active.h"
-#include "active_parameters.h"
-
-#include "wksp_base_control.h"
-
-#include "wksp_data_manager.h"
-#include "wksp_data_menu_files.h"
-
-#include "wksp_map_manager.h"
-#include "wksp_map.h"
-#include "wksp_map_layer.h"
-
-#include "wksp_data_layers.h"
-
-#include "wksp_layer.h"
-#include "wksp_layer_classify.h"
-#include "wksp_layer_legend.h"
-
-#include "view_histogram.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define DEF_LAYER_COLOUR_COUNT	15
-
-//---------------------------------------------------------
-static int	s_Def_Layer_Colours[DEF_LAYER_COLOUR_COUNT]	=
-{
-	SG_COLOR_RED,
-	SG_COLOR_GREEN,
-	SG_COLOR_BLUE,
-	SG_COLOR_YELLOW,
-
-	SG_GET_RGB(255, 127,   0),
-	SG_COLOR_GREEN_LIGHT,
-	SG_COLOR_BLUE_LIGHT,
-	SG_GET_RGB(255, 255, 127),
-
-	SG_COLOR_RED_DARK,
-	SG_COLOR_GREEN_DARK,
-	SG_COLOR_BLUE_DARK,
-	SG_COLOR_YELLOW_DARK,
-
-	SG_COLOR_BLUE_GREEN,
-	SG_COLOR_PURPLE,
-	SG_COLOR_PINK
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_Layer *	Get_Active_Layer(void)
-{
-	return( g_pACTIVE ? g_pACTIVE->Get_Layer() : NULL );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_Layer::CWKSP_Layer(CSG_Data_Object *pObject)
-{
-	m_pObject		= pObject;
-	m_pClassify		= new CWKSP_Layer_Classify;
-	m_pLegend		= new CWKSP_Layer_Legend(this);
-	m_pHistogram	= NULL;
-}
-
-//---------------------------------------------------------
-CWKSP_Layer::~CWKSP_Layer(void)
-{
-	Histogram_Show(false);
-
-	if( g_pMaps )
-	{
-		g_pMaps->Del(this);
-	}
-
-	if( m_pClassify )
-	{
-		delete(m_pClassify);
-	}
-
-	if( m_pLegend )
-	{
-		delete(m_pLegend);
-	}
-
-	//-----------------------------------------------------
-	if( g_pData->Exists(m_pObject) )
-	{
-		if( m_pObject->is_Valid() == true )
-		{
-			MSG_General_Add(
-  				wxString::Format(wxT("%s %s: %s..."),
-					LNG("[MSG] Close"),
-					SG_Get_DataObject_Name(m_pObject->Get_ObjectType()),
-					m_pObject->Get_Name()
-     			),
-				true, true
-			);
-
-			delete(m_pObject);
-
-			MSG_General_Add(LNG("[MSG] okay"), false, false, SG_UI_MSG_STYLE_SUCCESS);
-		}
-		else
-		{
-			delete(m_pObject);
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Layer::On_Command(int Cmd_ID)
-{
-	switch( Cmd_ID )
-	{
-	default:
-		return( CWKSP_Base_Item::On_Command(Cmd_ID) );
-
-	case ID_CMD_SHAPES_SAVE:
-	case ID_CMD_GRIDS_SAVE:
-	case ID_CMD_TIN_SAVE:
-	case ID_CMD_POINTCLOUD_SAVE:
-		Save(m_pObject->Get_File_Name());
-		break;
-
-	case ID_CMD_SHAPES_SAVEAS:
-	case ID_CMD_GRIDS_SAVEAS:
-	case ID_CMD_TIN_SAVEAS:
-	case ID_CMD_POINTCLOUD_SAVEAS:
-		Save();
-		break;
-
-	case ID_CMD_WKSP_ITEM_RETURN:
-	case ID_CMD_SHAPES_SHOW:
-	case ID_CMD_GRIDS_SHOW:
-	case ID_CMD_TIN_SHOW:
-	case ID_CMD_POINTCLOUD_SHOW:
-		g_pMaps->Add(this);
-		break;
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Layer::On_Command_UI(wxUpdateUIEvent &event)
-{
-	switch( event.GetId() )
-	{
-	default:
-		return( CWKSP_Base_Item::On_Command_UI(event) );
-
-	case ID_CMD_TIN_SAVE:
-	case ID_CMD_GRIDS_SAVE:
-	case ID_CMD_SHAPES_SAVE:
-	case ID_CMD_POINTCLOUD_SAVE:
-		event.Enable(m_pObject->is_Modified() && m_pObject->Get_File_Name() && *(m_pObject->Get_File_Name()));
-		break;
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_Layer::Create_Parameters(void)
-{
-	m_Parameters.Create(this, LNG(""), LNG(""));
-	m_Parameters.Set_Callback_On_Parameter_Changed(&_On_Parameter_Changed);
-
-	//-----------------------------------------------------
-	m_Parameters.Add_Node(
-		NULL							, "NODE_GENERAL"		, LNG("[CAP] General"),
-		LNG("")
-	);
-
-	m_Parameters.Add_String(
-		m_Parameters("NODE_GENERAL")	, "OBJECT_NAME"			, LNG("[CAP] Name"),
-		LNG(""),
-		m_pObject->Get_Name()
-	);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_GENERAL")	, "SHOW_LEGEND"			, LNG("[CAP] Show Legend"),
-		LNG(""),
-		PARAMETER_TYPE_Bool, true
-	);
-
-	m_Parameters.Add_Range(
-		m_Parameters("NODE_GENERAL")	, "GENERAL_NODATA"		, LNG("[CAP] No Data"),
-		LNG("")
-	);
-
-
-	//-----------------------------------------------------
-	m_Parameters.Add_Node(
-		NULL							, "NODE_DISPLAY"		, LNG("[CAP] Display"),
-		LNG("")
-	);
-
-
-	//-----------------------------------------------------
-	// Visibility...
-
-	m_Parameters.Add_Node(
-		NULL							, "NODE_VISIBILITY"		, LNG("[CAP] Display: Visibility"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_VISIBILITY")	, "SHOW_ALWAYS"			, LNG("[CAP] Show Always"),
-		LNG(""),
-		PARAMETER_TYPE_Bool, true
-	);
-
-	m_Parameters.Add_Range(
-		m_Parameters("NODE_VISIBILITY")	, "SHOW_RANGE"			, LNG("[CAP] Scale Dependent"),
-		LNG(""),
-		0.0, 1000.0, 0.0, true
-	);
-
-
-	//-----------------------------------------------------
-	// Classification...
-
-	m_Parameters.Add_Node(
-		NULL							, "NODE_COLORS"			, LNG("[CAP] Display: Color Classification"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Choice(
-		m_Parameters("NODE_COLORS")		, "COLORS_TYPE"			, LNG("[CAP] Type"),
-		LNG(""),
-		wxString::Format(wxT("%s|%s|%s|"),
-			LNG("[VAL] Unique Symbol"),
-			LNG("[VAL] Lookup Table"),
-			LNG("[VAL] Graduated Color")
-		), 0
-	);
-
-
-	//-----------------------------------------------------
-	// Classification: Unique Value...
-
-	m_Parameters.Add_Node(
-		m_Parameters("NODE_COLORS")		, "NODE_UNISYMBOL"		, LNG("[CAP] Unique Symbol"),
-		LNG("")
-	);
-
-	static	BYTE	s_Def_Layer_Colour	= 0;
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_UNISYMBOL")	, "UNISYMBOL_COLOR"		, LNG("[CAP] Color"),
-		LNG(""),
-		PARAMETER_TYPE_Color, s_Def_Layer_Colours[s_Def_Layer_Colour++ % DEF_LAYER_COLOUR_COUNT]
-	//	PARAMETER_TYPE_Color, SG_GET_RGB(Get_Random(128, 250), Get_Random(128, 200), Get_Random(128, 200))
-	);
-
-
-	//-----------------------------------------------------
-	// Classification: Lookup Table...
-
-	m_Parameters.Add_Node(
-		m_Parameters("NODE_COLORS")		, "NODE_LUT"			, LNG("[CAP] Lookup Table"),
-		LNG("")
-	);
-
-	CSG_Table	LUT;
-	LUT.Add_Field(LNG("COLOR")		, SG_DATATYPE_Color);
-	LUT.Add_Field(LNG("NAME")			, SG_DATATYPE_String);
-	LUT.Add_Field(LNG("DESCRIPTION")	, SG_DATATYPE_String);
-	LUT.Add_Field(LNG("MINIMUM")		, SG_DATATYPE_Double);
-	LUT.Add_Field(LNG("MAXIMUM")		, SG_DATATYPE_Double);
-
-	m_Parameters.Add_FixedTable(
-		m_Parameters("NODE_LUT")		, "LUT"					, LNG("[CAP] Table"),
-		LNG(""),
-		&LUT
-	);
-
-
-	//-----------------------------------------------------
-	// Classification: Metric...
-
-	m_Parameters.Add_Node(
-		m_Parameters("NODE_COLORS")		, "NODE_METRIC"			, LNG("[CAP] Graduated Color"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Colors(
-		m_Parameters("NODE_METRIC")		, "METRIC_COLORS"		, LNG("[CAP] Colors"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Range(
-		m_Parameters("NODE_METRIC")		, "METRIC_ZRANGE"		, LNG("[CAP] Value Range"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Choice(
-		m_Parameters("NODE_METRIC")		, "METRIC_SCALE_MODE"	, LNG("[CAP] Mode"),
-		LNG(""),
-		wxString::Format(wxT("%s|%s|%s|"),
-			LNG("[VAL] Linear"),
-			LNG("[VAL] Logarithmic (up)"),
-			LNG("[VAL] Logarithmic (down)")
-		), 0
-	);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_METRIC")		, "METRIC_SCALE_LOG"	, LNG("[CAP] Logarithmic Stretch Factor"),
-		LNG(""),
-		PARAMETER_TYPE_Double, 1.0
-	);
-
-
-	//-----------------------------------------------------
-	m_pClassify->Initialise(this, m_Parameters("LUT")->asTable(), m_Parameters("METRIC_COLORS")->asColors());
-
-	On_Create_Parameters();
-
-	DataObject_Changed();
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Layer::Save(void)
-{
-	bool		bResult;
-	wxString	File_Path;
-
-	File_Path	= m_pObject->Get_File_Name() ? m_pObject->Get_File_Name() : m_pObject->Get_Name();
-
-	switch( Get_Type() )
-	{
-	default:
-		bResult	= false;
-		break;
-
-	case WKSP_ITEM_TIN:
-	case WKSP_ITEM_Shapes:
-		bResult	= DLG_Save(File_Path, ID_DLG_SHAPES_SAVE);
-		break;
-
-	case WKSP_ITEM_PointCloud:
-		bResult	= DLG_Save(File_Path, ID_DLG_POINTCLOUD_SAVE);
-		break;
-
-	case WKSP_ITEM_Grid:
-		bResult	= DLG_Save(File_Path, ID_DLG_GRIDS_SAVE);
-		break;
-	}
-
-	if( bResult )
-	{
-		bResult	= m_pObject->Save(File_Path.c_str());
-
-		PROCESS_Set_Okay();
-	}
-
-	return( bResult );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Layer::Save(const wxChar *File_Path)
-{
-	if( File_Path && *File_Path )
-	{
-		bool	bResult	= m_pObject->Save(File_Path);
-
-		if( bResult )
-		{
-			g_pData->Get_FileMenus()->Recent_Add(m_pObject->Get_ObjectType(), m_pObject->Get_File_Name());
-		}
-
-		PROCESS_Set_Okay();
-
-		return( bResult );
-	}
-
-	return( Save() );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_Layer::DataObject_Changed(CSG_Parameters *pParameters)
-{
-	if( pParameters )
-	{
-		m_Parameters.Assign_Values(pParameters);
-	}
-	else
-	{
-		if( m_pObject->Get_ObjectType() == DATAOBJECT_TYPE_Grid )
-		{
-			double		m, s, min, max;
-			CSG_Grid	*pGrid	= (CSG_Grid *)m_pObject;
-
-			switch( g_pData->Get_Parameters()->Get_Parameter("GRID_DISPLAY_RANGEFIT")->asInt() )
-			{
-			case 0:
-				min	= pGrid->Get_ZMin(true);
-				max	= pGrid->Get_ZMax(true);
-				break;
-
-			case 1:
-				m	= pGrid->Get_ArithMean(true);
-				s	= pGrid->Get_StdDev   (true) * 1.5;
-				min	= m - s;	if( min < pGrid->Get_ZMin(true) )	min	= pGrid->Get_ZMin(true);
-				max	= m + s;	if( max > pGrid->Get_ZMax(true) )	max	= pGrid->Get_ZMax(true);
-				break;
-
-			case 2:
-				m	= pGrid->Get_ArithMean(true);
-				s	= pGrid->Get_StdDev   (true) * 2.0;
-				min	= m - s;	if( min < pGrid->Get_ZMin(true) )	min	= pGrid->Get_ZMin(true);
-				max	= m + s;	if( max > pGrid->Get_ZMax(true) )	max	= pGrid->Get_ZMax(true);
-			}
-
-			m_Parameters("METRIC_ZRANGE")->asRange()->Set_Range(min, max);
-		}
-	}
-
-	DataObject_Changed();
-}
-
-void CWKSP_Layer::DataObject_Changed(CSG_Colors *pColors)
-{
-	if( m_pClassify->Get_Metric_Colors() && pColors )
-	{
-		m_pClassify->Get_Metric_Colors()->Assign(pColors);
-	}
-
-	DataObject_Changed();
-}
-
-void CWKSP_Layer::DataObject_Changed(void)
-{
-	//-----------------------------------------------------
-	m_Parameters.Set_Name(wxString::Format(wxT("%02d. %s"), 1 + Get_ID(), m_pObject->Get_Name()));
-
-	m_Parameters("OBJECT_NAME")->Set_Value(m_pObject->Get_Name());
-
-	m_Parameters("GENERAL_NODATA")->asRange()->Set_Range(
-		m_pObject->Get_NoData_Value(),
-		m_pObject->Get_NoData_hiValue()
-	);
-
-	//-----------------------------------------------------
-	On_DataObject_Changed();
-
-	g_pACTIVE->Update(this, false);
-
-	Parameters_Changed();
-}
-
-//---------------------------------------------------------
-void CWKSP_Layer::Parameters_Changed(void)
-{
-	static bool	bUpdates	= false;
-
-	//-----------------------------------------------------
-	if( !bUpdates )
-	{
-		bUpdates	= true;
-
-		m_pObject->Set_Name(m_Parameters("OBJECT_NAME")->asString());
-
-		m_pObject->Set_NoData_Value_Range(
-			m_Parameters("GENERAL_NODATA")->asRange()->Get_LoVal(),
-			m_Parameters("GENERAL_NODATA")->asRange()->Get_HiVal()
-		);
-
-		//-----------------------------------------------------
-		m_pClassify->Set_Mode(m_Parameters("COLORS_TYPE")->asInt());
-
-		m_pClassify->Set_Unique_Color(m_Parameters("UNISYMBOL_COLOR")->asInt());
-
-		m_pClassify->Set_Metric(
-			m_Parameters("METRIC_SCALE_MODE")	->asInt(),
-			m_Parameters("METRIC_SCALE_LOG")	->asDouble(),
-			m_Parameters("METRIC_ZRANGE")->asRange()->Get_LoVal() / (Get_Type() == WKSP_ITEM_Grid ? ((CSG_Grid *)m_pObject)->Get_ZFactor() : 1.0),
-			m_Parameters("METRIC_ZRANGE")->asRange()->Get_HiVal() / (Get_Type() == WKSP_ITEM_Grid ? ((CSG_Grid *)m_pObject)->Get_ZFactor() : 1.0)
-		);
-
-		//-----------------------------------------------------
-		On_Parameters_Changed();
-
-		Update_Views(false);
-
-		_Set_Thumbnail();
-
-		g_pData_Buttons->Refresh(false);
-
-		//-----------------------------------------------------
-		CWKSP_Base_Item::Parameters_Changed();
-
-		bUpdates	= false;
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int CWKSP_Layer::_On_Parameter_Changed(CSG_Parameter *pParameter)
-{
-	if( pParameter && pParameter->Get_Owner() && pParameter->Get_Owner()->Get_Owner() )
-	{
-	//	return( ((CWKSP_Layer *)pParameter->Get_Owner()->Get_Owner())->
-	//		On_Parameter_Changed(pParameter->Get_Owner(), pParameter)
-	//	);
-
-		((CWKSP_Layer *)pParameter->Get_Owner()->Get_Owner())->
-			On_Parameter_Changed(pParameter->Get_Owner(), pParameter);
-
-		g_pACTIVE->Get_Parameters()->Update_Parameters(pParameter->Get_Owner(), false);
-	}
-
-	return( 0 );
-}
-
-//---------------------------------------------------------
-int CWKSP_Layer::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
-{
-	return( 1 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-const wxBitmap & CWKSP_Layer::Get_Thumbnail(int dx, int dy)
-{
-	if( dx > 0 && m_Thumbnail.GetWidth()  != dx
-	&&	dy > 0 && m_Thumbnail.GetHeight() != dy )
-	{
-		m_Thumbnail.Create(dx, dy);
-
-		_Set_Thumbnail();
-	}
-
-	return( m_Thumbnail );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Layer::_Set_Thumbnail(void)
-{
-	if( m_pObject && m_Thumbnail.GetWidth() > 0 && m_Thumbnail.GetHeight() > 0 )
-	{
-		wxMemoryDC		dc;
-		wxRect			r(0, 0, m_Thumbnail.GetWidth(), m_Thumbnail.GetHeight());
-		CWKSP_Map_DC	dc_Map(Get_Extent(), r, 1.0, SG_GET_RGB(255, 255, 255));
-
-		Draw(dc_Map, false);
-
-		dc.SelectObject(m_Thumbnail);
-		dc.SetBackground(*wxWHITE_BRUSH);
-		dc.Clear();
-
-		dc_Map.Draw(dc);
-
-		dc.SelectObject(wxNullBitmap);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Rect CWKSP_Layer::Get_Extent(void)
-{
-	if( m_pObject )
-	{
-		switch( m_pObject->Get_ObjectType() )
-		{
-		case DATAOBJECT_TYPE_Grid:
-			return( ((CSG_Grid       *)m_pObject)->Get_System().Get_Extent_Cells() );
-
-		case DATAOBJECT_TYPE_Shapes:
-			return( ((CSG_Shapes     *)m_pObject)->Get_Extent() );
-
-		case DATAOBJECT_TYPE_TIN:
-			return( ((CSG_TIN        *)m_pObject)->Get_Extent() );
-
-		case DATAOBJECT_TYPE_PointCloud:
-			return( ((CSG_PointCloud *)m_pObject)->Get_Extent() );
-
-		default:
-			break;
-		}
-	}
-
-	return( CSG_Rect(0.0, 0.0, 0.0, 0.0) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Colors * CWKSP_Layer::Get_Colors(void)
-{
-	return( m_pClassify->Get_Metric_Colors() );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Layer::Get_Colors(CSG_Colors *pColors)
-{
-	if( m_pClassify->Get_Metric_Colors() && pColors )
-	{
-		return( pColors->Assign(m_pClassify->Get_Metric_Colors()) );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Layer::Set_Color_Range(double zMin, double zMax)
-{
-	CSG_Parameters	Parameters;
-
-	Parameters.Add_Range(NULL, "METRIC_ZRANGE"	, LNG(""), LNG(""), zMin, zMax);
-	DataObject_Changed(&Parameters);
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Layer::do_Legend(void)
-{
-	return( m_Parameters("SHOW_LEGEND")->asBool() );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Layer::do_Show(CSG_Rect const &rMap)
-{
-	double				d;
-	CSG_Parameter_Range	*pRange;
-
-	if( !m_Parameters("SHOW_ALWAYS")->asBool() )
-	{
-		pRange	= m_Parameters("SHOW_RANGE")->asRange();
-		d		= rMap.Get_XRange() > rMap.Get_YRange() ? rMap.Get_XRange() : rMap.Get_YRange();
-
-		return( pRange->Get_LoVal() <= d && d <= pRange->Get_HiVal() );
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Layer::Show(CWKSP_Map *pMap)
-{
-	if( pMap != NULL )
-	{
-		if( g_pMaps->Add(this, pMap) )
-		{
-			pMap->View_Show(true);
-
-			return( true );
-		}
-	}
-	else
-	{
-		for(int i=0; i<g_pMaps->Get_Count(); i++)
-		{
-			if( g_pMaps->Get_Map(i)->Find_Layer(this) != NULL )
-			{
-				pMap	= g_pMaps->Get_Map(i);
-
-				pMap->View_Show(true);
-
-				return( true );
-			}
-		}
-
-		if( g_pMaps->Add(this, NULL) )
-		{
-			return( Show(NULL) );
-		}
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_Layer::Draw(CWKSP_Map_DC &dc_Map, bool bEdit)
-{
-	On_Draw(dc_Map, bEdit);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_Layer::Update_Views(bool bMapsOnly)
-{
-	g_pMaps->Update(this, bMapsOnly);
-
-	if( !bMapsOnly )
-	{
-		if( Histogram_Get() )
-		{
-			Histogram_Get()->Update_Histogram();
-		}
-
-		On_Update_Views();
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_Layer::View_Closes(wxMDIChildFrame *pView)
-{
-	if( wxDynamicCast(pView, CVIEW_Histogram) != NULL )
-	{
-		m_pHistogram	= NULL;
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_Layer::Histogram_Show(bool bShow)
-{
-	if( bShow && !m_pHistogram )
-	{
-		m_pHistogram	= new CVIEW_Histogram(this);
-	}
-	else if( !bShow && m_pHistogram )
-	{
-		m_pHistogram->Destroy();
-		delete(m_pHistogram);
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_Layer::Histogram_Toggle(void)
-{
-	Histogram_Show( m_pHistogram == NULL );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-wxMenu * CWKSP_Layer::Edit_Get_Menu(void)
-{
-	return( On_Edit_Get_Menu() );
-}
-
-//---------------------------------------------------------
-TSG_Rect CWKSP_Layer::Edit_Get_Extent(void)
-{
-	return( On_Edit_Get_Extent() );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Layer::Edit_Set_Attributes(void)
-{
-	return( On_Edit_Set_Attributes() );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Layer::Edit_On_Key_Down(int KeyCode)
-{
-	return( On_Edit_On_Key_Down(KeyCode) );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Layer::Edit_On_Mouse_Down(CSG_Point Point, double ClientToWorld, int Key)
-{
-	m_Edit_Mouse_Down	= Point;
-
-	return( On_Edit_On_Mouse_Down(Point, ClientToWorld, Key) );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Layer::Edit_On_Mouse_Up(CSG_Point Point, double ClientToWorld, int Key)
-{
-	return( On_Edit_On_Mouse_Up(Point, ClientToWorld, Key) );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Layer::Edit_On_Mouse_Move(wxWindow *pMap, CSG_Rect rWorld, wxPoint pt, wxPoint ptLast, int Key)
-{
-	return( On_Edit_On_Mouse_Move(pMap, rWorld, pt, ptLast, Key) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    WKSP_Layer.cpp                     //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "res_commands.h"
+#include "res_dialogs.h"
+
+#include "helper.h"
+
+#include "active.h"
+#include "active_parameters.h"
+
+#include "wksp_base_control.h"
+
+#include "wksp_data_manager.h"
+#include "wksp_data_menu_files.h"
+
+#include "wksp_map_manager.h"
+#include "wksp_map.h"
+#include "wksp_map_layer.h"
+
+#include "wksp_data_layers.h"
+
+#include "wksp_layer.h"
+#include "wksp_layer_classify.h"
+#include "wksp_layer_legend.h"
+
+#include "view_histogram.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define DEF_LAYER_COLOUR_COUNT	15
+
+//---------------------------------------------------------
+static int	s_Def_Layer_Colours[DEF_LAYER_COLOUR_COUNT]	=
+{
+	SG_COLOR_RED,
+	SG_COLOR_GREEN,
+	SG_COLOR_BLUE,
+	SG_COLOR_YELLOW,
+
+	SG_GET_RGB(255, 127,   0),
+	SG_COLOR_GREEN_LIGHT,
+	SG_COLOR_BLUE_LIGHT,
+	SG_GET_RGB(255, 255, 127),
+
+	SG_COLOR_RED_DARK,
+	SG_COLOR_GREEN_DARK,
+	SG_COLOR_BLUE_DARK,
+	SG_COLOR_YELLOW_DARK,
+
+	SG_COLOR_BLUE_GREEN,
+	SG_COLOR_PURPLE,
+	SG_COLOR_PINK
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_Layer *	Get_Active_Layer(void)
+{
+	return( g_pACTIVE ? g_pACTIVE->Get_Layer() : NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_Layer::CWKSP_Layer(CSG_Data_Object *pObject)
+{
+	m_pObject		= pObject;
+	m_pClassify		= new CWKSP_Layer_Classify;
+	m_pLegend		= new CWKSP_Layer_Legend(this);
+	m_pHistogram	= NULL;
+}
+
+//---------------------------------------------------------
+CWKSP_Layer::~CWKSP_Layer(void)
+{
+	Histogram_Show(false);
+
+	if( g_pMaps )
+	{
+		g_pMaps->Del(this);
+	}
+
+	if( m_pClassify )
+	{
+		delete(m_pClassify);
+	}
+
+	if( m_pLegend )
+	{
+		delete(m_pLegend);
+	}
+
+	//-----------------------------------------------------
+	if( g_pData->Exists(m_pObject) )
+	{
+		if( m_pObject->is_Valid() == true )
+		{
+			MSG_General_Add(
+  				wxString::Format(wxT("%s %s: %s..."),
+					LNG("[MSG] Close"),
+					SG_Get_DataObject_Name(m_pObject->Get_ObjectType()),
+					m_pObject->Get_Name()
+     			),
+				true, true
+			);
+
+			delete(m_pObject);
+
+			MSG_General_Add(LNG("[MSG] okay"), false, false, SG_UI_MSG_STYLE_SUCCESS);
+		}
+		else
+		{
+			delete(m_pObject);
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Layer::On_Command(int Cmd_ID)
+{
+	switch( Cmd_ID )
+	{
+	default:
+		return( CWKSP_Base_Item::On_Command(Cmd_ID) );
+
+	case ID_CMD_SHAPES_SAVE:
+	case ID_CMD_GRIDS_SAVE:
+	case ID_CMD_TIN_SAVE:
+	case ID_CMD_POINTCLOUD_SAVE:
+		Save(m_pObject->Get_File_Name());
+		break;
+
+	case ID_CMD_SHAPES_SAVEAS:
+	case ID_CMD_GRIDS_SAVEAS:
+	case ID_CMD_TIN_SAVEAS:
+	case ID_CMD_POINTCLOUD_SAVEAS:
+		Save();
+		break;
+
+	case ID_CMD_WKSP_ITEM_RETURN:
+	case ID_CMD_SHAPES_SHOW:
+	case ID_CMD_GRIDS_SHOW:
+	case ID_CMD_TIN_SHOW:
+	case ID_CMD_POINTCLOUD_SHOW:
+		g_pMaps->Add(this);
+		break;
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Layer::On_Command_UI(wxUpdateUIEvent &event)
+{
+	switch( event.GetId() )
+	{
+	default:
+		return( CWKSP_Base_Item::On_Command_UI(event) );
+
+	case ID_CMD_TIN_SAVE:
+	case ID_CMD_GRIDS_SAVE:
+	case ID_CMD_SHAPES_SAVE:
+	case ID_CMD_POINTCLOUD_SAVE:
+		event.Enable(m_pObject->is_Modified() && m_pObject->Get_File_Name() && *(m_pObject->Get_File_Name()));
+		break;
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+wxString CWKSP_Layer::Get_Name(void)
+{
+	if( g_pData->Get_Numbering() < 0 )
+	{
+		return( m_pObject ? m_pObject->Get_Name() : SG_T("-") );
+	}
+
+	return( wxString::Format(wxT("%0*d. %s"), g_pData->Get_Numbering(), 1 + Get_ID(), m_pObject ? m_pObject->Get_Name() : SG_T("-")) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_Layer::Create_Parameters(void)
+{
+	m_Parameters.Create(this, LNG(""), LNG(""));
+	m_Parameters.Set_Callback_On_Parameter_Changed(&_On_Parameter_Changed);
+
+	//-----------------------------------------------------
+	m_Parameters.Add_Node(
+		NULL							, "NODE_GENERAL"		, LNG("[CAP] General"),
+		LNG("")
+	);
+
+	m_Parameters.Add_String(
+		m_Parameters("NODE_GENERAL")	, "OBJECT_NAME"			, LNG("[CAP] Name"),
+		LNG(""),
+		m_pObject->Get_Name()
+	);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_GENERAL")	, "SHOW_LEGEND"			, LNG("[CAP] Show Legend"),
+		LNG(""),
+		PARAMETER_TYPE_Bool, true
+	);
+
+	m_Parameters.Add_Range(
+		m_Parameters("NODE_GENERAL")	, "GENERAL_NODATA"		, LNG("[CAP] No Data"),
+		LNG("")
+	);
+
+
+	//-----------------------------------------------------
+	m_Parameters.Add_Node(
+		NULL							, "NODE_DISPLAY"		, LNG("[CAP] Display"),
+		LNG("")
+	);
+
+
+	//-----------------------------------------------------
+	// Visibility...
+
+	m_Parameters.Add_Node(
+		NULL							, "NODE_VISIBILITY"		, LNG("[CAP] Display: Visibility"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_VISIBILITY")	, "SHOW_ALWAYS"			, LNG("[CAP] Show Always"),
+		LNG(""),
+		PARAMETER_TYPE_Bool, true
+	);
+
+	m_Parameters.Add_Range(
+		m_Parameters("NODE_VISIBILITY")	, "SHOW_RANGE"			, LNG("[CAP] Scale Dependent"),
+		LNG(""),
+		0.0, 1000.0, 0.0, true
+	);
+
+
+	//-----------------------------------------------------
+	// Classification...
+
+	m_Parameters.Add_Node(
+		NULL							, "NODE_COLORS"			, LNG("[CAP] Display: Color Classification"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Choice(
+		m_Parameters("NODE_COLORS")		, "COLORS_TYPE"			, LNG("[CAP] Type"),
+		LNG(""),
+		wxString::Format(wxT("%s|%s|%s|"),
+			LNG("[VAL] Unique Symbol"),
+			LNG("[VAL] Lookup Table"),
+			LNG("[VAL] Graduated Color")
+		), 0
+	);
+
+
+	//-----------------------------------------------------
+	// Classification: Unique Value...
+
+	m_Parameters.Add_Node(
+		m_Parameters("NODE_COLORS")		, "NODE_UNISYMBOL"		, LNG("[CAP] Unique Symbol"),
+		LNG("")
+	);
+
+	static	BYTE	s_Def_Layer_Colour	= 0;
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_UNISYMBOL")	, "UNISYMBOL_COLOR"		, LNG("[CAP] Color"),
+		LNG(""),
+		PARAMETER_TYPE_Color, s_Def_Layer_Colours[s_Def_Layer_Colour++ % DEF_LAYER_COLOUR_COUNT]
+	//	PARAMETER_TYPE_Color, SG_GET_RGB(Get_Random(128, 250), Get_Random(128, 200), Get_Random(128, 200))
+	);
+
+
+	//-----------------------------------------------------
+	// Classification: Lookup Table...
+
+	m_Parameters.Add_Node(
+		m_Parameters("NODE_COLORS")		, "NODE_LUT"			, LNG("[CAP] Lookup Table"),
+		LNG("")
+	);
+
+	CSG_Table	LUT;
+	LUT.Add_Field(LNG("COLOR")		, SG_DATATYPE_Color);
+	LUT.Add_Field(LNG("NAME")			, SG_DATATYPE_String);
+	LUT.Add_Field(LNG("DESCRIPTION")	, SG_DATATYPE_String);
+	LUT.Add_Field(LNG("MINIMUM")		, SG_DATATYPE_Double);
+	LUT.Add_Field(LNG("MAXIMUM")		, SG_DATATYPE_Double);
+
+	m_Parameters.Add_FixedTable(
+		m_Parameters("NODE_LUT")		, "LUT"					, LNG("[CAP] Table"),
+		LNG(""),
+		&LUT
+	);
+
+
+	//-----------------------------------------------------
+	// Classification: Metric...
+
+	m_Parameters.Add_Node(
+		m_Parameters("NODE_COLORS")		, "NODE_METRIC"			, LNG("[CAP] Graduated Color"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Colors(
+		m_Parameters("NODE_METRIC")		, "METRIC_COLORS"		, LNG("[CAP] Colors"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Range(
+		m_Parameters("NODE_METRIC")		, "METRIC_ZRANGE"		, LNG("[CAP] Value Range"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Choice(
+		m_Parameters("NODE_METRIC")		, "METRIC_SCALE_MODE"	, LNG("[CAP] Mode"),
+		LNG(""),
+		wxString::Format(wxT("%s|%s|%s|"),
+			LNG("[VAL] Linear"),
+			LNG("[VAL] Logarithmic (up)"),
+			LNG("[VAL] Logarithmic (down)")
+		), 0
+	);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_METRIC")		, "METRIC_SCALE_LOG"	, LNG("[CAP] Logarithmic Stretch Factor"),
+		LNG(""),
+		PARAMETER_TYPE_Double, 1.0
+	);
+
+
+	//-----------------------------------------------------
+	m_pClassify->Initialise(this, m_Parameters("LUT")->asTable(), m_Parameters("METRIC_COLORS")->asColors());
+
+	On_Create_Parameters();
+
+	DataObject_Changed();
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Layer::Save(void)
+{
+	bool		bResult;
+	wxString	File_Path;
+
+	File_Path	= m_pObject->Get_File_Name() ? m_pObject->Get_File_Name() : m_pObject->Get_Name();
+
+	switch( Get_Type() )
+	{
+	default:
+		bResult	= false;
+		break;
+
+	case WKSP_ITEM_TIN:
+	case WKSP_ITEM_Shapes:
+		bResult	= DLG_Save(File_Path, ID_DLG_SHAPES_SAVE);
+		break;
+
+	case WKSP_ITEM_PointCloud:
+		bResult	= DLG_Save(File_Path, ID_DLG_POINTCLOUD_SAVE);
+		break;
+
+	case WKSP_ITEM_Grid:
+		bResult	= DLG_Save(File_Path, ID_DLG_GRIDS_SAVE);
+		break;
+	}
+
+	if( bResult )
+	{
+		bResult	= m_pObject->Save(File_Path.c_str());
+
+		PROCESS_Set_Okay();
+	}
+
+	return( bResult );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Layer::Save(const wxChar *File_Path)
+{
+	if( File_Path && *File_Path )
+	{
+		bool	bResult	= m_pObject->Save(File_Path);
+
+		if( bResult )
+		{
+			g_pData->Get_FileMenus()->Recent_Add(m_pObject->Get_ObjectType(), m_pObject->Get_File_Name());
+		}
+
+		PROCESS_Set_Okay();
+
+		return( bResult );
+	}
+
+	return( Save() );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_Layer::DataObject_Changed(CSG_Parameters *pParameters)
+{
+	if( pParameters )
+	{
+		m_Parameters.Assign_Values(pParameters);
+	}
+	else
+	{
+		if( m_pObject->Get_ObjectType() == DATAOBJECT_TYPE_Grid )
+		{
+			double		m, s, min, max;
+			CSG_Grid	*pGrid	= (CSG_Grid *)m_pObject;
+
+			switch( g_pData->Get_Parameters()->Get_Parameter("GRID_DISPLAY_RANGEFIT")->asInt() )
+			{
+			case 0:
+				min	= pGrid->Get_ZMin(true);
+				max	= pGrid->Get_ZMax(true);
+				break;
+
+			case 1:
+				m	= pGrid->Get_ArithMean(true);
+				s	= pGrid->Get_StdDev   (true) * 1.5;
+				min	= m - s;	if( min < pGrid->Get_ZMin(true) )	min	= pGrid->Get_ZMin(true);
+				max	= m + s;	if( max > pGrid->Get_ZMax(true) )	max	= pGrid->Get_ZMax(true);
+				break;
+
+			case 2:
+				m	= pGrid->Get_ArithMean(true);
+				s	= pGrid->Get_StdDev   (true) * 2.0;
+				min	= m - s;	if( min < pGrid->Get_ZMin(true) )	min	= pGrid->Get_ZMin(true);
+				max	= m + s;	if( max > pGrid->Get_ZMax(true) )	max	= pGrid->Get_ZMax(true);
+			}
+
+			m_Parameters("METRIC_ZRANGE")->asRange()->Set_Range(min, max);
+		}
+	}
+
+	DataObject_Changed();
+}
+
+void CWKSP_Layer::DataObject_Changed(CSG_Colors *pColors)
+{
+	if( m_pClassify->Get_Metric_Colors() && pColors )
+	{
+		m_pClassify->Get_Metric_Colors()->Assign(pColors);
+	}
+
+	DataObject_Changed();
+}
+
+void CWKSP_Layer::DataObject_Changed(void)
+{
+	//-----------------------------------------------------
+	m_Parameters.Set_Name(wxString::Format(wxT("%02d. %s"), 1 + Get_ID(), m_pObject->Get_Name()));
+
+	m_Parameters("OBJECT_NAME")->Set_Value(m_pObject->Get_Name());
+
+	m_Parameters("GENERAL_NODATA")->asRange()->Set_Range(
+		m_pObject->Get_NoData_Value(),
+		m_pObject->Get_NoData_hiValue()
+	);
+
+	//-----------------------------------------------------
+	On_DataObject_Changed();
+
+	g_pACTIVE->Update(this, false);
+
+	Parameters_Changed();
+}
+
+//---------------------------------------------------------
+void CWKSP_Layer::Parameters_Changed(void)
+{
+	static bool	bUpdates	= false;
+
+	//-----------------------------------------------------
+	if( !bUpdates )
+	{
+		bUpdates	= true;
+
+		m_pObject->Set_Name(m_Parameters("OBJECT_NAME")->asString());
+
+		m_pObject->Set_NoData_Value_Range(
+			m_Parameters("GENERAL_NODATA")->asRange()->Get_LoVal(),
+			m_Parameters("GENERAL_NODATA")->asRange()->Get_HiVal()
+		);
+
+		//-----------------------------------------------------
+		m_pClassify->Set_Mode(m_Parameters("COLORS_TYPE")->asInt());
+
+		m_pClassify->Set_Unique_Color(m_Parameters("UNISYMBOL_COLOR")->asInt());
+
+		m_pClassify->Set_Metric(
+			m_Parameters("METRIC_SCALE_MODE")	->asInt(),
+			m_Parameters("METRIC_SCALE_LOG")	->asDouble(),
+			m_Parameters("METRIC_ZRANGE")->asRange()->Get_LoVal() / (Get_Type() == WKSP_ITEM_Grid ? ((CSG_Grid *)m_pObject)->Get_ZFactor() : 1.0),
+			m_Parameters("METRIC_ZRANGE")->asRange()->Get_HiVal() / (Get_Type() == WKSP_ITEM_Grid ? ((CSG_Grid *)m_pObject)->Get_ZFactor() : 1.0)
+		);
+
+		//-----------------------------------------------------
+		On_Parameters_Changed();
+
+		Update_Views(false);
+
+		_Set_Thumbnail();
+
+		g_pData_Buttons->Refresh(false);
+
+		//-----------------------------------------------------
+		CWKSP_Base_Item::Parameters_Changed();
+
+		bUpdates	= false;
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CWKSP_Layer::_On_Parameter_Changed(CSG_Parameter *pParameter)
+{
+	if( pParameter && pParameter->Get_Owner() && pParameter->Get_Owner()->Get_Owner() )
+	{
+	//	return( ((CWKSP_Layer *)pParameter->Get_Owner()->Get_Owner())->
+	//		On_Parameter_Changed(pParameter->Get_Owner(), pParameter)
+	//	);
+
+		((CWKSP_Layer *)pParameter->Get_Owner()->Get_Owner())->
+			On_Parameter_Changed(pParameter->Get_Owner(), pParameter);
+
+		g_pACTIVE->Get_Parameters()->Update_Parameters(pParameter->Get_Owner(), false);
+	}
+
+	return( 0 );
+}
+
+//---------------------------------------------------------
+int CWKSP_Layer::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	return( 1 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+const wxBitmap & CWKSP_Layer::Get_Thumbnail(int dx, int dy)
+{
+	if( dx > 0 && m_Thumbnail.GetWidth()  != dx
+	&&	dy > 0 && m_Thumbnail.GetHeight() != dy )
+	{
+		m_Thumbnail.Create(dx, dy);
+
+		_Set_Thumbnail();
+	}
+
+	return( m_Thumbnail );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Layer::_Set_Thumbnail(void)
+{
+	if( m_pObject && m_Thumbnail.GetWidth() > 0 && m_Thumbnail.GetHeight() > 0 )
+	{
+		wxMemoryDC		dc;
+		wxRect			r(0, 0, m_Thumbnail.GetWidth(), m_Thumbnail.GetHeight());
+		CWKSP_Map_DC	dc_Map(Get_Extent(), r, 1.0, SG_GET_RGB(255, 255, 255));
+
+		Draw(dc_Map, false);
+
+		dc.SelectObject(m_Thumbnail);
+		dc.SetBackground(*wxWHITE_BRUSH);
+		dc.Clear();
+
+		dc_Map.Draw(dc);
+
+		dc.SelectObject(wxNullBitmap);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Rect CWKSP_Layer::Get_Extent(void)
+{
+	if( m_pObject )
+	{
+		switch( m_pObject->Get_ObjectType() )
+		{
+		case DATAOBJECT_TYPE_Grid:
+			return( ((CSG_Grid       *)m_pObject)->Get_Extent(true) );
+
+		case DATAOBJECT_TYPE_Shapes:
+			return( ((CSG_Shapes     *)m_pObject)->Get_Extent() );
+
+		case DATAOBJECT_TYPE_TIN:
+			return( ((CSG_TIN        *)m_pObject)->Get_Extent() );
+
+		case DATAOBJECT_TYPE_PointCloud:
+			return( ((CSG_PointCloud *)m_pObject)->Get_Extent() );
+
+		default:
+			break;
+		}
+	}
+
+	return( CSG_Rect(0.0, 0.0, 0.0, 0.0) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Colors * CWKSP_Layer::Get_Colors(void)
+{
+	return( m_pClassify->Get_Metric_Colors() );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Layer::Get_Colors(CSG_Colors *pColors)
+{
+	if( m_pClassify->Get_Metric_Colors() && pColors )
+	{
+		return( pColors->Assign(m_pClassify->Get_Metric_Colors()) );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Layer::Set_Color_Range(double zMin, double zMax)
+{
+	CSG_Parameters	Parameters;
+
+	Parameters.Add_Range(NULL, "METRIC_ZRANGE"	, LNG(""), LNG(""), zMin, zMax);
+	DataObject_Changed(&Parameters);
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Layer::do_Legend(void)
+{
+	return( m_Parameters("SHOW_LEGEND")->asBool() );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Layer::do_Show(CSG_Rect const &rMap)
+{
+	double				d;
+	CSG_Parameter_Range	*pRange;
+
+	if( !m_Parameters("SHOW_ALWAYS")->asBool() )
+	{
+		pRange	= m_Parameters("SHOW_RANGE")->asRange();
+		d		= rMap.Get_XRange() > rMap.Get_YRange() ? rMap.Get_XRange() : rMap.Get_YRange();
+
+		return( pRange->Get_LoVal() <= d && d <= pRange->Get_HiVal() );
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Layer::Show(CWKSP_Map *pMap)
+{
+	if( pMap != NULL )
+	{
+		if( g_pMaps->Add(this, pMap) )
+		{
+			pMap->View_Show(true);
+
+			return( true );
+		}
+	}
+	else
+	{
+		for(int i=0; i<g_pMaps->Get_Count(); i++)
+		{
+			if( g_pMaps->Get_Map(i)->Find_Layer(this) != NULL )
+			{
+				pMap	= g_pMaps->Get_Map(i);
+
+				pMap->View_Show(true);
+
+				return( true );
+			}
+		}
+
+		if( g_pMaps->Add(this, NULL) )
+		{
+			return( Show(NULL) );
+		}
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_Layer::Draw(CWKSP_Map_DC &dc_Map, bool bEdit)
+{
+	On_Draw(dc_Map, bEdit);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_Layer::Update_Views(bool bMapsOnly)
+{
+	g_pMaps->Update(this, bMapsOnly);
+
+	if( !bMapsOnly )
+	{
+		if( Histogram_Get() )
+		{
+			Histogram_Get()->Update_Histogram();
+		}
+
+		On_Update_Views();
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_Layer::View_Closes(wxMDIChildFrame *pView)
+{
+	if( wxDynamicCast(pView, CVIEW_Histogram) != NULL )
+	{
+		m_pHistogram	= NULL;
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_Layer::Histogram_Show(bool bShow)
+{
+	if( bShow && !m_pHistogram )
+	{
+		m_pHistogram	= new CVIEW_Histogram(this);
+	}
+	else if( !bShow && m_pHistogram )
+	{
+		m_pHistogram->Destroy();
+		delete(m_pHistogram);
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_Layer::Histogram_Toggle(void)
+{
+	Histogram_Show( m_pHistogram == NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+wxMenu * CWKSP_Layer::Edit_Get_Menu(void)
+{
+	return( On_Edit_Get_Menu() );
+}
+
+//---------------------------------------------------------
+TSG_Rect CWKSP_Layer::Edit_Get_Extent(void)
+{
+	return( On_Edit_Get_Extent() );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Layer::Edit_Set_Attributes(void)
+{
+	return( On_Edit_Set_Attributes() );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Layer::Edit_On_Key_Down(int KeyCode)
+{
+	return( On_Edit_On_Key_Down(KeyCode) );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Layer::Edit_On_Mouse_Down(CSG_Point Point, double ClientToWorld, int Key)
+{
+	m_Edit_Mouse_Down	= Point;
+
+	return( On_Edit_On_Mouse_Down(Point, ClientToWorld, Key) );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Layer::Edit_On_Mouse_Up(CSG_Point Point, double ClientToWorld, int Key)
+{
+	return( On_Edit_On_Mouse_Up(Point, ClientToWorld, Key) );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Layer::Edit_On_Mouse_Move(wxWindow *pMap, CSG_Rect rWorld, wxPoint pt, wxPoint ptLast, int Key)
+{
+	return( On_Edit_On_Mouse_Move(pMap, rWorld, pt, ptLast, Key) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_gui/wksp_layer.h b/src/saga_core/saga_gui/wksp_layer.h
index c25ea53..ca51b8f 100644
--- a/src/saga_core/saga_gui/wksp_layer.h
+++ b/src/saga_core/saga_gui/wksp_layer.h
@@ -1,213 +1,215 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     WKSP_Layer.h                      //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Layer_H
-#define _HEADER_INCLUDED__SAGA_GUI__WKSP_Layer_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "wksp_base_item.h"
-
-#include "wksp_map_dc.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CWKSP_Layer : public CWKSP_Base_Item
-{
-public:
-	CWKSP_Layer(CSG_Data_Object *pObject);
-	virtual ~CWKSP_Layer(void);
-
-	virtual bool					On_Command				(int Cmd_ID);
-	virtual bool					On_Command_UI			(wxUpdateUIEvent &event);
-
-	virtual CSG_Parameters *		Get_Parameters			(void)	{	return( &m_Parameters );	}
-
-	virtual void					Parameters_Changed		(void);
-
-	void							DataObject_Changed		(void);
-	void							DataObject_Changed		(CSG_Parameters *pParameters);
-	void							DataObject_Changed		(CSG_Colors *pColors);
-
-	CSG_Data_Object *				Get_Object				(void)	{	return( m_pObject );	}
-	CSG_Rect						Get_Extent				(void);
-
-	CSG_Colors *					Get_Colors				(void);
-	bool							Get_Colors				(CSG_Colors *pColors);
-	bool							Set_Color_Range			(double zMin, double zMax);
-
-	bool							Save					(void);
-	bool							Save					(const wxChar *File_Path);
-
-	virtual bool					Show					(class CWKSP_Map *pMap = NULL);
-
-	virtual wxString				Get_Value				(CSG_Point ptWorld, double Epsilon)	= 0;
-	virtual double					Get_Value_Range			(void)								= 0;
-
-	void							Draw					(CWKSP_Map_DC &dc_Map, bool bEdit);
-
-	class CWKSP_Layer_Classify *	Get_Classifier			(void)	{	return( m_pClassify );	}
-
-	class CWKSP_Layer_Legend *		Get_Legend				(void)	{	return( m_pLegend );	}
-	bool							do_Legend				(void);
-	bool							do_Show					(CSG_Rect const &rMap);
-
-	virtual bool					Update					(CWKSP_Layer *pChanged)	{	return( pChanged == this );	}
-
-	void							Update_Views			(bool bMapsOnly);
-	void							View_Closes				(class wxMDIChildFrame *pView);
-
-	const wxBitmap &				Get_Thumbnail			(int dx, int dy);
-
-	class CVIEW_Histogram *			Histogram_Get			(void)	{	return( m_pHistogram );	}
-	void							Histogram_Show			(bool bShow);
-	void							Histogram_Toggle		(void);
-
-	wxMenu *						Edit_Get_Menu			(void);
-	TSG_Rect						Edit_Get_Extent			(void);
-	CSG_Table *						Edit_Get_Attributes		(void)	{	return( &m_Edit_Attributes );	}
-	bool							Edit_Set_Attributes		(void);
-	bool							Edit_On_Key_Down		(int KeyCode);
-	bool							Edit_On_Mouse_Down		(CSG_Point Point, double WorldToClient, int Key);
-	bool							Edit_On_Mouse_Up		(CSG_Point Point, double WorldToClient, int Key);
-	bool							Edit_On_Mouse_Move		(wxWindow *pMap, CSG_Rect rWorld, wxPoint pt, wxPoint ptLast, int Key);
-
-
-protected:
-
-	CSG_Data_Object					*m_pObject;
-
-	CSG_Parameter_Range				*m_pZRange;
-
-	CSG_Parameters					m_Parameters;
-
-	CSG_Point						m_Edit_Mouse_Down;
-
-	CSG_Table						m_Edit_Attributes;
-
-	class CWKSP_Layer_Classify		*m_pClassify;
-
-	class CWKSP_Layer_Legend		*m_pLegend;
-
-	class CVIEW_Histogram			*m_pHistogram;
-
-	wxBitmap						m_Thumbnail;
-
-
-	void							Create_Parameters		(void);
-
-	virtual void					On_Create_Parameters	(void)	= 0;
-	virtual void					On_DataObject_Changed	(void)	= 0;
-	virtual void					On_Parameters_Changed	(void)	= 0;
-
-	virtual int						On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
-
-	virtual void					On_Update_Views			(void)			{}
-
-	virtual void					On_Draw					(CWKSP_Map_DC &dc_Map, bool bEdit)	= 0;
-
-	virtual wxMenu *				On_Edit_Get_Menu		(void)			{	return( NULL );	}
-	virtual TSG_Rect				On_Edit_Get_Extent		(void)	= 0;
-	virtual bool					On_Edit_Set_Attributes	(void)	= 0;
-	virtual bool					On_Edit_On_Key_Down		(int KeyCode)	{	return( false );	}
-	virtual bool					On_Edit_On_Mouse_Down	(CSG_Point Point, double ClientToWorld, int Key)	{	return( false );	}
-	virtual bool					On_Edit_On_Mouse_Up		(CSG_Point Point, double ClientToWorld, int Key)	{	return( false );	}
-	virtual bool					On_Edit_On_Mouse_Move	(wxWindow *pMap, CSG_Rect rWorld, wxPoint pt, wxPoint ptLast, int Key)	{	return( false );	}
-
-
-private:
-
-	static int						_On_Parameter_Changed	(CSG_Parameter *pParameter);
-
-	bool							_Set_Thumbnail			(void);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_Layer *						Get_Active_Layer		(void);
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Layer_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     WKSP_Layer.h                      //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Layer_H
+#define _HEADER_INCLUDED__SAGA_GUI__WKSP_Layer_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "wksp_base_item.h"
+
+#include "wksp_map_dc.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CWKSP_Layer : public CWKSP_Base_Item
+{
+public:
+	CWKSP_Layer(CSG_Data_Object *pObject);
+	virtual ~CWKSP_Layer(void);
+
+	virtual bool					On_Command				(int Cmd_ID);
+	virtual bool					On_Command_UI			(wxUpdateUIEvent &event);
+
+	virtual wxString				Get_Name				(void);
+
+	virtual CSG_Parameters *		Get_Parameters			(void)	{	return( &m_Parameters );	}
+
+	virtual void					Parameters_Changed		(void);
+
+	void							DataObject_Changed		(void);
+	void							DataObject_Changed		(CSG_Parameters *pParameters);
+	void							DataObject_Changed		(CSG_Colors *pColors);
+
+	CSG_Data_Object *				Get_Object				(void)	{	return( m_pObject );	}
+	CSG_Rect						Get_Extent				(void);
+
+	CSG_Colors *					Get_Colors				(void);
+	bool							Get_Colors				(CSG_Colors *pColors);
+	bool							Set_Color_Range			(double zMin, double zMax);
+
+	bool							Save					(void);
+	bool							Save					(const wxChar *File_Path);
+
+	virtual bool					Show					(class CWKSP_Map *pMap = NULL);
+
+	virtual wxString				Get_Value				(CSG_Point ptWorld, double Epsilon)	= 0;
+	virtual double					Get_Value_Range			(void)								= 0;
+
+	void							Draw					(CWKSP_Map_DC &dc_Map, bool bEdit);
+
+	class CWKSP_Layer_Classify *	Get_Classifier			(void)	{	return( m_pClassify );	}
+
+	class CWKSP_Layer_Legend *		Get_Legend				(void)	{	return( m_pLegend );	}
+	bool							do_Legend				(void);
+	bool							do_Show					(CSG_Rect const &rMap);
+
+	virtual bool					Update					(CWKSP_Layer *pChanged)	{	return( pChanged == this );	}
+
+	void							Update_Views			(bool bMapsOnly);
+	void							View_Closes				(class wxMDIChildFrame *pView);
+
+	const wxBitmap &				Get_Thumbnail			(int dx, int dy);
+
+	class CVIEW_Histogram *			Histogram_Get			(void)	{	return( m_pHistogram );	}
+	void							Histogram_Show			(bool bShow);
+	void							Histogram_Toggle		(void);
+
+	wxMenu *						Edit_Get_Menu			(void);
+	TSG_Rect						Edit_Get_Extent			(void);
+	CSG_Table *						Edit_Get_Attributes		(void)	{	return( &m_Edit_Attributes );	}
+	bool							Edit_Set_Attributes		(void);
+	bool							Edit_On_Key_Down		(int KeyCode);
+	bool							Edit_On_Mouse_Down		(CSG_Point Point, double WorldToClient, int Key);
+	bool							Edit_On_Mouse_Up		(CSG_Point Point, double WorldToClient, int Key);
+	bool							Edit_On_Mouse_Move		(wxWindow *pMap, CSG_Rect rWorld, wxPoint pt, wxPoint ptLast, int Key);
+
+
+protected:
+
+	CSG_Data_Object					*m_pObject;
+
+	CSG_Parameter_Range				*m_pZRange;
+
+	CSG_Parameters					m_Parameters;
+
+	CSG_Point						m_Edit_Mouse_Down;
+
+	CSG_Table						m_Edit_Attributes;
+
+	class CWKSP_Layer_Classify		*m_pClassify;
+
+	class CWKSP_Layer_Legend		*m_pLegend;
+
+	class CVIEW_Histogram			*m_pHistogram;
+
+	wxBitmap						m_Thumbnail;
+
+
+	void							Create_Parameters		(void);
+
+	virtual void					On_Create_Parameters	(void)	= 0;
+	virtual void					On_DataObject_Changed	(void)	= 0;
+	virtual void					On_Parameters_Changed	(void)	= 0;
+
+	virtual int						On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+	virtual void					On_Update_Views			(void)			{}
+
+	virtual void					On_Draw					(CWKSP_Map_DC &dc_Map, bool bEdit)	= 0;
+
+	virtual wxMenu *				On_Edit_Get_Menu		(void)			{	return( NULL );	}
+	virtual TSG_Rect				On_Edit_Get_Extent		(void)	= 0;
+	virtual bool					On_Edit_Set_Attributes	(void)	= 0;
+	virtual bool					On_Edit_On_Key_Down		(int KeyCode)	{	return( false );	}
+	virtual bool					On_Edit_On_Mouse_Down	(CSG_Point Point, double ClientToWorld, int Key)	{	return( false );	}
+	virtual bool					On_Edit_On_Mouse_Up		(CSG_Point Point, double ClientToWorld, int Key)	{	return( false );	}
+	virtual bool					On_Edit_On_Mouse_Move	(wxWindow *pMap, CSG_Rect rWorld, wxPoint pt, wxPoint ptLast, int Key)	{	return( false );	}
+
+
+private:
+
+	static int						_On_Parameter_Changed	(CSG_Parameter *pParameter);
+
+	bool							_Set_Thumbnail			(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_Layer *						Get_Active_Layer		(void);
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Layer_H
diff --git a/src/saga_core/saga_gui/wksp_map.cpp b/src/saga_core/saga_gui/wksp_map.cpp
index 5c4596b..ed1dd67 100644
--- a/src/saga_core/saga_gui/wksp_map.cpp
+++ b/src/saga_core/saga_gui/wksp_map.cpp
@@ -64,9 +64,6 @@
 #include <wx/clipbrd.h>
 #include <wx/dataobj.h>
 
-#include <saga_api/doc_pdf.h>
-#include "svg_interactive_map.h"
-
 #include "res_commands.h"
 #include "res_dialogs.h"
 
@@ -261,11 +258,6 @@ wxMenu * CWKSP_Map::Get_Menu(void)
 	CMD_Menu_Add_Item(pMenu,  true, ID_CMD_MAPS_SAVE_IMAGE_ON_CHANGE);
 	CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAPS_SAVE_TO_CLIPBOARD);
 	CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAPS_SAVE_TO_CLIPBOARD_LEGEND);
-	if( CSG_Doc_PDF::Get_Version() != NULL )
-	{
-		CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAPS_SAVE_PDF_INDEXED);
-	}
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAPS_SAVE_INTERACTIVE_SVG);
 	CMD_Menu_Add_Item(pMenu,  true, ID_CMD_MAPS_3D_SHOW);
 	CMD_Menu_Add_Item(pMenu,  true, ID_CMD_MAPS_LAYOUT_SHOW);
 	CMD_Menu_Add_Item(pMenu, false, ID_CMD_MAPS_SYNCHRONIZE);
@@ -308,14 +300,6 @@ bool CWKSP_Map::On_Command(int Cmd_ID)
 		SaveAs_Image_Clipboard(true);
 		break;
 
-	case ID_CMD_MAPS_SAVE_PDF_INDEXED:
-		SaveAs_PDF_Indexed();
-		break;
-
-	case ID_CMD_MAPS_SAVE_INTERACTIVE_SVG:
-		SaveAs_Interactive_SVG();
-		break;
-	
 	case ID_CMD_MAPS_SYNCHRONIZE:
 		Set_Synchronising(!m_bSynchronise);
 		break;
@@ -1300,327 +1284,6 @@ void CWKSP_Map::_Img_Save(wxString file, int type)
 	Set_Buisy_Cursor(false);
 }
 
-//---------------------------------------------------------
-void CWKSP_Map::SaveAs_PDF_Indexed(void)
-{
-	static CSG_Parameters	Parameters(NULL, LNG("[CAP] Save to PDF"), LNG(""), NULL, false);
-
-	//-----------------------------------------------------
-	if( Parameters.Get_Count() == 0 )
-	{
-		Parameters.Add_FilePath(
-			NULL	, "FILENAME"	, LNG("[FLD] PDF Document"),
-			LNG(""),
-			wxString::Format(
-				wxT("%s (*.pdf)|*pdf|")
-				wxT("%s|*.*"),
-				LNG("PDF Files"),
-				LNG("All Files")
-			), NULL, true, false
-		);
-
-		Parameters.Add_Choice(
-			NULL	, "PAPER_SIZE"	, LNG("[FLD] Paper Format"),
-			LNG(""),
-
-			CSG_String::Format(wxT("%s|%s|%s|%s|"),
-				LNG("A4 Portrait"),
-				LNG("A4 Landscape"),
-				LNG("A3 Portrait"),
-				LNG("A3 Landscape")
-			)
-		);
-
-		Parameters.Add_String(
-			NULL	, "NAME"		, LNG("[FLD] Title"),
-			LNG(""),
-			LNG("")
-		);
-
-		Parameters.Add_Shapes(
-			NULL	, "SHAPES"		, LNG("[FLD] Shapes"),
-			LNG(""),
-			PARAMETER_INPUT_OPTIONAL
-		);
-
-		Parameters.Add_Table_Field(
-			Parameters("SHAPES")	, "FIELD"		, LNG("[FLD] Attribute"),
-			LNG("")
-		);
-
-	//	Parameters.Add_Grid(
-	//		NULL	, "GRID"		, LNG("[FLD] Grid"),
-	//		LNG(""),
-	//		PARAMETER_INPUT_OPTIONAL
-	//	);
-
-		Parameters.Add_FilePath(
-			NULL	, "FILEICON"	, LNG("[FLD] Icon"),
-			LNG(""),
-
-			CSG_String::Format(wxT("%s|*.png;*.jpg|%s|*.png|%s|*.jpg|%s|*.*"),
-				LNG("All Recognised Files"),
-				LNG("PNG Files"),
-				LNG("JPG Files"),
-				LNG("All Files")
-			), NULL, false, false
-		);
-
-		Parameters.Add_Value(
-			NULL	, "ROUNDSCALE"	, LNG("[FLD] Round Scale"),
-			LNG(""),
-			PARAMETER_TYPE_Bool, true
-		);
-	}
-
-	//-----------------------------------------------------
-	if( DLG_Parameters(&Parameters) )
-	{
-		bool			bResult, bRoundScale;
-		int				iField;
-		CSG_String		Name, FileName, FileName_Icon, FilePath_Maps;
-		CSG_Rect		rOverview, rMap;
-		CSG_Shapes			*pShapes;
-	//	CSG_Grid			*pGrid;
-		CSG_Doc_PDF	PDF;
-
-		MSG_General_Add(wxString::Format(wxT("%s..."), LNG("[MSG] Save to PDF")), true, true);
-
-		bResult			= false;
-		Name			= Parameters("NAME")		->asString();	if( Name.Length() < 1 )	Name	=  LNG("Maps");
-		FileName		= Parameters("FILENAME")	->asString();
-		FileName_Icon	= Parameters("FILEICON")	->asString();
-		pShapes			= Parameters("SHAPES")		->asShapes();
-	//	pGrid			= Parameters("GRID")		->asGrid();
-		iField			= Parameters("FIELD")		->asInt();
-		bRoundScale		= Parameters("ROUNDSCALE")	->asBool();
-
-		switch( Parameters("PAPER_SIZE")->asInt() )
-		{
-		default:
-		case 0:	PDF.Open(PDF_PAGE_SIZE_A4, PDF_PAGE_ORIENTATION_PORTRAIT , Name);	break;	// A4 Portrait
-		case 1:	PDF.Open(PDF_PAGE_SIZE_A4, PDF_PAGE_ORIENTATION_LANDSCAPE, Name);	break;	// A4 Landscape
-		case 2:	PDF.Open(PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_PORTRAIT , Name);	break;	// A3 Portrait
-		case 3:	PDF.Open(PDF_PAGE_SIZE_A3, PDF_PAGE_ORIENTATION_LANDSCAPE, Name);	break;	// A3 Landscape
-		}
-
-		//-------------------------------------------------
-		if( PDF.Is_Open() )
-		{
-			PDF.Layout_Set_Box_Space(5, false);
-
-			PDF.Layout_Add_Box(  0.0,   0.0, 100.0,  75.0, "MAP");
-			PDF.Layout_Add_Box(  0.0,  75.0,  50.0, 100.0, "DIVISIONS");
-			PDF.Layout_Add_Box( 50.0,  75.0,  60.0,  80.0, "ICON");
-			PDF.Layout_Add_Box( 60.0,  75.0, 100.0,  80.0, "TITLE");
-			PDF.Layout_Add_Box( 50.0,  80.0, 100.0, 100.0, "DESCRIPTION");
-
-			FilePath_Maps	= SG_File_Make_Path(SG_File_Get_Path(FileName), SG_File_Get_Name(FileName, false));
-			rOverview		= pShapes ? pShapes->Get_Extent() : Get_Extent();
-		//	rOverview		= pShapes ? pShapes->Get_Extent() : (pGrid ? pGrid->Get_Extent() : Get_Extent());
-
-			//---------------------------------------------
-		//	PDF.Draw_Text		(PDF.Layout_Get_Box("TITLE").Get_XMin(), PDF.Layout_Get_Box("TITLE").Get_YCenter(), LNG("This is a Test!!!"), 24);
-		//	PDF.Draw_Rectangle	(PDF.Layout_Get_Box("DIVISIONS"));
-		//	PDF.Draw_Grid		(PDF.Layout_Get_Box("DIVISIONS"), Parameters("GRID")->asGrid(), CSG_Colors(), 0.0, 0.0, 0, &rOverview);
-		//	PDF.Draw_Shapes		(PDF.Layout_Get_Box("DIVISIONS"), pShapes, PDF_STYLE_POLYGON_STROKE, SG_COLOR_GREEN, SG_COLOR_BLACK, 1, &rOverview);
-		//	PDF.Draw_Graticule	(PDF.Layout_Get_Box("DIVISIONS"), rOverview);
-
-			//---------------------------------------------
-			Draw_PDF(&PDF, FilePath_Maps, -1, FileName_Icon, Name, rOverview, bRoundScale, iField, pShapes);
-
-			if( pShapes )
-			{
-				for(int i=0; i<pShapes->Get_Count() && SG_UI_Process_Set_Progress(i, pShapes->Get_Count()); i++)
-				{
-					Draw_PDF(&PDF, FilePath_Maps, i, FileName_Icon, Name, pShapes->Get_Shape(i)->Get_Extent(), bRoundScale, iField, pShapes);
-				}
-			}
-
-			//---------------------------------------------
-			PROCESS_Set_Okay(true);
-			Set_Buisy_Cursor(true);
-			bResult	= PDF.Save(FileName);
-			Set_Buisy_Cursor(false);
-		}
-
-		MSG_General_Add(bResult ? LNG("[MSG] okay") : LNG("[MSG] failed"), false, false, bResult ? SG_UI_MSG_STYLE_SUCCESS : SG_UI_MSG_STYLE_FAILURE);
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_Map::Draw_PDF(CSG_Doc_PDF *pPDF, const wxChar *FilePath_Maps, int Image_ID, const wxChar *FileName_Icon, const wxChar *Title, CSG_Rect rWorld, bool bRoundScale, int iField, CSG_Shapes *pShapes)
-{
-	int			FrameSize_1	= 20, FrameSize_2	= 10;
-	double		d, e, Scale, Ratio;
-	CSG_String	FileName, Description, s;
-	CSG_Rect	rBox;
-	wxRect		rBMP;
-	wxBitmap	BMP;
-	wxMemoryDC	dc;
-
-	if( pPDF && rWorld.Get_XRange() > 0.0 && rWorld.Get_YRange() > 0.0 && pPDF->Add_Page() )
-	{
-		rWorld.Inflate(5.0, true);
-
-		//-------------------------------------------------
-		rBox	= pPDF->Layout_Get_Box("MAP");
-		rBox.Deflate(FrameSize_1, false);
-
-		rBMP	= wxRect(0, 0, (int)rBox.Get_XRange(), (int)rBox.Get_YRange());
-		BMP.Create(rBMP.GetWidth(), rBMP.GetHeight());
-		dc.SelectObject(BMP);
-		dc.SetBackground(*wxWHITE_BRUSH);
-		dc.Clear();
-
-		if( bRoundScale )
-		{
-			Scale	= rWorld.Get_XRange() / (pPDF->Get_Page_To_Meter() * (double)rBMP.GetWidth());
-
-		//	if( Scale > 1000 )
-		//	{
-				Ratio	= ((ceil(Scale / 1000.)) / (Scale / 1000.) - 1);
-				rWorld.Inflate(Ratio * 100, true);
-		//	}
-		}
-
-		Scale	= rWorld.Get_XRange() / (pPDF->Get_Page_To_Meter() * rBMP.GetWidth());
-
-		Draw_Map(dc, rWorld, 1.0, rBMP, false);
-		dc.SelectObject(wxNullBitmap);
-		SG_Dir_Create(FilePath_Maps);
-		FileName	= SG_File_Make_Path(FilePath_Maps, wxString::Format(wxT("image_%03d"), Image_ID + 1), wxT("png"));
-		BMP.SaveFile(FileName.c_str(), wxBITMAP_TYPE_PNG);
-
-		pPDF->Draw_Image	(rBox, FileName);
-		pPDF->Draw_Graticule(rBox, rWorld, FrameSize_1);
-
-		//-------------------------------------------------
-		rBox	= pPDF->Layout_Get_Box("ICON");
-
-		if( FileName_Icon )
-		{
-			pPDF->Draw_Image(rBox, FileName_Icon);
-		}
-		else
-		{
-			pPDF->Draw_Rectangle(rBox);
-		}
-
-		//-------------------------------------------------
-		rBox	= pPDF->Layout_Get_Box("DIVISIONS");
-
-		pPDF->Draw_Rectangle(rBox);
-
-		if( pShapes )
-		{
-			CSG_Rect	rShapes(pShapes->Get_Extent());
-
-			rShapes.Inflate(5.0, true);
-			rBox.Deflate(FrameSize_2, false);
-
-			pPDF->Draw_Graticule(rBox, rShapes, FrameSize_2);
-			pPDF->Draw_Shapes(rBox, pShapes, PDF_STYLE_POLYGON_FILLSTROKE, SG_COLOR_GREEN, SG_COLOR_BLACK, 0, &rShapes);
-
-			if( Image_ID >= 0 && Image_ID < pShapes->Get_Count() )
-			{
-				pPDF->Draw_Shape(rBox, pShapes->Get_Shape(Image_ID), PDF_STYLE_POLYGON_FILLSTROKE, SG_COLOR_YELLOW, SG_COLOR_RED, 1, &rShapes);
-			}
-		}
-
-		//-------------------------------------------------
-		rBox	= pPDF->Layout_Get_Box("TITLE");
-
-		pPDF->Draw_Text(rBox.Get_XMin(), rBox.Get_YCenter(), Title, 20, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_CENTER|PDF_STYLE_TEXT_UNDERLINE);
-
-		//-------------------------------------------------
-		rBox	= pPDF->Layout_Get_Box("DESCRIPTION");
-
-		Description.Append(wxString::Format(wxT("%d. %s\n"), Image_ID + 2, LNG("Map")));
-
-		if( pShapes && Image_ID >= 0 && Image_ID < pShapes->Get_Count() )
-		{
-			switch( pShapes->Get_Type() )
-			{
-			default:
-				break;
-
-			case SHAPE_TYPE_Line:
-				d	= ((CSG_Shape_Line    *)pShapes->Get_Shape(Image_ID))->Get_Length();
-				e	= d > 1000.0 ? 1000.0    : 1.0;
-				s	= d > 1000.0 ? wxT("km") : wxT("m");
-				Description.Append(wxString::Format(wxT("%s: %f%s\n"), LNG("Length")	, d / e, s.c_str()));
-				break;
-
-			case SHAPE_TYPE_Polygon:
-				d	= ((CSG_Shape_Polygon *)pShapes->Get_Shape(Image_ID))->Get_Area();
-				e	= d > 1000000.0 ? 1000000.0  : (d > 10000.0 ? 10000.0   : 1.0);
-				s	= d > 1000000.0 ? wxT("km\xc2\xb2") : (d > 10000.0 ? wxT("ha") : wxT("m\xc2\xb2"));
-				Description.Append(wxString::Format(wxT("%s: %f%s\n"), LNG("Area")		, d / e, s.c_str()));
-
-				d	= ((CSG_Shape_Polygon *)pShapes->Get_Shape(Image_ID))->Get_Perimeter();
-				e	= d > 1000.0 ? 1000.0    : 1.0;
-				s	= d > 1000.0 ? wxT("km") : wxT("m");
-				Description.Append(wxString::Format(wxT("%s: %f%s\n"), LNG("Perimeter")	, d / e, s.c_str()));
-
-				Description.Append(wxString::Format(wxT("%s: %d\n")  , LNG("Parts")		, ((CSG_Shape_Polygon *)pShapes->Get_Shape(Image_ID))->Get_Part_Count()));
-				break;
-			}
-
-			if( iField >= 0 && iField < pShapes->Get_Field_Count() )
-			{
-				Description.Append(wxString::Format(wxT("%s: %s\n"), pShapes->Get_Field_Name(iField), pShapes->Get_Shape(Image_ID)->asString(iField)));
-			}
-		}
-
-		Description.Append(wxString::Format(wxT("%s 1:%s"), LNG("Scale"), SG_Get_String(Scale, 2).c_str()));
-
-		pPDF->Draw_Text(rBox.Get_XMin(), rBox.Get_YMax(), Description, 12, PDF_STYLE_TEXT_ALIGN_H_LEFT|PDF_STYLE_TEXT_ALIGN_V_TOP);
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_Map::SaveAs_Interactive_SVG(void)
-{
-	static CSG_Parameters	Parameters(NULL, LNG("[CAP] Save As Interactive SVG"), LNG(""), NULL, false);
-
-	//-----------------------------------------------------
-	if( Parameters.Get_Count() == 0 )
-	{
-		Parameters.Add_FilePath(
-			NULL	, "FILENAME"	, LNG("[FLD] SVG File"),
-			LNG(""),
-			wxString::Format(wxT("%s|*.svg|%s|*.*"),
-				LNG("SVG - Scalable Vector Graphics Files (*.svg)"),
-				LNG("All Files")
-			), NULL, true, false
-		);
-
-		Parameters.Add_Shapes(
-			NULL	, "SHAPES"		, LNG("[FLD] Index Layer"),
-			LNG(""),
-			PARAMETER_INPUT_OPTIONAL
-		);
-	}
-
-	//-----------------------------------------------------
-	if( DLG_Parameters(&Parameters) )
-	{
-		CSG_String				FileName;
-		CSG_Shapes					*pIndexLayer;
-		CSVG_Interactive_Map	SVG;
-
-		MSG_General_Add(wxString::Format(wxT("%s..."), LNG("[MSG] Save as Interactive SVG")), true, true);
-
-		pIndexLayer		= Parameters("SHAPES")		->asShapes();
-		FileName		= Parameters("FILENAME")	->asString();
-
-		SVG.Create_From_Map(this, pIndexLayer, FileName);
-
-		MSG_General_Add(LNG("[MSG] okay"), false, false, SG_UI_MSG_STYLE_SUCCESS);
-	}
-}
-
 
 ///////////////////////////////////////////////////////////
 //														 //
diff --git a/src/saga_core/saga_gui/wksp_map.h b/src/saga_core/saga_gui/wksp_map.h
index b91fa29..c810f2e 100644
--- a/src/saga_core/saga_gui/wksp_map.h
+++ b/src/saga_core/saga_gui/wksp_map.h
@@ -184,10 +184,6 @@ public:
 	void						SaveAs_Image_Clipboard	(int nx, int ny, int frame);
 	void						SaveAs_Image_Clipboard	(bool bLegend = false);
 	void						SaveAs_Image_On_Change	(void);
-	void						SaveAs_PDF_Indexed		(void);
-	void						SaveAs_Interactive_SVG	(void);
-
-	void						Draw_PDF				(class CSG_Doc_PDF *pPDF, const wxChar *FilePath_Maps, int Image_ID, const wxChar *Icon_File, const wxChar *sTitle, CSG_Rect rWorld, bool bRoundScale, int iField, CSG_Shapes *m_pDivisions);
 
 	void						Draw_Map				(wxDC &dc, double Zoom, const wxRect &rClient, bool bEdit, int Background = SG_COLOR_WHITE);
 	void						Draw_Map				(wxDC &dc, const CSG_Rect &rWorld, double Zoom, const wxRect &rClient, bool bEdit, int Background = SG_COLOR_WHITE);
diff --git a/src/saga_core/saga_gui/wksp_map_buttons.cpp b/src/saga_core/saga_gui/wksp_map_buttons.cpp
index 81c666f..8f5fc4d 100644
--- a/src/saga_core/saga_gui/wksp_map_buttons.cpp
+++ b/src/saga_core/saga_gui/wksp_map_buttons.cpp
@@ -58,6 +58,8 @@
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
+#include <wx/tooltip.h>
+
 #include <saga_api/saga_api.h>
 
 #include "res_controls.h"
@@ -155,7 +157,10 @@ void CWKSP_Map_Button::On_Paint(wxPaintEvent &event)
 	{
 		if( g_pMaps->Exists(m_pMap) )
 		{
-			SetToolTip(m_pMap->Get_Name());
+			if( !GetToolTip() || GetToolTip()->GetTip().Cmp(m_pMap->Get_Name()) )
+			{
+				SetToolTip(m_pMap->Get_Name());
+			}
 
 			dc.DrawBitmap(m_pMap->Get_Thumbnail(r.GetWidth() - 1, r.GetHeight() - 1), r.GetLeft(), r.GetTop(), true);
 
diff --git a/src/saga_core/saga_gui/wksp_map_dc.cpp b/src/saga_core/saga_gui/wksp_map_dc.cpp
index e322245..867acd2 100644
--- a/src/saga_core/saga_gui/wksp_map_dc.cpp
+++ b/src/saga_core/saga_gui/wksp_map_dc.cpp
@@ -78,54 +78,47 @@ CWKSP_Map_DC::CWKSP_Map_DC(const CSG_Rect &rWorld, const wxRect &rDC, double Sca
 	m_rDC			= rDC;
 	m_Scale			= Scale;
 
-	//-----------------------------------------------------
-	if( m_rWorld.Get_XRange() == 0.0 )
-	{
-		m_rWorld.m_rect.xMin	-= 1.0;
-		m_rWorld.m_rect.xMax	+= 1.0;
-	}
+	m_img_rgb		= NULL;
+	m_img_dc_rgb	= NULL;
 
-	if( m_rWorld.Get_YRange() == 0.0 )
+	m_Mask_Red		= 1;
+	m_Mask_Green	= 2;
+	m_Mask_Blue		= 3;
+
+	//-----------------------------------------------------
+	if( m_rWorld.Get_XRange() == 0.0 || m_rWorld.Get_YRange() == 0.0 )
 	{
-		m_rWorld.m_rect.yMin	-= 1.0;
-		m_rWorld.m_rect.yMax	+= 1.0;
+		m_rWorld.Inflate(m_rWorld.Get_XRange() ? 0.0 : 1.0, m_rWorld.Get_YRange() ? 0.0 : 1.0, false);
 	}
 
 	//-----------------------------------------------------
-	double	d		= (double)m_rDC.GetWidth() / (double)m_rDC.GetHeight();
+	// ensure cellsize in x-/y-direction are identical...
+	double	dxdyDC		= (double)m_rDC.GetWidth() / (double)m_rDC.GetHeight();
+	double	dxdyWorld	= m_rWorld.Get_XRange() / m_rWorld.Get_YRange();
 
-	if( d > m_rWorld.Get_XRange() / m_rWorld.Get_YRange() )
+	if( dxdyDC > dxdyWorld )
 	{
-		d	= (m_rWorld.Get_YRange() * d - m_rWorld.Get_XRange()) / 2.0;
-		m_rWorld.Inflate(d, 0.0, false);
+		m_rWorld.Inflate(0.5 * (m_rWorld.Get_YRange() * dxdyDC - m_rWorld.Get_XRange()), 0.0, false);
 	}
-	else if( d < m_rWorld.Get_XRange() / m_rWorld.Get_YRange() )
+	else if( dxdyDC < dxdyWorld )
 	{
-		d	= (m_rWorld.Get_XRange() / d - m_rWorld.Get_YRange()) / 2.0;
-		m_rWorld.Inflate(0.0, d, false);
+		m_rWorld.Inflate(0.0, 0.5 * (m_rWorld.Get_XRange() / dxdyDC - m_rWorld.Get_YRange()), false);
 	}
 
 	//-----------------------------------------------------
 	m_World2DC		= (double)m_rDC.GetWidth() / m_rWorld.Get_XRange();
-	m_DC2World		= m_rWorld.Get_XRange() / (double)m_rDC.GetWidth();
+	m_DC2World		= 1.0 / m_World2DC;
 
+	//-----------------------------------------------------
 	dc_BMP.Create(m_rDC.GetWidth(), m_rDC.GetHeight());
 	dc.SelectObject(dc_BMP);
 	dc.SetBackground(wxBrush(Get_Color_asWX(Background), wxSOLID));
 	dc.Clear();
-
-	m_img_rgb		= NULL;
-	m_img_dc_rgb	= NULL;
-
-	m_Mask_Red		= 1;
-	m_Mask_Green	= 2;
-	m_Mask_Blue		= 3;
 }
 
 //---------------------------------------------------------
 CWKSP_Map_DC::~CWKSP_Map_DC(void)
-{
-}
+{}
 
 
 ///////////////////////////////////////////////////////////
diff --git a/src/saga_core/saga_gui/wksp_map_dc.h b/src/saga_core/saga_gui/wksp_map_dc.h
index 75a02a3..e46c6fd 100644
--- a/src/saga_core/saga_gui/wksp_map_dc.h
+++ b/src/saga_core/saga_gui/wksp_map_dc.h
@@ -114,12 +114,34 @@ public:
 
 
 	//-----------------------------------------------------
-	double						xWorld2DC				(double x)		{	return(                     (int)(0.5 + (x - m_rWorld.Get_XMin()) * m_World2DC) );	}
-	double						yWorld2DC				(double y)		{	return( m_rDC.GetHeight() - (int)(0.5 + (y - m_rWorld.Get_YMin()) * m_World2DC) );	}
+	double						xWorld2DC				(double x, bool bRound = true)
+	{
+		x	=  (x - m_rWorld.Get_XMin()) * m_World2DC;
+
+		return( bRound ? (int)(0.5 + x) : x );
+	}
+
+	double						yWorld2DC				(double y, bool bRound = true)
+	{
+		y	= -(y - m_rWorld.Get_YMin()) * m_World2DC + (m_rDC.GetHeight());
+
+		return( bRound ? (int)(0.5 + y) : y );
+	}
 
 	TSG_Point_Int				World2DC				(TSG_Point p)	{	TSG_Point_Int _p; _p.x = (int)xWorld2DC(p.x), _p.y = (int)yWorld2DC(p.y); return( _p );	}
 
 	//-----------------------------------------------------
+	double						xDC2World				(double x)
+	{
+		return( m_rWorld.Get_XMin() + x * m_DC2World );
+	}
+
+	double						yDC2World				(double y)
+	{
+		return( m_rWorld.Get_YMin() + (m_rDC.GetHeight() - y) * m_DC2World );
+	}
+
+	//-----------------------------------------------------
 	void						Set_Font				(wxFont &Font);
 
 	//-----------------------------------------------------
diff --git a/src/saga_core/saga_gui/wksp_module.cpp b/src/saga_core/saga_gui/wksp_module.cpp
index a69f807..21a80b4 100644
--- a/src/saga_core/saga_gui/wksp_module.cpp
+++ b/src/saga_core/saga_gui/wksp_module.cpp
@@ -300,8 +300,6 @@ wxString CWKSP_Module::Get_Description(void)
 		s.Append(wxString::Format(wxT("(*) <i>%s</i>"), LNG("optional")));
 	}
 
-	s.Replace(wxT("\n"), wxT("<br>"));
-
 	return( s );
 }
 
@@ -699,7 +697,7 @@ bool CWKSP_Module::is_Executing(void)
 							MSG_Execution_Add(s, true, true);
 
 #define MSG_ADD2(b, s1, s2)	MSG_General_Add  (b ? s1 : s2, true, true, b ? SG_UI_MSG_STYLE_SUCCESS : SG_UI_MSG_STYLE_FAILURE);\
-							MSG_Execution_Add(b ? s1 : s2, true, true, b ? SG_UI_MSG_STYLE_SUCCESS : SG_UI_MSG_STYLE_FAILURE);
+								MSG_Execution_Add(b ? s1 : s2, true, true, b ? SG_UI_MSG_STYLE_SUCCESS : SG_UI_MSG_STYLE_FAILURE);
 
 //---------------------------------------------------------
 bool CWKSP_Module::Execute(bool bDialog)
@@ -713,7 +711,7 @@ bool CWKSP_Module::Execute(bool bDialog)
 		{
 			if( g_pModule->is_Executing() )
 			{
-				if( DLG_Message_Confirm(LNG("[MSG] Shall execution be stopped?"), LNG("[CAP] Module Execution")) )
+				if( !bDialog || DLG_Message_Confirm(LNG("[MSG] Shall execution be stopped?"), LNG("[CAP] Module Execution")) )
 				{
 					PROCESS_Set_Okay(false);
 				}
diff --git a/src/saga_core/saga_gui/wksp_module_manager.cpp b/src/saga_core/saga_gui/wksp_module_manager.cpp
index 43dda47..534be27 100644
--- a/src/saga_core/saga_gui/wksp_module_manager.cpp
+++ b/src/saga_core/saga_gui/wksp_module_manager.cpp
@@ -124,6 +124,24 @@ CWKSP_Module_Manager::CWKSP_Module_Manager(void)
 		LNG(""),
 		PARAMETER_TYPE_Int	, 0, 0, true
 	);
+
+	m_Parameters.Add_FilePath(
+		NULL	, "CRS_FILE_SRS", LNG("CRS Database"),
+		LNG("Database with Coordinate Reference System (CRS) definitions. You have to restart SAGA to make changes take affect!"),
+		CSG_String::Format(SG_T("%s|*.srs|%s|*.*"),
+			LNG("Spatial Reference System Files (*.srs)"),
+			LNG("All Files")
+		)
+	);
+
+	m_Parameters.Add_FilePath(
+		NULL	, "CRS_FILE_DIC", LNG("CRS Dictionary"),
+		LNG("Dictionary for Proj.4/OGC WKT translations. You have to restart SAGA to make changes take affect!"),
+		CSG_String::Format(SG_T("%s|*.dic|%s|*.*"),
+			LNG("Dictionary Files (*.dic)"),
+			LNG("All Files")
+		)
+	);
 }
 
 //---------------------------------------------------------
@@ -348,6 +366,16 @@ void CWKSP_Module_Manager::_Config_Read(void)
 		m_Parameters("PROC_FREQ")	->Set_Value((int)lValue);
 	}
 
+	if( CONFIG_Read(wxT("/MODULES"), wxT("CRS_FILE_SRS"), sValue) )
+	{
+		m_Parameters("CRS_FILE_SRS")->Set_Value(sValue);
+	}
+
+	if( CONFIG_Read(wxT("/MODULES"), wxT("CRS_FILE_DIC"), sValue) )
+	{
+		m_Parameters("CRS_FILE_DIC")->Set_Value(sValue);
+	}
+
 	for(int i=0; CONFIG_Read(CFG_LIBS, wxString::Format(CFG_LIBF, i), sValue); i++)
 	{
 		Open(sValue);
@@ -359,9 +387,11 @@ void CWKSP_Module_Manager::_Config_Read(void)
 //---------------------------------------------------------
 void CWKSP_Module_Manager::_Config_Write(void)
 {
-	CONFIG_Write(wxT("/MODULES")	, wxT("BEEP")		,		m_Parameters("BEEP")		->asBool());
-	CONFIG_Write(wxT("/MODULES")	, wxT("START_LOGO")	, (long)m_Parameters("START_LOGO")	->asInt());
-	CONFIG_Write(wxT("/MODULES")	, wxT("PROC_FREQ")	, (long)m_Parameters("PROC_FREQ")	->asInt());
+	CONFIG_Write(wxT("/MODULES"), wxT("BEEP")		 ,       m_Parameters("BEEP")        ->asBool());
+	CONFIG_Write(wxT("/MODULES"), wxT("START_LOGO")	 , (long)m_Parameters("START_LOGO")  ->asInt());
+	CONFIG_Write(wxT("/MODULES"), wxT("PROC_FREQ")	 , (long)m_Parameters("PROC_FREQ")   ->asInt());
+	CONFIG_Write(wxT("/MODULES"), wxT("CRS_FILE_SRS"),       m_Parameters("CRS_FILE_SRS")->asString());
+	CONFIG_Write(wxT("/MODULES"), wxT("CRS_FILE_DIC"),       m_Parameters("CRS_FILE_DIC")->asString());
 
 	CONFIG_Delete(CFG_LIBS);
 
diff --git a/src/saga_core/saga_gui/wksp_pointcloud.cpp b/src/saga_core/saga_gui/wksp_pointcloud.cpp
index cd73b8a..3134b57 100644
--- a/src/saga_core/saga_gui/wksp_pointcloud.cpp
+++ b/src/saga_core/saga_gui/wksp_pointcloud.cpp
@@ -57,9 +57,13 @@
 
 //---------------------------------------------------------
 #include "res_commands.h"
+#include "res_dialogs.h"
 
 #include "helper.h"
 
+#include "active.h"
+#include "active_attributes.h"
+
 #include "wksp_map_control.h"
 
 #include "wksp_layer_classify.h"
@@ -106,10 +110,8 @@ CWKSP_PointCloud::~CWKSP_PointCloud(void)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-wxString CWKSP_PointCloud::Get_Name(void)
-{
-	return( wxString::Format(wxT("%02d. %s"), 1 + Get_ID(), m_pPointCloud->Get_Name()) );
-}
+#define DESC_ADD_STR(label, value)	s.Append(wxString::Format(wxT("<tr><td valign=\"top\">%s</td><td valign=\"top\">%s</td></tr>"), label, value))
+#define DESC_ADD_INT(label, value)	s.Append(wxString::Format(wxT("<tr><td valign=\"top\">%s</td><td valign=\"top\">%d</td></tr>"), label, value))
 
 //---------------------------------------------------------
 wxString CWKSP_PointCloud::Get_Description(void)
@@ -117,58 +119,23 @@ wxString CWKSP_PointCloud::Get_Description(void)
 	wxString	s;
 
 	//-----------------------------------------------------
-	s.Append(wxString::Format(wxT("<b>%s</b><table border=\"0\">"),
-		LNG("[CAP] Point Cloud")
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Name")					, m_pPointCloud->Get_Name()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] File")					, m_pPointCloud->Get_File_Name()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Projection")				, m_pPointCloud->Get_Projection().Get_Name().c_str()
-	));
+	s	+= wxString::Format(wxT("<b>%s</b>"), LNG("[CAP] Point Cloud"));
 
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%d</td></tr>"),
-		LNG("[CAP] Number of Points")		, m_pPointCloud->Get_Count()
-	));
+	s	+= wxT("<table border=\"0\">");
 
-	s.Append(wxT("</table>"));
+	DESC_ADD_STR(LNG("[CAP] Name")				, m_pPointCloud->Get_Name());
+	DESC_ADD_STR(LNG("[CAP] File")				, m_pPointCloud->Get_File_Name());
+	DESC_ADD_STR(LNG("[CAP] Projection")		, m_pPointCloud->Get_Projection().Get_Description().c_str());
+	DESC_ADD_INT(LNG("[CAP] Number of Points")	, m_pPointCloud->Get_Count());
 
-	//-----------------------------------------------------
-	s.Append(wxString::Format(wxT("<table border=\"1\"><tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th>"),
-		LNG("[CAP] Field"),
-		LNG("[CAP] Name"),
-		LNG("[CAP] Type"),
-		LNG("[CAP] Minimum"),
-		LNG("[CAP] Maximum"),
-		LNG("[CAP] Mean"),
-		LNG("[CAP] Standard Deviation")
-	));
-
-	for(int i=0; i<m_pPointCloud->Get_Field_Count(); i++)
-	{
-		s.Append(wxString::Format(wxT("<tr><td>%d</td><td>%s</td><td>%s</td><td>%f</td><td>%f</td><td>%f</td><td>%f</td></tr>"),
-			i + 1,
-			m_pPointCloud->Get_Field_Name(i),
-			SG_Data_Type_Get_Name(m_pPointCloud->Get_Field_Type(i)),
-			m_pPointCloud->Get_Minimum(i),
-			m_pPointCloud->Get_Maximum(i),
-			m_pPointCloud->Get_Mean(i),
-			m_pPointCloud->Get_StdDev(i)
-		));
-	}
+	s	+= wxT("</table>");
 
-	s.Append(wxT("</table>"));
+	s	+= Get_TableInfo_asHTML(m_pPointCloud);
 
 	//-----------------------------------------------------
-//	s.Append(wxString::Format(wxT("<hr><b>%s</b><font size=\"-1\">"), LNG("[CAP] Data History")));
-//	s.Append(m_pPointCloud->Get_History().Get_HTML());
-//	s.Append(wxString::Format(wxT("</font")));
+//	s	+= wxString::Format(wxT("<hr><b>%s</b><font size=\"-1\">"), LNG("[CAP] Data History"));
+//	s	+= m_pPointCloud->Get_History().Get_HTML();
+//	s	+= wxString::Format(wxT("</font"));
 
 	//-----------------------------------------------------
 	return( s );
@@ -244,6 +211,19 @@ bool CWKSP_PointCloud::On_Command(int Cmd_ID)
 			m_pPointCloud->Get_Mean(m_Color_Field) + 2.0 * m_pPointCloud->Get_StdDev(m_Color_Field)
 		);
 		break;
+
+	case ID_CMD_SHAPES_EDIT_SEL_INVERT:
+		m_pPointCloud->Inv_Selection();
+		Update_Views(false);
+		break;
+
+	case ID_CMD_SHAPES_EDIT_DEL_SHAPE:
+		if( m_pPointCloud->Get_Selection_Count() > 0 && DLG_Message_Confirm(LNG("[DLG] Delete selected point(s)."), LNG("[CAP] Edit Point Cloud")) )
+		{
+			m_pPointCloud->Del_Selection();
+			Update_Views(false);
+		}
+		break;
 	}
 
 	return( true );
@@ -452,24 +432,82 @@ bool CWKSP_PointCloud::asImage(CSG_Grid *pImage)
 //														 //
 //														 //
 ///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+wxMenu * CWKSP_PointCloud::On_Edit_Get_Menu(void)
+{
+	wxMenu	*pMenu;
+
+	pMenu	= new wxMenu;
+
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_EDIT_DEL_SHAPE);
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_EDIT_SEL_INVERT);
+
+	return( pMenu );
+}
 
 //---------------------------------------------------------
 bool CWKSP_PointCloud::On_Edit_On_Mouse_Up(CSG_Point Point, double ClientToWorld, int Key)
 {
-	CSG_Rect	rWorld(m_Edit_Mouse_Down, Point);
-
-	if( rWorld.Get_XRange() == 0.0 && rWorld.Get_YRange() == 0.0 )
-	{
-		rWorld.Inflate(2.0 * ClientToWorld, false);
-	}
+	if( Key & MODULE_INTERACTIVE_KEY_RIGHT )
+	{
+		return( false );
+	}
+	else
+	{
+		CSG_Rect	rWorld(m_Edit_Mouse_Down, Point);
+
+		if( rWorld.Get_XRange() == 0.0 && rWorld.Get_YRange() == 0.0 )
+		{
+			rWorld.Inflate(2.0 * ClientToWorld, false);
+		}
 
+		g_pACTIVE->Get_Attributes()->Set_Attributes();
+
+		m_pPointCloud->Select(rWorld, (Key & MODULE_INTERACTIVE_KEY_CTRL) != 0);
+
+		//-----------------------------------------------------
+		m_Edit_Attributes.Del_Records();
+
+		CSG_Table_Record	*pRecord	= m_pPointCloud->Get_Selection();
+
+		if( pRecord != NULL )
+		{
+			for(int i=0; i<m_pPointCloud->Get_Field_Count(); i++)
+			{
+				CSG_Table_Record	*pAttribute	= m_Edit_Attributes.Add_Record();
+				pAttribute->Set_Value(0, pRecord->Get_Table()->Get_Field_Name(i));
+				pAttribute->Set_Value(1, pRecord->asString(i));
+			}
+		}
+
+		//-----------------------------------------------------
+		g_pACTIVE->Get_Attributes()->Set_Attributes();
+
+		Update_Views(true);
+	}
+
 	return( true );
 }
 
 //---------------------------------------------------------
 bool CWKSP_PointCloud::On_Edit_Set_Attributes(void)
 {
-	return( true );
+	CSG_Table_Record	*pRecord;
+
+	if( (pRecord = m_pPointCloud->Get_Selection()) != NULL )
+	{
+		for(int i=0; i<m_Edit_Attributes.Get_Record_Count(); i++)
+		{
+			pRecord->Set_Value(i, m_Edit_Attributes.Get_Record(i)->asString(1));
+		}
+
+		Update_Views(true);
+
+		return( true );
+	}
+
+	return( false );
 }
 
 //---------------------------------------------------------
@@ -580,13 +618,22 @@ void CWKSP_PointCloud::_Draw_Points(CWKSP_Map_DC &dc_Map)
 
 		if( dc_Map.m_rWorld.Contains(Point.x, Point.y) )
 		{
-			int		Color;
 			int		x	= (int)dc_Map.xWorld2DC(Point.x);
 			int		y	= (int)dc_Map.yWorld2DC(Point.y);
 
-			m_pClassify->Get_Class_Color_byValue(m_pPointCloud->Get_Value(i, m_Color_Field), Color);
+			if( m_pPointCloud->is_Selected(i) )
+			{
+				_Draw_Point(dc_Map, x, y, Point.z, SG_COLOR_RED   , m_PointSize + 2);
+				_Draw_Point(dc_Map, x, y, Point.z, SG_COLOR_YELLOW, m_PointSize);
+			}
+			else
+			{
+				int		Color;
+
+				m_pClassify->Get_Class_Color_byValue(m_pPointCloud->Get_Value(i, m_Color_Field), Color);
 
-			_Draw_Point(dc_Map, x, y, Point.z, Color, m_PointSize);
+				_Draw_Point(dc_Map, x, y, Point.z, Color, m_PointSize);
+			}
 		}
 	}
 }
diff --git a/src/saga_core/saga_gui/wksp_pointcloud.h b/src/saga_core/saga_gui/wksp_pointcloud.h
index 2ec15ba..51db4a1 100644
--- a/src/saga_core/saga_gui/wksp_pointcloud.h
+++ b/src/saga_core/saga_gui/wksp_pointcloud.h
@@ -1,140 +1,140 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                  WKSP_PointCloud.h                    //
-//                                                       //
-//          Copyright (C) 2009 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Hamburg                  //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_PointCloud_H
-#define _HEADER_INCLUDED__SAGA_GUI__WKSP_PointCloud_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "wksp_layer.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CWKSP_PointCloud : public CWKSP_Layer
-{
-public:
-	CWKSP_PointCloud(CSG_PointCloud *pPointCloud);
-	virtual ~CWKSP_PointCloud(void);
-
-	virtual TWKSP_Item			Get_Type				(void)	{	return( WKSP_ITEM_PointCloud );	}
-
-	virtual wxString			Get_Name				(void);
-	virtual wxString			Get_Description			(void);
-
-	virtual wxMenu *			Get_Menu				(void);
-
-	virtual bool				On_Command				(int Cmd_ID);
-	virtual bool				On_Command_UI			(wxUpdateUIEvent &event);
-
-	CSG_PointCloud *			Get_PointCloud			(void)	{	return( m_pPointCloud );	}
-
-	virtual wxString			Get_Value				(CSG_Point ptWorld, double Epsilon);
-	virtual double				Get_Value_Range			(void);
-
-	bool						asImage					(CSG_Grid *pImage);
-
-
-protected:
-
-	int							m_Color_Field, m_PointSize, m_Aggregation;
-
-	wxColour					m_Color_Pen;
-
-	CSG_PointCloud				*m_pPointCloud;
-
-	CSG_Grid					m_Z, m_N;
-
-
-	virtual void				On_Create_Parameters	(void);
-	virtual void				On_DataObject_Changed	(void);
-	virtual void				On_Parameters_Changed	(void);
-	virtual int					On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
-
-	virtual bool				On_Edit_On_Mouse_Up		(CSG_Point Point, double ClientToWorld, int Key);
-	virtual bool				On_Edit_Set_Attributes	(void);
-	virtual TSG_Rect			On_Edit_Get_Extent		(void);
-
-	virtual void				On_Draw					(CWKSP_Map_DC &dc_Map, bool bEdit);
-
-	void						_Draw_Point				(CWKSP_Map_DC &dc_Map, int x, int y, double z, int Color);
-	void						_Draw_Point				(CWKSP_Map_DC &dc_Map, int x, int y, double z, int Color, int Radius);
-	void						_Draw_Points			(CWKSP_Map_DC &dc_Map);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_PointCloud_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                  WKSP_PointCloud.h                    //
+//                                                       //
+//          Copyright (C) 2009 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_PointCloud_H
+#define _HEADER_INCLUDED__SAGA_GUI__WKSP_PointCloud_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "wksp_layer.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CWKSP_PointCloud : public CWKSP_Layer
+{
+public:
+	CWKSP_PointCloud(CSG_PointCloud *pPointCloud);
+	virtual ~CWKSP_PointCloud(void);
+
+	virtual TWKSP_Item			Get_Type				(void)	{	return( WKSP_ITEM_PointCloud );	}
+
+	virtual wxString			Get_Description			(void);
+
+	virtual wxMenu *			Get_Menu				(void);
+
+	virtual bool				On_Command				(int Cmd_ID);
+	virtual bool				On_Command_UI			(wxUpdateUIEvent &event);
+
+	CSG_PointCloud *			Get_PointCloud			(void)	{	return( m_pPointCloud );	}
+
+	virtual wxString			Get_Value				(CSG_Point ptWorld, double Epsilon);
+	virtual double				Get_Value_Range			(void);
+
+	bool						asImage					(CSG_Grid *pImage);
+
+
+protected:
+
+	int							m_Color_Field, m_PointSize, m_Aggregation;
+
+	wxColour					m_Color_Pen;
+
+	CSG_PointCloud				*m_pPointCloud;
+
+	CSG_Grid					m_Z, m_N;
+
+
+	virtual void				On_Create_Parameters	(void);
+	virtual void				On_DataObject_Changed	(void);
+	virtual void				On_Parameters_Changed	(void);
+	virtual int					On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+	virtual wxMenu *			On_Edit_Get_Menu		(void);
+	virtual bool				On_Edit_On_Mouse_Up		(CSG_Point Point, double ClientToWorld, int Key);
+	virtual bool				On_Edit_Set_Attributes	(void);
+	virtual TSG_Rect			On_Edit_Get_Extent		(void);
+
+	virtual void				On_Draw					(CWKSP_Map_DC &dc_Map, bool bEdit);
+
+	void						_Draw_Point				(CWKSP_Map_DC &dc_Map, int x, int y, double z, int Color);
+	void						_Draw_Point				(CWKSP_Map_DC &dc_Map, int x, int y, double z, int Color, int Radius);
+	void						_Draw_Points			(CWKSP_Map_DC &dc_Map);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_PointCloud_H
diff --git a/src/saga_core/saga_gui/wksp_shapes.cpp b/src/saga_core/saga_gui/wksp_shapes.cpp
index 75e15dd..23ffa27 100644
--- a/src/saga_core/saga_gui/wksp_shapes.cpp
+++ b/src/saga_core/saga_gui/wksp_shapes.cpp
@@ -1,1239 +1,1230 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                   WKSP_Shapes.cpp                     //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "res_commands.h"
-#include "res_dialogs.h"
-
-#include "helper.h"
-
-#include "wksp_layer_classify.h"
-
-#include "wksp_shapes.h"
-#include "wksp_table.h"
-
-#include "view_scatterplot.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_Shapes::CWKSP_Shapes(CSG_Shapes *pShapes)
-	: CWKSP_Layer(pShapes)
-{
-	m_pShapes		= pShapes;
-	m_pTable		= new CWKSP_Table(m_pShapes, this);
-
-	m_Edit_Shapes.Create(m_pShapes->Get_Type());
-	m_Edit_pShape	= NULL;
-
-	m_Edit_Attributes.Destroy();
-	m_Edit_Attributes.Add_Field(LNG("[FLD] Name") , SG_DATATYPE_String);
-	m_Edit_Attributes.Add_Field(LNG("[FLD] Value"), SG_DATATYPE_String);
-}
-
-//---------------------------------------------------------
-CWKSP_Shapes::~CWKSP_Shapes(void)
-{
-	delete(m_pTable);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-wxString CWKSP_Shapes::Get_Name(void)
-{
-	return( wxString::Format(wxT("%02d. %s"), 1 + Get_ID(), m_pShapes->Get_Name()) );
-}
-
-//---------------------------------------------------------
-wxString CWKSP_Shapes::Get_Description(void)
-{
-	wxString	s;
-
-	//-----------------------------------------------------
-	s.Append(wxString::Format(wxT("<b>%s</b><table border=\"0\">"),
-		LNG("[CAP] Shapes")
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Name")					, m_pShapes->Get_Name()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] File")					, m_pShapes->Get_File_Name()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Projection")				, m_pShapes->Get_Projection().Get_Name().c_str()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Modified")				, m_pShapes->is_Modified() ? LNG("[VAL] yes") : LNG("[VAL] no")
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Type")					, SG_Get_ShapeType_Name(m_pShapes->Get_Type())
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%d</td></tr>"),
-		LNG("[CAP] Number Of Shapes")		, m_pShapes->Get_Count()
-	));
-
-	s.Append(wxT("</table>"));
-
-	//-----------------------------------------------------
-	s.Append(wxString::Format(wxT("<hr><b>%s</b>"), LNG("[CAP] Table Description")));
-	s.Append(Get_TableInfo_asHTML(m_pShapes));
-
-	//-----------------------------------------------------
-//	s.Append(wxString::Format(wxT("<hr><b>%s</b><font size=\"-1\">"), LNG("[CAP] Data History")));
-//	s.Append(m_pShapes->Get_History().Get_HTML());
-//	s.Append(wxString::Format(wxT("</font")));
-
-	return( s );
-}
-
-//---------------------------------------------------------
-wxMenu * CWKSP_Shapes::Get_Menu(void)
-{
-	wxMenu	*pMenu;
-
-	pMenu	= new wxMenu(m_pShapes->Get_Name());
-
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_CLOSE);
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_SAVE);
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_SAVEAS);
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_SHOW);
-	CMD_Menu_Add_Item(pMenu,  true, ID_CMD_SHAPES_HISTOGRAM);
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_SET_LUT);
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_SETTINGS_COPY);
-
-	pMenu->AppendSeparator();
-
-	wxMenu	*pTable	= new wxMenu(LNG("[MNU] Table"));
-	CMD_Menu_Add_Item(pTable,  true, ID_CMD_TABLES_SHOW);
-	CMD_Menu_Add_Item(pTable,  true, ID_CMD_TABLES_DIAGRAM);
-	CMD_Menu_Add_Item(pTable, false, ID_CMD_TABLES_SCATTERPLOT);
-	pMenu->Append(ID_CMD_WKSP_FIRST, LNG("[MNU] Attributes"), pTable);
-
-	pMenu->Append(ID_CMD_WKSP_FIRST, LNG("[MNU] Edit"), Edit_Get_Menu());
-
-	return( pMenu );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Shapes::On_Command(int Cmd_ID)
-{
-	switch( Cmd_ID )
-	{
-	default:
-		return( CWKSP_Layer::On_Command(Cmd_ID) );
-
-	case ID_CMD_SHAPES_SET_LUT:
-		_LUT_Create();
-		break;
-
-	case ID_CMD_SHAPES_EDIT_SHAPE:
-		_Edit_Shape();
-		break;
-
-	case ID_CMD_SHAPES_EDIT_ADD_SHAPE:
-		_Edit_Shape_Add();
-		break;
-
-	case ID_CMD_SHAPES_EDIT_DEL_SHAPE:
-		_Edit_Shape_Del();
-		break;
-
-	case ID_CMD_SHAPES_EDIT_ADD_PART:
-		_Edit_Part_Add();
-		break;
-
-	case ID_CMD_SHAPES_EDIT_DEL_PART:
-		_Edit_Part_Del();
-		break;
-
-	case ID_CMD_SHAPES_EDIT_DEL_POINT:
-		_Edit_Point_Del();
-		break;
-
-	case ID_CMD_SHAPES_EDIT_SEL_INVERT:
-		m_pShapes->Inv_Selection();
-		Update_Views(false);
-		break;
-
-	case ID_CMD_TABLES_SHOW:
-		m_pTable->Toggle_View();
-		break;
-
-	case ID_CMD_TABLES_DIAGRAM:
-		m_pTable->Toggle_Diagram();
-		break;
-
-	case ID_CMD_TABLES_SCATTERPLOT:
-		Add_ScatterPlot(Get_Table()->Get_Table());
-		break;
-
-	case ID_CMD_SHAPES_HISTOGRAM:
-		Histogram_Toggle();
-		break;
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Shapes::On_Command_UI(wxUpdateUIEvent &event)
-{
-	switch( event.GetId() )
-	{
-	default:
-		return( CWKSP_Layer::On_Command_UI(event) );
-
-	case ID_CMD_SHAPES_EDIT_SHAPE:
-		event.Enable(m_pShapes->Get_Selection_Count() > 0 || m_Edit_pShape != NULL);
-		event.Check(m_Edit_pShape != NULL);
-		break;
-
-	case ID_CMD_SHAPES_EDIT_ADD_SHAPE:
-		event.Enable(m_Edit_pShape == NULL);
-		break;
-
-	case ID_CMD_SHAPES_EDIT_DEL_SHAPE:
-		event.Enable(m_pShapes->Get_Selection_Count() > 0 && m_Edit_pShape == NULL);
-		break;
-
-	case ID_CMD_SHAPES_EDIT_ADD_PART:
-		event.Enable(m_Edit_pShape != NULL);
-		break;
-
-	case ID_CMD_SHAPES_EDIT_DEL_PART:
-		event.Enable(m_Edit_pShape != NULL && m_Edit_iPart >= 0);
-		break;
-
-	case ID_CMD_SHAPES_EDIT_DEL_POINT:
-		event.Enable(m_Edit_pShape != NULL && m_Edit_iPart >= 0 && m_Edit_iPoint >= 0);
-		break;
-
-	case ID_CMD_SHAPES_EDIT_SEL_INVERT:
-		event.Enable(m_Edit_pShape == NULL);
-		break;
-
-	case ID_CMD_TABLES_SHOW:
-		event.Check(m_pTable->Get_View() != NULL);
-		break;
-
-	case ID_CMD_TABLES_DIAGRAM:
-		event.Check(m_pTable->Get_Diagram() != NULL);
-		break;
-
-	case ID_CMD_SHAPES_HISTOGRAM:
-		event.Check(m_pHistogram != NULL);
-		break;
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_Shapes::On_Create_Parameters(void)
-{
-	//-----------------------------------------------------
-	// General...
-
-	_AttributeList_Add(
-		m_Parameters("NODE_COLORS")		, "COLORS_ATTRIB"			, LNG("[CAP] Attribute"),
-		LNG("")
-	);
-
-
-	//-----------------------------------------------------
-	// Display...
-
-	m_Parameters.Add_Parameters(
-		m_Parameters("NODE_DISPLAY")	, "DISPLAY_CHART"			, LNG("[CAP] Chart"),
-		LNG("")
-	);
-
-	//-----------------------------------------------------
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_DISPLAY")	, "DISPLAY_TRANSPARENCY"	, LNG("[CAP] Transparency [%]"),
-		LNG(""),
-		PARAMETER_TYPE_Double, 0.0, 0.0, true, 100.0, true
-	);
-
-
-#ifdef USE_HTMLINFO
-	//-----------------------------------------------------
-	// HTML Extra info
-
-	m_Parameters.Add_Node(
-		NULL							, "NODE_EXTRAINFO"			, LNG("[CAP] Html Extra Info"),
-		LNG("")
-	);
-
-	_AttributeList_Add(
-		m_Parameters("NODE_EXTRAINFO")	, "EXTRAINFO_ATTRIB"		, LNG("[CAP] Attribute"),
-		LNG("")
-	);
-#endif
-
-
-	//-----------------------------------------------------
-	// Label...
-
-	m_Parameters.Add_Node(
-		NULL							, "NODE_LABEL"				, LNG("[CAP] Display: Label"),
-		LNG("")
-	);
-
-	_AttributeList_Add(
-		m_Parameters("NODE_LABEL")		, "LABEL_ATTRIB"			, LNG("[CAP] Attribute"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Font(
-		m_Parameters("NODE_LABEL")		, "LABEL_ATTRIB_FONT"		, LNG("[CAP] Font"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Choice(
-		m_Parameters("NODE_LABEL")		, "LABEL_ATTRIB_SIZE_TYPE"	, LNG("[CAP] Size relates to..."),
-		LNG(""),
-		wxString::Format(wxT("%s|%s|"),
-			LNG("[VAL] Screen"),
-			LNG("[VAL] Map Units")
-		), 0
-	);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_LABEL")		, "LABEL_ATTRIB_SIZE"		, LNG("[CAP] Default Size"),
-		LNG(""),
-		PARAMETER_TYPE_Double, 100.0, 0.0, true
-	);
-
-	_AttributeList_Add(
-		m_Parameters("NODE_LABEL")		, "LABEL_ATTRIB_SIZE_BY"	, LNG("[CAP] Size by Attribute"),
-		LNG("")
-	);
-
-
-	//-----------------------------------------------------
-	// Edit...
-
-	m_Parameters.Add_Node(
-		NULL							, "NODE_EDIT"				, LNG("[CAP] Edit"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_EDIT")		, "EDIT_SNAP_DIST"			, LNG("[CAP] Snap Distance"),
-		LNG(""),
-		PARAMETER_TYPE_Int, 10, 0, true
-	);
-
-	m_Parameters.Add_Shapes_List(
-		m_Parameters("NODE_EDIT")		, "EDIT_SNAP_LIST"			, LNG("[CAP] Snap to..."),
-		LNG(""),
-		PARAMETER_INPUT
-	);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_EDIT")		, "EDIT_COLOR"				, LNG("[CAP] Color"),
-		LNG(""),
-		PARAMETER_TYPE_Color, SG_GET_RGB(0, 0, 0)
-	);
-
-	m_Parameters.Add_Node(
-		m_Parameters("NODE_EDIT")		, "NODE_SELECTION"			, LNG("[CAP] Selection"),
-		LNG("")
-	);
-
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_SELECTION")	, "EDIT_SEL_COLOR"			, LNG("[CAP] Color"),
-		LNG(""),
-		PARAMETER_TYPE_Color, SG_GET_RGB(255, 0, 0)
-	);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_Shapes::On_DataObject_Changed(void)
-{
-	_AttributeList_Set(m_Parameters("COLORS_ATTRIB")		, false);
-	_AttributeList_Set(m_Parameters("LABEL_ATTRIB")			, true);
-	_AttributeList_Set(m_Parameters("LABEL_ATTRIB_SIZE_BY")	, true);
-#ifdef USE_HTMLINFO
-	_AttributeList_Set(m_Parameters("EXTRAINFO_ATTRIB") , true);
-#endif
-
-	_Chart_Set_Options();
-
-	m_pTable->DataObject_Changed(NULL);
-}
-
-//---------------------------------------------------------
-void CWKSP_Shapes::On_Parameters_Changed(void)
-{
-	m_Def_Color	= Get_Color_asWX(m_Parameters("UNISYMBOL_COLOR")->asColor());
-
-	//-----------------------------------------------------
-	if( (m_iColor = m_Parameters("COLORS_ATTRIB")->asInt()) >= m_pShapes->Get_Field_Count() )
-	{
-		m_iColor	= -1;
-	}
-
-	if( m_iColor < 0 && (m_pClassify->Get_Mode() == CLASSIFY_METRIC || m_pClassify->Get_Mode() == CLASSIFY_SHADE) )
-	{
-		m_pClassify->Set_Mode(CLASSIFY_UNIQUE);
-	}
-
-	//-----------------------------------------------------
-	if( (m_iLabel = m_Parameters("LABEL_ATTRIB")->asInt()) >= m_pShapes->Get_Field_Count() )
-	{
-		m_iLabel	= -1;
-	}
-
-	if( (m_iLabel_Size = m_Parameters("LABEL_ATTRIB_SIZE_BY")->asInt()) >= m_pShapes->Get_Field_Count() )
-	{
-		m_iLabel_Size	= -1;
-	}
-
-	//-----------------------------------------------------
-#ifdef USE_HTMLINFO
-	if( (m_iExtraInfo = m_Parameters("EXTRAINFO_ATTRIB")->asInt()) >= m_pShapes->Get_Field_Count() )
-	{
-		m_iExtraInfo	= -1;
-	}
-#endif
-
-	//-----------------------------------------------------
-	_Chart_Get_Options();
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int CWKSP_Shapes::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
-{
-	//-----------------------------------------------------
-	if(	!SG_STR_CMP(pParameter->Get_Identifier(), wxT("COLORS_TYPE"))
-	||	!SG_STR_CMP(pParameter->Get_Identifier(), wxT("COLORS_ATTRIB")) )
-	{
-		int		zField	= pParameters->Get_Parameter("COLORS_ATTRIB")->asInt();
-
-		pParameters->Get_Parameter("METRIC_ZRANGE")->asRange()->Set_Range(
-			m_pShapes->Get_Minimum(zField),
-			m_pShapes->Get_Maximum(zField)
-		);
-	}
-
-	//-----------------------------------------------------
-	return( 1 );
-}
-
-//---------------------------------------------------------
-void CWKSP_Shapes::On_Update_Views(void)
-{
-	m_pTable->Update_Views();
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_Shapes::_LUT_Create(void)
-{
-	int						iField, iRecord, old_Field, iID;
-	double					dValue;
-	TSG_Table_Index_Order	old_Order;
-	CSG_Colors				*pColors;
-	CSG_String				sFields, sValue;
-	CSG_Table_Record		*pRecord, *pRecord_LUT;
-	CSG_Table				*pTable, *pLUT;
-	CSG_Parameters			Parameters;
-
-	pTable	= Get_Table()->Get_Table();
-
-	if( pTable->Get_Field_Count() <= 0 || pTable->Get_Record_Count() < 1 )
-	{
-		DLG_Message_Show(LNG("Function failed because no attributes are available"), LNG("Create Lookup Table"));
-	}
-	else
-	{
-		for(iField=0; iField<pTable->Get_Field_Count(); iField++)
-		{
-			sFields.Append(pTable->Get_Field_Name(iField));
-			sFields.Append(wxT("|"));
-		}
-
-		Parameters.Create(NULL, LNG("Choose Attribute"), LNG(""));
-		Parameters.Add_Choice(NULL, "FIELD"	, LNG("Attribute")	, LNG(""), sFields);
-		Parameters.Add_Colors(NULL, "COLOR"	, LNG("Colors")		, LNG(""));
-
-		if( DLG_Parameters(&Parameters) )
-		{
-			iField		= Parameters("FIELD")	->asInt();
-
-			if( pTable->Get_Field_Type(iField) == SG_DATATYPE_String )
-			{
-				pTable->Add_Field(CSG_String::Format(wxT("%s_LUT"), pTable->Get_Field_Name(iField)), SG_DATATYPE_Int);
-				iID		= pTable->Get_Field_Count() - 1;
-			}
-			else
-			{
-				iID		= iField;
-			}
-
-			pLUT		= m_Parameters("LUT")	->asTable();
-			pLUT		->Del_Records();
-
-			old_Order	= pTable->Get_Index_Order(0);
-			old_Field	= pTable->Get_Index_Field(0);
-
-			pTable->Set_Index(iField, TABLE_INDEX_Ascending);
-			sValue		= pTable->Get_Record_byIndex(0)->asString(iField);
-			dValue		= iID != iField ? 1.0 : pTable->Get_Record_byIndex(0)->asDouble(iField);
-
-			for(iRecord=0; iRecord<pTable->Get_Record_Count(); iRecord++)
-			{
-				pRecord	= pTable->Get_Record_byIndex(iRecord);
-
-				if( iRecord == 0 || sValue.Cmp(pRecord->asString(iField)) )
-				{
-					if( iRecord > 0 )
-					{
-						sValue		= pRecord->asString(iField);
-						dValue		= iID != iField ? dValue + 1.0 : pRecord->asDouble(iField);
-					}
-
-					pRecord_LUT	= pLUT->Add_Record();
-					pRecord_LUT	->Set_Value(1, sValue.c_str());	// Name
-					pRecord_LUT	->Set_Value(2, sValue.c_str());	// Description
-					pRecord_LUT	->Set_Value(3, dValue);			// Minimum
-					pRecord_LUT	->Set_Value(4, dValue);			// Maximum
-				}
-
-				if( iID != iField )
-				{
-					pRecord->Set_Value(iID, dValue);
-				}
-			}
-
-			pColors	= Parameters("COLOR")->asColors();
-			pColors->Set_Count(pLUT->Get_Record_Count());
-
-			for(iRecord=0; iRecord<pLUT->Get_Record_Count(); iRecord++)
-			{
-				pLUT->Get_Record(iRecord)->Set_Value(0, pColors->Get_Color(iRecord));
-			}
-
-			pTable->Set_Index(old_Field, old_Order);
-
-			DataObject_Changed();
-
-			m_Parameters("COLORS_TYPE")		->Set_Value(1);		// Lookup Table
-			m_Parameters("COLORS_ATTRIB")	->Set_Value(iID);
-
-			Parameters_Changed();
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-wxString CWKSP_Shapes::Get_Value(CSG_Point ptWorld, double Epsilon)
-{
-	CSG_Shape		*pShape;
-
-	if( (pShape = m_pShapes->Get_Shape(ptWorld, Epsilon)) != NULL )
-	{
-		if( m_iColor >= 0 )
-		{
-			switch( m_pClassify->Get_Mode() )
-			{
-			case CLASSIFY_LUT:
-				return( m_pClassify->Get_Class_Name_byValue(pShape->asDouble(m_iColor)) );
-
-			case CLASSIFY_METRIC:	default:
-				return( pShape->asString(m_iColor) );
-			}
-		}
-		else
-		{
-			return( wxString::Format(wxT("%s: %d"), LNG("[CAP] Index"), pShape->Get_Index() + 1) );
-		}
-	}
-
-	return( LNG("") );
-}
-
-//---------------------------------------------------------
-double CWKSP_Shapes::Get_Value_Range(void)
-{
-	return( m_iColor >= 0 ? m_pShapes->Get_Range(m_iColor) : 0.0 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Shapes::asImage(CSG_Grid *pImage)
-{
-	return( false );
-}
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_Shapes::On_Draw(CWKSP_Map_DC &dc_Map, bool bEdit)
-{
-	int			iShape;
-	CSG_Shape	*pShape;
-
-	//-----------------------------------------------------
-	if( Get_Extent().Intersects(dc_Map.m_rWorld) != INTERSECTION_None )
-	{
-		double	Transparency	= m_Parameters("DISPLAY_TRANSPARENCY")->asDouble() / 100.0;
-
-		CWKSP_Map_DC	*pDC	= Transparency > 0.0 ? new CWKSP_Map_DC(dc_Map.m_rWorld, dc_Map.m_rDC, dc_Map.m_Scale, SG_GET_RGB(255, 255, 255)) : NULL;
-		CWKSP_Map_DC	&dc		= pDC ? *pDC : dc_Map;
-
-		m_Edit_Color	= Get_Color_asWX(m_Parameters("EDIT_COLOR")		->asInt());
-		m_Sel_Color		= Get_Color_asWX(m_Parameters("EDIT_SEL_COLOR")	->asInt());
-
-		_Draw_Initialize(dc);
-
-		//-------------------------------------------------
-		if( bEdit && (m_Edit_pShape || m_pShapes->Get_Selection_Count() > 0) )
-		{
-			for(iShape=0; iShape<m_pShapes->Get_Count(); iShape++)
-			{
-				pShape	= m_pShapes->Get_Shape(iShape);
-
-				if( !pShape->is_Selected() && dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
-				{
-					_Draw_Shape(dc, pShape, false);
-				}
-			}
-
-			//---------------------------------------------
-			for(iShape=1; iShape<m_pShapes->Get_Selection_Count(); iShape++)
-			{
-				pShape	= m_pShapes->Get_Selection(iShape);
-
-				if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
-				{
-					_Draw_Shape(dc, pShape, true);
-				}
-			}
-
-			if( m_Edit_pShape )
-			{
-				_Edit_Shape_Draw(dc);
-			}
-			else
-			{
-				pShape	= m_pShapes->Get_Selection(0);
-
-				if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
-				{
-					_Draw_Shape(dc, pShape, true);
-				}
-			}
-		}
-
-		//-------------------------------------------------
-		else
-		{
-			for(iShape=0; iShape<m_pShapes->Get_Count(); iShape++)
-			{
-				pShape	= m_pShapes->Get_Shape(iShape);
-
-				if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
-				{
-					_Draw_Shape(dc, pShape, false);
-				}
-			}
-
-			if( _Chart_is_Valid() )
-			{
-				for(iShape=0; iShape<m_pShapes->Get_Count(); iShape++)
-				{
-					pShape	= m_pShapes->Get_Shape(iShape);
-
-					if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
-					{
-						_Draw_Chart(dc, pShape);
-					}
-				}
-			}
-		}
-
-		//-------------------------------------------------
-		if( m_iLabel >= 0 )
-		{
-			int		Size;
-			double	dSize;
-			wxFont	Font	= *m_Parameters("LABEL_ATTRIB_FONT")->asFont();
-
-			switch( m_Parameters("LABEL_ATTRIB_SIZE_TYPE")->asInt() )
-			{
-			case 0:	default:
-				dSize	= m_iLabel_Size < 0 ? m_Parameters("LABEL_ATTRIB_FONT")->asFont()->GetPointSize() : 1.0;
-				break;
-
-			case 1:
-				dSize	= dc.m_World2DC * m_Parameters("LABEL_ATTRIB_SIZE")->asDouble();
-				break;
-			}
-
-			dc.dc.SetTextForeground(m_Parameters("LABEL_ATTRIB_FONT")->asColor());
-
-			if( m_iLabel_Size < 0 && (Size = (int)(0.5 + dSize)) > 0 )
-			{
-				Font.SetPointSize(Size);
-				dc.dc.SetFont(Font);
-
-				for(iShape=0; iShape<m_pShapes->Get_Count(); iShape++)
-				{
-					pShape	= m_pShapes->Get_Shape(iShape);
-
-					if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
-					{
-						_Draw_Label(dc, pShape);
-					}
-				}
-			}
-			else
-			{
-				for(iShape=0; iShape<m_pShapes->Get_Count(); iShape++)
-				{
-					pShape	= m_pShapes->Get_Shape(iShape);
-
-					if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None
-					&&	(Size = (int)(0.5 + dSize * pShape->asDouble(m_iLabel_Size))) > 0 )
-					{
-						Font.SetPointSize(Size);
-						dc.dc.SetFont(Font);
-
-						_Draw_Label(dc, pShape);
-					}
-				}
-			}
-		}
-
-		//-------------------------------------------------
-		if( pDC )
-		{
-			dc_Map.Draw_DC(dc, Transparency);
-
-			delete(pDC);
-		}
-	}
-
-	//-----------------------------------------------------
-	else if( m_Edit_pShape )
-	{
-		_Edit_Shape_Draw(dc_Map);
-	}
-
-	//-----------------------------------------------------
-	dc_Map.dc.SetBrush(wxNullBrush);
-	dc_Map.dc.SetPen  (wxNullPen);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter * CWKSP_Shapes::_AttributeList_Add(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description)
-{
-	CSG_Parameter *pParameter;
-
-	pParameter	= m_Parameters.Add_Choice(
-		pNode, Identifier, Name, Description,
-		wxString::Format(wxT("%s|"), LNG("[VAL] [default]")), 0
-	);
-
-	return( pParameter );
-}
-
-//---------------------------------------------------------
-void CWKSP_Shapes::_AttributeList_Set(CSG_Parameter *pFields, bool bAddNoField)
-{
-	if( pFields && pFields->Get_Type() == PARAMETER_TYPE_Choice )
-	{
-		wxString	s;
-
-		for(int i=0; i<m_pShapes->Get_Field_Count(); i++)
-		{
-			s.Append(wxString::Format(wxT("%s|"), m_pShapes->Get_Field_Name(i)));
-		}
-
-		if( bAddNoField )
-		{
-			s.Append(wxString::Format(wxT("%s|"), LNG("[VAL] [none]")));
-		}
-
-		pFields->asChoice()->Set_Items(s);
-
-		if( bAddNoField )
-		{
-			pFields->Set_Value(m_pShapes->Get_Field_Count());
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CSG_Parameter * CWKSP_Shapes::_BrushList_Add(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description)
-{
-	CSG_Parameter *pParameter;
-
-	pParameter	= m_Parameters.Add_Choice(
-		pNode, Identifier, Name, Description,
-		wxString::Format(wxT("%s|%s|%s|%s|%s|%s|%s|%s|"),
-			LNG("[VAL] Opaque"),
-			LNG("[VAL] Transparent"),
-			LNG("[VAL] Backward Diagonal"),
-			LNG("[VAL] Cross Diagonal"),
-			LNG("[VAL] Forward Diagonal"),
-			LNG("[VAL] Cross"),
-			LNG("[VAL] Horizontal"),
-			LNG("[VAL] Vertical")
-		), 0
-	);
-
-	return( pParameter );
-}
-
-//---------------------------------------------------------
-int CWKSP_Shapes::_BrushList_Get_Style(int Index)
-{
-	switch( Index )
-	{
-	default:
-	case 0:	return( wxSOLID				);
-	case 1:	return( wxTRANSPARENT		);
-	case 2:	return( wxBDIAGONAL_HATCH	);
-	case 3:	return( wxCROSSDIAG_HATCH	);
-	case 4:	return( wxFDIAGONAL_HATCH	);
-	case 5:	return( wxCROSS_HATCH		);
-	case 6:	return( wxHORIZONTAL_HATCH	);
-	case 7:	return( wxVERTICAL_HATCH	);
-	}
-}
-
-//---------------------------------------------------------
-CSG_Parameter * CWKSP_Shapes::_PenList_Add(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description)
-{
-	CSG_Parameter *pParameter;
-
-	pParameter	= m_Parameters.Add_Choice(
-		pNode, Identifier, Name, Description,
-		wxString::Format(wxT("%s|%s|%s|%s|%s|"),
-			LNG("[VAL] Solid"),
-			LNG("[VAL] Dotted"),
-			LNG("[VAL] Long Dashed"),
-			LNG("[VAL] Short Dashed"),
-			LNG("[VAL] Dot And Dash")
-		), 0
-	);
-
-	return( pParameter );
-}
-
-//---------------------------------------------------------
-int CWKSP_Shapes::_PenList_Get_Style(int Index)
-{
-	switch( Index )
-	{
-	default:
-	case 0:	return( wxSOLID );
-	case 1:	return( wxDOT );
-	case 2:	return( wxLONG_DASH );
-	case 3:	return( wxSHORT_DASH );
-	case 4:	return( wxDOT_DASH );
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Shapes::_Chart_Set_Options(void)
-{
-	CSG_Parameters	*pChart	= m_Parameters("DISPLAY_CHART")->asParameters();
-
-	pChart->Destroy();
-	m_Chart.Clear();
-
-	if( 1 )
-	{
-		int				i, n;
-		CSG_Colors		Colors;
-		CSG_String		sFields;
-		CSG_Parameter	*pFields, *pField;
-
-		for(i=0, n=0; i<m_pShapes->Get_Field_Count(); i++)
-		{
-			if( m_pShapes->Get_Field_Type(i) != SG_DATATYPE_String )
-				n++;
-		}
-
-		if( n > 0 )
-		{
-			pChart->Create(NULL, LNG("[CAP] Chart Properties"), LNG(""));
-
-			pChart->Add_Choice(
-				NULL, "TYPE"	, LNG("Chart Type"),
-				LNG(""),
-				CSG_String::Format(wxT("%s|%s|%s|%s|"),
-					LNG("bar"),
-					LNG("bar (not outlined)"),
-					LNG("pie"),
-					LNG("pie (not outlined)")
-				), 0
-			);
-
-			pChart->Add_Choice(
-				NULL, "SIZE_FIELD"		, LNG("[CAP] Attribute (Size)"),
-				LNG(""),
-				CSG_String::Format(wxT("%s|"), LNG("[VAL] [not set]")), 0
-			);
-
-			pChart->Add_Choice(
-				NULL, "SIZE_TYPE"		, LNG("[CAP] Size relates to..."),
-				LNG(""),
-				wxString::Format(wxT("%s|%s|"),
-					LNG("[VAL] Screen"),
-					LNG("[VAL] Map Units")
-				), 0
-			);
-
-			pChart->Add_Value(
-				NULL, "SIZE_DEFAULT"	, LNG("[CAP] Default Size"),
-				LNG(""),
-				PARAMETER_TYPE_Double, 15, 0, true
-			);
-
-			pChart->Add_Range(
-				NULL, "SIZE_RANGE"		, LNG("[CAP] Size Range"),
-				LNG(""),
-				5, 25, 0, true
-			);
-
-			pFields	= pChart->Add_Node(NULL, "NODE_FIELDS", LNG("Fields"), LNG(""));
-
-			Colors.Set_Count(n);
-
-			for(i=0, n=0; i<m_pShapes->Get_Field_Count(); i++)
-			{
-				if( m_pShapes->Get_Field_Type(i) != SG_DATATYPE_String )
-				{
-					sFields.Append(CSG_String::Format(wxT("%s|"), m_pShapes->Get_Field_Name(i)));
-
-					pField	= pChart->Add_Value(
-						pFields	, wxString::Format(wxT("FIELD_%d"), i), m_pShapes->Get_Field_Name(i),
-						LNG(""),
-						PARAMETER_TYPE_Bool , false
-					);
-
-					pChart->Add_Value(
-						pField	, wxString::Format(wxT("COLOR_%d"), i), SG_T(""),
-						LNG(""),
-						PARAMETER_TYPE_Color, Colors.Get_Color(n++)
-					);
-				}
-			}
-
-			sFields.Append(CSG_String::Format(wxT("%s|"), LNG("[VAL] [none]")));
-			pFields	= pChart->Get_Parameter("SIZE_FIELD");
-			pFields->asChoice()->Set_Items(sFields);
-			pFields->Set_Value(m_pShapes->Get_Field_Count());
-
-			return( true );
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Shapes::_Chart_Get_Options(void)
-{
-	CSG_Parameters	*pChart	= m_Parameters("DISPLAY_CHART")->asParameters();
-	CSG_Parameter	*p;
-
-	m_Chart.Clear();
-	m_Chart_sField=-1;
-
-	if( pChart->Get_Parameter("NODE_FIELDS") )
-	{
-		for(int i=0, n=0; i<m_pShapes->Get_Field_Count(); i++)
-		{
-			if(	(p = pChart->Get_Parameter(wxString::Format(wxT("FIELD_%d"), i))) != NULL )
-			{
-				if( pChart->Get_Parameter("SIZE_FIELD")->asInt() == n++ )
-					m_Chart_sField	= i;
-
-				if( p->asBool() && (p = pChart->Get_Parameter(wxString::Format(wxT("COLOR_%d"), i))) != NULL )
-					m_Chart.Add(i, p->asColor());
-			}
-		}
-
-		m_Chart_Type	= pChart->Get_Parameter("TYPE")			->asInt();
-		m_Chart_sType	= pChart->Get_Parameter("SIZE_TYPE")	->asInt();
-		m_Chart_sSize	= m_Chart_sField < 0
-						? pChart->Get_Parameter("SIZE_DEFAULT")	->asDouble()
-						: pChart->Get_Parameter("SIZE_RANGE")	->asRange()->Get_LoVal();
-		m_Chart_sRange	= pChart->Get_Parameter("SIZE_RANGE")	->asRange()->Get_HiVal() - m_Chart_sSize;
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-void CWKSP_Shapes::_Draw_Chart(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape)
-{
-	if( _Chart_is_Valid() )
-	{
-		int			s;
-		double		dSize	= m_Chart_sSize;
-		TSG_Point_Int	p;
-
-		if( m_Chart_sField >= 0 )
-		{
-			double	range	= m_pShapes->Get_Range(m_Chart_sField);
-
-			if( range > 0.0 )
-			{
-				dSize	+= m_Chart_sRange * ((pShape->asDouble(m_Chart_sField) - m_pShapes->Get_Minimum(m_Chart_sField)) / range);
-			}
-		}
-
-		s	= (int)(dSize * (m_Chart_sType == 1 ? dc_Map.m_World2DC : dc_Map.m_Scale));
-
-		switch( pShape->Get_Type() )
-		{
-		default:					p	= dc_Map.World2DC(pShape->Get_Extent().Get_Center());			break;
-		case SHAPE_TYPE_Polygon:	p	= dc_Map.World2DC(((CSG_Shape_Polygon *)pShape)->Get_Centroid());	break;
-		}
-
-		dc_Map.dc.SetPen(*wxBLACK_PEN);
-
-		switch( m_Chart_Type )
-		{
-		case 0:	_Draw_Chart_Bar(dc_Map, pShape,  true, p.x, p.y, (int)(0.8 * s), s);	break; // bar outlined
-		case 1:	_Draw_Chart_Bar(dc_Map, pShape, false, p.x, p.y, (int)(0.8 * s), s);	break; // bar
-		case 2:	_Draw_Chart_Pie(dc_Map, pShape,  true, p.x, p.y, (int)(1.0 * s));	break; // pie outlined
-		case 3:	_Draw_Chart_Pie(dc_Map, pShape, false, p.x, p.y, (int)(1.0 * s));	break; // pie
-		}
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_Shapes::_Draw_Chart_Pie(CWKSP_Map_DC &dc_Map, CSG_Table_Record *pRecord, bool bOutline, int x, int y, int size)
-{
-	int		i, ix, iy, jx, jy;
-	double	d, sum;
-
-	for(i=0, sum=0.0; i<m_Chart.Get_Count(); i++)
-	{
-		sum	+= fabs(pRecord->asDouble(m_Chart[i].x));
-	}
-
-	if( sum > 0.0 )
-	{
-		sum	= M_PI_360 / sum;
-
-		for(i=0, jx=x, jy=y-size, d=0.0; i<m_Chart.Get_Count(); i++)
-		{
-			if( !bOutline )
-			dc_Map.dc.SetPen	(wxPen  (Get_Color_asWX(m_Chart[i].y)));
-			dc_Map.dc.SetBrush	(wxBrush(Get_Color_asWX(m_Chart[i].y)));
-
-			d	+= sum * fabs(pRecord->asDouble(m_Chart[i].x));
-
-			ix	= jx;
-			iy	= jy;
-			jx	= x - (int)(size * sin(-d));
-			jy	= y - (int)(size * cos(-d));
-
-			dc_Map.dc.DrawArc(jx, jy, ix, iy, x, y);
-		}
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_Shapes::_Draw_Chart_Bar(CWKSP_Map_DC &dc_Map, CSG_Table_Record *pRecord, bool bOutline, int x, int y, int sx, int sy)
-{
-	int		i;
-	double	d, dx, dy, max, ix;
-
-	y	+= sy / 2;
-
-	for(i=1, max=fabs(pRecord->asDouble(m_Chart[0].x)); i<m_Chart.Get_Count(); i++)
-	{
-		if( (d = fabs(pRecord->asDouble(m_Chart[i].x))) > max )
-			max	= d;
-	}
-
-	if( max != 0.0 )
-	{
-		max	= sy / max;
-		dx	= sx / (double)m_Chart.Get_Count();
-
-		for(i=0, ix=x-sx/2.0; i<m_Chart.Get_Count(); i++, ix+=dx)
-		{
-			if( !bOutline )
-			dc_Map.dc.SetPen	(wxPen  (Get_Color_asWX(m_Chart[i].y)));
-			dc_Map.dc.SetBrush	(wxBrush(Get_Color_asWX(m_Chart[i].y)));
-
-			dy	= -pRecord->asDouble(m_Chart[i].x) * max;
-
-			dc_Map.dc.DrawRectangle((int)ix, y, (int)dx, (int)dy);
-		}
-
-		if( !bOutline )
-		{
-			dc_Map.dc.SetPen(*wxBLACK_PEN);
-			dc_Map.dc.DrawLine(x - sx / 2, y, x + sx / 2, y);
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                   WKSP_Shapes.cpp                     //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "res_commands.h"
+#include "res_dialogs.h"
+
+#include "helper.h"
+
+#include "wksp_layer_classify.h"
+
+#include "wksp_shapes.h"
+#include "wksp_table.h"
+
+#include "view_scatterplot.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_Shapes::CWKSP_Shapes(CSG_Shapes *pShapes)
+	: CWKSP_Layer(pShapes)
+{
+	m_pShapes		= pShapes;
+	m_pTable		= new CWKSP_Table(m_pShapes, this);
+
+	m_Edit_Shapes.Create(m_pShapes->Get_Type());
+	m_Edit_pShape	= NULL;
+
+	m_Edit_Attributes.Destroy();
+	m_Edit_Attributes.Add_Field(LNG("[FLD] Name") , SG_DATATYPE_String);
+	m_Edit_Attributes.Add_Field(LNG("[FLD] Value"), SG_DATATYPE_String);
+}
+
+//---------------------------------------------------------
+CWKSP_Shapes::~CWKSP_Shapes(void)
+{
+	delete(m_pTable);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define DESC_ADD_STR(label, value)	s.Append(wxString::Format(wxT("<tr><td valign=\"top\">%s</td><td valign=\"top\">%s</td></tr>"), label, value))
+#define DESC_ADD_INT(label, value)	s.Append(wxString::Format(wxT("<tr><td valign=\"top\">%s</td><td valign=\"top\">%d</td></tr>"), label, value))
+
+//---------------------------------------------------------
+wxString CWKSP_Shapes::Get_Description(void)
+{
+	wxString	s;
+
+	//-----------------------------------------------------
+	s	+= wxString::Format(wxT("<b>%s</b>"), LNG("[CAP] Shapes"));
+
+	s	+= wxT("<table border=\"0\">");
+
+	DESC_ADD_STR(LNG("[CAP] Name")				, m_pShapes->Get_Name());
+	DESC_ADD_STR(LNG("[CAP] File")				, m_pShapes->Get_File_Name());
+	DESC_ADD_STR(LNG("[CAP] Projection")		, m_pShapes->Get_Projection().Get_Description().c_str());
+	DESC_ADD_STR(LNG("[CAP] Modified")			, m_pShapes->is_Modified() ? LNG("[VAL] yes") : LNG("[VAL] no"));
+	DESC_ADD_STR(LNG("[CAP] Type")				, SG_Get_ShapeType_Name(m_pShapes->Get_Type()));
+	DESC_ADD_INT(LNG("[CAP] Number Of Shapes")	, m_pShapes->Get_Count());
+
+	s	+= wxT("</table>");
+
+	s	+= Get_TableInfo_asHTML(m_pShapes);
+
+	//-----------------------------------------------------
+//	s	+= wxString::Format(wxT("<hr><b>%s</b><font size=\"-1\">"), LNG("[CAP] Data History"));
+//	s	+= m_pShapes->Get_History().Get_HTML();
+//	s	+= wxString::Format(wxT("</font"));
+
+	return( s );
+}
+
+//---------------------------------------------------------
+wxMenu * CWKSP_Shapes::Get_Menu(void)
+{
+	wxMenu	*pMenu;
+
+	pMenu	= new wxMenu(m_pShapes->Get_Name());
+
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_CLOSE);
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_SAVE);
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_SAVEAS);
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_SHOW);
+	CMD_Menu_Add_Item(pMenu,  true, ID_CMD_SHAPES_HISTOGRAM);
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_SET_LUT);
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_SETTINGS_COPY);
+
+	pMenu->AppendSeparator();
+
+	wxMenu	*pTable	= new wxMenu(LNG("[MNU] Table"));
+	CMD_Menu_Add_Item(pTable,  true, ID_CMD_TABLES_SHOW);
+	CMD_Menu_Add_Item(pTable,  true, ID_CMD_TABLES_DIAGRAM);
+	CMD_Menu_Add_Item(pTable, false, ID_CMD_TABLES_SCATTERPLOT);
+	pMenu->Append(ID_CMD_WKSP_FIRST, LNG("[MNU] Attributes"), pTable);
+
+	pMenu->Append(ID_CMD_WKSP_FIRST, LNG("[MNU] Edit"), Edit_Get_Menu());
+
+	return( pMenu );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Shapes::On_Command(int Cmd_ID)
+{
+	switch( Cmd_ID )
+	{
+	default:
+		return( CWKSP_Layer::On_Command(Cmd_ID) );
+
+	case ID_CMD_SHAPES_SET_LUT:
+		_LUT_Create();
+		break;
+
+	case ID_CMD_SHAPES_EDIT_SHAPE:
+		_Edit_Shape();
+		break;
+
+	case ID_CMD_SHAPES_EDIT_ADD_SHAPE:
+		_Edit_Shape_Add();
+		break;
+
+	case ID_CMD_SHAPES_EDIT_DEL_SHAPE:
+		_Edit_Shape_Del();
+		break;
+
+	case ID_CMD_SHAPES_EDIT_ADD_PART:
+		_Edit_Part_Add();
+		break;
+
+	case ID_CMD_SHAPES_EDIT_DEL_PART:
+		_Edit_Part_Del();
+		break;
+
+	case ID_CMD_SHAPES_EDIT_DEL_POINT:
+		_Edit_Point_Del();
+		break;
+
+	case ID_CMD_SHAPES_EDIT_SEL_INVERT:
+		m_pShapes->Inv_Selection();
+		Update_Views(false);
+		break;
+
+	case ID_CMD_TABLES_SHOW:
+		m_pTable->Toggle_View();
+		break;
+
+	case ID_CMD_TABLES_DIAGRAM:
+		m_pTable->Toggle_Diagram();
+		break;
+
+	case ID_CMD_TABLES_SCATTERPLOT:
+		Add_ScatterPlot(Get_Table()->Get_Table());
+		break;
+
+	case ID_CMD_SHAPES_HISTOGRAM:
+		Histogram_Toggle();
+		break;
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Shapes::On_Command_UI(wxUpdateUIEvent &event)
+{
+	switch( event.GetId() )
+	{
+	default:
+		return( CWKSP_Layer::On_Command_UI(event) );
+
+	case ID_CMD_SHAPES_EDIT_SHAPE:
+		event.Enable(m_pShapes->Get_Selection_Count() > 0 || m_Edit_pShape != NULL);
+		event.Check(m_Edit_pShape != NULL);
+		break;
+
+	case ID_CMD_SHAPES_EDIT_ADD_SHAPE:
+		event.Enable(m_Edit_pShape == NULL);
+		break;
+
+	case ID_CMD_SHAPES_EDIT_DEL_SHAPE:
+		event.Enable(m_pShapes->Get_Selection_Count() > 0 && m_Edit_pShape == NULL);
+		break;
+
+	case ID_CMD_SHAPES_EDIT_ADD_PART:
+		event.Enable(m_Edit_pShape != NULL);
+		break;
+
+	case ID_CMD_SHAPES_EDIT_DEL_PART:
+		event.Enable(m_Edit_pShape != NULL && m_Edit_iPart >= 0);
+		break;
+
+	case ID_CMD_SHAPES_EDIT_DEL_POINT:
+		event.Enable(m_Edit_pShape != NULL && m_Edit_iPart >= 0 && m_Edit_iPoint >= 0);
+		break;
+
+	case ID_CMD_SHAPES_EDIT_SEL_INVERT:
+		event.Enable(m_Edit_pShape == NULL);
+		break;
+
+	case ID_CMD_TABLES_SHOW:
+		event.Check(m_pTable->Get_View() != NULL);
+		break;
+
+	case ID_CMD_TABLES_DIAGRAM:
+		event.Check(m_pTable->Get_Diagram() != NULL);
+		break;
+
+	case ID_CMD_SHAPES_HISTOGRAM:
+		event.Check(m_pHistogram != NULL);
+		break;
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_Shapes::On_Create_Parameters(void)
+{
+	//-----------------------------------------------------
+	// General...
+
+	_AttributeList_Add(
+		m_Parameters("NODE_COLORS")		, "COLORS_ATTRIB"			, LNG("[CAP] Attribute"),
+		LNG("")
+	);
+
+
+	//-----------------------------------------------------
+	// Display...
+
+	m_Parameters.Add_Parameters(
+		m_Parameters("NODE_DISPLAY")	, "DISPLAY_CHART"			, LNG("[CAP] Chart"),
+		LNG("")
+	);
+
+	//-----------------------------------------------------
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_DISPLAY")	, "DISPLAY_TRANSPARENCY"	, LNG("[CAP] Transparency [%]"),
+		LNG(""),
+		PARAMETER_TYPE_Double, 0.0, 0.0, true, 100.0, true
+	);
+
+
+#ifdef USE_HTMLINFO
+	//-----------------------------------------------------
+	// HTML Extra info
+
+	m_Parameters.Add_Node(
+		NULL							, "NODE_EXTRAINFO"			, LNG("[CAP] Html Extra Info"),
+		LNG("")
+	);
+
+	_AttributeList_Add(
+		m_Parameters("NODE_EXTRAINFO")	, "EXTRAINFO_ATTRIB"		, LNG("[CAP] Attribute"),
+		LNG("")
+	);
+#endif
+
+
+	//-----------------------------------------------------
+	// Label...
+
+	m_Parameters.Add_Node(
+		NULL							, "NODE_LABEL"				, LNG("[CAP] Display: Label"),
+		LNG("")
+	);
+
+	_AttributeList_Add(
+		m_Parameters("NODE_LABEL")		, "LABEL_ATTRIB"			, LNG("[CAP] Attribute"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Font(
+		m_Parameters("NODE_LABEL")		, "LABEL_ATTRIB_FONT"		, LNG("[CAP] Font"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Choice(
+		m_Parameters("NODE_LABEL")		, "LABEL_ATTRIB_SIZE_TYPE"	, LNG("[CAP] Size relates to..."),
+		LNG(""),
+		wxString::Format(wxT("%s|%s|"),
+			LNG("[VAL] Screen"),
+			LNG("[VAL] Map Units")
+		), 0
+	);
+
+	m_Parameters.Add_Choice(
+		m_Parameters("NODE_LABEL")		, "LABEL_ATTRIB_PREC"		, LNG("[CAP] Numerical Precision"),
+		LNG(""),
+		CSG_String::Format(SG_T("%s|%s|%s|"),
+			LNG("fit to value"),
+			LNG("standard"),
+			SG_T("0|0.1|0.12|0.123|0.1234|0.12345|0.1234567|0.12345678|0.123456789|0.1234567890|0.12345678901|0.123456789012|0.1234567890123|0.12345678901234|0.123456789012345|0.1234567890123456|0.12345678901234567|0.123456789012345678|0.1234567890123456789|0.12345678901234567890")
+		), 0
+	);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_LABEL")		, "LABEL_ATTRIB_SIZE"		, LNG("[CAP] Default Size"),
+		LNG(""),
+		PARAMETER_TYPE_Double, 100.0, 0.0, true
+	);
+
+	_AttributeList_Add(
+		m_Parameters("NODE_LABEL")		, "LABEL_ATTRIB_SIZE_BY"	, LNG("[CAP] Size by Attribute"),
+		LNG("")
+	);
+
+
+	//-----------------------------------------------------
+	// Edit...
+
+	m_Parameters.Add_Node(
+		NULL							, "NODE_EDIT"				, LNG("[CAP] Edit"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_EDIT")		, "EDIT_SNAP_DIST"			, LNG("[CAP] Snap Distance"),
+		LNG(""),
+		PARAMETER_TYPE_Int, 10, 0, true
+	);
+
+	m_Parameters.Add_Shapes_List(
+		m_Parameters("NODE_EDIT")		, "EDIT_SNAP_LIST"			, LNG("[CAP] Snap to..."),
+		LNG(""),
+		PARAMETER_INPUT
+	);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_EDIT")		, "EDIT_COLOR"				, LNG("[CAP] Color"),
+		LNG(""),
+		PARAMETER_TYPE_Color, SG_GET_RGB(0, 0, 0)
+	);
+
+	m_Parameters.Add_Node(
+		m_Parameters("NODE_EDIT")		, "NODE_SELECTION"			, LNG("[CAP] Selection"),
+		LNG("")
+	);
+
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_SELECTION")	, "EDIT_SEL_COLOR"			, LNG("[CAP] Color"),
+		LNG(""),
+		PARAMETER_TYPE_Color, SG_GET_RGB(255, 0, 0)
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_Shapes::On_DataObject_Changed(void)
+{
+	_AttributeList_Set(m_Parameters("COLORS_ATTRIB")		, false);
+	_AttributeList_Set(m_Parameters("LABEL_ATTRIB")			, true);
+	_AttributeList_Set(m_Parameters("LABEL_ATTRIB_SIZE_BY")	, true);
+#ifdef USE_HTMLINFO
+	_AttributeList_Set(m_Parameters("EXTRAINFO_ATTRIB") , true);
+#endif
+
+	_Chart_Set_Options();
+
+	m_pTable->DataObject_Changed(NULL);
+}
+
+//---------------------------------------------------------
+void CWKSP_Shapes::On_Parameters_Changed(void)
+{
+	m_Def_Color	= Get_Color_asWX(m_Parameters("UNISYMBOL_COLOR")->asColor());
+
+	//-----------------------------------------------------
+	if( (m_iColor = m_Parameters("COLORS_ATTRIB")->asInt()) >= m_pShapes->Get_Field_Count() )
+	{
+		m_iColor	= -1;
+	}
+
+	if( m_iColor < 0 && (m_pClassify->Get_Mode() == CLASSIFY_METRIC || m_pClassify->Get_Mode() == CLASSIFY_SHADE) )
+	{
+		m_pClassify->Set_Mode(CLASSIFY_UNIQUE);
+	}
+
+	//-----------------------------------------------------
+	if( (m_iLabel = m_Parameters("LABEL_ATTRIB")->asInt()) >= m_pShapes->Get_Field_Count() )
+	{
+		m_iLabel	= -1;
+	}
+
+	if( (m_iLabel_Size = m_Parameters("LABEL_ATTRIB_SIZE_BY")->asInt()) >= m_pShapes->Get_Field_Count() )
+	{
+		m_iLabel_Size	= -1;
+	}
+
+	m_Label_Prec	= m_Parameters("LABEL_ATTRIB_PREC")->asInt() - 2;
+
+	//-----------------------------------------------------
+#ifdef USE_HTMLINFO
+	if( (m_iExtraInfo = m_Parameters("EXTRAINFO_ATTRIB")->asInt()) >= m_pShapes->Get_Field_Count() )
+	{
+		m_iExtraInfo	= -1;
+	}
+#endif
+
+	//-----------------------------------------------------
+	_Chart_Get_Options();
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CWKSP_Shapes::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	//-----------------------------------------------------
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), wxT("COLORS_TYPE"))
+	||	!SG_STR_CMP(pParameter->Get_Identifier(), wxT("COLORS_ATTRIB")) )
+	{
+		int		zField	= pParameters->Get_Parameter("COLORS_ATTRIB")->asInt();
+
+		pParameters->Get_Parameter("METRIC_ZRANGE")->asRange()->Set_Range(
+			m_pShapes->Get_Minimum(zField),
+			m_pShapes->Get_Maximum(zField)
+		);
+	}
+
+	//-----------------------------------------------------
+	return( 1 );
+}
+
+//---------------------------------------------------------
+void CWKSP_Shapes::On_Update_Views(void)
+{
+	m_pTable->Update_Views();
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_Shapes::_LUT_Create(void)
+{
+	int						iField, iRecord, old_Field, iID;
+	double					dValue;
+	TSG_Table_Index_Order	old_Order;
+	CSG_Colors				*pColors;
+	CSG_String				sFields, sValue;
+	CSG_Table_Record		*pRecord, *pRecord_LUT;
+	CSG_Table				*pTable, *pLUT;
+	CSG_Parameters			Parameters;
+
+	pTable	= Get_Table()->Get_Table();
+
+	if( pTable->Get_Field_Count() <= 0 || pTable->Get_Record_Count() < 1 )
+	{
+		DLG_Message_Show(LNG("Function failed because no attributes are available"), LNG("Create Lookup Table"));
+	}
+	else
+	{
+		for(iField=0; iField<pTable->Get_Field_Count(); iField++)
+		{
+			sFields.Append(pTable->Get_Field_Name(iField));
+			sFields.Append(wxT("|"));
+		}
+
+		Parameters.Create(NULL, LNG("Choose Attribute"), LNG(""));
+		Parameters.Add_Choice(NULL, "FIELD"	, LNG("Attribute")	, LNG(""), sFields);
+		Parameters.Add_Colors(NULL, "COLOR"	, LNG("Colors")		, LNG(""));
+
+		if( DLG_Parameters(&Parameters) )
+		{
+			iField		= Parameters("FIELD")	->asInt();
+
+			if( pTable->Get_Field_Type(iField) == SG_DATATYPE_String )
+			{
+				pTable->Add_Field(CSG_String::Format(wxT("%s_LUT"), pTable->Get_Field_Name(iField)), SG_DATATYPE_Int);
+				iID		= pTable->Get_Field_Count() - 1;
+			}
+			else
+			{
+				iID		= iField;
+			}
+
+			pLUT		= m_Parameters("LUT")	->asTable();
+			pLUT		->Del_Records();
+
+			old_Order	= pTable->Get_Index_Order(0);
+			old_Field	= pTable->Get_Index_Field(0);
+
+			pTable->Set_Index(iField, TABLE_INDEX_Ascending);
+			sValue		= pTable->Get_Record_byIndex(0)->asString(iField);
+			dValue		= iID != iField ? 1.0 : pTable->Get_Record_byIndex(0)->asDouble(iField);
+
+			for(iRecord=0; iRecord<pTable->Get_Record_Count(); iRecord++)
+			{
+				pRecord	= pTable->Get_Record_byIndex(iRecord);
+
+				if( iRecord == 0 || sValue.Cmp(pRecord->asString(iField)) )
+				{
+					if( iRecord > 0 )
+					{
+						sValue		= pRecord->asString(iField);
+						dValue		= iID != iField ? dValue + 1.0 : pRecord->asDouble(iField);
+					}
+
+					pRecord_LUT	= pLUT->Add_Record();
+					pRecord_LUT	->Set_Value(1, sValue.c_str());	// Name
+					pRecord_LUT	->Set_Value(2, sValue.c_str());	// Description
+					pRecord_LUT	->Set_Value(3, dValue);			// Minimum
+					pRecord_LUT	->Set_Value(4, dValue);			// Maximum
+				}
+
+				if( iID != iField )
+				{
+					pRecord->Set_Value(iID, dValue);
+				}
+			}
+
+			pColors	= Parameters("COLOR")->asColors();
+			pColors->Set_Count(pLUT->Get_Record_Count());
+
+			for(iRecord=0; iRecord<pLUT->Get_Record_Count(); iRecord++)
+			{
+				pLUT->Get_Record(iRecord)->Set_Value(0, pColors->Get_Color(iRecord));
+			}
+
+			pTable->Set_Index(old_Field, old_Order);
+
+			DataObject_Changed();
+
+			m_Parameters("COLORS_TYPE")		->Set_Value(1);		// Lookup Table
+			m_Parameters("COLORS_ATTRIB")	->Set_Value(iID);
+
+			Parameters_Changed();
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+wxString CWKSP_Shapes::Get_Value(CSG_Point ptWorld, double Epsilon)
+{
+	CSG_Shape		*pShape;
+
+	if( (pShape = m_pShapes->Get_Shape(ptWorld, Epsilon)) != NULL )
+	{
+		if( m_iColor >= 0 )
+		{
+			switch( m_pClassify->Get_Mode() )
+			{
+			case CLASSIFY_LUT:
+				return( m_pClassify->Get_Class_Name_byValue(pShape->asDouble(m_iColor)) );
+
+			case CLASSIFY_METRIC:	default:
+				return( pShape->asString(m_iColor) );
+			}
+		}
+		else
+		{
+			return( wxString::Format(wxT("%s: %d"), LNG("[CAP] Index"), pShape->Get_Index() + 1) );
+		}
+	}
+
+	return( LNG("") );
+}
+
+//---------------------------------------------------------
+double CWKSP_Shapes::Get_Value_Range(void)
+{
+	return( m_iColor >= 0 ? m_pShapes->Get_Range(m_iColor) : 0.0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Shapes::asImage(CSG_Grid *pImage)
+{
+	return( false );
+}
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_Shapes::On_Draw(CWKSP_Map_DC &dc_Map, bool bEdit)
+{
+	int			iShape;
+	CSG_Shape	*pShape;
+
+	//-----------------------------------------------------
+	if( Get_Extent().Intersects(dc_Map.m_rWorld) != INTERSECTION_None )
+	{
+		double	Transparency	= m_Parameters("DISPLAY_TRANSPARENCY")->asDouble() / 100.0;
+
+		CWKSP_Map_DC	*pDC	= Transparency > 0.0 ? new CWKSP_Map_DC(dc_Map.m_rWorld, dc_Map.m_rDC, dc_Map.m_Scale, SG_GET_RGB(255, 255, 255)) : NULL;
+		CWKSP_Map_DC	&dc		= pDC ? *pDC : dc_Map;
+
+		m_Edit_Color	= Get_Color_asWX(m_Parameters("EDIT_COLOR")		->asInt());
+		m_Sel_Color		= Get_Color_asWX(m_Parameters("EDIT_SEL_COLOR")	->asInt());
+
+		_Draw_Initialize(dc);
+
+		//-------------------------------------------------
+		if( bEdit && (m_Edit_pShape || m_pShapes->Get_Selection_Count() > 0) )
+		{
+			for(iShape=0; iShape<m_pShapes->Get_Count(); iShape++)
+			{
+				pShape	= m_pShapes->Get_Shape(iShape);
+
+				if( !pShape->is_Selected() && dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
+				{
+					_Draw_Shape(dc, pShape, false);
+				}
+			}
+
+			//---------------------------------------------
+			for(iShape=1; iShape<m_pShapes->Get_Selection_Count(); iShape++)
+			{
+				pShape	= m_pShapes->Get_Selection(iShape);
+
+				if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
+				{
+					_Draw_Shape(dc, pShape, true);
+				}
+			}
+
+			if( m_Edit_pShape )
+			{
+				_Edit_Shape_Draw(dc);
+			}
+			else
+			{
+				pShape	= m_pShapes->Get_Selection(0);
+
+				if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
+				{
+					_Draw_Shape(dc, pShape, true);
+				}
+			}
+		}
+
+		//-------------------------------------------------
+		else
+		{
+			for(iShape=0; iShape<m_pShapes->Get_Count(); iShape++)
+			{
+				pShape	= m_pShapes->Get_Shape(iShape);
+
+				if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
+				{
+					_Draw_Shape(dc, pShape, false);
+				}
+			}
+
+			if( _Chart_is_Valid() )
+			{
+				for(iShape=0; iShape<m_pShapes->Get_Count(); iShape++)
+				{
+					pShape	= m_pShapes->Get_Shape(iShape);
+
+					if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
+					{
+						_Draw_Chart(dc, pShape);
+					}
+				}
+			}
+		}
+
+		//-------------------------------------------------
+		if( m_iLabel >= 0 )
+		{
+			int		Size;
+			double	dSize;
+			wxFont	Font	= *m_Parameters("LABEL_ATTRIB_FONT")->asFont();
+
+			switch( m_Parameters("LABEL_ATTRIB_SIZE_TYPE")->asInt() )
+			{
+			case 0:	default:
+				dSize	= m_iLabel_Size < 0 ? m_Parameters("LABEL_ATTRIB_FONT")->asFont()->GetPointSize() : 1.0;
+				break;
+
+			case 1:
+				dSize	= dc.m_World2DC * m_Parameters("LABEL_ATTRIB_SIZE")->asDouble();
+				break;
+			}
+
+			dc.dc.SetTextForeground(m_Parameters("LABEL_ATTRIB_FONT")->asColor());
+
+			if( m_iLabel_Size < 0 && (Size = (int)(0.5 + dSize)) > 0 )
+			{
+				Font.SetPointSize(Size);
+				dc.dc.SetFont(Font);
+
+				for(iShape=0; iShape<m_pShapes->Get_Count(); iShape++)
+				{
+					pShape	= m_pShapes->Get_Shape(iShape);
+
+					if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None )
+					{
+						_Draw_Label(dc, pShape);
+					}
+				}
+			}
+			else
+			{
+				for(iShape=0; iShape<m_pShapes->Get_Count(); iShape++)
+				{
+					pShape	= m_pShapes->Get_Shape(iShape);
+
+					if( dc.m_rWorld.Intersects(pShape->Get_Extent()) != INTERSECTION_None
+					&&	(Size = (int)(0.5 + dSize * pShape->asDouble(m_iLabel_Size))) > 0 )
+					{
+						Font.SetPointSize(Size);
+						dc.dc.SetFont(Font);
+
+						_Draw_Label(dc, pShape);
+					}
+				}
+			}
+		}
+
+		//-------------------------------------------------
+		if( pDC )
+		{
+			dc_Map.Draw_DC(dc, Transparency);
+
+			delete(pDC);
+		}
+	}
+
+	//-----------------------------------------------------
+	else if( m_Edit_pShape )
+	{
+		_Edit_Shape_Draw(dc_Map);
+	}
+
+	//-----------------------------------------------------
+	dc_Map.dc.SetBrush(wxNullBrush);
+	dc_Map.dc.SetPen  (wxNullPen);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter * CWKSP_Shapes::_AttributeList_Add(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description)
+{
+	CSG_Parameter *pParameter;
+
+	pParameter	= m_Parameters.Add_Choice(
+		pNode, Identifier, Name, Description,
+		wxString::Format(wxT("%s|"), LNG("[VAL] [default]")), 0
+	);
+
+	return( pParameter );
+}
+
+//---------------------------------------------------------
+void CWKSP_Shapes::_AttributeList_Set(CSG_Parameter *pFields, bool bAddNoField)
+{
+	if( pFields && pFields->Get_Type() == PARAMETER_TYPE_Choice )
+	{
+		wxString	s;
+
+		for(int i=0; i<m_pShapes->Get_Field_Count(); i++)
+		{
+			s.Append(wxString::Format(wxT("%s|"), m_pShapes->Get_Field_Name(i)));
+		}
+
+		if( bAddNoField )
+		{
+			s.Append(wxString::Format(wxT("%s|"), LNG("[VAL] [none]")));
+		}
+
+		pFields->asChoice()->Set_Items(s);
+
+		if( bAddNoField )
+		{
+			pFields->Set_Value(m_pShapes->Get_Field_Count());
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CSG_Parameter * CWKSP_Shapes::_BrushList_Add(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description)
+{
+	CSG_Parameter *pParameter;
+
+	pParameter	= m_Parameters.Add_Choice(
+		pNode, Identifier, Name, Description,
+		wxString::Format(wxT("%s|%s|%s|%s|%s|%s|%s|%s|"),
+			LNG("[VAL] Opaque"),
+			LNG("[VAL] Transparent"),
+			LNG("[VAL] Backward Diagonal"),
+			LNG("[VAL] Cross Diagonal"),
+			LNG("[VAL] Forward Diagonal"),
+			LNG("[VAL] Cross"),
+			LNG("[VAL] Horizontal"),
+			LNG("[VAL] Vertical")
+		), 0
+	);
+
+	return( pParameter );
+}
+
+//---------------------------------------------------------
+int CWKSP_Shapes::_BrushList_Get_Style(int Index)
+{
+	switch( Index )
+	{
+	default:
+	case 0:	return( wxSOLID				);
+	case 1:	return( wxTRANSPARENT		);
+	case 2:	return( wxBDIAGONAL_HATCH	);
+	case 3:	return( wxCROSSDIAG_HATCH	);
+	case 4:	return( wxFDIAGONAL_HATCH	);
+	case 5:	return( wxCROSS_HATCH		);
+	case 6:	return( wxHORIZONTAL_HATCH	);
+	case 7:	return( wxVERTICAL_HATCH	);
+	}
+}
+
+//---------------------------------------------------------
+CSG_Parameter * CWKSP_Shapes::_PenList_Add(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description)
+{
+	CSG_Parameter *pParameter;
+
+	pParameter	= m_Parameters.Add_Choice(
+		pNode, Identifier, Name, Description,
+		wxString::Format(wxT("%s|%s|%s|%s|%s|"),
+			LNG("[VAL] Solid"),
+			LNG("[VAL] Dotted"),
+			LNG("[VAL] Long Dashed"),
+			LNG("[VAL] Short Dashed"),
+			LNG("[VAL] Dot And Dash")
+		), 0
+	);
+
+	return( pParameter );
+}
+
+//---------------------------------------------------------
+int CWKSP_Shapes::_PenList_Get_Style(int Index)
+{
+	switch( Index )
+	{
+	default:
+	case 0:	return( wxSOLID );
+	case 1:	return( wxDOT );
+	case 2:	return( wxLONG_DASH );
+	case 3:	return( wxSHORT_DASH );
+	case 4:	return( wxDOT_DASH );
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Shapes::_Chart_Set_Options(void)
+{
+	CSG_Parameters	*pChart	= m_Parameters("DISPLAY_CHART")->asParameters();
+
+	pChart->Destroy();
+	m_Chart.Clear();
+
+	if( 1 )
+	{
+		int				i, n;
+		CSG_Colors		Colors;
+		CSG_String		sFields;
+		CSG_Parameter	*pFields, *pField;
+
+		for(i=0, n=0; i<m_pShapes->Get_Field_Count(); i++)
+		{
+			if( m_pShapes->Get_Field_Type(i) != SG_DATATYPE_String )
+				n++;
+		}
+
+		if( n > 0 )
+		{
+			pChart->Create(NULL, LNG("[CAP] Chart Properties"), LNG(""));
+
+			pChart->Add_Choice(
+				NULL, "TYPE"	, LNG("Chart Type"),
+				LNG(""),
+				CSG_String::Format(wxT("%s|%s|%s|%s|"),
+					LNG("bar"),
+					LNG("bar (not outlined)"),
+					LNG("pie"),
+					LNG("pie (not outlined)")
+				), 0
+			);
+
+			pChart->Add_Choice(
+				NULL, "SIZE_FIELD"		, LNG("[CAP] Attribute (Size)"),
+				LNG(""),
+				CSG_String::Format(wxT("%s|"), LNG("[VAL] [not set]")), 0
+			);
+
+			pChart->Add_Choice(
+				NULL, "SIZE_TYPE"		, LNG("[CAP] Size relates to..."),
+				LNG(""),
+				wxString::Format(wxT("%s|%s|"),
+					LNG("[VAL] Screen"),
+					LNG("[VAL] Map Units")
+				), 0
+			);
+
+			pChart->Add_Value(
+				NULL, "SIZE_DEFAULT"	, LNG("[CAP] Default Size"),
+				LNG(""),
+				PARAMETER_TYPE_Double, 15, 0, true
+			);
+
+			pChart->Add_Range(
+				NULL, "SIZE_RANGE"		, LNG("[CAP] Size Range"),
+				LNG(""),
+				5, 25, 0, true
+			);
+
+			pFields	= pChart->Add_Node(NULL, "NODE_FIELDS", LNG("Fields"), LNG(""));
+
+			Colors.Set_Count(n);
+
+			for(i=0, n=0; i<m_pShapes->Get_Field_Count(); i++)
+			{
+				if( m_pShapes->Get_Field_Type(i) != SG_DATATYPE_String )
+				{
+					sFields.Append(CSG_String::Format(wxT("%s|"), m_pShapes->Get_Field_Name(i)));
+
+					pField	= pChart->Add_Value(
+						pFields	, wxString::Format(wxT("FIELD_%d"), i), m_pShapes->Get_Field_Name(i),
+						LNG(""),
+						PARAMETER_TYPE_Bool , false
+					);
+
+					pChart->Add_Value(
+						pField	, wxString::Format(wxT("COLOR_%d"), i), SG_T(""),
+						LNG(""),
+						PARAMETER_TYPE_Color, Colors.Get_Color(n++)
+					);
+				}
+			}
+
+			sFields.Append(CSG_String::Format(wxT("%s|"), LNG("[VAL] [none]")));
+			pFields	= pChart->Get_Parameter("SIZE_FIELD");
+			pFields->asChoice()->Set_Items(sFields);
+			pFields->Set_Value(m_pShapes->Get_Field_Count());
+
+			return( true );
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Shapes::_Chart_Get_Options(void)
+{
+	CSG_Parameters	*pChart	= m_Parameters("DISPLAY_CHART")->asParameters();
+	CSG_Parameter	*p;
+
+	m_Chart.Clear();
+	m_Chart_sField=-1;
+
+	if( pChart->Get_Parameter("NODE_FIELDS") )
+	{
+		for(int i=0, n=0; i<m_pShapes->Get_Field_Count(); i++)
+		{
+			if(	(p = pChart->Get_Parameter(wxString::Format(wxT("FIELD_%d"), i))) != NULL )
+			{
+				if( pChart->Get_Parameter("SIZE_FIELD")->asInt() == n++ )
+					m_Chart_sField	= i;
+
+				if( p->asBool() && (p = pChart->Get_Parameter(wxString::Format(wxT("COLOR_%d"), i))) != NULL )
+					m_Chart.Add(i, p->asColor());
+			}
+		}
+
+		m_Chart_Type	= pChart->Get_Parameter("TYPE")			->asInt();
+		m_Chart_sType	= pChart->Get_Parameter("SIZE_TYPE")	->asInt();
+		m_Chart_sSize	= m_Chart_sField < 0
+						? pChart->Get_Parameter("SIZE_DEFAULT")	->asDouble()
+						: pChart->Get_Parameter("SIZE_RANGE")	->asRange()->Get_LoVal();
+		m_Chart_sRange	= pChart->Get_Parameter("SIZE_RANGE")	->asRange()->Get_HiVal() - m_Chart_sSize;
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+void CWKSP_Shapes::_Draw_Chart(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape)
+{
+	if( _Chart_is_Valid() )
+	{
+		int			s;
+		double		dSize	= m_Chart_sSize;
+		TSG_Point_Int	p;
+
+		if( m_Chart_sField >= 0 )
+		{
+			double	range	= m_pShapes->Get_Range(m_Chart_sField);
+
+			if( range > 0.0 )
+			{
+				dSize	+= m_Chart_sRange * ((pShape->asDouble(m_Chart_sField) - m_pShapes->Get_Minimum(m_Chart_sField)) / range);
+			}
+		}
+
+		s	= (int)(dSize * (m_Chart_sType == 1 ? dc_Map.m_World2DC : dc_Map.m_Scale));
+
+		switch( pShape->Get_Type() )
+		{
+		default:					p	= dc_Map.World2DC(pShape->Get_Extent().Get_Center());			break;
+		case SHAPE_TYPE_Polygon:	p	= dc_Map.World2DC(((CSG_Shape_Polygon *)pShape)->Get_Centroid());	break;
+		}
+
+		dc_Map.dc.SetPen(*wxBLACK_PEN);
+
+		switch( m_Chart_Type )
+		{
+		case 0:	_Draw_Chart_Bar(dc_Map, pShape,  true, p.x, p.y, (int)(0.8 * s), s);	break; // bar outlined
+		case 1:	_Draw_Chart_Bar(dc_Map, pShape, false, p.x, p.y, (int)(0.8 * s), s);	break; // bar
+		case 2:	_Draw_Chart_Pie(dc_Map, pShape,  true, p.x, p.y, (int)(1.0 * s));	break; // pie outlined
+		case 3:	_Draw_Chart_Pie(dc_Map, pShape, false, p.x, p.y, (int)(1.0 * s));	break; // pie
+		}
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_Shapes::_Draw_Chart_Pie(CWKSP_Map_DC &dc_Map, CSG_Table_Record *pRecord, bool bOutline, int x, int y, int size)
+{
+	int		i, ix, iy, jx, jy;
+	double	d, sum;
+
+	for(i=0, sum=0.0; i<m_Chart.Get_Count(); i++)
+	{
+		sum	+= fabs(pRecord->asDouble(m_Chart[i].x));
+	}
+
+	if( sum > 0.0 )
+	{
+		sum	= M_PI_360 / sum;
+
+		for(i=0, jx=x, jy=y-size, d=0.0; i<m_Chart.Get_Count(); i++)
+		{
+			if( !bOutline )
+			dc_Map.dc.SetPen	(wxPen  (Get_Color_asWX(m_Chart[i].y)));
+			dc_Map.dc.SetBrush	(wxBrush(Get_Color_asWX(m_Chart[i].y)));
+
+			d	+= sum * fabs(pRecord->asDouble(m_Chart[i].x));
+
+			ix	= jx;
+			iy	= jy;
+			jx	= x - (int)(size * sin(-d));
+			jy	= y - (int)(size * cos(-d));
+
+			dc_Map.dc.DrawArc(jx, jy, ix, iy, x, y);
+		}
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_Shapes::_Draw_Chart_Bar(CWKSP_Map_DC &dc_Map, CSG_Table_Record *pRecord, bool bOutline, int x, int y, int sx, int sy)
+{
+	int		i;
+	double	d, dx, dy, max, ix;
+
+	y	+= sy / 2;
+
+	for(i=1, max=fabs(pRecord->asDouble(m_Chart[0].x)); i<m_Chart.Get_Count(); i++)
+	{
+		if( (d = fabs(pRecord->asDouble(m_Chart[i].x))) > max )
+			max	= d;
+	}
+
+	if( max != 0.0 )
+	{
+		max	= sy / max;
+		dx	= sx / (double)m_Chart.Get_Count();
+
+		for(i=0, ix=x-sx/2.0; i<m_Chart.Get_Count(); i++, ix+=dx)
+		{
+			if( !bOutline )
+			dc_Map.dc.SetPen	(wxPen  (Get_Color_asWX(m_Chart[i].y)));
+			dc_Map.dc.SetBrush	(wxBrush(Get_Color_asWX(m_Chart[i].y)));
+
+			dy	= -pRecord->asDouble(m_Chart[i].x) * max;
+
+			dc_Map.dc.DrawRectangle((int)ix, y, (int)dx, (int)dy);
+		}
+
+		if( !bOutline )
+		{
+			dc_Map.dc.SetPen(*wxBLACK_PEN);
+			dc_Map.dc.DrawLine(x - sx / 2, y, x + sx / 2, y);
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_gui/wksp_shapes.h b/src/saga_core/saga_gui/wksp_shapes.h
index 5581beb..94e63d6 100644
--- a/src/saga_core/saga_gui/wksp_shapes.h
+++ b/src/saga_core/saga_gui/wksp_shapes.h
@@ -1,211 +1,210 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    WKSP_Shapes.h                      //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_H
-#define _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "wksp_layer.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CWKSP_Shapes : public CWKSP_Layer
-{
-public:
-	CWKSP_Shapes(CSG_Shapes *pShapes);
-	virtual ~CWKSP_Shapes(void);
-
-	virtual TWKSP_Item			Get_Type				(void)	{	return( WKSP_ITEM_Shapes );	}
-
-	virtual wxString			Get_Name				(void);
-	virtual wxString			Get_Description			(void);
-
-	virtual wxMenu *			Get_Menu				(void);
-
-	virtual bool				On_Command				(int Cmd_ID);
-	virtual bool				On_Command_UI			(wxUpdateUIEvent &event);
-
-	CSG_Shapes *				Get_Shapes				(void)	{	return( m_pShapes );	}
-	class CWKSP_Table *			Get_Table				(void)	{	return( m_pTable );		}
-
-	virtual wxString			Get_Value				(CSG_Point ptWorld, double Epsilon);
-	virtual double				Get_Value_Range			(void);
-
-	bool						asImage					(CSG_Grid *pImage);
-
-	int							Get_Color_Field			(void)	{	return( m_iColor );		}
-	int							Get_Label_Field			(void)	{	return( m_iLabel );		}
-
-	bool						is_Editing				(void)	{	return( m_Edit_pShape != NULL );	}
-
-
-protected:
-
-	int							m_iColor, m_iLabel, m_iLabel_Size, m_iExtraInfo, m_Edit_iPart, m_Edit_iPoint, m_Chart_Type, m_Chart_sField, m_Chart_sType;
-
-	double						m_Chart_sSize, m_Chart_sRange;
-
-	wxColour					m_Def_Color, m_Edit_Color, m_Sel_Color;
-
-	CSG_Points_Int				m_Chart;
-
-	CSG_Parameters				m_Chart_Options;
-
-	CSG_Shape					*m_Edit_pShape;
-
-	CSG_Shapes					*m_pShapes, m_Edit_Shapes;
-
-	class CWKSP_Table			*m_pTable;
-
-
-	virtual void				On_Create_Parameters	(void);
-	virtual void				On_DataObject_Changed	(void);
-	virtual void				On_Parameters_Changed	(void);
-
-	virtual int					On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
-
-	virtual void				On_Update_Views			(void);
-
-	virtual void				On_Draw					(CWKSP_Map_DC &dc_Map, bool bEdit);
-
-	CSG_Parameter *				_AttributeList_Add		(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description);
-	void						_AttributeList_Set		(CSG_Parameter *pFields, bool bAddNoField);
-
-	CSG_Parameter *				_BrushList_Add			(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description);
-	int							_BrushList_Get_Style	(int Index);
-
-	CSG_Parameter *				_PenList_Add			(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description);
-	int							_PenList_Get_Style		(int Index);
-
-	virtual void				_Draw_Initialize		(CWKSP_Map_DC &dc_Map)									= 0;
-	virtual void				_Draw_Shape				(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape, bool bSelection)	= 0;
-	virtual void				_Draw_Label				(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape)					= 0;
-
-	void						_Draw_Chart				(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape);
-	void						_Draw_Chart_Pie			(CWKSP_Map_DC &dc_Map, CSG_Table_Record *pRecord, bool bOutline, int x, int y, int size);
-	void						_Draw_Chart_Bar			(CWKSP_Map_DC &dc_Map, CSG_Table_Record *pRecord, bool bOutline, int x, int y, int sx, int sy);
-
-	bool						_Chart_is_Valid			(void)	{	return( m_Chart.Get_Count() > 0 );	}
-	bool						_Chart_Set_Options		(void);
-	bool						_Chart_Get_Options		(void);
-
-
-	//-----------------------------------------------------
-	// Editing...
-
-	virtual wxMenu *			On_Edit_Get_Menu		(void);
-	virtual TSG_Rect			On_Edit_Get_Extent		(void);
-	virtual bool				On_Edit_Set_Attributes	(void);
-
-	virtual bool				On_Edit_On_Key_Down		(int KeyCode);
-	virtual bool				On_Edit_On_Mouse_Down	(CSG_Point Point, double ClientToWorld, int Key);
-	virtual bool				On_Edit_On_Mouse_Up		(CSG_Point Point, double ClientToWorld, int Key);
-	virtual bool				On_Edit_On_Mouse_Move	(wxWindow *pMap, CSG_Rect rWorld, wxPoint pt, wxPoint ptLast, int Key);
-
-	void						_LUT_Create				(void);
-
-	bool						_Edit_Set_Attributes	(void);
-
-	bool						_Edit_Shape				(void);
-	bool						_Edit_Shape_Start		(void);
-	bool						_Edit_Shape_Stop		(void);
-	bool						_Edit_Shape_Stop		(bool bSave);
-	bool						_Edit_Shape_Add			(void);
-	bool						_Edit_Shape_Del			(void);
-	bool						_Edit_Part_Add			(void);
-	bool						_Edit_Part_Del			(void);
-	bool						_Edit_Point_Del			(void);
-
-	void						_Edit_Shape_Draw_Point	(wxDC &dc, TSG_Point_Int Point, bool bSelected);
-	void						_Edit_Shape_Draw_Point	(wxDC &dc, int x, int y, bool bSelected);
-	virtual void				_Edit_Shape_Draw_Move	(wxDC &dc, CSG_Rect rWorld, double ClientToWorld, wxPoint Point);
-	virtual void				_Edit_Shape_Draw		(CWKSP_Map_DC &dc_Map);
-
-	virtual int					_Edit_Shape_HitTest		(CSG_Point Point, double max_Dist, int &iPart, int &iPoint);
-
-	void						_Edit_Snap_Point		(CSG_Point &Point, double ClientToWorld);
-	void						_Edit_Snap_Point		(CSG_Point Point, CSG_Point &snap_Point, double &snap_Dist, CSG_Shapes *pShapes, bool bLine);
-	void						_Edit_Snap_Point		(CSG_Point Point, CSG_Point &snap_Point, double &snap_Dist, CSG_Shape *pShape);
-	virtual void				_Edit_Snap_Point_ToLine (CSG_Point Point, CSG_Point &snap_Point, double &snap_Dist, CSG_Shape *pShape);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    WKSP_Shapes.h                      //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_H
+#define _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "wksp_layer.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CWKSP_Shapes : public CWKSP_Layer
+{
+public:
+	CWKSP_Shapes(CSG_Shapes *pShapes);
+	virtual ~CWKSP_Shapes(void);
+
+	virtual TWKSP_Item			Get_Type				(void)	{	return( WKSP_ITEM_Shapes );	}
+
+	virtual wxString			Get_Description			(void);
+
+	virtual wxMenu *			Get_Menu				(void);
+
+	virtual bool				On_Command				(int Cmd_ID);
+	virtual bool				On_Command_UI			(wxUpdateUIEvent &event);
+
+	CSG_Shapes *				Get_Shapes				(void)	{	return( m_pShapes );	}
+	class CWKSP_Table *			Get_Table				(void)	{	return( m_pTable );		}
+
+	virtual wxString			Get_Value				(CSG_Point ptWorld, double Epsilon);
+	virtual double				Get_Value_Range			(void);
+
+	bool						asImage					(CSG_Grid *pImage);
+
+	int							Get_Color_Field			(void)	{	return( m_iColor );		}
+	int							Get_Label_Field			(void)	{	return( m_iLabel );		}
+
+	bool						is_Editing				(void)	{	return( m_Edit_pShape != NULL );	}
+
+
+protected:
+
+	int							m_iColor, m_iLabel, m_iLabel_Size, m_Label_Prec, m_iExtraInfo, m_Edit_iPart, m_Edit_iPoint, m_Chart_Type, m_Chart_sField, m_Chart_sType;
+
+	double						m_Chart_sSize, m_Chart_sRange;
+
+	wxColour					m_Def_Color, m_Edit_Color, m_Sel_Color;
+
+	CSG_Points_Int				m_Chart;
+
+	CSG_Parameters				m_Chart_Options;
+
+	CSG_Shape					*m_Edit_pShape;
+
+	CSG_Shapes					*m_pShapes, m_Edit_Shapes;
+
+	class CWKSP_Table			*m_pTable;
+
+
+	virtual void				On_Create_Parameters	(void);
+	virtual void				On_DataObject_Changed	(void);
+	virtual void				On_Parameters_Changed	(void);
+
+	virtual int					On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+	virtual void				On_Update_Views			(void);
+
+	virtual void				On_Draw					(CWKSP_Map_DC &dc_Map, bool bEdit);
+
+	CSG_Parameter *				_AttributeList_Add		(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description);
+	void						_AttributeList_Set		(CSG_Parameter *pFields, bool bAddNoField);
+
+	CSG_Parameter *				_BrushList_Add			(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description);
+	int							_BrushList_Get_Style	(int Index);
+
+	CSG_Parameter *				_PenList_Add			(CSG_Parameter *pNode, const char *Identifier, const wxChar *Name, const wxChar *Description);
+	int							_PenList_Get_Style		(int Index);
+
+	virtual void				_Draw_Initialize		(CWKSP_Map_DC &dc_Map)									= 0;
+	virtual void				_Draw_Shape				(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape, bool bSelection)	= 0;
+	virtual void				_Draw_Label				(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape)					= 0;
+
+	void						_Draw_Chart				(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape);
+	void						_Draw_Chart_Pie			(CWKSP_Map_DC &dc_Map, CSG_Table_Record *pRecord, bool bOutline, int x, int y, int size);
+	void						_Draw_Chart_Bar			(CWKSP_Map_DC &dc_Map, CSG_Table_Record *pRecord, bool bOutline, int x, int y, int sx, int sy);
+
+	bool						_Chart_is_Valid			(void)	{	return( m_Chart.Get_Count() > 0 );	}
+	bool						_Chart_Set_Options		(void);
+	bool						_Chart_Get_Options		(void);
+
+
+	//-----------------------------------------------------
+	// Editing...
+
+	virtual wxMenu *			On_Edit_Get_Menu		(void);
+	virtual TSG_Rect			On_Edit_Get_Extent		(void);
+	virtual bool				On_Edit_Set_Attributes	(void);
+
+	virtual bool				On_Edit_On_Key_Down		(int KeyCode);
+	virtual bool				On_Edit_On_Mouse_Down	(CSG_Point Point, double ClientToWorld, int Key);
+	virtual bool				On_Edit_On_Mouse_Up		(CSG_Point Point, double ClientToWorld, int Key);
+	virtual bool				On_Edit_On_Mouse_Move	(wxWindow *pMap, CSG_Rect rWorld, wxPoint pt, wxPoint ptLast, int Key);
+
+	void						_LUT_Create				(void);
+
+	bool						_Edit_Set_Attributes	(void);
+
+	bool						_Edit_Shape				(void);
+	bool						_Edit_Shape_Start		(void);
+	bool						_Edit_Shape_Stop		(void);
+	bool						_Edit_Shape_Stop		(bool bSave);
+	bool						_Edit_Shape_Add			(void);
+	bool						_Edit_Shape_Del			(void);
+	bool						_Edit_Part_Add			(void);
+	bool						_Edit_Part_Del			(void);
+	bool						_Edit_Point_Del			(void);
+
+	void						_Edit_Shape_Draw_Point	(wxDC &dc, TSG_Point_Int Point, bool bSelected);
+	void						_Edit_Shape_Draw_Point	(wxDC &dc, int x, int y, bool bSelected);
+	virtual void				_Edit_Shape_Draw_Move	(wxDC &dc, CSG_Rect rWorld, double ClientToWorld, wxPoint Point);
+	virtual void				_Edit_Shape_Draw		(CWKSP_Map_DC &dc_Map);
+
+	virtual int					_Edit_Shape_HitTest		(CSG_Point Point, double max_Dist, int &iPart, int &iPoint);
+
+	void						_Edit_Snap_Point		(CSG_Point &Point, double ClientToWorld);
+	void						_Edit_Snap_Point		(CSG_Point Point, CSG_Point &snap_Point, double &snap_Dist, CSG_Shapes *pShapes, bool bLine);
+	void						_Edit_Snap_Point		(CSG_Point Point, CSG_Point &snap_Point, double &snap_Dist, CSG_Shape *pShape);
+	virtual void				_Edit_Snap_Point_ToLine (CSG_Point Point, CSG_Point &snap_Point, double &snap_Dist, CSG_Shape *pShape);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_H
diff --git a/src/saga_core/saga_gui/wksp_shapes_line.cpp b/src/saga_core/saga_gui/wksp_shapes_line.cpp
index 818cb2b..55249d5 100644
--- a/src/saga_core/saga_gui/wksp_shapes_line.cpp
+++ b/src/saga_core/saga_gui/wksp_shapes_line.cpp
@@ -384,9 +384,6 @@ void CWKSP_Shapes_Line::_Draw_Shape(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape, boo
 //---------------------------------------------------------
 void CWKSP_Shapes_Line::_Draw_Label(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape)
 {
-	const int	m_Label_Freq	= 10,
-				m_Label_Prec	= 2;
-
 	bool			bLabel;
 	int				iPart, iPoint;
 	double			d;
@@ -394,6 +391,8 @@ void CWKSP_Shapes_Line::_Draw_Label(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape)
 	wxCoord			sx, sy;
 	wxString		s(pShape->asString(m_iLabel, m_Label_Prec));
 
+	m_Label_Freq	= 10;
+
 	dc_Map.dc.GetTextExtent(s, &sx, &sy);
 
 	//-----------------------------------------------------
diff --git a/src/saga_core/saga_gui/wksp_shapes_line.h b/src/saga_core/saga_gui/wksp_shapes_line.h
index 75ae098..97d2847 100644
--- a/src/saga_core/saga_gui/wksp_shapes_line.h
+++ b/src/saga_core/saga_gui/wksp_shapes_line.h
@@ -93,7 +93,7 @@ protected:
 
 	bool						m_bPoints;
 
-	int							m_iSize, m_Size_Type, m_Line_Style;
+	int							m_iSize, m_Size_Type, m_Line_Style, m_Label_Freq;
 
 	double						m_Size, m_dSize, m_Size_Min;
 
diff --git a/src/saga_core/saga_gui/wksp_shapes_manager.cpp b/src/saga_core/saga_gui/wksp_shapes_manager.cpp
index ce9e1b6..9dac8f9 100644
--- a/src/saga_core/saga_gui/wksp_shapes_manager.cpp
+++ b/src/saga_core/saga_gui/wksp_shapes_manager.cpp
@@ -1,374 +1,374 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//               WKSP_Shapes_Manager.cpp                 //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <saga_api/saga_api.h>
-
-#include "res_commands.h"
-
-#include "wksp_data_manager.h"
-
-#include "wksp_map_manager.h"
-
-#include "wksp_shapes_manager.h"
-#include "wksp_shapes_type.h"
-#include "wksp_shapes.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_Shapes_Manager::CWKSP_Shapes_Manager(void)
-{
-}
-
-//---------------------------------------------------------
-CWKSP_Shapes_Manager::~CWKSP_Shapes_Manager(void)
-{
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-wxString CWKSP_Shapes_Manager::Get_Name(void)
-{
-	return( LNG("[CAP] Shapes") );
-}
-
-//---------------------------------------------------------
-wxString CWKSP_Shapes_Manager::Get_Description(void)
-{
-	wxString	s;
-
-	s.Printf(wxT("<b>%s</b><br>"), LNG("[CAP] Shapes"));
-
-	for(int i=0; i<Get_Count(); i++)
-	{
-		s.Append(wxString::Format(wxT("%s: %d<br>"), Get_Item(i)->Get_Name().c_str(), ((CWKSP_Base_Manager *)Get_Item(i))->Get_Count()));
-	}
-
-	return( s );
-}
-
-//---------------------------------------------------------
-wxMenu * CWKSP_Shapes_Manager::Get_Menu(void)
-{
-	wxMenu	*pMenu;
-
-	pMenu	= new wxMenu(LNG("[CAP] Shapes"));
-
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_OPEN);
-
-	if( Get_Count() > 0 )
-	{
-		CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_CLOSE);
-	}
-
-	return( pMenu );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Shapes_Manager::On_Command(int Cmd_ID)
-{
-	switch( Cmd_ID )
-	{
-	default:
-		return( CWKSP_Base_Manager::On_Command(Cmd_ID) );
-
-	case ID_CMD_WKSP_ITEM_RETURN:
-		break;
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_Shapes_Type * CWKSP_Shapes_Manager::Get_Shapes_Type(int Shape_Type)
-{
-	for(int i=0; i<Get_Count(); i++)
-	{
-		if( Shape_Type == ((CWKSP_Shapes_Type *)Get_Item(i))->Get_Shapes_Type() )
-		{
-			return( (CWKSP_Shapes_Type *)Get_Item(i) );
-		}
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-CWKSP_Shapes_Type * CWKSP_Shapes_Manager::_Get_Shapes_Type(int Shape_Type)
-{
-	CWKSP_Shapes_Type	*pItem;
-
-	if( Shape_Type != SHAPE_TYPE_Undefined )
-	{
-		if( (pItem = Get_Shapes_Type(Shape_Type)) == NULL )
-		{
-			Add_Item(pItem = new CWKSP_Shapes_Type(Shape_Type));
-		}
-
-		return( pItem );
-	}
-
-	return( NULL );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_Shapes * CWKSP_Shapes_Manager::Get_Shapes(CSG_Shapes *pShapes)
-{
-	if( pShapes )
-	{
-		for(int i=0; i<Get_Count(); i++)
-		{
-			if( ((CWKSP_Shapes_Type *)Get_Item(i))->Exists(pShapes) )
-			{
-				return( ((CWKSP_Shapes_Type *)Get_Item(i))->Get_Shapes(pShapes) );
-			}
-		}
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Shapes_Manager::Exists(CSG_Shapes *pShapes)
-{
-	return( Get_Shapes(pShapes) != NULL );
-}
-
-//---------------------------------------------------------
-CWKSP_Shapes * CWKSP_Shapes_Manager::Add(CSG_Shapes *pShapes)
-{
-	if( pShapes && pShapes->is_Valid() && !Exists(pShapes) )
-	{
-		return( _Get_Shapes_Type(pShapes->Get_Type())->Add(pShapes) );
-	}
-
-	return( NULL );
-}
-
-//---------------------------------------------------------
-CSG_Shapes * CWKSP_Shapes_Manager::Get_byFileName(const wxChar *File_Name)
-{
-	CSG_String	s(File_Name);
-	CWKSP_Shapes_Type	*pType;
-
-	for(int i=0; i<Get_Count(); i++)
-	{
-		pType	= (CWKSP_Shapes_Type *)Get_Item(i);
-
-		for(int j=0; j<pType->Get_Count(); j++)
-		{
-			if( !s.Cmp(pType->Get_Shapes(j)->Get_Shapes()->Get_File_Name()) )
-			{
-				return( pType->Get_Shapes(j)->Get_Shapes() );
-			}
-		}
-	}
-
-	return( NULL );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Shapes_Manager::Update(CSG_Shapes *pShapes, CSG_Parameters *pParameters)
-{
-	CWKSP_Shapes	*pItem;
-
-	if( (pItem = Get_Shapes(pShapes)) != NULL )
-	{
-		pItem->DataObject_Changed(pParameters);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Shapes_Manager::Update_Views(CSG_Shapes *pShapes)
-{
-	CWKSP_Shapes	*pItem;
-
-	if( (pItem = Get_Shapes(pShapes)) != NULL )
-	{
-		pItem->Update_Views(false);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Shapes_Manager::Show(CSG_Shapes *pShapes, int Map_Mode)
-{
-	CWKSP_Shapes	*pItem;
-
-	if( (pItem = Get_Shapes(pShapes)) != NULL )
-	{
-		switch( Map_Mode )
-		{
-		case SG_UI_DATAOBJECT_SHOW:
-			return( pItem->Show() );
-
-		case SG_UI_DATAOBJECT_SHOW_NEW_MAP:
-			g_pMaps->Add(pItem, NULL);
-
-		case SG_UI_DATAOBJECT_SHOW_LAST_MAP:
-			return( pItem->Show(g_pMaps->Get_Map(g_pMaps->Get_Count() - 1)) );
-		}
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Shapes_Manager::asImage(CSG_Shapes *pShapes, CSG_Grid *pImage)
-{
-	CWKSP_Shapes	*pItem;
-
-	if( (pItem = Get_Shapes(pShapes)) != NULL )
-	{
-		return( pItem->asImage(pImage) );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_Shapes_Manager::Get_Colors(CSG_Shapes *pShapes, CSG_Colors *pColors)
-{
-	CWKSP_Shapes	*pItem;
-
-	if( (pItem = Get_Shapes(pShapes)) != NULL )
-	{
-		return( pItem->Get_Colors(pColors) );
-	}
-
-	return( false );
-}
-
-//---------------------------------------------------------
-bool CWKSP_Shapes_Manager::Set_Colors(CSG_Shapes *pShapes, CSG_Colors *pColors)
-{
-	CWKSP_Shapes	*pItem;
-
-	if( (pItem = Get_Shapes(pShapes)) != NULL )
-	{
-		pItem->DataObject_Changed(pColors);
-
-		return( true );
-	}
-
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//               WKSP_Shapes_Manager.cpp                 //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <saga_api/saga_api.h>
+
+#include "res_commands.h"
+
+#include "wksp_data_manager.h"
+
+#include "wksp_map_manager.h"
+
+#include "wksp_shapes_manager.h"
+#include "wksp_shapes_type.h"
+#include "wksp_shapes.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_Shapes_Manager::CWKSP_Shapes_Manager(void)
+{
+}
+
+//---------------------------------------------------------
+CWKSP_Shapes_Manager::~CWKSP_Shapes_Manager(void)
+{
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+wxString CWKSP_Shapes_Manager::Get_Name(void)
+{
+	return( LNG("[CAP] Shapes") );
+}
+
+//---------------------------------------------------------
+wxString CWKSP_Shapes_Manager::Get_Description(void)
+{
+	wxString	s;
+
+	s.Printf(wxT("<b>%s</b><br>"), LNG("[CAP] Shapes"));
+
+	for(int i=0; i<Get_Count(); i++)
+	{
+		s.Append(wxString::Format(wxT("%s: %d<br>"), Get_Item(i)->Get_Name().c_str(), ((CWKSP_Base_Manager *)Get_Item(i))->Get_Count()));
+	}
+
+	return( s );
+}
+
+//---------------------------------------------------------
+wxMenu * CWKSP_Shapes_Manager::Get_Menu(void)
+{
+	wxMenu	*pMenu;
+
+	pMenu	= new wxMenu(LNG("[CAP] Shapes"));
+
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_SHAPES_OPEN);
+
+	if( Get_Count() > 0 )
+	{
+		CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_CLOSE);
+	}
+
+	return( pMenu );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Shapes_Manager::On_Command(int Cmd_ID)
+{
+	switch( Cmd_ID )
+	{
+	default:
+		return( CWKSP_Base_Manager::On_Command(Cmd_ID) );
+
+	case ID_CMD_WKSP_ITEM_RETURN:
+		break;
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_Shapes_Type * CWKSP_Shapes_Manager::Get_Shapes_Type(int Shape_Type)
+{
+	for(int i=0; i<Get_Count(); i++)
+	{
+		if( Shape_Type == ((CWKSP_Shapes_Type *)Get_Item(i))->Get_Shapes_Type() )
+		{
+			return( (CWKSP_Shapes_Type *)Get_Item(i) );
+		}
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+CWKSP_Shapes_Type * CWKSP_Shapes_Manager::_Get_Shapes_Type(int Shape_Type)
+{
+	CWKSP_Shapes_Type	*pItem;
+
+	if( Shape_Type != SHAPE_TYPE_Undefined )
+	{
+		if( (pItem = Get_Shapes_Type(Shape_Type)) == NULL )
+		{
+			Add_Item(pItem = new CWKSP_Shapes_Type(Shape_Type));
+		}
+
+		return( pItem );
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_Shapes * CWKSP_Shapes_Manager::Get_Shapes(CSG_Shapes *pShapes)
+{
+	if( pShapes )
+	{
+		for(int i=0; i<Get_Count(); i++)
+		{
+			if( ((CWKSP_Shapes_Type *)Get_Item(i))->Exists(pShapes) )
+			{
+				return( ((CWKSP_Shapes_Type *)Get_Item(i))->Get_Shapes(pShapes) );
+			}
+		}
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Shapes_Manager::Exists(CSG_Shapes *pShapes)
+{
+	return( Get_Shapes(pShapes) != NULL );
+}
+
+//---------------------------------------------------------
+CWKSP_Shapes * CWKSP_Shapes_Manager::Add(CSG_Shapes *pShapes)
+{
+	if( pShapes && pShapes->is_Valid() && !Exists(pShapes) )
+	{
+		return( _Get_Shapes_Type(pShapes->Get_Type())->Add(pShapes) );
+	}
+
+	return( NULL );
+}
+
+//---------------------------------------------------------
+CSG_Shapes * CWKSP_Shapes_Manager::Get_byFileName(const wxChar *File_Name)
+{
+	CSG_String	s(File_Name);
+	CWKSP_Shapes_Type	*pType;
+
+	for(int i=0; i<Get_Count(); i++)
+	{
+		pType	= (CWKSP_Shapes_Type *)Get_Item(i);
+
+		for(int j=0; j<pType->Get_Count(); j++)
+		{
+			if( !s.Cmp(pType->Get_Shapes(j)->Get_Shapes()->Get_File_Name()) )
+			{
+				return( pType->Get_Shapes(j)->Get_Shapes() );
+			}
+		}
+	}
+
+	return( NULL );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Shapes_Manager::Update(CSG_Shapes *pShapes, CSG_Parameters *pParameters)
+{
+	CWKSP_Shapes	*pItem;
+
+	if( (pItem = Get_Shapes(pShapes)) != NULL )
+	{
+		pItem->DataObject_Changed(pParameters);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Shapes_Manager::Update_Views(CSG_Shapes *pShapes)
+{
+	CWKSP_Shapes	*pItem;
+
+	if( (pItem = Get_Shapes(pShapes)) != NULL )
+	{
+		pItem->Update_Views(false);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Shapes_Manager::Show(CSG_Shapes *pShapes, int Map_Mode)
+{
+	CWKSP_Shapes	*pItem;
+
+	if( (pItem = Get_Shapes(pShapes)) != NULL )
+	{
+		switch( Map_Mode )
+		{
+		case SG_UI_DATAOBJECT_SHOW:
+			return( pItem->Show() );
+
+		case SG_UI_DATAOBJECT_SHOW_NEW_MAP:
+			g_pMaps->Add(pItem, NULL);
+
+		case SG_UI_DATAOBJECT_SHOW_LAST_MAP:
+			return( pItem->Show(g_pMaps->Get_Map(g_pMaps->Get_Count() - 1)) );
+		}
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Shapes_Manager::asImage(CSG_Shapes *pShapes, CSG_Grid *pImage)
+{
+	CWKSP_Shapes	*pItem;
+
+	if( (pItem = Get_Shapes(pShapes)) != NULL )
+	{
+		return( pItem->asImage(pImage) );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_Shapes_Manager::Get_Colors(CSG_Shapes *pShapes, CSG_Colors *pColors)
+{
+	CWKSP_Shapes	*pItem;
+
+	if( (pItem = Get_Shapes(pShapes)) != NULL )
+	{
+		return( pItem->Get_Colors(pColors) );
+	}
+
+	return( false );
+}
+
+//---------------------------------------------------------
+bool CWKSP_Shapes_Manager::Set_Colors(CSG_Shapes *pShapes, CSG_Colors *pColors)
+{
+	CWKSP_Shapes	*pItem;
+
+	if( (pItem = Get_Shapes(pShapes)) != NULL )
+	{
+		pItem->DataObject_Changed(pColors);
+
+		return( true );
+	}
+
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_gui/wksp_shapes_manager.h b/src/saga_core/saga_gui/wksp_shapes_manager.h
index dea9b46..6e005f3 100644
--- a/src/saga_core/saga_gui/wksp_shapes_manager.h
+++ b/src/saga_core/saga_gui/wksp_shapes_manager.h
@@ -1,127 +1,127 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                WKSP_Shapes_Manager.h                  //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_Manager_H
-#define _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_Manager_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "wksp_base_manager.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CWKSP_Shapes_Manager : public CWKSP_Base_Manager
-{
-public:
-	CWKSP_Shapes_Manager(void);
-	virtual ~CWKSP_Shapes_Manager(void);
-
-	virtual TWKSP_Item			Get_Type		(void)	{	return( WKSP_ITEM_Shapes_Manager );	}
-
-	virtual wxString			Get_Name		(void);
-	virtual wxString			Get_Description	(void);
-
-	virtual wxMenu *			Get_Menu		(void);
-
-	virtual bool				On_Command		(int Cmd_ID);
-
-	class CWKSP_Shapes_Type *	Get_Shapes_Type	(int Shape_Type);
-	class CWKSP_Shapes *		Get_Shapes		(class CSG_Shapes *pShapes);
-
-	bool						Exists			(class CSG_Shapes *pShapes);
-	class CWKSP_Shapes *		Add				(class CSG_Shapes *pShapes);
-	class CSG_Shapes *			Get_byFileName	(const wxChar *File_Name);
-
-	bool						Update			(class CSG_Shapes *pShapes, class CSG_Parameters *pParameters);
-	bool						Update_Views	(class CSG_Shapes *pShapes);
-	bool						Show			(class CSG_Shapes *pShapes, int Map_Mode);
-	bool						asImage			(class CSG_Shapes *pShapes, class CSG_Grid *pImage);
-
-	bool						Get_Colors		(class CSG_Shapes *pShapes, class CSG_Colors *pColors);
-	bool						Set_Colors		(class CSG_Shapes *pShapes, class CSG_Colors *pColors);
-
-
-private:
-
-	class CWKSP_Shapes_Type *	_Get_Shapes_Type(int Shape_Type);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_Manager_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                WKSP_Shapes_Manager.h                  //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_Manager_H
+#define _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_Manager_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "wksp_base_manager.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CWKSP_Shapes_Manager : public CWKSP_Base_Manager
+{
+public:
+	CWKSP_Shapes_Manager(void);
+	virtual ~CWKSP_Shapes_Manager(void);
+
+	virtual TWKSP_Item			Get_Type		(void)	{	return( WKSP_ITEM_Shapes_Manager );	}
+
+	virtual wxString			Get_Name		(void);
+	virtual wxString			Get_Description	(void);
+
+	virtual wxMenu *			Get_Menu		(void);
+
+	virtual bool				On_Command		(int Cmd_ID);
+
+	class CWKSP_Shapes_Type *	Get_Shapes_Type	(int Shape_Type);
+	class CWKSP_Shapes *		Get_Shapes		(class CSG_Shapes *pShapes);
+
+	bool						Exists			(class CSG_Shapes *pShapes);
+	class CWKSP_Shapes *		Add				(class CSG_Shapes *pShapes);
+	class CSG_Shapes *			Get_byFileName	(const wxChar *File_Name);
+
+	bool						Update			(class CSG_Shapes *pShapes, class CSG_Parameters *pParameters);
+	bool						Update_Views	(class CSG_Shapes *pShapes);
+	bool						Show			(class CSG_Shapes *pShapes, int Map_Mode);
+	bool						asImage			(class CSG_Shapes *pShapes, class CSG_Grid *pImage);
+
+	bool						Get_Colors		(class CSG_Shapes *pShapes, class CSG_Colors *pColors);
+	bool						Set_Colors		(class CSG_Shapes *pShapes, class CSG_Colors *pColors);
+
+
+private:
+
+	class CWKSP_Shapes_Type *	_Get_Shapes_Type(int Shape_Type);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_Shapes_Manager_H
diff --git a/src/saga_core/saga_gui/wksp_shapes_point.cpp b/src/saga_core/saga_gui/wksp_shapes_point.cpp
index 651f09e..fa02a6e 100644
--- a/src/saga_core/saga_gui/wksp_shapes_point.cpp
+++ b/src/saga_core/saga_gui/wksp_shapes_point.cpp
@@ -517,16 +517,16 @@ void CWKSP_Shapes_Point::_Draw_Label(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape)
 	{
 		if( m_Label_Angle == 0.0 )
 		{
-			Draw_Text(dc_Map.dc, m_Label_Align, p.x, p.y, pShape->asString(m_iLabel, -2));
+			Draw_Text(dc_Map.dc, m_Label_Align, p.x, p.y, pShape->asString(m_iLabel, m_Label_Prec));
 		}
 		else
 		{
-			Draw_Text(dc_Map.dc, m_Label_Align, p.x, p.y, m_Label_Angle, pShape->asString(m_iLabel, -2));
+			Draw_Text(dc_Map.dc, m_Label_Align, p.x, p.y, m_Label_Angle, pShape->asString(m_iLabel, m_Label_Prec));
 		}
 	}
 	else
 	{
-		Draw_Text(dc_Map.dc, m_Label_Align, p.x, p.y, pShape->asDouble(m_iLabel_Angle), pShape->asString(m_iLabel, -2));
+		Draw_Text(dc_Map.dc, m_Label_Align, p.x, p.y, pShape->asDouble(m_iLabel_Angle), pShape->asString(m_iLabel, m_Label_Prec));
 	}
 }
 
diff --git a/src/saga_core/saga_gui/wksp_shapes_points.cpp b/src/saga_core/saga_gui/wksp_shapes_points.cpp
index 12c60b0..b80b7c4 100644
--- a/src/saga_core/saga_gui/wksp_shapes_points.cpp
+++ b/src/saga_core/saga_gui/wksp_shapes_points.cpp
@@ -177,7 +177,7 @@ void CWKSP_Shapes_Points::_Draw_Label(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape)
 {
 	TSG_Point_Int	p(dc_Map.World2DC(pShape->Get_Extent().Get_Center()));
 
-	dc_Map.dc.DrawText(pShape->asString(m_iLabel, -2), p.x, p.y);
+	dc_Map.dc.DrawText(pShape->asString(m_iLabel, m_Label_Prec), p.x, p.y);
 }
 
 
diff --git a/src/saga_core/saga_gui/wksp_shapes_polygon.cpp b/src/saga_core/saga_gui/wksp_shapes_polygon.cpp
index 7b0a6dc..a4bb775 100644
--- a/src/saga_core/saga_gui/wksp_shapes_polygon.cpp
+++ b/src/saga_core/saga_gui/wksp_shapes_polygon.cpp
@@ -204,7 +204,7 @@ bool CWKSP_Shapes_Polygon::Get_Style(wxPen &Pen, wxBrush &Brush, bool &bOutline,
 		}
 		else
 		{
-			pName->Printf(m_pShapes->Get_Field_Name(m_iColor));
+			*pName	= m_pShapes->Get_Field_Name(m_iColor);
 		}
 	}
 
@@ -286,7 +286,7 @@ void CWKSP_Shapes_Polygon::_Draw_Label(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape)
 		p.x	= dc_Map.xWorld2DC(p.x);
 		p.y	= dc_Map.yWorld2DC(p.y);
 
-		Draw_Text(dc_Map.dc, TEXTALIGN_CENTER, (int)p.x, (int)p.y, pShape->asString(m_iLabel, -2));
+		Draw_Text(dc_Map.dc, TEXTALIGN_CENTER, (int)p.x, (int)p.y, pShape->asString(m_iLabel, m_Label_Prec));
 	}
 	else
 	{
@@ -298,7 +298,7 @@ void CWKSP_Shapes_Polygon::_Draw_Label(CWKSP_Map_DC &dc_Map, CSG_Shape *pShape)
 				p.x	= dc_Map.xWorld2DC(p.x);
 				p.y	= dc_Map.yWorld2DC(p.y);
 
-				Draw_Text(dc_Map.dc, TEXTALIGN_CENTER, (int)p.x, (int)p.y, pShape->asString(m_iLabel, -2));
+				Draw_Text(dc_Map.dc, TEXTALIGN_CENTER, (int)p.x, (int)p.y, pShape->asString(m_iLabel, m_Label_Prec));
 			}
 		}
 	}
diff --git a/src/saga_core/saga_gui/wksp_table.cpp b/src/saga_core/saga_gui/wksp_table.cpp
index c4c6262..2e8c741 100644
--- a/src/saga_core/saga_gui/wksp_table.cpp
+++ b/src/saga_core/saga_gui/wksp_table.cpp
@@ -132,41 +132,32 @@ wxString CWKSP_Table::Get_Name(void)
 }
 
 //---------------------------------------------------------
+#define DESC_ADD_STR(label, value)	s.Append(wxString::Format(wxT("<tr><td valign=\"top\">%s</td><td valign=\"top\">%s</td></tr>"), label, value))
+#define DESC_ADD_INT(label, value)	s.Append(wxString::Format(wxT("<tr><td valign=\"top\">%s</td><td valign=\"top\">%d</td></tr>"), label, value))
+
+//---------------------------------------------------------
 wxString CWKSP_Table::Get_Description(void)
 {
 	wxString	s;
 
 	//-----------------------------------------------------
-	s.Append(wxString::Format(wxT("<b>%s</b><table border=\"0\">"),
-		LNG("[CAP] Shapes")
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Name")					, m_pTable->Get_Name()
-	));
+	s	+= wxString::Format(wxT("<b>%s</b>"), LNG("[CAP] Table"));
 
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] File")					, m_pTable->Get_File_Name()
-	));
+	s	+= wxT("<table border=\"0\">");
 
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%d</td></tr>"),
-		LNG("[CAP] Fields")					, m_pTable->Get_Field_Count()
-	));
+	DESC_ADD_STR(LNG("[CAP] Name")		, m_pTable->Get_Name());
+	DESC_ADD_STR(LNG("[CAP] File")		, m_pTable->Get_File_Name());
+	DESC_ADD_INT(LNG("[CAP] Fields")	, m_pTable->Get_Field_Count());
+	DESC_ADD_INT(LNG("[CAP] Records")	, m_pTable->Get_Record_Count());
 
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%d</td></tr>"),
-		LNG("[CAP] Records")				, m_pTable->Get_Record_Count()
-	));
+	s	+= wxT("</table>");
 
-	s.Append(wxT("</table>"));
-
-	//-----------------------------------------------------
-	s.Append(wxString::Format(wxT("<hr><b>%s</b>"), LNG("[CAP] Table Description")));
-	s.Append(Get_TableInfo_asHTML(m_pTable));
+	s	+= Get_TableInfo_asHTML(m_pTable);
 
 	//-----------------------------------------------------
-//	s.Append(wxString::Format(wxT("<hr><b>%s</b><font size=\"-1\">"), LNG("[CAP] Data History")));
-//	s.Append(m_pTable->Get_History().Get_HTML());
-//	s.Append(wxString::Format(wxT("</font")));
+//	s	+= wxString::Format(wxT("<hr><b>%s</b><font size=\"-1\">"), LNG("[CAP] Data History"));
+//	s	+= m_pTable->Get_History().Get_HTML();
+//	s	+= wxString::Format(wxT("</font"));
 
 	//-----------------------------------------------------
 	return( s );
diff --git a/src/saga_core/saga_gui/wksp_tin.cpp b/src/saga_core/saga_gui/wksp_tin.cpp
index 3362b13..7f63df3 100644
--- a/src/saga_core/saga_gui/wksp_tin.cpp
+++ b/src/saga_core/saga_gui/wksp_tin.cpp
@@ -1,633 +1,618 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                    WKSP_TIN.cpp                       //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "res_commands.h"
-
-#include "helper.h"
-
-#include "wksp_map_control.h"
-
-#include "wksp_layer_classify.h"
-
-#include "wksp_tin.h"
-#include "wksp_table.h"
-
-#include "view_scatterplot.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CWKSP_TIN::CWKSP_TIN(CSG_TIN *pTIN)
-	: CWKSP_Layer(pTIN)
-{
-	m_pTIN		= pTIN;
-	m_pTable	= new CWKSP_Table(m_pTIN, this);
-
-	m_Edit_Attributes.Destroy();
-	m_Edit_Attributes.Add_Field(LNG("[CAP] Name") , SG_DATATYPE_String);
-	m_Edit_Attributes.Add_Field(LNG("[CAP] Value"), SG_DATATYPE_String);
-
-	Create_Parameters();
-}
-
-//---------------------------------------------------------
-CWKSP_TIN::~CWKSP_TIN(void)
-{
-	delete(m_pTable);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-wxString CWKSP_TIN::Get_Name(void)
-{
-	return( wxString::Format(wxT("%02d. %s"), 1 + Get_ID(), m_pTIN->Get_Name()) );
-}
-
-//---------------------------------------------------------
-wxString CWKSP_TIN::Get_Description(void)
-{
-	wxString	s;
-
-	//-----------------------------------------------------
-	s.Append(wxString::Format(wxT("<b>%s</b><table border=\"0\">"),
-		LNG("[CAP] TIN")
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Name")					, m_pTIN->Get_Name()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] File")					, m_pTIN->Get_File_Name()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%s</td></tr>"),
-		LNG("[CAP] Projection")				, m_pTIN->Get_Projection().Get_Name().c_str()
-	));
-
-	s.Append(wxString::Format(wxT("<tr><td>%s</td><td>%d</td></tr>"),
-		LNG("[CAP] Points")					, m_pTIN->Get_Node_Count()
-	));
-
-	s.Append(wxT("</table>"));
-
-	//-----------------------------------------------------
-	s.Append(wxString::Format(wxT("<hr><b>%s</b>"), LNG("[CAP] Table Description")));
-	s.Append(Get_TableInfo_asHTML(m_pTIN));
-
-	//-----------------------------------------------------
-//	s.Append(wxString::Format(wxT("<hr><b>%s</b><font size=\"-1\">"), LNG("[CAP] Data History")));
-//	s.Append(m_pTIN->Get_History().Get_HTML());
-//	s.Append(wxString::Format(wxT("</font")));
-
-	//-----------------------------------------------------
-	return( s );
-}
-
-//---------------------------------------------------------
-wxMenu * CWKSP_TIN::Get_Menu(void)
-{
-	wxMenu	*pMenu;
-
-	pMenu	= new wxMenu(m_pTIN->Get_Name());
-
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_CLOSE);
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_TIN_SHOW);
-	CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_SETTINGS_COPY);
-
-	pMenu->AppendSeparator();
-
-	wxMenu	*pTable	= new wxMenu(LNG("[MNU] Table"));
-	CMD_Menu_Add_Item(pTable,  true, ID_CMD_TABLES_SHOW);
-	CMD_Menu_Add_Item(pTable,  true, ID_CMD_TABLES_DIAGRAM);
-	CMD_Menu_Add_Item(pTable, false, ID_CMD_TABLES_SCATTERPLOT);
-	pMenu->Append(ID_CMD_WKSP_FIRST, LNG("[MNU] Attributes"), pTable);
-
-	return( pMenu );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_TIN::On_Command(int Cmd_ID)
-{
-	switch( Cmd_ID )
-	{
-	default:
-		return( CWKSP_Layer::On_Command(Cmd_ID) );
-
-	case ID_CMD_TABLES_SHOW:
-		m_pTable->Toggle_View();
-		break;
-
-	case ID_CMD_TABLES_DIAGRAM:
-		m_pTable->Toggle_Diagram();
-		break;
-
-	case ID_CMD_TABLES_SCATTERPLOT:
-		Add_ScatterPlot(Get_Table()->Get_Table());
-		break;
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CWKSP_TIN::On_Command_UI(wxUpdateUIEvent &event)
-{
-	switch( event.GetId() )
-	{
-	default:
-		return( CWKSP_Layer::On_Command_UI(event) );
-
-	case ID_CMD_TABLES_SHOW:
-		event.Check(m_pTable->Get_View() != NULL);
-		break;
-
-	case ID_CMD_TABLES_DIAGRAM:
-		event.Check(m_pTable->Get_Diagram() != NULL);
-		break;
-	}
-
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_TIN::On_Create_Parameters(void)
-{
-	//-----------------------------------------------------
-	// General...
-
-	m_Parameters.Add_Choice(
-		m_Parameters("NODE_METRIC")		, "COLORS_ATTRIB"			, LNG("[CAP] Attribute"),
-		LNG(""),
-		LNG("")
-	);
-
-	//-----------------------------------------------------
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_DISPLAY")	, "DISPLAY_POINTS"			, LNG("[CAP] Show Nodes"),
-		LNG(""),
-		PARAMETER_TYPE_Bool, false
-	);
-
-	//-----------------------------------------------------
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_DISPLAY")	, "DISPLAY_EDGES"			, LNG("[CAP] Show Edges"),
-		LNG(""),
-		PARAMETER_TYPE_Bool, true
-	);
-
-	//-----------------------------------------------------
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_DISPLAY")	, "DISPLAY_TRIANGES"		, LNG("[CAP] Show Filled"),
-		LNG(""),
-		PARAMETER_TYPE_Bool, true
-	);
-
-	//-----------------------------------------------------
-	m_Parameters.Add_Value(
-		m_Parameters("NODE_DISPLAY")	, "DISPLAY_TRANSPARENCY"	, LNG("[CAP] Transparency [%]"),
-		LNG(""),
-		PARAMETER_TYPE_Double, 0.0, 0.0, true, 100.0, true
-	);
-
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_TIN::On_DataObject_Changed(void)
-{
-	int			i;
-	wxString	sChoices;
-
-	for(i=0; i<m_pTIN->Get_Field_Count(); i++)
-	{
-		sChoices.Append(wxString::Format(wxT("%s|"), m_pTIN->Get_Field_Name(i)));
-	}
-
-	m_Parameters("COLORS_ATTRIB")->asChoice()->Set_Items(sChoices);
-}
-
-//---------------------------------------------------------
-void CWKSP_TIN::On_Parameters_Changed(void)
-{
-	if( (m_Color_Field = m_Parameters("COLORS_ATTRIB")->asInt()) >= m_pTIN->Get_Field_Count() )
-	{
-		m_Color_Field	= -1;
-	}
-
-	long	DefColor	= m_Parameters("UNISYMBOL_COLOR")->asColor();
-	m_Color_Pen		= wxColour(SG_GET_R(DefColor), SG_GET_G(DefColor), SG_GET_B(DefColor));
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int CWKSP_TIN::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
-{
-	if(	!SG_STR_CMP(pParameter->Get_Identifier(), wxT("COLORS_ATTRIB")) )
-	{
-		int		zField	= pParameter->asInt();
-
-		pParameters->Get_Parameter("METRIC_ZRANGE")->asRange()->Set_Range(
-			m_pTIN->Get_Minimum(zField),
-			m_pTIN->Get_Maximum(zField)
-		);
-	}
-
-	return( 1 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-wxString CWKSP_TIN::Get_Value(CSG_Point ptWorld, double Epsilon)
-{
-	return( LNG("") );
-}
-
-//---------------------------------------------------------
-double CWKSP_TIN::Get_Value_Range(void)
-{
-	return( m_Color_Field >= 0 ? m_pTIN->Get_Range(m_Color_Field) : 0.0 );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_TIN::asImage(CSG_Grid *pImage)
-{
-	return( false );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CWKSP_TIN::On_Edit_On_Mouse_Up(CSG_Point Point, double ClientToWorld, int Key)
-{
-	CSG_Rect	rWorld(m_Edit_Mouse_Down, Point);
-
-	if( rWorld.Get_XRange() == 0.0 && rWorld.Get_YRange() == 0.0 )
-	{
-		rWorld.Inflate(2.0 * ClientToWorld, false);
-	}
-
-	return( true );
-}
-
-//---------------------------------------------------------
-bool CWKSP_TIN::On_Edit_Set_Attributes(void)
-{
-	return( true );
-}
-
-//---------------------------------------------------------
-TSG_Rect CWKSP_TIN::On_Edit_Get_Extent(void)
-{
-	return( m_pTIN->Get_Extent() );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_TIN::On_Draw(CWKSP_Map_DC &dc_Map, bool bEdit)
-{
-	if( Get_Extent().Intersects(dc_Map.m_rWorld) != INTERSECTION_None )
-	{
-		if( m_Color_Field >= 0 )
-		{
-			_Draw_Triangles	(dc_Map);
-		}
-
-		if( m_Parameters("DISPLAY_EDGES")	->asBool() )
-		{
-			_Draw_Edges		(dc_Map);
-		}
-
-		if( m_Parameters("DISPLAY_POINTS")	->asBool() )
-		{
-			_Draw_Points	(dc_Map);
-		}
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-void CWKSP_TIN::_Draw_Points(CWKSP_Map_DC &dc_Map)
-{
-	for(int i=0; i<m_pTIN->Get_Node_Count(); i++)
-	{
-		TSG_Point_Int	Point	= dc_Map.World2DC(m_pTIN->Get_Node(i)->Get_Point());
-
-		dc_Map.dc.DrawCircle(Point.x, Point.y, 5);
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_TIN::_Draw_Edges(CWKSP_Map_DC &dc_Map)
-{
-	for(int i=0; i<m_pTIN->Get_Edge_Count(); i++)
-	{
-		TSG_Point_Int	Point[2];
-		CSG_TIN_Edge	*pEdge	= m_pTIN->Get_Edge(i);
-
-		Point[0]	= dc_Map.World2DC(pEdge->Get_Node(0)->Get_Point());
-		Point[1]	= dc_Map.World2DC(pEdge->Get_Node(1)->Get_Point());
-
-		dc_Map.dc.DrawLine(Point[0].x, Point[0].y, Point[1].x, Point[1].y);
-	}
-}
-
-//---------------------------------------------------------
-void CWKSP_TIN::_Draw_Triangles(CWKSP_Map_DC &dc_Map)
-{
-	if(	m_Parameters("DISPLAY_TRIANGES")->asBool()
-	&&	dc_Map.IMG_Draw_Begin(m_Parameters("DISPLAY_TRANSPARENCY")->asDouble() / 100.0) )
-	{
-		for(int iTriangle=0; iTriangle<m_pTIN->Get_Triangle_Count(); iTriangle++)
-		{
-			CSG_TIN_Triangle	*pTriangle	= m_pTIN->Get_Triangle(iTriangle);
-
-			if( dc_Map.m_rWorld.Intersects(pTriangle->Get_Extent()) != INTERSECTION_None )
-			{
-				TPoint	p[3];
-
-				for(int iNode=0; iNode<3; iNode++)
-				{
-					CSG_TIN_Node	*pNode	= pTriangle->Get_Node(iNode);
-					TSG_Point_Int	Point	= dc_Map.World2DC(pNode->Get_Point());
-
-					p[iNode].x	= Point.x;
-					p[iNode].y	= Point.y;
-					p[iNode].z	= pNode->asDouble(m_Color_Field);
-				}
-
-				_Draw_Triangle(dc_Map, p);
-			}
-		}
-
-		dc_Map.IMG_Draw_End();
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#define SORT_POINTS_Y(a, b)	if( p[a].y < p[b].y ) {	pp = p[a]; p[a] = p[b]; p[b] = pp;	}
-#define SORT_POINTS_X(a, b)	if( p[a].x < p[b].x ) {	pp = p[a]; p[a] = p[b]; p[b] = pp;	}
-
-#define DRAW_PIXEL(x, y, z)	if( m_pClassify->Get_Class_Color_byValue(z, Color) )	{	dc_Map.IMG_Set_Pixel(x, y, Color);	}
-
-//---------------------------------------------------------
-void CWKSP_TIN::_Draw_Triangle(CWKSP_Map_DC &dc_Map, TPoint p[3])
-{
-	int		i, j, y, y_j, Color;
-	double	x, x_a, dx, dx_a, dy, z, z_a, dz, dz_a;
-	TPoint	pp;
-
-	//-----------------------------------------------------
-	SORT_POINTS_Y(1, 0);
-	SORT_POINTS_Y(2, 0);
-	SORT_POINTS_Y(2, 1);
-
-	//-----------------------------------------------------
-	if( p[2].y == p[0].y )
-	{
-		if( p[0].y >= 0 && p[0].y < dc_Map.m_rDC.GetHeight() )
-		{
-			SORT_POINTS_X(1, 0);
-			SORT_POINTS_X(2, 0);
-			SORT_POINTS_X(2, 1);
-
-			//---------------------------------------------
-			if( p[2].x == p[0].x )
-			{
-				if(	p[0].x >= 0 && p[0].x < dc_Map.m_rDC.GetWidth() )
-				{
-					DRAW_PIXEL(p[0].x, p[0].y, p[0].z > p[1].z
-						? (p[0].z > p[2].z ? p[0].z : p[2].z)
-						: (p[1].z > p[2].z ? p[1].z : p[2].z)
-					);
-				}
-			}
-
-			//---------------------------------------------
-			else
-			{
-				_Draw_Triangle_Line(dc_Map, p[0].x, p[1].x, p[0].y, p[0].z, p[1].z);
-				_Draw_Triangle_Line(dc_Map, p[1].x, p[2].x, p[0].y, p[1].z, p[2].z);
-			}
-		}
-	}
-
-	//-----------------------------------------------------
-	else if( !((p[0].y < 0 && p[2].y < 0) || (p[0].y >= dc_Map.m_rDC.GetHeight() && p[2].y >= dc_Map.m_rDC.GetHeight())) )
-	{
-		dy		=  p[2].y - p[0].y;
-		dx_a	= (p[2].x - p[0].x) / dy;
-		dz_a	= (p[2].z - p[0].z) / dy;
-		x_a		=  p[0].x;
-		z_a		=  p[0].z;
-
-		for(i=0, j=1; i<2; i++, j++)
-		{
-			if( (dy	=  p[j].y - p[i].y) > 0.0 )
-			{
-				dx		= (p[j].x - p[i].x) / dy;
-				dz		= (p[j].z - p[i].z) / dy;
-				x		=  p[i].x;
-				z		=  p[i].z;
-
-				if( (y = p[i].y) < 0 )
-				{
-					x		-= y * dx;
-					z		-= y * dz;
-					y		 = 0;
-					x_a		 = p[0].x - p[0].y * dx_a;
-					z_a		 = p[0].z - p[0].y * dz_a;
-				}
-
-				if( (y_j = p[j].y) > dc_Map.m_rDC.GetHeight() )
-				{
-					y_j		= dc_Map.m_rDC.GetHeight();
-				}
-
-				for( ; y<y_j; y++, x+=dx, z+=dz, x_a+=dx_a, z_a+=dz_a)
-				{
-					if( x < x_a )
-					{
-						_Draw_Triangle_Line(dc_Map, (int)x, (int)x_a, y, z, z_a);
-					}
-					else
-					{
-						_Draw_Triangle_Line(dc_Map, (int)x_a, (int)x, y, z_a, z);
-					}
-				}
-			}
-		}
-	}
-}
-
-//---------------------------------------------------------
-inline void CWKSP_TIN::_Draw_Triangle_Line(CWKSP_Map_DC &dc_Map, int xa, int xb, int y, double za, double zb)
-{
-	int		Color;
-	double	dz;
-
-	if( (dz = xb - xa) > 0.0 )
-	{
-		dz	= (zb - za) / dz;
-
-		if( xa < 0 )
-		{
-			za	-= dz * xa;
-			xa	 = 0;
-		}
-
-		if( xb >= dc_Map.m_rDC.GetWidth() )
-		{
-			xb	= dc_Map.m_rDC.GetWidth() - 1;
-		}
-
-		for(int x=xa; x<=xb; x++, za+=dz)
-		{
-			DRAW_PIXEL(x, y, za);
-		}
-	}
-	else if( xa >= 0 && xa < dc_Map.m_rDC.GetWidth() )
-	{
-		DRAW_PIXEL(xa, y, za);
-	}
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                    WKSP_TIN.cpp                       //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "res_commands.h"
+
+#include "helper.h"
+
+#include "wksp_map_control.h"
+
+#include "wksp_layer_classify.h"
+
+#include "wksp_tin.h"
+#include "wksp_table.h"
+
+#include "view_scatterplot.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CWKSP_TIN::CWKSP_TIN(CSG_TIN *pTIN)
+	: CWKSP_Layer(pTIN)
+{
+	m_pTIN		= pTIN;
+	m_pTable	= new CWKSP_Table(m_pTIN, this);
+
+	m_Edit_Attributes.Destroy();
+	m_Edit_Attributes.Add_Field(LNG("[CAP] Name") , SG_DATATYPE_String);
+	m_Edit_Attributes.Add_Field(LNG("[CAP] Value"), SG_DATATYPE_String);
+
+	Create_Parameters();
+}
+
+//---------------------------------------------------------
+CWKSP_TIN::~CWKSP_TIN(void)
+{
+	delete(m_pTable);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define DESC_ADD_STR(label, value)	s.Append(wxString::Format(wxT("<tr><td valign=\"top\">%s</td><td valign=\"top\">%s</td></tr>"), label, value))
+#define DESC_ADD_INT(label, value)	s.Append(wxString::Format(wxT("<tr><td valign=\"top\">%s</td><td valign=\"top\">%d</td></tr>"), label, value))
+
+//---------------------------------------------------------
+wxString CWKSP_TIN::Get_Description(void)
+{
+	wxString	s;
+
+	//-----------------------------------------------------
+	s	+= wxString::Format(wxT("<b>%s</b><table border=\"0\">"), LNG("[CAP] TIN"));
+
+	s	+= wxT("<table border=\"0\">");
+
+	DESC_ADD_STR(LNG("[CAP] Name")			, m_pTIN->Get_Name());
+	DESC_ADD_STR(LNG("[CAP] File")			, m_pTIN->Get_File_Name());
+	DESC_ADD_STR(LNG("[CAP] Projection")	, m_pTIN->Get_Projection().Get_Description().c_str());
+	DESC_ADD_INT(LNG("[CAP] Points")		, m_pTIN->Get_Node_Count());
+
+	s	+= wxT("</table>");
+
+	s	+= Get_TableInfo_asHTML(m_pTIN);
+
+	//-----------------------------------------------------
+//	s	+= wxString::Format(wxT("<hr><b>%s</b><font size=\"-1\">"), LNG("[CAP] Data History"));
+//	s	+= m_pTIN->Get_History().Get_HTML();
+//	s	+= wxString::Format(wxT("</font"));
+
+	//-----------------------------------------------------
+	return( s );
+}
+
+//---------------------------------------------------------
+wxMenu * CWKSP_TIN::Get_Menu(void)
+{
+	wxMenu	*pMenu;
+
+	pMenu	= new wxMenu(m_pTIN->Get_Name());
+
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_CLOSE);
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_TIN_SHOW);
+	CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_SETTINGS_COPY);
+
+	pMenu->AppendSeparator();
+
+	wxMenu	*pTable	= new wxMenu(LNG("[MNU] Table"));
+	CMD_Menu_Add_Item(pTable,  true, ID_CMD_TABLES_SHOW);
+	CMD_Menu_Add_Item(pTable,  true, ID_CMD_TABLES_DIAGRAM);
+	CMD_Menu_Add_Item(pTable, false, ID_CMD_TABLES_SCATTERPLOT);
+	pMenu->Append(ID_CMD_WKSP_FIRST, LNG("[MNU] Attributes"), pTable);
+
+	return( pMenu );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_TIN::On_Command(int Cmd_ID)
+{
+	switch( Cmd_ID )
+	{
+	default:
+		return( CWKSP_Layer::On_Command(Cmd_ID) );
+
+	case ID_CMD_TABLES_SHOW:
+		m_pTable->Toggle_View();
+		break;
+
+	case ID_CMD_TABLES_DIAGRAM:
+		m_pTable->Toggle_Diagram();
+		break;
+
+	case ID_CMD_TABLES_SCATTERPLOT:
+		Add_ScatterPlot(Get_Table()->Get_Table());
+		break;
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CWKSP_TIN::On_Command_UI(wxUpdateUIEvent &event)
+{
+	switch( event.GetId() )
+	{
+	default:
+		return( CWKSP_Layer::On_Command_UI(event) );
+
+	case ID_CMD_TABLES_SHOW:
+		event.Check(m_pTable->Get_View() != NULL);
+		break;
+
+	case ID_CMD_TABLES_DIAGRAM:
+		event.Check(m_pTable->Get_Diagram() != NULL);
+		break;
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_TIN::On_Create_Parameters(void)
+{
+	//-----------------------------------------------------
+	// General...
+
+	m_Parameters.Add_Choice(
+		m_Parameters("NODE_METRIC")		, "COLORS_ATTRIB"			, LNG("[CAP] Attribute"),
+		LNG(""),
+		LNG("")
+	);
+
+	//-----------------------------------------------------
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_DISPLAY")	, "DISPLAY_POINTS"			, LNG("[CAP] Show Nodes"),
+		LNG(""),
+		PARAMETER_TYPE_Bool, false
+	);
+
+	//-----------------------------------------------------
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_DISPLAY")	, "DISPLAY_EDGES"			, LNG("[CAP] Show Edges"),
+		LNG(""),
+		PARAMETER_TYPE_Bool, true
+	);
+
+	//-----------------------------------------------------
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_DISPLAY")	, "DISPLAY_TRIANGES"		, LNG("[CAP] Show Filled"),
+		LNG(""),
+		PARAMETER_TYPE_Bool, true
+	);
+
+	//-----------------------------------------------------
+	m_Parameters.Add_Value(
+		m_Parameters("NODE_DISPLAY")	, "DISPLAY_TRANSPARENCY"	, LNG("[CAP] Transparency [%]"),
+		LNG(""),
+		PARAMETER_TYPE_Double, 0.0, 0.0, true, 100.0, true
+	);
+
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_TIN::On_DataObject_Changed(void)
+{
+	int			i;
+	wxString	sChoices;
+
+	for(i=0; i<m_pTIN->Get_Field_Count(); i++)
+	{
+		sChoices.Append(wxString::Format(wxT("%s|"), m_pTIN->Get_Field_Name(i)));
+	}
+
+	m_Parameters("COLORS_ATTRIB")->asChoice()->Set_Items(sChoices);
+}
+
+//---------------------------------------------------------
+void CWKSP_TIN::On_Parameters_Changed(void)
+{
+	if( (m_Color_Field = m_Parameters("COLORS_ATTRIB")->asInt()) >= m_pTIN->Get_Field_Count() )
+	{
+		m_Color_Field	= -1;
+	}
+
+	long	DefColor	= m_Parameters("UNISYMBOL_COLOR")->asColor();
+	m_Color_Pen		= wxColour(SG_GET_R(DefColor), SG_GET_G(DefColor), SG_GET_B(DefColor));
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CWKSP_TIN::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), wxT("COLORS_ATTRIB")) )
+	{
+		int		zField	= pParameter->asInt();
+
+		pParameters->Get_Parameter("METRIC_ZRANGE")->asRange()->Set_Range(
+			m_pTIN->Get_Minimum(zField),
+			m_pTIN->Get_Maximum(zField)
+		);
+	}
+
+	return( 1 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+wxString CWKSP_TIN::Get_Value(CSG_Point ptWorld, double Epsilon)
+{
+	return( LNG("") );
+}
+
+//---------------------------------------------------------
+double CWKSP_TIN::Get_Value_Range(void)
+{
+	return( m_Color_Field >= 0 ? m_pTIN->Get_Range(m_Color_Field) : 0.0 );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_TIN::asImage(CSG_Grid *pImage)
+{
+	return( false );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CWKSP_TIN::On_Edit_On_Mouse_Up(CSG_Point Point, double ClientToWorld, int Key)
+{
+	CSG_Rect	rWorld(m_Edit_Mouse_Down, Point);
+
+	if( rWorld.Get_XRange() == 0.0 && rWorld.Get_YRange() == 0.0 )
+	{
+		rWorld.Inflate(2.0 * ClientToWorld, false);
+	}
+
+	return( true );
+}
+
+//---------------------------------------------------------
+bool CWKSP_TIN::On_Edit_Set_Attributes(void)
+{
+	return( true );
+}
+
+//---------------------------------------------------------
+TSG_Rect CWKSP_TIN::On_Edit_Get_Extent(void)
+{
+	return( m_pTIN->Get_Extent() );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_TIN::On_Draw(CWKSP_Map_DC &dc_Map, bool bEdit)
+{
+	if( Get_Extent().Intersects(dc_Map.m_rWorld) != INTERSECTION_None )
+	{
+		if( m_Color_Field >= 0 )
+		{
+			_Draw_Triangles	(dc_Map);
+		}
+
+		if( m_Parameters("DISPLAY_EDGES")	->asBool() )
+		{
+			_Draw_Edges		(dc_Map);
+		}
+
+		if( m_Parameters("DISPLAY_POINTS")	->asBool() )
+		{
+			_Draw_Points	(dc_Map);
+		}
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+void CWKSP_TIN::_Draw_Points(CWKSP_Map_DC &dc_Map)
+{
+	for(int i=0; i<m_pTIN->Get_Node_Count(); i++)
+	{
+		TSG_Point_Int	Point	= dc_Map.World2DC(m_pTIN->Get_Node(i)->Get_Point());
+
+		dc_Map.dc.DrawCircle(Point.x, Point.y, 5);
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_TIN::_Draw_Edges(CWKSP_Map_DC &dc_Map)
+{
+	for(int i=0; i<m_pTIN->Get_Edge_Count(); i++)
+	{
+		TSG_Point_Int	Point[2];
+		CSG_TIN_Edge	*pEdge	= m_pTIN->Get_Edge(i);
+
+		Point[0]	= dc_Map.World2DC(pEdge->Get_Node(0)->Get_Point());
+		Point[1]	= dc_Map.World2DC(pEdge->Get_Node(1)->Get_Point());
+
+		dc_Map.dc.DrawLine(Point[0].x, Point[0].y, Point[1].x, Point[1].y);
+	}
+}
+
+//---------------------------------------------------------
+void CWKSP_TIN::_Draw_Triangles(CWKSP_Map_DC &dc_Map)
+{
+	if(	m_Parameters("DISPLAY_TRIANGES")->asBool()
+	&&	dc_Map.IMG_Draw_Begin(m_Parameters("DISPLAY_TRANSPARENCY")->asDouble() / 100.0) )
+	{
+		for(int iTriangle=0; iTriangle<m_pTIN->Get_Triangle_Count(); iTriangle++)
+		{
+			CSG_TIN_Triangle	*pTriangle	= m_pTIN->Get_Triangle(iTriangle);
+
+			if( dc_Map.m_rWorld.Intersects(pTriangle->Get_Extent()) != INTERSECTION_None )
+			{
+				TPoint	p[3];
+
+				for(int iNode=0; iNode<3; iNode++)
+				{
+					CSG_TIN_Node	*pNode	= pTriangle->Get_Node(iNode);
+					TSG_Point_Int	Point	= dc_Map.World2DC(pNode->Get_Point());
+
+					p[iNode].x	= Point.x;
+					p[iNode].y	= Point.y;
+					p[iNode].z	= pNode->asDouble(m_Color_Field);
+				}
+
+				_Draw_Triangle(dc_Map, p);
+			}
+		}
+
+		dc_Map.IMG_Draw_End();
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#define SORT_POINTS_Y(a, b)	if( p[a].y < p[b].y ) {	pp = p[a]; p[a] = p[b]; p[b] = pp;	}
+#define SORT_POINTS_X(a, b)	if( p[a].x < p[b].x ) {	pp = p[a]; p[a] = p[b]; p[b] = pp;	}
+
+#define DRAW_PIXEL(x, y, z)	if( m_pClassify->Get_Class_Color_byValue(z, Color) )	{	dc_Map.IMG_Set_Pixel(x, y, Color);	}
+
+//---------------------------------------------------------
+void CWKSP_TIN::_Draw_Triangle(CWKSP_Map_DC &dc_Map, TPoint p[3])
+{
+	int		i, j, y, y_j, Color;
+	double	x, x_a, dx, dx_a, dy, z, z_a, dz, dz_a;
+	TPoint	pp;
+
+	//-----------------------------------------------------
+	SORT_POINTS_Y(1, 0);
+	SORT_POINTS_Y(2, 0);
+	SORT_POINTS_Y(2, 1);
+
+	//-----------------------------------------------------
+	if( p[2].y == p[0].y )
+	{
+		if( p[0].y >= 0 && p[0].y < dc_Map.m_rDC.GetHeight() )
+		{
+			SORT_POINTS_X(1, 0);
+			SORT_POINTS_X(2, 0);
+			SORT_POINTS_X(2, 1);
+
+			//---------------------------------------------
+			if( p[2].x == p[0].x )
+			{
+				if(	p[0].x >= 0 && p[0].x < dc_Map.m_rDC.GetWidth() )
+				{
+					DRAW_PIXEL(p[0].x, p[0].y, p[0].z > p[1].z
+						? (p[0].z > p[2].z ? p[0].z : p[2].z)
+						: (p[1].z > p[2].z ? p[1].z : p[2].z)
+					);
+				}
+			}
+
+			//---------------------------------------------
+			else
+			{
+				_Draw_Triangle_Line(dc_Map, p[0].x, p[1].x, p[0].y, p[0].z, p[1].z);
+				_Draw_Triangle_Line(dc_Map, p[1].x, p[2].x, p[0].y, p[1].z, p[2].z);
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	else if( !((p[0].y < 0 && p[2].y < 0) || (p[0].y >= dc_Map.m_rDC.GetHeight() && p[2].y >= dc_Map.m_rDC.GetHeight())) )
+	{
+		dy		=  p[2].y - p[0].y;
+		dx_a	= (p[2].x - p[0].x) / dy;
+		dz_a	= (p[2].z - p[0].z) / dy;
+		x_a		=  p[0].x;
+		z_a		=  p[0].z;
+
+		for(i=0, j=1; i<2; i++, j++)
+		{
+			if( (dy	=  p[j].y - p[i].y) > 0.0 )
+			{
+				dx		= (p[j].x - p[i].x) / dy;
+				dz		= (p[j].z - p[i].z) / dy;
+				x		=  p[i].x;
+				z		=  p[i].z;
+
+				if( (y = p[i].y) < 0 )
+				{
+					x		-= y * dx;
+					z		-= y * dz;
+					y		 = 0;
+					x_a		 = p[0].x - p[0].y * dx_a;
+					z_a		 = p[0].z - p[0].y * dz_a;
+				}
+
+				if( (y_j = p[j].y) > dc_Map.m_rDC.GetHeight() )
+				{
+					y_j		= dc_Map.m_rDC.GetHeight();
+				}
+
+				for( ; y<y_j; y++, x+=dx, z+=dz, x_a+=dx_a, z_a+=dz_a)
+				{
+					if( x < x_a )
+					{
+						_Draw_Triangle_Line(dc_Map, (int)x, (int)x_a, y, z, z_a);
+					}
+					else
+					{
+						_Draw_Triangle_Line(dc_Map, (int)x_a, (int)x, y, z_a, z);
+					}
+				}
+			}
+		}
+	}
+}
+
+//---------------------------------------------------------
+inline void CWKSP_TIN::_Draw_Triangle_Line(CWKSP_Map_DC &dc_Map, int xa, int xb, int y, double za, double zb)
+{
+	int		Color;
+	double	dz;
+
+	if( (dz = xb - xa) > 0.0 )
+	{
+		dz	= (zb - za) / dz;
+
+		if( xa < 0 )
+		{
+			za	-= dz * xa;
+			xa	 = 0;
+		}
+
+		if( xb >= dc_Map.m_rDC.GetWidth() )
+		{
+			xb	= dc_Map.m_rDC.GetWidth() - 1;
+		}
+
+		for(int x=xa; x<=xb; x++, za+=dz)
+		{
+			DRAW_PIXEL(x, y, za);
+		}
+	}
+	else if( xa >= 0 && xa < dc_Map.m_rDC.GetWidth() )
+	{
+		DRAW_PIXEL(xa, y, za);
+	}
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/saga_core/saga_gui/wksp_tin.h b/src/saga_core/saga_gui/wksp_tin.h
index d09b888..bc5e47e 100644
--- a/src/saga_core/saga_gui/wksp_tin.h
+++ b/src/saga_core/saga_gui/wksp_tin.h
@@ -1,156 +1,155 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    User Interface                     //
-//                                                       //
-//                    Program: SAGA                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                     WKSP_TIN.h                        //
-//                                                       //
-//          Copyright (C) 2005 by Olaf Conrad            //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA 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 this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Goettingen               //
-//                Goldschmidtstr. 5                      //
-//                37077 Goettingen                       //
-//                Germany                                //
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_TIN_H
-#define _HEADER_INCLUDED__SAGA_GUI__WKSP_TIN_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "wksp_layer.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CWKSP_TIN : public CWKSP_Layer
-{
-public:
-	CWKSP_TIN(CSG_TIN *pTIN);
-	virtual ~CWKSP_TIN(void);
-
-	virtual TWKSP_Item			Get_Type				(void)	{	return( WKSP_ITEM_TIN );	}
-
-	virtual wxString			Get_Name				(void);
-	virtual wxString			Get_Description			(void);
-
-	virtual wxMenu *			Get_Menu				(void);
-
-	virtual bool				On_Command				(int Cmd_ID);
-	virtual bool				On_Command_UI			(wxUpdateUIEvent &event);
-
-	CSG_TIN *					Get_TIN					(void)	{	return( m_pTIN );	}
-	class CWKSP_Table *			Get_Table				(void)	{	return( m_pTable );	}
-
-	virtual wxString			Get_Value				(CSG_Point ptWorld, double Epsilon);
-	virtual double				Get_Value_Range			(void);
-
-	bool						asImage					(CSG_Grid *pImage);
-
-
-protected:
-
-	typedef struct
-	{
-		int		x, y;
-
-		double	z;
-	}
-	TPoint;
-
-
-protected:
-
-	int							m_Color_Field, m_Brush_Style;
-
-	wxColour					m_Color_Pen, m_Color_Brush;
-
-	CSG_TIN						*m_pTIN;
-
-	class CWKSP_Table			*m_pTable;
-
-
-	virtual void				On_Create_Parameters	(void);
-	virtual void				On_DataObject_Changed	(void);
-	virtual void				On_Parameters_Changed	(void);
-	virtual int					On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
-
-	virtual bool				On_Edit_On_Mouse_Up		(CSG_Point Point, double ClientToWorld, int Key);
-	virtual bool				On_Edit_Set_Attributes	(void);
-	virtual TSG_Rect			On_Edit_Get_Extent		(void);
-
-	virtual void				On_Draw					(CWKSP_Map_DC &dc_Map, bool bEdit);
-
-	void						_Draw_Points			(CWKSP_Map_DC &dc_Map);
-	void						_Draw_Edges				(CWKSP_Map_DC &dc_Map);
-	void						_Draw_Triangles			(CWKSP_Map_DC &dc_Map);
-	void						_Draw_Triangle			(CWKSP_Map_DC &dc_Map, TPoint p[3]);
-	void						_Draw_Triangle_Line		(CWKSP_Map_DC &dc_Map, int xa, int xb, int y, double za, double zb);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_TIN_H
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    User Interface                     //
+//                                                       //
+//                    Program: SAGA                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//                     WKSP_TIN.h                        //
+//                                                       //
+//          Copyright (C) 2005 by Olaf Conrad            //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA 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 this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Goettingen               //
+//                Goldschmidtstr. 5                      //
+//                37077 Goettingen                       //
+//                Germany                                //
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_TIN_H
+#define _HEADER_INCLUDED__SAGA_GUI__WKSP_TIN_H
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "wksp_layer.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CWKSP_TIN : public CWKSP_Layer
+{
+public:
+	CWKSP_TIN(CSG_TIN *pTIN);
+	virtual ~CWKSP_TIN(void);
+
+	virtual TWKSP_Item			Get_Type				(void)	{	return( WKSP_ITEM_TIN );	}
+
+	virtual wxString			Get_Description			(void);
+
+	virtual wxMenu *			Get_Menu				(void);
+
+	virtual bool				On_Command				(int Cmd_ID);
+	virtual bool				On_Command_UI			(wxUpdateUIEvent &event);
+
+	CSG_TIN *					Get_TIN					(void)	{	return( m_pTIN );	}
+	class CWKSP_Table *			Get_Table				(void)	{	return( m_pTable );	}
+
+	virtual wxString			Get_Value				(CSG_Point ptWorld, double Epsilon);
+	virtual double				Get_Value_Range			(void);
+
+	bool						asImage					(CSG_Grid *pImage);
+
+
+protected:
+
+	typedef struct
+	{
+		int		x, y;
+
+		double	z;
+	}
+	TPoint;
+
+
+protected:
+
+	int							m_Color_Field, m_Brush_Style;
+
+	wxColour					m_Color_Pen, m_Color_Brush;
+
+	CSG_TIN						*m_pTIN;
+
+	class CWKSP_Table			*m_pTable;
+
+
+	virtual void				On_Create_Parameters	(void);
+	virtual void				On_DataObject_Changed	(void);
+	virtual void				On_Parameters_Changed	(void);
+	virtual int					On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+	virtual bool				On_Edit_On_Mouse_Up		(CSG_Point Point, double ClientToWorld, int Key);
+	virtual bool				On_Edit_Set_Attributes	(void);
+	virtual TSG_Rect			On_Edit_Get_Extent		(void);
+
+	virtual void				On_Draw					(CWKSP_Map_DC &dc_Map, bool bEdit);
+
+	void						_Draw_Points			(CWKSP_Map_DC &dc_Map);
+	void						_Draw_Edges				(CWKSP_Map_DC &dc_Map);
+	void						_Draw_Triangles			(CWKSP_Map_DC &dc_Map);
+	void						_Draw_Triangle			(CWKSP_Map_DC &dc_Map, TPoint p[3]);
+	void						_Draw_Triangle_Line		(CWKSP_Map_DC &dc_Map, int xa, int xb, int y, double za, double zb);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#endif // #ifndef _HEADER_INCLUDED__SAGA_GUI__WKSP_TIN_H
diff --git a/src/saga_core/saga_odbc/Makefile.in b/src/saga_core/saga_odbc/Makefile.in
index 3dd7015..41be94a 100644
--- a/src/saga_core/saga_odbc/Makefile.in
+++ b/src/saga_core/saga_odbc/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,
@@ -37,7 +37,13 @@ host_triplet = @host@
 subdir = src/saga_core/saga_odbc
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \
+	$(top_srcdir)/m4/ax_python_devel.m4 \
+	$(top_srcdir)/m4/ax_swig_enable_cxx.m4 \
+	$(top_srcdir)/m4/ax_swig_python.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -107,6 +113,8 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+AX_SWIG_PYTHON_CPPFLAGS = @AX_SWIG_PYTHON_CPPFLAGS@
+AX_SWIG_PYTHON_OPT = @AX_SWIG_PYTHON_OPT@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -156,14 +164,27 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
+PYTHON_VERSION = @PYTHON_VERSION@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
+SWIG = @SWIG@
+SWIG_LIB = @SWIG_LIB@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -207,9 +228,13 @@ mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@

-- 
Saga GIS



More information about the Pkg-grass-devel mailing list